Загрузка данных
*&---------------------------------------------------------------------*
*& Include ZNZP_REPORT_F01
*&---------------------------------------------------------------------*
*======================================================================*
* Inlude : Подпрограммы *
*----------------------------------------------------------------------*
* Автор : Галимзянов И.Р. *
* Ответственный *
* пользователь : Яковлева А.А. *
* Дата создания : 18.08.2025 *
* Номер заявки : 000086074 *
*======================================================================*
* Модификации *
*----------------------------------------------------------------------*
* Автор : Лихачева А.В. *
* Заявка : 25497 S00117707 *
* Консультант : Яковлева А.А. *
* Дата изменения : 25.09.2025 *
* Назначение : RFC-2025-128257.RS-00X Доработка отчета *
* ZNZP_OTCHET *
*-----------------------------------------------------------------------
* Автор : Артурззаман Р. *
* Дата изменения : 20.10.2025 *
* Ответственный *
* пользователь : Тищенко А. Е. *
* наименование : S00117707 *
* Код поручение : 27 084 *
* Назначение : О внедрение электронных отчетов от цехов/складов *
* по ПРЗ *
*-----------------------------------------------------------------------
* Автор : Федоров Ю.А. *
* Дата изменения : 31.10.2025 *
* Ответственный *
* пользователь : Тищенко А. Е. *
* Код поручение : 28 197/S00128677 *
* Назначение : Добавлено поле Сумма НЗП *
*-----------------------------------------------------------------------
* Автор : Петряков Н.В. *
* Дата изменения : 05.02.2026 *
* Ответственный *
* пользователь : Тищенко А.Е. *
* Код поручение : 32 991 *
* Назначение : Продолжение S00117707 *
*-----------------------------------------------------------------------
* Автор : Новокшонова С.Б. *
* Дата изменения : 02.03.2026 *
* Ответственный *
* пользователь : Яковлева А.А. *
* Код поручение : 34 685 *
* Назначение : 1)Добавление суммы ошибки и других полей в выборку*
* 2)Скрытие некоторых полей в ALV *
*======================================================================*
* Автор : Матвеева Л.Ф. *
* Дата изменения : 10.03.2026 *
* Ответственный *
* пользователь : Тищенко А. Е. *
* Код поручение : 35 154 *
* Назначение : Настройка выбора Типа отчета *
*======================================================================*
* Автор : Лавров И.Г. *
* Дата изменения : 30.03.2026 *
* Ответственный *
* пользователь : Тищенко А.Е. *
* Код поручение : 36 287 *
* Назначение : Изменение сортировки *
*-----------------------------------------------------------------------
"выбор данных
FORM FILL_REPORT.
TYPES: BEGIN OF TT_FORMS,
ZTYPE TYPE Z_FORMSIGN,
ZDATEOTCH TYPE DATS,
GJAHR TYPE GJAHR,
MONAT TYPE MONAT,
END OF TT_FORMS.
CLEAR: S_MONAT[], S_GJAHR[], S_MONAT, S_GJAHR.
S_MONAT[] = VALUE #( ( SIGN = 'I' OPTION = 'EQ' LOW = S_D_OTCH-LOW+4(2) ) ).
S_GJAHR[] = VALUE #( ( SIGN = 'I' OPTION = 'EQ' LOW = S_D_OTCH-LOW(4) ) ).
S_MONAT = S_MONAT[ 1 ].
S_GJAHR = S_GJAHR[ 1 ].
" 25497 S00117707 Лихачева А.В. 25.09.2025 beg
DATA: LRT_WERKS TYPE RANGE OF WERKS_D,
LRT_LGORT TYPE RANGE OF ZLGORT,
LS_LGORT LIKE LINE OF LRT_LGORT,
LT_ZECP_FORMS TYPE STANDARD TABLE OF TT_FORMS.
CASE 'X'.
WHEN P_DET.
LT_ZECP_FORMS = VALUE #(
( ZTYPE = 'NZP' )
).
WHEN P_MET.
LT_ZECP_FORMS = VALUE #(
( ZTYPE = 'NZP_M' )
).
WHEN OTHERS.
ENDCASE.
LOOP AT LT_ZECP_FORMS ASSIGNING FIELD-SYMBOL(<FS_ZTYPE>).
SELECT MATNR,
ZTYPE_OTCH,
ERDAT,
ERZET,
WERKS,
GJAHR,
MONAT,
ZLGORT,
DISPO,
BISMT,
MAKTX,
MEINS,
ZESALDO_MEINS,
ZSUM_NZP,
ZPRICE_NZP,
CURRENCY,
Z01,
Z02,
Z03,
Z04,
Z05,
Z07,
Z08,
Z11,
Z35,
Z43,
Z45,
Z25,
Z_BUDAT,
Z01_S, " 02.03.2026 1C 34685
Z06_1_S,
Z02_S, " добавление полей
Z03_S,
Z06_3_S,
Z04_S,
Z05_S,
Z07_S,
Z08_S,
Z11_S,
Z35_S,
Z43_S,
Z45_S,
Z25_S,
ZERR_S " /34685
FROM ZES_NZP
APPENDING TABLE @DATA(LT_NZP)
WHERE WERKS IN @S_WERKS AND
ZLGORT IN @S_LGORT AND
MATNR IN @S_MATNR AND
ZTYPE_OTCH = @<FS_ZTYPE>-ZTYPE AND
GJAHR IN @S_GJAHR[] AND
MONAT IN @S_MONAT[].
ENDLOOP.
IF LT_NZP IS INITIAL.
MESSAGE 'Данные по статьям калькуляции не найдены' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
LRT_WERKS = VALUE #( FOR GROUPS WRK OF <FS_ROW> IN LT_NZP
WHERE ( WERKS IS NOT INITIAL )
GROUP BY <FS_ROW>-WERKS
WITHOUT MEMBERS ( SIGN = 'I' OPTION = 'EQ' LOW = WRK ) ).
LOOP AT LT_NZP ASSIGNING FIELD-SYMBOL(<FS_NZP>).
" 02.03.2026 1C 34685 добавление сумм статей 06.1 и 06.3 к статьям 01 и 03
DATA(N) = STRLEN( <FS_NZP>-ZLGORT ) - 3.
IF N < 0. N = 0. ENDIF.
LS_LGORT = VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = |{ <FS_NZP>-WERKS(2) }{ <FS_NZP>-ZLGORT+N(3) }| ) .
APPEND LS_LGORT TO LRT_LGORT.
CLEAR: LS_LGORT, N.
ENDLOOP.
SORT LRT_LGORT BY LOW.
DELETE ADJACENT DUPLICATES FROM LRT_LGORT COMPARING LOW.
"Выполнить группировку из внутренней таблицы LT_NZP уникальных значений Z_BUDAT в LRT_Z_BUDAT
DATA: LRT_Z_BUDAT TYPE RANGE OF DATS.
LRT_Z_BUDAT = VALUE #(
FOR GROUPS Z_BUDAT OF <FS_Z_BUDAT> IN LT_NZP
GROUP BY <FS_Z_BUDAT>-Z_BUDAT ASCENDING WITHOUT MEMBERS (
SIGN = 'I'
OPTION = 'EQ'
LOW = Z_BUDAT
) ).
IF LRT_LGORT IS NOT INITIAL.
* LOOP AT lt_nzp ASSIGNING <fs_nzp>.
SELECT MATNR,
WERKS,
LGORT,
MENGE6,
SUMMA6,
MENGE12,
SUMMA12,
MENGE13,
SUMMA13,
MENGEO3,
SUMMAO3,
MENGEO5,
SUMMAO5,
MENGEO7,
SUMMAO7,
DATECALC
FROM ZMM_UNSOLD
INTO TABLE @DATA(LT_UNSOLD)
WHERE WERKS IN @LRT_WERKS AND
LGORT IN @LRT_LGORT AND
MPZ_NZP = '2' AND
MATNR IN @S_MATNR AND
DATECALC IN @LRT_Z_BUDAT.
* ENDLOOP.
ENDIF.
"сортировка для binary search
SORT LT_UNSOLD BY WERKS LGORT MATNR DATECALC.
"Скопировать все значения из таблицы LT_NZP в таблицу GT_REPORT
MOVE-CORRESPONDING LT_NZP TO GT_REPORT.
LOOP AT GT_REPORT ASSIGNING FIELD-SYMBOL(<FS_REPORT>).
"Объединить GT_REPORT~WERKS[1-2] GT_REPORT~ZLGORT+N[3] в поле GT_REPORT~LGORT
N = STRLEN( <FS_REPORT>-ZLGORT ) - 3.
IF N < 0. N = 0. ENDIF.
<FS_REPORT>-LGORT = |{ <FS_REPORT>-WERKS(2) }{ <FS_REPORT>-ZLGORT+N(3) }|.
"Для каждой строки внутренней таблицы GT_REPORT найти значения полей MENGE6, SUMMA6, MENGE12, SUMMA12, MENGE13, SUMMA13, MENGEO3, SUMMAO3, MENGEO5, SUMMAO5, MENGEO7, SUMMAO7, DATECALC во внутренней таблице LT_UNSOLD
READ TABLE LT_UNSOLD
WITH KEY
WERKS = <FS_REPORT>-WERKS
LGORT = <FS_REPORT>-LGORT
MATNR = <FS_REPORT>-MATNR
DATECALC = <FS_REPORT>-Z_BUDAT
ASSIGNING FIELD-SYMBOL(<FS_UNSOLD>)
BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_REPORT> = CORRESPONDING #( BASE ( <FS_REPORT> ) <FS_UNSOLD> ).
ENDIF.
ENDLOOP.
"Скопировать значения полей WERKS, ZLGORT из таблицы LT_NZP в LT_WELGORT
DATA: LT_WELGORT TYPE TABLE OF TT_WELGORT.
LOOP AT LT_NZP ASSIGNING <FS_NZP>.
APPEND VALUE #( WERKS = <FS_NZP>-WERKS ZLGORT = <FS_NZP>-ZLGORT ) TO LT_WELGORT.
ENDLOOP.
"Удалить дубликаты по WERKS, ZLGORT
SORT LT_WELGORT BY WERKS ZLGORT.
DELETE ADJACENT DUPLICATES FROM LT_WELGORT COMPARING WERKS ZLGORT.
"Если LT_WELGORT = не пусто, то
IF LINES( LT_WELGORT ) > 0.
"Выполнить выборку поля LGORT из таблицы ZMM_OSV_CEH в таблицу LT_WELGORT
SELECT WERKS, CEH, LGORT
FROM ZMM_OSV_CEH
INTO TABLE @DATA(LT_ALL_LGORTS).
SORT LT_ALL_LGORTS BY WERKS CEH LGORT.
LOOP AT LT_WELGORT ASSIGNING FIELD-SYMBOL(<FS_WELGORT>).
READ TABLE LT_ALL_LGORTS
WITH KEY
WERKS = <FS_WELGORT>-WERKS
CEH = <FS_WELGORT>-ZLGORT
ASSIGNING FIELD-SYMBOL(<FS_LGORT>).
IF SY-SUBRC = 0.
<FS_WELGORT>-LGORT = <FS_LGORT>-LGORT.
ENDIF.
ENDLOOP.
"уникальные range по заводу и складу
DATA: LR_WERKS TYPE RANGE OF WERKS_D.
LR_WERKS = VALUE #(
FOR GROUPS WERKS OF <FS_UNIQ_WERKS> IN LT_WELGORT
GROUP BY <FS_UNIQ_WERKS>-WERKS ASCENDING WITHOUT MEMBERS (
SIGN = 'I'
OPTION = 'EQ'
LOW = WERKS
) ).
DATA: LR_LGORT TYPE RANGE OF LGORT_D.
LR_LGORT = VALUE #(
FOR GROUPS LGORT OF <FS_UNIQ_LGORT> IN LT_WELGORT
GROUP BY <FS_UNIQ_LGORT>-LGORT ASCENDING WITHOUT MEMBERS (
SIGN = 'I'
OPTION = 'EQ'
LOW = LGORT
) ).
"Выполнить выборку поля LGOBE из таблицы T001L в таблицу LT_WELGORT
SELECT WERKS, LGORT, LGOBE
FROM T001L
INTO TABLE @DATA(LT_LGOBE)
WHERE
WERKS IN @LR_WERKS AND
LGORT IN @LR_LGORT.
LOOP AT LT_WELGORT ASSIGNING <FS_WELGORT>.
READ TABLE LT_LGOBE
WITH KEY
WERKS = <FS_WELGORT>-WERKS
LGORT = <FS_WELGORT>-LGORT
ASSIGNING FIELD-SYMBOL(<FS_LGOBE>).
IF SY-SUBRC = 0.
<FS_WELGORT>-LGOBE = <FS_LGOBE>-LGOBE.
ENDIF.
ENDLOOP.
"Для каждой строки внутренней таблицы GT_REPORT найти значения поля LGOBE из таблицы LT_WELGORT
LOOP AT GT_REPORT ASSIGNING <FS_REPORT>.
READ TABLE LT_WELGORT
WITH KEY
WERKS = <FS_REPORT>-WERKS
ZLGORT = <FS_REPORT>-ZLGORT
ASSIGNING FIELD-SYMBOL(<FS_WELGORT_LGOBE>).
IF SY-SUBRC = 0.
<FS_REPORT>-LGOBE = <FS_WELGORT_LGOBE>-LGOBE.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR: LRT_WERKS, LRT_LGORT, LT_NZP, LT_UNSOLD, LRT_Z_BUDAT.
" 25497 S00117707 Лихачева А.В. 25.09.2025 end
DATA(LT_REPORT) = GT_REPORT.
SORT LT_REPORT BY ZSUM_NZP DESCENDING.
APPEND LINES OF LT_REPORT FROM 1 TO 20 TO GT_TOP20.
REFRESH LT_REPORT.
GT_ALV = GT_REPORT.
ENDFORM.
"заполняем каталог полей
FORM CREATE_FIELDCATALOG USING IT_REPORT TYPE ANY TABLE
CT_FIELDCAT TYPE LVC_T_FCAT.
"Из внутренней таблицы
DATA:
LR_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR,
LR_DATA TYPE REF TO DATA,
LT_DFIES TYPE DDFIELDS.
CLEAR: CT_FIELDCAT.
CREATE DATA LR_DATA LIKE LINE OF IT_REPORT.
LR_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA_REF( LR_DATA ).
LT_DFIES = CL_SALV_DATA_DESCR=>READ_STRUCTDESCR( LR_TABDESCR ).
CT_FIELDCAT = CORRESPONDING #( LT_DFIES ).
LOOP AT CT_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDCAT>).
CASE <FS_FIELDCAT>-FIELDNAME.
WHEN 'ZLGORT' OR 'Z_BUDAT' OR 'DATECALC' OR 'Z06_1_S' OR 'Z06_3_S'.
<FS_FIELDCAT>-NO_OUT = 'X'.
WHEN 'ERDAT' OR 'ERZET' OR 'WERKS'. " 02.03.2026 !C 34685
<FS_FIELDCAT>-NO_OUT = 'X'. " скрыть поля, с возомжностью выбора через формат
WHEN 'Z01_S' OR 'Z02_S' OR 'Z03_S' OR 'Z04_S' OR 'Z05_S' OR 'Z07_S' OR 'Z08_S' OR 'Z11_S' OR 'Z35_S' OR 'Z43_S' OR 'Z45_S' OR 'Z25_S' OR 'ZERR_S'.
<FS_FIELDCAT>-NO_OUT = 'X'. " скрыть поля, с возомжностью выбора через формат /34685
WHEN 'MENGE6'.
<FS_FIELDCAT>-REPTEXT = 'Количество до 6 месяцев'.
WHEN 'SUMMA6'.
<FS_FIELDCAT>-REPTEXT = 'Сумма(руб.) до 6 месяцев'.
WHEN 'MENGE12'.
<FS_FIELDCAT>-REPTEXT = 'Кол-во от 6 до 12 месяцев'.
WHEN 'SUMMA12'.
<FS_FIELDCAT>-REPTEXT = 'Сумма(руб.) от 6 до 12 месяцев'.
WHEN 'MENGE13'.
<FS_FIELDCAT>-REPTEXT = 'Количество свыше (12 месяцев или 7 лет )'.
WHEN 'SUMMA13'.
<FS_FIELDCAT>-REPTEXT = 'Сумма(руб.) свыше (12 месяцев или 7 лет )'.
WHEN 'MENGEO3'.
<FS_FIELDCAT>-REPTEXT = 'Количество от 1 до 2-х лет'.
WHEN 'SUMMAO3'.
<FS_FIELDCAT>-REPTEXT = 'Сумма(руб.) от 1 до 2-х лет'.
WHEN 'MENGEO5'.
<FS_FIELDCAT>-REPTEXT = 'Количество от 2 до 5 лет'.
WHEN 'SUMMAO5'.
<FS_FIELDCAT>-REPTEXT = 'Сумма(руб.) от 2 до 5 лет'.
WHEN 'MENGEO7'.
<FS_FIELDCAT>-REPTEXT = 'Количество от 5 до 7 лет'.
WHEN 'SUMMAO7'.
<FS_FIELDCAT>-REPTEXT = 'Сумма(руб.) от 5 до 7 лет'.
WHEN 'ZTYPE_OTCH'.
<FS_FIELDCAT>-SCRTEXT_L = 'Тип документа'.
<FS_FIELDCAT>-SCRTEXT_M = 'Тип документа'.
<FS_FIELDCAT>-SCRTEXT_S = 'Тип документа'.
<FS_FIELDCAT>-OUTPUTLEN = 10.
<FS_FIELDCAT>-NO_OUT = 'X'.
" скрыть поля, с возомжностью выбора через формат
WHEN 'LGOBE'.
<FS_FIELDCAT>-NO_OUT = 'X'.
WHEN 'CURRENCY'.
<FS_FIELDCAT>-NO_OUT = 'X'.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDFORM.
"Календарь и выбор дня
FORM F4_DATE.
"Календарь и выбор дня
CALL FUNCTION 'F4_DATE'
IMPORTING
SELECT_DATE = S_D_OTCH-LOW.
ENDFORM.
"закрыть поля года и месяца на селекционном экране для заполнения
FORM SELSCR_OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'S_GJAHR-LOW' OR SCREEN-NAME = 'S_MONAT-LOW'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR: S_MONAT[], S_GJAHR[].
IF S_D_OTCH IS NOT INITIAL.
APPEND VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = S_D_OTCH-LOW+4(2) ) TO S_MONAT[].
APPEND VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = S_D_OTCH-LOW(4) ) TO S_GJAHR[].
ENDIF.
PERFORM UPDATE_DYNP.
ENDFORM.
"обновление экрана
FORM UPDATE_DYNP.
DATA: LT_DYNP TYPE TABLE OF DYNPREAD.
IF S_D_OTCH IS NOT INITIAL AND S_D_OTCH-LOW+4(1) = '0'.
APPEND VALUE #( FIELDNAME = 'S_GJAHR-LOW' FIELDVALUE = S_D_OTCH-LOW(4) ) TO LT_DYNP.
APPEND VALUE #( FIELDNAME = 'S_MONAT-LOW' FIELDVALUE = | { S_D_OTCH-LOW+5(1) }| ) TO LT_DYNP.
ELSEIF S_D_OTCH IS NOT INITIAL.
APPEND VALUE #( FIELDNAME = 'S_GJAHR-LOW' FIELDVALUE = S_D_OTCH-LOW(4) ) TO LT_DYNP.
APPEND VALUE #( FIELDNAME = 'S_MONAT-LOW' FIELDVALUE = S_D_OTCH-LOW+4(2) ) TO LT_DYNP.
ELSEIF S_D_OTCH[] IS NOT INITIAL.
"если ошибка после СЭ, вернуть отображение года и месяца
APPEND VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = S_D_OTCH[ 1 ]-LOW+4(2) ) TO S_MONAT[].
APPEND VALUE #( SIGN = 'I' OPTION = 'EQ' LOW = S_D_OTCH[ 1 ]-LOW(4) ) TO S_GJAHR[].
ENDIF.
" изменить содержимое полей экрана
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = LT_DYNP.
CLEAR: LT_DYNP.
ENDFORM.
"справочник для склада/цеха
FORM F4_LGORT.
"взять поле завода с селекционного экрана
DATA: LT_DYNPFIELDS TYPE STANDARD TABLE OF DYNPREAD.
"Считывание значений полей
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-CPROG
DYNUMB = SY-DYNNR
REQUEST = 'A'
TABLES
DYNPFIELDS = LT_DYNPFIELDS
EXCEPTIONS
INVALID_ABAPWORKAREA = 1
INVALID_DYNPROFIELD = 2
INVALID_DYNPRONAME = 3
INVALID_DYNPRONUMMER = 4
INVALID_REQUEST = 5
NO_FIELDDESCRIPTION = 6
INVALID_PARAMETER = 7
UNDEFIND_ERROR = 8
DOUBLE_CONVERSION = 9
STEPL_NOT_FOUND = 10
OTHERS = 11.
IF SY-SUBRC IS NOT INITIAL.
CLEAR LT_DYNPFIELDS.
ENDIF.
DATA: LV_WERKS LIKE S_WERKS-LOW.
LV_WERKS = LT_DYNPFIELDS[ FIELDNAME = 'S_WERKS-LOW' ]-FIELDVALUE.
TYPES: BEGIN OF TY_LGORT,
WERKS TYPE ZMM_OSV_CEH-WERKS,
CEH TYPE ZMM_OSV_CEH-CEH,
END OF TY_LGORT.
DATA: LT_LGORT TYPE TABLE OF TY_LGORT.
FIELD-SYMBOLS: <FS_LINE> TYPE TY_LGORT.
IF LV_WERKS IS NOT INITIAL.
SELECT WERKS, CEH
FROM ZMM_OSV_CEH
INTO TABLE @LT_LGORT
WHERE WERKS = @LV_WERKS.
ELSE.
SELECT WERKS, CEH
FROM ZMM_OSV_CEH
INTO TABLE @LT_LGORT.
ENDIF.
SORT LT_LGORT BY WERKS CEH.
DELETE ADJACENT DUPLICATES FROM LT_LGORT COMPARING WERKS CEH.
LOOP AT LT_LGORT ASSIGNING <FS_LINE>.
DATA: LV_PUT TYPE CHAR10.
LV_PUT = <FS_LINE>-CEH.
"удалить ведущие нули
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = LV_PUT
IMPORTING
OUTPUT = LV_PUT.
ENDLOOP.
"вывод списка значений
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CEH'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_LGORT-LOW'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = LT_LGORT
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC IS NOT INITIAL.
CLEAR LT_LGORT.
ENDIF.
ENDFORM.
"Кнопка «Итог по заводу»
FORM SORT_WERKS.
DATA: LT_SORT TYPE LVC_T_SORT.
"comp = 'X'
LT_SORT = VALUE #( ( SPOS = 1 FIELDNAME = 'WERKS' UP = 'X' SUBTOT = 'X' COMP = 'X' SELTEXT = 'Завод' EXPA = 'X' ) ).
GO_GRID->SET_SORT_CRITERIA( IT_SORT = LT_SORT ).
GO_GRID->GET_FRONTEND_FIELDCATALOG( IMPORTING ET_FIELDCATALOG = DATA(LT_FIELDCATALOG) ).
LOOP AT LT_FIELDCATALOG ASSIGNING FIELD-SYMBOL(<FS_FIELDCATALOG>).
"только строки итогов с полями WERKS, ZSUM_NZP, Z01, Z02, Z03, Z04, Z05, Z07, Z08, Z11, Z35, Z43, Z45, Z25. Остальные поля скрыть
CASE <FS_FIELDCATALOG>-FIELDNAME.
WHEN 'WERKS' OR 'ZSUM_NZP' OR 'Z01_S' OR 'Z06_1_S' OR 'Z02_S' OR 'Z03_S' OR 'Z06_3_S' OR 'Z04_S' OR 'Z05_S' OR 'Z07_S'
OR 'Z08_S' OR 'Z11_S' OR 'Z35_S' OR 'Z43_S' OR 'Z45_S' OR 'Z25_S' OR 'ZERR_S' "/34685
OR 'SUMMA6' OR 'SUMMA12' OR 'SUMMA13' OR 'SUMMAO3' OR 'SUMMAO5' OR 'SUMMAO7'. "34154
<FS_FIELDCATALOG>-NO_OUT = ''.
IF <FS_FIELDCATALOG>-FIELDNAME NE 'WERKS'. " 02.03.2026 1С 34685 указываем поля для суммирования
<FS_FIELDCATALOG>-DO_SUM = 'X'.
ENDIF.
WHEN OTHERS.
<FS_FIELDCATALOG>-NO_OUT = 'X'.
ENDCASE.
ENDLOOP.
PERFORM GET_POS USING LT_SORT CHANGING LT_FIELDCATALOG.
GO_GRID->SET_FRONTEND_FIELDCATALOG( IT_FIELDCATALOG = LT_FIELDCATALOG ).
GO_GRID->GET_FRONTEND_LAYOUT( IMPORTING ES_LAYOUT = DATA(LS_LAYOUT) ).
LS_LAYOUT-CWIDTH_OPT = 'X'.
GO_GRID->SET_FRONTEND_LAYOUT( EXPORTING IS_LAYOUT = LS_LAYOUT ).
GO_GRID->REFRESH_TABLE_DISPLAY( ).
ENDFORM.
"Кнопка «Итог по цеху»
FORM SORT_LGORT.
DATA: LT_SORT TYPE LVC_T_SORT.
"comp = 'X'
LT_SORT = VALUE #( ( SPOS = 1 FIELDNAME = 'LGORT' UP = 'X' SUBTOT = 'X' COMP = 'X' SELTEXT = 'Склад/Цех' EXPA = 'X' ) ).
GO_GRID->SET_SORT_CRITERIA( IT_SORT = LT_SORT ).
GO_GRID->GET_FRONTEND_FIELDCATALOG( IMPORTING ET_FIELDCATALOG = DATA(LT_FIELDCATALOG) ).
LOOP AT LT_FIELDCATALOG ASSIGNING FIELD-SYMBOL(<FS_FIELDCATALOG>).
CASE <FS_FIELDCATALOG>-FIELDNAME.
" 02.03.2026 1С 34685 вместо статьей показать суммы по статьям
* WHEN 'LGORT' OR 'ZSUM_NZP' OR 'Z01' OR 'Z02' OR 'Z03' OR 'Z04' OR 'Z05' OR 'Z07' OR 'Z08' OR 'Z11' OR 'Z35' OR 'Z43' OR 'Z45' OR 'Z25'.
WHEN 'LGORT' OR 'ZSUM_NZP' OR 'Z01_S' OR 'Z06_1_S' OR 'Z02_S' OR 'Z03_S' OR 'Z06_3_S' OR 'Z04_S' OR 'Z05_S' OR 'Z07_S'
OR 'Z08_S' OR 'Z11_S' OR 'Z35_S' OR 'Z43_S' OR 'Z45_S' OR 'Z25_S' OR 'ZERR_S' "/34685
OR 'SUMMA6' OR 'SUMMA12' OR 'SUMMA13' OR 'SUMMAO3' OR 'SUMMAO5' OR 'SUMMAO7'. "34154
<FS_FIELDCATALOG>-NO_OUT = ''.
IF <FS_FIELDCATALOG>-FIELDNAME NE 'LGORT'. " 02.03.2026 1С 34685 указываем поля для суммирования
<FS_FIELDCATALOG>-DO_SUM = 'X'.
ENDIF.
WHEN OTHERS.
<FS_FIELDCATALOG>-NO_OUT = 'X'.
ENDCASE.
ENDLOOP.
PERFORM GET_POS USING LT_SORT CHANGING LT_FIELDCATALOG.
GO_GRID->SET_FRONTEND_FIELDCATALOG( IT_FIELDCATALOG = LT_FIELDCATALOG ).
GO_GRID->GET_FRONTEND_LAYOUT( IMPORTING ES_LAYOUT = DATA(LS_LAYOUT) ).
LS_LAYOUT-CWIDTH_OPT = 'X'.
GO_GRID->SET_FRONTEND_LAYOUT( EXPORTING IS_LAYOUT = LS_LAYOUT ).
GO_GRID->REFRESH_TABLE_DISPLAY( ).
ENDFORM.
FORM GET_POS USING LT_SOR TYPE LVC_T_SORT
CHANGING LT_CAT TYPE LVC_T_FCAT.
DATA: LT_POS TYPE LVC_T_FCAT,
L_I TYPE I.
LT_POS[] = LT_CAT[].
DELETE LT_POS WHERE NO_OUT = 'X'.
L_I = LINES( LT_SOR ).
CASE OK_CODE.
WHEN 'BTN_CEH'.
LOOP AT LT_POS ASSIGNING FIELD-SYMBOL(<FS_POS>) WHERE FIELDNAME <> 'LGORT'.
L_I = L_I + 1.
<FS_POS>-COL_POS = L_I.
ENDLOOP.
WHEN 'BTN_WERKS'.
LOOP AT LT_POS ASSIGNING FIELD-SYMBOL(<FS_POS1>) WHERE FIELDNAME <> 'WERKS'.
L_I = L_I + 1.
<FS_POS1>-COL_POS = L_I.
ENDLOOP.
WHEN 'BTN_WERKSCEH'.
LOOP AT LT_POS ASSIGNING FIELD-SYMBOL(<FS_POS2>) WHERE FIELDNAME <> 'LGORT' AND FIELDNAME <> 'LGOBE' AND FIELDNAME <> 'WERKS' AND FIELDNAME <> 'ZSUM_NZP'.
L_I = L_I + 1.
<FS_POS2>-COL_POS = L_I.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
LOOP AT LT_POS ASSIGNING FIELD-SYMBOL(<FS_POSS>).
READ TABLE LT_CAT ASSIGNING FIELD-SYMBOL(<FS_CATT>) WITH KEY FIELDNAME = <FS_POSS>-FIELDNAME.
IF SY-SUBRC IS INITIAL.
<FS_CATT>-COL_POS = <FS_POSS>-COL_POS.
ENDIF.
ENDLOOP.
ENDFORM.
"Кнопка «Итог по цехам завода»
FORM SORT_WERKSCEH.
DATA: LT_SORT TYPE LVC_T_SORT.
LT_SORT = VALUE #(
( SPOS = 1 FIELDNAME = 'WERKS' UP = 'X' SUBTOT = 'X' COMP = 'X' SELTEXT = 'Завод' EXPA = '' )
( SPOS = 2 FIELDNAME = 'LGORT' UP = 'X' SUBTOT = '' COMP = 'X' SELTEXT = 'Склад/Цех' EXPA = '' )
( SPOS = 3 FIELDNAME = 'LGOBE' UP = 'X' SUBTOT = 'X' COMP = 'X' SELTEXT = 'Название' EXPA = 'X' )
).
GO_GRID->SET_SORT_CRITERIA( IT_SORT = LT_SORT ).
GO_GRID->GET_FRONTEND_FIELDCATALOG( IMPORTING ET_FIELDCATALOG = DATA(LT_FIELDCATALOG) ).
LOOP AT LT_FIELDCATALOG ASSIGNING FIELD-SYMBOL(<FS_FIELDCATALOG>).
IF STRLEN( <FS_FIELDCATALOG>-FIELDNAME ) = 3
OR <FS_FIELDCATALOG>-FIELDNAME = 'LGOBE'
OR <FS_FIELDCATALOG>-FIELDNAME = 'ZSUM_NZP'
. " Все Z* кроме ZESALDO
<FS_FIELDCATALOG>-DO_SUM = 'X'.
ENDIF.
"только строки итогов с полями LGORT, LGOBE, ZSUM_NZP, Z01, Z02, Z03, Z04, Z05, Z07, Z08, Z11, Z35, Z43, Z45, Z25. Остальные поля скрыть
CASE <FS_FIELDCATALOG>-FIELDNAME.
" 02.03.2026 1С 34685 вместо статьей показать суммы по статьям
WHEN 'LGORT' OR 'LGOBE' OR 'ZSUM_NZP' OR 'Z01_S' OR 'Z06_1_S' OR 'Z02_S' OR 'Z03_S' OR 'Z06_3_S' OR 'Z04_S' OR 'Z05_S' OR 'Z07_S'
OR 'Z08_S' OR 'Z11_S' OR 'Z35_S' OR 'Z43_S' OR 'Z45_S' OR 'Z25_S' OR 'ZERR_S' "/34685
OR 'SUMMA6' OR 'SUMMA12' OR 'SUMMA13' OR 'SUMMAO3' OR 'SUMMAO5' OR 'SUMMAO7'. "34154
<FS_FIELDCATALOG>-NO_OUT = ''.
IF <FS_FIELDCATALOG>-FIELDNAME NE 'LGORT' AND <FS_FIELDCATALOG>-FIELDNAME NE 'LGOBE'. " 02.03.2026 1С 34685 указываем поля для суммирования
<FS_FIELDCATALOG>-DO_SUM = 'X'.
ENDIF.
WHEN OTHERS.
<FS_FIELDCATALOG>-NO_OUT = 'X'.
ENDCASE.
ENDLOOP.
LOOP AT LT_FIELDCATALOG ASSIGNING <FS_FIELDCATALOG>.
<FS_FIELDCATALOG>-NO_MERGING = 'X'.
CASE <FS_FIELDCATALOG>-FIELDNAME.
WHEN 'WERKS'.
<FS_FIELDCATALOG>-COL_POS = 1.
WHEN 'LGORT'.
<FS_FIELDCATALOG>-COL_POS = 2.
WHEN 'LGOBE'.
<FS_FIELDCATALOG>-COL_POS = 3.
WHEN 'ZSUM_NZP'.
<FS_FIELDCATALOG>-COL_POS = 4.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
PERFORM GET_POS USING LT_SORT CHANGING LT_FIELDCATALOG.
GO_GRID->GET_FRONTEND_LAYOUT( IMPORTING ES_LAYOUT = DATA(LS_LAYOUT) ).
LS_LAYOUT-CWIDTH_OPT = 'X'.
GO_GRID->SET_FRONTEND_FIELDCATALOG( EXPORTING IT_FIELDCATALOG = LT_FIELDCATALOG ).
GO_GRID->SET_FRONTEND_LAYOUT( EXPORTING IS_LAYOUT = LS_LAYOUT ).
GO_GRID->REFRESH_TABLE_DISPLAY( ).
ENDFORM.
"значения таблицы
FORM CHANGE_RB.
CASE 'X'.
WHEN GV_RB_ALL.
GT_ALV = GT_REPORT.
WHEN GV_RB_TOP20.
GT_ALV = GT_TOP20.
WHEN OTHERS.
ENDCASE.
GO_GRID->REFRESH_TABLE_DISPLAY( ).
ENDFORM.