Baixe o app para aproveitar ainda mais
Prévia do material em texto
Colaboradores Daniela Cristina Guerra Flavio Alves Pereira 2 DICE 1. SYSTEM OVERVIEW.........................................................................................................................03 1.1. Funções Básicas do SAP ERP....................................................................................................03 1.1.1. Logon..............................................................................................................................................03 1.1.2. Elementos de Tela..........................................................................................................................04 1.1.3. ABAP Editor......................................................................................................................................06 1.1.3.1 Opções do ABAP editor .................................................................................................................06 2. Arquitetura do Sistema SAP ERP....................................................................................................... 08 3. ABAP Dictionary..........................................................................................................................10 3.1 Categoria de tabelas do ABAP Dictionary........................................................................................10 3.2 1 Objetos que formam uma tabela......................................................................................................12 3.2.1.1. Atributo do elemento de dados......................................................................................................12 3.3 Configurações técnicas da tabela....................................................................................................... 14 3.4 Tabelas de verificação........................................................................................................................ 15 3.4.1. Consulta.........................................................................................................................................15 3.4.1.1. Pesquisar tabelas com chave estrangeira.................................................................................... 16 3.5 índices.................................................................................................................................................17 3.5.1. Rotina interna de indexação e pesquisa..........................................................................................17 3.5.2 Consultando índices..........................................................................................................................17 3.6. Operadores relacionais .......................................................................................................................18 3.7.Estruturas..............................................................................................................................................18 3.8 Views ..................................................................................................................................................19 3.9 Criando tabela.......................................................................................................................................20 3.9.1 atualização de opções técnicas.........................................................................................................28 3.9.2 consultando objetos criados..............................................................................................................30 4. Reports............................................................................................................................................... 31 4.1. Eventos Utilizados............................................................................................................................31 4.1.2. Controle de nível na tabela interna.................................................................................................. 32 4.1.3. Comando Message ..........................................................................................................................33 4.1.4. Alguns Comandos ABAP................................................................................................................. 34 4.1.5. Formatos de saída............................................................................................................................43 4.1.6. Hotspots............................................................................................................................................43 4.1.7. Programa Report Simples.................................................................................................................43 4.2 ALV...................................................................................................................................................... 49 5. Dialog............................................................................................................................................... 56 5.1. Module Pool...................................................................................................................................56 5.2. Tabstrip..........................................................................................................................................72 5.2.1. Criando Tabstrip com assistente.....................................................................................................72 5.3. Table Control................................................................................................................................ 77 5.3.1 Criando table control com o assistente...........................................................................................77 5.3.2 Loop at screen................................................................................................................................82 6. SHDB................................................................................................................................................ 84 7. RFC................................................................................................................................................... 86 8. Batch input ........................................................................................................................................87 9. Call transaction.................................................................................................................................. 98 10. BAPI.................................................................................................................................................108 10.1 Programa BAPI.............................................................................................................................108 11. Field Exit...................................................................................................................................117 12. Screen Exit...............................................................................................................................118 13. Badi.......................................................................................................................................119 14. SAPSCRIPT..........................................................................................................................122 15. SMART FORM .....................................................................................................................127 15.1 Criando Smartform...................................................................................................................127 15.2 Programa para Smartform........................................................................................................1373 1. SYSTEM OVERVIEW 1.1. Funções Básicas do SAP ERP 1.1.1. Logon Assim que a janela SAP Logon for exibida, escolha o ambiente e dê um duplo clique na linha. Será exibida a tela de logon do SAP ERP. 4 Na tela de logon, informe mandante, usuário e sua senha e pressione [Enter]. A tela inicial será apresentada. 1.1.2 Elementos de Tela Application tool bar Menu bar System function bar Title Bar Dympro Area Status Bar 5 Menu bar Contém as ferramentas para configuração do ambiente. System Function Bar Neste campo podemos utilizar transações Standard do SAP ERP como MM01 e VA01, transações customizadas para o cliente que iniciam com a letra Z ou Y, também podemos encerrar o processamento do SAP GUI, abrir outras instâncias do SAP GUI, entrar em modo de depuração ABAP etc. /n Retorna a tela anterior /o Abre novas instâncias /h Depuração /nex Fecha todas as instâncias do SAP Title bar Exibe títulos dos programas do SAP. Status Bar Nesta barra são apresentadas informações gerais do SAP ERP, sendo que no extremo esquerdo são apresentadas às mensagens do sistema e no estremo direito informações como: Sistema, Client, User, Program, Transaction etc. 6 1.1.3 ABAP Editor Plataforma para desenvolvimento de programas e relatórios do SAP ERP. Para acessar o ABAP Editor utilizamos a transação SE38 ou SE80. 1.1.3.1 Opções do ABAP Editor Menu Bar �Utilitários� Opções... Informar nome do programa 7 • TAB Editor O usuário pode configurar se o editor vai trabalhar em modo frontend, backend (versões mais antigas) Para ambas pode-se configurar: • Conversões de Maiúscula/Minúscula em modo de exibição • Exibir todos erros de sintaxe • Limitação de 72 colunas na edição • TAB Pretty Printer Opção padrão “Identar” para organizar adequadamente a tabulação de linhas. Efetuar conversão Maiusc/Minusc. • Minúsculas; • Maiúsculas; • Palavras chaves em maiúsculas (Comandos); • Palavras chaves em minúsculas (Comandos). • TAB Tela Dividida Configura a disposição de telas e opções de comparação. • TAB Depuração Habilita depuração externa. 8 P WORKBENCH 2.1. Arquitetura do Sistema SAP ERP O SAP ERP é desenvolvido com tecnologia client/Server de três camadas. • Presentation Layer Onde é apresentado o SAPGUI e onde o usuário interage com o sistema SAP ERP • Aplication Layer Onde as solicitações do usuário são processadas (relatórios, telas etc...). • Database Layer Onde estão armazenadas as informações em forma de dados, estes dados ficam distribuídos em várias tabelas do sistema, sendo que na grande maioria delas ocorre relacionamento de informações . 9 • Dispatcher Efetua o gerenciamento de alocação de Work Process quando há uma solicitação do presentation para o application. • Work Process São através deles que as aplicações SAP ERP são executadas. Cada Work Process utiliza uma área de memória que contém o contexto da aplicação em execução. Tipos: • Dialog – Pedidos de um usuário para execução de dialog steps; • Update – Executa pedidos de atualização de bancos de dados; • Background – Executa programas em background, sem interação em tempo real com o usuário; • Enqueue – Administra o bloqueio de tabela na memória compartilhada; • Spool – Gerencia impressão ou arquivamento óptico. • 10 3. ABAP DICTIONARY O ABAP Dictionary permite um gerenciamento central de todas as definições de dados usada no sistema R/3. A SE11 é principal transação para manutenção do dicionário de dados do SAP ERP. Tela principal • Tabelas • Estruturas • Visões • Elemento de dados • Categoria tabela • Grupo de tipos • Domínios • Ajuda de pesquisa • Objetos de bloqueio • Documentação 3.1 Categoria de Tabelas do ABAP Dictionary • Tabelas transparentes As tabelas transparentes são criadas na SE11, através da opção de criação de tabelas. Quando ativadas, são criadas no sistema de banco de dados com os mesmos nomes e características técnicas informadas no ABAP Dictionary. Tabelas utilizadas pelo SAP: • Pooled table São tabelas agrupadas, ou seja, é um conjunto de tabelas no dicionário de dados que são representadas por apenas uma tabela no sistema de banco de dados. • Cluster table Também são tabelas agrupadas, porém são utilizadas para armazenar grandes quantidades de informação. NOTA: Podemos utilizar ABAP JOIN nas tabelas Cluste r e Pooled table 11 Restrições nas Pooled e Cluster tables: • Índices secundários não são suportados; • Algumas cláusulas do Open SQL não são suportadas; • SQL nativo não é suportado e não há como o DBA acessar os dados dessas tabelas. 3.2. Estrutura de Tabelas Campo: Indica o nome do campo de uma tabela. O Campo MANDT indica a que mandante pertencem os dados da tabela Chave primária: Indica que só será permitida uma ocorrência para uma linha ou um conjunto de linhas de uma tabela. Valores iniciais: Não permite entrada de dados com valores nulos. Elemento de dados: Descreve um tipo elementar de dado ou uma referência. O elemento de dados tem em seu menor nível de definição o Domínio. Categoria: Descreve o formato de dados na interface de usuário. Comprimento: Número das posições válidas de um campo sem caracteres de edição (por exemplo, vírgulas ou pontos). Casa decimal: Número das posições válidas de um campo sem caracteres de edição (por exemplo, vírgulas ou pontos). Descrição: A descrição breve é utilizada como texto explicativo na criação de listas e de documentação (Ajuda F1). Grupo: Nome de grupo em includes denominados. 12 3.2.1. Objetos que formam uma Tabela 3.2.1.1 Atributos do Elemento de Dados Elemento de Dados: Nome técnico Descrição breve: Descrição para o Elemento de Dados TAB - Características • Última modificação: Usuário e Data • Pacote • Idioma TAB - Categoria de dados • Domínio: Campo onde é atribuído o Domain • Tipo instalado: Opção onde as características são informadas diretamente através da “Categoria de Dados” • Tipo de referência: Opção onde as características são informadas por referência TAB – Características adicionais • Ajuda de pesquisa ( Search Help ): Permite que sejam associadas ajudas de pesquisa diretamente no Elemento de Dados. • ID parâmetro: Campo que permite informa um ID para o SAP Memory (comandos Set/Get) 13 • Nome componente default : É possível atribuir um nome default inglês ao elemento de dados neste campo. TAB – Denominação do campo Permite que sejam informados quatro comprimentos de descrição para o campo 3.2.1.2 Atributos do Domínio Domínio: Nome técnico. Descrição breve: Descrição para o Domínio. TAB - Características • Última modificação: Usuário e Data • Pacote • Idioma TAB – Definição Formato - Quadro onde são informados: • Categoria de dados: (Char, Dats, Cuky, Int1, Lang, Quan, Numc etc...). • Número de posições: Número das posições válidas de um campo sem caracteres de edição (por exemplo, vírgulas ou pontos). • Decimais: Número das casasdecimais admitidas de um valor. 14 • Características de saída - Quadro onde são informados: • Comprim. Saída: Comprimento de campo máximo, inclusive caracteres de edição (por exemplo, vírgulas ou pontos), para entrar e sair valores. • Rotina conversão: Rotina utilizada para conversão de campos • Sinal +/-: Permite sinais negativos se estiver marcado • Letr. minúsculas: Distingue maiúsculas e minúsculas (Case Sensitive ) se o campo estiver marcado. TAB – Interv. Vals. Local onde podem ser inseridos valores individuais, intervalo de valores ou uma tabela de valores. 3.3 Configurações técnicas da tabela Parâmetros de memória lógicos (SE11) Tipo de dados: Determinar a nível lógico, em que área física d o DB a tabela será arquivada: • APPL0 - Dados mestres (Alta ocorrência de leitura e baixa ocorrência de gravação); • APPL1 - Dados de movimento (Atualização freqüente, consulta freqüente); • APPL2 - Dados organizacionais e de customizing (Raramente modificados); • Também existem dois tipos para usuário USR e USR1; • Categor.Tamanho : Determinação da necessidade de espaço prevista em uma tabela do banco de dados 15 3.4 Tabelas de Verificação As tabelas de verificação servem para validação de dados no sistema, onde só é permitida a entrada de uma informação em um campo que referencie uma tabela de verificação. 3.4.1 Consulta Para consultar a tabela de verificação entrar na SE16 colocar o nome da tabela e exibir. Na tela clicar em ‘Tabela de verificação’, Outra forma de consultar a tabela de verificação é através do gráfico de relacionamento de tabelas 16 3.4.1.1 Pesquisar Tabelas com chave estrangeira Na exibição dos gráficos de relacionamento, podemos consultar as tabelas com chave estrangeira através do botão “Tabela de chave externa”. 3.5 Índices Duplo clique Chama SE16 para a tabela da Entidade. 17 São utilizados para acelerar a pesquisa de dados em uma tabela, porém a gravação é lenta. • Um arquivo de índice é formado pelos campos de pesquisa da tabela, campos indicados na criação do índice. • Os campos podem ser uma chave primária ou campos onde haverá grandes quantidades de pesquisa, por parte do sistema. • Quando os campos da tabela são selecionados, o índice é criado e ao arquivo é adicionado um campo de ponteiro. Este campo indica qual o a seqüência da linha da tabela. • O índice de uma chave primária é chamado de índice primário os demais índice da tabela serão chamados de índices secundários. 3.5.1 Rotina interna de indexação e pesquisa • Quando um índice é criado as rotinas internas do banco de dados encarregam de utilizar a melhor lógica de indexação do arquivo. • Quando é efetuada uma pesquisa na tabela, o sistema de banco de dados se encarrega de escolher o melhor índice para a pesquisa. 3.5.2 Consultando Índices Para consultar se uma tabela contém índices utilizar a transação SE11. Na tela clicar no botão “índices”. Será apresentada a tabela de índices para a tabela, ou uma mensagem indicando que não foram criados índices para a tabela. 18 Na tela de listagem de índices, dê um duplo clique em um dos índices para exibir os atributos. 3.6 Operadores Relacionais Inner join Recupera todos pares correspondentes de registros em duas tabelas, descartando os registros sem correspondência. Relação entre chave estrangeira e a chave primária. Outer join Recupera todos os registros correspondentes e não correspondentes entre a chave primária e chave estrangeira. 19 3.7. Estruturas Declarada no ABAP Dictionary, é o agrupamento de campos sem a propriedade de armazenamento dos dados, como nas tabelas. Uma estrutura, quando chamada em um programa, cria uma área de memória no ABAP para armazenamento de uma linha de informação. Essa linha de informação fica na memória virtual e não é gravada no banco de dados, portando, ao término da execução do programa os dados da estrutura são apagados da área de memória. 3.8 Views (Visões) Utilizamos visões quando precisamos unir campos de varias tabelas em uma única visualização. TAB – Tabelas /condições join • Nesta TAB temos duas colunas, tabelas e condições join. 20 • Na coluna tabelas são declaradas as tabelas que serão utilizadas na View • Na coluna de condições de união (Join) são declarados os campos e uniões. TAB - Cpos. Visão Local onde são declarados os campos que formar a estrutura da visão. TAB – Condições de seleção Local onde informada as condições de seleção da View TAB - Status at. • Acesso – Só Ler ou Ler e modificar. • A opção modificar só é valida para Views de uma tabela. • Permissões de exibição e atualização. 3.9 Criando Uma tabela 1. Criar um Domínio Entrar na transação SE11. 21 Campo Domínio, informe o nome técnico. Clique em “Criar”; No campo Descrição Breve, informar descrição. TAB Definição Quadro “Formato”, informar: • Campo Categoria dados; • Núm. Posições; • Decimais; Informe o pacote e a ordem, salve e ative o objeto de domínio; 22 2. Criar elemento de Dados Entrar na transação SE11. Na TAB “categoria de dados” • campo domínio informar nome técnico. • Clique em “Criar”. 23 Selecione “Elemento de Dados” no Radio Button. Informar: Descrição breve. TAB Definições. Campo domínio Informe o nome do Domínio criado. 24 TAB Denomin. Campo breve : informar nome abreviado. Campo Médio: informar nome. Campos Longa e Título: informar nome completo. Tecle [ Enter] e os comprimentos aparecerão. 25 Salve o objeto no pacote e informe a ordem utilizada. 26 3. Criar tabela Entrar na Transação SE11. Informar nome da tabela e clicar em “Criar”. 27 Campos: informar nome do campo Chave primaria: Flegar se for a chave primaria Tipo de Campo: Informar elemento de dados TAB Campos Moeda/Quantidade Para os campos do tipo moeda ou quantidade, tem que informar uma tabela de Referência. 28 Campos : informar Tabelas de referência. Clicar em salvar. Verifique que o status da tabela, informado ao lado do nome técnico da tabela, ainda está como “novo. 3.9.1. Atualização de opções técnicas 29 Na tela de atualização da tabela, clique em “Configurações técnicas”; Parâmetros de memória lógicos; Tipo de dados = APPL0; Categor. Tamanho = 0; Salvar; Menu � Configurações � Verificar; Veja o log de ativação, se existir, e proceda com as correções. Ative a tabela. 30 3.9.1 Consultando objetos criados Para consultar os objetos criados entrar na SE80. 31 4. REPORTS Reports são programas executáveis no SAP. Há três tipos de listas: Simple Lists, Interactive Lists e SAP Grid Control (ALV, ALV Tree). 4.1 Simple List O comando WRITE irá indicar a geração de uma lista para o buffer. Quando a saída da lista já foi construída no buffer, o sistema gera a imagem de tela do buffer da lista 4.1.1 Eventos Utilizados Os principais eventos para processamento de relatórios são: INITIALIZATION Evento para inicializar as variáveis. Deve ser o primeiro evento a ser colocado no programa. Não é um evento obrigatório. TABLES .... DATA ..... ..... INITIALIZATION. 32 START-OF-SELECTION Evento usado para marcar o iniciode um conjunto de seleções de dados. START-OF-SELECTION. SELECT marc~matnr marc~werks t001w~name1 makt~maktx INTO TABLE t_marc FROM marc INNER JOIN t001w ON marc~werks = t001w~werks INNER JOIN makt ON marc~matnr = makt~matnr and makt~spras = sy-langu WHERE t001w~werks IN S_CENTRO AND marc~matnr IN S_MATERI. END-OF-SELECTION. END-OF-SELECTION Evento usado para marcar o fim das seleções de dados. START-OF-SELECTION. SELECT marc~matnr marc~werks t001w~name1 makt~maktx INTO TABLE t_marc FROM marc INNER JOIN t001w ON marc~werks = t001w~werks INNER JOIN makt ON marc~matnr = makt~matnr and makt~spras = sy-langu WHERE t001w~werks IN S_CENTRO AND marc~matnr IN S_MATERI. END-OF-SELECTION. 4.1.2 Controle de nivel na tabela interna Ao processar tabelas internas com o comando LOOP, você pode executar processamentos. com nível de controle, utilizando tais parâmetros: AT FIRST Comando dentro do Loop, identifica o primeiro registro de uma tabela percorrida. (quebra) SORT BY campo. LOOP AT t_tabela. AT FIRST. …. ENDAT. ... ENDDLOOP. 33 AT NEW campo Comando dentro do LOOP, identifica o primeiro registro de uma seqüência (quebra) SORT BY campo. LOOP AT t_tabela. AT NEW campo. …. ENDAT. ... ENDDLOOP. AT LAST Comando dentro do Loop, identifica o ultimo registro de uma tabela percorrida. (quebra) SORT BY campo. LOOP AT t_tabela. .... AT LAST. …. ENDAT. ENDDLOOP. AT END OF Comando dentro do Loop, identifica o ultimo registro de uma seqüência. (quebra) SORT BY campo. LOOP AT t_tabela. …. AT END of campo ENDAT. ENDDLOOP. 4.1.3 Comando Message MESSAGE-ID MESSAGE Comando usado para definir classe de mensagens. Comando usado para chamar mensagens. * MESSAGE-ID nnn deve ser usado junto com o comando REPORT, no inicio do programa. Tipo de mensagens: E - Erro A - Aborta W - Aviso I - Informação S - Sucesso REPORT LINE-COUNT 80 LINE-SIZE 60 MESSAGE-ID Z01. MESSAGE W001. “Mensagem com avisos (warnings) MESSAGE E002. “Mensagem com erros. 34 MESSAGE S003. “Mensagem de sucesso. * Também podemos passar parâmetros para as mensagens. * Na criação da mensagem na classe de mensagens devemos colocar o símbolo & para indicar a passagem de um parâmetro. MESSAGE S003 WITH text-001. 4.1.4 Alguns comandos ABAP AT LINE-SELECTION Ao selecionar a linha no relatório AT LINE-SELECTION. SELECT SINGLE maktx FROM makt INTO s_maktx WHERE spras = sy-langu AND matnr = s_matnr-low. CHECK sy-subrc NE 0. CLEAR s_maktx. MESSAGE e208(00) WITH text-004. AT SELECTION-SCREEN Verifica o resultado de uma variável de seleção SELECTION-SCREEN BEGIN OF BLOCK b_janela WITH FRAME TITLE text-001. SELECT-OPTIONS s_material FOR T_MARC-MATNR. SELECTION-SCREEN END OF BLOCK b_janela. AT SELECTION-SCREEN ON s_material. AT USER-COMMAND Ao comando do usuário SET PF-STATUS ‘BOTAO’. IITIALIZATION. AT USER-COMMAND. IF SY-UCOMM = ‘DOWNLOAD’. PERFORM ZF_DOW_NOVO. ENDIF. APPEND Gravar em tabela interna APPEND t_tabela. CASE WHEN ENDCASE Tratamento de casos 35 CASE okcode. WHEN 'SIM'. ... WHEN 'NAO'. ... WHEN OTHERS. ... ENDCASE. CHECK Se a condição forverdadeira continua logo após a verificação, se não aborta a execução. CHECK SY-SUBRC = 0. CLEAR Limpa o conteúdo de uma variável ou tabela CLEAR var. CLEAR t_tabela. COLLECT Organiza a tabela interna com todas as descrições a esquerda totalizando os campos numéricos com a mesma chave. COLLECT t_tabela. COMMIT WORK Efetiva as alterações no Banco de dados COMMIT WORK. CONSTANTS Criar constantes que podem ser usadas em todo o programa CONSTANTS c_tipo TYPE C VALUE ‘;’. CONCATENATE Agrupa varias variáveis em uma única variável CONCATENATE ‘abc’ ‘XXX’ INTO var3. “ var3 = abcXXX END-OF-PAGE Marca o final de um cabeçalho de relatório 36 TOP-OF-PAGE. WRITE ‘NOVO CABECALHO DEFINIDO PELO PROGRAMA’. END-OF-PAGE. FORMAT COLOR Usado para formatar a saída do comando WRITE FORMAT COLOR COL_TOTAL. WRITE 'QUALQUER COISA'. FORMAT COLOR COL_KEY. WRITE / 'QUALQUER COISA'. FORMAT COLOR COL_BACKGROUND. " VOLTA AO PADRÃO FREE Libera espaço utilizado por uma tabela interna na memória FREE t_tabela. HIDE Usado para definir campos para uma segunda janela em relatórios. SORT T_MARC BY matnr werks lgort. LOOP AT T_MARC. WRITE /5 T_MARC-MATNR. WRITE 18 T_MARC-MAKTX. WRITE 60 T_MARC-WERKS. WRITE 80 T_MARC-NAME1. HIDE :T_MARC-MATNR,T_MARC-MAKTX,T_MARC-WERKS, T_MARC-NAME1. ENDLOOP. IF .. ELSE .. ENDIF. Comando de decisão IF var = ‘A’. .... ELSE. .... ENDIF. IF NOT .. IS INITIAL Verifica se uma variável ou tabela interna esta vazia. 37 IF NOT var IS INITIAL. .... ENDIF. INSERT Insere o conteúdo de uma variável em uma tabela transparente INSERT tabela. LEAVE PROGRAM Comando usado para sair de um programa on-line. LEAVE PROGRAM. LEAVE TO SCREEN Comando usado para mudar de tela dentro de programas on-line. LEAVE TO SCREEN 9000. “ 9000 , numero da tela LINE-SIZE LINE-COUNT Numero de colunas por pagina. Numero de linhas por pagina. * Estes comandos são usados dentro do comando REPOR T no inicio do programa. REPORT LINE-COUNT 60 LINE-SIZE 130. LOOP AT Comando usado para ler uma tabela interna. LOOP AT t_tabela. . . ENDDLOOP. MODIFY Comando usado para modificar uma tabela interna. MODIFY t_tabela. “ modifica toda a linha da tabela MOVE Move todo o conteúdo de uma tabela para outra. 38 Os campos devem ser os mesmos. MOVE tabela TO tabela. MOVE wa TO wa. MOVE-CORRESPONDING Move apenas os campos correspondente entre 2 tabelas. LOOP AT t_tabela. MOVE-CORRESPONDING t_tabela TO tabela. INSERT tabela. ENDLOOP. COMMIT WORK. NO STANDARD PAGE HEADING Ignora o cabeçalho STD do R/3 * Deve ser usado em conjunto com o comando REPORT REPORT LINE-COUNT 80 LINE-SIZE 60 MESSAGE-ID Z01 NO STANDARD PAGE HEADING. PARAMETERS Cria parâmetros de seleção para janelas. PARAMETERS P_WERKS TYPE T_001W-WERKS. “ com os mesm os atributos do campo PARAMETERS CODIGO(3) TYPE C. * para criar radio-button PARAMETERS p_bot1 RADIOBUTTON GROUP g1. PARAMETERS p_bot2 RADIOBUTTON GROUP g1. * faz com que o parâmetro seja obrigatório. PARAMETERS p_matnr TYPE T_MARA-MATNR OBLIGATORY. * RLGRAP- FILENAME valor padrão para receber nomes de arquivo s a importar e exportar arquivos PARAMETERS P_ARQ TYPE RLGRAP-FILENAME. " OBLIGATORY. * PARA CRIAR VARIANTS DE EXIBIÇÃO PARA RELATÓRIOS A LV READ TABLE Usado para ler um registro especifico. SORT t_tabela1 BY campo. LOOP AT t_tabela1. * com o comando BINARY SEARCH a pesquisa fica mais rápida. READ TABLE t_tabela2 WITH KEY campo = t_tabela1-cam po BINARY SEARCH. * após o READ TABLE devemos verificar o resultado IF SY-SUBRC EQ 0. .... “ verdadeiro ( encontrou o dado ) ELSE. ENDIF. 39 ENDLOOP. REFRESH Limpa o conteúdo de uma tabela. REFRESH t_tabela. REPORT Comando para iniciar um programa. REPORT. SELECT Select Single vbeln , erdat From vbak Into wa_vbak Where vbeln = p_vbeln *Utilizar somente com a chave primaria Select vbeln erdat ernan From vbap Up to 1 row Into wa_vbap *into table t_vbap Where ernan = p_ernan Endselect. “ somente no Up to Row *Trás o primeiro registro da tabela * Utilizar somente quando não tiver a chave primari a Select vbeln From vbak Into table t_vbak Where vbeln in s_vbeln * Sempre que for utilizar For all Entries utilizar If SY-SUBRC ou CHECK Select campo From vbap Into table t_vbap For all entries in t_vbak Where vbeln = t_vbak-vebln Select A~vbeln A~erdat B~posnr Into table t_rel 40 From vbak as A inner join vbap as B On A~vbeln = B~vbeln Where A~vbeln ins_vbeln. SELECTION-OPTIONS Comando usado para colocar opções de seleção. SELECTION-SCREEN BEGIN OF BLOCK b_janela WITH FRAME TITLE text-001. SELECT-OPTIONS S_MATERI FOR T_MARC-MATNR. SELECT-OPTIONS S_CENTRO FOR T_MARC-WERKS. SELECTION-SCREEN END OF BLOCK b_janela. SELECTION-SCREEN Cria um BOX na janela * PARA CRIAR UM BOX NA JANELA * SELECTION-SCREEN BEGIN OF BLOCK nome_do_bloco WIT H FRAME TITLE * nome_do_elemento_de_texto * -> DEPOIS COLOCAR OS SELECT-OPTIONS ( variáveis ) * FECHAR COM : SELECTION-SCREEN END OF BLOCK nome_d o_bloco * clicar duas vezes sobre o nome_do_bloco para colo car o nome * que ira aparecer na tela SELECTION-SCREEN BEGIN OF BLOCK b_janela WITH FRAME TITLE text-001. SELECT-OPTIONS S_MATERI FOR T_MARC-MATNR. SELECT-OPTIONS S_CENTRO FOR T_MARC-WERKS. PARAMETERS P_BOT1 RADIOBUTTON GROUP b1. PARAMETERS P_BOT2 RADIOBUTTON GROUP b1. SELECTION-SCREEN END OF BLOCK b_janela. SET PF-STATUS Comando usado para criar botões para serem exibidos em relatórios. * depois dar dublo click sobre o nome do botão para criar o objeto. SET PF-STATUS ‘nome_do_botão’. SET TITLEBAR Comando usado para criar TITULOS de janelas. * depois dar dublo click sobre o nome do titulo para criar o objeto. SET TITLEBAR ‘NNN’’. SET PARAMETERS Usado para passar parâmetros para chamada de funções. * SET PARAMETER ID ‘NN’ FILED valor do campo para chamar transações passando * parâmetros SET PARAMETERS ID ‘VF' FIELD t_alv-vbeln. CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN. 41 SKIP Comando usado para pular linhas em relatório. WRITE ‘IMPRIME UMA LINHA’. SKIP 2. “ Pular duas linhas. SORT Comando usado ordenar tabelas internas SORT t_tabela BY campo. SPLIT .. AT .. INTO Usado para ler um arquivo externo e gravar na tabela. LOOP AT t_tabela. CLEAR t_tempo. * SPLIT tabela_inter na AT delimitador_do_arquivo INTO campos que irão r eceber os dados na * sequência do arquivo * c_tipo é o delimitardor do arquivo texto SPLIT t_tabela-texto01 AT c_tipo INTO T_TEMPO-BUKRS T_TEMPO-EKORG T_TEMPO-KTOKK T_TEMPO-NAME1 T_TEMPO-SORTL T_TEMPO-ORT01 T_TEMPO-PSTLZ T_TEMPO-LAND1 T_TEMPO-REGIO. APPEND t_tempo. ENDLOOP. TABLES Usado para abertura de tabelas Standard TABLES : tabela1, tabela2, tabela3. TOP-OF-PAGE Marca o inicio de um cabeçalho de relatório TOP-OF-PAGE. WRITE ‘NOVO CABECALHO DEFINIDO PELO PROGRAMA’. END-OF-PAGE. TYPES Define os tipos de variáveis e pode ser usado para definir dados de tabela interna. DATA var1 TYPE I. “ define uma variável do tipo int eiro * define um tipo com os campos da tabela TYPES: BEGIN OF tipo_tabela vbeln TYPE vbrk-vbeln, 42 kdgrp TYPE vbrk-kdgrp, netwr TYPE vbrk-netwr, END OF tipo_tabela. * cria a tabela definindo com o tipo criado acima u sando o header line. DATA t_tabela TYPE tipo_vbrk OCCURS 0 WITH HEADER L INE. ULINE Server para colocar uma linha continua em relatórios para fazer separações. ULINE “ imprime uma linha continua UPDATE Atualiza um tabela transparente UPDATE tabela. WRITE Comando usado para saída de impressora ou tela WRITE ‘ESTA LINHA SERA IMPRESSSA’. WRITE ‘ESTA LINHA SERA COLOCADA NA MESMA LINHA QUE A PRIMEIRA’. WRITE / ‘COM A / FAZ UMA QUEBRA E O TEXTO SERA IMPR ESSA NA LINHA DE BAIXO’. WRITE 5 ‘IMPRIME NA POSIÇÃO 5’. SY-DATUM SY-LANGU SY-MANDT SY-PAGNO SY-SUBRC SY-TABIX SY-UCOMM SY-UNAME SY-VLINE SY-TCODE Retorna a data do sistema Retorna o idioma de logon do usuário Retorna o mandante do sistema Retorna a pagina atual de um relatório Retorna o valor de uma pesquisa ou condição Retorna o índice de uma tabela em loop Retorna o nome de um botão precionado Retorna o nome do usuário Efetua a fechamento de bordas em um relatório Código da transação Formato de Saída – Cores Podemos exibir cores na saída de um relatório Através do comando WRITE, podemos definir a cor da linha ou coluna do relatório. 43 Hotspots Hotspots são áreas especiais para relatórios. Se o usuário clicar no campo que esteja preparado com o hotspots, o evento é acionado (Evento AT LINE-SELECTION). Abaixo Uma lista com um campo Hotspot ficaria assim: Programa Report Simples *&------------------------------------------------- --------------------* *& Report Z_SD_ORDENSVENDA_37 *& *&------------------------------------------------- --------------------* *& *& *&------------------------------------------------- --------------------* REPORT z_sd_ordensvenda_37 NO STANDARD PAGE HEADIN G. *Tabelas TABLES: vbak,vbap,vbuk,makt. 44 *Tipos TYPES: BEGIN OF y_vbap, matnr TYPE vbap-matnr, vbeln TYPE vbap-vbeln, " Documento de vend as posnr TYPE vbap-posnr, " Item do documento de vendas waerk TYPE vbap-waerk, " Moeda do document o SD netwr TYPE vbap-netwr, " Valor líquido da ordem na moeda do documento kwmeng TYPE vbap-kwmeng, " Quantidade da ord em acumulada em unidade de venda END OF y_vbap, BEGIN OF y_vbak, vbeln TYPE vbak-vbeln, " Documento de vend as erdat TYPE vbak-erdat, " Data de criação d o registro netwr TYPE vbak-netwr, " Valor líquido da ordem na moeda do documento waerk TYPE vbak-waerk, " Moeda do document o SD bstnk TYPE vbak-bstnk, " Nº pedido do clie nte END OF y_vbak, BEGIN OF y_vbuk, vbeln TYPE vbuk-vbeln, " Documento de vend as gbstk TYPE vbuk-gbstk, " Status Global Pro cessamento de Vendas END OF y_vbuk, BEGIN OF y_makt, matnr TYPE makt-matnr, " Nº do material maktx TYPE makt-maktx, " Texto breve de ma terial END OF y_makt, BEGIN OF y_vtotal, netwr TYPE vbak-netwr, " Valor líquido da ordem na moeda do documento END OF y_vtotal. * Tabelas Transparentes DATA: t_vbap TYPE TABLE OF y_vbap, t_vbak TYPE TABLE OF y_vbak, t_vbuk TYPE TABLE OF y_vbuk, t_makt TYPE TABLE OF y_makt, * t_relat TYPE TABLE OF y_relat, * t_relat1 TYPE TABLE OF y_relat1. t_vtotal TYPE TABLE OF y_vtotal. * Work Areas DATA: wa_vbap TYPE y_vbap, wa_vbak TYPE y_vbak, wa_vbuk TYPE y_vbuk, wa_makt TYPE y_makt, wa_vtotal TYPE y_vtotal. *Variaveis DATA: vtotal TYPE i VALUE 0. 45 DATA: v_bot(1) TYPE c . DATA: cor TYPE c. *Constantes * Eventos * Tela de Seleção SELECTION-SCREEN BEGIN OF BLOCK d_janela WITH FRAME TITLE text-001. SELECT-OPTIONS s_vbeln FOR vbap-vbeln. " Pesquisa n º Documento SELECT-OPTIONS s_erdat FOR vbak-erdat. " Pesquisa D ata de Criação SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(28) text-003. SELECT-OPTIONS s_matnr FOR vbap-matnr NO-EXTENSION NO INTERVALS. PARAMETER s_maktx TYPE makt-maktx. * SELECT-OPTIONS s_maktx FOR makt-maktx NO-EXTENSI ON * NO INTERVA LS. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF BLOCK b_janela1 WITH FRAM E TITLE text-002. PARAMETERS p_bot1 RADIOBUTTON GROUP b1. PARAMETERS p_bot2 RADIOBUTTON GROUP b1. PARAMETERS p_bot3 RADIOBUTTON GROUP b1. SELECTION-SCREEN END OF BLOCK b_janela1. SELECTION-SCREEN END OF BLOCK d_janela. INITIALIZATION. AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. CHECK screen-name = 'S_MAKTX'. screen-input = 0. screen-output = 1. screen-display_3d = ' '. MODIFY SCREEN. ENDLOOP. AT LINE-SELECTION. SELECT SINGLE maktx FROM makt INTO s_maktx WHERE spras = sy-langu AND matnr = s_matnr-low. 46 CHECK sy-subrc NE 0. CLEAR s_maktx. MESSAGE e208(00) WITH text-004. START-OF-SELECTION. PERFORM zf_seleciona_dados. PERFORM zf_imprime_dados. PERFORMzf_imprime_dados1. *&------------------------------------------------- --------------------* *& Form zf_seleciona_dados *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_seleciona_dados . IF p_bot1 = 'X'. v_bot = 'A'. ELSEIF p_bot2 = 'X'. v_bot = 'B'. ELSE. p_bot3 = 'X'. v_bot = 'C'. ENDIF. SELECT vbeln erdat netwr waerk bstnk FROM vbak INTO TABLE t_vbak WHERE vbeln IN s_vbeln AND erdat IN s_erd at. SELECT vbeln gbstk FROM vbuk INTO TABLE t_vbuk FOR ALL ENTRIES IN t_vbak 47 WHERE vbeln = t_vbak-vbeln AND gbstk = v_b ot. ENDFORM. " zf_seleciona_dados *&------------------------------------------------- --------------------* *& Form zf_imprime_dados *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_imprime_dados . ULINE. WRITE:/ sy-vline, (10) text-008, sy-vline, (10) text-009, sy-vline, (28) text-010, sy-vline, (05) text-011, sy-vline, (10) text-012, sy-vline. ULINE. LOOP AT t_vbak INTO wa_vbak. IF cor IS INITIAL. FORMAT COLOR COL_NORMAL INTENSIFIED OFF. cor = 'x'. ELSE. FORMAT COLOR COL_KEY INTENSIFIED OFF. CLEAR cor. ENDIF. LOOP AT t_vbak INTO wa_vbak. READ TABLE t_vbuk INTO wa_vbuk WITH KEY vbeln = wa_vbak-vbeln. IF sy-subrc = 0. WRITE: / sy-vline, (10) wa_vbak-vbeln HOTSPOT USING EDIT MASK'__________', sy-vline, (10) wa_vbak-erdat DD/MM/YYYY, sy-vli ne, (30) wa_vbak-bstnk, sy-vline, (03) wa_vbak-waerk, sy-vline, (10) wa_vbak-netwr, sy-vline. HIDE wa_vbak-vbeln. ENDIF. ENDLOOP. ULINE. ENDLOOP. 48 ENDFORM. " zf_imprime_dados *&------------------------------------------------- --------------------* *& Form zf_imprime_dados1 *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_imprime_dados1 . LOOP AT t_vbap INTO wa_vbap. AT NEW vbeln. REFRESH t_vtotal. WRITE: / text-007, wa_vbap-vbeln. ULINE. ENDAT. READ TABLE t_makt INTO wa_makt WITH KEY matnr = wa_vbap-matnr. WRITE: / sy-vline, (05) wa_vbap-posnr, sy-vline, (22) wa_makt-maktx, sy-vline, (16) wa_vbap-matnr, sy-vline, (10) wa_vbap-waerk, sy-vline, (10) wa_vbap-netwr, sy-vline. wa_vtotal-netwr = wa_vbap-netwr. COLLECT wa_vtotal INTO t_vtotal. AT END OF vbeln. ULINE. LOOP AT t_vtotal INTO wa_vtotal. WRITE: / text-006 COLOR COL_NORMAL, wa_vtotal-netwr. ENDLOOP. ENDAT. ENDLOOP. ENDFORM. " zf_imprime_dados1 4.2 ALV 49 O Abap List Viewer (ALV) é uma ferramenta que padroniza e simplifica o uso de listas e relatórios no sistema R/3 tanto para o desenvolvedor tanto para o usuário que interage com o relatório. O ALV através de suas funções e estruturas torna o desenvolvimento mais simples na medida que economiza significativas linhas de código como por exemplo no tratamento de quebras, totais, subtotais, cores e outras vantagens que veremos a seguir. *&------------------------------------------------- --------------------* *& Report ZSD_ALV1_37 *& *&------------------------------------------------- --------------------* *& *& *&------------------------------------------------- --------------------* REPORT ZSD_ALV1_37. *Declaração do grupo de tipos SLIS que contém as de finições necessárias *para interagir com as funções ALV TYPE-POOLS: slis. *Declaração da tabela para uso na tela de seleção TABLES: MAKT. TYPES:BEGIN OF y_cabecalho, matnr TYPE mara-matnr, " Nº do material ersda TYPE mara-ersda, " Data de criação mtart TYPE mara-mtart, " Tipo de material matkl TYPE mara-matkl, " Grupo de mercadori as ntgew TYPE mara-ntgew, " Peso líquido maktx TYPE makt-maktx, box(1) TYPE c, END OF y_cabecalho. *Declaração da tabela interna de saída DATA: t_cabecalho TYPE TABLE OF y_cabecalho, *Tabela interna com a definição da estrutura t_fieldcat TYPE slis_t_fieldcat_alv, t_sort TYPE slis_t_sortinfo_alv. *Tabela interna com o Cabeçalho DATA: t_listheader TYPE slis_t_listheader. *Declaração de estrutura de Layout DATA: w_layout TYPE slis_layout_alv. *Tela de seleção com a ordem de venda SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_mara FOR makt-matnr. SELECTION-SCREEN END OF BLOCK b1. 50 *-------------------------------------------------- -------------------- * INITIALIZATION * *-------------------------------------------------- --------------------* INITIALIZATION. *Declaração da variável que armazenará o nome do pr ograma e será *enviada para a função de chamada do ALV DATA: v_repid TYPE sy-repid. "Nome do Programa *Passagem do nome do programa para a variável criad a v_repid = sy-repid. *-------------------------------------------------- --------------------* * START-OF-SELECTION * *-------------------------------------------------- --------------------* START-OF-SELECTION. *Chamada da rotina para carregar a tabela interna PERFORM zf_buscar_dados. PERFORM zf_top_of_page. PERFORM zf_cabecalho. *Indicação de campos para exibição na lista PERFORM zf_fieldcat_init. *Definição dos parâmetros de layout que serão utili zados PERFORM zf_ordenar_lista. PERFORM zf_layout_build. PERFORM zf_list_display. *-------------------------------------------------- --------------------* * END-OF-SELECTION * *-------------------------------------------------- --------------------* END-OF-SELECTION. *Chamada da rotina para construção da lista ALV Gri d FORM zf_layout_build. *Não mostrar descrição das colunas * w_layout-no_colhead = 'X'. *Imprimir linha clara e escura alternadamente w_layout-zebra = 'X'. *Não imprimir divisões entre colunas * w_layout-no_vline = 'X'. *Permite edição em todos os campos * w_layout-edit = 'X'. 51 *Abre a lista com as colunas do tamanho necessário para mostragem w_layout-colwidth_optimize = 'X'. *Escreve na barra de título w_layout-window_titlebar = text-002. *Não permite mostragem da linha de total * w_layout-no_totalline = 'X'. *Não permite mostragem de subtotais * w_layout-no_subtotals = 'X'. *Mostra os totais na parte de cima da lista * w_layout-totals_before_items = 'X'. *Permitir mudança de níves de quebra para subtotais * w_layout-group_change_edit = 'X'. *Declaração de campo check box w_layout-box_fieldname = 'BOX'. w_layout-box_tabname = 'T_CABECALHO'. ENDFORM." zf_layout_build *&------------------------------------------------- --------------------* *& Form ZF_LIST_DISPLAY *&------------------------------------------------- --------------------* * Chamada da função de abertura do ALV com to das as informações *-------------------------------------------------- --------------------* FORM zf_list_display. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' i_callback_program = v_repid * I_CALLBACK_PF_STATUS_SET = ' ' * I_CALLBACK_USER_COMMAND = 'USER COMMA ND' i_callback_top_of_page ='ZF_TOP_OF_P AGE' * I_CALLBACK_HTML_TOP_OF_PAGE = * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = is_layout = w_layout "V ariação de Layout it_fieldcat = t_fieldcat "Estrutura utilizada * IT_EXCLUDING = * IT_SPECIAL_GROUPS = IT_SORT = t_sort * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' i_save = 'A' "Permite salvar layouts * IS_VARIANT = * IT_EVENTS = 52 * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES t_outtab = t_cabecalho "Tabela Intern a EXCEPTIONS program_error = 1 OTHERS = 2. *Verifica retorno da função IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msg no WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv 4. ENDIF. ENDFORM. *&------------------------------------------------- --------------------* *& Form zf_ordenar_lista *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_ordenar_lista . *Estrutura de ordenação inicial para lista DATA: w_sort TYPE slis_sortinfo_alv. *Montar estrutura CLEAR w_sort. w_sort-spos = 1. " Seqüência d e ordenação w_sort-fieldname = 'MATNR'. " Nome do cam po w_sort-tabname = 'T_CABECALHO'. " Nome da tab ela de lista w_sort-up = 'X'. " Ordenação c rescente w_sort-expa = 'X'. " Expandir li sta APPEND w_sort TO t_sort. CLEAR w_sort. w_sort-spos = 2. " Seqüência d e ordenação w_sort-fieldname = 'NTGEW'. " Nome do cam po w_sort-tabname = 'T_CABECALHO'. " Nome da tab ela de lista w_sort-up = 'X'. " Ordenação c rescente 53 * w_sort-expa = 'X'. " Expandir l ista w_sort-subtot = 'X'. " Subtotal * APPEND w_sort TO t_sort. endform. " zf_ordenar_lista *&------------------------------------------------- --------------------* *& Form zf_buscar_dados *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_buscar_dados . SELECT a~matnr a~ersda a~mtart a~matkl a~ntgew t ~maktx INTO TABLE t_cabecalho FROM mara as a inner join makt as t on a~m atnr = t~matnr WHERE a~matnr in s_mara and spras = sy-lan gu. endform. " zf_buscar_dados *&------------------------------------------------- --------------------* *& Form zf_fieldcat_init *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_fieldcat_init . *Estrutura DATA: w_fieldcat TYPE slis_fieldcat_alv. *Limpar tabela CLEAR t_fieldcat. *Cód. doc. venda CLEAR w_fieldcat. w_fieldcat-fieldname = 'MATNR'. w_fieldcat-ref_tabname = 'MARA'. APPEND w_fieldcat TO t_fieldcat. *Data de Criação CLEAR w_fieldcat. w_fieldcat-fieldname = 'ERSDA'. w_fieldcat-ref_tabname = 'MARA'. APPEND w_fieldcat TO t_fieldcat. *Criado por CLEAR w_fieldcat. w_fieldcat-fieldname = 'MTART'. w_fieldcat-ref_tabname = 'MARA'. APPEND w_fieldcat TO t_fieldcat. *Tipo de Ordem 54 CLEAR w_fieldcat. w_fieldcat-fieldname = 'MATKL'. w_fieldcat-ref_tabname = 'MARA'. APPEND w_fieldcat TO t_fieldcat. *Valor líq. da ordem CLEAR w_fieldcat. w_fieldcat-fieldname = 'NTGEW'. w_fieldcat-do_sum = 'X'. w_fieldcat-ref_tabname = 'MARA'. APPEND w_fieldcat TO t_fieldcat. *Canal de distribuição CLEAR w_fieldcat. w_fieldcat-fieldname = 'MAKTX'. w_fieldcat-ref_tabname = 'MAKT'. APPEND w_fieldcat TO t_fieldcat. endform. " zf_fieldcat_init *&------------------------------------------------- --------------------* *& Form zf_cabecalho *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_cabecalho . DATA: w_listheader TYPE slis_listheader. CLEAR t_listheader[]. CLEAR w_listheader. w_listheader-typ = 'H'. w_listheader-info = text-013. APPEND w_listheader TO t_listheader. CLEAR w_listheader. w_listheader-typ = 'S'. w_listheader-info = text-012. APPEND w_listheader TO t_listheader. CLEAR w_listheader. w_listheader-typ = 'A'. w_listheader-info = text-014. APPEND w_listheader TO t_listheader. endform. " zf_cabecalho *&------------------------------------------------- --------------------* *& Form zf_top_of_page *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text 55 *-------------------------------------------------- --------------------* FORM zf_top_of_page . CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = t_listheader i_logo = 'ENJOYSAP_LOGO'. * I_END_OF_LIST_GRID = * I_ALV_FORM = ENDFORM. " zf_top_of_page 56 5. DIALOG 5.1 Module PoolCada tela tem um evento que ocorre antes da apresentação da tela e um evento que ocorre depois do usuário fazer alguma ação na tela gerada. Esses eventos são • PBO (Process Before Output) • PAI (Process After Input) Para ciar programas Module Pool utilizar a transação SE80. • Padrão de nome de um Module Pool: – SAPMZ........ Sempre iniciado por essas cinco letras. Module Pool (Transação SE80) 57 Informar o nome do programa a ser criado no campo em destaque abaixo: Clicar em sim! (Desejo criar o objeto). Confirmar utilizando o botão “ENTER” do teclado. Ele pergunta se iremos querer o include TOP, que é o include onde iremos declarar todas as nossas variáveis globais. Devemos marcar que iremos utilizar o include TOP. Selecionar: E Informar o nome da aplicação e clicar no botão “ENTER”. 58 Informar O Título do programa e clicar no botão gravar. Informar a request a ser gravada ou objeto local. Criar uma tela para o programa: Clicar com o botão direito sobre o nome do programa e selecionar “Tela”. 59 Informar descrições das telas: E clicar em . 60 Clicar em Layout será Exibido o modo de edição de tela. Informar o Nome “OK_CODE”, que será responsável por armazenar o código do comando efetuado pelo usuário, seguindo a Idáia do SY- UCOOM. 61 Utilizar o F6 para localizar os campos das tabelas: Selecionar os campos que deseja que seja exibido em sua tela: Informar o nome da tabela com campo ou somente o nome da tabela a ser localizado. Apertar o ENTER e será exibido o’s campo’s. 62 E apertar Enter. Só posicionar os campos na tela e pronto. Obs: Para mais opções com o design da tela, utilizar Barra de ferramentas ao lado esquerdo. 63 Para checar os detalhes de cada campo, apertar o f2 em cima do mesmo, será exibida a tela: Criar transação para o programa. Clicar com o botão direito sobre o nome do programa e selecionar transação. Informar o “código da transação” (campo a escolha), uma descrição. Apertar ‘ENTER’. 64 Informar o nome do programa, nome da tela e todos as Capacidades de Gui. Para testar se a tela está Ok. Executar a o nome da transação na barra com o /o para abrir uma nova janela . Tipo do programa a ser utilizado. 65 A tela deverá seguir o modelo abaixo: Deverá ser retirado o comentário dos INCLUDE e dar um clique duplo sobre eles, será solicitado pra criar o include no programa! PROCESS BEFORE OUTPUT – É aonde ocorre todos os processamentos antes da tela ser exibida. PROCESS AFTER INPUT – É aonde ocorre o processamento após a interação com o usuário. 66 Dica: Sempre que ocorre a interação do usuário com o programa, o sistema executa as instruções do PAI (PROCESS AFTER INPUT) e depois carrega o PBO (PROCESS BEFORE OUTPUT). 67 Retirar o comentário do MODULE STATUS_1000. Dar um duplo clique e criar o objeto. O Objeto deverá ser associado ao include com final O01. Include PBO. 68 Tirar o comentário de linha dos dois itens e substituir ‘xxxxx’ por um nome. E dar um duplo clique para criar os objetos. Deverá associar ao PBO. 69 70 Atribuir nomes aos botões da barra Application tool bar. Ao salvar a tela será exibida a tela 71 Tirar o comentário do USER_COMMAND_1000. E dar um duplo clique para criar o objeto. Associar ao modulo PAI. 5.2. TABSTRIP 72 É um componente disponível para criar uma divisão por abas, cada aba tendo o seu próprio conteúdo. 5.2.1 Criando Tabstrip com Assistente. Marcar a ferramenta do Tabstrip com o Assistente e delimitar a área da tela que será usada. 73 Definir o nome do Tabstrip 74 Será criada automaticamente uma subtela para cada aba indicada. Os nomes são sugeridos pelo sistema, mas podem ser alterados. Indicar quantas abas E quais os nomes a Serem utilizados 75 Os códigos gerados, serão incluídos nos includes indicados. É recomendado não alterar essas opções. 76 • Criado o Tabstrip pelo wizard, uma série de códigos são inseridos nos includes para fazer todo o tratamento das abas e chamadas das subtelas. • Para inserir dados dentro das subtela, basta abrir a subtela no editor gráfico e inserir o que deseja. • Cada subtela possui seu próprio PBO e PAI que é chamado a cada seleção de aba. Podemos codificar apenas para a aba utilizando essas chamadas locais. 77 5.3. TABLE CONTROL É um componente de tela utilizado para apresentar uma série de dados em linhas e colunas, semelhante a uma planilha. Além de visualizar dados, é bastante utilizado na inserção da dados em maior quantidade, pois facilita para o usuário. 5.3.1 Criando Table Control com o Assistente 78 Definir o nome do Table Control 79 Definir se utilizará os campos de uma <TT> ou de uma <TI>. Caso seja de uma <TI>, esta já deverá estar declarada no programa. Marcar quais campos da <TI> deverão aparecer no Table Control. 80 Definir se o TC permitirá a entrada de dados ou se será somente de visualização. Paginar gera os botões e o código para mudança de páginas. Cria os botões para inserir e eliminar linhas quando for habilitada a marcação de linhas. Cria os botões para marcar e desmarcar todas linhas quando for habilitada a marcação de linhas. Para habilitar a marcação de linhas, deve ser criado um campo do tipo char(1) na <TI> e selecioná-lo nessa opção. 81 Os códigos gerados, serão incluídos nos includes indicados. É recomendado não alterar essas opções. 82 • Criado o Table Control pelo wizard, uma série de códigos são inseridos nos includes para fazer todo o tratamento das linhas e colunas, e relação com a tabela interna. • Para que os dados apareçam no Table Control, basta inseri-los na tabela interna correspondente. Porém depois de criado o Table Control, se adicionarmos um campo na tabela interna, deveremos adicioná-lo manualmente no Table Control. • Quando utilizado o campo para marcação, para verificar se a linha está marcada basta checar se o conteúdo do campo de marcação recebeu o valor ‘X’. 5.3.2 Loop at Screen • SCREEN é uma tabela do sistema que contém todos os objetos da tela atual. Com isso podemos percorrer essa tabela e alterar algumas das propriedades dos campos existentes. • Algumas opções que podemos alterar são: visibilidade do campo, habilitação para inserção de dados, enfatizar, etc... • O loop at screen deve ser feito sempre no PBO da tela que pretendemos alterar. O resultado do Table Control com os botões de paginação. Os títulos das colunas devem ser alteradas. 83 Sintaxe: loop at screen. if screen-name eq ‘nome_campo’. screen-input = 0. “desabilita para escrita screen-invisible = 1. “torna o campo invisível modify screen. endif. endloop. 84 6. SHDB Mapeamento das telas O mapeamento das telas é feito através da transação SHDB. Normalmente o funcional irá entregar o mapeamento já pronto, mas pode ser necessário mapear uma transação por conta própria. Na SHDB, a transação será executada em um modo especial, que grava todos os comandos e informações digitadas em uma transação. Para efetuar o mapeamento selecionar Nova gravação, informar transação85 Para visualizar resultado do mapeamento, duplo clique no registro. Na tela será exibido todas as telas,campos e ações do usuário na transação. 86 7. RFC • Função RFC nada mais é do que um módulo de função que está habilitado a ser executado de fora do SAP. • Por exemplo, utilizando um conector.net para o SAP podemos chamar uma função RFC do SAP de dentro de um programa em VB. O mesmo ocorre para outras linguagens como o PHP. • Como habilitar uma função para RFC? • No módulo de função, em Características, marcar a opção ‘Módulo de Acesso Remoto’. • Obs.: Todos os campos de importação, exportação e modificação deverão ter o flag ‘Transfer. Valor’ marcado. 87 8. BATCH INPUT O que é Batch Input Batch Input ou BDC (Batch Data Communication) é um procedimento automático para transferência de dados para o sistema SAP sem a interferência do usuário (tela do usuário). Uma tela de usuário é simulada para este procedimento de modo que as mesmas checagens e atualizações possam ser executadas. Um componente central deste processamento é uma fila de arquivo. Este arquivo recebe os dados via programas do Batch Input e agrupa os dados juntos em uma “pasta”. Para carregar os dados para as bases de dados do SAP, você processa as pastas com a função de Batch Input utilizar a Transação SM35 Criação do Programa Estrutura da Tabela BDC o Antes de você escrever um programa Batch Input, você tem que executar a transação e anotar o número da tela, seqüência de telas e os nomes dos campos da tela para serem endereçados mais tarde no programa. Você entra com estes dados na tabela BDC. o O nome do campo para o OK-code é o mesmo para todas as telas: BDC_OKCODE. O valor para o OK-code consiste de uma barra ´/´ e o número da tecla de função (ex: ´/11´). 88 1. Declarar Tabelas, Types, Work áreas e tabelas internas para utilização. *&------------------------------------------------- --------------------* *& Report ZMM_FORNBI_23 *& *&------------------------------------------------- --------------------* *& Descrição : Programa para Batch Input *& Autor : Daniela Cristina Guerra *&------------------------------------------------- --------------------* REPORT zmm_fornbi_23. *&Tabelas------------------------------------------ --------------------* TABLES: bdcdata. *&Types-------------------------------------------- --------------------* TYPES: BEGIN OF y_upload, lifnr TYPE rf02k-lifnr, bukrs TYPE rf02k-bukrs, ekorg TYPE rf02k-ekorg, kotkk TYPE rf02k-ktokk, name1 TYPE lfa1-name1, sortl TYPE lfa1-sortl, land1 TYPE lfa1-land1, spras TYPE lfa1-spras, waers TYPE lfm1-waers, END OF y_upload. *&Tabelas Internas--------------------------------- --------------------* DATA: t_upload TYPE TABLE OF y_upload, t_bdc_data TYPE TABLE OF bdcdata. *&Work areas--------------------------------------- --------------------* DATA: wa_upload TYPE y_upload, wa_bdc_data TYPE bdcdata. 2. Criar tela de seleção. *&Tela de Seleção---------------------------------- --------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETER p_arq TYPE string. SELECTION-SCREEN END OF BLOCK b1. *&Inicialização------------------------------------ --------------------* INITIALIZATION. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_arq. 89 PERFORM zf_abrir_busca_arquivo. *&Inicio do Processamento ------------------------- ---------------------* START-OF-SELECTION. PERFORM zf_upload_arquivo. PERFORM zf_loop. 2. Buscar o arquivo texto usando a função WS_FILENAME_GET e ler o arquivo com GUI_UPLOAD, passando os dados carregados para uma tabela Interna, com a mesma estrutura e campos do arquivo de layout. *&------------------------------------------------- --------------------* *& Form zf_abrir_busca_arquivo *&------------------------------------------------- --------------------* * Descrição: Inicia a tela para buscar arquivo *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_abrir_busca_arquivo. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING * def_filename = ' ' * DEF_PATH = ' ' * MASK = ' ' MODE = 'O' TITLE = Text-011 IMPORTING filename = p_arq “ nome da tabe la para carregar dados * RC = EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5 . IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msg no WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv 4. ENDIF. ENDFORM. " zf_abrir_busca_arquiv o *&------------------------------------------------- --------------------* *& Form zf_upload_arquivo *&------------------------------------------------- --------------------* 90 * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_upload_arquivo . CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = p_arq * FILETYPE = 'ASC' * HAS_FIELD_SEPARATOR = ' ' * HEADER_LENGTH = 0 * READ_BY_LINE = 'X' * DAT_MODE = ' ' * CODEPAGE = ' ' * IGNORE_CERR = ABAP_TRUE * REPLACEMENT = '#' * CHECK_BOM = ' ' * VIRUS_SCAN_PROFILE = * NO_AUTH_CHECK = ' ' * IMPORTING * FILELENGTH = * HEADER = TABLES data_tab = t_upload * EXCEPTIONS * FILE_OPEN_ERROR = 1 * FILE_READ_ERROR = 2 * NO_BATCH = 3 * GUI_REFUSE_FILETRANSFER = 4 * INVALID_TYPE = 5 * NO_AUTHORITY = 6 * UNKNOWN_ERROR = 7 * BAD_DATA_FORMAT = 8 * HEADER_NOT_ALLOWED = 9 * SEPARATOR_NOT_ALLOWED = 10 * HEADER_TOO_LONG = 11 * UNKNOWN_DP_ERROR = 12 * ACCESS_DENIED = 13 * DP_OUT_OF_MEMORY = 14 * DISK_FULL = 15 * DP_TIMEOUT = 16 * OTHERS = 17 . IF sy-subrc = 0. ENDIF. ENDFORM. " zf_upload_arquivo 91 *&------------------------------------------------- --------------------* *& Form zf_loop *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_loop . LOOP AT t_upload INTO wa_upload. AT FIRST. PERFORM zf_open. ENDAT. PERFORM zf_parametros_doc. PERFORM zf_insert. CLEAR t_bdc_data. AT LAST. PERFORM zf_close. ENDAT. ENDLOOP. IF sy-subrc = 0. message i208(00) with text-008. ENDIF. ENDFORM. " zf_loop 1. Preencher uma itab com a mesmaestrutura da BDCDATA, passando o mapeamento gerado na transação SHDB. *&------------------------------------------------- --------------------* *& Form zf_monta_t_upload *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_monta_t_upload USING begin TYPE any prog TYPE any value TYPE any. CLEAR wa_bdc_data. IF begin = 'X'. 92 wa_bdc_data-dynbegin = begin. wa_bdc_data-program = prog. wa_bdc_data-dynpro = value. append wa_bdc_data to t_bdc_data. ELSE. wa_bdc_data-fnam = prog. wa_bdc_data-fval = value. append wa_bdc_data to t_bdc_data. ENDIF. ENDFORM. " zf_monta_t_upload *&------------------------------------------------- --------------------* *& Form zf_parametros_doc *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_parametros_doc. PERFORM zf_monta_t_upload USING: 'X' 'SAPMF02K' '0100', ' ' 'BDC_OKCODE' '/00', ' ' 'RF02K-LIFNR' wa_upload- lifnr, ' ' 'RF02K-BUKRS' wa_upload- bukrs, ' ' 'RF02K-EKORG' wa_upload- ekorg, ' ' 'RF02K-KTOKK' wa_upload- kotkk, 'X' 'SAPMF02K' '0110', ' ' 'BDC_OKCODE' '/00', ' ' 'LFA1-NAME1' wa_upload- name1, ' ' 'LFA1-SORTL' wa_upload- sortl, ' ' 'LFA1-LAND1' wa_upload- land1, ' ' 'LFA1-SPRAS' wa_upload- spras, 93 'X' 'SAPMF02K' '0120', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0130', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0380', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0210', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0215', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0220', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0215', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0220', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0610', ' ' 'BDC_OKCODE' '=VW', 'X' 'SAPMF02K' '0310', ' ' 'BDC_OKCODE' '=VW', ' ' 'LFM1-WAERS' wa_upload- waers, 'X' 'SAPMF02K' '0320', ' ' 'BDC_CURSOR' 'RF02K-LIFNR', ' ' 'BDC_OKCODE' '=VW'. 94 ENDFORM. " zf_parametros_doc Módulo de Função BDC_OPEN_GROUP • Com o módulo de função BDC_OPEN_GROUP abre uma sessão. • Você recebe vários valores de retorno via EXCEPTIONS. Você pode ler esses valores com SY-SUBRC. • USER sempre deve ser especificado. O tipo do usuário seria BDC. • Num processamento on-line, o usuário que estiver processando o on-line (e não o nome do usuário especificado) é usado para as checagens de autorização. *&------------------------------------------------- --------------------* *& Form zf_open *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* FORM zf_open . CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING client = sy-mandt * dest = filler8 GROUP = 'pasta23' * HOLDDATE = FILLER8 keep = 'X' USER = sy-uname * RECORD = FILLER1 * PROG = SY-CPROG * DCPFM = '%' * DATFM = '%' EXCEPTIONS client_invalid = 1 destination_invalid = 2 group_invalid = 3 group_is_locked = 4 holddate_invalid = 5 internal_error = 6 queue_error = 7 95 running = 8 system_lock_error = 9 user_invalid = 10 OTHERS = 11 . IF sy-subrc <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " zf_open Módulo de Função BDC_INSERT • Você usa o módulo de função BDC_INSERT para inserir dados de uma transação numa pasta. • Para transferir os dados, você precisa de uma tabela interna (tabela BDC). *&------------------------------------------------- --------------------* *& Form zf_insert *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_insert . CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'XK01' * POST_LOCAL = NOVBLOCAL * PRINTING = NOPRINT * SIMUBATCH = ' ' * CTUPARAMS = ' ' TABLES dynprotab = t_bdc_data EXCEPTIONS INTERNAL_ERROR = 1 NOT_OPEN = 2 QUEUE_ERROR = 3 TCODE_INVALID = 4 PRINTING_INVALID = 5 POSTING_INVALID = 6 OTHERS = 7 . 96 IF sy-subrc = 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. endform. " zf_insert Módulo de Função BDC_CLOSE_GROUP • Você fecha uma pasta Batch Input com o módulo de função BDC_CLOSE_GROUP. • Você recebe diversos valores de retorno via EXCEPTIONS. Você pode ler estes com SY-SUBRC. *&------------------------------------------------- --------------------* *& Form zf_close *&------------------------------------------------- --------------------* * text *-------------------------------------------------- --------------------* * --> p1 text * <-- p2 text *-------------------------------------------------- --------------------* form zf_close . CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS NOT_OPEN = 1 QUEUE_ERROR = 2 OTHERS = 3 . IF sy-subrc <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. endform. " zf_close 97 Funcionalidades
Compartilhar