Cria uma tabela interna dinâmica como exemplo, para podermos explorar os recursos da utilização destas tabelas criadas dinâmicamente.
*&---------------------------------------------------------------------* *& Report ZPEXEMP_TAB_DINAMICA *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZPEXEMP_TAB_DINAMICA NO STANDARD PAGE HEADING MESSAGE-ID 00 LINE-SIZE 120. *----------------------------------------------------------------------* * Tabelas Transparentes *----------------------------------------------------------------------* TABLES: MARA, MARC, MAKT, MVKE, TVKO, T001, TSPAT, T179T, TVM3T, MARM, MLGN, TVKWZ, T604N. *----------------------------------------------------------------------* * Constantes *----------------------------------------------------------------------* DATA: C_ON(1) VALUE 'X', C_OFF(1). *----------------------------------------------------------------------* * Field-symbols *----------------------------------------------------------------------* *p/ser a tabela dinâmica onde constaram os dados de exibição FIELD-SYMBOLS: TYPE ANY TABLE, *work-área p/ trabalhar os dados antes de inclui TYPE ANY, *campo que recebera dados e apontara p/ os campos dinâmicos da wa. TYPE ANY. *----------------------------------------------------------------------* * Tabelas Interna *----------------------------------------------------------------------* *Tabela dinâmica de exibição do ALV DATA: T_DATA TYPE REF TO DATA. *Tabela Descrição do empresa DATA: BEGIN OF T_EMP OCCURS 0, BUKRS LIKE TVKO-BUKRS, BUTXT LIKE T001-BUTXT, END OF T_EMP, *Tabela Descrição do material BEGIN OF T_MAKT OCCURS 0, MATNR LIKE MAKT-MATNR, MAKTX LIKE MAKT-MAKTX, END OF T_MAKT, *Tabela descrição da divisão BEGIN OF T_DIV OCCURS 0, SPART LIKE TSPAT-SPART, VTEXT LIKE TSPAT-VTEXT, END OF T_DIV, *Tabela de descrição Materiais: hierarquias de produtos: textos BEGIN OF T_HIERAR OCCURS 0, PRODH LIKE T179T-PRODH, VTEX1 LIKE T179T-VTEXT, END OF T_HIERAR, *Tabela descrição da família do produto BEGIN OF T_FP OCCURS 0, MVGR3 LIKE TVM3T-MVGR3, BEZEI LIKE TVM3T-BEZEI, END OF T_FP, *Tabela descrição CFOP BEGIN OF T_CFOP OCCURS 0, STEUC LIKE T604N-STEUC, TEXT1 LIKE T604N-TEXT1, END OF T_CFOP, *Tabela de dados mestres de material BEGIN OF T_MARA OCCURS 0, MATNR LIKE MARA-MATNR, BISMT LIKE MARA-BISMT, VOLUM LIKE MARA-VOLUM, BRGEW LIKE MARA-BRGEW, NTGEW LIKE MARA-NTGEW, GEWEI LIKE MARA-GEWEI, VOLEH LIKE MARA-VOLEH, SPART LIKE MARA-SPART, EAN11 LIKE MARA-EAN11, PRDHA LIKE MARA-PRDHA, END OF T_MARA, *Tabela de Dados de centro para material BEGIN OF T_MARC OCCURS 0, MATNR LIKE MARC-MATNR, WERKS LIKE MARC-WERKS, DISMM LIKE MARC-DISMM, BSTMI LIKE MARC-BSTMI, STEUC LIKE MARC-STEUC, * LGPRO like marc-lgpro, END OF T_MARC, *Tabela Unidade de organização: organização de vendas BEGIN OF T_TVKO OCCURS 0, VKORG LIKE TVKO-VKORG, END OF T_TVKO, *Tabela Dados de venda para material BEGIN OF T_MVKE OCCURS 0, MATNR LIKE MVKE-MATNR, VKORG LIKE MVKE-VKORG, VTWEG LIKE MVKE-VTWEG, SCMNG LIKE MVKE-SCMNG, MVGR3 LIKE MVKE-MVGR3, END OF T_MVKE, *Tabela de Unidades de medida para material BEGIN OF T_MARM OCCURS 0, MATNR LIKE MARM-MATNR, MEINH LIKE MARM-MEINH, UMREZ LIKE MARM-UMREZ, UMREN LIKE MARM-UMREN, EAN11 LIKE MARM-EAN11, HOEHE LIKE MARM-HOEHE, END OF T_MARM, *Tabela de Unidades de medida para material auxiliar BEGIN OF T_UNID OCCURS 0, MEINH LIKE MARM-MEINH, UNID(2), UMRE(11), END OF T_UNID, *Tabela de descrição da unidade BEGIN OF T_T006A OCCURS 0, MSEHI LIKE T006A-MSEHI, MSEHT LIKE T006A-MSEHT, END OF T_T006A, *Tabela de Atribuição depósito IM a sistema de depósito WM BEGIN OF T_T320 OCCURS 0, WERKS LIKE T320-WERKS, LGORT LIKE T320-LGORT, LGNUM LIKE T320-LGNUM, END OF T_T320, *Tabela de Dados de material por sistema de depósito BEGIN OF T_MLGN OCCURS 0, MATNR LIKE MLGN-MATNR, LGNUM LIKE MLGN-LGNUM, LVSME LIKE MLGN-LVSME, END OF T_MLGN, *Tabela de Unidade organizaçional: centros permitidos por OrgV BEGIN OF T_TVKWZ OCCURS 0, VKORG LIKE TVKWZ-VKORG, VTWEG LIKE TVKWZ-VTWEG, WERKS LIKE TVKWZ-WERKS, END OF T_TVKWZ, *Tabela auxiliar organização de vendas BEGIN OF T_ORGV OCCURS 0, VKORG LIKE TVKWZ-VKORG, VTWEG LIKE TVKWZ-VTWEG, END OF T_ORGV. *----------------------------------------------------------------------* * Estrutura de dados *----------------------------------------------------------------------* * Work-Área p/ montar dados dos campos DATA: WA_FCAT_LVC TYPE LVC_S_FCAT, * Tabela sem cabeçalho p/ receber dados da wa acima e passar informações * de campos p/ gerar a tabela dinâmica LT_FCAT_LVC TYPE LVC_T_FCAT. *----------------------------------------------------------------------* * Variáveis *----------------------------------------------------------------------* DATA: V_REPID LIKE SY-REPID, VARIANT_SAVE(1) TYPE C, VARIANT_EXIT(1) TYPE C, V_CAMP(7), " variável p/ montar campo dinâmico V_TEXT(100). " variável p/ montar texto dinâmico *----------------------------------------------------------------------* * Definições ALV *----------------------------------------------------------------------* TYPE-POOLS SLIS. DATA: REPID LIKE SY-REPID. DATA: S_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE. DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV. DATA: S_PRINT TYPE SLIS_PRINT_ALV. DATA: S_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE. DATA: VARIANTE LIKE DISVARIANT. DATA: DEF_VARIANTE LIKE DISVARIANT. DATA: S_SELFIELD TYPE SLIS_SELFIELD. DATA: LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER. *----------------------------------------------------------------------* * Tela de Seleção *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME. PARAMETERS: P_BUKRS LIKE T001-BUKRS OBLIGATORY. " Empresa SELECT-OPTIONS: S_MATNR FOR MARA-MATNR, " Material (SAP) S_BISMT FOR MARA-BISMT, " Material (SAC) S_MTART FOR MARA-MTART, " Tipo de produto S_MATKL FOR MARA-MATKL, " Grupo de Mercadorias S_SPART FOR MARA-SPART, " Setor de Atividade S_PRDHA FOR MARA-PRDHA, " Hierarquia de Prod. S_MVGR3 FOR MVKE-MVGR3, " Família do produto S_STEUC FOR MARC-STEUC, " Classificação Fiscal S_DISMM FOR MARC-DISMM, " Tipo de MRP S_ERSDA FOR MARA-ERSDA, " Data de criação S_LAEDA FOR MARA-LAEDA. " Data de Manutenção SELECTION-SCREEN END OF BLOCK B1. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME. PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT. "Layout SELECTION-SCREEN END OF BLOCK B2. *----------------------------------------------------------------------* * Controle F4 para campo variante * *----------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI. PERFORM F_F4_FOR_VARIANT USING P_VARI. *----------------------------------------------------------------------* * Evento at selection-screen * *----------------------------------------------------------------------* AT SELECTION-SCREEN. * Seleciona dados PERFORM F_DADOS. *Trata Variante de Exibição PERFORM F_TRATAR_VARIANTE USING P_VARI. * Incialização INITIALIZATION. * Verifica s e existe um variante de exibição default PERFORM F_INIT_ALV. * mostra as variantes para este relatório PERFORM F_EXIBE_VARIANTE USING P_VARI. START-OF-SELECTION. * Busca dados complementares PERFORM F_DADOS_COMPL. END-OF-SELECTION. * Definindo Layout de Exibição PERFORM F_DEFINE_LAYOUT. * Definindo Fieldcat PERFORM F_DEFINE_FIELDCAT. * Monta dados PERFORM F_MONTA_DADOS. * Impressão do ALV passando tabela dinâmica PERFORM F_IMPRIME_DADOS USING . *********************************************************************** *Rotinas *********************************************************************** *----------------------------------------------------------------------* * Form f_f4_for_variant *----------------------------------------------------------------------* * Gerar matchcode com os layouts gravados *----------------------------------------------------------------------* * -->P_P_VARI Variante *----------------------------------------------------------------------* FORM F_F4_FOR_VARIANT USING P_VARI. * Função para selecionar o Layout gravado CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING IS_VARIANT = VARIANTE I_SAVE = VARIANT_SAVE IMPORTING E_EXIT = VARIANT_EXIT ES_VARIANT = DEF_VARIANTE EXCEPTIONS NOT_FOUND = 2. IF SY-SUBRC = 2. MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ELSE. IF VARIANT_EXIT = SPACE. P_VARI = DEF_VARIANTE-VARIANT. ENDIF. ENDIF. ENDFORM. " f_f4_for_variant *----------------------------------------------------------------------* * Form f_dados *----------------------------------------------------------------------* * Seleciona dados *----------------------------------------------------------------------* FORM F_DADOS. * Seleção descrição da empresa: SELECT BUKRS BUTXT INTO TABLE T_EMP FROM T001 WHERE BUKRS = P_BUKRS AND SPRAS = SY-LANGU. IF SY-SUBRC NE 0. MESSAGE E208(00) WITH 'Não há dados para esta seleção'(M01). ENDIF. * Seleção das unidades de org. tabelas TVKO: SELECT VKORG INTO TABLE T_TVKO FROM TVKO WHERE BUKRS = P_BUKRS. IF T_TVKO[] IS INITIAL. MESSAGE E208(00) WITH 'Não há dados para esta seleção'(M01). ENDIF. * Seleção dados tabelas TVKWZ: SELECT VKORG VTWEG WERKS INTO TABLE T_TVKWZ FROM TVKWZ FOR ALL ENTRIES IN T_TVKO WHERE VKORG = T_TVKO-VKORG. *Monta t_orgv com dados da T_TVKWZ LOOP AT T_TVKWZ. CLEAR T_ORGV. MOVE: T_TVKWZ-VKORG TO T_ORGV-VKORG, T_TVKWZ-VTWEG TO T_ORGV-VTWEG. COLLECT T_ORGV. ENDLOOP. IF T_ORGV[] IS INITIAL. MESSAGE E208(00) WITH 'Não há dados para esta seleção'(M01). ENDIF. * Seleção dados da tabelas MARA: SELECT MATNR BISMT VOLUM BRGEW NTGEW GEWEI VOLEH SPART EAN11 PRDHA INTO TABLE T_MARA FROM MARA WHERE MATNR IN S_MATNR AND BISMT IN S_BISMT AND MTART IN S_MTART AND MATKL IN S_MATKL AND SPART IN S_SPART AND PRDHA IN S_PRDHA AND ERSDA IN S_ERSDA AND LAEDA IN S_LAEDA. IF T_MARA[] IS INITIAL. MESSAGE E208(00) WITH 'Não há dados para esta seleção'(M01). ENDIF. * Seleção dados da tabelas MARC: SELECT MATNR WERKS DISMM BSTMI STEUC INTO TABLE T_MARC FROM MARC FOR ALL ENTRIES IN T_MARA WHERE MATNR = T_MARA-MATNR AND STEUC IN S_STEUC AND DISMM IN S_DISMM. *Elimina registros da t_marc com centro inválido LOOP AT T_MARC. READ TABLE T_TVKWZ WITH KEY WERKS = T_MARC-WERKS. IF SY-SUBRC NE 0. DELETE T_MARC. ENDIF. ENDLOOP. *Elimina registros da t_mara sem dados na T_marc LOOP AT T_MARA. READ TABLE T_MARC WITH KEY MATNR = T_MARA-MATNR. IF SY-SUBRC NE 0. DELETE T_MARA. ENDIF. ENDLOOP. IF T_MARA[] IS INITIAL. MESSAGE E208(00) WITH 'Não há dados para esta seleção'(M01). ENDIF. * Seleção dados da tabelas MVKE: SELECT MATNR VKORG VTWEG SCMNG MVGR3 INTO TABLE T_MVKE FROM MVKE FOR ALL ENTRIES IN T_MARA WHERE MATNR = T_MARA-MATNR AND MVGR3 IN S_MVGR3. LOOP AT T_MVKE. READ TABLE T_ORGV WITH KEY VKORG = T_MVKE-VKORG VTWEG = T_MVKE-VTWEG. IF SY-SUBRC NE 0. DELETE T_MVKE. ENDIF. ENDLOOP. * Seleção dados da tabelas T320: SELECT WERKS LGORT LGNUM INTO TABLE T_T320 FROM T320 FOR ALL ENTRIES IN T_TVKWZ WHERE WERKS = T_TVKWZ-WERKS. * Seleção dados da tabelas MLGN: SELECT MATNR LGNUM LVSME INTO TABLE T_MLGN FROM MLGN FOR ALL ENTRIES IN T_T320 WHERE MATNR IN S_MATNR AND LGNUM = T_T320-LGNUM. ENDFORM. " f_dados *----------------------------------------------------------------------* * Form f_tratar_variante *----------------------------------------------------------------------* * Tratar a variante informada. *----------------------------------------------------------------------* FORM F_TRATAR_VARIANTE USING P_VARI. IF NOT P_VARI IS INITIAL. MOVE VARIANTE TO DEF_VARIANTE. MOVE P_VARI TO DEF_VARIANTE-VARIANT. CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING I_SAVE = VARIANT_SAVE CHANGING CS_VARIANT = DEF_VARIANTE. VARIANTE = DEF_VARIANTE. ELSE. CLEAR VARIANTE. VARIANTE-REPORT = V_REPID. ENDIF. ENDFORM. " f_tratar_variante *----------------------------------------------------------------------* * Form f_init_alv *----------------------------------------------------------------------* FORM F_INIT_ALV. CLEAR: VARIANTE. REPID = SY-REPID. VARIANTE-REPORT = REPID. CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' EXPORTING I_SAVE = 'A' CHANGING CS_VARIANT = VARIANTE EXCEPTIONS NOT_FOUND = 2. IF SY-SUBRC = 0. P_VARI = VARIANTE. ENDIF. ENDFORM. " f_init_alv *----------------------------------------------------------------------* * Form f_exibe_variante *----------------------------------------------------------------------* * Exibir variante *----------------------------------------------------------------------* FORM F_EXIBE_VARIANTE USING P_VARI. CLEAR VARIANTE. MOVE: SY-REPID TO V_REPID, 'A' TO VARIANT_SAVE, V_REPID TO VARIANTE-REPORT. S_PRINT-NO_PRINT_LISTINFOS = C_ON. *Buscar variante DEFAULT, ou seja, se não for informado nenhuma *variante, o programa executará com esta DEF_VARIANTE = VARIANTE. CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' EXPORTING I_SAVE = VARIANT_SAVE CHANGING CS_VARIANT = DEF_VARIANTE EXCEPTIONS NOT_FOUND = 2. IF SY-SUBRC = 0. P_VARI = DEF_VARIANTE-VARIANT. ENDIF. ENDFORM. " f_exibe_variante *----------------------------------------------------------------------* * Form f_define_layout *----------------------------------------------------------------------* * Definindo Layout de Exibição *----------------------------------------------------------------------* FORM F_DEFINE_LAYOUT. S_LAYOUT-ZEBRA = C_ON. ENDFORM. " f_define_layout *----------------------------------------------------------------------* * Form f_define_fieldcat *----------------------------------------------------------------------* FORM F_DEFINE_FIELDCAT. * Monta informações dos campos fixos PERFORM MONTA_FIELDCAT USING: 'BUKRS' 'TVKO' TEXT-F01 '10' 'BUKRS', 'BUTXT' 'T001' TEXT-F02 '15' 'BUTXT', 'MATNR' 'MARA' TEXT-F03 '15' 'MATNR', 'BISMT' 'MARA' TEXT-F04 '15' 'BISMT', 'MAKTX' 'MAKT' TEXT-F05 '15' 'MAKTX', 'SPART' 'MARA' TEXT-F06 '5' 'SPART', 'VTEXT' 'TSPAT' TEXT-F07 '40' 'VTEXT', 'PRDHA' 'MARA' TEXT-F08 '18' 'PRDHA', 'VTEX1' 'T179T' TEXT-F09 '40' 'VTEXT', 'NTGEW' 'MARA' TEXT-F10 '10' 'NTGEW', 'BRGEW' 'MARA' TEXT-F11 '10' 'BRGEW', 'GEWEI' 'MARA' TEXT-F12 '5' 'GEWEI', 'VOLUM' 'MARA' TEXT-F13 '10' 'VOLUM', 'VOLEH' 'MARA' TEXT-F14 '5' 'VOLEH', 'MVGR3' 'MVKE' TEXT-F15 '5' 'MVGR3', 'BEZEI' 'TVM3T' TEXT-F16 '10' 'BEZEI', 'STEUC' 'MARC' TEXT-F17 '10' 'STEUC', 'TEXT1' 'T604N' TEXT-F18 '15' 'TEXT1', 'DISMM' 'MARC' TEXT-F19 '5' 'DISMM', 'BSTMI' 'MARC' TEXT-F20 '5' 'BSTMI', 'SCMNG' 'MVKE' TEXT-F21 '5' 'SCMNG', 'EAN11' 'MARA' TEXT-F22 '10' 'EAN11', 'MEINH' 'MARM' TEXT-F23 '5' 'MEINH', 'LVSME' 'MLGN' TEXT-F24 '5' 'LVSME'. * Monta informações dos campos dinâmicos * Monta unidades dinâmicas LOOP AT T_UNID. * Cod unidade alternativa CLEAR: V_CAMP, V_TEXT. CONCATENATE 'MEINH' T_UNID-UNID INTO V_CAMP. CONCATENATE TEXT-F25 T_UNID-UNID INTO V_TEXT. PERFORM MONTA_FIELDCAT USING V_CAMP 'MARM' V_TEXT '5' 'MEINH'. * Descrição CLEAR: V_CAMP, V_TEXT. CONCATENATE 'MSEHT' T_UNID-UNID INTO V_CAMP. CONCATENATE TEXT-F26 T_UNID-UNID INTO V_TEXT. PERFORM MONTA_FIELDCAT USING V_CAMP 'T006A' V_TEXT '10' 'MSEHT'. * DUN CLEAR: V_CAMP, V_TEXT. CONCATENATE 'EAN11' T_UNID-UNID INTO V_CAMP. CONCATENATE TEXT-F27 T_UNID-UNID INTO V_TEXT. PERFORM MONTA_FIELDCAT USING V_CAMP 'MARM' V_TEXT '10' 'EAN11'. * Quantidade de Unidades CLEAR: V_CAMP, V_TEXT. CONCATENATE 'UMRE' T_UNID-UNID INTO V_CAMP. CONCATENATE TEXT-F28 T_UNID-UNID INTO V_TEXT. PERFORM MONTA_FIELDCAT USING V_CAMP ' ' V_TEXT '11' ' '. IF T_UNID-MEINH(1) = 'P'. * Lastro CLEAR: V_CAMP, V_TEXT. CONCATENATE 'HOEHE' T_UNID-UNID INTO V_CAMP. CONCATENATE TEXT-F29 T_UNID-UNID INTO V_TEXT. PERFORM MONTA_FIELDCAT USING V_CAMP 'MARM' V_TEXT '5' 'HOEHE'. ENDIF. ENDLOOP. ENDFORM. " f_define_fieldcat *&---------------------------------------------------------------------* *& Form f_imprime_dados *&---------------------------------------------------------------------* FORM F_IMPRIME_DADOS USING P_ITAB_OUTPUT TYPE TABLE. PERFORM F_MONTA_TOP_OF_PAGE USING LIST_TOP_OF_PAGE[]. S_PRINT-NO_PRINT_LISTINFOS = C_ON. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = V_REPID I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' IS_LAYOUT = S_LAYOUT IT_FIELDCAT = S_FIELDCAT[] IT_SORT = S_SORT[] I_DEFAULT = 'X' I_SAVE = 'A' IS_VARIANT = VARIANTE IS_PRINT = S_PRINT TABLES T_OUTTAB = P_ITAB_OUTPUT EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF NOT SY-SUBRC IS INITIAL. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " f_imprime_dados *&---------------------------------------------------------------------* *& Form monta_fieldcat *&---------------------------------------------------------------------* *----------------------------------------------------------------------* * -->p_field campo * comentado -->p_tab tabela * -->p_tabref tabela de referencia * -->p_text texto da coluna * -->p_out. tamanho da saida * --> p_ref_field campo de referencia *----------------------------------------------------------------------* FORM MONTA_FIELDCAT USING P_FIELD * p_tab P_TABREF P_TEXT P_OUT P_REF_FIELD. **** Se o programa for um ALV, pode aproveitar p/ carregar fieldcat com * os atributos necessários, caso não se trate de um ALV basta informar o * campo de referencia, a tabela de referência, o campo e a tabela. CLEAR: S_FIELDCAT, WA_FCAT_LVC. WA_FCAT_LVC-FIELDNAME = S_FIELDCAT-FIELDNAME = P_FIELD. WA_FCAT_LVC-TABNAME = S_FIELDCAT-TABNAME = ' '. WA_FCAT_LVC-REF_TABLE = S_FIELDCAT-REF_TABNAME = P_TABREF. WA_FCAT_LVC-SELTEXT = S_FIELDCAT-SELTEXT_L = P_TEXT. WA_FCAT_LVC-OUTPUTLEN = S_FIELDCAT-OUTPUTLEN = P_OUT. WA_FCAT_LVC-REF_FIELD = S_FIELDCAT-REF_FIELDNAME = P_REF_FIELD. * carrega fieldcat do alv APPEND S_FIELDCAT. *inclui dados da work-área p/ tabela sem cab. APPEND WA_FCAT_LVC TO LT_FCAT_LVC. ENDFORM. " monta_fieldcat *----------------------------------------------------------------------* * Form f_monta_dados *----------------------------------------------------------------------* FORM F_MONTA_DADOS. DATA: T_ALVDATA TYPE REF TO DATA. * Monta tabela dinâmica CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE EXPORTING I_STYLE_TABLE = ' ' * tab com as informações de campo IT_FIELDCATALOG = LT_FCAT_LVC IMPORTING * retorna tab dinâmica com campos informados EP_TABLE = T_DATA. * Carrega com a estrutura dos campos passados para o metodo ASSIGN T_DATA->* TO . CREATE DATA T_ALVDATA LIKE LINE OF . ASSIGN T_ALVDATA->* TO . REFRESH . * Percorre Dados Mestres de Material LOOP AT T_MARA. CLEAR: T_MAKT, T_DIV, T_HIERAR, T_MVKE, T_FP, T_TVKWZ, T_MARC, T_MLGN, T_CFOP, T_T320, . * Busca dados empresa READ TABLE T_EMP INDEX 1. * Busca descrição do material READ TABLE T_MAKT WITH KEY MATNR = T_MARA-MATNR. * Busca descrição da divisão READ TABLE T_DIV WITH KEY SPART = T_MARA-SPART. * Busca descrição da hierarquia READ TABLE T_HIERAR WITH KEY PRODH = T_MARA-PRDHA. * Busca dados de venda do material - mvke READ TABLE T_MVKE WITH KEY MATNR = T_MARA-MATNR. * Busca descrição da família do produto READ TABLE T_FP WITH KEY MVGR3 = T_MVKE-MVGR3. * Acessa unidade organizacional - centros permitidos p/ Org. de Vendas READ TABLE T_TVKWZ WITH KEY VKORG = T_MVKE-VKORG VTWEG = T_MVKE-VTWEG. * Busca dados de centro para material READ TABLE T_MARC WITH KEY MATNR = T_MARA-MATNR WERKS = T_TVKWZ-WERKS. * Busca descrição do CFOP READ TABLE T_CFOP WITH KEY STEUC = T_MARC-STEUC. * Acessa tabela de atribuição depósito IM a sist. deposito WM READ TABLE T_T320 WITH KEY WERKS = T_TVKWZ-WERKS. * Busca unidade de medida da caixa de entrada READ TABLE T_MLGN WITH KEY MATNR = T_MARA-MATNR LGNUM = T_T320-LGNUM. * Carreda dados para work-área dinâmica * Campos fixos PERFORM F_CARREGA_DADOS USING: T_EMP-BUKRS 'BUKRS', T_EMP-BUTXT 'BUTXT', T_MARA-MATNR 'MATNR', T_MARA-BISMT 'BISMT', T_MAKT-MAKTX 'MAKTX', T_MARA-SPART 'SPART', T_DIV-VTEXT 'VTEXT', T_MARA-PRDHA 'PRDHA', T_HIERAR-VTEX1 'VTEX1', T_MARA-NTGEW 'NTGEW', T_MARA-BRGEW 'BRGEW', T_MARA-GEWEI 'GEWEI', T_MARA-VOLUM 'VOLUM', T_MARA-VOLEH 'VOLEH', T_MVKE-MVGR3 'MVGR3', T_MVKE-SCMNG 'SCMNG', T_MARA-EAN11 'EAN11', T_FP-BEZEI 'BEZEI', T_MARC-STEUC 'STEUC', T_MARC-DISMM 'DISMM', T_MARC-BSTMI 'BSTMI', T_CFOP-TEXT1 'TEXT1', T_MLGN-LVSME 'LVSME'. * Campos dinâmicos * Unidades Alternativa LOOP AT T_MARM WHERE MATNR = T_MARA-MATNR. * Carrega unidade base IF T_MARM-MEINH = 'ST'. PERFORM F_CARREGA_DADOS USING: T_MARM-MEINH 'MEINH'. ELSE. LOOP AT T_UNID WHERE MEINH = T_MARM-MEINH. * Carrega unidades alternativas * Código da unidade CLEAR V_CAMP. CONCATENATE 'MEINH' T_UNID-UNID INTO V_CAMP. PERFORM F_CARREGA_DADOS USING: T_MARM-MEINH V_CAMP. * Descrição da unidade CLEAR V_CAMP. CONCATENATE 'MSEHT' T_UNID-UNID INTO V_CAMP. READ TABLE T_T006A WITH KEY MSEHI = T_MARM-MEINH. PERFORM F_CARREGA_DADOS USING: T_T006A-MSEHT V_CAMP. * DUN CLEAR V_CAMP. CONCATENATE 'EAN11' T_UNID-UNID INTO V_CAMP. PERFORM F_CARREGA_DADOS USING: T_MARM-EAN11 V_CAMP. * Quantidade da unidades CLEAR V_CAMP. CONCATENATE 'UMRE' T_UNID-UNID INTO V_CAMP. DATA: V_UMREZ(5), V_UMREN(5), V_VALOR(11). V_UMREZ = T_MARM-UMREZ. V_UMREN = T_MARM-UMREN. CONCATENATE V_UMREZ '/' V_UMREN INTO V_VALOR. PERFORM F_CARREGA_DADOS USING: V_VALOR V_CAMP. IF T_MARM-MEINH(1) = 'P'. * Lastro CLEAR V_CAMP. CONCATENATE 'HOEHE' T_UNID-UNID INTO V_CAMP. PERFORM F_CARREGA_DADOS USING: T_MARM-HOEHE V_CAMP. ENDIF. ENDLOOP. ENDIF. ENDLOOP. * Inclui dados da work-área dinâmica na tabela dinâmica PERFORM F_CARREGA_ALV USING . ENDLOOP. ENDFORM. " f_monta_dados *----------------------------------------------------------------------* * Form f_monta_top_of_page *----------------------------------------------------------------------* FORM F_MONTA_TOP_OF_PAGE USING P_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER. DATA: T_HEADER TYPE SLIS_LISTHEADER, V_DATA(10) TYPE C. T_HEADER-TYP = 'H'. T_HEADER-INFO = 'Relatório de Materiais (Pesos e Medidas)'(T01). APPEND T_HEADER TO P_LIST_TOP_OF_PAGE. CLEAR T_HEADER. WRITE SY-DATUM USING EDIT MASK '__.__.____' TO V_DATA. CONCATENATE 'Data : '(023) V_DATA INTO T_HEADER-KEY SEPARATED BY SPACE. T_HEADER-TYP = 'S'. APPEND T_HEADER TO P_LIST_TOP_OF_PAGE. ENDFORM. " f_monta_top_of_page *----------------------------------------------------------------------* * Form f_monta_top_of_page *----------------------------------------------------------------------* FORM TOP_OF_PAGE. * Cabeçalho Logo CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING IT_LIST_COMMENTARY = LIST_TOP_OF_PAGE[] I_LOGO = 'WELLA_LOGO'. ENDFORM. " top_of_page. *----------------------------------------------------------------------* * Form f_dados_compl *----------------------------------------------------------------------* * Busca dados complementares *----------------------------------------------------------------------* FORM F_DADOS_COMPL. * Seleção dados da tabelas MARM: SELECT MATNR MEINH UMREZ UMREN EAN11 HOEHE INTO TABLE T_MARM FROM MARM FOR ALL ENTRIES IN T_MARA WHERE MATNR = T_MARA-MATNR. *Monta auxiliar de unidade t_unid LOOP AT T_MARM WHERE MEINH <> 'ST'. CLEAR T_UNID. T_UNID-MEINH = T_MARM-MEINH. COLLECT T_UNID. ENDLOOP. LOOP AT T_UNID. MOVE SY-TABIX TO T_UNID-UNID. MODIFY T_UNID. ENDLOOP. * Seleção dados de descrição da tabelas makt: SELECT MATNR MAKTX INTO TABLE T_MAKT FROM MAKT FOR ALL ENTRIES IN T_MARA WHERE MATNR = T_MARA-MATNR AND SPRAS = SY-LANGU. * Seleção dados de descrição da divisão da tabelas TSPAT: SELECT SPART VTEXT INTO TABLE T_DIV FROM TSPAT WHERE SPART IN S_SPART AND SPRAS = SY-LANGU. * Seleção dados de descrição hierarquias de produtos da tabelas T179T: SELECT PRODH VTEXT INTO TABLE T_HIERAR FROM T179T WHERE PRODH IN S_PRDHA AND SPRAS = SY-LANGU. * Seleção dados de descrição família do produto da tabelas TVM3T: SELECT MVGR3 BEZEI INTO TABLE T_FP FROM TVM3T WHERE MVGR3 IN S_MVGR3 AND SPRAS = SY-LANGU. * Seleção dados de descrição CFOP da tabelas J_1BT604FV: SELECT STEUC TEXT1 INTO TABLE T_CFOP FROM T604N WHERE SPRAS = SY-LANGU AND LAND1 = 'BR' AND STEUC IN S_STEUC. * Seleção dados de descrição unidade da tabelas T006A: SELECT MSEHI MSEHT INTO TABLE T_T006A FROM T006A FOR ALL ENTRIES IN T_UNID WHERE SPRAS = SY-LANGU AND MSEHI = T_UNID-MEINH. ENDFORM. " f_dados_compl *&---------------------------------------------------------------------* *& Form f_carrega_alv *&---------------------------------------------------------------------* * -->P_TAB tabela * -->P_WA work-área *----------------------------------------------------------------------* FORM F_CARREGA_ALV USING P_TAB TYPE TABLE P_WA. * Inclui dados da work-área dinâmica na tabela dinâmica APPEND P_WA TO P_TAB. ENDFORM. " f_carrega_alv *----------------------------------------------------------------------* * Form f_carrega_dados *----------------------------------------------------------------------* * Carrega dados para work-área dinâmica *----------------------------------------------------------------------* * -->P_valor valor * -->P_campo campo *----------------------------------------------------------------------* FORM F_CARREGA_DADOS USING P_VALOR P_CAMPO. *Aponta para -campo montado ASSIGN COMPONENT P_CAMPO OF STRUCTURE TO . *Move valor para que esta apontando p/ -campo montado MOVE P_VALOR TO . ENDFORM. " f_carrega_dados