При автоматических обработках иногда бывает, что документ надо бы провести, но провести его ну никак нельзя, так как период проводки или уже закрыт или еще не открыт. Причем периодов этих надо проверять как минимум три. Это FI, MM ну и CO. Первые два проверяются следующими функциями:
FI =
FI_PERIOD_CHECKMM =
MARV_SINGLE_READДля ММ как известно может быть открыто максимум два периода, текущий и предыдущий. Данные находятся в таблице MARV, так что можно их прочитать и самому, а можно использовать ФМ MARV_SINGLE_READ.
DATA: s_marv LIKE marv.
CALL FUNCTION 'MARV_SINGLE_READ'
EXPORTING
kzrfb = 'X'
bukrs = l_bukrs
IMPORTING
wmarv = s_marv
EXCEPTIONS
not_found = 1
wrong_call = 2
OTHERS = 3.
Из параметров вроде как все и так ясно:
KZRFB LIKE MTCOM-KZRFB - В общем данные берутся из буфера, если флажок = space, а если нет, то читаются из БД, ну в принципе, если мы сильно оптимизируем программу, да плюс к этому читаем эти данные часто, то при первом вызове можно поставить флажок в значение "X", а все дальнейшие... ну дальнейшие проводки, можно вообще больше не читать
, так как вряд ли попадете на смену периода, хотя кто их пользователей знает.
BUKRS LIKE T001-BUKRS - Код БЕ, к которой принадлежит ваш заводик. Можно прочитать и самому, а можно воспользоваться ФМ
SD_GET_KOKRS_BUKRS_FROM_WERKS You are not allowed to view links.
Register or
LoginMAXTZ LIKE MTCOM-MAXTZ - Ну а этот параметр, судя по всему уже не рабочий, так как текст где он использовался теперь закомментирован, ну по крайней мере с версии 4.6 так точно.
WMARV LIKE MARV - Возвращается нам структура, из которой и можно взять данные по открытым периодам проводки. Структуру смотрим в словаре, там вроде как все прозрачно.
Теперь, что касается FI, тут все чуток сложнее, так как периоды могут быть открыты любые, это во-первых, а во-вторых, периоды могут быть открыты например только для групп счетов, так что тут чуток сложнее, хотя если даныне нужны только в общем виде, то код следующий
DATA: l_oper LIKE t001b-frpe1.
CALL FUNCTION 'FI_PERIOD_CHECK'
EXPORTING
i_bukrs = l_bukrs
i_gjahr = s_marv-lfgja
i_koart = '+'
i_konto = '+'
i_monat = l_monat
IMPORTING
e_oper = l_oper
EXCEPTIONS
error_period = 1
error_period_acc = 2
OTHERS = 3.
i_gjahr - Год, для которого хотим получить разрешенные периоды проводки.
i_koart - Вид счета, ну тут вариантов много или задем этот самый вид счета или "+", если интересует для всех счетов.
i_konto - Конктретный счет, если знаем ну или как обычно маска "+", если вообще для всех счетов.
На выходе имеем:
L_OPER = Первый разрешенный период проводки (временной интервал 1)