Свяжите EKPO-EBELP и основные счета - PullRequest
1 голос
/ 07 ноября 2019

Я хочу знать, какая позиция заказа (EBELP из EKPO в SAP MM) отображается в каком основном счете (HKONT в BSEG в SAP FI с koart = 'S').

Я работаю с запросами SQL в базе данных красного смещения, в которой таблицы скопированы из SAP.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

с таблицами, скопированными из SAP.

Если вы скопировали ALL таблиц, вы можете улучшить свой запрос следующим образом.

Существует замечательная таблица EKBE, которая является историей документа заказа и напоминает все данные заказа из EKPO. Он содержит как номера заказов, так и соответствующие номера документов материалов

EKBE:          MSEG:

BELNR   ->     MBLNR

GJAHR   ->     MJAHR

BUZEI   ->     ZEILE

Это полностью исключает необходимость MSEG / MKPF в вашем ужасном запросе. Возможные значения SELECT могут быть следующими:

SELECT ekbe.ebeln, ekbe.ebelp, bseg.hkont
  FROM ekbe
  LEFT JOIN bkpf ON bkpf.mandt = ekbe.mandt AND left(bkpf.awkey,10) = ekbe.belnr AND right(left(bkpf.awkey,14),4) = ekbe.gjahr AND bkpf.awtyp = 'RMRP'
  LEFT JOIN bseg ON bseg.mandt = bkpf.mandt AND bseg.bukrs = bkpf.bukrs AND bseg.gjahr = bkpf.gjahr AND bseg.belnr = bkpf.belnr

Обратите внимание, что поле AWTYP также должно быть указано в JOIN, поскольку в любом бухгалтерском документе может быть много материалов разных типов в году (AWKEY = <object number> + <year>).

Кроме того, я не ценю порядок, в котором вы присоединяетесь к столам в исходном SELECT. Обычно таблица исходных данных (EKPO в нашем случае, когда мы ищем учетную запись для каждого заказа на покупку) ставится первой, а все остальные присоединяются к ней. Но это вопрос вкуса, а также вопрос синтаксиса Redshift, который вы знаете лучше.

0 голосов
/ 07 ноября 2019

Хорошо, поэтому я нашел ответ через пару дней, просматривая форумы и таблицы SAP столбец за столбцом ..., так как меня в основном интересовало подключение позиций заказов к основным счетам, я смог найти их в EKKNкоторый напрямую связан с ЭКПО. Для некоторых ebelp существует несколько сакто, поэтому нам нужен «vproz», чтобы иметь возможность разделить EKPO-NETWR на разные сакто.

Пройдя через все это, я также перенес свой вопрос с связи EKPO и BSEG на соединение EKPO-EBELP и основных счетов. BSEG-HKONT (с фильтром для BSEG-KOART = 'S') также находятся в EKKN-SAKTO.

SELECT ebeln, ebelp, netwr, sakto, vproz, vproz * netwr / 100 AS sakto_netwr
FROM ekpo
LEFT JOIN (
          SELECT
          mandt
          ,ebeln
          ,ebelp
          ,sakto
          ,SUM(vproz) as vproz
          FROM ekkn
          GROUP BY mandt, ebeln, ebelp, sakto
          )
          ekkn ON ekkn.mandt = ekpo.mandt AND ekkn.ebeln = ekpo.ebeln AND ekkn.ebelp = ekpo.ebelp
...