Эта программа фактически используется для расчета общего запаса с лимитом от даты проводки (MATDO C -BUDAT). Но у меня проблема с определением начального запаса. Начальный запас (MBEWH-LBKUM) берется за месяц, предшествующий месяцу, когда была проведена дата проводки. Но в созданной мною программе начальные данные запаса (MBEWH-LBKUM), которые появились, не были обновлены, как это должно быть. Между тем, если ссылаться на дату проводки (matdo c -budat / запрос, который я присоединил к таблице matdo c), первоначальные данные о запасах, которые должны появиться, просто не такие.
Но если я только выберу дату публикации за короткий промежуток времени, результаты будут правильными
Мой запрос:
FORM F_GETDT .
REFRESH: IT_ZVBR.
SELECT DISTINCT MARA~MATNR
MATDOC~BUDAT
MATDOC~BWART
MATDOC~SHKZG
MATDOC~WERKS
MATDOC~MENGE AS TOTAL
FROM MARA
INNER JOIN MATDOC ON MARA~MATNR = MATDOC~MATNR
INTO CORRESPONDING FIELDS OF TABLE IT_ZVBR
WHERE MATDOC~WERKS = P_WERKS AND
MATDOC~BUDAT IN P_BUDAT AND
MARA~MATKL IN ('E001', 'E002', 'E003', 'E005', 'E006', 'E007', 'E008', 'E009', 'E010', 'E011', 'E012', 'E014').
ENDFORM.
Это мой код заполнить внутреннюю таблицу IT_PRINT, которая будет отображаться позже:
FORM F_LSTDT.
CLEAR: WA_ZVBR, WA_PRINT, V_TEMP, V_DATE, V_MONTH, V_MONTHMIN, V_YEAR.
SORT IT_ZVBR BY MATNR.
IT_TEMP = IT_ZVBR.
DELETE ADJACENT DUPLICATES FROM IT_ZVBR COMPARING MATNR.
LOOP AT IT_ZVBR INTO WA_ZVBR.
WA_PRINT-PSTAR = P_BUDAT-LOW.
WA_PRINT-PFINS = P_BUDAT-HIGH.
WA_PRINT-MATNR = WA_ZVBR-MATNR.
SELECT SINGLE MAKTX FROM MAKT
INTO WA_PRINT-MAKTX
WHERE MATNR = WA_PRINT-MATNR.
LOOP AT IT_TEMP INTO WA_TEMP WHERE MATNR = WA_ZVBR-MATNR.
CLEAR: V_TEMP.
V_TEMP = WA_TEMP-BUDAT+6(2).
V_DATE = V_TEMP.
CLEAR: V_TEMP.
V_TEMP = WA_TEMP-BUDAT+4(2).
V_MONTH = V_TEMP.
V_MONTHMIN = V_MONTH - 1.
CLEAR: V_TEMP.
V_TEMP = WA_TEMP-BUDAT+0(4).
V_YEAR = V_TEMP.
BLN_SBLM = 12.
THN_SBLM = V_YEAR - 1.
IF V_MONTH = 1.
SELECT SINGLE LBKUM FROM MBEWH
INTO WA_PRINT-LBKUM
WHERE MATNR = WA_PRINT-MATNR AND
LFMON = BLN_SBLM AND
LFGJA = THN_SBLM AND
BWKEY = WA_ZVBR-WERKS.
ELSE.
SELECT SINGLE LBKUM FROM MBEWH
INTO WA_PRINT-LBKUM
WHERE MATNR = WA_PRINT-MATNR AND
LFMON = V_MONTHMIN AND
LFGJA = V_YEAR AND
BWKEY = WA_ZVBR-WERKS.
ENDIF.
//Logic to swap to the latest value
IF WA_PRINT-LBKUM = WA_PRINT-TEMP.
WA_PRINT-TEMP = WA_PRINT-LBKUM.
ELSEIF WA_PRINT-LBKUM <> WA_PRINT-TEMP AND WA_PRINT-LBKUM > 0.
CLEAR: WA_PRINT-TEMP.
WA_PRINT-TEMP = WA_PRINT-LBKUM.
ENDIF.
WA_PRINT-LBKUM = WA_PRINT-TEMP.
ENDLOOP.
APPEND WA_PRINT TO IT_PRINT.
SORT IT_PRINT BY MATNR.
CLEAR: WA_ZVBR, WA_PRINT, WA_TEMP, V_TEMP, V_DATE, V_MONTH, V_MONTHMIN, V_YEAR.
ENDLOOP.
ENDFORM.
Предполагается получить данные, которые показаны на рисунке ниже (tcode se16n):
Поскольку в таблице matdo c имеется последняя транзакция в соответствии с датой проводки (BUDAT).
А данные, которые я фактически получил, - это предыдущие данные.
Как решить эту проблему? Я застрял в этой проблеме так долго. Спасибо раньше.