Escolar Documentos
Profissional Documentos
Cultura Documentos
1- Overview ABAP/4
Transações
1- Overview ABAP/4
A área do desenvolvedor ABAP, isto é, o local onde ele irá criar seus objetos
será no Ambiente de Desenvolvimento no client específico para isso, os objetos
criados ali são amarrados a uma Classe de desenvolvimento e também a uma
Change Request/Task (normalmente o gerente de projeto cria uma request onde
serão amarradas as Tasks do projeto). No final do projeto cada desenvolvedor
libera sua Task para ser transportada e o Gerente após todas as Tasks liberadas
pode liberar a Request, nesse ponto entra em ação o pessoal de BASIS que
executam o transporte dessa Request para o outro ambiente QA e após os testes
feitos e aprovados transporta-se para a PRD.
Instância X Client
Também é muito importante o conceito do funcionamento do ambiente do
sistema durante a evolução de um projeto. Inicialmente devemos entender os
conceitos de client e instância:
Client – é definido como sendo uma unidade independente do R/3, em termos
comerciais, organizacionais e técnicos. Isso significa que possuem sua própria
configuração, dados de aplicação e dados cadastrais (master data).
Instância – é definida como um ambiente do R/3 que agrupa um ou mais
clients, onde se executa um determinado trabalho.
Uma instância de trabalho, geralmente possui mais de um client, onde são
trabalhados simultaneamente diferentes frentes de trabalho do projeto. A intenção
1- Overview ABAP/4
Client dependent/independent
Particularidades.
2 – Request
AF1K900109
Ordens e Tarefas (Tasks): Cada ordem pode possuir uma ou mais Tasks.
Cada Task possui os objetos agrupados de acordo com seu tipo e ordem na qual
deverão ser criados no Cliente de destino.
Descrição da ordem:
2 – Request
Uma ordem criada por um determinado usuário garante que os objetos a ele
associados ficam “reservados” para tal usuário e somente serão liberados no
momento que a ordem for encerrada.
Transação SE01 Permite verificar o conteúdo das ordens (objetos) e sua Log
de transporte (sucessos, erros ou warnings) para os outros clientes e instâncias.
2 – Request
Workbench Organizer
2 – Request
2 – Request
Cada tabela possui uma estrutura similar àquilo que pretende a representar,
isto é, tabelas são formadas de linhas que por sua vez são formadas por colunas.
Colunas representam fisicamente os Atributos.
Exemplos:
Exemplos:
Definir o Grupo de Função a ser utilizado pelo Repository Object (tcode SE80).
Selecionar o
objeto.
Criar novo
objeto.
Permite o cadastramento
de dados novos na tabela.
Utilizar a transação
para “Atualização
de tabela ampliada”.
Definir os parâmetros
da tabela a ser
atualizada .
4- Editor ABAP
Existe um padrão de nomenclatura que deve ser seguido, não só para nome
de programas, mas para todos os desenvolvimentos no SAP R/3. Esses padrões
podem variar de projeto a projeto e principalmente com a versão do SAP com a qual
se está trabalhando. Em todos os casos os nomes dos desenvolvimentos começam
sempre com Z ou Y.
Clicar em SAVE
SAVE – para
amarrar a uma
Objeto Local –
Request/Task
quando não vou
transportar –
somente teste
OK – após
escolher Req. Clicar em Criar – quando for amarrar em
uma nova request
1º - Salvar
Prestar atenção no
Status, sempre deixar
active, se for feita uma
Testar – para alteração e salva, mas
2º - Verificar, faz 3º - Ativar, execução do não ativa, o depurador
a verificação de ativa a programa direto considera a última ativa.
sintaxe. versão atual do código fonte
OBS: TEXT-003 é uma forma de se incluir textos de uma forma dinâmica, para criar
esses objetos digite text-003, dê dois clicks e se não existir o editor vai perguntar se
você deseja criar. Você entra com o texto na linguagem e depois faz a tradução
para as outras linguagens na transação SE63.
4- Editor ABAP
TABLES: MARA.
• TABELA DO SELECT-OPTIONS:
Entrar com
os textos
Aqui
4- Editor ABAP
Alguns Comandos:
• DATA: é utilizado para definir uma variável de qualquer tipo (simples, estrutura
ou tabela interna).
Detalhes:
o No término de toda instrução ABAP, deve ter um ponto final, para evitar
repetições pode-se utilizar “:” após o comando e “,” separando as instruções,
mas, deve terminar com ‘.’
o Quando me referencio a uma string utilizo “ ‘ “ aspas simples.
MOVE: 2 to v_num,
'MATERIAL to v_matnr.
ou
v_num = 2.
v_matnr = ‘MATERIAL’.
• WRITE e WRITE ... TO ... : Utilizado para imprimir em tela, pode se também
mover o resultado dessa impressão para dentro de outra variável. Quando se
executa o comando write o ABAP faz todas as traduções necessárias de acordo
com a configuração do usuário (moeda, quantidade). Ver variações com o F1.
Alguns Exemplos
EXEMPLO 1
REPORT ZEXP0001.
WRITE: '111111'.
WRITE: '222222',
'333333'.
WRITE: /'111111'.
WRITE: 15 '333333'.
WRITE: / TEXT-001.
ULINE.
ULINE 8(6).
SKIP.
SKIP 2.
WRITE : 8 SY-LANGU.
WRITE : / SY-DATUM UNDER SY-LANGU.
EXEMPLO 2
REPORT ZEXC0002 NO STANDARD PAGE HEADING.
WRITE 'PAG 1'.
NEW-PAGE.
WRITE 'PAG 2'.
TOP-OF-PAGE.
WRITE : 'EXEMPLO 2 - CURSO ABAP/4',
80 'Page',
SY-PAGNO.
ULINE.
EXEMPLO 3
REPORT ZEXP0003.
WRITE : 'NORMAL'.
FORMAT COLOR 1.
WRITE : 'NORMAL'.
EXEMPLO 4
REPORT ZEXP0004.
EXEMPLO 5
REPORT ZEXP0005.
WRITE P_NOME1.
IF P_BOTAO1 = 'X'.
WRITE / 'BOTÃO 1 ACIONADO'.
ELSE.
WRITE / 'BOTÃO 2 ACIONADO'.
ENDIF.
Comandos
Campos de sistema
SELECT
TABLES: SFLIGHT.
EXEMPLO:
SELECT * FROM BSEG FOR ALL ENTRIES IN T_BKPF
WHERE BUKRS = T_BKPF-BUKRS
AND BELNR = T_BKPF-BELNR
AND BELNR = T_BKPF-BELNR.
NOTA: se itab estiver vazia, esse comando selecionará todo o conteúdo da tabela,
pois nenhuma restrição está sendo colocada. Uma maneira de fazer essa
verificação é a seguinte:
Exemplo:
INSERT <tabela1>.
IF SY-SUBRC = 0.
INSERT <tabela2>.
IF SY-SUBRC = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.
15 - SELECT MAX(campo)
MIN(campo)
AVG(campo)
COUNT(*) FROM <table> INTO (…..,……,…..,….)
WHERE ………… .
19 - SELECT carrid MIN( price ) max (price ) INTO (carrid, minimum, maximum)
FROM sflight GROUP BY carrid.
(Todos os campos que eu quero que apareçam na minha lista eu preciso especificar
após a cláusula GROUP BY)
(carrid, maximum e minimum são campos auxiliares).
(Se o nome do database não é conhecido até runtime não se pode especificar a
cláusula GROUP BY).
EXEMPLO 6
TABLES T005H.
WRITE: / T005H-Bezei,
T005H-LAND1.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE I000.
ENDIF.
INCLUDE
Processamento de Mensagens
Tipos de Mensagem
Sub-rotina - FORM
START...
PERFORM TESTE123.
END....
FORM TESTE123.
<código fonte com a rotina desejada>
ENDFORM.
Módulos de Funções
Blocos de Eventos.
REPORT...
INICIALIZATION.
Primeiro passo a ser executado no programa, antes da tela de seleção e antes
da lógica de processamento.
AT SELECTION-SCREEN.
Executa logo após sair da tela de seleção, utilizado para fazer tratamentos de
obrigatoriedade de campos e similares.
TOP-OF-PAGE.
Executa quando é encontrado o primeiro comando WRITE dentro da lógica
principal, utilizado para colocar cabeçalho, textos que devem sair em todas as
páginas.
END-OF-PAGE.
Informações que apareçam no rodapé do relatório
OBS: essas informações só aparecerão se o tamanho da página estiver definido no
comando REPORT e somente qdo houver quebra de página. Caso contrário, não
aparecerá
START-OF-SELECTION.
Entre o START-OF-SELECTION e o END-OF-SELECTION, se encontra a
lógica principal do programa, quando programamos de uma forma estruturada
colocamos aqui apenas chamadas de sub-rotinas, para evitar poluição de código.
Ex:
PERFORM seleciona_dados.
PERFORM tratamento_interno.
PERFORM impressao_dados.
PERFORM gera_arquivos.
END-OF-SELECTION.
AT LINE-SELECTION.
Somente é executado se o usuário der um duplo click em uma linha mostrada
no relatório, ou marcar a linha e pedir para ver detalhe, utilizada para listas
interativas, drill-down.
AT USER-COMMAND.
Somente é executado se o usuário der um click em algum objeto do menu,
utilizado para listas com botões de interação.
Nome e Descrição do
Programa
Declaração de
Variáveis
Montagem da
Tela de
Input
Montagem e
Impressão do
Relatório ou outra lógica
REPORT ZSELECT00 .
TABLES: SPFLI, SFLIGHT.
SELECT * FROM SPFLI.
WRITE: / SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM,
SPFLI-AIRPFROM, SPFLI-CITYTO, SPFLI-AIRPTO.
ENDSELECT.
Com esse trecho de código apenas, o R/3 gera uma lista simples do conteúdo
de alguns campos da tabela SPFLI:
Cabeçalhos e rodapés
Posicionando os campos
Símbolos de Texto
Toda vez que o interpretador ABAP encontra um campo que começa com
TEXT, coloca naquela posição um símbolo de texto correspondente ao número
após o hífen na classe entre parênteses. Caso seja usada a opção MESSAGE-ID
<classe> na declaração REPORT, não é necessário especificar a classe de
mensagem junto ao símbolo de texto. O uso de símbolos de texto pode simplificar a
manutenção de programas complexos ao agrupar todas as mensagens de texto em
um só local.
Para editar os símbolos de texto, use, na janela do editor ABAP, a opção
Saltar Elementos de Texto Símbolos de Texto.
O Evento AT LINE-SELECTION
HIDE
REPORT ZTESTE.
START-OF-SELECTION.
AT LINE-SELECTION.
SELECT *
FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE,
SBOOK-CUSTOMID.
ENDSELECT.
6- Report/Listas
Dentro desse programa, a cada linha lida no comando SELECT, está sendo
armazenada informação sobre a chave dentro da área de HIDE. Não é necessário
que os campos selecionados com HIDE façam parte da lista impressa via WRITE.
Quando o usuário seleciona um determinado registro, o processador de lista ABAP
automaticamente procura na área de HIDE o registro correspondente àquele
número de linha, e os disponibiliza para uso com o mesmo nome.
START-OF-SELECTION.
...
TOP-OF-PAGE.
SET PF-STATUS ‘LISTA1’.
WRITE: ‘Lista Primária’.
AT LINE-SELECTION.
...
START-OF-SELECTION.
TOP-OF-PAGE.
WRITE: ‘Vôos’.
AT LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.
SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-
CUSTOMID.
HIDE: SBOOK-CUSTOMID.
ENDSELECT.
WHEN 2.
SELECT * FROM SCUSTOM
WHERE ID = SBOOK-CUSTOMID.
WRITE: / SCUSTOM-ID, SCUSTOM-NAME.
ENDSELECT.
ENDCASE.
AT USER-COMMAND
6- Report/Listas
Uma lista secundária pode ser mostrada dentro de uma janela ao colocar-se a
declaração WINDOW STARTING AT <col> <lin> [ENDING AT <col> <lin>]. Os
comandos WRITE subseqüentes serão direcionados para a janela especificada. Por
exemplo, alterando o código da seguinte maneira, podemos criar janelas nas listas
secundárias:
AT LINE-SELECTION.
CASE SY-LSIND.
WHEN 1.
WINDOW STARTING AT 5 3 ENDING AT 40 10.
SELECT * FROM SBOOK
WHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID AND
FLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID.
HIDE: SBOOK-CUSTOMID.
ENDSELECT.
WHEN 2.
WINDOW STARTING AT 45 10 ENDING AT 60 12.
SELECT * FROM SCUSTOM
WHERE ID = SBOOK-CUSTOMID.
WRITE: / SCUSTOM-ID, SCUSTOM-NAME.
ENDSELECT.
ENDCASE.
Tabela interna
• De inserção:
o APPEND: Inclui um novo registro na TI, no último registro.
o INSERT: Inseri um novo registro em uma posição especifica.
o COLLECT: Compara os campos tipo texto, caso encontre chaves
iguais, soma os campos numéricos, se não inclui um novo registro.
• De exclusão:
o DELETE: Exclui um registro da tabela interna, usado dentro do
loop at exclui o registro corrente, caso contrário usar o INDEX
mostrando a linha a ser excluída.
o REFRESH: Limpa todos os registros da TI
o CLEAR: Limpa somente o conteúdo do header line da TI
• De alteração de dados:
o MODIFY: Altera um registro da tabela interna, usado dentro do
loop at altera o registro corrente, caso contrário usar o INDEX
mostrando a linha a ser alterada.
• De leitura de dados:
o LOOP AT <TI> WHERE <condição>: Utilizado para ler mais de
uma linha da tabela interna, para os casos de tabela interna com
Header line automaticamente o sistema joga os dados para este
registro, caso não deve-se indicar onde será jogado os dados lidos.
Filtro é a opção WHERE.
o READ TABLE <TI> WITH KEY <condição>: Como o Loop at lê os
dados de uma tabela interna só que apenas uma linha por vez.
Por exemplo, para declarar uma tabela interna, conforme no exemplo, usou-se
a declaração TYPES para declarar uma estrutura que contém os campos que
desejamos ter na tabela. Em seguida, a tabela é criada através da declaração
DATA, usando a estrutura como modelo.
Exemplos:
EXEMPLO 7
REPORT ZEXP0007.
TABLES: T005H..
T_T005H-LAND1 = T005H-LAND1.
T_T005H-BEZEI = T005H-BEZEI.
APPEND T_T005H.
ENDSELECT.
IF SY-SUBRC NE 0.
WRITE TEXT-001.
ENDIF.
LOOP AT T_T005H.
ON CHANGE OF T_T005H-LAND1.
IF V_VAR1 = 0.
NEW-PAGE.
ENDIF.
CLEAR V_VAR1.
ENDON.
IF T_T005H-LAND1 = 'DE'.
FORMAT COLOR COL_TOTAL.
ELSE.
FORMAT COLOR COL_NORMAL.
ENDIF.
WRITE : / T_T005H-LAND1,
21 T_T005H-BEZEI.
ENDLOOP.
EXEMPLO 9
CLEAR V_CONT.
LOOP AT T_ZCURSO.
ZCURSO-ZDATA = T_ZCURSO-ZDATA.
ZCURSO-ZNUMERO = T_ZCURSO-ZBELNR.
ZCURSO-ZANO = T_ZCURSO-ZGJAHR.
INSERT ZCURSO.
IF SY-SUBRC = 0.
V_CONT = V_CONT + 1.
ENDIF.
ENDLOOP.
Na maioria dos casos essa carga poderia ser feita diretamente no banco de
dados, mas, quando falamos de SAP isso não funciona, pois, a maioria de
tratamentos na entrada de dados está na interface com usuários, e feito dessa
forma afetaria a integralidade dos dados, então os programas de carga (batch input
ou call transaction ) são utilizados para emular as entradas de dados via interface
com usuário, só que dessa forma as coisas acontecem como se fosse o usuário que
estivesse entrando com os dados manualmente só que não necessita da
intervenção manual do operador. Nas próximas páginas veremos como isso
funciona.
Utilizando SHDB
Criar um novo registro de
gravação
Exemplo:
DATA:
dsn(20) VALUE '/usr/test.dat',
rec(80).
Exemplo:
REFRESH T_BDC.
perform insert_line USING:
'X' 'SAPLMGMM' '0060',
' ' 'BDC_CURSOR' 'RMMG1-MTART',
' ' 'RMMG1-MBRSH' 'A',
' ' 'RMMG1-MTART' 'FERT',
' ' 'BDC_OKCODE' '/00'.
REFRESH T_MSG.
CLEAR T_BDC.
IF U_START = 'X'.
MOVE:
U_NAME TO T_BDC-PROGRAM,
U_VALUE TO T_BDC-DYNPRO.
ELSE.
MOVE:
U_NAME TO T_BDC-FNAM,
U_VALUE TO T_BDC-FVAL.
ENDIF.
APPEND T_BDC.
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.
- Development environment
o ABAP/4 Dictionary
o Screen Painter
o ABAP/4
o Menu Painter
- Runtime environment
o Dialog processor
o ABAP/4 processor
Escolha a opção TOP include, pois desta forma, será criado o include
que será utilizado para a declaração dos dados globais.
ATRIBUTOS DO PROGRAMA
DEFININDO TELAS
Crie as telas necessárias para o seu programa Module Poll a partir da lista de
objetos.
Após você ter digitado o Número da tela, o sistema abre uma nova tela com
dados daquela tela.
Digite uma pequena descrição para a tela.
Escolha a opção normal e especifique o numero da próxima tela ( se
necessário, n momento da execução, o sistema desviará para o número da tela
indicado nesse campo, caso esteja preenchido ).
Nos Flow Logics não são permitidos palavras reservadas ( IF, PERFORM,
WHILE, ETC ) da mesma forma em que são permitidos nos programas. O Flow
Logic, embora se pareça muito com o programa , não tem o mesmo
comportamento. Ele é usado basicamente para ordenar o processamento da tela, e
para isso são criados os MODULES, que tem uma função análoga a do perform.
Para criarmos um module, escreva o seu nome no flow logic no lugar desejado
e efetue um double-click. O sistema criará uma sub-rotina iniciando com MODULE
<NOME> e terminando com ENDMODUILE no include apropriado. Isto pode ser
facilmente observado efetuando uma navegação pelo include.
Se não existirem includes, o sistema poderá criar uma ou poderá incluir a sub-
rotina no programa principal.
Para telas com estrutura similar, você pode copiar uma tela existente e, se
necessário, modificá-la.
Para fazer isso, você utiliza o DEVELOPMENT WORKBENCH posicionando o
cursor na tela que você deseja copiar e escolha a opção COPY.
Quando terminar o processo com sucesso, o sistema mostrará a tela como um
novo sub-objeto do module pool e você poderá editá-lo.
IMPORTANTE: Sempre que você copiar uma tela o flow logic também será
copiado, e o module aparece declarado nos flow logics e somente a chamada desse
module, esteja ciente que as sub-rotinas ( modules ) podem ser compartilhadas por
varias telas, e que a modificação de uma sub-rotina com esse nível de amarração
deve ser feita com muita atenção.
No module PAI, campos da tela são transportados com nomes idênticos para
Work Areas do programa ABAP.
Campos não associados a comandos FIELD são transportados primeiro,
Todos os outros campos são copiados somente quando todos os FIELD estiverem
sido executados.
11 - SAPSCRIPT
11 – SAPSCRIPT
1 . Estrutura
2 . Layout
3 . Programa de povoamento
11 – SAPSCRIPT
• Abertura de um formulário
• Inicialização de um formulário
• Seleção dos dados do formulário
• Impressão dos dados nas janelas do formulário
• Encerramento do formulário
• Fechamento do formulário
Abertura de formulários.
ITCPO-TDIMMED = ‘X’.
ITCPO-TDCOPIES = 2.
ITCPO-TDDEST = ‘IMP1’.
Inicialização de um formulário.
Finalizando um formulário.
Fechando um formulário.
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:
/E FRASE1
&MARA-MATNR& Teste de Frase 1
/E FRASE2
&MARA-MATNR& Teste de Frase 2
Fluxo do SAPSCRIPT:
FORM f_imprime_sapscript.
* Abre o formulário
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'PRINTER'
FORM = 'Z_SAPSCRIT'
LANGUAGE = SY-LANGU.
* inicializa o formulário
CALL FUNCTION 'START_FORM'
EXPORTING
FORM = 'Z_SAPSCRIT'
LANGUAGE = SY-LANGU.
loop at i_tab.
* finaliza o formulário
call function 'END_FORM'.
* fecha o formulário
call function 'CLOSE_FORM'.
ENDFORM.
Também vale a pena chamar a atenção para que esses 3 classes de objetos
estejam em requests separadas no desenvolvimento de um projeto, o que pode
evitar problemas quando algum deles não estiver funcionando propriamente e
necessitar ser reparado...
Utilizando SAPSCRIPT
Header
Basic Setting
11 - SAPSCRIPT
11 - SAPSCRIPT
11 - SAPSCRIPT
11 - SAPSCRIPT
Parágrafo
Tabs
Com os Tabs podemos indicar em qual coluna cada texto vai estar no
parágrafo. E para criá-los, temos que indicar os seguintes campos:
11 - SAPSCRIPT
Text Elements
Esta é a principal etapa, porque utilizaremos tudo que criamos nas etapas
anteriores. Voltemos para Page Windows e clicaremos no botão Text
Elements. Não esqueça de selecionar a Page Window que deseja.
Informações importantes:
11 - SAPSCRIPT
Criação de Bordas
Como tudo em Abap temos que Ativar, não esqueçam de ativar o SapScript,
porque senão, não vai funcionar.
Testando SAPSCRIPT
11 - SAPSCRIPT
O Relatório
Chamando um TEXT_ELEMENT
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'ITEM'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'MAIN'
* IMPORTING
* PENDING_LINES =
EXCEPTIONS
ELEMENT =1
FUNCTION =2
TYPE =3
UNOPENED =4
UNSTARTED =5
WINDOW =6
BAD_PAGEFORMAT_FOR_PRINT = 7
OTHERS = 8.
Fechando o Formulário
CALL FUNCTION 'CLOSE_FORM'
* IMPORTING
* RESULT = I_RESULT
* TABLES
* OTFDATA = I_OTF
EXCEPTIONS
UNOPENED =1
BAD_PAGEFORMAT_FOR_PRINT = 2
SEND_ERROR =3
OTHERS = 4.
11 - SAPSCRIPT
O arquivo deve estar no formato TIFF (extensão .TIF), não comprimido. Essa
figura gerada nestes padrões tem ainda algumas restrições para a sua aplicação.
Em primeiro lugar, o número de píxeis da figura ( a resolução da mesma, em DPI –
dots per inch ) devem ser exatamente o número de píxeis informado na tela de
seleção do programa para se garantir que o logotipo seja exibido no tamanho em
que foi gerado. Alguns programas de editoração gráfica, como o Paint Shop Pro,
possuem recursos para se determinar o tamanho da figura em centímetros e até
mudá-lo (resize), mantendo-se a resolução (número de píxels). Em alguns casos, se
o número de píxeis não coincidir com o informado, a figura pode nem ser gerada no
SAP, dificultando o trabalho do programador.
O número de cores ou tonalidades de cinza também precisam coincidir (esse
parâmentro varia de acordo com a versão do SAP, devendo-se estar atento aos
dados na tela de seleção do programa).
A configuração da impressora no SAP pode alterar o tamanho e o formato do
logotipo é a configuração da impressora no SAP. O SAP utiliza a configuração da
impressora para gerar o formulário e imprimí-lo. Se a configuração não estiver
correta, pode influenciar no logotipo e na criação de linhas e caixas (BOXES).
Para se transportar um logotipo ou texto, deve-se primeiro, associá-lo a uma
Change Request, através do programa standard RSTXTRAN
Introdução
Utilização
O ALV permite :
Usar variantes de exibição standard predefinidas pela SAP
Exportação de dados : Pode-se copiar as listas, por exemplo, para uma planilha
ou grava-las como arquivo local
EVENTO – INITIALIZATION
Neste evento você verificará se existe uma variante definida como default
para o relatório através da função REUSE_ALV_VARIANT_DEFAULT_GET
Variável :
def_variante LIKE disvariant.
Função :
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = ‘A’
CHANGING
cs_variant = def_variante
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = def_variante-variant.
ENDIF.
Neste evento você deverá criar uma rotina para exibir as variantes já
existentes para o relatório em questão.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM f_f4_variant.
Variáveis :
variant_exit(01) TYPE c,
variante LIKE disvariant,
Função :
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variante
i_save = ‘A’
IMPORTING
e_exit = variant_exit
es_variant = def_variante
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF variant_exit = space.
p_vari = def_variante-variant.
ENDIF.
ENDIF.
EVENTO – AT SELECTION-SCREEN
Neste evento você irá tratar a variante informada, ou seja, verificar a sua
existência, pois o usuário pode ter digitado um nome qualquer ao invés de utilizar o
F4.
AT SELECTION-SCREEN.
PERFORM f_variante.
Executar a função
variante = def_variante.
ELSE.
CLEAR variante.
variante-report = v_repid.
ENDIF.
*Grupos de tipo
TYPE-POOLS: slis.
TYPE-POOLS: kkblo.
1.2. Workareas
IF SY-SUBRC = 0.
MOVE 'F_CABECALHO' TO w_event-form.
APPEND w_event TO t_event.
ENDIF.
H – Header
S – Selection
A – Action
Campo Descrição
Parâmetros Gerais
no_colhead Sem Títulos (Cabeçalho)
no_hotspot Títulos sem Hotspot
no_vline Colunas separadas por espaços
Zebra Listrado (Uma linha clara outra escura)
cell_merge Não suprimir a replicação de campo
Edit Edição somente para o grid todo
edit_mode Edição somente para o grid todo
numc_sum Total para campos numéricos
no_input Somente exibição de campos
f2code
Reprep
no_keyfix Não fixar coluna chave
expand_all Expandir todas as posições
no_author Nenhuma verificação padrão da autoridade
PF-status
def_status Status Default
item_text
Opções de Display
colwidth_optimize
no_min_linesize Tamanho da linha = tamanho da lista
min_linesize Default 80
max_linesize Default 250
Window_titlebar
no_uline_hs
Exceções
lights_fieldname Nome do campo para exceção
lights_tabname Nome da tabela para exceção
lights_rollname
lights_condense
Somatórios
no_sumchoice Sem escolha para Somar para cima
no_totalline Sem Total Linha
no_subchoice
no_subtotals Sem Sub-Total
no_unit_splitting
totals_before_items Mostrar total antes dos itens
totals_only Mostrar somente os totais
totals_text Texto para a 1a. coluna na linha de total
subtotals_text Texto para a 1a. coluna na linha de Sub-total
Interações
box_fieldname Nome do Campo para Checkbox
Detalhes
Tela
detail_popup Mostrar detalhes em nova janela
detail_initial_lines Mostrar somente as linhas iniciais
detail_titlebar Título para tela de detalhes
Mostar Variantes
header_text Texto para o botão
default_item
Cores
info_fieldname
Coltab_fieldname Nome do campo que conterá as cores das colunas
Outros
list_append Sem chamada de tela
xifunckey Extended interaction(SAPQuery)
xidirect Extended INTeraction(SAPQuery)
dtc_layout Configuração de layout para Tabstrip
Coluna Chave
Box_fieldn
ame
Tela de Detalhe
Titulo
Detalhe
Popup do detalhe
Neste FORM você deve informar os campos pelos quais a lista deve ser
ordenada inicialmente, bem como se deve-se gerar sub-total ou total para esta
quebra.
Campo Centro
t_sort-spos = '1'.
t_sort-fieldname = 'WERKS'.
t_sort-tabname = 'T_RELAT'.
t_sort-up = 'X'.
t_sort-subtot = 'X'.
APPEND t_sort.
CLEAR t_sort.
Segue abaixo os campos que podem ser formatados para cada campo de
ordenação.
Campo Descrição
Spos Seqüência de Ordenação
fieldname Nome do campo
Tabname Nome da tabela a qual pertence o campo
Up Ordenação Menor para Maior
Down Ordenação Maior para Menor
Group
Subtot Gerar Sub Total
Comp
Expa
Obligatory
3. Exibir Relatório
v_repid = sy-repid.
CALL FUNCTION 'K_KKB_SAVE_MODE_GET'
IMPORTING
e_save = v_save.
I_DEFAULT = 'X'
I_SAVE = v_save
IS_VARIANT = variante
IT_EVENTS = t_event[]
TABLES
t_outtab = t_relat
EXCEPTIONS
PROGRAM_ERROR =1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP.
ENDIF.
Para mudar a cor de uma coluna, você deve definir na sua tabela interna final
(que será utilizada na função de exibição do relatório) o campo COLINFO (ou o
nome que você desejar) que seja do tipo kkblo_t_specialcol.
Este campo será uma tabela interna onde você definirá para cada linha do
relatório a cor de cada coluna. Isso deve ser feito no momento em que você estiver
gerando a tabela final para a impressão.
CLEAR colinfo.
IF t_relat-atrexp < 0.
colinfo-color-col = '3'. " Amarelo
ELSEIF t_relat-atrexp = 0.
colinfo-color-col = '5'. " Verde
ELSE.
colinfo-color-col = '6'. " Vermelho
ENDIF.
12 – Introdução ALV
Para mudar a cor da linha toda e não somente de uma coluna você deve
seguir o mesmo procedimento da coluna porém fazer para todas as colunas do
relatório.
1a. Coluna
colinfo-fieldname = 'CAMPO1'.
APPEND colinfo TO t_relat-colinfo.
2a. Coluna
colinfo-fieldname = 'CAMPO2'.
APPEND colinfo TO t_relat-colinfo.
3a. Coluna
colinfo-fieldname = 'CAMPO3.
APPEND colinfo TO t_relat-colinfo.
4a. Coluna
colinfo-fieldname = 'CAMPO4.
APPEND colinfo TO t_relat-colinfo.
5a. Coluna
12 – Introdução ALV
Para inserir novos botões na tela, você deve copiar o Status Gui Standard
STANDARD_FULLSCREEN para outro a ser utilizado no seu relatório. Após a cópia
você deve retirar botões que não serão utilizados e inserir os seus novos botões :
Botões Inseridos
CASE p_ucomm.
* Modificar Documento
WHEN 'ZVA02'.
CHECK p_selfield-fieldname = 'VBELN'.
SET PARAMETER ID 'AUN' FIELD p_selfield-value.
CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.
* Exibir Documento
WHEN 'ZVA03'.
CHECK p_selfield-fieldname = 'VBELN'.
SET PARAMETER ID 'AUN' FIELD p_selfield-value.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
* Exibir Remessa
WHEN 'ZVL01'.
CHECK p_selfield-fieldname = 'VBELN'.
READ TABLE t_relat INDEX p_selfield-tabindex.
IF sy-subrc EQ 0.
SET PARAMETER ID 'AUF' FIELD t_relat-vbeln.
SET PARAMETER ID 'VST' FIELD t_relat-vstel.
SET PARAMETER ID 'LEDAT' FIELD t_relat-mbdat.
CALL TRANSACTION 'VL01N' AND SKIP FIRST SCREEN.
ENDIF.
WHEN OTHERS.
ENDCASE.
BALVST02_GRID – Programa teste visor de listas ABAP: lista simples modelo vôo
BALVST03_GRID - Programa teste visor de listas ABAP: lista simples modelo vôo
BALVHT01 - Programa de teste ALV: lista seqüencial hierárquica modelo de vôo
2. Executar (F8)
CRIÇÃO DE FIELD-EXIT
• Nome do Campo
• Elemento de dados
• Nome do Programa
• Numero da Tela
14 – FIELD-EXITS
14 – FIELD-EXITS
14 – FIELD-EXITS
INFORMAÇÕES