Academia SAP Abap_Interna

March 27, 2018 | Author: Vinicius Rosa | Category: Budget, String (Computer Science), Software, Data, Definition


Comments



Description

ACADEMIA INTERNAABAP / SAP R3 • Introdução SAP R/3 • Dicionário de Dados* • Programação • Relatórios • ALV* • On Line* • Batch-Input/Call Transaction* • SapScript* • Exits * exercícios Cronograma www.softtek.com.br Click to edit Master title style 3 3 3 3 INTRODUÇÃO SAP R/3 Objetivos • O que é SAP R/3 • Funcionais e Basis Components • Arquitetura • Projetos • Navegação O que é o SAP R/3? SAP - R/3 • Gestão Empresarial - ERP • Integração • Acesso a informação em tempo real e segura • Tomada de decisão • Evolução e melhorias constantes Funcionais e Basis Components R/3 Cliente / Servidor ABAP/4 FI Contabilidade Financeira CO Controladoria AM Ativos. Fixos PS Gerenc. de Projetos OC Comunicação IS Solucões Setoriais MM Gerenc.de Materiais HR Recursos Humanos SD Vendas e Distribuição PP Plan. da Produção QM Controle de Qualidade PM Manutenção da Planta Sistemas abertos Arquitetura Cliente/Servidor Modelo de dados empresariais Desenhado para todo tipo de negócios Multinacional Funcionalidades sofisticadas Soluções integradas Funcionais e Basis Components Sistema R/3  Sales & Distribution : A solução completa para o gerenciamento integrado de todas tarefas para vendas, faturamento e expedição.  Materials Management : O processo completo de compras, com suporte integrado de resultados e planejamento de produção.  Production Planning : O sistema de PCP ajustável para todos os tipos de produção com suporte integrado de resultados e do gerenciamento de compras.  Quality Management : O sistema para o controle da qualidade assegurada em todas as áreas da cadeia logística.  Plant Maintenance : A solução independente de indústria para a administração da manutenção de sistemas produtivos.  Human Resources Management : Desde o processamento integrado de administração RH, gerenciamento de tempo e despesas de viagens até a folha de pagamento.  Human Resources Planning : Planejamento organizacional, posicionamento, desenvolvimento educacional e controle do custo de pessoal em um sistema totalmente integrado. Sistema R/3  Financial Accounting: Uma ampla visão do desempenho que inclui gerenciamento de caixa, banco eletrônico, controladoria financeira, orçamento de caixa e consolidação.  Controlling: Contabilidade de custos, desde a contabilidade de centros de custos e de elementos de custos até a análise de lucratividade.  Asset Management : O gerenciamento completo de todos os ativos fixos, desde da contabilidade tradicional de ativos e gerenciamento técnico de ativos até a controladoria de investimentos.  Project Information System : A integração de todas as áreas de serviços para o planejamento de projetos, processamento e controle.  Executive Information System (EIS) : Acesso rápido aos dados, fatos e representações gráficas para decisões gerenciais. Sistema R/3 Estrutura Organizacional Grupo de empresas Armazém Organização de compras Sociedade Centro 0001 1000 001 0002 2000 3000 0002 0004 0005 0002 0003 WM 0088 0001 0001 Módulo FI e suas funções Contabilidade Geral Contas a Receber Controlling Financeiro Gestão Orçamentária Consolidação Ativos Financeiros FI-FI FI-LC FI-FM FI-FC FI-AR FI-AP FI-GL Contas a Pagar Contabilidade Empresarial Base Dados Documentos Contabilidade Geral MM SD HR AM MM Fornecedores Clientes Pessoal Ativos Materiais FI FI Consolidação Ledgers PCB Custos de Projetos JOB Ordens de Custos CCA Contab. Centros Custos PC Custo de Produtos PA Análise de Rentabilidade PM- PP Contas a Pagar Compensação Fornecedor Qualificação de fornecedor Estatísticas Antecipações Promissórias Pagtos. parciais Relatórios Previsão de cobrança e pagto. Registro de moeda Rankings EDI Gestão e prevenção de tesouraria CO Auditoría MM Recebto. Pedido de compra Fatura EDI Pagtos Cheque Transferência Compensação Letras Pagar Recebto. Cálculo de interesses Cartas a forn. Confirmação de saldos Correspondência Pagtos Gestão de Materiais - Processo de Abastecimento Gestão de Pedidos Follow-up de Pedidos Pedidos Fatura Verificação de faturas Entrada de mercadoria e gestão de estoques Gestão de Materiais Seleção de fornecedores Associação de fonte aquisição Planejamento Fornecedor Contrato marco Planejamento de necesidades Logística - R/3 Plano de Vendas Vendas Distribuição Faturamento SD Compras Gestão de Estoques Verif. Facturas MM Custo de Produtos Controle de produção Planej. Capacidade MRP Planej, Produção PP Planej. Paradas Manutenção Planej. Inspeção Gestão de inspeção Controle em planta PDC PM QM PP- SFC FI CO AM HR CAD CAM CAP CAQ Provedor Cliente Contabil. Financeira Contabilid. de Custos Ativos Fixos Recursos Humanos Recursos Humanos Gastos de Viagens Salários Organizacão de Rec. Humanos Planejamento de Rec. Humanos Control de custos de Rec. Humanos Gestão de Tempos Relatórios estatísticas Datos Mestres de Pessoal FI / CO Contabilidade Financeira / Analítica PP Controle e planejamento de produção PM Manutenção HR ABAP ? ABAP A B A P / 4 dvanced usiness pplication rogramming www.softtek.com.br Click to edit Master title style 21 21 21 21 Arquitetura Arquitetura em 3 camadas Banco de Dados R/3 Application Server Presentation Server Banco de Dados R/3 Logon Balancing Servidores Servidor DV4 Servidor QA4 Servidor PR4 Ambiente de desenvolvimento Ambiente de consolidação Ambiente de produção Mandantes Servidor DVL Mandante 003 Mandante 120 Request‟s Ambiente de desenvolvimento: client 200 Task Request Transporte Servidor DV4 Servidor QA4 Servidor PR4 Ambiente de desenvolvimento Ambiente de consolidação Ambiente de produção www.softtek.com.br Click to edit Master title style 28 28 28 28 Projetos Fases • Levantamento - BC • Modelagem dos processos atuais • Como deverão ser os processos - BC • Customização • Desenvolvimentos - BC • Validação - BC • Testes individuais/integrados - BC • Produção - BC • Melhorias - BC www.softtek.com.br Click to edit Master title style 30 30 30 30 Navegação www.softtek.com.br Click to edit Master title style 31 31 31 31 DICIONÁRIO DE DADOS Objetivos • O que é dicionário de dados • Elementos do dicionário de dados • Como utilizar o dicionário de dados • Levantamento de informações no R/3 • Integração • Gerenciamento de Dados – Atribuição – Descrição e Significado • Ativação dos Dados Banco de Dados R/3 Dicionário de Dados Tabela DICIONÁRIO ABAP/4 DEFINIÇÃO LÓGICA DA TABELA BANCO DE DADOS DEFINIÇÃO FÍSICA DA TABELA Campo 1 Campo 2 Campo 3 Campo 4 Tabela Tabela Campo 1 Campo 2 Campo 3 Campo 4 Dicionário ABAP/4 Banco de Dados R/3 Tabela 1 Tabela 2 Tabela “n” “DB UTILITY” Tabela 1 Campo 1 Campo 2 Campo 3 Campo 4 Campo 5 Tabela 2 Campo 1 Campo 2 Tabela “n” Campo 2 Campo 3 Campo 5 • Sistema de gerenciamento de banco de dados relacional • Dados trabalhados via SQL Elementos do Dicionário de Dados • Tabelas - armazenam dados • Estruturas - não armazenam dados • Visões - join de tabelas e restrição de campos • Campos • Elementos de dados • Domínios • Ajuda de pesquisa AMBIENTE DE DESENVOLVIMENTO Ferramentas Modelagem de Dados Telas AMBIENTE DE EXECUÇÃO DA APLICAÇÃO Interpretador Controle de Diálogo Interfaces Módulos Banco de Dados R/3 Integração do Dicionário de Dados www.softtek.com.br Click to edit Master title style 38 38 38 38 Tabelas Elemento de Dados e Domínios Elemento de Dados Domínio Utiliza Utiliza Definição Semântica Definição Técnica Tabela Campo Banco de Dados R/3 Generalizando Domínio Tabela 1 Tabela 2 Tabela 3 Tabela 4 Tabela 5 Elemento de Dados 1 Elemento de Dados 3 Elemento de Dados 2 Foreign Key Table T1 Field 1 Field 2 Field 3 Field 4 Primary Key Table T2 (check table) Field A Field B Field C Field D Primary Key Foreign Key Field Estruturas As estruturas possuem os mesmos elementos das tabelas mas não armazenam dados. Só estão preenchidas em run-time. www.softtek.com.br Click to edit Master title style 43 43 43 43 Visões Banco de Dados R/3 Tabela 1 Tabela 2 Tabela “n” View Visões Trabalhando com a SE11 www.softtek.com.br Click to edit Master title style 46 46 46 46 Levantamento de Informações • F1 - Ajuda (Help) • F9 - Informação técnica Funções Exercício 1. Criar uma tabela Z no dicionário de dados, com o nome ZTESTE_001. Layout : - DOCUMENTO chave numérico 10 - ITEM chave numérico 05 - TEXTO alfa 40 - MATERIAL numérico 06 - QUANTIDADE numérico 04 - PRECO_UNITARIO numérico 15(02) - PRECO_TOTAL numérico 15(02) • Os desenvolvimentos devem ser amarrados em uma mesma request. A descrição da request deve começar por : “TREIN ABAP ???? - ... “ ???? : Iniciais do nome, para identificar o usuário. • Os elementos de dados e seus domínios devem ser criados. Objetos Z. 2. Preencher manualmente a tabela criada, com os registros abaixo, via diálogo de atualização (SE11/SM30). Documento Item Texto Material Qtde Preço Unit Preço Tot 1000000001 00001 Documento teste 001 900001 0010 10,00 1000000001 00002 Documento teste 001 900002 0012 12,00 1000000002 00001 Documento teste 001 900001 0009 100,00 1000000002 00002 Documento teste 001 900003 0020 25,00 500,00 1000000002 00003 Documento teste 001 900003 0009 50,00 Exercício - continuação PROGRAMAÇÃO SE38/SE80 - Navegação • Tipos de progamas possíveis • Estrutura geral de um programa abap Criando um novo programa Declaração de tabelas Tabelas do dicionário de dados TABLES : tabela01, tabela02, … . Tabelas internas DATA: BEGIN OF t_tabela01 OCCURS 0, campo1(16) TYPE c, campo2 LIKE tabela01-campo, ... END OF t_tabela01. DATA: BEGIN OF t_tabela02 OCCURS 0. INCLUDE STRUCTURE tabela02. DATA: END OF t_tabela02. Como funciona o Header Line 1001 ABC A90S 23,00 1002 DEF J82J 02,03 2003 GHI KK89 00,01 Header Line Registros da Tabela Obs.: os registros são trabalhados no Header e posteriormente levados à tabela. Declaração de estrutura Estrutura DATA: BEGIN OF e_tabela01, campo1(16) TYPE c, campo2 LIKE tabela01-campo, ... END OF e_tabela01. DATA: BEGIN OF e_tabela02. INCLUDE STRUCTURE tabela02. DATA: END OF e_tabela02. 1001 ABC A90S 23,00 Estrutura Obs.: a estrutura é criada apenas em tempo de execução, nunca gravada. Declaração de variáveis Variávieis - Por referência a outro campo de tabela já existente : DATA: variavel01 LIKE tabela01-campo01. - Pelo tipo que queremos : DATA: variavel02(04) TYPE i. - Uma variável com a estrutura de outra : DATA: variavel03 LIKE tabela02. Tipos de dados Tipos I -> inteiro (4 bytes c/ sinal) N -> numérico (só números) P -> compactado F -> ponto flutuante C -> caracter D -> data (AAAAMMDD) T -> hora (HHMMSS) X -> hexadecimal (sequência de bytes) Obs.: se não for atribuído tipo a variável, esta será definida como caracter, automáticamente. Tela de seleção Tela de seleção SELECTION-SCREEN BEGIN OF BLOCK bloco1 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_period FOR sy-datum OBLIGATORY. SELECTION-SCREEN END OF BLOCK bloco1. SELECTION-SCREEN BEGIN OF BLOCK bloco2 WITH FRAME TITLE text-002. SELECT-OPTIONS: s_pernr FOR pa0000-pernr, “Crachá ... SELECTION-SCREEN END OF BLOCK bloco2. SELECTION-SCREEN: BEGIN OF BLOCK bloco3 WITH FRAME TITLE text-014. SELECT-OPTIONS: s_tipo FOR zthrvrub-tipo NO INTERVALS, s_awart FOR pa2001-awart NO INTERVALS. "Ausência SELECTION-SCREEN: END OF BLOCK bloco3. Tela de seleção SELECTION-SCREEN BEGIN OF BLOCK bloco4 WITH FRAME TITLE text-032. PARAMETERS: p_data LIKE sy-datum OBLIGATORY. SELECTION-SCREEN END OF BLOCK bloco4. SELECTION-SCREEN BEGIN OF BLOCK BLOCO5 WITH FRAME TITLE TEXT-033. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: P_FAB RADIOBUTTON GROUP RADI. SELECTION-SCREEN COMMENT 5(30) TEXT-034 FOR FIELD P_FAB. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: P_CD RADIOBUTTON GROUP RADI. SELECTION-SCREEN COMMENT 5(30) TEXT-035 FOR FIELD P_CD. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK BLOCO5. SELECTION-SCREEN SKIP 1. O comando SKIP pula o número de linhas identificado SELECTION-SCREEN ULINE. O comando ULINE imprime uma linha contínua Eventos de um programa Abap INITIALIZATION: Onde se pode setar variáveis e preencher atributos ao se inicializar o programa. START-OF-SELECTION: Corpo principal do programa. Onde as seleções de dados são feitas e informações trabalhadas. END-OF-SELECTION: Não é obrigatório, mas costuma-se utilizar este ponto para impressão de relatórios e finalização do processo. TOP-OF-PAGE: Este evento se processa antes do primeiro dado ser impresso em cada página. Pode ser usado como cabeçalho, em companhia do NO STANDARD PAGE HEADING. END-OF-PAGE: Este evento ocorre quando se ultrapassa o número de linhas da página corrente. Ou quando se passa de uma página à outra. IF -IF… ENDIF. Este comando permite que se desvie o fluxo do programa, dependendo da condição. Para encerrar usa-se: ENDIF, pode-se ainda ELSEIF e ELSE. O programa só irá executar a condição correta. IF <condição> . … ENDIF. Exemplo: IF VBAP-VBELN IS INITIAL. MESSAGE E001(ZSSI). ENDIF. -IF... ELSE... ENDIF. IF <condição> . … ELSE. … ENDIF. Exemplo.: IF VBAP-VBELN is INITIAL. MESSAGE E001(ZSSI). ElSE. MOVE VBAP-VBELN TO W_VBELN. ENDIF. Comandos básicos - IF -IF …ELSEIF…ELSEIF…ENDIF. IF <condição1> . … ELSEIF <condição2> . ... ELSEIF <condição3> . ... ENDIF. Exemplo.: IF VBAP-VBELN is INITIAL. MESSAGE E001(ZSSI). ElSEIF not VBAP-VBELN is INITIAL . MOVE VBAP-VBELN TO W_PERNR. ELSEIF not VBAP-VBELN is INITIAL AND W_VBELN is INITIAL. MOVE VBAP-VBELN TO W_VBELN. ENDIF. Comandos básicos - IF LOOP -LOOP …ENDLOOP. LOOP AT <itab>. … … … ENDLOOP. LOOP AT <itab> WHERE <condição>. … … … ENDLOOP. Comandos básicos - LOOP CASE -CASE …ENDCASE. É um controle baseado em índice de objeto de dados. Este controle deve ser concluído com ENDCASE. CASE <f>. WHEN <f 01> [OR <f 02> OR ...]. ... WHEN <f 03>.[OR <f 04> OR ...] ... WHEN <f 05> [OR <f 06> OR ...]. ... WHEN ... ... WHEN OTHERS. ... ENDCASE. Exemplo: CASE W_DATA(02). When ‘01’. W_DATA = W_DATA + 1. When ‘02’. W_DATA = W_DATA + 2. When others. Clear W_DATA. ENDCASE. Comandos básicos - CASE DO -DO …ENDDO. Repete o processamento que está dentro de DO e ENDDO. Terminando com os comandos EXIT, STOP e REJECT. Pode usar CONTINUE, para terminar o passo do DO e continuar o passo seguinte. DO < n > TIMES. ... ENDDO. Exemplo1: DO 10 TIMES. IF VBAK-VBELN eq VBAK-VBELN. W_VBELN = VBAK-VBELN. ENDIF. ENDDO. Exemplo2: DO. IF VBAK-VBELN is INITIAL. EXIT. ELSEIF VBAK-VBELN in P_VBELN. CONTINUE. ENDIF. ENDDO. Comandos básicos - DO WHILE -WHILE …ENDWHILE. Repete o processamento que está dentro de WHILE e ENDWHILE, se a expressão é verdadeira. A cada passagem a expressão é verificada. Pode usar CONTINUE , para terminar o passo do WHILE e continuar o passo seguinte. WHILE expressão. … … ENDWHILE. Exemplo: WHILE W_WRITE <= 10. WRITE: / TEXT-001. W_WRITE = W_WRITE + 1. ENDWHILE. CHECK - CHECK Para encerrar uma sub-rotina usa-se, frequentemente, ENDFORM. Podemos terminar antes, usando os comandos EXIT e CHECK. Se a expressão lógica estabelecida no CHECK for falsa, a sub-rotina será encerrada. Se a expressão CHECK for aplicada a um LOOP, encerra-se o LOOP. CHECK SY-SUBRC = 0. Comandos básicos – WHILE / CHECK MOVE -MOVE MOVE <c1> TO <c2> . <c4> = <c3> = <c1> -MOVE utilizando tabela interna MOVE <itab1> TO <itab2>. <itab2> = <itab1> A citação acima tem o mesmo efeito que <itab2> = <itab1>. -MOVE-CORRESPONDING Este comando move os campos idênticos de uma estrutura para outra. MOVE-CORRESPONDING <struct1> TO <struct2>. Comandos básicos – MOVE WRITE -WRITE É comum os campos saírem justificados a esquerda. Os campos numéricos são alinhados a direita. Exemplos: WRITE <f>. WRITE: /TEXT-001, TEXT-002, TEXT-003+2(8). WRITE: /002 TEXT-004. Opções: ... NO-ZERO. ... NO-SIGN. ... DD/MM/YY. ... MM/DD/YY. ... DD/MM/YYYY. ... MM/DD/YYYY. ... DDMMYY. ... CURRENCY w. ... DECIMALS d. ... ROUND R. ... UNIT u. ... USING EDIT MASK mask. ... UNDER g. ... NO-GAP. ... LEFT-JUSTIFIED. ... CENTERED. ... RIGHT-JUSTIFIED. Comandos básicos – WRITE CLEAR -CLEAR Reseta o valor da variável. Também aplica-se a estruturas e tabelas, limpando o header line, mas não interferindo nos dados – no caso de tabelas. Se a variável for alfanumérica, volta a ser branco. Se for numérica, retorna a zero. Exemplos: CLEAR <var1>. CLEAR <t_tab1>. “limpa o header line da tabela SKIP -SKIP n Realiza o salto de linhas. A variável n identifica a quantidade de linhas a ser pulada. Exemplos: SKIP. “Irá pular 1 linha – mesmo efeito que SKIP 1 SKIP 10. “Irá pular 10 linhas ULINE -ULINE Imprime uma linha corrente. Exemplos: ULINE. “Imprime linha corrente da largura da página ULINE /35(50). “Linha começará na posição 35 e terá comprimento de 50 bytes Comandos básicos – CLEAR/SKIP/ULINE COMENTÄRIOS Algumas das formas como podemos documentar um programa ABAP. * -> um asterisco na frente da linha, já serve para comenta-lá toda. “ -> a aspas dupla, na mesma linha do código, serve para comentar dali para frente. Exemplos: * IF t001-text IS INITIAL. * ADD 1 TO w_number. * ENDIF. IF t001-text IS INITIAL. continue. “Comando para sair do Loop atual ENDIF. Comandos básicos – Comentários FORM -FORM … ENDFORM. Define uma subrotina dentro do programa ABAP. Pode ser executada a qualquer momento, dentro do programa. Exemplos: FORM f_leitura_bseg. Instruções. EDFORM. Opções: FORM <nome_form> USING p_variavel_referencia CHANGING p_variavel_valor TABLES p_tabela. Instruções ENDFORM. PERFORM -PERFORM Executa chamadas de subrotinas do programa ABAP. Exemplos: PERFORM f_leitura_bseg. Opções: PERFORM <nome_form> USING v_variavel_referencia CHANGING v_variavel_valor TABLES t_tabela. Comandos básicos – FORM/PERFORM CLEAR -CLEAR Limpa/Inicializa a header line da tabela interna. Exemplo: CLEAR t_tabela01. REFRESH -REFRESH Este comando limpa os dados da tabela interna. Não libera a memória carregada. Exemplo: REFRESH t_tabela01. FREE -FREE Este comando apaga os dados da tabela interna, liberando a memória onde ela estava carregada. Exemplo: FREE t_tabela01. Tabela interna – Limpeza e Inicialização READ -READ… Realiza a leitura de dados de uma tabela interna. READ TABLE <table01> WITH KEY … READ TABLE <table02> INDEX … Exemplos: READ TABLE table01 WITH KEY nome = w_nome. “Busca por campo específico READ TABLE table02 INDEX w_index. “Busca por posição do registro SY-SUBRC -SY-SUBRC É um campo de sistema, que retorna o resultado do último comando processado. Se estiver abaixo de um READ, retorna a condição de processamento do mesmo. Se SY-SUBRC = 0, Significa que foi processado corretamente. Diferente disso, ERRO. Exemplos: READ TABLE table WITH KEY nome = w_nome. IF sy-subrc <> 0. WRITE: /001 ‘Erro na leitura do arquivo…’. ENDIF. Tabela interna – READ / Leitura Tabela interna – APPEND / Gravando APPEND -APPEND Para incluir novos registros na tabela interna. APPEND <table01>. Exemplos: CLEAR table01. “Limpa a header line da tabela table01-nome = ‘Jose’. table01-cracha = v_cracha. table01-situacao = ‘Ativo’. APPEND table01. “Insere o registro na tabela table01 APPEND I_BKPF BUKRS GJAHR BELNR BUDAT 5510 1999 72000001555 25.10.1999 5510 1999 72000001554 25.10.1999 5510 1999 72000001553 25.10.1999 5510 1999 72000001552 25.10.1999 MODIFY -MODIFY Comando para alterar registro de uma tabela interna. MODIFY <itab>. Exemplos: MODIFY t_tabela01. Opções: MODIFY t_tabela02 INDEX sy-index. DELETE -DELETE Comando para deleção de registro de uma tabela interna. DELETE <itab>. Exemplos: DELETE t_tabela01. Opções: DELETE t_tabela02 INDEX sy-index. DELETE t_tabela03 WHERE cracha = 3005. DELETE t_tabela04 FROM 3 to 5. Tabela interna – MODIFY/DELETE COLLECT -COLLECT <itab01>. Este comando também insere registros na tabela interna. A particularidade é que, ele analisa os campos alfanuméricos. Estes sendo iguais, ele realiza a soma dos campos numéricos. NAME PRICE LH 100000 AR 50000 FL 10000000 LH 50000 Soma os campos numéricos 150000 Tabela interna – COLLECT SORT -SORT Comando utilizado para se sortear a tabela interna. SORT <itab>. Exemplos: SORT t_tabela01. Opções: SORT t_tabela02 BY campo2 campo3. SORT t_tabela03 BY campo4 ASCENDING campo5 DESCENDING. DESCRIBE -DESCRIBE Comando para gerar informações sobre determinada tabela interna. DESCRIBE TABLE <itab> LINES … Exemplos: DESCRIBE TABLE t_tabela01 LINES LINHAS “Nº linhas preenchidas OCCURS OCORRENCIA. “Nº ocorrências na def. da tabela Obs.: As variáveis utilizadas para se obter o resultado (LINHAS/OCORRENCIA) devem ser definidas com tipo inteiro (I). Tabela interna – SORT/DESCRIBE Tabela DB SAP - SELECT SELECT -SELECT Comando SQL utilizado para leitura das informações de uma tabela do banco de dados SAP. Possui diversas variações. -Select de todos os campos de uma tabela. SELECT * FROM <tabelaSAP>. instruções. ENDSELECT. Obs.: O comando SELECT em si, pede um ENDSELECT para fechá-lo. Em algumas variações isto não se faz necessário. Esta variação não é um modo eficiente para acesso ao banco. Não indicado, mesmo com inclusão da clausula WHERE. -Select para variáveis. SELECT campo1 campo2 campo3 … INTO (var01, var02, var03, …) FROM <tabelaSAP> WHERE <condição>. -Select inserindo em uma tabela interna. SELECT <campos> INTO TABLE <t_tabela01> FROM <tabelaSAP> WHERE <condição>. -Select inserindo dados em determinados campos de uma tabela interna. SELECT <campos> INTO CORRESPONDING FIELDS OF TABLE <t_tabela01> FROM <tabelaSAP> WHERE <condição>. -Select inserindo dados em uma tabela, usando como base os dados de outra já preenchida. SELECT <campos> INTO TABLE <t_tabela02> FROM <tabelaSAP> FOR ALL ENTRIES IN <t_tabela01> WHERE <condição>. Obs.1: Se ao buscar os registros com FOR ALL ENTRIES, e dois registros forem iguais, o sistema só irá trazer um. Portanto CUIDADO com este tipode select. Sempre buscar um campo que garanta a unicidade dos dados. Obs.2: Sempre verificar se a tabela interna, de referência< tabela interna1>, contêm dados e os mesmo estejam ordenados. Tabela DB SAP - SELECT -Select para buscar apenas um registro específico. SELECT SINGLE <campos> INTO TABLE <t_tabela01> FROM <tabelaSAP> WHERE <condição>. Obs.: Para o uso do SELECT SINGLE, deve-se utilizar a chave completa da tabela. Se não possuir as chaves todas, utilizar a opção UP TO 1 ROWS. SELECT <campos> INTO TABLE <t_tabela01> FROM <tabelaSAP> UP TO 1 ROW WHERE <condição>. ENDSELECT. -Select com range de valores. SELECT <campos> INTO TABLE <t_tabela01> FROM <tabelaSAP> WHERE <campo> BETWEEN <valor1> AND <valor2>. -Select em um intervalo de valores SELECT <campos> INTO TABLE <t_tabela01> FROM <tabelaSAP> WHERE <campo> IN (valor_mínimo,valor_máximo). Tabela DB SAP - SELECT INSERT -INSERT 1.Insere registros na tabela do dicionário. INSERT INTO <tabelaSAP> [ FROM ][ VALUES ] <estrutura>. Exemplos: TABLES: SPFLI. DATA: WA LIKE SPFLI. WA-CARRID = 'LH'. WA-CITYFROM = 'WASHINGTON'. … INSERT INTO SPFLI VALUES WA. WA-CARRID = 'UA'. WA-CITYFROM = 'LONDON'. … INSERT SPFLI FROM WA. Grava os valores da estrutura WA na tabela SPFLI. Mesmo feito do comando acima. Tabela DB SAP - INSERT INSERT 2.Insere registros na tabela do dicionário, a partir de uma tabela interna. INSERT INTO <tabelaSAP> FROM TABLE <t_tabela01> [ ACCEPTING DUPLICATE KEYS ]. Exemplos: TABLES: SPFLI. DATA: ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. ITAB-CARRID = 'UA'. ITAB-CONNID = '0011'. APPEND ITAB. ITAB-CARRID = 'LH'. ITAB-CONNID = '1245'. APPEND ITAB. ITAB-CARRID = 'AA'. ITAB-CONNID = '4574'. APPEND ITAB. INSERT SPFLI FROM TABLE ITAB. Tabela DB SAP - INSERT UPDATE -UPDATE 1.Modifica registros na tabela do dicionário. Um registro por vez. UPDATE <tabelaSAP> [ FROM <estrutura> ]. Exemplos: TABLES: SPFLI. DATA: WA LIKE SPFLI. MOVE 'AA' TO WA-CARRID. MOVE '0064' TO WA-CONNID. MOVE 'WASHINGTON' TO WA-CITYFROM. … UPDATE SPFLI FROM WA. MOVE 'LH' TO SPFLI-CARRID. MOVE '0017' TO SPFLI-CONNID. MOVE 'BERLIN' TO SPFLI-CITFROM. … UPDATE SPFLI. Tabela DB SAP - UPDATE UPDATE 2.Modifica registros na tabela do dicionário. Vários registros por vez. UPDATE <tabelaSAP> SET <S1> .. <Sn> [ WHERE condição ]. Exemplos: TABLES: SFLIGHT. UPDATE SFLIGHT SET PLANETYPE = 'A310' FLPRICE = FLPRICE - '10000' WHERE CARRID = 'LH'. 3. Modifica registros na tabela do dicionário, a partir de uma tabela interna. UPDATE <tabelaSAP> FROM TABLE <t_tabela01>. Exemplos: TABLES: SPFLI. DATA: ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. ITAB-CARRID = 'UA'. ITAB-CONNID = '0011'. APPEND ITAB. ITAB-CARRID = 'LH'. ITAB-CONNID = '1245'. APPEND ITAB. ITAB-CARRID = 'AA'. ITAB-CONNID = '4574'. APPEND ITAB. … UPDATE SPFLI FROM TABLE ITAB. Tabela DB SAP - UPDATE MODIFY -MODIFY Este comando também altera registros na tabela do dicionário, mas contém uma diferença importante. Com este comando, se o registro a ser alterado não for encontrado, ele é inserido na tabela do dicionário. Segue o mesmo esquema do comando UPDATE. MODIFY <tabelaSAP> [ FROM <estrutura> ]. MODIFY <tabelaSAP> FROM TABLE <t_tabela01>. Exemplos: TABLES: SPFLI. DATA: WA LIKE SPFLI. MOVE 'AA' TO WA-CARRID. MOVE '0064' TO WA-CONNID. MOVE 'WASHINGTON' TO WA-CITYFROM. … MODIFY SPFLI FROM WA. TABLES: SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. ITAB-CARRID = 'UA'. ITAB-CONNID = '0011'. APPEND ITAB. ITAB-CARRID = 'LH'. ITAB-CONNID = '1245'. APPEND ITAB. ITAB-CARRID = 'AA'. ITAB-CONNID = '4574'. APPEND ITAB. … MODIFY SPFLI FROM TABLE ITAB. Tabela DB SAP - MODIFY DELETE -DELETE 1.Deleta registros da tabela do dicionário. DELETE <tabelaSAP> FROM <estrutura>. Exemplos: TABLES: SPFLI. DATA: WA LIKE SPFLI. MOVE 'AA' TO WA-CARRID. MOVE '0064' TO WA-CONNID. DELETE SPFLI FROM WA. 2.Deleta registros da tabela do dicionário. Vários registros por vez. DELETE FROM <tabelaSAP> WHERE <condição>. Exemplos: TABLES: SFLIGHT. DELETE FROM SFLIGHT WHERE PLANETYPE = 'A310' AND CARRID = 'LH'. „Serão deletados os registros na estrutura WA, de acordo com os campos chave. Tabela DB SAP - DELETE DELETE 3. Modifica registros na tabela do dicionário, a partir de uma tabela interna. DELETE <tabelaSAP> FROM TABLE <t_tabela01>. Exemplos: TABLES SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. ITAB-CARRID = 'UA'. ITAB-CONNID = '0011'. APPEND ITAB. ITAB-CARRID = 'LH'. ITAB-CONNID = '1245'. APPEND ITAB. ITAB-CARRID = 'AA'. ITAB-CONNID = '4574'. APPEND ITAB. DELETE SPFLI FROM TABLE ITAB. Os registros são deletados baseando-se nos campos chave. Tabela DB SAP - DELETE COMMIT WORK Efetiva as operações realizadas nas tabelas para o SAP. Enquanto o COMMIT não é executado, o SAP trabalha em uma área separada. Só carrega as modificações para o banco, quando o comando é executado. ROLLBACK WORK Desfaz as modificações efetuadas pelo programa, antes de ser executado o COMMIT. Após a execução do COMMIT, o ROLLBACK não mais consegue desfazer as modificações. Exemplos: … COMMIT WORK. … <instruções> … DELETE FROM bkpf WHERE … … <intruções> … INSERT zteste_001 from zteste_001. IF sy-subrc <> 0. ROLLBACK WORK. continue. ELSE. COMMIT WORK. ENDIF. Primeira gravação. Insere registros na tabela. Se ocorrer erro na inserção, desfaz tudo o que foi feito após o primeiro COMMIT. Efetiva operações realizadas até este COMMIT. Deleta registros da tabela. COMMIT WORK / ROLLBACK WORK CONCATENATE Utilizado para concatenar/juntar várias strings em uma só. CONCATENATE <var1> <var2> … <varN> INTO <varDESTINO> [ SEPARATED BY <carac> ]. CONDENSE Utilizado para eliminar os espaços em branco de uma string. CONDENSE <string> [ NO-GAPS ]. TRANSLATE Utilizado para transformar os caracteres em maiúsculos ou minúsculos. E também para converter uma string a partir de outra. TRANSLATE <string> TO UPPER CASE. TRANSLATE <string> TO LOWER CASE. TRANSLATE <string1> USING <string2>. DATA: STRING1 (10) VALUE 'AbCdEfGhIj', STRING2 (20) VALUE 'AxbXCydYEzfZ'. TRANSLATE STRING1 USING STRING2. WRITE / STRING1. A saída será a seguinte string : xXyYzZGhIj Trabalhando com cadeia de caracteres A string utilizada para o TRANSLATE, STRING2 tem a seguinte instrução : A  x b  X C  y d  Y E  z f  Z REPLACE Substitui o conteúdo de uma string por outra, em uma outra string destino. Exemplos: DATA: T(10) VALUE 'abcdefghij', STRING LIKE T, STR1(4) VALUE 'cdef', STR2(4) VALUE 'klmn', STR3(2) VALUE 'kl', STR4(6) VALUE 'klmnop'. STRING = T. REPLACE STR1 WITH STR2 INTO STRING. WRITE / STRING. A saída na string será a seguinte : abklmnghij STRING = T. REPLACE STR1 WITH STR3 INTO STRING. WRITE / STRING. STRING = T. A saída na string será a seguinte : abklghij REPLACE STR1 WITH STR4 INTO STRING. WRITE / STRING. A saída na string será a seguinte : abklmnopgh Trabalhando com cadeia de caracteres SEARCH Permite que se busque uma string em uma cadeia de caracteres ou em uma tabela interna. SY-SUBRC = 0, string encontrada. SY-FDPOS = , retorna a posição em que foi encontrada. SY-SUBRC = 4, string não encontrada. SEARCH <string> FROM <string_procurada>. SEARCH <t_tabela01> FOR <string_procurada> [ AND MARK ]. Obs.: No caso de busca em tabela interna, a variável SY-TABIX retorna a linha em que a string procurada foi encontrada. STRLEN Devolve o tamanha da string referenciada. v_tamanho = STRLEN( ‘IVAN RODRIGO’ ). v_tamanho = STRLEN( TEXT-001 ). Trabalhando com cadeia de caracteres RELATÓRIOS Formatando listas : Overview Comandos de saída/Opções de formatação : WRITE FORMAT NEW-PAGE Eventos : TOP-OF-PAGE END-OF-PAGE Elementos de texto : TEXT-SYMBOLS HEADINGS SELECTION TEXTS System fields WRITE Formato de saída dos tipos de dados pré-definidos : Tipo Dado Tamanho Saída Positioning C tamanho do campo esquerda D 8 esquerda F 22 direita I 11 direita N tamanho do campo esquerda P 2 * tamanho do campo + 1 direita T 6 esquerda X 2 * tamanho do campo esquerda Revendo as opções do comando WRITE: ... NO-ZERO. ... NO-SIGN. ... DD/MM/YY. ... MM/DD/YY. ... DD/MM/YYYY. ... MM/DD/YYYY. ... DDMMYY. ... CURRENCY w. ... DECIMALS d. ... ROUND R. ... UNIT u. ... USING EDIT MASK mask. ... UNDER g. ... NO-GAP. ... LEFT-JUSTIFIED. ... CENTERED. ... RIGHT-JUSTIFIED. Comando WRITE WRITE Exemplos: WRITE: ‘****************’. WRITE: ‘Date’, sy-datum. WRITE: ‘Time’, sy-uzeit. WRITE: 5 `****************’. WRITE: /10 ‘Usuário:’, 30 sy-uname. SKIP 2. ULINE. ULINE /5(40). V_DATUM = SY-DATUM. V_UZEIT = SY-UZEIT. WRITE: 5 ‘Datum’, 20 V_DATUM DD/MM/YYYY. WRITE: /10 ‘Time’, 25 V_TIME USING EDIT MASK ‘__:__:__’. Comando WRITE FORMAT -Trabalhando com cores. Opções para se modificar as cores da lista, via comando FORMAT. 1. … COLOR n [ON] or … COLOR OFF 2. … INTENSIFIED [ON] or … INTENSIFIED OFF 3. … INVERSE [ON] or … INVERSE OFF 4. … HOTSPOT [ON] or … HOTSPOT OFF 5. … INPUT [ON] or … INPUT OFF 6. … RESET FORMAT INTENSIFIED OFF. FORMAT INTENSIFEID. FORMAT COLOR COL_KEY. FORMAT COLOR COL_TOTAL INTENSIFIED OFF. WRITE: /05 V_TOTAL COLOR COL_POSITIVE. Comando FORMAT NEW-PAGE O comando NEW-PAGE inicia uma nova página, durante o processamento da lista. Ele não imprime páginas em branco. Ele as ignora. O comando incrementa o contador de páginas do sistema – variável SY-PAGNO. Para ser executado, a opção NO STANDARD PAGE HEADING deve ser colocada no programa. END-OF-PAGE O comando é executado sempre a área definida para impressão na página acaba. LINE-SIZE col Cria o report com <col> colunas por linha. LINE-COUNT n(m) Cria o report com <n> linhas por página, das quais (m) linhas serão reservadas para o processamento do comando END-OF-PAGE. ALGUNS CAMPOS DO SISTEMA PARA CRIAÇÃO DE LISTAS SY-PAGNO : número da página corrente. SY-LINNO : número da linha corrente. SY-COLNO : número da coluna em que o cursor está posicionado. Comando NEW-PAGE / END-OF-PAGE ALV ALV Grid • O Alv (Abap List Viewer) Grid é uma ferramenta flexível para exibição de relatórios ou árvore. • São disponibilizados botões que permitem ao usuário manipular os dados (classificar, filtrar e somar). • Além dos botões standards do sistema, é possível criar novos botões conforme a necessidade do usuário. • Isto pode eliminar certas etapas no processo de gerenciamento de eventos para controles . • O Abap List Viewer padroniza e simplifica o uso de listas e relatórios no sistema R/3. O Abap List Viewer fornece interfaces e formatos de lista padronizados para todas as listas e relatórios. • Pode-se especificar os campos a serem exibidos no relatório e modificar a seqüência em que esses campos são exibidos. Além disso, pode-se ajustar a largura das colunas individuais para atender a requisitos específicos. ALV Grid O List Viewer permite : • Usar variantes de exibição standard predefinidas pela SAP . • Ordenar os dados : crescente e decrescente. Ordenar as linhas de acordo com os valores das colunas, em seqüência crescente ou decrescente. • Definir um filtro. Exibir somente os campos desejados. • Formar totais e subtotais. Em uma lista, é possível calcular totais e subtotais de uma ou mais colunas selecionadas. ALV Grid • Exibição de informações detalhadas. Pode-se acessar informações detalhadas de linhas individuais da lista. • Pesquisa. É possível pesquisar informações específicas. • Impressão de listas e pré-visualização. Pode-se imprimir as listas e chamar uma pré- exibição antes de imprimir. ALV Grid • Exportação de dados. Pode-se copiar as listas, por exemplo, para uma planilha ou gravá-las como arquivo local. • Deslocar colunas. • O Alv Grid é formado basicamente por : - Uma barra de ferramenta - Um título - Uma lista de saída. ALV Grid Um programa ALV simples • Programa : Z_ALV_SIMPLE. Estruturas de um programa ALV • O programa endereçado no link Exemplo ALV 01.doc contém as estruturas necessárias para se desenvolver um programa mais abrangente e formatado. Exercício 1. Relatório. Criar um relatório que deverá buscar os documentos contábeis (BSEG) e seus itens (BKPF), listando-os, ordenados por documento+item+data documento. Deverá existir uma somatória por documento contábil, de todos os campos de valor. Incluir entre os documentos uma linha de separação. O relatório deverá conter um cabeçalho que identifique o título do relatório, a hora e data de execução, além do usuário. Incluir também indicador de páginas. O cabeçalho deverá ter cor diferente das demais linhas do relatório. Já as linhas de detalhe devem se alterar entre duas cores, de mesma tonalidade, mas de intensidades diferentes. Exercício 1. Dados para seleção das informações : BSEG (documentos contábeis) Exercício (GJAHR) = 2001 Tipo de documento (BLART) = AB ou SA ou SB Data do documento (BLDAT) = mes 09 e ano 2001 Status do documento (BSTAT) = branco Buscar os itens na tabela BKPF, pela chave. Incluir ao final do relatório um demonstrativo do total de registros lidos das tabelas. Campos a inserir no relatório : BSEG (BUKRS, BELNR, GJAHR, BLART, BLDAT, BKTXT, BSTAT) e BSEG (BUZEI, AUGCP, AUGBL, WRBTR, PSWBT, PSWSL). Exercício 2. Transformar o relatório do item 1, em uma relatório ALV Grid. Retirar os valores fixos para seleção dos dados e incluir uma tela de seleção, com os seguintes campos : Empresa, Documento, Exercício, Tipo documento e Data documento. Validar - ao menos um dos campos da tela de seleção deverá estar preenchi- do. Incluir no cabeçalho, o logotipo da Softtek. Incluir sumarizador pelos campos de valor. On Line / Module Pool Introdução • Online são tipos de programas que, como o próprio nome indica, funcionam online, ou seja, instantaneamente. Por isso, eles são dotados de uma maior capacidade de customização das telas e maior flexibilidade para criarem uma interface mais amigável com o usuário. • Eles são especialmente úteis na criação de aplicações que necessitem de subtelas ou quando é necessário fornecer informações aos usuários de outra maneira que não um relatório. Na maioria dos casos, os programas standard funcionam assim. Estrutura de um Module Pool Programa Principal Screen 1 Screen 2 Screen 3 GUI-01 GUI-02 Módulos PAI tela 1 Módulos PBO tela 1 Módulos PAI tela 2 Módulos PBO tela 2 Módulos PAI tela 3 Módulos PBO tela 3 • Screen Desenho da Tela (Definição dos Campos) Lista de campos para tratamento de erros Definição dos módulos PBO e PAI relacionados com a tela • GUI Status e GUI Title Definição dos comandos de botão e menus disponíveis: Definição do título de tela Habilitação dos comandos standards existentes Criação de novos comandos necessários • Evento PBO Evento executado antes da exibição da tela para o usuário: Definição do GUI Status e GUI Title para a tela correspondente Seleção inicial de dados e atribuição de valores a serem exibidos na tela • Evento PAI Evento executado após um comando do usuário (enter, click de um botão, etc...) Verificação do código de comando executado (definido no GUI Status) Código ABAP para execução da lógica do comando Estrutura de um Module Pool Desenvolvendo um Module Pool SE80 A transação SE80 é a mais adequada para se desenvolver um module pool, pois possibilita acesso dinâmico a qualquer elemento do programa, bem como as estru- turas GUI, includes, modules e telas. Os programas desenvolvidos pelos clientes – não SAP, devem iniciar com SAPMZ. Por exemplo, SAPMZABAP05. A tela é desenhada no Screen Painter Gráfico, que possui ferramentas de fácil utilização. A programação das telas é feita em uma área da própria tela, destinada a lógica de programação da mesma. As sub-rotinas chamadas a partir da lógica de programação das telas, recebem o nome de módulo – MODULE... Os módulos do PBO ficam armazenados em um include do próprio PBO. O mesmo acontecendo com os módulos do PAI. SE80 Lista de objetos do Module Pool Área de programação No include TOP ficam definidas as variáveis globais, tabelas, estruturas. Bem como definições de includes e tables-control. No include O01 ficarão armazenados os módulos dos PBOs. No include I01 ficarão armazenados os módulos dos PAIs. O include F01 não definido aqui, ficaria responsável por armazenar os FORMs utilizados nos módulos, etc… Module Pool – Exemplo Tela – Lógica de Processamento PBO PAI Module Pool – Mais conceitos STATUS GUI Onde pode ser customizada as barras de menu, de botões e teclas de função. TITLE GUI Onde é modificado os nomes/‟título das telas. Screen Painter Gráfico Elementos disponíveis para a tela Área para desenho da tela Propriedades de cada objeto A Subtela é uma área na Tela onde podemos variar os campos conforme a necessidade, não deixando fixo os campos numa tela e não havendo necessidade de replicar alguns campos e várias telas. Podemos dividir a definição da Subtela em 2 Partes: • Tela de Origem: onde definimos uma área específica para chamada da Subtela. • Subtela: Tela onde serão definidos os campos da Subtela. Subtela Na criação da Tela em que será feita a referência à Subtela, criamos uma área específica para esta Subtela. Botão para Criar a Área para Subtela Área para Subtela  Tela de Origem Subtela A Subtela (ou Subscreen) é definida nas características da Tela.  Definições de Subtela Subtela  Tela de Origem Na PBO (PROCESS BEFORE OUTPUT) deverá existir um comando para a execução desta subtela, sendo: CALL SUBSCREEN sub1 INCLUDING programa dynpronr. SUB1 – Seria o nome da área definida para a Subtela PROGRAMA – Nome do Programa onde se encontra a Subtela. Normalmente, se refere ao mesmo programa da Tela Normal DYNPRONR – Número da Subtela a ser executada Quando este comando é executado, a PBO desta Subtela é executada, com todas as rotinas definidas nela. Na PAI (PROCESS AFTER INPUT) deverá existir um comando para a execução desta subtela, sendo: CALL SUBSCREEN sub1. Onde: SUB1 – Seria o nome da área definida para a Subtela (como na PBO) Quando este comando é executado, a PAI desta subtela é executada, com todas as rotinas definidas nela. A Subtela não tem PF-STATUS definido, utiliza-se as definições da Tela de Origem, de onde está sendo executada a Subtela. Subtela  Definição da Table Control Opção para Criar Table Control Table Control  Definição de Campos na Table Control Os campos devem ser incluídos dentro da Table Control. Se for utilizado a opção de busca de campos do Banco de Dados ( ), é incluído automaticamente o campo de Entrada de Dados e o cabeçalho do Campo. Table Control  Definição de Campos na Table Control Pode-se também incluir os campos de Entrada e Saída de informações na Table Control e depois incluir um campo texto no cabeçalho do campo. Campo de E/S Campo Texto Table Control  Atributos da Table Control Nos Atributos da Table Control existem algumas informações que podem ser úteis, conforme a necessidade do desenho da Table Control. Define se os campos terão Título Define se a Table Controle terá Título Define se a Table Control terá Linhas Verticais e Horizontais separando os Campos Define se as Linhas e Colunas terão marcador, e se serão Simples ou Múltiplas Table Control  Definições de Código Para utilização de uma Table Control é necessário variável „tc1‟, que deve ter o mesmo nome da Table Control desenhada na Tela. A informação „9000‟ se refere ao código da Tela onde está a Table Control. CONTROLS: tc1 TYPE TABLEVIEW USING SCREEN ‘9000’. Na PBO deve exitir o seguinte comando: LOOP WITH CONTROL tc1. ENDLOOP. No PBO, serão feitos n looping´s, conforme a quantidade de linhas que teremos da Table Control na Tela. No PAI, este „Loop‟ faz uma leitura de todas as linhas da Table Control que estiverem sendo exibidas na tela, tendo os campos conteúdo ou não. Dentro deste Looping (tanto na PBO como na PAI) podemos incluir quantos MODULE´s forem necessários. Lembrando que estes MODULE´s serão executados para todas as linhas da Table Control que estiverem sendo exibidas na tela, como explicado acima. Table Control  Definições de Código Sugere-se que estas informações da Table Control sejam movimentadas para uma tabela interna, já que na PBO todos os dados da Tela são “limpos” para receberem os dados novamente. Então, o que normalmente utiliza-se é criar uma Tabela Interna com o mesmo formato da Table Control e na PAI é feito um MODULE onde se grava os dados da Tela na Tabela Interna. Na PBO, estes dados são movimentados novamente para a Table Control. Comandos úteis: CHAIN – Verifica quando um campo é alterado ou utilizado. Table Control  Atributos da Table Control Alguns Atributos da Table Control podem ser alteradas conforme a necessidade do programa, sendo: Atributo Tipo Tamanho Conteúdo FIXED_COLS INT 4 Numérico indicando quantas colunas ficarão fixas LINES INT 4 Define quantas Linhas teremos na Table Control TOP_LINE INT 4 Define qual será a primeira linha a ser apresentada na Table Control CURRENT_LIN E INT 4 Dentro de um Looping da Table Control, esta informação diz qual linha está sendo processado no momento H_GRID CHAR 1 Grade Horizontal que separa campos V_GRID CHAR 1 Grade Vertical que separa campos COLS (*1) INVISIBLE CHAR 1 ‘X’ – significa que o campo está invisível ‘ ‘ – significa que o campo não está invisível Table Control  Atributos da Table Control (*1) – O parâmetro COLS é uma outra estrutura que contém a definição de alguns dados por campo da Table Control. Para alteração destes parâmetros, basta alterar o conteúdo dos campos, movimentando a informações para a Table Control-Campo (Ex.: TC1- TOP_LINE = 5).  Múltiplos Table Control • Para cada Table Control desenhada na Tela, existirá um Loop/Endloop no PAI e PBO; • O Nome das Table Control´s devem ser diferentes entre elas; Table Control  Inibir e Exibir Campos Para os campos da Tela, com excessão de Table Control, para inibir e exibir campos é utilizado o seguinte comando: LOOP AT SCREEN. SCREEN-INVISIBLE = ‘X’ ENDLOOP. Onde „X‟ pode ser „0‟ para exibir e „1‟ para inibir. Caso seja necessário escolher um campo em específico, basta fazer o filtro através do campo SCREEN-NAME. Também podem ser utilizados os campos SCREEN-GROUP1, SCREEN-GROUP2, SCREEN-GROUP3 e SCREEN- GROUP4. Table Control  Inibir e Exibir Campos Para Table Control, caso haja necessidade de inibir uma coluna da Table Control, o comando deve ser outro: DATA: wa TYPE cxtab_column . LOOP AT tc1-COLS INTO wa . wa-INVISIBLE = ‘X’. MODIFY tab1-COLS FROM wa . ENDLOOP. Onde: TC1 – Nome da Table Control WA – Variável com tipo referenciando „TYPE CXTAB_COLUMN‟ „X‟ – Se informado „0‟ o campo não será inibido, se „1‟ o campo será inibido Com esse comando, todos os campos serão inibidos pois não há nenhuma checagem de qual campo deverá ser inibido. Para escolher o campo, usar a variável WA-SCREEN-NAME que contém o nome do campo. Também podem ser utilizados os campos WA-SCREEN-GROUP1, WA-SCREEN-GROUP2, WA- SCREEN-GROUP3 e WA-SCREEN-GROUP4. Table Control Exercício 1. Exercício de Module Pool Utilizar o exercício 2 do tópico anterior (ALV). Será um programa com duas telas. A primeira se equivalerá a tela de seleção dos dados. Na segunda tela, acima, os campos que foram digitados na primeira – travados; abaixo, criar uma lista (table control), com os itens do documento solicitado. Para este programa, os campos da primeira tela – documento e ano, deverão ser obrigatórios. Batch-Input Call Transaction Objetivos • O que é Batch-Input • Como realizar uma carga através desta técnica • Call Transaction • Direct Input Transferindo Dados Externos Dados Externos SAP INTERFACES BANCO SAP SAP (Host) X Dados Externos CONSISTÊNCIAS BANCO SAP Sistema Externo (Legado) Sessão de BATCH INPUT Programa Banco de Dados SAP X Nunca gravar na base direto Arquivo Sequêncial Programa de Batch Input Arquivo Fonte Função Batch Input SAP R/3 Tabela 1 Tabela 2 Tabela 3 Telas Arquivo Sequêncial BANCO SAP Tela 1 Tela 2 Transação 1 Tela 1 Tela 2 Transação 2 Log SAP R/3 Tabela 1 Tabela 2 Tabela 3 Sessão batch Input Arquivo Sequêncial Tabela BDC Programa de BATCH INPUT FILA Estrutura BDCDATA Dicionário ABAP/4 READ DATASET CALL FUNCTION INCLUDE STRUCTURE Seqüência para codificação ABRIR SESSÃO DE BATCH INPUT INSERIR DADOS DA TRANSAÇÃO FECHAR SESSÃO DE BATCH INPUT Codificação OPEN DATASET <nome do arquivo> For OUTPUT INPUT APPENDING OUTPUT - Se existir, apaga e cria um novo INPUT - Abre apenas para leitura (default) APPENDING - Se existir, adiciona, se não existir, cria. OPEN DATASET <nome do arquivo> For OUTPUT INPUT APPENDING BINARY MODE - Não interfere na leitura (default) TEXT MODE - Interfere na leitura (preenche com brancos, por ex.) In BINARY MODE TEXT MODE BINARY MODE TEXT MODE ABAP /4 A A A B B B C C D A B C A B A B C D TRANSFER READ DATASET ABAP /4 A A A B B B C C D ABAP /4 A A A B B B C C D TRANSFER READ DATASET ABAP /4 A A A B B B C C    A B C A B A B C D    READ DATASET <nome do arquivo> INTO <campo> TRANSFER <campo> TO <nome do arquivo> CLOSE DATASET <nome do arquivo> DELETE DATASET <nome do arquivo> DEFINIR ESTRUTURAS ABRIR ARQUIVO Gravar Ler Preencher Dados Transferir Estrutura Mais dados ? Sim FECHAR ARQUIVO Ler os Dados Processar os Dados Fim do Arquivo? Sim Não Não Funções Para Batch-Input CALL FUNCTION ‘BDC_OPEN_GROUP’ EXPORTING Client * = <Client> (Sy-Mandt) Group * = <Nome da Sessão> Holddate = <Data> Keep * = Flag de Deleção User * = <Usuário BDC> (Sy-Uname) EXCEPTIONS * - Parâmetros Obrigatórios * - Default = ‘ ’ (apagar a sessão) Programa Tela Início Nome do Campo Valor do Campo <Programa> <Número 1> X <Campo 01> <Campo 05> <Valor 05> <Valor 01> <Campo 11> <Campo 02> <Valor 11> <Valor 02> <Programa> <Número 7> X Transação SHDB Síntese Análise Administração Processar Sessão de Batch Input Log Sessões presas Mostra as pastas Mostra os dados da pasta Log / Estatísticas Seleciona pastas para deleção Prende Sessão Libera Sessão Processa em “FOREGROUND” Mostra apenas os erros Processa em “BACKGROUND” Visível Exibir Apenas Erro Background Mostra Passo a Passo a transação Mostra apenas a transação quando der erro Não mostra nada Função OKCODE Sai da transação corrente, marca como incorreta /n Apaga o dado corrente na transação /bdel Sai da transação e marca como incorreta /bend Muda de “Display Error...” para “Foreground” /bda Muda de “Foreground” para “Display Errors...” /bde Processada Sessão processada corretamente Incorreto Sessão foi processada mas contém algum erro To be Processed Sessão criada mas ainda não foi processada Criando Sessão que está sendo gravada no momento Processando Sessão que está sendo Processada no momento Background Sessão que está sendo Processada em “Background” REPORT Z_TESTE . DATA: BEGIN OF BDC_TAB OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA: END OF BDC_TAB. DATA: BEGIN OF REGISTRO OCCURS 0, ID LIKE SCUSTOM-ID, TEL LIKE SCUSTOM-TELEPHONE, END OF REGISTRO. Programa Modelo Batch-Input SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001. PARAMETERS: ARQUIVO(80) TYPE C DEFAULT 'H:\TEAMSAP\ABAP\batch.txt’ LOWER CASE. SELECTION-SCREEN END OF BLOCK 1. SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE TEXT-002. PARAMETERS: TP_UNIX RADIOBUTTON GROUP TP, TP_WS RADIOBUTTON GROUP TP DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK 2. DATA: NOME_ARQ LIKE RLGRAP-FILENAME. Programa Modelo Batch-Input - Continuação START-OF-SELECTION. Nome_arq = arquivo. IF TP_UNIX = 'X'. PERFORM ABRE_ARQUIVO_UNIX. ELSE. PERFORM ABRE_ARQUIVO_WINDOWS. ENDIF. PERFORM OPEN_GROUP. PERFORM PREPARA_BDC. PERFORM FECHA_GROUP. END-OF-SELECTION. Programa Modelo Batch-Input - Continuação FORM ABRE_ARQUIVO_UNIX. OPEN DATASET NOME_ARQ FOR INPUT IN TEXT MODE. DO. READ DATASET NOME_ARQ INTO REGISTRO. IF SY-SUBRC NE 0. EXIT. ENDIF. APPEND REGISTRO. ENDDO. ENDFORM. Programa Modelo Batch-Input - Continuação FORM ABRE_ARQUIVO_WINDOWS. CALL FUNCTION 'WS_UPLOAD' EXPORTING FILENAME = NOME_ARQ FILETYPE = 'ASC' TABLES DATA_TAB = REGISTRO EXCEPTIONS CONVERSION_ERROR = 1 FILE_OPEN_ERROR = 2 FILE_READ_ERROR = 3 INVALID_TABLE_WIDTH = 4 INVALID_TYPE = 5 NO_BATCH = 6 UNKNOWN_ERROR = 7 GUI_REFUSE_FILETRANSFER = 8 OTHERS = 9. Programa Modelo Batch-Input - Continuação IF SY-SUBRC NE 0. WRITE: / 'Erro Abrindo arquivo do Windows ', NOME_ARQ. EXIT. ENDIF. ENDFORM. “ABRE_ARQUIVO_WINDOWS Programa Modelo Batch-Input - Continuação FORM OPEN_GROUP. CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING CLIENT = SY-MANDT GROUP = ’SAP_2' KEEP = 'X' USER = SY-UNAME EXCEPTIONS CLIENT_INVALID = 1 DESTINATION_INVALID = 2 GROUP_INVALID = 3 GROUP_IS_LOCKED = 4 HOLDDATE_INVALID = 5 INTERNAL_ERROR = 6 QUEUE_ERROR = 7 RUNNING = 8 SYSTEM_LOCK_ERROR = 9 USER_INVALID = 10 OTHERS = 11. Programa Modelo Batch-Input - Continuação IF SY-SUBRC NE 0. WRITE: 'Erro no Open Group'. EXIT. ENDIF. ENDFORM. “OPEN_GROUP Programa Modelo Batch-Input - Continuação FORM PREPARA_BDC. REFRESH BDC_TAB. LOOP AT REGISTRO. PERFORM PREENCHE_BDC USING: 'X' 'SAPMTFBA' '0100', ' ' 'SCUSTOM-ID' REGISTRO-ID, ' ' 'BDC_OKCODE' '/00', 'X' 'SAPMTFBA' '0200', ' ' 'SCUSTOM-TELEPHONE' REGISTRO-TEL, ' ' 'BDC_OKCODE' '=SAVE'. PERFORM INSERT. REFRESH BDC_TAB. ENDLOOP. ENDFORM. Programa Modelo Batch-Input - Continuação FORM PREENCHE_BDC USING DYNBEGIN NAME VALUE. IF DYNBEGIN = 'X'. MOVE: NAME TO BDC_TAB-PROGRAM, VALUE TO BDC_TAB-DYNPRO, 'X' TO BDC_TAB-DYNBEGIN. APPEND BDC_TAB. ELSE. MOVE: NAME TO BDC_TAB-FNAM, VALUE TO BDC_TAB-FVAL. APPEND BDC_TAB. ENDIF. CLEAR BDC_TAB. ENDFORM. Programa Modelo Batch-Input - Continuação FORM INSERT. CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'TFBA' TABLES DYNPROTAB = BDC_TAB EXCEPTIONS INTERNAL_ERROR = 1 NOT_OPEN = 2 QUEUE_ERROR = 3 TCODE_INVALID = 4 PRINTING_INVALID = 5 POSTING_INVALID = 6 OTHERS = 7. IF SY-SUBRC NE 0. WRITE: 'Erro no Insert'. EXIT. ENDIF. ENDFORM. Programa Modelo Batch-Input - Continuação FORM FECHA_GROUP. CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS NOT_OPEN = 1 QUEUE_ERROR = 2 OTHERS = 3. IF SY-SUBRC NE 0. WRITE: 'Erro no Open Group'. EXIT. ELSE. WRITE: 'Sessão Criada'. ENDIF. ENDFORM. Programa Modelo Batch-Input - Continuação Dados Externos Programa ABAP/4 Batch Input Direct Input Call Transaction SAP Formas de Inserir dados no SAP R/3 Definir Estruturas Antigas Importar Estruturas SAP Inicializar as Estruturas do SAP Ler os dados do Arquivo Verificar os dados Converter os dados Colocar dados na estrutura do SAP Transferir dados para arquivo sequêncial Etapas para Inserir dados no SAP R/3 Analisar dados Criar estruturas SAP Desenvolver programa de Transferência Criar Arquivo seqüencial Analisar resultados Avaliar os Erros Criar programa de Batch Input Criar sessão de Batch Input Etapas para Inserir dados no SAP R/3 Batch-Input X Call Transaction Call Transaction <Código da Transação> USING <Tabela BDC> MODE <Modo de Visualização> UPDATE <Modo de Atualização> MESSAGES INTO <Tabela de Mensagem> Modo de Visualização A - Visualiza Tudo <default> E - Visualiza apenas se der erro N - Não Visualiza nada Modo de Atualização S - Modo Síncrono (Espera terminar) A - Modo Assíncrono <default> SY-SUBRC 0 - Sucesso <1000 - Erro no Programa do SAP >1000 - Erro no Processamento (Ver campos de Sistema) Campos de Sistema SY-MSGID - Classe da Mensagem SY-MSGTY - Tipo da Mensagem (E, I, W, S, A) SY-MSGNO - Número da Mensagem SY-MSGV1 - Variável de Mensagem 1 SY-MSGV2 - Variável de Mensagem 2 SY-MSGV3 - Variável de Mensagem 3 SY-MSGV4 - Variável de Mensagem 4 Batch Input Call Transaction Código de Retorno Log de Erro Processamento Não Não Sim Sim Imediato 2 Fases Pág. 01 REPORT Z_TESTE . DATA: BEGIN OF BDC_TAB OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA: END OF BDC_TAB. DATA: BEGIN OF MSG_TAB OCCURS 0. INCLUDE STRUCTURE BDCMSGCOLL. DATA: END OF MSG_TAB. DATA: BEGIN OF REGISTRO OCCURS 0, ID LIKE SCUSTOM-ID, TEL LIKE SCUSTOM-TELEPHONE, END OF REGISTRO. Programa Modelo Call Transaction Pág. 02 SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001. PARAMETERS: ARQUIVO(80) TYPE C DEFAULT 'H:\TEAMSAP\ABAP\batch.txt' LOWER CASE. SELECTION-SCREEN END OF BLOCK 1. SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE TEXT-002. PARAMETERS: TP_UNIX RADIOBUTTON GROUP TP, TP_WS RADIOBUTTON GROUP TP DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK 2. SELECTION-SCREEN BEGIN OF BLOCK 3 WITH FRAME TITLE TEXT-003. PARAMETERS: ALL RADIOBUTTON GROUP MODE DEFAULT 'X', ERRO RADIOBUTTON GROUP MODE, NADA RADIOBUTTON GROUP MODE. SELECTION-SCREEN END OF BLOCK 3. Programa Modelo Call Transaction – Continuação Pág. 03 DATA: NOME_ARQ LIKE RLGRAP-FILENAME, MODO(1) TYPE C, CONT TYPE I VALUE 0, C_TEXTO(255) TYPE C. START-OF-SELECTION. NOME_ARQ = ARQUIVO. IF ALL = 'X'. MODO = 'A'. ELSEIF ERRO = 'X'. MODO = 'E'. ELSE. MODO = 'N'. ENDIF. Programa Modelo Call Transaction – Continuação Pág. 04 IF TP_UNIX = 'X'. PERFORM ABRE_ARQUIVO_UNIX. ELSE. PERFORM ABRE_ARQUIVO_WINDOWS. ENDIF. PERFORM PREPARA_BDC. IF CONT > 0. PERFORM FECHA_BDC. ENDIF. Programa Modelo Call Transaction – Continuação Pág. 05 FORM PREPARA_BDC. REFRESH BDC_TAB. LOOP AT REGISTRO. PERFORM PREENCHE_BDC USING: 'X' 'SAPMTFBA' '0100', ' ' 'SCUSTOM-ID' REGISTRO-ID, ' ' 'BDC_OKCODE' '/00', 'X' 'SAPMTFBA' '0200', ' ' 'SCUSTOM-TELEPHONE' REGISTRO-TEL, ' ' 'BDC_OKCODE' '=SAVE'. WRITE: / REGISTRO-ID, REGISTRO-TEL. PERFORM INSERT. REFRESH BDC_TAB. ENDLOOP. ENDFORM. Programa Modelo Call Transaction – Continuação Pág. 06 FORM PREENCHE_BDC USING DYNBEGIN NAME VALUE. IF DYNBEGIN = 'X'. MOVE: NAME TO BDC_TAB-PROGRAM, VALUE TO BDC_TAB-DYNPRO, 'X' TO BDC_TAB-DYNBEGIN. APPEND BDC_TAB. ELSE. MOVE: NAME TO BDC_TAB-FNAM, VALUE TO BDC_TAB-FVAL. APPEND BDC_TAB. ENDIF. CLEAR BDC_TAB. ENDFORM. Programa Modelo Call Transaction – Continuação Pág. 07 FORM INSERT. CALL TRANSACTION 'TFBA' USING BDC_TAB MODE MODO UPDATE 'S' MESSAGES INTO MSG_TAB. IF SY-SUBRC NE 0. CONT = CONT + 1. PERFORM PREPARA_PASTA_ERRO. ENDIF. PERFORM MENSAGENS. ENDFORM. Programa Modelo Call Transaction – Continuação Pág. 08 FORM ABRE_ARQUIVO_UNIX. OPEN DATASET NOME_ARQ FOR INPUT IN TEXT MODE. DO. READ DATASET NOME_ARQ INTO REGISTRO. IF SY-SUBRC NE 0. EXIT. ENDIF. APPEND REGISTRO. ENDDO. ENDFORM. Programa Modelo Call Transaction – Continuação Pág. 09 FORM ABRE_ARQUIVO_WINDOWS. CALL FUNCTION 'WS_UPLOAD' EXPORTING FILENAME = NOME_ARQ FILETYPE = 'ASC' TABLES DATA_TAB = REGISTRO EXCEPTIONS CONVERSION_ERROR = 1 FILE_OPEN_ERROR = 2 FILE_READ_ERROR = 3 INVALID_TABLE_WIDTH = 4 INVALID_TYPE = 5 NO_BATCH = 6 UNKNOWN_ERROR = 7 GUI_REFUSE_FILETRANSFER = 8 OTHERS = 9. Programa Modelo Call Transaction – Continuação Pág.10 IF SY-SUBRC NE 0. WRITE: / 'Erro Abrindo arquivo do Windows ', NOME_ARQ. EXIT. ENDIF. ENDFORM. Programa Modelo Call Transaction – Continuação Pág.11 FORM MENSAGENS. LOOP AT MSG_TAB. SELECT SINGLE TEXT INTO C_TEXTO FROM T100 WHERE SPRSL = 'PT' AND ARBGB = MSG_TAB-MSGID AND MSGNR = MSG_TAB-MSGNR. IF MSG_TAB-MSGV1 NE SPACE. REPLACE '&1' WITH MSG_TAB-MSGV1 INTO C_TEXTO. IF SY-SUBRC NE 0. REPLACE '&' WITH MSG_TAB-MSGV1 INTO C_TEXTO. ENDIF. CONDENSE C_TEXTO. ENDIF. Programa Modelo Call Transaction – Continuação Pág.12 IF MSG_TAB-MSGV2 NE SPACE. REPLACE '&2' WITH MSG_TAB-MSGV2 INTO C_TEXTO. IF SY-SUBRC NE 0. REPLACE '&' WITH MSG_TAB-MSGV2 INTO C_TEXTO. ENDIF. CONDENSE C_TEXTO. ENDIF. IF MSG_TAB-MSGV3 NE SPACE. REPLACE '&3' WITH MSG_TAB-MSGV3 INTO C_TEXTO. IF SY-SUBRC NE 0. REPLACE '&' WITH MSG_TAB-MSGV3 INTO C_TEXTO. ENDIF. CONDENSE C_TEXTO. ENDIF. Programa Modelo Call Transaction – Continuação Pág.13 IF MSG_TAB-MSGV4 NE SPACE. REPLACE '&4' WITH MSG_TAB-MSGV4 INTO C_TEXTO. IF SY-SUBRC NE 0. REPLACE '&' WITH MSG_TAB-MSGV4 INTO C_TEXTO. ENDIF. CONDENSE C_TEXTO. ENDIF. CONCATENATE MSG_TAB-MSGTYP ' - ' C_TEXTO INTO C_TEXTO. WRITE: C_TEXTO. ENDLOOP. REFRESH MSG_TAB. ENDFORM. Programa Modelo Call Transaction – Continuação Pág.14 FORM PREPARA_PASTA_ERRO. IF CONT = 1. PERFORM ABRE_BDC. PERFORM INSERT_BDC. ELSE. PERFORM INSERT_BDC. ENDIF. ENDFORM. Programa Modelo Call Transaction – Continuação Pág.15 FORM ABRE_BDC. CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING CLIENT = SY-MANDT GROUP = 'ERROS' KEEP = 'X' USER = SY-UNAME EXCEPTIONS CLIENT_INVALID = 1 DESTINATION_INVALID = 2 GROUP_INVALID = 3 GROUP_IS_LOCKED = 4 HOLDDATE_INVALID = 5 INTERNAL_ERROR = 6 QUEUE_ERROR = 7 RUNNING = 8 SYSTEM_LOCK_ERROR = 9 USER_INVALID = 10 OTHERS = 11. Programa Modelo Call Transaction – Continuação Pág.15 FORM ABRE_BDC. CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING CLIENT = SY-MANDT GROUP = 'ERROS' KEEP = 'X' USER = SY-UNAME EXCEPTIONS CLIENT_INVALID = 1 DESTINATION_INVALID = 2 GROUP_INVALID = 3 GROUP_IS_LOCKED = 4 HOLDDATE_INVALID = 5 INTERNAL_ERROR = 6 QUEUE_ERROR = 7 RUNNING = 8 SYSTEM_LOCK_ERROR = 9 USER_INVALID = 10 OTHERS = 11. Programa Modelo Call Transaction – Continuação Pág.16 IF SY-SUBRC NE 0. WRITE: 'Erro no Open Group'. EXIT. ENDIF. ENDFORM. Programa Modelo Call Transaction – Continuação Pág.17 FORM INSERT_BDC. CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'TFBA' TABLES DYNPROTAB = BDC_TAB EXCEPTIONS INTERNAL_ERROR = 1 NOT_OPEN = 2 QUEUE_ERROR = 3 TCODE_INVALID = 4 PRINTING_INVALID = 5 POSTING_INVALID = 6 OTHERS = 7. IF SY-SUBRC NE 0. WRITE: 'Erro no Insert'. EXIT. ENDIF. ENDFORM. Programa Modelo Call Transaction – Continuação Pág.18 FORM FECHA_BDC. CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS NOT_OPEN = 1 QUEUE_ERROR = 2 OTHERS = 3. IF SY-SUBRC NE 0. WRITE: 'Erro no Open Group'. EXIT. ENDIF. ENDFORM. Programa Modelo Call Transaction – Continuação Exercício 1) Batch-Input a) Criar um programa que faça o batch input dos dados obrigatórios no cadastro de fornecedores: Transação FK01. b) Permitir como parâmetro que o usuário informe se o arquivo vem do servidor ou local. 2) Call Transaction a) Permitir como parâmetro que o usuário informe se deseja executar a pasta automaticamente. Exibir as Mensagens do Processo, quebrando por Fornecedor. SAPScript O que é Sapscript ? O SAPSCRIPT é a ferramenta do SAP para criação de formulários mais elaborados. A opção pela utilização desta ferramenta se dá pela necessidade de alguns recursos gráficos que não podem ser obtidos através de código de ABAP comum. Com o SAPSCRIP é possível criar um formulário com logotipo, letras formatadas de vários tamanhos, criação de grades, código de barras, etc. Apesar de ser uma ferramenta poderosa na geração de formulários, o SAPscript ainda apresenta uma série de limitações, o seu verificador de erros e debug não possuem as mesmas características do editor ABAP. Caso, seja digitado um comando com grafia errada ou sem sentido lógico dentro de um formulário, não será detectado pelo mesmo e poderá não ser executado, passando as vezes despercebido pelo programador. Para que o SAPSCRIPT funcione é necessário que um trabalho em conjunto com um programa ABAP que deverá conter algumas funções de chamada e controle do SCRIPT. Sapscript Deficiências da Ferramenta -Debug -Checar erro de sintaxe -Client Dependent -Criar logotipos (.tif objeto não transportável) Sapscript JANELA DE PÁGINAS PÁGINAS JANELAS E ELEMENTOS DE TEXTO CARACTERES DE COMANDO PARÁGRAFOS <H> </> P Partes de um Formulário Sapscript Sapscript Sapscript ESTRUTURA FORMULÁRIO Cabeçalho Informações gerais do formulário, título, a classe de desenvolvimento e os idiomas. Parágrafos São elementos que podem ser criados e apresentam informações dos textos de uma determinada janela. Caracter de Seleção São informações semelhantes às do parágrafo, no que diz respeito a formatação de textos, no entanto podem ser aplicados a trechos de textos e não necessariamente a linhas inteiras do formulário. Páginas São os elementos responsáveis pelo agrupamento das janelas durante certos momentos do relatório. Sapscript ESTRUTURA FORMULÁRIO Elementos de Texto Corresponde à lógica de processamento e comportamento de uma janela durante a execução do formulário. * Parágrafo Padrão = Linha longa ( Linha Bruta / Avanço de Linha / = Avanço de Linha e Linha Longa /( Avanço de Linha e Linha Bruta /: Linha de Comando /* Linha de Comentário /E Elemento de Texto Sapscript ESTRUTURA FORMULÁRIO Janelas Podem ser criadas sem limites e tem por finalidade dividir por espaço as regiões de um formulário para operações independentes. MAIN Somente é permitido um tipo de janela MAIN por formulário, e é a única janela obrigatória em uma página. VAR Esse tipo de janela deve ser utilizado quando se pretende trabalhar com textos que variam. CONST Nesse tipo de janela são incluído objetos e textos que permanecem os mesmos durante todo o relatório, independente do número de páginas. Sapscript CONDIÇÕES NÃO EXISTENTES NO SAPSCRIPT CN (Contains Not only) CO (Contains Only) CA (Contains Any) NA (Contains Not Any) CS (Contains String) NS (Contains No String) CP (Contains Pattern) NP (contains No Pattner) Sapscript CONDIÇÕES EXISTENTES NO SAPSCRIPT = EQ (Igual) < LT (Menor que) > GT (Maior que) <= LE (Menor ou igual a) >= GE (Maior ou igual a) <> NE (Diferente) NOT (Não) AND (E) OR (Ou) SIMBOLOS UTILIZADOS DATE: Data DAY: Dia NAME_OF_DAY: Nome do Dia MONTH: Mês NAME_OF_MOUNTH: Nome do Mês YEAR: Ano TIME: Hora Total HOURS: Hora Atual MINUTES: Minuto Atual SECONDS: Segundo Atual PAGE: Número da Pagina NEXTPAGE: Número da nova página SPACE: Espaço ULINE: Linha Horizontal VLINE: Linha Vertical Sapscript COMANDOS ADDRESS BOTTOM BOX CASE DEFINE HEX IF INCLUDE NEW-PAGE NEW-WINDOW PERFORM POSITION PRINT-CONTROL PROTECT RESET SET COUNTRY SET DATE MASK SET SIGN SET TIME MASK SIZE STYLE SUMMING TOP Sapscript Estrutura de Chamada e Controle do SAPSCRIPT CALL FUNCTION “OPEN_FORM” CALL FUNCTION “START_FORM” CALL FUNCTION “WRITE_FORM” CALL FUNCTION “END_FORM” CALL FUNCTION “CLOSE_FORM” Sapscript PROGRAMA DE POVOAMENTO DE SAPSCRIPT Controla impressão formulário através de: - Seleção e Processamento dos Dados - Abertura - Inicialização - Envio dados para formulário - Finalização - Fechamento Sapscript ABERTURA A abertura de um formulário gera automaticamente a inicialização de um formulário. FUNÇÃO: Call function „OPEN_FORM‟ PARÂMETROS ESSÊNCIAIS: DEVICE FORM LANGUAGE Sapscript - TDCOPIES (Número de Cópias) - TDDEST (Dispositivo de Saída) - TDPREVIEW (Print Preview) - TDIMMED (Saída Imediata) call function 'OPEN_FORM' exporting * APPLICATION = 'TX' * ARCHIVE_INDEX = ' ' * ARCHIVE_PARAMS = ' ' DEVICE = 'PRINTER' ou 'SCREEN' * DIALOG = 'X' ou '' (Tela de características de impressão) FORM = 'Z_SCRIPT' (Nome do Formulário) LANGUAGE = 'P' (Idioma do Formulário) * OPTIONS = ITCPO (Estrutura com todas as características) * importing * language = * new_archive_params = * result = exceptions canceled = 1 device = 2 form = 3 options = 4 unclosed = 5 others = 6. Sapscript – OPEN_FORM INICIALIZAÇÃO Permite a geração de vários formulários diferentes, como se estivesse abrindo um novo formulário para cada situação. FUNÇÃO: Call function „START_FORM‟ PARÂMETROS ESSÊNCIAIS: FORM LANGUAGE Sapscript Este comando não é obrigatório e pode não ser utilizado caso não haja necessidade da quebra e criação de vários formulários para uma só seleção de dados. A função é muito similar à função OPEN_FORM, e novamente os parâmetros mais importantes são o nome (FORM) e o idioma (LANGUAGE) do formulário. Para que se possa utilizar um comando START_FORM é obrigatório que um comando de OPEN_FORM tenha sido executado. Caso isso não seja feito um erro de sintaxe irá aparecer. call function 'START_FORM' exporting * ARCHIVE_INDEX = ' ' FORM = ' ' LANGUAGE = ' ' * STARTPAGE = ' ' * PROGRAM = ' ' * importing * language = exceptions form = 1 format = 2 unended = 3 unopened = 4 unused = 5 others = 6. Sapscript – START_FORM ENVIO DADOS AO FORMULÁRIO Depois da seleção e processamento dos dados, envia-se os dados ao formulário. FUNÇÃO: Call function „WRITE_FORM‟ PARÂMETROS ESSÊNCIAIS: ELEMENT WINDOW Sapscript Um ponto importante que deve ser observado é que não é possível utilizar tabelas internas e variáveis do programa para a impressão dos dados no SAPSRIPT. Portanto, se algum dado que deva ser impresso estiver numa tabela interna ou variável, este deve ser copiado para uma estrutura para que possa ser enviado ao SAPSCRIPT. A impressão dos dados nas janelas na maioria das vezes é feita simultaneamente com a seleção dos dados, ou seja, a medida que os dados são selecionados, são enviados imediatamente para o formulário. O comando para impressão dos dados é a seguinte função: call function 'WRITE_FORM' exporting ELEMENT = ' ' * FUNCTION = 'SET' * TYPE = 'BODY' WINDOW = 'MAIN' * importing * pending_lines = exceptions element = 1 function = 2 type = 3 unopened = 4 unstarted = 5 window = 6 others = 7. Sapscript – WRITE_FORM Dois parâmetros são os mais importantes: Element – Determina qual Data Element será utilizado dentro do Sapscript Window – Janela na qual os dados devem ser impressos. Neste ponto fica evidente a diferenciação entre os tipos de janela MAIN e demais janelas. Para as janelas do tipo MAIN, cada comando de escrita (write_form) significa uma nova linha no formulário e o valor a ser impresso é o valor que o campo armazena no momento do comando de impressão. Por exemplo, digamos que o campo MARA-MATNR tenha o valor „1234‟ e que um comando de impressão seja dado para a janela MAIN que irá imprimir este campo. Logo em seguida uma nova seleção da tabela MARA é feita e o campo MATNR agora vale „5678‟. Se uma nova impressão na janela MAIN for executada o resultado será o seguinte: 1234 5678 Já as janelas que não forem do tipo MAIN imprimem os dados uma única vez, no final da impressão do formulário ou na quebra de página, com os valores armazenados nos campos no momento do encerramento ou no momento da quebra, e não no momento da escrita (write_form), ou seja, se no exemplo anterior fosse utilizada uma janela não-main, o resultado final seria somente 5678. Na realidade, a utilização de um comando WRITE_FORM numa janela não-main é utilizada para a escolha de qual elemento de texto será utilizado para a impressão dos dados. Exemplo: Uma janela HEADER não-main contém dois elementos de texto chamados FRASE1 e FRASE2 da seguinte forma: /E FRASE1 &MARA-MATNR& Teste de Frase 1 /E FRASE2 &MARA-MATNR& Teste de Frase 2 Sapscript – WRITE_FORM Se um comando WRITE_FORM for executado para a janela HEADER utilizando o elemento de texto FRASE1, call function 'WRITE_FORM' exporting ELEMENT = 'FRASE1' * FUNCTION = 'SET' * TYPE = 'BODY' WINDOW = 'HEADER‘ estará sendo indicado ao programa que, ao se encerrar o formulário, deve ser impresso o elemento de texto FRASE1 para a janela HEADER (somente um elemento de texto é utilizado para cada janela não-main). No caso do exemplo, se o campo MATNR for igual a „1234‟ no encerramento do formulário, seria impressa a seguinte frase: Teste de Frase 1 O elemento de texto a ser impresso será sempre o último a ser selecionado antes do final ou da quebra de página. Se nenhum for selecionado, ao encerrar o formulário ou mudar de página serão impressos os dados que não pertençam a nenhum elemento de texto. Portanto no caso de um campo que deva ser impresso sempre em todas as páginas, como numero de página por exemplo, basta colocá-lo fora de qualquer elemento de texto e não selecionar nenhum elemento de texto para a janela que, automaticamente, este dado será impresso em todas as páginas. Sapscript – WRITE_FORM FINALIZAÇÃO FORMULÁRIO FUNÇÃO: Call function „END_FORM‟ FECHAMENTO FORMULÁRIO FUNÇÃO: Call function „CLOSE_FORM‟ Sapscript END FORM - Serve para finalizar um formulário. call function 'END_FORM' importing RESULT = ' ' exceptions unopened = 1 others = 2. CLOSE FORM - Serve para fechar um formulário. call function 'CLOSE_FORM' importing RESULT = ' ' Tables * OTFDATA = exceptions unopened = 1 others = 2. Sapscript – END_FORM/CLOSE_FORM INFORMAÇÕES ÚTEIS Transação SE71 Tabela TTXFP Programa RSTXSCRP (download / upload) Programa RSTXLDMC (tipo .TIF) Programa RSTXPDFT4 (download .PDF quando gerar na sp01) DICAS * Nunca esquecer de ativar o formulário no idioma original, caso contrário ficará bloqueado as modificações nos outros idiomas. * Visualização x Impressão mesma máquina (impressora / basis SPAD) * Visualização distinta em computadores distintos (versão Sapgui) * Não deletar janelas e elementos de textos Sapscript Exercício 1) SAPScript Nome do formulário : Z_FORM## Nome do programa : Z_STK##_SCRIPT Crie um formulário com o layout : Para imprimir o logotipo, use o programa RSTXLDMC que converte imagens. Os dados devem ser extraídos das tabelas : EKPO (Item do pedido). EKKO (Cabeçalho do pedido). LFA1 (Dados Mestre de Fornecedor) Exits Definição Exist são pontos em locais pré-definidos pela SAP, onde o cliente pode incluir códigos próprios, por alguma necessidade específica. Tipos de exit : User-Exit Field-Exit Menu-Exit A chamada de uma exit no código Abap, se assemelha a chamada de um módulo de funções qualquer. Sintase : call customer-function ‘…’. Exits Exits User-Exit A criação de user-exit acontece pela transação CMOD/SMOD. O primeiro passo é saber se existe uma user-exit, que se possa alterar. Isto pode ser feito, procurando-se no código Abap uma chamada de um módulo de função customizá-vel… call customer-function… ou, através da execução de um programa Abap que varre outros programas buscando user-exits… As ampliações SAP são agrupadas em projetos de ampliação sob um nome de projeto. O projeto de ampliação consiste em pelo menos uma ampliação SAP: As ampliações SAP que estão no mesmo projeto de ampliação são sempre ativadas e desativadas em conjunto. As ampliações SAP foram criadas pela SAP e, de forma, geral, são constituídas por vários componentes (por exemplo, por uma área de tela e pelos exits de função para a transferência de dados). Destas ampliações SAP, o cliente seleciona aquelas que pretende processar, reune as mesmas em projetos de ampliação, processa os componentes e ativa os projetos. Exits – CMOD / User-Exit Projeto : Características Gerais Ampliações do projeto. Exits – CMOD / User-Exit Ampliações e suas exit relacionadas. Módulo de função que guarda o include da exit. Onde é codificada a exit. Exits – CMOD / User-Exit O inlcude onde fica codificado as customizações da exit. Exits – CMOD / User-Exit Field-Exit O Field-Exit se diferencia do user-exit, pois não existe uma entrada no meio do código fonte Abap onde este é customizado. Ele existe atrelado a um campo/elemento de dados, além de ser necessário amarra-ló a um programa e uma tela, específicos. Para se criar um Field-Exit, ou mesmo, saber se o elemento possibilita uma exit, utilizamos a execução do programa RSMODPRF. Onde este, lista todos os Field-Exits já criados e nos dá a opção de criação de outros. Exits Exits – Field-Exit Programa para busca/manutenção de field-exist. Exits – Field-Exit Field-Exits existentes e seus status. Quando se opta pela criação de novo field-exit, ele solicita qual o campo que se deseja customizar. Exits – Field-Exit Field-exit – Criar/Modificar Requisitos: a) nome do programa Standard onde se encontra o campo onde se quer colocar codificação b) número da tela c) nome do elemento de dados do campo Transação CMOD 1) Rodar o programa RSMODPRF, opção criar. 2) Fornecer nome do elemento de dados Na tela de Function Builder: 3) Escolher um grupo de funcões(customizado) de acordo com o módulo 4) Gravar o novo módulo de função (somente tela Adminstracao) e voltar (tela do passo 2) 5) Flegar linha do elemento de dados 6) No menu: Atribuir prog/tela 7) Fornecer nome do programa e tela standard 8) Flegar linha do elemento de dados 9) No menu: Processar MF 10) Codificar ABAP Obs.: Se um campo com field-exit codificado por alguma razão aparecer inibido, este field-exit não será executado. Uso de SET/GET: se o campo da tela contiver um field-exit com SET, este SET será limpo da memória se em telas posteriores existir o mesmo elemento de dados com o campo aberto. Field-Exit não funcionam em campos check-box ou radio-buttom. SE09 – Organização de transporte (Utilizado para controlar as request‟s). SE11 – Dicionário ABAP (Utilizado para criar, alterar e apagar domínios, elemento de dados, campos, tabelas, estrutura). SE16 – Data browser SE37 – Módulos de função ABAP. (Utilizado para criar, alterar e apagar funções (Módulos de funções). SE38 – Editor de programas ABAP. (Utilizada para criar, alterar e apagar programas ABAP). SE39 – Editor de tela dividida SE71 – Formulário SAPscript. (Utilizado para criar, alterar e apadar formulários de SapScript). SE80 – Repository Browser. (Utilizado para criar, alterar e apagar, Programas (On-Line ou Module Pool), grupos de função, etc.). SE91 – Atualização de mensagem SE92 – Mensagens do Log do sistema SE93 – Códigos de transação (Utilizado para criar, alterar e apagar transações). SM04 – Visualiza e derruba sessões SM12 – Exibir e eliminar bloqueios (Utilizado para desbloquear programas, transações, etc.). SM35 – Moritorar pasta de Batch-Input. SM37 – Monitora os jobs colocados para processamento ST05 – Possui várias funções, a mais utilizada e para realizar o trace SQL.(Mostra todos acessos realizados no BD). ST22 – ABAP análise dump. SHDB – Registrador transação - batch input. (Utilizado para criar o “mapeamento” para posteriormente criar os programas para gerar a pasta de batch input.). CMOD – Gerenciamento de projetos (Exits) SMOD – Definição de ampliações (Exits) SMARTFORMS – Formulário SmartForm Algumas Transações Úteis www.softtek.com.br Click to edit Master title style 239 239 239 239 F I M
Copyright © 2024 DOKUMEN.SITE Inc.