Добрый день, коллеги. Хотел бы здесь изложить свою реализацию контроля наличия по периодам (по месяцам, по кварталам делается аналогично). На момент месяц назад была реализация, предусматривающая создание нескольких дополнительных регистров контроля наличия. Предлагаемая мной реализация использует дополнительный элемент измерения, выделенный SAP, а именно, UserDim. Кто-то предлагает использовать программу бюджета, но она, как правило, часто используется, если требуется бюджетирование в разрезе мероприятий. Последовательность действий: 1. Активация дополнительного измерения USERDIM. 2. Создание дополнительных строк в регистры контроля наличия при вводе бюджета или проводке фактов хозяйственной деятельности. 3. Создания фильтра, который пропускает только строки, в которых USERDIM имеет значение.
1. Активация дополнительного измерения USERDIM. Честно не нашел стандартную программу или настройку по данному элементу измерения. Так что, нужно создать маленькую программу, которая активирует данное измерение. Содержание программы простое: UPDATE fmdimstate SET userdim_state = '2' WHERE fm_area = "Ваша ЕФМ".
2. Создание дополнительных строк в регистры контроля наличия при вводе бюджета или проводке фактов хозяйственной деятельности. Создаем реализацию расширения FMAVC_ADD_LINES, методы ADD_BUDGET_LINES и ADD_POSTING_LINES. Метод ADD_BUDGET_LINES: DATA: ls_budget_lines LIKE LINE OF i_t_budget_lines, new_lines LIKE ls_budget_lines.
LOOP AT i_t_budget_lines INTO ls_budget_lines. MOVE ls_budget_lines TO new_lines. new_lines-flg_added = 'X'. CLEAR: new_lines-tval01, new_lines-tval02, new_lines-tval03, new_lines-tval04, new_lines-tval05, new_lines-tval06, new_lines-tval07, new_lines-tval08, new_lines-tval09, new_lines-tval10, new_lines-tval11, new_lines-tval12. CLEAR: new_lines-lval01, new_lines-lval02, new_lines-lval03, new_lines-lval04, new_lines-lval05, new_lines-lval06, new_lines-lval07, new_lines-lval08, new_lines-lval09, new_lines-lval10, new_lines-lval11, new_lines-lval12.
IF ls_budget_lines-lval01 <> 0. new_lines-tval01 = ls_budget_lines-tval01. new_lines-lval01 = ls_budget_lines-lval01. new_lines-address-userdim = '01'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval02 <> 0. new_lines-tval02 = ls_budget_lines-tval02. new_lines-lval02 = ls_budget_lines-lval02. new_lines-address-userdim = '02'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval03 <> 0. new_lines-tval03 = ls_budget_lines-tval03. new_lines-lval03 = ls_budget_lines-lval03. new_lines-address-userdim = '03'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval04 <> 0. new_lines-tval04 = ls_budget_lines-tval04. new_lines-lval04 = ls_budget_lines-lval04. new_lines-address-userdim = '04'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval05 <> 0. new_lines-tval05 = ls_budget_lines-tval05. new_lines-lval05 = ls_budget_lines-lval05. new_lines-address-userdim = '05'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval06 <> 0. new_lines-tval06 = ls_budget_lines-tval06. new_lines-lval06 = ls_budget_lines-lval06. new_lines-address-userdim = '06'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval07 <> 0. new_lines-tval07 = ls_budget_lines-tval07. new_lines-lval07 = ls_budget_lines-lval07. new_lines-address-userdim = '07'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval08 <> 0. new_lines-tval08 = ls_budget_lines-tval08. new_lines-lval08 = ls_budget_lines-lval08. new_lines-address-userdim = '08'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval09 <> 0. new_lines-tval09 = ls_budget_lines-tval09. new_lines-lval09 = ls_budget_lines-lval09. new_lines-address-userdim = '09'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval10 <> 0. new_lines-tval10 = ls_budget_lines-tval10. new_lines-lval10 = ls_budget_lines-lval10. new_lines-address-userdim = '10'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval11 <> 0. new_lines-tval11 = ls_budget_lines-tval11. new_lines-lval11 = ls_budget_lines-lval11. new_lines-address-userdim = '11'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_budget_lines-lval12 <> 0. new_lines-tval12 = ls_budget_lines-tval12. new_lines-lval12 = ls_budget_lines-lval12. new_lines-address-userdim = '12'. APPEND new_lines TO e_t_additional_lines. ENDIF. ENDLOOP.
ADD_POSTING_LINES: DATA: ls_posting_lines LIKE LINE OF i_t_posting_lines, new_lines LIKE ls_posting_lines.
LOOP AT i_t_posting_lines INTO ls_posting_lines. MOVE ls_posting_lines TO new_lines. CLEAR: new_lines-lval01, new_lines-lval02, new_lines-lval03, new_lines-lval04, new_lines-lval05, new_lines-lval06, new_lines-lval07, new_lines-lval08, new_lines-lval09, new_lines-lval10, new_lines-lval11, new_lines-lval12.
IF ls_posting_lines-lval01 <> 0. new_lines-lval01 = ls_posting_lines-lval01. new_lines-address-userdim = '01'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval02 <> 0. new_lines-lval02 = ls_posting_lines-lval02. new_lines-address-userdim = '02'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval03 <> 0. new_lines-lval03 = ls_posting_lines-lval03. new_lines-address-userdim = '03'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval04 <> 0. new_lines-lval04 = ls_posting_lines-lval04. new_lines-address-userdim = '04'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval05 <> 0. new_lines-lval05 = ls_posting_lines-lval05. new_lines-address-userdim = '05'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval06 <> 0. new_lines-lval06 = ls_posting_lines-lval06. new_lines-address-userdim = '06'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval07 <> 0. new_lines-lval07 = ls_posting_lines-lval07. new_lines-address-userdim = '07'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval08 <> 0. new_lines-lval08 = ls_posting_lines-lval08. new_lines-address-userdim = '08'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval09 <> 0. new_lines-lval09 = ls_posting_lines-lval09. new_lines-address-userdim = '09'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval10 <> 0. new_lines-lval10 = ls_posting_lines-lval10. new_lines-address-userdim = '10'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval11 <> 0. new_lines-lval11 = ls_posting_lines-lval11. new_lines-address-userdim = '11'. APPEND new_lines TO e_t_additional_lines. ENDIF.
IF ls_posting_lines-lval12 <> 0. new_lines-lval12 = ls_posting_lines-lval12. new_lines-address-userdim = '12'. APPEND new_lines TO e_t_additional_lines. ENDIF. ENDLOOP.
3. Создания фильтра, который пропускает только строки, в которых USERDIM имеет значение. Создаем реализацию расширения FMAVC_ENTRY_FILTER, методы BUDGET_FILTER и POSTING_FILTER. Метод BUDGET_FILTER: IF i_s_budget_line-address-userdim IS INITIAL. e_flg_skip_entry = 'X'. ENDIF.
Метод POSTING_FILTER: CHECK sy-tcode <> 'GRR3'. "Для нормального отображения отчета по расходу бюджета, возможно требуется добавить еще транзакции. IF i_s_posting_line-address-userdim IS INITIAL. e_flg_skip_entry = 'X'. ENDIF.
Заключение. Недостатки: увеличение записей в регистре контроля наличия. Достоинства: -нет необходимости в дополнительных регистрах контроля наличия. -простота реализации.
Надеюсь, данная реализация будет полезна.
|
|