SAP ABAP Infoset Query - ВЫБЕРИТЕ СУММУ и Дубликаты строк

У меня проблемы с выяснением, с чего начать / как получить правильный вывод. Я очень новичок в кодировании ABAP. Я пытаюсь создать запрос Infoset, и мне нужно немного кодировать в SQ02.

У меня объединены две таблицы: одна - RBKP в качестве заголовка для квитанций счетов, другая - RBDRSEG для позиций документов счетов.

Запрос должен выполняться по некоторым не относящимся к делу параметрам / вариантам, но когда он это делает, он должен - - -

Посмотрите в RBDRSEG все те же номера документов RBKP-BELNR EQ RBDRSEG-RBLNR

При этом RBDRSEG может иметь или не иметь несколько строк результатов для каждого документа.

Мне нужно суммировать поле RBDRSEG-DMBTR для каждого документа № Результат. (Если есть 5 строк для Док. №; DMBTR будет иметь различное значение для каждого, который должен быть подсчитан)

На данный момент мне нужен вывод только для отображения (вместе с другими полями в RBKP) одной строки с суммой поля DMBTR для каждого документа. Нет.

Затем мне нужно иметь другое поле, показывающее разницу поля RBKP - RMWWWR, которое является суммой счета-фактуры и суммой, рассчитанной ранее для этого документа. № для поля ДМБТР.

Если бы вы могли помочь, я был бы невероятно благодарен.

1 ответ

Решение

Сначала вам нужно определить структуру, которая будет содержать ваши данные выбора. Пример структуры для вашего требования может выглядеть следующим образом:

введите описание изображения здесь

не забудьте активировать структуру и убедиться, что она не содержит ошибок.

Теперь создайте отчет выбора. Чтобы использовать отчет в качестве метода выбора данных, вам нужно добавить два комментария, *<QUERY_HEAD> а также *<QUERY_BODY>, *<QUERY_HEAD> должен быть размещен там, где обычно должен начинаться ваш выбор, *<QUERY_BODY> внутри цикла, который помещает выбранные строки во внутреннюю таблицу с тем же именем, что и структура, которую вы определили в SE11.

Я сделал пример отчета, чтобы показать, как это будет работать:

REPORT  ZSTACK_RBKP_INFOSET_QUERY.

tables:
  rbkp,
  ZSTACK_RBKP_INFOSET_STR.

select-OPTIONS:
  so_belnr for rbkp-belnr,
  so_gjahr for rbkp-gjahr.

data:
      itab type standard table of ZSTACK_RBKP_INFOSET_STR,
      wa_itab type ZSTACK_RBKP_INFOSET_STR.

data:
      lv_diff type dmbtr.

*here your selection starts.

*<QUERY_HEAD>

select rbkp~belnr
   rbkp~gjahr
   rbkp~rmwwr
   rbkp~waers
   sum( RBDRSEG~DMBTR ) as DMBTR
   from RBKP left outer join RBDRSEG
     on RBDRSEG~RBLNR eq RBKP~BELNR and
        RBDRSEG~RJAHR eq RBKP~GJAHR
   into corresponding fields of table itab
  where rbkp~belnr in so_belnr and
    rbkp~gjahr in so_gjahr
  group by rbkp~belnr rbkp~gjahr rbkp~rmwwr rbkp~waers.


loop at itab into wa_itab.

  lv_diff = wa_itab-dmbtr - wa_itab-rmwwr.

  move lv_diff to wa_itab-diff.
  modify itab from wa_itab.

endloop.



* this is the part that forwards your result set to the infoset
LOOP AT itab INTO ZSTACK_RBKP_INFOSET_STR.


*<QUERY_BODY>

ENDLOOP.

образец отчета сначала выбирает RBKP линии вместе с суммой RBDRSEG-DMBTR за каждый документ в RBKP, После этого loop обновляет DIFF столбец с разницей между выбранными столбцами RMWWR а также DMBTR,

К сожалению в нашей системе SAP таблица RBDRSEG пусто, поэтому я не могу проверить эту часть отчета. Но вы можете проверить отчет в своей системе, просто добавив точку останова перед первым loop и затем запустите отчет. После этого вы сможете увидеть выбранные строки во внутренней таблице. ITAB и посмотреть, если выбор работает, как ожидалось.

предостережения в примере отчета: оба RBKP а также RBDRSEG ссылаться на разные валютные поля. Так что, возможно, ваши ценности RMWWR а также DMBTR в разных валютах (RMWWR в валюте документа, DMBTR похоже в валюте компании по умолчанию). Если это так, вам придется конвертировать их в соответствующую валюту, прежде чем рассчитывать разницу. Пожалуйста, не забудьте присоединиться RBKP а также RBDRSEG используя как номер документа в BELNR/RBLNR и год в GJAHR/RJAHR (поле в RBDRSEG является RJAHRне GJAHR, хотя GJAHR также существует в RBDRSEG).

когда ваш отчет работает должным образом, создайте информационный набор на основе вашего отчета. Затем вы можете использовать информационный набор, как и любой другой.

Обновление: я только что понял, что, поскольку вы написали о том, что вы новичок в ABAP, я сразу же решил, что вам нужно создать отчет для вашего информационного набора. В зависимости от ваших реальных требований это может быть не так. Вы можете создать простой информационный запрос к таблице RBKP, а затем с помощью редактора информационного набора добавить еще два поля для итоговой суммы и разности, а затем добавить некоторый abap-код, который выбирает сумму всех соответствующих строк в RBDRSEG и вычисляет разницу между RMWWR. и эта совокупная сумма. Это, вероятно, будет медленнее, чем настраиваемый отчет abap, так как выбор придется повторять для каждой строки в RBKP, поэтому он действительно зависит от объема данных, которые ваши пользователи будут запрашивать. Настроенный отчет ABAP - это хорошо, гибко и быстро, но может оказаться излишним, и количество людей, способных изменить отчет, меньше, чем количество людей, способных изменить инфо-набор.


Дополнительная информация о варианте с использованием конструктора инфо-наборов

сначала создайте простую таблицу RBKP только для чтения инфо-набора (чтобы в определении инфо-набора не было объединения таблиц). Теперь перейдите к конкретным улучшениям приложения:

введите описание изображения здесь

В моем примере я уже добавил 2 поля, LINETOTAL а также DIFFERENCE, Оба имеют те же свойства, что и RBDRSEG-DMBTR, Убедитесь, что ваше поле содержит сумму RBDRSEG-DMBTR имеет более низкую последовательность (здесь "1"), чем поле, содержащее разницу. Последовательность определяет, какие поля будут вычислены первыми.

Нажмите на кнопку кодирования для первого поля и добавьте кодировку, чтобы выбрать сумму для одного RBKP запись:

введите описание изображения здесь

Затем сделайте то же самое для поля разницы:

введите описание изображения здесь

Теперь у вас есть оба поля в списке полей, вы можете добавить их в свою группу полей справа:

введите описание изображения здесь

Как упоминалось ранее, код, который вы только что ввели, будет обрабатываться для каждой строки в RBKP. Так что это может оказать огромное влияние на производительность во время выполнения, в зависимости от размера вашего начального набора результатов.

Другие вопросы по тегам