Эта программа фактически используется для расчета общего запаса с лимитом от даты проводки (MATDOC-BUDAT). Но у меня проблема с определением начального запаса. Первоначальный запас (MBEWH-LBKUM) берется с месяца, предшествующего месяцу, когда была проведена дата проводки. Но в программе, которую я сделал, появившиеся исходные стоковые данные (MBEWH-LBKUM) не обновлялись должным образом. Между тем, если говорить о дате публикации (matdoc-budat / запрос, который я присоединил к таблице matdoc), исходные данные о запасах, которые должны появиться, совсем не такие.
Но если я выберу дату публикации только за короткий промежуток времени, результаты будут правильными.
Мой запрос:
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):
Потому что в таблице matdoc есть последняя транзакция по дате проводки (BUDAT).
И данные, которые я действительно получил, - это предыдущие данные.
Как решить эту проблему? Я так долго зацикливался на этой проблеме. Спасибо раньше.
//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.
на это:MODIFY IT_PRINT FROM WA_PRINT TRANSPORTING LBKUM WHERE MATNR = WA_TEMP-MATNR.
Он все еще не работает, как я надеюсь - person Cybits   schedule 09.04.2020