Получение ошибки - Недостаточно подписки или индексы были указаны в COBOL - PullRequest
0 голосов
/ 30 апреля 2020

Я получаю сообщение об ошибке при компиляции модуля COBOL - 'Для параметра PREFER-VALUE of PREFERENCE для MQ82122A-DATA указано недостаточно подписок или индексов. Значение индекса или индекса для каждого отсутствующего индекса или индекса принималось равным 1. '

Код

01 MQ82122A-DATA.
 03 UPDATE-PREFRENCES.
   05 UPDATE-AGREEMENT-PREF.
      07 PREFRENCES.
         10 PREFRENCE            OCCURS 10.
            13 CATEGORY                    PIC X(10).
            13 PREFRENCE-TYPE    OCCURS 5.
               15 PREFER-VALUE             PIC X(100).

MOVE DOCPREF1     TO PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA(1).
MOVE DOCPREF2     TO PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA(2).

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Использование PREFERENCE в качестве классификатора сбивает с толку и может быть ненужным.

Если DOCPREF1 и DOCPREF2 определены как PIC X(100), тогда PREFERENCE в качестве классификатора не требуется, и два должны использоваться индексы: первый для PREFERENCE, второй для PREFERENCE-TYPE.

Если DOCPREF1 и DOCPREF2 определены идентично одному вхождению PREFERENCE, тогда IN PREFER-VALUE должно быть удалено из оператора MOVE и должен использоваться один индекс для PREFERENCE.


С исправлениями орфографии и на основании "комментария" OP в качестве ответа (помеченного и удаленного) решение было добавить второй индекс, аналогичный приведенному ниже в операторах MOVE.

   DATA DIVISION.
   01 DOCPREF1 PIC X(100).
   01 DOCPREF2 PIC X(100).
   01 MQ82122A-DATA.
    03 UPDATE-PREFERENCES.
      05 UPDATE-AGREEMENT-PREF.
         07 PREFERENCES.
            10 PREFERENCE            OCCURS 10.
               13 CATEGORY                    PIC X(10).
               13 PREFERENCE-TYPE    OCCURS 5.
                  15 PREFER-VALUE             PIC X(100).
   PROCEDURE DIVISION.
       MOVE DOCPREF1
           TO PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA(1, 1).
       MOVE DOCPREF2
           TO PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA(1, 2).
1 голос
/ 01 мая 2020

MOVE DOCPREF1 TO PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA(1).

PREFER-VALUE нужен индекс, он находится в группе, которая встречается в 5, в первом предпочтении от DATA (1). Компилятор дает вам первое ЗНАЧЕНИЕ ПРЕДПОЧТЕНИЯ в пределах неоднозначной ссылки на внутреннее поле.

Я бы предпочел

MOVE DOCPREF1 TO PREFER-VALUE IN MQ82122A-DATA(1,1)
MOVE DOCPREF2 TO PREFER-VALUE(1,2)
                       *> or (2,1) depending on what you mean.

Отбросить IN за верхний уровень и просто использовать два индекса: рекомендация. Пример зависит от вопроса, поднятого Риком о компоновке или PI C полей DOCPREF, и может быть совершенно неверным.

Кроме того, GnuCOBOL не будет компилировать эти поля ссылки, как есть.

prompt$ cobc subs.cob
subs.cob: in paragraph 'sample-main':
subs.cob:40: error: 'PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA' is not defined
subs.cob:41: error: 'PREFER-VALUE IN PREFERENCE IN MQ82122A-DATA' is not defined

Это может быть недостатком, но не слишком в этом случае, я не думаю.

...