Add Column GJAHR to report Hello friends, I am new to the subject, appreciate their valuable help, I would add the following report GJAHR field, but really what I've done is not me, you appreciate a help of friends. REPORT Z_TEMP_01 NO STANDARD PAGE HEADING MESSAGE-ID zc LINE-SIZE 132. ************************************************************************ *** Definición de tablas transparentes *** ************************************************************************ TABLES: eban, t001. TYPES: BEGIN OF eord_type, matnr TYPE eord-matnr, werks TYPE eord-werks, zeord TYPE eord-zeord, lifnr TYPE eord-lifnr, flifn TYPE eord-flifn, febel TYPE eord-febel, fresw TYPE eord-fresw, END OF eord_type. ************************************************************************ *** Definición de tablas internas *** ************************************************************************ DATA: *** Tabla para selecionar datos de Análisis Stock/Necesidades BEGIN OF ti_eban OCCURS 0, matnr LIKE eban-matnr, " werks LIKE eban-werks, " reswk LIKE eban-reswk, " menge LIKE eban-menge, " meins LIKE eban-meins, " lfdat LIKE eban-lfdat, " webaz LIKE eban-webaz, " END OF ti_eban, *** Tabla p/ selecionar datos Req c/ pedidos cancelados. ti_ebanko LIKE ti_eban OCCURS 0 WITH HEADER LINE, *** Tabla para selecionar dados de Análisis Stock/Necesidades BEGIN OF ti_ekpo OCCURS 0, matnr LIKE ekpo-matnr, " werks LIKE ekpo-werks, " menge LIKE ekpo-menge, " meins LIKE ekpo-meins, " wemng LIKE eket-wemng, " glmng LIKE eket-glmng, " eindt LIKE eket-eindt, " webaz LIKE ekpo-webaz, " END OF ti_ekpo, *** Tabla c/ datos da EBAN e EKPO. BEGIN OF ti_dados OCCURS 0, matnr LIKE ekpo-matnr, " werks LIKE ekpo-werks, " menge LIKE ekpo-menge, " meins LIKE ekpo-meins, " lfdat LIKE eket-eindt, " END OF ti_dados, *** Tabla para Selecionar Descripción de los Materiales BEGIN OF ti_makt OCCURS 0, matnr LIKE makt-matnr, " Nº de material maktx LIKE makt-maktx, " Texto breve de material END OF ti_makt, *** Tabla para Selecionar UM Basicas BEGIN OF ti_mara OCCURS 0, matnr LIKE mara-matnr, " Nº de material meins LIKE mara-meins, " Unidad de medida básica bstme LIKE mara-bstme, " Unidad de pedido END OF ti_mara, *** Tabla para Selecionar o Proveedor BEGIN OF ti_mkol OCCURS 0, matnr LIKE mkol-matnr, " Nº de material werks LIKE mkol-werks, " Centro slabs LIKE mkol-slabs, " Stock en consignación para uso libre lifnr LIKE mkol-lifnr, " Nº cuenta de Proveedor charg LIKE mkol-charg, " N° de Lote lgort LIKE mkol-lgort, " Deposito sobkz LIKE mkol-sobkz, " Codigo de Stock especial END OF ti_mkol, *** Tabla para Selecionar el Proveedor Agrupado por Material y Centro BEGIN OF ti_mkol2 OCCURS 0 , matnr LIKE mkol-matnr, " Nº de material werks LIKE mkol-werks, " Centro slabs LIKE mkol-slabs, " Stock en consignación para uso libre lifnr LIKE mkol-lifnr, " Nº cuenta de Proveedor END OF ti_mkol2, *** Tabla para Selecionar el Nombre de Proveedor BEGIN OF ti_lfa1 OCCURS 0, lifnr LIKE lfa1-lifnr, " Nº cuenta de Proveedor name1 LIKE lfa1-name1, " Nombre / Razon Social END OF ti_lfa1, *** Tabla de Salida Total (en Consignados) BEGIN OF ti_jfreq OCCURS 0, werks(2) TYPE c, " Pais matnr LIKE mara-matnr, " Nº de material maktx LIKE MAKT-maktx, "AFIGUEROA meins like ekpo-meins, mes1 LIKE eban-menge, " Cant.entrada futura total MES1 mes2 LIKE eban-menge, " Cant.entrada futura total MES2 mes3 LIKE eban-menge, " Cant.entrada futura total MES3 mes4 LIKE eban-menge, " Cant.entrada futura total MES4 mes5 LIKE eban-menge, " Cant.entrada futura total MES5 mes6 LIKE eban-menge, " Cant.entrada futura total MES6 mes7 LIKE eban-menge, " Cant.entrada futura total MES7 mes8 LIKE eban-menge, " Cant.entrada futura total MES8 mes9 LIKE eban-menge, " Cant.entrada futura total MES9 mes10 LIKE eban-menge, " Cant.entrada futura total MES10 mes11 LIKE eban-menge, " Cant.entrada futura total MES11 mes12 LIKE eban-menge, " Cant.entrada futura total MES12 mes13 LIKE eban-menge, " Cant.entrada futura total MES13 bukrs LIKE t001-bukrs, " Empresa lifnr TYPE eord-lifnr, " Proveedor END OF ti_jfreq, BEGIN OF ti_jconskmr OCCURS 0, matnr LIKE mara-matnr, " Nº de material maktx LIKE makt-maktx, " Texto breve de Material meins LIKE mara-meins, " Unidad de Medida básica bstme LIKE mara-bstme, " Unidad de Pedido lifnr LIKE lfa1-lifnr, " Nº cuenta de Proveedor name1 LIKE lfa1-name1, " Nombre slabs LIKE mkol-slabs, " Stock en consig utilización libre mes1 LIKE eban-menge, " Cant.entrada futura total MES1 mes2 LIKE eban-menge, " Cant.entrada futura total MES2 mes3 LIKE eban-menge, " Cant.entrada futura total MES3 mes4 LIKE eban-menge, " Cant.entrada futura total MES4 mes5 LIKE eban-menge, " Cant.entrada futura total MES5 mes6 LIKE eban-menge, " Cant.entrada futura total MES6 mes7 LIKE eban-menge, " Cant.entrada futura total MES7 mes8 LIKE eban-menge, " Cant.entrada futura total MES8 mes9 LIKE eban-menge, " Cant.entrada futura total MES9 mes10 LIKE eban-menge, " Cant.entrada futura total MES10 mes11 LIKE eban-menge, " Cant.entrada futura total MES11 mes12 LIKE eban-menge, " Cant.entrada futura total MES12 mes13 LIKE eban-menge, " Cant.entrada futura total MES13 soma LIKE eban-menge, " Cant.entrada futura total SUMA werks(2) TYPE c, " Pais bukrs LIKE t001-bukrs, " Empresa lifn2 TYPE eord-lifnr, " Proveedor END OF ti_jconskmr, *** Tabla de Salida Final Total (En Consignados) BEGIN OF ti_saida1 OCCURS 0, campo(500) TYPE c, " String de Salida END OF ti_saida1, *** Tabla de Salida Final Consignados ti_saida2 LIKE ti_saida1 OCCURS 0 WITH HEADER LINE, eord_itab TYPE TABLE OF eord_type, eord_str TYPE eord_type. ************************************************************************ *** Definición de constantes *** ************************************************************************ CONSTANTS: c_b TYPE c VALUE 'B', c_f TYPE c VALUE 'F', c_k TYPE c VALUE 'K', c_l TYPE c VALUE 'L', c_n TYPE c VALUE 'N', c_x TYPE c VALUE 'X', c_0 TYPE c VALUE '0'. ************************************************************************ *** Definición de Rangos *** ************************************************************************ RANGES: r_ano FOR eban-lfdat, r_ano2 FOR eban-lfdat. ************************************************************************ *** Definición dos Parámetros *** ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK bl0 WITH FRAME TITLE text-007. SELECT-OPTIONS: s_werks FOR eban-werks OBLIGATORY, s_bukrs FOR t001-bukrs OBLIGATORY. "Empresa SELECTION-SCREEN END OF BLOCK bl0. SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001. PARAMETER: p_ano LIKE sy-datum+0(4) DEFAULT sy-datum+0(4) OBLIGATORY, p_mes LIKE sy-datum+4(2) DEFAULT sy-datum+4(2) OBLIGATORY. SELECTION-SCREEN END OF BLOCK bl1. SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-002. PARAMETER: p_local TYPE c RADIOBUTTON GROUP g1, p_serv TYPE c RADIOBUTTON GROUP g1. SELECTION-SCREEN END OF BLOCK bl2. SELECTION-SCREEN BEGIN OF BLOCK bl3 WITH FRAME TITLE text-003. PARAMETER: *** Path para Todos los Archivos p_file1 LIKE rlgrap-filename DEFAULT 'c:\TMP\MM\MRP_V100.txt' OBLIGATORY, *** Path para Consignados p_file2 LIKE rlgrap-filename DEFAULT 'c:\TMP\MM\CONSUMOS_V100.txt' OBLIGATORY. SELECTION-SCREEN END OF BLOCK bl3. ************************************************************************ *** EVENTO At Selection-Screen *** ************************************************************************ AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1. * Busca Ruta de Archivo PERFORM busca_arquivo USING p_file1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file2. * Busca Ruta de Archivo PERFORM busca_arquivo USING p_file2. ************************************************************************ *** EVENTO Start-of-selection *** ************************************************************************ START-OF-SELECTION. * Verifica Autorizacion PERFORM z_authority_check. * Seleciona Datos PERFORM select_data. * Prepara datos TI Salida PERFORM prepara_dados. * Genera Tabla de Salida PERFORM gera_ti_saida. * Genera Archivos Salida PERFORM gera_arq_saida. ******************* Fin de Evento Start-of-selection ****************** *&---------------------------------------------------------------------* *& Form busca_archivo *&---------------------------------------------------------------------* * Busca Ruta de Archivo *----------------------------------------------------------------------* FORM busca_arquivo USING file TYPE any. CALL FUNCTION 'F4_FILENAME' IMPORTING file_name = file. ENDFORM. " busca_archivo *&---------------------------------------------------------------------* *& Form select_data *&---------------------------------------------------------------------* * Seleciona Datos. *----------------------------------------------------------------------* FORM select_data. * Toma el periodo de año entero. PERFORM trata_data. * Seleciona datos de Requisiciones Pendientes para el Periodo PERFORM select_eban. * Seleciona datos de Pedidos no Completados para el Periodo PERFORM select_ekpo. * Seleciona datos de Requisiciones con Pedidos, sin pedidos cancelados PERFORM select_eban_ekpo. * Trata datos EBAN y EKPO y agrupa por mes PERFORM eban_ekpo. PERFORM z_seleciona_eord. * Seleciona Descripciones de material SELECT matnr maktx FROM makt INTO TABLE ti_makt FOR ALL ENTRIES IN ti_dados WHERE matnr EQ ti_dados-matnr. IF sy-subrc EQ 0. SORT ti_makt BY matnr. ENDIF. * Selecciona UM Basica SELECT matnr meins bstme FROM mara INTO TABLE ti_mara FOR ALL ENTRIES IN ti_dados WHERE matnr EQ ti_dados-matnr. IF sy-subrc EQ 0. SORT ti_mara BY matnr. ENDIF. * Selecciona proveedor SELECT matnr werks slabs lifnr charg lgort sobkz FROM mkol INTO TABLE ti_mkol FOR ALL ENTRIES IN ti_dados WHERE matnr EQ ti_dados-matnr AND werks EQ ti_dados-werks AND sobkz EQ c_k. IF sy-subrc EQ 0. SORT ti_mkol BY matnr werks lifnr. * Selecciona Nombre Proveedor SELECT lifnr name1 FROM lfa1 INTO TABLE ti_lfa1 FOR ALL ENTRIES IN ti_mkol WHERE lifnr EQ ti_mkol-lifnr. IF sy-subrc EQ 0. SORT ti_lfa1 BY lifnr. ENDIF. LOOP AT ti_mkol. CLEAR ti_mkol2. ti_mkol2 = ti_mkol. COLLECT ti_mkol2. ENDLOOP. SORT ti_mkol2 BY matnr werks. ENDIF. ENDFORM. " select_data *&---------------------------------------------------------------------* *& Form trata_data *&---------------------------------------------------------------------* * Crea el periodo de Año Completo *----------------------------------------------------------------------* FORM trata_data. DATA: vl_mes(2) TYPE n, vl_ano(4) TYPE n. CLEAR: vl_mes, vl_ano, r_ano, r_ano2. REFRESH: r_ano, r_ano2. vl_mes = p_mes. vl_ano = p_ano. * Mes Actual r_ano-sign = 'I'. r_ano-option = 'BT'. CONCATENATE vl_ano vl_mes '01' INTO r_ano-low. CALL FUNCTION 'SG_PS_ADD_MONTH_TO_DATE' EXPORTING months = 12 olddate = r_ano-low IMPORTING newdate = r_ano-high. CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH' EXPORTING day_in = r_ano-high IMPORTING last_day_of_month = r_ano-high EXCEPTIONS day_in_not_valid = 1 OTHERS = 2. IF sy-subrc NE 0. r_ano-high = r_ano-high + 31. ENDIF. APPEND r_ano. * Mes Actual (Considerando un mes antras) r_ano2-sign = 'I'. r_ano2-option = 'BT'. CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE' EXPORTING months = '-1' " REVISAR N -2 ********* olddate = r_ano-low IMPORTING newdate = r_ano2-low. r_ano2-high = r_ano-high. APPEND r_ano2. ENDFORM. " trata_data *&---------------------------------------------------------------------* *& Form prepara_datos *&---------------------------------------------------------------------* * Prepara Datos Salida 1 y 2 *----------------------------------------------------------------------* FORM prepara_dados. DATA: vl_mes(2) TYPE n. SORT ti_mkol BY matnr werks. SORT ti_makt BY matnr. SORT ti_mara BY matnr. SORT ti_lfa1 BY lifnr. LOOP AT ti_dados. CLEAR: ti_jconskmr, ti_jfreq, vl_mes, ti_mkol, ti_mkol2. * Calcula la cantidad de acuerdo con la UM Basica (Mara-Meins). PERFORM qtde_basica. * Calcula mes de acuerdo con mes inicial. PERFORM calcula_mes USING vl_mes. * Verifica Consignados READ TABLE ti_mkol WITH KEY matnr = ti_dados-matnr werks = ti_dados-werks BINARY SEARCH. IF sy-subrc EQ 0. ti_jconskmr-matnr = ti_dados-matnr. SELECT SINGLE bukrs FROM t001k INTO ti_jconskmr-bukrs WHERE bwkey = ti_dados-werks. ti_jconskmr-werks = ti_dados-werks+0(2). ti_jconskmr-lifnr = ti_mkol-lifnr. * Busca código de Proveedor marcado como fijo (fuente de * Suministro Fijo) CLEAR eord_str. READ TABLE eord_itab INTO eord_str WITH KEY matnr = ti_dados-matnr werks = ti_dados-werks BINARY SEARCH. IF sy-subrc IS INITIAL AND ( eord_str-febel eq c_x or eord_str-flifn eq c_x or eord_str-fresw eq c_x ). ti_jconskmr-lifn2 = eord_str-lifnr. ENDIF. * Carga la Cantidad consignada solo 1X para no duplicar valor. READ TABLE ti_mkol2 WITH KEY matnr = ti_dados-matnr werks = ti_dados-werks BINARY SEARCH. IF sy-subrc EQ 0. ti_jconskmr-slabs = ti_mkol2-slabs. DELETE ti_mkol2 INDEX sy-tabix. ENDIF. * Busca Descripción de Material READ TABLE ti_makt WITH KEY matnr = ti_dados-matnr BINARY SEARCH. IF sy-subrc EQ 0. ti_jconskmr-maktx = ti_makt-maktx. ENDIF. * Busca UM Basica y UM Pedido READ TABLE ti_mara WITH KEY matnr = ti_dados-matnr BINARY SEARCH. IF sy-subrc EQ 0. ti_jconskmr-meins = ti_mara-meins. ti_jconskmr-bstme = ti_mara-bstme. ENDIF. * Busca Descripción Proveedor READ TABLE ti_lfa1 WITH KEY lifnr = ti_mkol-lifnr BINARY SEARCH. IF sy-subrc EQ 0. ti_jconskmr-name1 = ti_lfa1-name1. ENDIF. * Busca Cantidades Conforme al Mes de Referencia IF vl_mes EQ '01'. ti_jconskmr-mes1 = ti_dados-menge. ELSEIF vl_mes EQ '02'. ti_jconskmr-mes2 = ti_dados-menge. ELSEIF vl_mes EQ '03'. ti_jconskmr-mes3 = ti_dados-menge. ELSEIF vl_mes EQ '04'. ti_jconskmr-mes4 = ti_dados-menge. ELSEIF vl_mes EQ '05'. ti_jconskmr-mes5 = ti_dados-menge. ELSEIF vl_mes EQ '06'. ti_jconskmr-mes6 = ti_dados-menge. ELSEIF vl_mes EQ '07'. ti_jconskmr-mes7 = ti_dados-menge. ELSEIF vl_mes EQ '08'. ti_jconskmr-mes8 = ti_dados-menge. ELSEIF vl_mes EQ '09'. ti_jconskmr-mes9 = ti_dados-menge. ELSEIF vl_mes EQ '10'. ti_jconskmr-mes10 = ti_dados-menge. ELSEIF vl_mes EQ '11'. ti_jconskmr-mes11 = ti_dados-menge. ELSEIF vl_mes EQ '12'. ti_jconskmr-mes12 = ti_dados-menge. ELSEIF vl_mes EQ '13'. ti_jconskmr-mes13 = ti_dados-menge. ENDIF. ti_jconskmr-soma = ti_dados-menge. COLLECT ti_jconskmr. ELSE. IF ti_dados-lfdat <> '00000000'. SELECT SINGLE bukrs FROM t001k INTO ti_jfreq-bukrs WHERE bwkey = ti_dados-werks. "| AFIGUEROA INI READ TABLE ti_makt WITH KEY matnr = ti_dados-matnr BINARY SEARCH. IF sy-subrc EQ 0. ti_jfreq-maktx = ti_makt-maktx. ti_jfreq-meins = ti_dados-meins. ENDIF. " AFIGUEROA INI ti_jfreq-werks = ti_dados-werks+0(2). ti_jfreq-matnr = ti_dados-matnr. * Busca código de Proveedor marcado como fijo (fuente de * Suministro fija) CLEAR eord_str. READ TABLE eord_itab INTO eord_str WITH KEY matnr = ti_dados-matnr werks = ti_dados-werks BINARY SEARCH. IF sy-subrc IS INITIAL AND ( eord_str-febel eq c_x or eord_str-flifn eq c_x or eord_str-fresw eq c_x ). ti_jfreq-lifnr = eord_str-lifnr. ENDIF. * Busca Cantidades Conforme el Mes de Referencia IF vl_mes EQ '01'. ti_jfreq-mes1 = ti_dados-menge. ELSEIF vl_mes EQ '02'. ti_jfreq-mes2 = ti_dados-menge. ELSEIF vl_mes EQ '03'. ti_jfreq-mes3 = ti_dados-menge. ELSEIF vl_mes EQ '04'. ti_jfreq-mes4 = ti_dados-menge. ELSEIF vl_mes EQ '05'. ti_jfreq-mes5 = ti_dados-menge. ELSEIF vl_mes EQ '06'. ti_jfreq-mes6 = ti_dados-menge. ELSEIF vl_mes EQ '07'. ti_jfreq-mes7 = ti_dados-menge. ELSEIF vl_mes EQ '08'. ti_jfreq-mes8 = ti_dados-menge. ELSEIF vl_mes EQ '09'. ti_jfreq-mes9 = ti_dados-menge. ELSEIF vl_mes EQ '10'. ti_jfreq-mes10 = ti_dados-menge. ELSEIF vl_mes EQ '11'. ti_jfreq-mes11 = ti_dados-menge. ELSEIF vl_mes EQ '12'. ti_jfreq-mes12 = ti_dados-menge. ELSEIF vl_mes EQ '13'. ti_jfreq-mes13 = ti_dados-menge. ENDIF. COLLECT ti_jfreq. ENDIF. ENDIF. ENDLOOP. ENDFORM. " prepara_datos *&---------------------------------------------------------------------* *& Form genera_ti_salida *&---------------------------------------------------------------------* * Genera Tablas de Salidas. *----------------------------------------------------------------------* FORM gera_ti_saida. DATA: vl_mes1(16) TYPE c, vl_mes2(16) TYPE c, vl_mes3(16) TYPE c, vl_mes4(16) TYPE c, vl_mes5(16) TYPE c, vl_mes6(16) TYPE c, vl_mes7(16) TYPE c, vl_mes8(16) TYPE c, vl_mes9(16) TYPE c, vl_mes10(16) TYPE c, vl_mes11(16) TYPE c, vl_mes12(16) TYPE c, vl_mes13(16) TYPE c, vl_slabs(16) TYPE c, vl_soma(16) TYPE c. * Archivo MRP LOOP AT ti_jfreq. CLEAR: vl_mes1, vl_mes2, vl_mes3, vl_mes4, vl_mes5, vl_mes6, vl_mes7, vl_mes8, vl_mes9, vl_mes10, vl_mes11, vl_mes12, vl_mes13, ti_saida1. * Código Antiguo * vl_mes1 = ti_jfreq-mes1. * vl_mes2 = ti_jfreq-mes2. * vl_mes3 = ti_jfreq-mes3. * vl_mes4 = ti_jfreq-mes4. * vl_mes5 = ti_jfreq-mes5. * vl_mes6 = ti_jfreq-mes6. * vl_mes7 = ti_jfreq-mes7. * vl_mes8 = ti_jfreq-mes8. * vl_mes9 = ti_jfreq-mes9. * vl_mes10 = ti_jfreq-mes10. * vl_mes11 = ti_jfreq-mes11. * vl_mes12 = ti_jfreq-mes12. * vl_mes13 = ti_jfreq-mes13. * Código Novo. WRITE ti_jfreq-mes1 TO vl_mes1. WRITE ti_jfreq-mes2 TO vl_mes2. WRITE ti_jfreq-mes3 TO vl_mes3. WRITE ti_jfreq-mes4 TO vl_mes4. WRITE ti_jfreq-mes5 TO vl_mes5. WRITE ti_jfreq-mes6 TO vl_mes6. WRITE ti_jfreq-mes7 TO vl_mes7. WRITE ti_jfreq-mes8 TO vl_mes8. WRITE ti_jfreq-mes9 TO vl_mes9. WRITE ti_jfreq-mes10 TO vl_mes10. WRITE ti_jfreq-mes11 TO vl_mes11. WRITE ti_jfreq-mes12 TO vl_mes12. WRITE ti_jfreq-mes13 TO vl_mes13. SHIFT: ti_jfreq-matnr LEFT DELETING LEADING '0', ti_jfreq-lifnr LEFT DELETING LEADING c_0, * vl_mes1 LEFT DELETING LEADING space, vl_mes2 LEFT DELETING LEADING space, vl_mes3 LEFT DELETING LEADING space, vl_mes4 LEFT DELETING LEADING space, vl_mes5 LEFT DELETING LEADING space, vl_mes6 LEFT DELETING LEADING space, vl_mes7 LEFT DELETING LEADING space, vl_mes8 LEFT DELETING LEADING space, vl_mes9 LEFT DELETING LEADING space, vl_mes10 LEFT DELETING LEADING space, vl_mes11 LEFT DELETING LEADING space, vl_mes12 LEFT DELETING LEADING space, vl_mes13 LEFT DELETING LEADING space. * Usa Campo PERFORM zera_campo: USING vl_mes1, USING vl_mes2, USING vl_mes3, USING vl_mes4, USING vl_mes5, USING vl_mes6, USING vl_mes7, USING vl_mes8, USING vl_mes9, USING vl_mes10, USING vl_mes11, USING vl_mes12, USING vl_mes13. IF ti_jfreq-matnr <> ''. CONCATENATE ti_jfreq-matnr ti_jfreq-maktx ti_jfreq-meins ti_jfreq-lifnr vl_mes1 vl_mes2 vl_mes3 vl_mes4 vl_mes5 vl_mes6 vl_mes7 vl_mes8 vl_mes9 vl_mes10 vl_mes11 vl_mes12 vl_mes13 ti_jfreq-werks ti_jfreq-bukrs INTO ti_saida1-campo SEPARATED BY ';'. REPLACE all OCCURRENCES of '.' in ti_saida1 WITH ' '. CONDENSE ti_saida1 NO-GAPS. REPLACE all OCCURRENCES OF ',' in ti_saida1 WITH '.'. APPEND ti_saida1. ENDIF. * Archivo CONSUMO LOOP AT ti_jconskmr. CLEAR: vl_mes1, vl_mes2, vl_mes3, vl_mes4, vl_mes5, vl_mes6, vl_mes7, vl_mes8, vl_mes9, vl_mes10, vl_mes11, vl_mes12, vl_mes13, ti_saida2. * Código Antiguo * vl_mes1 = ti_jconskmr-mes1. * vl_mes2 = ti_jconskmr-mes2. * vl_mes3 = ti_jconskmr-mes3. * vl_mes4 = ti_jconskmr-mes4. * vl_mes5 = ti_jconskmr-mes5. * vl_mes6 = ti_jconskmr-mes6. * vl_mes7 = ti_jconskmr-mes7. * vl_mes8 = ti_jconskmr-mes8. * vl_mes9 = ti_jconskmr-mes9. * vl_mes10 = ti_jconskmr-mes10. * vl_mes11 = ti_jconskmr-mes11. * vl_mes12 = ti_jconskmr-mes12. * vl_mes13 = ti_jconskmr-mes13. * vl_slabs = ti_jconskmr-slabs. * Código Novo. WRITE ti_jconskmr-mes1 TO vl_mes1. WRITE ti_jconskmr-mes2 TO vl_mes2. WRITE ti_jconskmr-mes3 TO vl_mes3. WRITE ti_jconskmr-mes4 TO vl_mes4. WRITE ti_jconskmr-mes5 TO vl_mes5. WRITE ti_jconskmr-mes6 TO vl_mes6. WRITE ti_jconskmr-mes7 TO vl_mes7. WRITE ti_jconskmr-mes8 TO vl_mes8. WRITE ti_jconskmr-mes9 TO vl_mes9. WRITE ti_jconskmr-mes10 TO vl_mes10. WRITE ti_jconskmr-mes11 TO vl_mes11. WRITE ti_jconskmr-mes12 TO vl_mes12. WRITE ti_jconskmr-mes13 TO vl_mes13. WRITE ti_jconskmr-slabs TO vl_slabs. vl_soma = ti_jconskmr-mes1 + ti_jconskmr-mes2 + ti_jconskmr-mes3 + ti_jconskmr-mes4 + ti_jconskmr-mes5 + ti_jconskmr-mes6 + ti_jconskmr-mes7 + ti_jconskmr-mes8 + ti_jconskmr-mes9 + ti_jconskmr-mes10 + ti_jconskmr-mes11 + ti_jconskmr-mes12 + ti_jconskmr-mes13. SHIFT: ti_jconskmr-matnr LEFT DELETING LEADING '0', ti_jconskmr-lifnr LEFT DELETING LEADING '0', ti_jconskmr-lifn2 LEFT DELETING LEADING c_0, vl_mes1 LEFT DELETING LEADING space, vl_mes2 LEFT DELETING LEADING space, vl_mes3 LEFT DELETING LEADING space, vl_mes4 LEFT DELETING LEADING space, vl_mes5 LEFT DELETING LEADING space, vl_mes6 LEFT DELETING LEADING space, vl_mes7 LEFT DELETING LEADING space, vl_mes8 LEFT DELETING LEADING space, vl_mes9 LEFT DELETING LEADING space, vl_mes10 LEFT DELETING LEADING space, vl_mes11 LEFT DELETING LEADING space, vl_mes12 LEFT DELETING LEADING space, vl_mes13 LEFT DELETING LEADING space, vl_soma LEFT DELETING LEADING space, vl_slabs LEFT DELETING LEADING space. * Usa Campo PERFORM zera_campo: USING vl_mes1, USING vl_mes2, USING vl_mes3, USING vl_mes4, USING vl_mes5, USING vl_mes6, USING vl_mes7, USING vl_mes8, USING vl_mes9, USING vl_mes10, USING vl_mes11, USING vl_mes12, USING vl_mes13, USING vl_soma, USING vl_slabs. CONCATENATE: ti_jconskmr-matnr ti_jconskmr-maktx(30) ti_jconskmr-meins * ti_jconskmr-bstme ti_jconskmr-lifnr ti_jconskmr-name1(30) ti_jconskmr-bstme ti_jconskmr-lifnr ti_jconskmr-lifn2 ti_jconskmr-name1(30) vl_slabs vl_mes1 vl_mes2 vl_mes3 vl_mes4 vl_mes5 vl_mes6 vl_mes7 vl_mes8 vl_mes9 vl_mes10 vl_mes11 vl_mes12 vl_mes13 vl_soma ti_jconskmr-werks ti_jconskmr-bukrs INTO ti_saida2-campo SEPARATED BY ';'. APPEND ti_saida2. ENDLOOP. ENDLOOP. ENDFORM. " genera_ti_salida *&---------------------------------------------------------------------* *& Form Usa_campo *&---------------------------------------------------------------------* FORM zera_campo USING vl_mes TYPE any. IF vl_mes = '0.000'. vl_mes = 0. ENDIF. SHIFT vl_mes LEFT DELETING LEADING space. ENDFORM. " Usa_campo *&---------------------------------------------------------------------* *& Form genera_arc_salida *&---------------------------------------------------------------------* * Genera Archivos Salidas *----------------------------------------------------------------------* FORM gera_arq_saida. IF NOT p_local IS INITIAL. * Genera Archivos Local PERFORM gera_arq_local. ELSE. * Genera Archivos Servidor PERFORM gera_arq_server. ENDIF. ENDFORM. " genera_arc_salida *&---------------------------------------------------------------------* *& Form genera_arc_local *&---------------------------------------------------------------------* * Genera Archivos Local *----------------------------------------------------------------------* FORM gera_arq_local. * Download Local Archivo 1 PERFORM download_local TABLES ti_saida1 USING p_file1. * Download Local Archivo 2 PERFORM download_local TABLES ti_saida2 USING p_file2. ENDFORM. " genera_arc_local *&---------------------------------------------------------------------* *& Form download_local *&---------------------------------------------------------------------* * Exporta TI para Archivos Locales *----------------------------------------------------------------------* FORM download_local TABLES ti_saida STRUCTURE ti_saida1 USING file TYPE any. DATA: vl_file TYPE string. vl_file = file. *{ REPLACE ZLAK900520 1 *\ CALL FUNCTION 'GUI_DOWNLOAD' *\ EXPORTING *\ filename = vl_file *\ TABLES *\ data_tab = ti_saida *\ EXCEPTIONS *\ file_write_error = 1 *\ no_batch = 2 *\ gui_refuse_filetransfer = 3 *\ invalid_type = 4 *\ no_authority = 5 *\ unknown_error = 6 *\ header_not_allowed = 7 *\ separator_not_allowed = 8 *\ filesize_not_allowed = 9 *\ header_too_long = 10 *\ dp_error_create = 11 *\ dp_error_send = 12 *\ dp_error_write = 13 *\ unknown_dp_error = 14 *\ access_denied = 15 *\ dp_out_of_memory = 16 *\ disk_full = 17 *\ dp_timeout = 18 *\ file_not_found = 19 *\ dataprovider_exception = 20 *\ control_flush_error = 21 *\ OTHERS = 22. CALL METHOD cl_gui_frontend_services=>gui_download EXPORTING filename = vl_file * FILETYPE = * DAT_MODE = CHANGING data_tab = ti_saida[] EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 not_supported_by_gui = 22 error_no_gui = 23 OTHERS = 24. *} REPLACE IF sy-subrc EQ 0. MESSAGE i000 WITH text-006. " Archivo generado como Exitoso. ELSE. MESSAGE i000 WITH text-005. " Error al Exportar el Archivo. STOP. ENDIF. ENDFORM. " download_local *&---------------------------------------------------------------------* *& Form genera_arc_server *&---------------------------------------------------------------------* * Genera Archivos Servidor *----------------------------------------------------------------------* FORM gera_arq_server. * Download Local Archivo 1 PERFORM download_server TABLES ti_saida1 USING p_file1. * Download Local Archivo 2 PERFORM download_server TABLES ti_saida2 USING p_file2. ENDFORM. " genera_arc_server *&---------------------------------------------------------------------* *& Form download_server *&---------------------------------------------------------------------* * Exporta TI para Archivos no Servidor *----------------------------------------------------------------------* FORM download_server TABLES ti_saida STRUCTURE ti_saida1 USING file TYPE any. OPEN DATASET file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc NE 0. MESSAGE i020 WITH file. STOP. ENDIF. LOOP AT ti_saida. TRANSFER ti_saida TO file. ENDLOOP. CLOSE DATASET file. IF sy-subrc EQ 0. MESSAGE i000 WITH text-006. " Archivo generado como exitoso. ELSE. MESSAGE i000 WITH text-005. " Error al Exportar el Archivo. STOP. ENDIF. ENDFORM. " download_server *&---------------------------------------------------------------------* *& Form calcula_mes *&---------------------------------------------------------------------* * Calcula mes de acuerdo con mes inicial *----------------------------------------------------------------------* FORM calcula_mes USING mes TYPE any. DATA: vl_mes2 TYPE i, vl_mes3 TYPE i, vl_mes4 TYPE i, vl_mes5 TYPE i, vl_mes6 TYPE i, vl_mes7 TYPE i, vl_mes8 TYPE i, vl_mes9 TYPE i, vl_mes10 TYPE i, vl_mes11 TYPE i, vl_mes12 TYPE i, vl_mes13 TYPE i. CLEAR mes. IF ti_dados-lfdat+0(4) EQ p_ano. vl_mes2 = p_mes + 1. vl_mes3 = p_mes + 2. vl_mes4 = p_mes + 3. vl_mes5 = p_mes + 4. vl_mes6 = p_mes + 5. vl_mes7 = p_mes + 6. vl_mes8 = p_mes + 7. vl_mes9 = p_mes + 8. vl_mes10 = p_mes + 9. vl_mes11 = p_mes + 10. vl_mes12 = p_mes + 11. IF ti_dados-lfdat+4(2) EQ p_mes. mes = '01'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes2. mes = '02'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes3. mes = '03'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes4. mes = '04'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes5. mes = '05'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes6. mes = '06'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes7. mes = '07'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes8. mes = '08'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes9. mes = '09'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes10. mes = '10'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes11. mes = '11'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes12. mes = '12'. ENDIF. ELSE. vl_mes2 = p_mes - 11. vl_mes3 = p_mes - 10. vl_mes4 = p_mes - 9. vl_mes5 = p_mes - 8. vl_mes6 = p_mes - 7. vl_mes7 = p_mes - 6. vl_mes8 = p_mes - 5. vl_mes9 = p_mes - 4. vl_mes10 = p_mes - 3. vl_mes11 = p_mes - 2. vl_mes12 = p_mes - 1. vl_mes13 = p_mes. IF ti_dados-lfdat+4(2) EQ vl_mes2. mes = '02'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes3. mes = '03'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes4. mes = '04'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes5. mes = '05'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes6. mes = '06'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes7. mes = '07'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes8. mes = '08'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes9. mes = '09'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes10. mes = '10'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes11. mes = '11'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes12. mes = '12'. ELSEIF ti_dados-lfdat+4(2) EQ vl_mes13. mes = '13'. ENDIF. ENDIF. ENDFORM. " calcula_mes *&---------------------------------------------------------------------* *& Form select_eban *&---------------------------------------------------------------------* * Selecciona datos de Requisiciones Pendientes para el Periodo *----------------------------------------------------------------------* FORM select_eban. DATA: vl_tabix LIKE sy-tabix, vl_days TYPE i. * Selecciona datos de Requisiciones Pendientes SELECT matnr werks reswk menge meins lfdat webaz FROM eban INTO TABLE ti_eban WHERE loekz NE c_x AND statu EQ c_n AND werks IN s_werks AND lfdat IN r_ano2 AND ebakz NE c_x. IF sy-subrc EQ 0. LOOP AT ti_eban. CLEAR: vl_tabix, vl_days. vl_tabix = sy-tabix. MOVE: ti_eban-webaz TO vl_days. IF vl_days <> 0. CALL FUNCTION 'BKK_ADD_WORKINGDAY' EXPORTING i_date = ti_eban-lfdat i_days = vl_days IMPORTING e_date = ti_eban-lfdat. MODIFY ti_eban INDEX vl_tabix. ENDIF. CLEAR ti_eban. ENDLOOP. * DELETE ti_eban WHERE lfdat NOT IN r_ano. IF sy-subrc EQ 0. SORT ti_eban BY matnr werks lfdat. ENDIF. ENDIF. ENDFORM. " select_eban *&---------------------------------------------------------------------* *& Form select_ekpo *&---------------------------------------------------------------------* * Seleciona datos de Pedidos no finalizados para el Periodo *----------------------------------------------------------------------* FORM select_ekpo. DATA: vl_tabix LIKE sy-tabix, vl_days TYPE i. * Selecciona datos de Pedidos no finalizados SELECT p~matnr p~werks p~menge p~meins t~wemng t~glmng t~eindt p~webaz FROM ekpo AS p INNER JOIN eket AS t ON p~ebeln EQ t~ebeln AND p~ebelp EQ t~ebelp INTO TABLE ti_ekpo WHERE p~loekz NE c_l AND p~werks IN s_werks AND p~elikz EQ space AND p~bstyp EQ c_f AND t~eindt IN r_ano2. IF sy-subrc EQ 0. LOOP AT ti_ekpo. CLEAR: vl_tabix, vl_days. vl_tabix = sy-tabix. MOVE: ti_ekpo-webaz TO vl_days. IF vl_days > 0. CALL FUNCTION 'BKK_ADD_WORKINGDAY' EXPORTING i_date = ti_ekpo-eindt i_days = vl_days IMPORTING e_date = ti_ekpo-eindt. ENDIF. IF ti_ekpo-menge NE ti_ekpo-glmng AND ti_ekpo-glmng GT 0. ti_ekpo-menge = ti_ekpo-glmng - ti_ekpo-wemng. ELSE. ti_ekpo-menge = ti_ekpo-menge - ti_ekpo-wemng. ENDIF. MODIFY ti_ekpo INDEX vl_tabix. CLEAR ti_ekpo. ENDLOOP. DELETE ti_ekpo WHERE eindt NOT IN r_ano. IF sy-subrc EQ 0. SORT ti_ekpo BY matnr werks eindt. ENDIF. ENDIF. ENDFORM. " select_ekpo *&---------------------------------------------------------------------* *& Form eban_ekpo *&---------------------------------------------------------------------* * Trata datos EBAN y EKPO y agrupa por mes *----------------------------------------------------------------------* FORM eban_ekpo. IF ti_eban[] IS INITIAL AND ti_ekpo[] IS INITIAL. MESSAGE i000 WITH text-004. " Dato No encontrado. STOP. ENDIF. * Datos de Requisiciones pendientes LOOP AT ti_eban. CLEAR ti_dados. MOVE: ti_eban-matnr TO ti_dados-matnr, ti_eban-werks TO ti_dados-werks, ti_eban-menge TO ti_dados-menge, ti_eban-meins TO ti_dados-meins, ti_eban-lfdat TO ti_dados-lfdat. APPEND ti_dados. ENDLOOP. * Datos de Pedidos Pendientes LOOP AT ti_ekpo. CLEAR ti_dados. MOVE: ti_ekpo-matnr TO ti_dados-matnr, ti_ekpo-werks TO ti_dados-werks, ti_ekpo-menge TO ti_dados-menge, ti_ekpo-meins TO ti_dados-meins, ti_ekpo-eindt TO ti_dados-lfdat. APPEND ti_dados. ENDLOOP. * Datos de Requisicioes Excepcionales, pero cada/ pedidos cancelados. LOOP AT ti_ebanko. CLEAR ti_dados. MOVE: ti_ebanko-matnr TO ti_dados-matnr, ti_ebanko-werks TO ti_dados-werks, ti_ebanko-menge TO ti_dados-menge, ti_ebanko-meins TO ti_dados-meins, ti_ebanko-lfdat TO ti_dados-lfdat. APPEND ti_dados. ENDLOOP. SORT ti_dados BY matnr werks lfdat menge. ENDFORM. " eban_ekpo *&---------------------------------------------------------------------* *& Form select_eban_ekpo *&---------------------------------------------------------------------* * Selecciona datos Requisiciones cada Pedidos, pero pedidos cancelados *----------------------------------------------------------------------* FORM select_eban_ekpo. DATA: vl_tabix LIKE sy-tabix, vl_days TYPE i. * Seleciona datos de Requisiciones Excepcionales SELECT b~matnr b~werks b~reswk b~menge b~meins b~lfdat b~webaz FROM eban AS b INNER JOIN ekpo AS k ON k~ebeln EQ b~ebeln AND k~ebelp EQ b~ebelp INTO TABLE ti_ebanko WHERE b~loekz NE c_x AND b~statu EQ c_b AND b~werks IN s_werks AND b~lfdat IN r_ano2 AND b~ebakz NE c_x AND k~loekz EQ c_l. IF sy-subrc EQ 0. LOOP AT ti_ebanko. CLEAR: vl_tabix, vl_days. vl_tabix = sy-tabix. MOVE: ti_ebanko-webaz TO vl_days. IF vl_days > 0. CALL FUNCTION 'BKK_ADD_WORKINGDAY' EXPORTING i_date = ti_ebanko-lfdat i_days = vl_days IMPORTING e_date = ti_ebanko-lfdat. MODIFY ti_ebanko INDEX vl_tabix. ENDIF. CLEAR ti_ebanko. ENDLOOP. DELETE ti_ebanko WHERE lfdat NOT IN r_ano. IF sy-subrc EQ 0. SORT ti_ebanko BY matnr werks lfdat. ENDIF. ENDIF. ENDFORM. " select_eban_ekpo *&---------------------------------------------------------------------* *& Form Cant_basica *&---------------------------------------------------------------------* * Convierte a Cant para la UM Basica de Material *----------------------------------------------------------------------* FORM qtde_basica. DATA: vl_menge LIKE eban-menge. READ TABLE ti_mara WITH KEY matnr = ti_dados-matnr BINARY SEARCH. IF sy-subrc EQ 0 . * Comentado. * AND ti_dados-meins NE ti_mara-meins. IF ti_mara-bstme IS INITIAL. CLEAR vl_menge. IF ti_dados-meins NE ti_mara-meins. CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' EXPORTING i_matnr = ti_dados-matnr i_in_me = ti_dados-meins i_out_me = ti_mara-meins i_menge = ti_dados-menge IMPORTING e_menge = vl_menge EXCEPTIONS error_in_application = 1 error = 2 OTHERS = 3. IF sy-subrc NE 0. vl_menge = ti_dados-menge. ENDIF. ti_dados-menge = vl_menge. ENDIF. ELSE. IF ti_dados-meins NE ti_mara-bstme. CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' EXPORTING i_matnr = ti_dados-matnr "Material i_in_me = ti_dados-meins "Und. Med. Básica i_out_me = ti_mara-bstme "Und. Med. Compras i_menge = ti_dados-menge "Cant. IMPORTING e_menge = vl_menge EXCEPTIONS error_in_application = 1 error = 2 OTHERS = 3. IF sy-subrc NE 0. vl_menge = ti_dados-menge. ENDIF. ti_dados-menge = vl_menge. ENDIF. ENDIF. ENDIF. ENDFORM. " Cant_basica *&---------------------------------------------------------------------* *& Form z_authority_check *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM z_authority_check . TYPES: BEGIN OF bukrs_type, bukrs TYPE t001-bukrs, END OF bukrs_type. DATA: bukrs_itab TYPE SORTED TABLE OF bukrs_type WITH NON-UNIQUE KEY bukrs , bukrs_wa TYPE bukrs_type. SELECT bukrs FROM t001 INTO TABLE bukrs_itab WHERE bukrs IN s_bukrs. IF sy-subrc EQ 0. LOOP AT bukrs_itab INTO bukrs_wa. AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' ID 'BUKRS' FIELD bukrs_wa-bukrs ID 'ACTVT' FIELD '03'. IF sy-subrc NE 0. MESSAGE i999(zb) WITH 'F_BKPF_BUK' bukrs_wa-bukrs. LEAVE LIST-PROCESSING. ENDIF. ENDLOOP. REFRESH bukrs_itab. ENDIF. ENDFORM. " z_authority_check *&---------------------------------------------------------------------* *& Form z_selecciona_eord *&---------------------------------------------------------------------* * Selecciona datos de tabla EORD - Lista de opciones de * Suministro Compras *----------------------------------------------------------------------* FORM z_seleciona_eord. DATA: tl_dados LIKE ti_dados OCCURS 0 WITH HEADER LINE. REFRESH: eord_itab, tl_dados[]. IF NOT ti_dados IS INITIAL. tl_dados[] = ti_dados[]. SORT tl_dados BY matnr ASCENDING werks ASCENDING. DELETE ADJACENT DUPLICATES FROM tl_dados COMPARING matnr werks. SELECT matnr werks zeord lifnr flifn febel fresw FROM eord INTO TABLE eord_itab FOR ALL ENTRIES IN ti_dados WHERE matnr = ti_dados-matnr AND werks = ti_dados-werks AND ( febel = c_x or flifn = c_x or fresw = c_x ). IF sy-subrc IS INITIAL. SORT eord_itab BY matnr ASCENDING werks ASCENDING. ENDIF. ENDIF. ENDFORM. " z_selecciona_eord