Escolar Documentos
Profissional Documentos
Cultura Documentos
Sapscript
1
ABAP Training
2
ABAP Training
3
ABAP Training
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).
2. Nessa hora entra a segunda dificuldade de se trabalhar com logotipos em SAPscript.
Ao se executar o formulário, em uma visualização na tela, o usuário nunca irá
conseguir enxergar o logotipo. Esse somente irá aparecer na impressão em papel
(ainda que impressão do layout do formulário, e não seu conteúdo final - Utilitários -
> Imprimir layout). As novas versões do SAP já corrigiram esse problema.
1 . Estrutura
2 . Layout
3 . Programa de povoamento
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...
4
ABAP Training
- 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
5
ABAP Training
• Abertura de formulários.
6
ABAP Training
Alguns dos campos mais importantes e que normalmente são utilizados na
estrutura ITCPO são:
ITCPO-TDIMMED = ‘X’.
ITCPO-TDCOPIES = 2.
ITCPO-TDDEST = ‘IMP1’.
7
ABAP Training
• Inicialização de um formulário.
8
ABAP Training
• Finalizando um formulário.
• Fechando um formulário.
9
ABAP Training
Seleção dos dados
10
ABAP Training
• Impressão dos dados nas janelas
A impressão dos dados nas janelas na maioria das vezes é feita simultaneamente
com a seleção dos dados, ou seja, a medida que os dados são selecionados, são enviados
imediatamente para o formulário.
O comando para impressão dos dados é a seguinte função:
Neste ponto fica evidente a diferenciação entre os tipos de janela MAIN e demais
janelas.
Para as janelas do tipo MAIN, cada comando de escrita (write_form) significa
uma nova linha no formulário e o valor a ser impresso é o valor que o campo armazena
no momento do comando de impressão.
Por exemplo, digamos que o campo MARA-MATNR tenha o valor ‘1234’ e que
um comando de impressão seja dado para a janela MAIN que irá imprimir este campo.
Logo em seguida uma nova seleção da tabela MARA é feita e o campo MATNR agora
vale ‘5678’. Se uma nova impressão na janela MAIN for executada o resultado será o
seguinte:
1234
5678
Já as janelas que não forem do tipo MAIN imprimem os dados uma única vez,
no final da impressão do formulário ou na quebra de página, com os valores
armazenados nos campos no momento do encerramento ou no momento da quebra, e
11
ABAP Training
não no momento da escrita (write_form), ou seja, se no exemplo anterior fosse utilizada
uma janela não-main, o resultado final seria somente 5678.
Na realidade, a utilização de um comando WRITE_FORM numa janela não-main
é utilizada para a escolha de qual elemento de texto será utilizado para a impressão dos
dados. Exemplo:
Uma janela HEADER não-main contém dois elementos de texto chamados
FRASE1 e FRASE2 da seguinte forma:
/E FRASE1
&MARA-MATNR& Teste de Frase 1
/E FRASE2
&MARA-MATNR& Teste de Frase 2
estará sendo indicado ao programa que, ao se encerrar o formulário, deve ser impresso
o elemento de texto FRASE1 para a janela HEADER (somente um elemento de texto é
utilizado para cada janela não-main).
No caso do exemplo, se o campo MATNR for igual a ‘1234’ no encerramento do
formulário, seria impressa a seguinte frase:
1234 Teste de Frase 1
O elemento de texto a ser impresso será sempre o último a ser selecionado antes
do final ou da quebra de página.
Se nenhum for selecionado, ao encerrar o formulário ou mudar de página serão
impressos os dados que não pertençam a nenhum elemento de texto. Portanto no caso
de um campo que deva ser impresso sempre em todas as páginas, como numero de
página por exemplo, basta colocá-lo fora de qualquer elemento de texto e não
selecionar nenhum elemento de texto para a janela que, automaticamente, este dado
será impresso em todas as páginas.
12
ABAP Training
Fluxo do SAPSCRIPT:
Tendo visto os comandos acima, um fluxo simplificado de um programa para a impressão de
um SAPSCRIPT seria:
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.
13
ABAP Training
O formulário
14
ABAP Training
2. Parágrafos - são elementos que podem ser criados pelo usuário e apresentam
informações dos textos de uma determinada janela. Nesses parágrafos são
determinados tipos de fontes, tabulações, negrito ou sublinhado, etc...
Para criar um parágrafo novo, utilizar o caminho do menu Processar -> Create
Element, lembrando que em um formulário standard, somente se pode alterar o
layout no idioma original.
15
ABAP Training
16
ABAP Training
3. Caracter String - são informações semelhantes às do parágrafo, no que diz respeito a
formatação de textos, no entanto podem ser aplicados a trechos de textos e não
necessariamente a linhas inteiras do formulário.
<B>Texto</>
Texto
17
ABAP Training
4. Janelas - as janelas são a base da construção do layout. As janelas podem ser criadas
sem limites e tem por finalidade dividir espacialmente as regiões de um formulário
para operações independentes.
MAIN - janelas do tipo MAIN são as mais importantes do relatório (janela pela
qual o formulário se guia). Somente é permitido um tipo de janela MAIN por
formulário, e é a única janela obrigatória em uma página. Pode-se criar mais de uma
janela MAIN por página, no entanto essas janelas, na verdade, só são divididas
fisicamente, uma vez que seus elementos e processamento obedecem aos mesmos
comandos, e não podem ter nomes diferentes. A passagem de uma janela MAIN para
outra pode ser automática ou forçada pelo usuário. Quando o espaço físico de uma
janela MAIN está tomado e necessita-se de mais dados na mesma, o formulário
automaticamente passa à próxima janela MAIN do formulário. É através desse
princípio que uma relatório ganha número de páginas automaticamente quando da
18
ABAP Training
execução de um relatório desse tipo, conforme os dados são preenchidos. Para forçar a
passagem de uma janela MAIN para outra, o usuário poderá utilizar o comando:
/: NEXT-WINDOW
CONST - são janelas que não merecem muita preocupação de processamento por
parte do formulário, uma vez que seus dados devem ser mantidos os mesmos desde
seu primeiro preenchimento até o fechamento do formulário. Geralmente nesse tipo de
janela são incluído objetos e textos que permanecem os mesmos durante todo o
relatório, independente do número de páginas, como logos e rodapés.
19
ABAP Training
5. Páginas - as páginas são os elementos responsáveis pelo agrupamento das janelas
durante certos momentos do relatório. Geralmente só são definidos duas páginas,
que acabam em processo reflexivo, por formulário.
20
ABAP Training
Após a primeira página, seria chamada a segunda, com um layout diferente (sem o
logotipo). A partir dessa, todas apresentariam o mesmo tipo de layout (com dados do
relatório aproveitando a página inteira).
6. Page Windows
21
ABAP Training
7. Text Elements
22
ABAP Training
IF..ELSE..ENDIF
CASE..WHEN
DEFINE declaração de variáveis dentro da janela, com
atribuição de valor
PERFORM..USING..CHANGING (ver documentação própria nesse material)
BOX..FRAME
INCLUDE
23
ABAP Training
Manutenção de formulários
24
ABAP Training
do formulário original. Ao mesmo tempo que uma alteração desse original, implica na
imediata alteração de todos os seus “filhos”.
Uma vez criado um formulário (conforme descrito acima), poderá ser copiado
sobre ele, as informações de um outro formulário do mesmo client, através do menu
Layout -> Copy from, já de dentro da primeira tela do formulário criado (Header).
Atenção que essa cópia é fiel ao formulário copiado, e não poupa nenhuma
informação que já existisse no formulário que recebe a cópia.
25
ABAP Training
3. Copiar um formulário de outro cliente
Essa opção irá abrir uma outra janela que recebe basicamente 3 informações:
26
ABAP Training
Os outros dois campos de check box geralmente não são alterados pois tratam de
informações como cópia do formulário somente no idioma original e exibição ou não de
um log de erros ao final da execução da cópia.
Uma vez entrados os parâmetros, deve-se apertar o botão executar e obter uma
cópia com sucesso em todos os idiomas existentes do formulário.
O cliente de origem do formulário, quando for cópia de forms standards, deve
ser mantido 000, uma vez que o repositório dos formulários originais do SAP
encontram-se todos no 000, e podem ser lidos de todos os outros.
27
ABAP Training
Utilizar logotipos em formulários SAPscripts, não é das tarefas mais simples que
se possa ter. Teoricamente falando, o processo é bastante simples e consiste em gerar no
sistema um objeto no formato hexadecimal, que possa ser interpretado pelo SAPscript,
originando a inclusão de uma imagem. No entanto, devido ás limitações expostas no
começo deste documento, isso pode levar um certo tempo até reproduzir o resultado
desejado.
Para gerarmos o objeto no client desejado (lembre que esse objeto não pode ser
transportado…), devemos executar o programa standard RSTXLDMC, com um arquivo
no formato *.TIF.
28
ABAP Training
• 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
29
ABAP Training
Na maioria das vezes o trabalho a ser realizado com Sapscripts é alterar os originais do
SAP, pois estes raramente atendem as necessidades do cliente.
O procedimento para alteração depende muito das características do programa de
povoamento standard e das características das funções do SAP que irão utilizar tal sapscript.
No entanto, alguns procedimentos são padrões, e outros são utilizados na grande maioria das
alterações.
1) Fazer uma cópia do programa standard e dos includes (se existirem) que necessitam de
alteração
2) Fazer uma cópia do layoutset standard
3) NÃO DELETAR janelas, elementos de textos, etc. na cópia do layoutset. Mesmo que
alguns (ou todos) os dados e janelas do standard não sejam utilizados, o programa de
povoamento continuará tentando executar escritas em janelas e elementos de dados
específicos, já que é uma cópia do standard. Os novos dados e janelas devem ser apenas
adicionados!
4) Encontrar as posições ideais para alterações no programa de povoamento. Quando os
novos dados devem ser impressos na MAIN, procurar por comandos WRITE_FORM
dentro do programa e colocar as alterações o mais próximo possível do WRITE_FORM
correto. Se devem ser impressos em outras janelas, procurar pelo comando
CLOSE_FORM/END_FORM e colocar as alterações imediatamente antes destes comandos
(sempre que possível)
5) Colocar todas as alterações juntas sempre que possível, identificando visivelmente, através
de comentários, o bloco de alterações. Isso facilita a manutenção e visualização do código,
além de facilitar a busca por possíveis erros, visto que, na sua grande maioria, os
programas standard da SAP são bastante complicados.
*--------------------------------------------------------------------
*
***write texts to TEXTS window
*
*------------------------ --------------------------------------------
*
************************** ALTERAÇÃO
********************************
*--------------------------------------------------- ----------------
*
* Elimina mensagem ONU.... caso ela exista
*-------------------------------------------------------------------
*
read table wk_header_msg with key message(3) = 'ONU'.
v_msg_onu = wk_header_msg -seqnum.
delete wk_header_msg
where message(3) = 'ONU'.
delete wk_refer_msg
where seqnum = v_msg_onu.
30
ABAP Training
*********************************************************************
*
31
ABAP Training
Linhas e Boxes:
Para a criação de linhas e Boxes nos formulários, utiliza-se o comando Box.
A sintaxe deste comando é a seguinte:
/: BOX xpos ypos WIDTH largura unidade(CH, cm) HEIGHT altura unidade
FRAME espessura unidade INTENSITY intensidade (0 a 100%)
No entanto, como podemos observar, torna-se muito difícil a criação de boxes e linhas
dinâmicos uma vez que eles dependem da posição na janela na qual estão sendo criados.
Apesar da apresentação ser a melhor, utilizando-se boxes dinâmicos, a complexidade para seu
desenvolvimento na maioria dos casos não justifica sua aplicação.
Primeiro, cria-se um parágrafo especial, cujo espaçamento entre linhas seja o menor possível:
UL Linha de separação
Atributos standard
Espacej.linhas 0.05 LN
Margem esquerda 1.15 MM
Alinhamento Alinh.esq.
UL &ULINE(73)&
AS <B>| Item,,|,,Código,,|,,Quantidade,,| UN,,|,,Preço Unitário,,|,, Preço
Total |</>
AS <B>| ,,|,, ,,|,, ,,| ,,|,, c/ ICMS ,,|,,
C/Impostos |</>
AS <B>| ,,|,, ,,|,, ,,| ,,|,, (R$) ,,|,,
(R$) |</>
UL &ULINE(73)&
32
ABAP Training
Tabuladores:
Um recurso extremamente importante e diversas vezes esquecidos pelos programadores são os
tabuladores.
Uma das principais queixas dos programadores em relação ao Sapscript é que, quando se
altera a posição de um campo na impressão, acaba-se alterando as posições dos demais,
fazendo com que o trabalho do programador seja exaustivo.
A alternativa para isso não ocorrer é o uso dos tabuladores, definidos para cada parágrafo
criado, conforme o exemplo abaixo:
IL Linha de item
Atributos standard
Espacej.linhas 1.00 LN
Alinhamento Alinh.esq.
Tabuladores
6.00 CH Alinh.à esquerda
25.00 CH Alinh.à esquerda
54.00 CH Alinh.à esquerda
73.00 CH Alinh.à esquerda
IL &EKPO-EBELP&,,&EKPO-EMATN&,,&EKPO-TXZ01&
Por fim, há uma outra ferramenta que pode ajudar no posicionamento dos textos,
principalmente para impressoras matriciais. Existem réguas especiais que possuem as escalas
mais comuns de caracteres. Um exemplo é a régua Trident modelo FC-1.
33
ABAP Training
Exemplos
• Sapscript
---------------------------------------------------------------------
-----------
Formulário YBRV_CREDIT_MEMO
---------------------------------------------------------------------
-----------
Mandante 650
Idioma P
Original lang. P Idioma Original de Criação
Relevant for transl. Yes
Status Active
Standard attributes
First page FIRST Primeira página a ser
utilizada
Default paragr. MA Parágrafo default para os
textos
Tab stop 1,00 CM
Page format DINA4 Tipo de Papel
Orientation Landscape
Lines/inch 6,00 Espaçamento entre as linhas
Characters/inch 12,00 Espaçamento entre os
caracteres
Font attributes
Font family COURIER Fonte padrão do formulário
Font size 10,0 Point Tamanho da fonte padrão
Bold No
Italic No
Underlined No
34
ABAP Training
-------------------- -------------------------------------------------
-----------
Characters Attributes Definições dos Characters
Strings
---------------------------------------------------------------------
-----------
H1 Header 1
St andard attributes
Marker No
Font attributes
Font family COURIER
Font size 8,0 Point
Bold Yes
H2 Header 2
Stand ard attributes
Marker No
Font attributes
Font family COURIER
Font size 10,0 Point
Bold Yes
H3 Header 3
Standar d attributes
Marker No
Font attributes
Font family COURIER
Font size 6,0 Point
Bold Yes
---------------------------------------------- -----------------------
-----------
Paragraphs Attributes Definições dos tipos de
parágrafos
---------------------------------------------------------------------
-----------
H1 Paragrafo 1 p/ o header
Standard attrib utes
Line spacing 1,00 LN
Alignment Left -aligned
Tabs Tabulações para o
parágrafo
16,00 CH Left -aligned
66,00 CH Left-aligned
80,00 CH Left -aligned
H2 Paragrafo 2 p/ header
35
ABAP Training
Standard attributes
Line spacing 1,00 LN
Alignment Left -aligned
Tabs
56,00 CH Left -aligned
100,00 CH Left -aligned
117,00 CH Left -aligned
MA Paragrafo p/ Main
Standard attributes
Line spacing 1,00 LN
Alignment Left -aligned
---------------------------------------------------------------------
-----------
Windows Attributes Janelas definidas para o
formulário
------------------------------------------------------------- --------
-----------
---------------------------------------------------------------------
-----------
Pages Attributes Paginas do formulário com suas
respectivas janelas
---------------------------------------------------------------------
-----------
36
ABAP Training
Window width 132,00 CH
Window height 27,00 LN
HEADER Left margin 2,00 CH
Upper margin 1,00 LN
Window width 132,00 CH
Window height 8,00 LN
TEXT Left margin 2,00 CH
Upper margin 36,00 LN
Window width 132,0 0 CH
Window height 3,00 LN
TOTAL Left margin 2,00 CH
Upper margin 39,00 LN
Window wi dth 132,00 CH
Window height 7,00 LN
---------------------------------------------------------------------
-----------
Text elements for following windows:
----------------------------------------------- ----------------------
-----------
37
ABAP Training
<H1>Zona:</> &ybrvs_nota -zona(6)& <H1>Doc. Entr</>
&ybrvs_nota -doc_entr(19)& <H1>N/N.F.F.:</> &ybrvs_nota -
doc_entr(11)&
<H1>de </> &ybrvs_nota -data&
Campo de
tabela/estrutura
/E DADOS
/: BOX XPOS 0 CH YPOS 0 CH WIDTH 132 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 15 CH YPOS 0 CH WIDTH 117 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 18 CH YPOS 0 CH WIDTH 114 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 21 CH YPOS 0 CH WIDTH 111 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 36 CH YPOS 0 CH WIDTH 96 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 67 CH YPOS 0 CH WIDTH 65 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 69 CH YPOS 0 CH WIDTH 63 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 83 CH YPOS 0 CH WIDTH 49 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 97 CH YPOS 0 CH WIDTH 35 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 111 CH YPOS 0 CH WIDTH 21 CH HEIGHT 27 LN FRAME 10 TW
/: BOX XPOS 116 CH YPOS 0 CH WIDTH 16 CH HEIGHT 27 LN FRAME 10 TW
MA &ybrvs_nota -produto(15)&
&ybrvs_nota -unidade(3)&&ybrvs_nota -quant(15)&&ybrvs_nota -
nome(31)&
&ybrvs_nota -preco_un(14)&&ybrvs_nota -val_merc(14)&
&ybrvs_nota -val_desc(12)&&ybrvs_nota -porc_ipi(5)&
&ybrvs_nota -val_ipi(15)&
/E HEADER
* <H1> Código Produto EMB UN. Quantidade Nome
do
Produto RN Preço Unitário Valor Mercadoria Valor
Desconto %IPI Valor IPI</>
* &uline(132)&
Parágrafo standard
38
ABAP Training
TOTAL
39
ABAP Training
Exemplo:
40
ABAP Training
********************************************************************************** QAVE, "Processamento de controle: decisão de utili
* * QALS, "Registro do lote de controle
* ******************************************** * JEST, "Status individual por objeto
* * Confidencial e Proprietário * * VIQMEL, "Nota - cabeçalho
* * Copyright 2001, Accenture * * VIQMSM, "Nota - medidas
* * Todos os direitos reservados * * ELBP, "Critério principal da avaliação de forneced
* ******************************************** * T147C, "Definição dos subcritérios para a avaliação
* * EKPO, "Item do documento de compras
* Nome do Shell: YTRP0010 Versão do Shell: v1.01 * T001W, "Centros/filiais
* * ZSAPSCRIP2, "Estrutura auxiliar de Relatório de Avaliaçã
********************************************************************************** ITCPO, "SAPscript output interface
* Nome do Programa : ZRQM001 * T247, "Denominações e denominação breve dos meses
* Título do Programa : Shell - ABAP/4 List Report * KNA1, "Mestre de clientes (parte geral)
* Programador : Antonio Celso Hunnicutt Cortada * T005T. "Denominação dos países
* Data : 05/02/2001 *
* Última atualização : 05/02/2001 * ************************************************************************
* * * Dados: *
* Descrição : Criar uma transação ON-Line que sera chamada do menu* * Constantes (C_...) *
* SAP, para definir o escopo dos calculos de avaliacao * * Variaveis (V_...) *
* de fornecedores. * * Tabelas Internas (T_...) *
* Esta transacao devera fazer a demosntracao dos resul * ************************************************************************
* tados dos calculos na tela, e permitir a impressao *
* deste relatorio ou a geracao dos dados para ser lidos * *- Variaveis ----------------------------------------------------------*
* por uma planilha excel. *
* * DATA: C_MILHAO(7) TYPE N VALUE '1000000', "Valor de calc de Nota
* * C_LINHA TYPE P DECIMALS 2, "Cte p/ N. linhas Quebra Pág
* Include : ZZIHEADR * C_LINHA1 TYPE P DECIMALS 2, "Cte p/ N. linhas Quebra Pág
*----------------------------------------------------------------------------------------------* C_SIM(3) TYPE C VALUE 'SIM', "SIM
* Lista de Modificações: * C_NAO(3) TYPE C VALUE 'NAO', "NAO
* Data Autor Corr. # Descrição * C_YES(3) TYPE C VALUE 'YES', "SIM
* 05/02/2001 Desenvolvimento inicial do prg * C_NO(2) TYPE C VALUE 'NO', "NAO
************************************************************************ C_PPM(8) TYPE C VALUE 'OBJ_PPM',
REPORT ZRQM001 C_LOTE(8) TYPE C VALUE 'OBJ_LOTE',
NO STANDARD PAGE HEADING "Não mostra o cabeçalho padrão C_NAS(3) TYPE C VALUE 'NAS',
SAP C_MT_101(6) TYPE C VALUE 'MT-101',
LINE-SIZE 170 "Largura do report de nnn caracteres C_DEZ(03) TYPE C VALUE '010',
LINE-COUNT 58 "Comprimento do report de nn caracteres C_Z(03) TYPE C VALUE 'Z01',
MESSAGE-ID ZM. "Classe de mensagens é ZM C_ERRO(10) TYPE C VALUE ' ERRO ',
C_P TYPE C VALUE 'P', "Idioma Português
RESERVE 8 LINES. "Pelo menos n linhas serão impressas na última C_ESP TYPE C VALUE 'S', "idioma espanhol
página C_ARG(2) TYPE C VALUE 'AR', "Argentina
C_BR(2) TYPE C VALUE 'BR', "Brasil
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>> C_SI(2) TYPE C VALUE 'SÍ', "SÍ
>>>>>>>>>>>>>>>>" C_ENG TYPE C VALUE 'E'. "Idioma inglês
" SESSÃO DE DECLARAÇÃO DE DADOS "
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>> DATA: C_STAT(5) TYPE C VALUE 'I0224',
>>>>>>>>>>>>>>>>" C_KZART(1) TYPE C VALUE 'L',
************************************************************************ C_HKRIT(02) TYPE C VALUE '04'.
* Includes *
************************************************************************ DATA: V_TIME TYPE P DECIMALS 2, "Var.P/ armazenar
INCLUDE: No.Linhas(cm)
ZZIHEADR. "Cabeçalho padrão de report V_ATFLV TYPE P DECIMALS 2,
V_VAL_PPM(7) TYPE C,
************************************************************************ V_VAL_LOTE(7) TYPE C,
* Tabelas * V_VAL_NAS(3) TYPE C,
************************************************************************ V_FORNEC_50(50) TYPE C,
TABLES: MARA, "Mestre do material: dados gerais V_IDIOMA LIKE LFA1-SPRAS. "idioma do fornecedor.
MAKT, "Textos breves de material
CABN, "Característica * variaveis auxiliares.
AUSP, "Valores das modalidades das características DATA:
LFA1, "Mestre de fornecedores (parte geral) V_PRIM_VEZ TYPE C VALUE 'T',
41
ABAP Training
V_ULTIMO_DIA LIKE SY-DATUM, V_CENTRO_PPM_OBJ LIKE T706U-BETFA,
V_PRIMEIRO_DIA LIKE SY-DATUM, V_CENTRO_LOT LIKE T706U-BETFA,
V_DIA_CALCULO LIKE SY-DATUM, V_CENTRO_LOT_OBJ LIKE T706U-BETFA.
V_MULTIPLICADOR(5) TYPE N,
V_PRIMEIRO_MES LIKE SY-DATUM,
V_DT_INICIO LIKE SY-DATUM,
V_DT_FIM LIKE SY-DATUM, * variaveis de trabalho.
V_DTI_ANALISE LIKE SY-DATUM, DATA: V_WERKS LIKE QALS-WERK,
V_QTDE(10) TYPE C, V_LIFNR LIKE QALS-LIFNR,
V_QTDE_SAP TYPE I, V_MATNR LIKE QALS-MATNR,
V_QTDE_SAP7 TYPE I. V_TIPO_NF LIKE QALS-ART,
V_QKENNZAHL LIKE QAVE-QKENNZAHL,
V_LINHAS(6) TYPE N.
* variaveis numericas. * variáveis de controle de impressão em branco
DATA: V_SUM_PPM89_M LIKE T706U-BETFA, DATA: V_CHECK_NFL_M TYPE C, " flag para NFL = %LOT =
V_SUM_PPM89_AC LIKE T706U-BETFA, BRANCO
V_SUM_NFL_M LIKE T706U-BETFA, V_CHECK_PPM_M TYPE C, " flag para PPM = NPR = BRANCO
V_SUM_NFL_AC LIKE T706U-BETFA, V_CHECK_NAS_M TYPE C, " flag para NAS = BRANCO
V_SUM_LOT_M LIKE T706U-BETFA, V_CHECK_NQF_M TYPE C, " flag para NQF = BRANCO
V_SUM_LOT_AC LIKE T706U-BETFA, V_CHECK_NFL_AC TYPE C, " flag para NFL = %LOT = BRANCO
V_NUM_NFL_M LIKE T706U-BETFA, V_CHECK_PPM_AC TYPE C, " flag para PPM = NPR = BRANCO
V_NUM_NFL_AC LIKE T706U-BETFA, V_CHECK_NAS_AC TYPE C, " flag para NAS = BRANCO
V_SUM_NPT_M LIKE T706U-BETFA, V_CHECK_NQF_AC TYPE C. " flag para NQF = BRANCO
V_SUM_NPT_AC LIKE T706U-BETFA,
V_TOT_NFL_M LIKE T706U-BETFA,
V_TOT_NFL_AC LIKE T706U-BETFA, *- Tabela Interna -----------------------------------------------------*
V_TOT_LOT_M LIKE T706U-BETFA,
V_TOT_LOT_AC LIKE T706U-BETFA, * Tabela interna para armazenar os valores a serem utilizados no cálculo
V_TOT_PPM_M LIKE T706U-BETFA, * das notas para os caso: Acumulado no Centro e Acumulado na MTB
V_TOT_PPM_AC LIKE T706U-BETFA,
V_TOT_NPR_M LIKE T706U-BETFA, DATA: BEGIN OF I_ACUM OCCURS 0,
V_TOT_NPR_AC LIKE T706U-BETFA, CENTRO LIKE QALS-WERK,
V_TOT_NPT_M LIKE T706U-BETFA, LIFNR LIKE QALS-LIFNR,
V_TOT_NPT_AC LIKE T706U-BETFA, SUM_PPM01_M LIKE PC207-BETPE,
V_TOT_NAS_M LIKE T706U-BETFA, SUM_PPM01_AC LIKE PC207-BETPE,
V_TOT_NCQ_M LIKE T706U-BETFA, SUM_ATRAS_M LIKE T706U-BETFA,
V_TOT_NCQ_AC LIKE T706U-BETFA, SUM_ATRAS_AC LIKE T706U-BETFA,
V_SUM_PPM01_M LIKE T706U-BETFA, SUM_EMDIA_M LIKE T706U-BETFA,
V_SUM_PPM01_AC LIKE PC207-BETPE, SUM_EMDIA_AC LIKE T706U-BETFA,
V_SUM_ATRAS_M LIKE T706U-BETFA, SUM_PPM89_M LIKE T706U-BETFA,
V_SUM_ATRAS_AC LIKE T706U-BETFA, SUM_PPM89_AC LIKE T706U-BETFA,
V_SUM_EMDIA_M LIKE T706U-BETFA, SUM_NFL_M LIKE T706U-BETFA,
V_SUM_EMDIA_AC LIKE T706U-BETFA, SUM_NFL_AC LIKE T706U-BETFA,
V_TOT_NOTAS_M LIKE T706U-BETFA, SUM_LOT_M LIKE T706U-BETFA,
V_TOT_NOTAS_AC LIKE T706U-BETFA, SUM_LOT_AC LIKE T706U-BETFA,
V_FATOR_NFL(3) TYPE C, SUM_NPT_M LIKE T706U-BETFA,
V_FATOR_NPR(3) TYPE C, SUM_NPT_AC LIKE T706U-BETFA,
V_FATOR_NCQ(3) TYPE C, NUM_NPT_M LIKE T706U-BETFA,
V_TOT_POND(5) TYPE I, NUM_NPT_AC LIKE T706U-BETFA,
V_TOT_NQF_M LIKE T706U-BETFA, NUM_NFL_M LIKE T706U-BETFA,
V_TOT_NQF_AC LIKE T706U-BETFA. NUM_NFL_AC LIKE T706U-BETFA.
DATA: END OF I_ACUM.
* variaveis de total por centro.
DATA: DATA: BEGIN OF I_ACUM_CENTRO OCCURS 0,
V_CENTRO_NFL LIKE T706U-BETFA, CENTRO LIKE QALS-WERK,
V_CENTRO_NPR LIKE T706U-BETFA, SUM_PPM01 LIKE T706U-BETFA,
V_CENTRO_NCQ LIKE T706U-BETFA, SUM_ATRAS LIKE T706U-BETFA,
V_CENTRO_NQF LIKE T706U-BETFA, SUM_EMDIA LIKE T706U-BETFA,
V_CENTRO_NPT LIKE T706U-BETFA, SUM_PPM89 LIKE T706U-BETFA,
V_CENTRO_NAS LIKE T706U-BETFA, SUM_NFL LIKE T706U-BETFA,
V_CENTRO_PPM LIKE T706U-BETFA, SUM_LOT LIKE T706U-BETFA,
42
ABAP Training
SUM_NPT LIKE T706U-BETFA, WERKS LIKE QALS-WERK, "centro
NUM_NPT LIKE T706U-BETFA, NFL(5) TYPE C,
NUM_NFL LIKE T706U-BETFA. NPR(5) TYPE C,
DATA: END OF I_ACUM_CENTRO. NCQ(5) TYPE C,
NQF(5) TYPE C,
NPT(5) TYPE C,
DATA: BEGIN OF I_QAVE OCCURS 0, PPM(7) TYPE C,
PRUEFLOS LIKE QAVE-PRUEFLOS, "Nº lote de controle. LOT(7) TYPE C.
KZART LIKE QAVE-KZART, "Código: lote de controle, lote DATA: END OF I_TOT_CENTRO.
QKENNZAHL LIKE QAVE-QKENNZAHL, "Índice de qualidade
VBEWERTUNG LIKE QAVE-VBEWERTUNG, "Avaliação do code DATA: BEGIN OF I_ACUM_MTB,
VDATUM LIKE QAVE-VDATUM. "Data do code para a dec.de NFL_AC(5) TYPE C,
util. NPR_AC(5) TYPE C,
DATA: END OF I_QAVE. NCQ_AC(5) TYPE C,
NQF_AC(5) TYPE C,
DATA: BEGIN OF I_QALS OCCURS 0, NPT_AC(5) TYPE C,
PRUEFLOS LIKE QALS-PRUEFLOS, "Nº lote de controle PPM_AC(7) TYPE C,
WERKS LIKE QALS-WERK, "Centro LOT_AC(7) TYPE C.
ART LIKE QALS-ART, "Tipo de controle DATA: END OF I_ACUM_MTB.
LIFNR LIKE QALS-LIFNR, "Nº conta do fornecedor
MATNR LIKE QALS-MATNR, "Nº material DATA: BEGIN OF I_TOT_FORNEC OCCURS 0,
LMENGESCH LIKE QALS-LMENGESCH, "Registro do lote de LIFNR LIKE QALS-LIFNR,
controle NFL_M(5) TYPE C,
LMENGEIST LIKE QALS-LMENGEIST, "Registro do lote de controle NFL_AC(5) TYPE C,
OBJNR LIKE QALS-OBJNR. "Nº objeto NPR_M(5) TYPE C,
DATA: END OF I_QALS. NPR_AC(5) TYPE C,
NCQ_M(5) TYPE C,
DATA: BEGIN OF I_JEST OCCURS 0, NCQ_AC(5) TYPE C,
OBJNR LIKE JEST-OBJNR, "Nº objeto NQF_M(5) TYPE C,
INACT LIKE JEST-INACT. "Código: status inativo NQF_AC(5) TYPE C,
DATA: END OF I_JEST. NPT_M(5) TYPE C,
NPT_AC(5) TYPE C,
PPM_M(7) TYPE C,
DATA: BEGIN OF I_TABFIM OCCURS 0, PPM_AC(7) TYPE C,
WERKS LIKE QALS-WERK, "Centro LOT_M(7) TYPE C,
LIFNR LIKE QALS-LIFNR, "Fornecedor LOT_AC(7) TYPE C.
PPM1_M(7) TYPE C, DATA: END OF I_TOT_FORNEC.
PPM1_AC(7) TYPE C,
PPM_M(7) TYPE C, DATA: BEGIN OF I_FORNEC OCCURS 0,
PPM_AC(7) TYPE C, LIFNR LIKE LFA1-LIFNR, "fornecedor
NFL_M(5) TYPE C, PPM_OBJ(7) TYPE C,
NFL_AC(5) TYPE C, LOT_OBJ(7) TYPE C,
LOT_M(7) TYPE C, NAS(3) TYPE C.
LOT_AC(7) TYPE C, DATA: END OF I_FORNEC.
NPR_M(5) TYPE C,
NPR_AC(5) TYPE C, DATA: BEGIN OF I_FORNEC_MAT OCCURS 0,
NPT_M(5) TYPE C, LIFNR LIKE LFA1-LIFNR,
NPT_AC(5) TYPE C, MATNR LIKE MARA-MATNR,
NCQ_M(5) TYPE C, PPM_OBJ(10) TYPE C,
NCQ_AC(5) TYPE C, LOT_OBJ(10) TYPE C.
NAS_M(5) TYPE C, DATA: END OF I_FORNEC_MAT.
NAS_AC(5) TYPE C,
NQF_M(5) TYPE C, DATA: BEGIN OF I_VIQMEL OCCURS 0,
NQF_AC(5) TYPE C, MAWERKS LIKE VIQMEL-IWERK, "centro
LOT_OBJ_M(10) TYPE C, LIFNUM LIKE VIQMEL-LIFNUM, "fornecedor
LOT_OBJ_AC(10) TYPE C, MATNR LIKE VIQMEL-MATNR, "material
PPM_OBJ_M(10) TYPE C, STRMN LIKE VIQMEL-STRMN, "Data de início desejada
PPM_OBJ_AC(10) TYPE C. QMNUM LIKE VIQMEL-QMNUM, "Nº nota
DATA: END OF I_TABFIM. OBJNR LIKE VIQMEL-OBJNR, "nº objeto
EBELN LIKE VIQMEL-EBELN, "Pedido
DATA: BEGIN OF I_TOT_CENTRO OCCURS 0, EBELP LIKE VIQMEL-EBELP. "Item
43
ABAP Training
DATA: END OF I_VIQMEL. DATA LIKE QAVE-VDATUM, "Data do code para a de
TIPO_NF(2) TYPE C, "Tipo NF
DATA: BEGIN OF I_JEST_NCQ OCCURS 0, LMENGESCH LIKE QALS-LMENGESCH, "Qtd.rejeitada em
OBJNR LIKE JEST-OBJNR, "Nº objeto amostr
INACT LIKE JEST-INACT. "Código: status inativo QKENNZAHL LIKE QAVE-QKENNZAHL, "Índice de qualidade
DATA: END OF I_JEST_NCQ. LMENGEIST LIKE QALS-LMENGEIST. "Quantidade de lote real
DATA: END OF I_DET_MAT.
DATA: BEGIN OF I_VIQMSM OCCURS 0,
QMNUM LIKE VIQMSM-QMNUM, "Nº nota DATA: BEGIN OF I_TAB_DET_FIM OCCURS 0,
ERDAT LIKE VIQMSM-ERDAT. "Data de criação do regist WERKS LIKE T001W-WERKS, "Centro
DATA: END OF I_VIQMSM. LIFNR LIKE LFA1-LIFNR, "Nº conta do fornecedor
MATNR LIKE MARA-MATNR, "Material
DATA: BEGIN OF I_LFA1 OCCURS 0, PPM_M(7) TYPE C,
LIFNR LIKE LFA1-LIFNR, "Nº conta do fornecedor PPM_AC(7) TYPE C,
NAME1 LIKE LFA1-NAME1, "Nome 1 LOT_M(7) TYPE C,
SPRAS LIKE LFA1-SPRAS, "Chave do idioma LOT_AC(7) TYPE C.
STRAS LIKE LFA1-STRAS, "Rua e nº DATA: END OF I_TAB_DET_FIM.
PFACH LIKE LFA1-PFACH, "CxPostal
PSTLZ LIKE LFA1-PSTLZ, "Código Postal (CEP) DATA: BEGIN OF I_MAKT OCCURS 0,
ORT01 LIKE LFA1-ORT01, "Cidade MATNR LIKE MAKT-MATNR, "material
REGIO LIKE LFA1-REGIO, "Estado MAKTX LIKE MAKT-MAKTX. "descricao
LAND1 LIKE LFA1-LAND1. "Pais DATA: END OF I_MAKT.
DATA: END OF I_LFA1.
DATA: BEGIN OF I_EKPO OCCURS 0,
DATA: BEGIN OF I_ELBP OCCURS 0, EBELN LIKE VIQMEL-EBELN, "pedido
LIFNR LIKE ELBP-LIFNR, "Nº conta do fornecedor EBELP LIKE VIQMEL-EBELP, "item do pedido
BEURT LIKE ELBP-BEURT. "Nota WERKS LIKE EKPO-WERKS. "centro
DATA: END OF I_ELBP. DATA: END OF I_EKPO.
44
ABAP Training
DATA: BEGIN OF I_CABN OCCURS 0, T1 = TEXT-001. " Características
ATINN LIKE CABN-ATINN, "Característica interna T2 = TEXT-002. " Período de Análise
ADZHL LIKE CABN-ADZHL, "Número interno T3 = TEXT-003. " Apresentação
ATNAM LIKE CABN-ATNAM, "Nome da característica T4 = TEXT-004. " Dados para RAF
ATFOR LIKE CABN-ATFOR. "Formato da caracterí.
DATA: END OF I_CABN. *----------------------------------------------------------------------*
AT SELECTION-SCREEN. "Tratamento de Erros e lógica para tela de
DATA: BEGIN OF I_AUSP OCCURS 0, seleção
OBJEK LIKE AUSP-OBJEK, "Chave do objeto *----------------------------------------------------------------------*
ATINN LIKE AUSP-ATINN, "Característica interna
ATWRT LIKE AUSP-ATWRT, "Valor da característ. * Condições de erro na tela de seleção:
ATFLV LIKE AUSP-ATFLV, "Valor interno vírgula * Se ambos os modos de apresentação estão selecionados
KLART LIKE AUSP-KLART. "Tipo de classe IF P_SOPPM = 'X'
DATA: END OF I_AUSP. AND P_RSUM = 'X'.
MESSAGE E083 WITH 'Selecionar apenas um modo '
DATA: BEGIN OF I_CENTRO OCCURS 0, 'de apresentação'.
WERKS LIKE T001W-WERKS. ENDIF.
DATA: END OF I_CENTRO.
* Se o mês informado está incorreto
************************************************************************ IF P_MES+4(2) > 12
* Parâmetros de entrada : * OR P_MES+4(2) = 0.
* Select Options (S_...) * MESSAGE E083 WITH 'Mês de análise errado'.
* Parameters (P_...) * ENDIF.
************************************************************************
* Se o período de análise está incorreto
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1. IF P_PERIOD <= 0.
MESSAGE E083 WITH 'Período de análise errado'.
SELECT-OPTIONS: SO_CENT FOR LFA1-WERKS, "centro para ENDIF.
impressão
SO_FORNE FOR LFA1-LIFNR, "fornecedor IF P_RAF <> SPACE.
SO_MATNR FOR MARA-MATNR, "material IF P_IMPRE EQ SPACE.
SO_WERKS FOR LFA1-WERKS. "centros p/ calc. acum. MTB MESSAGE E351. " Informar uma impressora!
SELECTION-SCREEN END OF BLOCK B1. ENDIF.
* verifica se o campo remetente está preenchido
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE T2. IF P_REMET EQ SPACE.
PARAMETERS: P_MES LIKE S031-SPMON OBLIGATORY, "mês de MESSAGE E512. " informar número do emitente
analise ENDIF.
P_PERIOD(2) TYPE C OBLIGATORY. "período (mes p tras) ENDIF.
SELECTION-SCREEN END OF BLOCK B2. * verifica se o centro está preenchido quando o processamento for em
* batch
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE T3. IF P_BATCH NE SPACE " Se for processamento em batch
PARAMETERS: P_SOPPM AS CHECKBOX, " só ppm AND SO_WERKS[] IS INITIAL.
P_RSUM AS CHECKBOX. " relatório sumarizado MESSAGE E513. " falta centro especificado
SELECTION-SCREEN END OF BLOCK B3. ENDIF. " Se for processamento em batch
45
ABAP Training
FORMAT COLOR COL_HEADING.
LOOP AT I_CENTRO.
IF I_CENTRO-WERKS IN SO_WERKS. WRITE: /02 'FORNECEDOR',
ELSE. 15 'NOME',
MESSAGE E083 WITH 'O(s) centro(s) selecionado(s) não' 170 ' ',
'está(ão) incluído(s) no(s) centro(s)' /02 ' CENTRO',
'da MTB considerado(s)'. 15 'DESCRIÇÃO',
ENDIF. 170 ' '.
ENDLOOP.
ENDIF. FORMAT COLOR COL_HEADING.
*----------------------------------------------------------------------*
START-OF-SELECTION. "Processamento principal WRITE: /05 'MÊS/ANO',
*----------------------------------------------------------------------* 33 'NFL',
PERFORM CALCULA_PERIODO. 48 'NPR',
63 'NCQ',
* form para selecao dos dados referente a nota de fornecimento de lotes, 78 'NQF',
* nota de processo e nota de pontualidade. 93 'NPT',
PERFORM F_SELECT_NFLPRPT. 108 'PPM',
123 'OBJ',
* Form para selecao dos dados referente a nota compromisso com qualida. 138 '%LOT',
PERFORM F_SELECT_NCQ. 153 'OBJ',
170 ' '.
* form para selecao dos dados refer. a nota de avaliacao de sistemas.
PERFORM F_SELECT_NAS. ULINE.
* form para selecao dos dados ref. a nota de qualidade de fornecimento. *----------------------------------------------------------------------*
PERFORM F_SELECT_NQF. TOP-OF-PAGE DURING LINE-SELECTION.
*----------------------------------------------------------------------*
* Calcula os valores sumarizados. PERFORM F_HEADER USING SY-TITLE SPACE SPACE SPACE.
PERFORM F_CALC_DET_MAT.
READ TABLE I_T001W WITH KEY WERKS = I_TAB_DET_FIM-WERKS.
* Calcula PPM e OBJ.
PERFORM F_CALC_PPM_OBJ. FORMAT COLOR COL_HEADING.
WRITE: /002 'ÍNDICE PPM E LOTES NO CENTRO',
* acha descricoes. I_TAB_DET_FIM-WERKS, ' - ',
PERFORM F_ACHA_DESCRICOES. I_T001W-NAME,
170 ''.
* Calcula valores acumulados para os Centros e MTB.
PERFORM F_CALC_ACUM. * format color col_heading.
WRITE: /01 '',
* verifica se solicitou impressao do SAPSCRIPT e chama o form. 53 ' Mês ',
IF P_RAF = 'X'. 79 ' Acum. ',
PERFORM F_PREPARA_SAPSCRIPT. 170 '' .
ELSEIF P_SOPPM = 'X'. WRITE: /02 'Material',
PERFORM F_PRINT_SOPPM. 17 'Descrição Breve',
ELSEIF P_RSUM = 'X'. 58 'PPM',
PERFORM F_PRINT_RSUM. 72 '%LOT',
ELSE. 87 'PPM',
PERFORM F_PRINT_REPORT. 99 '%LOT',
ENDIF. 116 'OBJ PPM',
135 'OBJ %LOT',
*----------------------------------------------------------------------* 170 ' '.
END-OF-SELECTION. "Fim do processamento principal ULINE.
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
* AT LINE-SELECTION. "
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
TOP-OF-PAGE. "Cabeçalho (Aparece sempre no topo da tela.) IF P_RSUM NE 'X'.
*----------------------------------------------------------------------* PERFORM F_PRINT_REP_DET.
ENDIF.
PERFORM F_HEADER USING SY-TITLE SPACE SPACE SPACE. *----------------------------------------------------------------------*
46
ABAP Training
*----------------------------------------------------------------------* * ler a tabela para checar se existe objeto.
END-OF-PAGE. "Rodapé READ TABLE I_JEST WITH KEY OBJNR = I_QALS-OBJNR.
*----------------------------------------------------------------------* IF SY-SUBRC EQ 0 AND I_JEST-INACT = SPACE.
* DELETE I_QALS. "deleta registro estornado.
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>> ENDIF.
>>>>>>>>>>>>>>>>* ENDLOOP.
* " SESSÃO DE FORMS " *
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>> DESCRIBE TABLE I_QALS LINES V_LINHAS.
>>>>>>>>>>>>>>>>*
* IF V_LINHAS EQ 0.
*----------------------------------------------------------------------* EXIT.
* Form F_SELECT_NFLPRPT. ENDIF.
*----------------------------------------------------------------------*
* Funcao para selecao de dados do mes e do periodo * * ordenar tabela para facilitar sapscript.
*----------------------------------------------------------------------* SORT I_QALS BY WERKS LIFNR ART.
FORM F_SELECT_NFLPRPT.
LOOP AT I_QALS.
* selecionar dados da tabela QAVE. IF I_QALS-LIFNR EQ ''.
SELECT PRUEFLOS CONTINUE.
KZART ENDIF.
QKENNZAHL * Atualiza dados qnado muda o centro e o fornecedor.
VBEWERTUNG ON CHANGE OF I_QALS-WERKS OR I_QALS-LIFNR.
VDATUM
FROM QAVE IF V_TIPO_NF NE ' '.
INTO TABLE I_QAVE
WHERE VDATUM >= V_DT_INICIO AND MOVE: V_WERKS TO I_ACUM-CENTRO,
VDATUM <= V_DT_FIM AND V_LIFNR TO I_ACUM-LIFNR,
KZART = C_KZART. V_SUM_PPM89_M TO I_ACUM-SUM_PPM89_M,
V_SUM_PPM89_AC TO I_ACUM-SUM_PPM89_AC,
IF SY-SUBRC = 0. V_NUM_NFL_M TO I_ACUM-NUM_NFL_M,
SELECT PRUEFLOS V_NUM_NFL_AC TO I_ACUM-NUM_NFL_AC,
WERK V_SUM_NFL_M TO I_ACUM-SUM_NFL_M,
ART V_SUM_NFL_AC TO I_ACUM-SUM_NFL_AC,
LIFNR V_SUM_LOT_M TO I_ACUM-SUM_LOT_M,
MATNR V_SUM_LOT_AC TO I_ACUM-SUM_LOT_AC,
LMENGESCH V_SUM_PPM01_M TO I_ACUM-SUM_PPM01_M,
LMENGEIST V_SUM_PPM01_AC TO I_ACUM-SUM_PPM01_AC.
OBJNR APPEND I_ACUM.
FROM QALS CLEAR I_ACUM.
INTO TABLE I_QALS
FOR ALL ENTRIES IN I_QAVE * Calcula dados finais com a contabilizacao feita.
WHERE PRUEFLOS = I_QAVE-PRUEFLOS AND PERFORM F_CALC_NOTAS.
WERK IN SO_WERKS AND * atualiza tabela com os dados calculados.
LIFNR IN SO_FORNE AND PERFORM F_GRAVA_TABFIM.
MATNR IN SO_MATNR AND
( ART = '01' OR ART = '89' OR ART = '90' ) AND * Limpar as variaveis utilizadas no calculo.
STAT35 <> SPACE. CLEAR: V_SUM_PPM89_M, V_SUM_PPM89_AC,
V_NUM_NFL_M, V_NUM_NFL_AC,
IF SY-SUBRC EQ 0. V_SUM_NFL_M, V_SUM_NFL_AC,
SELECT OBJNR V_SUM_NPT_M, V_SUM_NPT_AC,
INACT V_SUM_LOT_M, V_SUM_LOT_AC,
FROM JEST V_TOT_NFL_M, V_TOT_NFL_AC,
INTO TABLE I_JEST V_TOT_LOT_M, V_TOT_LOT_AC,
FOR ALL ENTRIES IN I_QALS V_TOT_PPM_M, V_TOT_PPM_AC,
WHERE OBJNR = I_QALS-OBJNR AND V_TOT_NPR_M, V_TOT_NPR_AC,
STAT = C_STAT. "I0224 V_TOT_NPT_M, V_TOT_NPT_AC,
ENDIF. V_SUM_PPM01_M, V_SUM_PPM01_AC.
ENDIF. ENDIF.
ENDON.
* elimina notas de fornecimento de lotes que estejam estornados.
LOOP AT I_QALS. * guarda valores para geracao de arquivo final.
47
ABAP Training
V_WERKS = I_QALS-WERKS. V_SUM_LOT_AC = V_SUM_LOT_AC + I_QAVE-QKENNZAHL.
V_LIFNR = I_QALS-LIFNR. ENDIF.
V_MATNR = I_QALS-MATNR.
V_TIPO_NF = I_QALS-ART. * contabiliza o valor para calculo de nota de processo.
V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_QALS-LMENGEIST.
IF I_QALS-ART = '89'. ENDIF.
READ TABLE I_QAVE WITH KEY PRUEFLOS = I_QALS-PRUEFLOS. * gera tabela para impressao detalhada por material.
* ---------------------------Fim da Alteração--------------------------*
PERFORM F_GRAVA_DET_MAT.
IF SY-SUBRC NE 0.
CONTINUE. ELSEIF I_QALS-ART = '90'.
ENDIF. READ TABLE I_QAVE WITH KEY PRUEFLOS = I_QALS-PRUEFLOS.
V_NUM_NFL_M = V_NUM_NFL_M + 1.
MOVE: V_WERKS TO I_ACUM-CENTRO,
* contabiliza o NFL e LOT. V_LIFNR TO I_ACUM-LIFNR,
V_SUM_PPM89_M TO I_ACUM-SUM_PPM89_M,
V_SUM_NFL_M = V_SUM_NFL_M + I_QAVE-QKENNZAHL. V_SUM_PPM89_AC TO I_ACUM-SUM_PPM89_AC,
IF I_QAVE-QKENNZAHL <> 1. V_NUM_NFL_M TO I_ACUM-NUM_NFL_M,
V_SUM_LOT_M = V_SUM_LOT_M + I_QAVE-QKENNZAHL. V_NUM_NFL_AC TO I_ACUM-NUM_NFL_AC,
ENDIF. V_SUM_NFL_M TO I_ACUM-SUM_NFL_M,
V_SUM_NFL_AC TO I_ACUM-SUM_NFL_AC,
* contabiliza valor para calculo de nota de processo. V_SUM_LOT_M TO I_ACUM-SUM_LOT_M,
V_SUM_PPM01_M = V_SUM_PPM01_M + I_QALS-LMENGEIST. V_SUM_LOT_AC TO I_ACUM-SUM_LOT_AC,
V_SUM_NFL_AC = V_SUM_NFL_AC + I_QAVE-QKENNZAHL. V_SUM_PPM01_M TO I_ACUM-SUM_PPM01_M,
IF I_QAVE-QKENNZAHL <> 1. V_SUM_PPM01_AC TO I_ACUM-SUM_PPM01_AC.
V_SUM_LOT_AC = V_SUM_LOT_AC + I_QAVE-QKENNZAHL. APPEND I_ACUM.
ENDIF. CLEAR I_ACUM.
V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_QALS-LMENGEIST.
V_NUM_NFL_AC = V_NUM_NFL_AC + 1. * Calcula dados finais com a contabilizacao feita.
* ----------------------- Fim da Alteração --------------------------- * PERFORM F_CALC_NOTAS.
ELSE. * Atualiza tabela com os dados calculados.
* sumariza o numero de ocorrencias´para um dados tipo de controle PERFORM F_GRAVA_TABFIM.
V_NUM_NFL_AC = V_NUM_NFL_AC + 1.
* contabiliza NF e LOT ENDFORM.
V_SUM_NFL_AC = V_SUM_NFL_AC + I_QAVE-QKENNZAHL.
IF I_QAVE-QKENNZAHL <> 1. *----------------------------------------------------------------------*
48
ABAP Training
* Form F_CALC_NOTAS. ENDIF.
*----------------------------------------------------------------------*
* Calcula dados finais com a contabilizacao feita. * IF V_TOT_NPT_AC < 0.
*----------------------------------------------------------------------* V_TOT_NPT_AC = 0.
FORM F_CALC_NOTAS. ENDIF.
ENDFORM.
* verifica qual tipo de nota sera calculada.
* calcula nota de fornecimento-mes. *----------------------------------------------------------------------*
IF V_NUM_NFL_M > 0. * Form F_GRAVA_TABFIM.
V_CHECK_NFL_M = ' '. *----------------------------------------------------------------------*
V_TOT_NFL_M = V_SUM_NFL_M / V_NUM_NFL_M. * Grava tabela Final.
V_TOT_LOT_M = 100 - ( V_SUM_LOT_M / V_NUM_NFL_M ). *----------------------------------------------------------------------*
ELSE. FORM F_GRAVA_TABFIM.
V_CHECK_NFL_M = 'X'.
ENDIF. * Verifica se ja existe registro gerado para empresa/fornecedor.
49
ABAP Training
*----------------------------------------------------------------------*
* grava nota de processo - mes * Form F_SELECT_NCQ.
IF V_CHECK_NFL_M = 'X'. *----------------------------------------------------------------------*
I_TABFIM-PPM_M = ' '. * Selecao dos dados referente a nota de compromisso com a qualidade.
I_TABFIM-NPR_M = ' '. *----------------------------------------------------------------------*
ELSE. FORM F_SELECT_NCQ.
WRITE V_TOT_PPM_M TO I_TABFIM-PPM_M DECIMALS 0 RIGHT-
JUSTIFIED. * seleciona os dados da VIqMEL.
WRITE V_TOT_NPR_M TO I_TABFIM-NPR_M DECIMALS 0 RIGHT- SELECT MAWERK
JUSTIFIED. LIFNUM
ENDIF. MATNR
STRMN
* grava nota processo - acumulado. QMNUM
IF V_CHECK_NFL_AC = 'X'. OBJNR
I_TABFIM-PPM_AC = ' '. EBELN
I_TABFIM-NPR_AC = ' '. EBELP
ELSE. FROM VIQMEL
WRITE V_TOT_PPM_AC TO I_TABFIM-PPM_AC DECIMALS 0 INTO TABLE I_VIQMEL
RIGHT-JUSTIFIED. WHERE MAWERK IN SO_WERKS AND
WRITE V_TOT_NPR_AC TO I_TABFIM-NPR_AC DECIMALS 0 LIFNUM IN SO_FORNE AND
RIGHT-JUSTIFIED. MATNR IN SO_MATNR AND
ENDIF. STRMN >= V_DT_INICIO AND
STRMN <= V_DT_FIM AND
* grava nota de pontualidade - mes. ( QMART = 'F2' OR QMART = 'Q2' ).
WRITE V_TOT_NPT_M TO I_TABFIM-NPT_M DECIMALS 0 RIGHT-
JUSTIFIED. IF SY-SUBRC NE 0. "se não encontrou medida.
V_TOT_NCQ_M = 100.
* grava nota de pontualidade - acumulado. V_TOT_NCQ_AC = 100.
WRITE V_TOT_NPT_AC TO I_TABFIM-NPT_AC DECIMALS 0 MOVE: I_VIQMEL-MAWERKS TO I_ACUM-CENTRO,
RIGHT-JUSTIFIED. I_VIQMEL-LIFNUM TO I_ACUM-LIFNR,
1 TO I_ACUM-SUM_EMDIA_M,
1 TO I_ACUM-SUM_EMDIA_AC.
ELSEIF V_TIPO_NF = 'FQ'. APPEND I_ACUM.
CLEAR I_ACUM.
* grava valores de nota de compromisso de qualidade - mes. EXIT.
WRITE V_TOT_NCQ_M TO I_TABFIM-NCQ_M DECIMALS 0 RIGHT- ENDIF.
JUSTIFIED.
* Procura por notas estornadas
* grava valores de nota de compromisso de qualidade - acumulado. SELECT OBJNR
WRITE V_TOT_NCQ_AC TO I_TABFIM-NCQ_AC DECIMALS 0 INACT
RIGHT-JUSTIFIED. FROM JEST
INTO TABLE I_JEST_NCQ
ENDIF. FOR ALL ENTRIES IN I_VIQMEL
WHERE OBJNR = I_VIQMEL-OBJNR AND
* atualiza tabela com valores calculados. STAT = 'I0076'.
MODIFY I_TABFIM INDEX SY-TABIX. * Elimina notas de fornecimento de lotes que estejam estornados.
LOOP AT I_VIQMEL.
IF V_TIPO_NF <> 'FQ'. READ TABLE I_JEST WITH KEY OBJNR = I_VIQMEL-OBJNR.
I_ACUM-CENTRO = I_TABFIM-WERKS. IF SY-SUBRC = 0 AND I_JEST-INACT = SPACE.
I_ACUM-LIFNR = I_TABFIM-LIFNR. * Elimina registro marcado para delecao
I_ACUM-SUM_NPT_M = I_TABFIM-NPT_M. DELETE I_VIQMEL.
I_ACUM-NUM_NPT_M = 1. ENDIF.
I_ACUM-SUM_NPT_AC = I_TABFIM-NPT_AC. ENDLOOP.
I_ACUM-NUM_NPT_AC = 1.
APPEND I_ACUM. * Verifica se ainda ha algum registro na tabela i_viqmel.
CLEAR I_ACUM. DESCRIBE TABLE I_VIQMEL LINES V_LINHAS.
ENDIF.
IF V_LINHAS EQ 0.
ENDFORM. V_TOT_NCQ_M = 100.
V_TOT_NCQ_AC = 100.
50
ABAP Training
MOVE: I_VIQMEL-MAWERKS TO I_ACUM-CENTRO, IF I_VIQMSM-ERDAT > I_VIQMEL-STRMN. "nota QM atrasada.
I_VIQMEL-LIFNUM TO I_ACUM-LIFNR, IF I_VIQMEL-STRMN >= V_DTI_ANALISE AND
1 TO I_ACUM-SUM_EMDIA_M, I_VIQMEL-STRMN <= V_DT_FIM.
1 TO I_ACUM-SUM_EMDIA_AC. V_SUM_ATRAS_M = V_SUM_ATRAS_M + 1.
APPEND I_ACUM. V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
CLEAR I_ACUM. ELSE.
EXIT. V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
ENDIF. ENDIF.
ELSE.
IF V_LINHAS > 0. "se ainda existe medida procura pelas notas. IF I_VIQMEL-STRMN >= V_DTI_ANALISE AND
SELECT QMNUM I_VIQMEL-STRMN <= V_DT_FIM.
ERDAT V_SUM_EMDIA_M = V_SUM_EMDIA_M + 1.
FROM VIQMSM V_SUM_EMDIA_AC = V_SUM_EMDIA_AC + 1.
INTO TABLE I_VIQMSM ELSE.
FOR ALL ENTRIES IN I_VIQMEL V_SUM_EMDIA_AC = V_SUM_EMDIA_AC + 1.
WHERE QMNUM = I_VIQMEL-QMNUM. ENDIF.
ENDIF.
ENDIF. ELSE.
IF I_VIQMEL-STRMN >= V_DTI_ANALISE AND
SORT I_VIQMEL BY MAWERKS LIFNUM. I_VIQMEL-STRMN <= V_DT_FIM.
V_SUM_ATRAS_M = V_SUM_ATRAS_M + 1.
* atribui tipo de nota para gravacao na tabela final. V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
ELSE.
LOOP AT I_VIQMEL. V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
IF I_VIQMEL-MAWERKS EQ ' ' OR I_VIQMEL-LIFNUM EQ ' '. ENDIF.
CONTINUE. ENDIF.
ENDIF.
ENDLOOP.
ON CHANGE OF I_VIQMEL-MAWERKS OR I_VIQMEL-LIFNUM. MOVE: I_VIQMEL-MAWERKS TO I_ACUM-CENTRO,
IF V_TIPO_NF = 'FQ'. I_VIQMEL-LIFNUM TO I_ACUM-LIFNR,
MOVE: V_SUM_ATRAS_M TO I_ACUM-SUM_ATRAS_M,
V_WERKS TO I_ACUM-CENTRO, V_SUM_ATRAS_AC TO I_ACUM-SUM_ATRAS_AC,
V_LIFNR TO I_ACUM-LIFNR, V_SUM_EMDIA_M TO I_ACUM-SUM_EMDIA_M,
V_SUM_ATRAS_M TO I_ACUM-SUM_ATRAS_M, V_SUM_EMDIA_AC TO I_ACUM-SUM_EMDIA_AC.
V_SUM_ATRAS_AC TO I_ACUM-SUM_ATRAS_AC, APPEND I_ACUM.
V_SUM_EMDIA_M TO I_ACUM-SUM_EMDIA_M, CLEAR I_ACUM.
V_SUM_EMDIA_AC TO I_ACUM-SUM_EMDIA_AC. * chama rotina para calculo da NCQ.
APPEND I_ACUM. PERFORM F_CALC_NCQ.
CLEAR I_ACUM. * chama rotina para gravacao da tabela final.
PERFORM F_GRAVA_TABFIM.
* chama rotina para calculo na NCQ.
PERFORM F_CALC_NCQ. ENDFORM.
* chama rotina para gravacao da tabela final.
PERFORM F_GRAVA_TABFIM. *----------------------------------------------------------------------*
* limpa variaveis * Form F_CALC_NCQ
CLEAR: V_SUM_ATRAS_M, V_SUM_ATRAS_AC, *----------------------------------------------------------------------*
V_SUM_EMDIA_M, V_SUM_EMDIA_AC, * rotina para calculo de NCQ.
V_TOT_NOTAS_M, V_TOT_NOTAS_AC, *----------------------------------------------------------------------*
V_TOT_NCQ_M, V_TOT_NCQ_AC. FORM F_CALC_NCQ.
ENDIF.
ENDON. * calculo do mes.
V_TOT_NOTAS_M = V_SUM_EMDIA_M + V_SUM_ATRAS_M.
* guarda valores para geracao de arquivo final.
V_WERKS = I_VIQMEL-MAWERKS. IF V_TOT_NOTAS_M > 0.
V_LIFNR = I_VIQMEL-LIFNUM. V_TOT_NCQ_M = ( V_SUM_EMDIA_M / V_TOT_NOTAS_M ) * 100.
V_TIPO_NF = 'FQ'. ELSE.
V_TOT_NCQ_M = 100.
READ TABLE I_VIQMSM WITH KEY QMNUM = I_VIQMEL- ENDIF.
QMNUM.
* calculo do acumulado.
IF SY-SUBRC EQ 0. V_TOT_NOTAS_AC = V_SUM_EMDIA_AC + V_SUM_ATRAS_AC.
51
ABAP Training
* total de fatores de ponderacao
IF V_TOT_NOTAS_AC > 0.
V_TOT_NCQ_AC = ( V_SUM_EMDIA_AC / V_TOT_NOTAS_AC ) * V_TOT_POND = V_FATOR_NFL + V_FATOR_NPR + V_FATOR_NCQ.
100.
ELSE. * loop na tabela de notas anterior p/ atualizacao do campo de nqf.
V_TOT_NCQ_AC = 100.
ENDIF. LOOP AT I_TABFIM.
52
ABAP Training
REGIO V_TOT_PPM_M, V_TOT_PPM_AC,
LAND1 V_TOT_LOT_M, V_TOT_LOT_AC.
FROM KNA1
INTO I_REMET DESCRIBE TABLE I_TABFIM LINES V_LINHAS.
WHERE KUNNR = P_REMET. " N° remetente (quem emite o RAF)
IF V_LINHAS EQ 0.
* o idioma pelo qual o nome do país deve ser procurado depende do MESSAGE I083 WITH
* país do remetente. 'Não há dados para os critérios de seleção' 'informados'.
IF I_REMET-LAND1 EQ C_BR. " Se remetente for brasileiro EXIT.
V_IDIOMA = C_P. " português ENDIF.
ELSEIF I_REMET-LAND1 EQ C_ARG. " Se remetente for argentino
V_IDIOMA = C_ESP. " espanhol SORT I_TABFIM BY LIFNR WERKS.
ENDIF. " Se remetente for brasileiro
LOOP AT I_TABFIM WHERE WERKS IN SO_CENT.
SELECT LAND1
LANDX READ TABLE I_T001W WITH KEY WERKS = I_TABFIM-WERKS.
FROM T005T READ TABLE I_LFA1 WITH KEY LIFNR = I_TABFIM-LIFNR.
INTO TABLE I_PAIS
WHERE SPRAS = V_IDIOMA. ON CHANGE OF I_TABFIM-LIFNR.
53
ABAP Training
47 I_TABFIM-NPR_M, FORM F_PRINT_REP_DET.
62 I_TABFIM-NCQ_M,
77 I_TABFIM-NQF_M, LOOP AT I_TAB_DET_FIM.
92 I_TABFIM-NPT_M,
107 I_TABFIM-PPM_M HOTSPOT ON. IF I_TAB_DET_FIM-LIFNR = I_TABFIM-LIFNR AND
I_TAB_DET_FIM-WERKS = I_TABFIM-WERKS.
WRITE: 119 I_FORNEC-PPM_OBJ.
CLEAR: I_MAKT, I_FORNEC_MAT.
WRITE: 137 I_TABFIM-LOT_M.
READ TABLE I_MAKT WITH KEY MATNR = I_TAB_DET_FIM-
WRITE: 147 I_FORNEC-LOT_OBJ, MATNR.
170 ' '.
HIDE: I_TABFIM-LIFNR, I_TABFIM-WERKS. READ TABLE I_FORNEC_MAT WITH KEY LIFNR =
I_TAB_DET_FIM-LIFNR
FORMAT COLOR COL_NORMAL. MATNR = I_TAB_DET_FIM-MATNR.
54
ABAP Training
SORT I_TABFIM BY LIFNR.
* Dados do Remetente
* Imprime SAPSCRIPT ZSAPSCRIP2-NAMEC = I_T001W-NAME.
LOOP AT I_TABFIM. ZSAPSCRIP2-REM_NAME = I_REMET-NAME.
ZSAPSCRIP2-REM_RUA = I_REMET-STRAS.
READ TABLE I_TOT_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR. ZSAPSCRIP2-REM_CAIXA = I_REMET-PFACH.
IF I_TOT_FORNEC-PPM_M = ' '. ZSAPSCRIP2-REM_CEP = I_REMET-PSTLZ.
CONTINUE. ZSAPSCRIP2-REM_CITY = I_REMET-ORT01.
ENDIF. ZSAPSCRIP2-REM_REG = I_REMET-REGIO.
READ TABLE I_PAIS WITH KEY LAND1 = I_REMET-LAND1.
IF V_FLAG_IMPRES = C_SIM(1). ZSAPSCRIP2-REM_PAIS = I_PAIS-LANDX.
* Abre form para impressão de sapscript
PERFORM F_OPEN_FORM. IF I_FORNEC-NAS = ' '.
V_FLAG_IMPRES = C_NAO.
ENDIF. * Se o país do Remetente for
* argentina e o país do fornecedor for argentina, imprimir o relatório
ON CHANGE OF I_TABFIM-LIFNR. * espanhol. Se ambos forem Brasil, imprimir em português. Para os
IF V_PRIM_VEZ <> C_SIM(1). * demais casos, imprimir em inglês.
* Resumo dos índices de PPM de linha e % rejeição de Lote no
Recebimento
PERFORM F_LOOP_RESUMO_INDICE. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
V_TIME = 889 / 10. ZSAPSCRIP2-AVALIA = C_NAO.
V_PRIM_VEZ = C_SIM. ELSE.
V_PRIM_VEZ_SAPSCRIPT = C_SIM(1). ZSAPSCRIP2-AVALIA = C_NO.
ENDIF. ENDIF.
ENDON. ELSE.
IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
CLEAR: I_LFA1, I_T001W. ZSAPSCRIP2-AVALIA = C_SIM.
ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ
* Descrição do Fornecedor e Centro C_ARG.
READ TABLE I_LFA1 WITH KEY LIFNR = I_TABFIM-LIFNR. ZSAPSCRIP2-AVALIA = C_SI.
READ TABLE I_T001W WITH KEY WERKS = I_TABFIM-WERKS. ELSE.
READ TABLE I_TOT_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR. ZSAPSCRIP2-AVALIA = C_YES.
READ TABLE I_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR. ENDIF.
* Inicia formulário ENDIF.
IF V_PRIM_VEZ_SAPSCRIPT = C_SIM(1). IF I_TOT_FORNEC-NFL_M = ' '.
PERFORM F_START_FORM. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
ENDIF. ZSAPSCRIP2-ATIVO = C_NAO.
* Data de Referência / Acumulado de: ELSE.
ZSAPSCRIP2-ATIVO = C_NO.
PERFORM F_EXTENSO_DATA USING V_DT_FIM+4(2) ENDIF.
V_DT_FIM+2(2) ELSE.
CHANGING ZSAPSCRIP2-DATA_REF. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
ZSAPSCRIP2-ATIVO = C_SIM.
PERFORM F_EXTENSO_DATA USING V_DT_INICIO+4(2) ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ
V_DT_INICIO+2(2) C_ARG.
CHANGING ZSAPSCRIP2-ACUM_DT1. ZSAPSCRIP2-ATIVO = C_SI.
PERFORM F_EXTENSO_DATA USING V_DT_FIM+4(2) ELSE.
V_DT_FIM+2(2) ZSAPSCRIP2-ATIVO = C_YES.
CHANGING ZSAPSCRIP2-ACUM_DT2. ENDIF.
* Dados do Destinário ENDIF.
ZSAPSCRIP2-NAMEF = I_LFA1-NAME1.
ZSAPSCRIP2-LIFNR = I_TABFIM-LIFNR.
ZSAPSCRIP2-DEST_NAME = I_LFA1-NAME1. * Iguala todos os campos da tabela de resumo de unidade para a estrutura
ZSAPSCRIP2-DEST_RUA = I_LFA1-STRAS. ZSAPSCRIP2-PPM_M = I_TOT_FORNEC-PPM_M.
ZSAPSCRIP2-DEST_CAIXA = I_LFA1-PFACH. ZSAPSCRIP2-PPM_AC = I_TOT_FORNEC-PPM_AC.
ZSAPSCRIP2-DEST_CEP = I_LFA1-PSTLZ. ZSAPSCRIP2-NQF_M_T = I_TOT_FORNEC-NQF_M.
ZSAPSCRIP2-DEST_CITY = I_LFA1-ORT01. ZSAPSCRIP2-NQF_AC_T = I_TOT_FORNEC-NQF_AC.
ZSAPSCRIP2-DEST_REG = I_LFA1-REGIO. ZSAPSCRIP2-NAS_M_T = I_FORNEC-NAS.
READ TABLE I_PAIS WITH KEY LAND1 = I_LFA1-LAND1. ZSAPSCRIP2-NPT_AC_T = I_TOT_FORNEC-NPT_AC+1.
ZSAPSCRIP2-DEST_PAIS = I_PAIS-LANDX. ZSAPSCRIP2-NPT_M_T = I_TOT_FORNEC-NPT_M+1.
55
ABAP Training
ZSAPSCRIP2-NFL_M_T = I_TOT_FORNEC-NFL_M. PERFORM F_GRAVA_RES_INDICE.
ZSAPSCRIP2-NFL_AC_T = I_TOT_FORNEC-NFL_AC. ENDLOOP.
ZSAPSCRIP2-NPR_M_T = I_TOT_FORNEC-NPR_M.
ZSAPSCRIP2-NPR_AC_T = I_TOT_FORNEC-NPR_AC. IF V_PRIM_VEZ <> C_SIM(1).
ZSAPSCRIP2-NCQ_M_T = I_TOT_FORNEC-NCQ_M. * Imprime último fornecedor cadastrado
ZSAPSCRIP2-NCQ_AC_T = I_TOT_FORNEC-NCQ_AC. PERFORM F_LOOP_RESUMO_INDICE.
ENDIF.
* Impressão do resumo de todas as Unidades
IF V_PRIM_VEZ_SAPSCRIPT = C_SIM(1). IF V_FLAG_IMPRES = C_SIM(1).
PERFORM F_WRITE_RESUMO_UNIDADES. MESSAGE I083 WITH
V_PRIM_VEZ_SAPSCRIPT = C_NAO(1). 'Não há dados para os critérios de seleção' ' informados'.
ENDIF. ELSE.
* Resumo por Unidade * Encerra a impressão via SAPSCRIPT.
ZSAPSCRIP2-NQF_M = I_TABFIM-NQF_M. CALL FUNCTION 'CLOSE_FORM'
ZSAPSCRIP2-NQF_AC = I_TABFIM-NQF_AC. EXCEPTIONS
ZSAPSCRIP2-NFL_M = I_TABFIM-NFL_M. UNOPENED = 1
ZSAPSCRIP2-NFL_AC = I_TABFIM-NFL_AC. OTHERS = 2.
ZSAPSCRIP2-NPR_M = I_TABFIM-NPR_M. ENDIF.
ZSAPSCRIP2-NPR_AC = I_TABFIM-NPR_AC. ENDFORM.
ZSAPSCRIP2-NCQ_M = I_TABFIM-NCQ_M.
ZSAPSCRIP2-NCQ_AC = I_TABFIM-NCQ_AC. *----------------------------------------------------------------------*
ZSAPSCRIP2-NPT_M = I_TABFIM-NPT_M+1. * Form f_CALC_DET_MAT.
ZSAPSCRIP2-NPT_AC = I_TABFIM-NPT_AC+1. *----------------------------------------------------------------------*
* SUMARIZA VALORES POR MATERIAL
* Verifica se está ativo para o determinado fornecedor: *----------------------------------------------------------------------*
IF I_TABFIM-NFL_M = ' '. FORM F_CALC_DET_MAT.
* Se o país do Remetente for
* argentina e o país do fornecedor for argentina, imprimir o relatório CLEAR: V_SUM_PPM89_M,
* espanhol. Se ambos forem Brasil, imprimir em português. Para os V_SUM_PPM89_AC,
* demais casos, imprimir em inglês. V_NUM_NFL_M, V_SUM_NFL_M, V_SUM_PPM01_M,
IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. V_SUM_LOT_M, V_SUM_LOT_AC,
ZSAPSCRIP2-ATIVO = C_NAO. V_NUM_NFL_AC, V_SUM_NFL_AC, V_SUM_PPM01_AC.
ELSE.
ZSAPSCRIP2-ATIVO = C_NO. CLEAR: V_WERKS, V_LIFNR, V_MATNR, V_TIPO_NF.
ENDIF.
ELSE. SORT I_DET_MAT BY WERKS LIFNR MATNR TIPO_NF.
IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
ZSAPSCRIP2-ATIVO = C_SIM. LOOP AT I_DET_MAT.
ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ
C_ARG. ON CHANGE OF I_DET_MAT-WERKS OR I_DET_MAT-LIFNR
ZSAPSCRIP2-ATIVO = C_SI. OR I_DET_MAT-MATNR.
ELSE. IF V_TIPO_NF NE ' '.
ZSAPSCRIP2-ATIVO = C_YES. PERFORM F_GRAVA_DET_FIM.
ENDIF.
ENDIF. CLEAR: V_SUM_PPM89_M,
IF V_PRIM_VEZ = C_SIM(1). V_SUM_PPM89_AC,
* Impressão do resumo por Unidades V_SUM_LOT_M, V_SUM_LOT_AC,
PERFORM F_WRITE_RESUMO_POR_UNIDADE. V_NUM_NFL_M, V_SUM_NFL_M, V_SUM_PPM01_M,
V_PRIM_VEZ = C_NAO. V_NUM_NFL_AC, V_SUM_NFL_AC, V_SUM_PPM01_AC.
ELSEIF V_TIME > C_LINHA1. ENDIF.
* Impressão do resumo por Unidades
PERFORM F_WRITE_RESUMO_POR_UNIDADE. ENDON.
V_TIME = ( 14 * 127 / 30 ).
ENDIF. * guarda valores para geracao de arquivo final.
V_WERKS = I_DET_MAT-WERKS.
* Atualiza contador de linhas V_LIFNR = I_DET_MAT-LIFNR.
ZSAPSCRIP2-CONT = V_TIME. V_MATNR = I_DET_MAT-MATNR.
V_TIPO_NF = I_DET_MAT-TIPO_NF.
* Chama FORM de impressão de detalhe Resumo por Unidade
PERFORM F_WRITE_DET_RESUMO_POR_UNIDADE. IF I_DET_MAT-TIPO_NF = '89'.
* Grava dados para resumo de índice de PPM IF I_DET_MAT-DATA >= V_DTI_ANALISE AND
56
ABAP Training
I_DET_MAT-DATA <= V_DT_FIM. *----------------------------------------------------------------------*
V_SUM_PPM89_M = V_SUM_PPM89_M + I_DET_MAT- * Form f_grava_det_fim.
LMENGESCH. *----------------------------------------------------------------------*
V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_DET_MAT- * Grava tabela final de detalhes de itens.
LMENGESCH. *----------------------------------------------------------------------*
ELSE. FORM F_GRAVA_DET_FIM.
V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_DET_MAT-
LMENGESCH. CLEAR: I_TAB_DET_FIM.
ENDIF.
READ TABLE I_TAB_DET_FIM WITH KEY WERKS = V_WERKS
ELSEIF I_DET_MAT-TIPO_NF = '01'. LIFNR = V_LIFNR
MATNR = V_MATNR.
IF I_DET_MAT-DATA >= V_DTI_ANALISE AND
I_DET_MAT-DATA <= V_DT_FIM. IF SY-SUBRC <> 0.
* sumariza o numero de ocorrencias para um dado tipo de controle. I_TAB_DET_FIM-WERKS = V_WERKS.
V_NUM_NFL_M = V_NUM_NFL_M + 1. I_TAB_DET_FIM-LIFNR = V_LIFNR.
* contabiliza NFL e LOT. I_TAB_DET_FIM-MATNR = V_MATNR.
V_SUM_NFL_M = V_SUM_NFL_M + I_DET_MAT-QKENNZAHL. APPEND I_TAB_DET_FIM.
IF I_DET_MAT-QKENNZAHL <> 1. ENDIF.
V_SUM_LOT_M = V_SUM_LOT_M + I_DET_MAT-QKENNZAHL.
ENDIF. * grava nota de fornecimento - mes_acumulado.
IF V_NUM_NFL_M > 0.
V_SUM_PPM01_M = V_SUM_PPM01_M + I_DET_MAT- V_CHECK_NFL_M = ' '.
LMENGEIST. V_TOT_LOT_M = 100 - ( V_SUM_LOT_M / V_NUM_NFL_M ).
V_NUM_NFL_AC = V_NUM_NFL_AC + 1. ELSE.
V_SUM_NFL_AC = V_SUM_NFL_AC + I_DET_MAT-QKENNZAHL. V_CHECK_NFL_M = 'X'.
IF I_DET_MAT-QKENNZAHL <> 1. ENDIF.
V_SUM_LOT_AC = V_SUM_LOT_AC + I_DET_MAT- * grava nota de fornecimento mes / acum.
QKENNZAHL. IF V_NUM_NFL_AC > 0.
ENDIF. V_CHECK_NFL_AC = ' '.
V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_DET_MAT- V_TOT_LOT_AC = 100 - ( V_SUM_LOT_AC / V_NUM_NFL_AC ).
LMENGEIST. ELSE.
ELSE. V_CHECK_NFL_AC = 'X'.
* sumariza o numero de ocorrencias pára um dado tipo de controle. ENDIF.
V_NUM_NFL_AC = V_NUM_NFL_AC + 1.
* contabiliza NFL e LOT. * calcula nota de processo - mes.
V_SUM_NFL_AC = V_SUM_NFL_AC + I_DET_MAT- IF V_SUM_PPM01_M > 0.
QKENNZAHL. V_TOT_PPM_M = ( V_SUM_PPM89_M / V_SUM_PPM01_M ) *
IF I_DET_MAT-QKENNZAHL <> 1. C_MILHAO.
V_SUM_LOT_AC = V_SUM_LOT_AC + I_DET_MAT- ENDIF.
QKENNZAHL.
ENDIF. * calcula nota de processo - acum.
IF V_SUM_PPM01_AC > 0.
* contabiliza valor para calculo de nota de processo. V_TOT_PPM_AC = ( V_SUM_PPM89_AC / V_SUM_PPM01_AC ) *
V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_DET_MAT- C_MILHAO.
LMENGEIST. ENDIF.
ENDIF.
ENDIF.
ENDLOOP. * grava nota processo mes / ac.
IF V_CHECK_NFL_AC = 'X'.
* Grava dados do último registro I_TAB_DET_FIM-PPM_M = ' '.
PERFORM F_GRAVA_DET_FIM. I_TAB_DET_FIM-PPM_AC = ' '.
I_TAB_DET_FIM-LOT_M = ' '.
CLEAR: V_SUM_PPM89_M, I_TAB_DET_FIM-LOT_AC = ' '.
V_SUM_PPM89_AC, ELSE.
V_SUM_LOT_M, V_SUM_LOT_AC, WRITE V_TOT_LOT_AC TO I_TAB_DET_FIM-LOT_AC DECIMALS 2
V_NUM_NFL_M, V_SUM_NFL_M, V_SUM_PPM01_M, RIGHT-JUSTIFIED.
V_NUM_NFL_AC, V_SUM_NFL_AC, V_SUM_PPM01_AC. WRITE V_TOT_LOT_M TO I_TAB_DET_FIM-LOT_M DECIMALS 2
RIGHT-JUSTIFIED.
ENDFORM. WRITE V_TOT_PPM_M TO I_TAB_DET_FIM-PPM_M DECIMALS 0
RIGHT-JUSTIFIED.
57
ABAP Training
WRITE V_TOT_PPM_AC TO I_TAB_DET_FIM-PPM_AC DECIMALS 0 FORM F_OPEN_FORM.
RIGHT-JUSTIFIED. DATA: V_DIALOG TYPE C VALUE 'X'.
ENDIF.
MODIFY I_TAB_DET_FIM INDEX SY-TABIX. ITCPO-TDDEST = P_IMPRE.
IF P_BATCH NE ' '.
ENDFORM. ITCPO-TDIMMED = 'X'.
ITCPO-TDNEWID = 'X'.
*----------------------------------------------------------------------* V_DIALOG = ' '.
* Form f_acha_descricoes. ENDIF.
*----------------------------------------------------------------------* * Abre o fórmulário para impressão via SAPSCRIPT
* Grava tabela final de detalhes de itens. CALL FUNCTION 'OPEN_FORM'
*----------------------------------------------------------------------* EXPORTING
FORM F_ACHA_DESCRICOES. DEVICE = 'PRINTER'
FORM = 'Z_AVAL_FORNEC'
SELECT MATNR LANGUAGE = SY-LANGU
MAKTX OPTIONS = ITCPO
FROM MAKT DIALOG = V_DIALOG.
INTO TABLE I_MAKT ENDFORM. " F_OPEN_FORM
FOR ALL ENTRIES IN I_TAB_DET_FIM
WHERE MATNR = I_TAB_DET_FIM-MATNR. *&---------------------------------------------------------------------*
*& Form F_WRITE_RESUMO_UNIDADES
ENDFORM. *&---------------------------------------------------------------------*
* Chama o elemento de texto RESUMO_TODAS_ATIVIDADES
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
* Form f_print_total. FORM F_WRITE_RESUMO_UNIDADES.
*----------------------------------------------------------------------* * Chama o elemento de texto RESUMO_TODAS_ATIVIDADES
* Imprime total do rel. UM.
*----------------------------------------------------------------------* CALL FUNCTION 'WRITE_FORM'
FORM F_PRINT_TOTAL. EXPORTING
ELEMENT = 'RESUMO_TODAS_UNIDADES'
FORMAT COLOR COL_TOTAL. WINDOW = 'MAIN'.
58
ABAP Training
* dados do RESUMO_POR_UNIDADE. ELSE.
CALL FUNCTION 'WRITE_FORM' V_IDIOMA = C_ENG.
EXPORTING ENDIF.
ELEMENT = 'DETALHE_RESUMO_POR_UNIDADE' * Abre o formulário para impressão da página de verso
WINDOW = 'MAIN'. CALL FUNCTION 'START_FORM'
EXPORTING
V_TIME = V_TIME + ( 127 / 10 ). "acrescenta 3 linhas à origem FORM = 'Z_AVAL_FORNEC'
ZSAPSCRIP2-CONT = V_TIME. LANGUAGE = V_IDIOMA
ENDFORM. " F_WRITE_DET_RESUMO_POR_UNIDADE STARTPAGE = 'VERSO'
IMPORTING
*&---------------------------------------------------------------------* LANGUAGE = SY-LANGU.
*& Form F_WRITE_RESUMO_INDICE
*&---------------------------------------------------------------------* * imprime página de verso
* Chama o elemento de texto RESUMO_INDICES_PPM CALL FUNCTION 'WRITE_FORM'
*----------------------------------------------------------------------* EXPORTING
FORM F_WRITE_RESUMO_INDICE. WINDOW = 'INFO3'.
59
ABAP Training
PERFORM F_WRITE_DET_RESUMO_INDICE. INTO T247-LTX
WHERE SPRAS = V_ID
ENDLOOP. AND MNR = P_DATA_MES.
CONCATENATE T247-LTX(3) '/' P_DATA_ANO INTO P_DATA_ATU.
* Encerra formulário de dados de Nota
CALL FUNCTION 'END_FORM'. ENDFORM. " F_EXTENSO_DATA
*&---------------------------------------------------------------------*
* Form de Impressão de verso da página *& Form F_START_FORM
PERFORM F_WRITE_VERSO_PAG. *&---------------------------------------------------------------------*
* text *
* Limpa tabela *----------------------------------------------------------------------*
REFRESH I_RES_INDICE. * --> p1 text
* <-- p2 text
ENDFORM. " F_LOOP_RESUMO_INDICE *----------------------------------------------------------------------*
FORM F_START_FORM.
*&---------------------------------------------------------------------*
*& Form F_GRAVA_RES_INDICE * Se o país do Remetente for
*&---------------------------------------------------------------------* * argentina e o país do fornecedor for argentina, imprimir o relatório
* text * * espanhol. Se ambos forem Brasil, imprimir em português. Para os
*----------------------------------------------------------------------* * demais casos, imprimir em inglês.
FORM F_GRAVA_RES_INDICE. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
V_IDIOMA = C_P.
I_RES_INDICE-LIFNR = I_TABFIM-LIFNR. ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG.
I_RES_INDICE-WERKS = I_TABFIM-WERKS. V_IDIOMA = C_ESP.
ELSE.
I_RES_INDICE-PPM_M = I_TABFIM-PPM_M. V_IDIOMA = C_ENG.
I_RES_INDICE-PPM_AC = I_TABFIM-PPM_AC. ENDIF.
60
ABAP Training
EXIT. WRITE V_VAL_PPM TO I_FORNEC-PPM_OBJ RIGHT-JUSTIFIED.
ENDIF. WRITE V_VAL_LOTE TO I_FORNEC-LOT_OBJ RIGHT-JUSTIFIED.
IF I_CABN-ATFOR = 'NUM'.
V_ATFLV = I_AUSP-ATFLV. READ TABLE I_CABN WITH KEY ATNAM = C_NAS.
IF P_VALOR = V_VAL_PPM. IF SY-SUBRC NE 0.
WRITE V_ATFLV TO P_VALOR DECIMALS 0. I_FORNEC-NAS = ' '.
ELSE. ELSE.
P_VALOR = V_ATFLV. READ TABLE I_AUSP WITH KEY OBJEK = V_OBJEK_FORN
ENDIF. ATINN = I_CABN-ATINN
ELSE. KLART = C_DEZ.
P_VALOR = I_AUSP-ATWRT. IF SY-SUBRC NE 0.
ENDIF. I_FORNEC-NAS = ' '.
ELSE.
ENDFORM. " CARACTERISTICA IF I_CABN-ATFOR = 'NUM'.
*&---------------------------------------------------------------------* V_ATFLV = I_AUSP-ATFLV.
*& Form f_calc_ppm_obj. WRITE V_ATFLV TO V_VAL_NAS DECIMALS 0.
*&---------------------------------------------------------------------* ELSE.
* Calcula PPM e OBJ V_VAL_NAS = I_AUSP-ATWRT.
*----------------------------------------------------------------------* ENDIF.
FORM F_CALC_PPM_OBJ. WRITE V_VAL_NAS TO I_FORNEC-NAS RIGHT-JUSTIFIED.
DATA: V_OBJEK_FORN(50) TYPE C, ENDIF.
V_OBJEK_MAT(50) TYPE C. ENDIF.
61
ABAP Training
ENDON. ENDLOOP.
ENDLOOP.
ULINE.
ENDFORM.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form f_grava_total_final. *&---------------------------------------------------------------------*
*&---------------------------------------------------------------------* *& Form f_print_total_acum.
* grava total final. *&---------------------------------------------------------------------*
*----------------------------------------------------------------------* * Imprime o total final acum.
FORM F_GRAVA_TOTAL_FINAL. *----------------------------------------------------------------------*
ENDFORM.
ENDFORM. *&---------------------------------------------------------------------*
*& Form CALCULA_PERIODO
*&---------------------------------------------------------------------* *&---------------------------------------------------------------------*
*& Form f_print_total_final. * Este Form é utilizado para calcular o mês de início do período
*&---------------------------------------------------------------------* * selecionado
* Imprime o total final. *----------------------------------------------------------------------*
*----------------------------------------------------------------------* FORM CALCULA_PERIODO.
DATA: V_MES_BATCH LIKE SY-DATUM.
FORM F_PRINT_TOTAL_FINAL.
IF P_BATCH = ' '.
FORMAT COLOR COL_TOTAL. CONCATENATE P_MES '01' INTO V_DIA_CALCULO.
WRITE: /03 'ACUM NO CENTRO', ELSE.
170 ' '. CONCATENATE SY-DATUM(6) '01' INTO V_MES_BATCH.
V_MES_BATCH = V_MES_BATCH - 1.
SORT I_TOT_CENTRO BY WERKS. CONCATENATE V_MES_BATCH(6) '01' INTO V_DIA_CALCULO.
ENDIF.
LOOP AT I_TOT_CENTRO. CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
CLEAR: I_T001W. DAY_IN = V_DIA_CALCULO
IMPORTING
READ TABLE I_T001W WITH KEY WERKS = I_TOT_CENTRO- LAST_DAY_OF_MONTH = V_ULTIMO_DIA.
WERKS.
* primeiro dia do mes selecionado.
WRITE: /03 I_TOT_CENTRO-WERKS, V_DTI_ANALISE = V_DIA_CALCULO.
I_T001W-NAME,
32 I_TOT_CENTRO-NFL, * Cálculo do início do período de análise
47 I_TOT_CENTRO-NPR, P_PERIOD = P_PERIOD - 1.
62 I_TOT_CENTRO-NCQ, DO P_PERIOD TIMES.
77 I_TOT_CENTRO-NQF, V_PRIMEIRO_DIA = V_DIA_CALCULO - 1.
92 I_TOT_CENTRO-NPT, CONCATENATE V_PRIMEIRO_DIA(6) '01' INTO V_DIA_CALCULO.
107 I_TOT_CENTRO-PPM, ENDDO.
137 I_TOT_CENTRO-LOT, V_DT_INICIO = V_DIA_CALCULO.
170 ' '. V_DT_FIM = V_ULTIMO_DIA.
62
ABAP Training
P_PERIOD = P_PERIOD + 1. SUM_NFL_AC LIKE T706U-BETFA,
ENDFORM. " CALCULA_PERIODO SUM_LOT_M LIKE T706U-BETFA,
*&---------------------------------------------------------------------* SUM_LOT_AC LIKE T706U-BETFA,
*& Form F_CALC_ACUM SUM_NPT_M LIKE T706U-BETFA,
*&---------------------------------------------------------------------* SUM_NPT_AC LIKE T706U-BETFA,
* Form para calcular as notas acumuladas nos centros e MTB. NUM_NPT_M LIKE T706U-BETFA,
* Este form também grava os resultados na tabela do centro. NUM_NPT_AC LIKE T706U-BETFA,
*----------------------------------------------------------------------* SUM_PPM01_M LIKE T706U-BETFA,
FORM F_CALC_ACUM. SUM_PPM01_AC LIKE T706U-BETFA,
SUM_ATRAS_M LIKE T706U-BETFA,
* Declaração de variáveis locais: SUM_ATRAS_AC LIKE T706U-BETFA,
DATA: V_CENT_SUM_PPM89_AC LIKE T706U-BETFA, SUM_EMDIA_M LIKE T706U-BETFA,
V_CENT_NUM_NFL_AC LIKE T706U-BETFA, SUM_EMDIA_AC LIKE T706U-BETFA.
V_CENT_SUM_NFL_AC LIKE T706U-BETFA, DATA: END OF I_ACUM_FORNEC.
V_CENT_SUM_LOT_AC LIKE T706U-BETFA,
V_CENT_SUM_NPT_AC LIKE T706U-BETFA, SORT I_ACUM BY CENTRO.
V_CENT_NUM_NPT_AC LIKE T706U-BETFA,
V_CENT_SUM_PPM01_AC LIKE T706U-BETFA, * verifica se é necessária a impressão dos totais por centro e empresa
V_CENT_SUM_ATRAS_AC LIKE T706U-BETFA, IF SO_FORNE EQ '' AND SO_MATNR EQ ''.
V_CENT_SUM_EMDIA_AC LIKE T706U-BETFA.
* Soma totais gerais para os Centros e para Empresa
DATA: C_MI(7) TYPE N VALUE '1000000'. "Valor de calc de Nota LOOP AT I_ACUM.
DATA: V_PRIM_VEZ TYPE I. "Flag primeira vez
V_CENT_SUM_PPM89_AC = V_CENT_SUM_PPM89_AC + I_ACUM-
DATA: V_MTB_SUM_PPM89_AC LIKE T706U-BETFA, SUM_PPM89_AC.
V_MTB_NUM_NFL_AC LIKE T706U-BETFA, V_CENT_NUM_NFL_AC = V_CENT_NUM_NFL_AC + I_ACUM-
V_MTB_SUM_NFL_AC LIKE T706U-BETFA, NUM_NFL_AC.
V_MTB_SUM_LOT_AC LIKE T706U-BETFA, V_CENT_SUM_NFL_AC = V_CENT_SUM_NFL_AC + I_ACUM-
V_MTB_SUM_NPT_AC LIKE T706U-BETFA, SUM_NFL_AC.
V_MTB_NUM_NPT_AC LIKE T706U-BETFA, V_CENT_SUM_LOT_AC = V_CENT_SUM_LOT_AC + I_ACUM-
V_MTB_SUM_PPM01_AC LIKE PC207-BETPE, SUM_LOT_AC.
V_MTB_SUM_ATRAS_AC LIKE T706U-BETFA, V_CENT_SUM_NPT_AC = V_CENT_SUM_NPT_AC + I_ACUM-
V_MTB_SUM_EMDIA_AC LIKE T706U-BETFA. SUM_NPT_AC.
V_CENT_NUM_NPT_AC = V_CENT_NUM_NPT_AC + I_ACUM-
DATA: V_FORNEC_SUM_PPM89_M LIKE T706U-BETFA, NUM_NPT_AC.
V_FORNEC_SUM_PPM89_AC LIKE T706U-BETFA, V_CENT_SUM_PPM01_AC = V_CENT_SUM_PPM01_AC + I_ACUM-
V_FORNEC_NUM_NFL_M LIKE T706U-BETFA, SUM_PPM01_AC.
V_FORNEC_NUM_NFL_AC LIKE T706U-BETFA, V_CENT_SUM_ATRAS_AC = V_CENT_SUM_ATRAS_AC + I_ACUM-
V_FORNEC_SUM_NFL_M LIKE T706U-BETFA, SUM_ATRAS_AC.
V_FORNEC_SUM_NFL_AC LIKE T706U-BETFA, V_CENT_SUM_EMDIA_AC = V_CENT_SUM_EMDIA_AC + I_ACUM-
V_FORNEC_SUM_LOT_M LIKE T706U-BETFA, SUM_EMDIA_AC.
V_FORNEC_SUM_LOT_AC LIKE T706U-BETFA,
V_FORNEC_SUM_NPT_M LIKE T706U-BETFA, IF SO_CENT EQ ''. "verifica se nenhum centro foi selecionado
V_FORNEC_SUM_NPT_AC LIKE T706U-BETFA, V_MTB_SUM_PPM89_AC = V_MTB_SUM_PPM89_AC + I_ACUM-
V_FORNEC_NUM_NPT_M LIKE T706U-BETFA, SUM_PPM89_AC.
V_FORNEC_NUM_NPT_AC LIKE T706U-BETFA, V_MTB_NUM_NFL_AC = V_MTB_NUM_NFL_AC + I_ACUM-
V_FORNEC_LIFNR LIKE QALS-LIFNR, NUM_NFL_AC.
V_FORNEC_SUM_PPM01_M LIKE T706U-BETFA, V_MTB_SUM_NFL_AC = V_MTB_SUM_NFL_AC + I_ACUM-
V_FORNEC_SUM_PPM01_AC LIKE T706U-BETFA, SUM_NFL_AC.
V_FORNEC_SUM_ATRAS_M LIKE T706U-BETFA, V_MTB_SUM_LOT_AC = V_MTB_SUM_LOT_AC + I_ACUM-
V_FORNEC_SUM_ATRAS_AC LIKE T706U-BETFA, SUM_LOT_AC.
V_FORNEC_SUM_EMDIA_M LIKE T706U-BETFA, V_MTB_SUM_NPT_AC = V_MTB_SUM_NPT_AC + I_ACUM-
V_FORNEC_SUM_EMDIA_AC LIKE T706U-BETFA. SUM_NPT_AC.
V_MTB_NUM_NPT_AC = V_MTB_NUM_NPT_AC + I_ACUM-
DATA: BEGIN OF I_ACUM_FORNEC OCCURS 0, NUM_NPT_AC.
LIFNR LIKE QALS-LIFNR, V_MTB_SUM_PPM01_AC = V_MTB_SUM_PPM01_AC + I_ACUM-
SUM_PPM89_M LIKE T706U-BETFA, SUM_PPM01_AC.
SUM_PPM89_AC LIKE T706U-BETFA, V_MTB_SUM_ATRAS_AC = V_MTB_SUM_ATRAS_AC + I_ACUM-
NUM_NFL_M LIKE T706U-BETFA, SUM_ATRAS_AC.
NUM_NFL_AC LIKE T706U-BETFA, V_MTB_SUM_EMDIA_AC = V_MTB_SUM_EMDIA_AC + I_ACUM-
SUM_NFL_M LIKE T706U-BETFA, SUM_EMDIA_AC.
63
ABAP Training
ENDIF.
* calcula nota de pontualidade.
AT END OF CENTRO. V_TOT_NPT_AC = I_ACUM_CENTRO-SUM_NPT /
I_ACUM_CENTRO-CENTRO = I_ACUM-CENTRO. I_ACUM_CENTRO-NUM_NPT.
I_ACUM_CENTRO-SUM_PPM89 = V_CENT_SUM_PPM89_AC.
I_ACUM_CENTRO-NUM_NFL = V_CENT_NUM_NFL_AC. IF V_TOT_NPT_AC > 100.
I_ACUM_CENTRO-SUM_NFL = V_CENT_SUM_NFL_AC. V_TOT_NPT_AC = 100.
I_ACUM_CENTRO-SUM_LOT = V_CENT_SUM_LOT_AC. ENDIF.
I_ACUM_CENTRO-SUM_NPT = V_CENT_SUM_NPT_AC.
I_ACUM_CENTRO-NUM_NPT = V_CENT_NUM_NPT_AC. IF V_TOT_NPT_AC < 0.
I_ACUM_CENTRO-SUM_PPM01 = V_CENT_SUM_PPM01_AC. V_TOT_NPT_AC = 0.
I_ACUM_CENTRO-SUM_ATRAS = V_CENT_SUM_ATRAS_AC. ENDIF.
I_ACUM_CENTRO-SUM_EMDIA = V_CENT_SUM_EMDIA_AC. * calculo do NCQ acumulado.
64
ABAP Training
IF I_TOT_CENTRO-NFL = ' ' AND I_TOT_CENTRO-NPR = ' '. * calculo do NCQ acumulado.
I_TOT_CENTRO-NQF = ' '. V_TOT_NOTAS_AC = V_MTB_SUM_EMDIA_AC +
ELSE. V_MTB_SUM_ATRAS_AC.
IF V_TOT_POND <> 0.
V_TOT_NQF_AC = ( ( I_TOT_CENTRO-NFL * V_FATOR_NFL ) + IF V_TOT_NOTAS_AC > 0.
( I_TOT_CENTRO-NPR * V_FATOR_NPR ) + V_TOT_NCQ_AC = ( V_MTB_SUM_EMDIA_AC /
( I_TOT_CENTRO-NCQ * V_FATOR_NCQ ) ) / V_TOT_NOTAS_AC ) * 100.
V_TOT_POND. ELSE.
WRITE V_TOT_NQF_AC TO I_TOT_CENTRO-NQF DECIMALS 0. V_TOT_NCQ_AC = 100.
ENDIF. ENDIF.
ENDIF. * Grava os dados para a estrutura i_acum_MTB
65
ABAP Training
* Insere elemento na tabela para funcionar comando on change. V_FORNEC_NUM_NFL_AC = V_FORNEC_NUM_NFL_AC +
I_ACUM-LIFNR = '999999999'. I_ACUM-NUM_NFL_AC.
APPEND I_ACUM. V_FORNEC_SUM_NFL_M = V_FORNEC_SUM_NFL_M + I_ACUM-
SORT I_ACUM BY LIFNR. SUM_NFL_M.
LOOP AT I_ACUM. V_FORNEC_SUM_NFL_AC = V_FORNEC_SUM_NFL_AC +
ON CHANGE OF I_ACUM-LIFNR. I_ACUM-SUM_NFL_AC.
IF V_PRIM_VEZ NE 0. V_FORNEC_SUM_LOT_M = V_FORNEC_SUM_LOT_M + I_ACUM-
I_ACUM_FORNEC-LIFNR = V_FORNEC_LIFNR. SUM_LOT_M.
I_ACUM_FORNEC-SUM_PPM89_M = V_FORNEC_SUM_PPM89_M. V_FORNEC_SUM_LOT_AC = V_FORNEC_SUM_LOT_AC +
I_ACUM_FORNEC-SUM_PPM89_AC = I_ACUM-SUM_LOT_AC.
V_FORNEC_SUM_PPM89_AC. V_FORNEC_SUM_NPT_M = V_FORNEC_SUM_NPT_M + I_ACUM-
I_ACUM_FORNEC-NUM_NFL_M = V_FORNEC_NUM_NFL_M. SUM_NPT_M.
I_ACUM_FORNEC-NUM_NFL_AC = V_FORNEC_NUM_NFL_AC. V_FORNEC_SUM_NPT_AC = V_FORNEC_SUM_NPT_AC +
I_ACUM_FORNEC-SUM_NFL_M = V_FORNEC_SUM_NFL_M. I_ACUM-SUM_NPT_AC.
I_ACUM_FORNEC-SUM_NFL_AC = V_FORNEC_SUM_NFL_AC. V_FORNEC_NUM_NPT_M = V_FORNEC_NUM_NPT_M + I_ACUM-
I_ACUM_FORNEC-SUM_LOT_M = V_FORNEC_SUM_LOT_M. NUM_NPT_M.
I_ACUM_FORNEC-SUM_LOT_AC = V_FORNEC_SUM_LOT_AC. V_FORNEC_NUM_NPT_AC = V_FORNEC_NUM_NPT_AC +
I_ACUM_FORNEC-SUM_NPT_M = V_FORNEC_SUM_NPT_M. I_ACUM-NUM_NPT_AC.
I_ACUM_FORNEC-SUM_NPT_AC = V_FORNEC_SUM_NPT_AC. V_FORNEC_SUM_PPM01_M = V_FORNEC_SUM_PPM01_M +
I_ACUM_FORNEC-NUM_NPT_M = V_FORNEC_NUM_NPT_M. I_ACUM-SUM_PPM01_M.
I_ACUM_FORNEC-NUM_NPT_AC = V_FORNEC_NUM_NPT_AC. V_FORNEC_SUM_PPM01_AC = V_FORNEC_SUM_PPM01_AC +
I_ACUM_FORNEC-SUM_PPM01_M = V_FORNEC_SUM_PPM01_M. I_ACUM-SUM_PPM01_AC.
I_ACUM_FORNEC-SUM_PPM01_AC = V_FORNEC_SUM_ATRAS_M = V_FORNEC_SUM_ATRAS_M +
V_FORNEC_SUM_PPM01_AC. I_ACUM-SUM_ATRAS_M.
I_ACUM_FORNEC-SUM_ATRAS_M = V_FORNEC_SUM_ATRAS_M. V_FORNEC_SUM_ATRAS_AC = V_FORNEC_SUM_ATRAS_AC +
I_ACUM_FORNEC-SUM_ATRAS_AC = I_ACUM-SUM_ATRAS_AC.
V_FORNEC_SUM_ATRAS_AC. V_FORNEC_SUM_EMDIA_M = V_FORNEC_SUM_EMDIA_M +
I_ACUM_FORNEC-SUM_EMDIA_M = I_ACUM-SUM_EMDIA_M.
V_FORNEC_SUM_EMDIA_M. V_FORNEC_SUM_EMDIA_AC = V_FORNEC_SUM_EMDIA_AC +
I_ACUM_FORNEC-SUM_EMDIA_AC = I_ACUM-SUM_EMDIA_AC.
V_FORNEC_SUM_EMDIA_AC.
V_PRIM_VEZ = 1.
APPEND I_ACUM_FORNEC. V_FORNEC_LIFNR = I_ACUM-LIFNR.
CLEAR I_ACUM_FORNEC. ENDLOOP.
CLEAR: V_FORNEC_SUM_PPM89_M,
V_FORNEC_SUM_PPM89_AC, CLEAR: V_TOT_NFL_M, V_TOT_NFL_AC,
V_FORNEC_NUM_NFL_M, V_TOT_LOT_M, V_TOT_LOT_AC,
V_FORNEC_NUM_NFL_AC, V_TOT_PPM_M, V_TOT_PPM_AC,
V_FORNEC_SUM_NFL_M, V_TOT_NPR_M, V_TOT_NPR_AC,
V_FORNEC_SUM_NFL_AC, V_TOT_NPT_M, V_TOT_NPT_AC,
V_FORNEC_SUM_LOT_M, V_TOT_NOTAS_M, V_TOT_NOTAS_AC,
V_FORNEC_SUM_LOT_AC, V_TOT_NCQ_M, V_TOT_NCQ_AC.
V_FORNEC_SUM_NPT_M, * Cálculo dos dados por fornecedor.
V_FORNEC_SUM_NPT_AC,
V_FORNEC_NUM_NPT_M, LOOP AT I_ACUM_FORNEC.
V_FORNEC_NUM_NPT_AC, * Fornecedor
V_FORNEC_SUM_PPM01_M, I_TOT_FORNEC-LIFNR = I_ACUM_FORNEC-LIFNR.
V_FORNEC_SUM_PPM01_AC, * calcula nota de fornecimento-mes.
V_FORNEC_SUM_ATRAS_M, IF I_ACUM_FORNEC-NUM_NFL_M > 0.
V_FORNEC_SUM_ATRAS_AC, V_CHECK_NFL_M = ' '.
V_FORNEC_SUM_EMDIA_M, V_TOT_NFL_M = I_ACUM_FORNEC-SUM_NFL_M /
V_FORNEC_SUM_EMDIA_AC. I_ACUM_FORNEC-NUM_NFL_M.
ENDIF. V_TOT_LOT_M = 100 - ( I_ACUM_FORNEC-SUM_LOT_M /
I_ACUM_FORNEC-NUM_NFL_M ).
ENDON. ELSE.
V_FORNEC_SUM_PPM89_M = V_FORNEC_SUM_PPM89_M + V_CHECK_NFL_M = 'X'.
I_ACUM-SUM_PPM89_M. ENDIF.
V_FORNEC_SUM_PPM89_AC = V_FORNEC_SUM_PPM89_AC +
I_ACUM-SUM_PPM89_AC. * calcula nota de fornecimento-acumulado.
V_FORNEC_NUM_NFL_M = V_FORNEC_NUM_NFL_M + I_ACUM- IF I_ACUM_FORNEC-NUM_NFL_AC > 0.
NUM_NFL_M. V_CHECK_NFL_AC = ' '.
66
ABAP Training
V_TOT_NFL_AC = I_ACUM_FORNEC-SUM_NFL_AC /
I_ACUM_FORNEC-NUM_NFL_AC. * calculo do NCQ acumulado.
V_TOT_LOT_AC = 100 - ( I_ACUM_FORNEC-SUM_LOT_AC / V_TOT_NOTAS_AC = i_acum_fornec-SUM_EMDIA_AC
I_ACUM_FORNEC-NUM_NFL_AC ) . + I_ACUM_FORNEC-SUM_ATRAS_AC.
ELSE.
V_CHECK_NFL_AC = 'X'. IF V_TOT_NOTAS_AC > 0.
ENDIF. V_TOT_NCQ_AC = ( I_ACUM_FORNEC-SUM_EMDIA_AC
/ V_TOT_NOTAS_AC ) * 100.
* calcula nota processo-mes. ELSE.
IF I_ACUM_FORNEC-SUM_PPM01_M > 0. V_TOT_NCQ_AC = 100.
V_TOT_PPM_M = ( i_acum_fornec-SUM_PPM89_M ENDIF.
/ I_ACUM_FORNEC-SUM_PPM01_M ) * C_MI. * Grava os dados para a estrutura i_tot_fornec
ENDIF. * grava nota de fornecimento-mes.
V_TOT_NPR_M = 100 - ( V_TOT_PPM_M / 100 ). IF V_CHECK_NFL_M = 'X'.
I_TOT_FORNEC-NFL_M = ' '.
IF V_TOT_NPR_M < 0. I_TOT_FORNEC-LOT_M = ' '.
V_TOT_NPR_M = 0. ELSE.
ENDIF. WRITE V_TOT_NFL_M TO I_TOT_FORNEC-NFL_M DECIMALS 0
RIGHT-JUSTIFIED.
* calcula nota processo-acumulado. WRITE V_TOT_LOT_M TO I_TOT_FORNEC-LOT_M DECIMALS 2
IF I_ACUM_FORNEC-SUM_PPM01_AC > 0. RIGHT-JUSTIFIED.
V_TOT_PPM_AC = ( I_ACUM_FORNEC-SUM_PPM89_AC ENDIF.
/ I_ACUM_FORNEC-SUM_PPM01_AC ) * C_MI.
ENDIF. * grava nota de fornecimento - acumulado.
V_TOT_NPR_AC = 100 - ( V_TOT_PPM_AC / 100 ). IF V_CHECK_NFL_AC = 'X'.
I_TOT_FORNEC-NFL_AC = ' '.
IF V_TOT_NPR_AC < 0. I_TOT_FORNEC-LOT_AC = ' '.
V_TOT_NPR_AC = 0. ELSE.
ENDIF. WRITE V_TOT_NFL_AC TO I_TOT_FORNEC-NFL_AC DECIMALS 0
RIGHT-JUSTIFIED.
* calcula nota de pontualidade. WRITE V_TOT_LOT_AC TO I_TOT_FORNEC-LOT_AC DECIMALS 2
V_TOT_NPT_M = I_ACUM_FORNEC-SUM_NPT_M / RIGHT-JUSTIFIED.
I_ACUM_FORNEC-NUM_NPT_M. ENDIF.
V_TOT_NPT_AC = I_ACUM_FORNEC-SUM_NPT_AC /
I_ACUM_FORNEC-NUM_NPT_AC. * grava nota de processo - mes
IF V_TOT_NPT_M > 100. IF V_CHECK_NFL_M = 'X'.
V_TOT_NPT_M = 100. I_TOT_FORNEC-PPM_M = ' '.
ENDIF. I_TOT_FORNEC-NPR_M = ' '.
ELSE.
IF V_TOT_NPT_M < 0. WRITE V_TOT_PPM_M TO I_TOT_FORNEC-PPM_M DECIMALS 0
V_TOT_NPT_M = 0. RIGHT-JUSTIFIED.
ENDIF. WRITE V_TOT_NPR_M TO I_TOT_FORNEC-NPR_M DECIMALS 0
RIGHT-JUSTIFIED.
ENDIF.
IF V_TOT_NPT_AC > 100.
V_TOT_NPT_AC = 100. * grava nota processo - acumulado.
ENDIF. IF V_CHECK_NFL_AC = 'X'.
I_TOT_FORNEC-PPM_AC = ' '.
IF V_TOT_NPT_AC < 0. I_TOT_FORNEC-NPR_AC = ' '.
V_TOT_NPT_AC = 0. ELSE.
ENDIF. WRITE V_TOT_PPM_AC TO I_TOT_FORNEC-PPM_AC DECIMALS 0
* calculo do NCQ mes. RIGHT-JUSTIFIED.
V_TOT_NOTAS_M = I_ACUM_FORNEC-SUM_EMDIA_M + WRITE V_TOT_NPR_AC TO I_TOT_FORNEC-NPR_AC DECIMALS 0
I_ACUM_FORNEC-SUM_ATRAS_M. RIGHT-JUSTIFIED.
ENDIF.
IF V_TOT_NOTAS_M > 0.
V_TOT_NCQ_M = ( I_ACUM_FORNEC-SUM_EMDIA_M / * grava nota de pontualidade - mes.
V_TOT_NOTAS_M ) * 100. WRITE V_TOT_NPT_M TO I_TOT_FORNEC-NPT_M DECIMALS 0
ELSE. RIGHT-JUSTIFIED.
V_TOT_NCQ_M = 100.
ENDIF. * grava nota de pontualidade - acumulado.
67
ABAP Training
WRITE V_TOT_NPT_AC TO I_TOT_FORNEC-NPT_AC DECIMALS 0
RIGHT-JUSTIFIED. SORT I_TABFIM BY LIFNR WERKS.
68
ABAP Training
PERFORM F_PRINT_TOTAL_ACUM_SOPPM.
ELSEIF SO_CENT NE '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. ENDFORM.
PERFORM F_PRINT_TOTAL_CENTRO_SOPPM. *----------------------------------------------------------------------*
ENDIF. * Form f_print_total_soppm.
ENDFORM. " F_PRINT_SOPPM *----------------------------------------------------------------------*
* Imprime total do rel. somente PPM e Lote
*&---------------------------------------------------------------------* *----------------------------------------------------------------------*
*& Form F_PRINT_RSUM FORM F_PRINT_TOTAL_SOPPM.
*&---------------------------------------------------------------------*
* imprime relatório sumarizado * FORMAT COLOR COL_TOTAL.
*----------------------------------------------------------------------* WRITE: /05 'Acum mês MTB ',
FORM F_PRINT_RSUM. 107 I_TOT_FORNEC-PPM_M,
IF SO_CENT EQ '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. 137 I_TOT_FORNEC-LOT_M,
PERFORM F_PRINT_TOTAL_FINAL. 170 ' '.
PERFORM F_PRINT_TOTAL_ACUM.
ELSEIF SO_CENT NE '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. WRITE: /05 'Acum MTB(' NO-GAP, P_PERIOD, 'meses)',
PERFORM F_PRINT_TOTAL_FINAL. 107 I_TOT_FORNEC-PPM_AC,
ELSE. 137 I_TOT_FORNEC-LOT_AC,
MESSAGE E083 WITH 'Não é possível imprimir' 170 ' '.
'com o modo de apresentação' FORMAT COLOR COL_NORMAL.
'escolhido'.
ENDIF. ENDFORM.
69
ABAP Training
56,00 CH Left-aligned
60,00 CH Left-aligned
-------------------------------------------------------------------------------- FO
Characters Attributes Standard attributes
-------------------------------------------------------------------------------- Line spacing 1,00 LN
Alignment Left-aligned
B Bold print Font attributes
Standard attributes Font family COURIER
Marker No Font size 6,0 Point
Font attributes
Bold Yes P0 par. cabeçalho verso
Standard attributes
I Italics Line spacing 1,00 LN
Font attributes Alignment Left-aligned
Italic Yes Font attributes
Font family COURIER
K Key word Font size 6,0 Point
Font attributes Tabs
Font family HELVE 1,00 CM Left-aligned
Font size 10,0 Point 4,50 CM Left-aligned
5,50 CM Left-aligned
LP 7,60 CM Left-aligned
Font attributes 12,70 CM Left-aligned
Font family COURIER
Font size 8,0 Point P1 PARÁGRAFO HEADER
Standard attributes
S Key word (lower case) Line spacing 1,00 LN
Font attributes Alignment Left-aligned
Font family HELVE Font attributes
Font size 8,0 Point Font family COURIER
Font size 10,0 Point
U Underlined Tabs
Font attributes 30,00 CH Left-aligned
Underlined Yes 44,00 CH Left-aligned
50,00 CH Left-aligned
62,00 CH Left-aligned
--------------------------------------------------------------------------------
Paragraphs Attributes P2
-------------------------------------------------------------------------------- Standard attributes
Line spacing 1,00 LN
AS Standard Alignment Left-aligned
Standard attributes Font attributes
Line spacing 1,00 LN Font family COURIER
Alignment Left-aligned Font size 10,0 Point
Tabs Tabs
12,00 CH Left-aligned 20,00 CH Left-aligned
35,00 CH Left-aligned 25,00 CH Left-aligned
30,00 CH Left-aligned
DE Detalhe 35,00 CH Left-aligned
Standard attributes 40,00 CH Left-aligned
Line spacing 1,00 LN 45,00 CH Left-aligned
Alignment Left-aligned
Font attributes P3
Font family HELVE Standard attributes
Font size 10,0 Point Line spacing 1,00 LN
Tabs Alignment Left-aligned
11,00 CH Left-aligned Font attributes
16,00 CH Left-aligned Font family COURIER
26,00 CH Left-aligned Font size 10,0 Point
46,00 CH Left-aligned Tabs
70
ABAP Training
2,00 CH Left-aligned 4,50 CM Left-aligned
37,00 CH Left-aligned 5,50 CM Left-aligned
42,00 CH Left-aligned 7,60 CM Left-aligned
47,00 CH Left-aligned 12,70 CM Left-aligned
52,00 CH Left-aligned
57,00 CH Left-aligned T3 Tabulator for line items
62,00 CH Left-aligned Standard attributes
Line spacing 1,00 LN
P4 No blank lines Yes
Standard attributes Alignment Left-aligned
Line spacing 1,00 LN Tabs
Alignment Left-aligned 3,00 CM Left-aligned
Font attributes 6,00 CM Left-aligned
Font family COURIER 11,00 CM Sign, right-aligned
Font size 10,0 Point 12,00 CM Left-aligned
Tabs 16,50 CM Right-aligned
2,00 CH Left-aligned 17,00 CM Left-aligned
33,00 CH Left-aligned
39,00 CH Left-aligned TI Title in info window
45,00 CH Left-aligned Standard attributes
51,00 CH Left-aligned Line spacing 1,00 LN
57,00 CH Left-aligned Alignment Left-aligned
63,00 CH Left-aligned Font attributes
Font family HELVE
P5 Font size 14,0 Point
Standard attributes Bold Yes
Line spacing 1,00 LN
Alignment Left-aligned UL Separator
Font attributes Standard attributes
Font family COURIER Line spacing 0,50 LN
Font size 8,0 Point Space after 0,50 LN
Tabs Alignment Left-aligned
2,00 CH Left-aligned Font attributes
33,00 CH Left-aligned Font family COURIER
39,00 CH Left-aligned Font size 12,0 Point
45,00 CH Left-aligned Underlined No
51,00 CH Left-aligned
57,00 CH Left-aligned
63,00 CH Left-aligned --------------------------------------------------------------------------------
Windows Attributes
P6 --------------------------------------------------------------------------------
Standard attributes
Line spacing 1,00 LN FOOTER rodapé
Alignment Left-aligned Window type CONST
Font attributes
Font family COURIER HEADER cabeçalho
Font size 6,0 Point Window type CONST
Tabs
1,00 CH Left-aligned INFO3 Endereço
24,00 CH Left-aligned Window type VAR
50,00 CH Left-aligned
MAIN Janela Principal
P7 Window type MAIN
Standard attributes
Line spacing 0,45 LN
Alignment Left-aligned --------------------------------------------------------------------------------
Font attributes Pages Attributes
Font family COURIER --------------------------------------------------------------------------------
Font size 6,0 Point
Tabs FIRST Payment reminder: 1st page
1,00 CM Left-aligned Standard attributes
71
ABAP Training
Next page VERSO P1 ,,ATIVO NO MÊS,,: &ZSAPSCRIP2-ATIVO&,,PPM
Page counter ACUMULADO,,:&ZSAPSCRIP2-PPM_AC&
Mode INC
Numbering type Arabic numerals
Page window
MAIN Left margin 4,00 CH INFO3
Upper margin 10,00 LN
Window width 70,00 CH /* Criado por Antonio Celso Hunnicutt Cortada - 16/02/2001
Window height 55,00 LN /* Relatório de Avaliação de Forncedore - Português
FOOTER Left margin 4,00 CH /* Request :MD0K914497
Upper margin 65,00 LN /* ************************************************************************
Window width 70,00 CH /: BOX XPOS '0.5' CM YPOS '0.3' LN WIDTH '16.5' CM HEIGHT '1.2' LN
Window height 4,00 LN FRAME 10 TW
HEADER Left margin 4,00 CH /: BOX XPOS '0.5' CM YPOS '1.5' LN WIDTH '3.5' CM HEIGHT 6 LN
Upper margin 2,00 LN FRAME 10 TW
Window width 70,00 CH /: BOX XPOS '4' CM YPOS '1.5' LN WIDTH '3.5' CM HEIGHT 6 LN
Window height 8,00 LN FRAME 10 TW
/: BOX XPOS '7.5' CM YPOS '1.5' LN WIDTH 5 CM HEIGHT 3 LN FRAME
VERSO Verso da carta 10 TW
Standard attributes /: BOX XPOS '7.5' CM YPOS '1.5' LN WIDTH 5 CM HEIGHT 6 LN FRAME
Next page FIRST 10 TW
Page counter /: BOX XPOS '12.5' CM YPOS '1.5' LN WIDTH '4.5' CM HEIGHT 6 LN
Mode START FRAME 10 TW
Numbering type Arabic numerals /*
Page window /*
INFO3 Left margin 4,00 CH P0 ,,,, <K><B>PARA USO DO CORREIO</></>
Upper margin 2,00 LN /: BOX XPOS '0.7' CM YPOS '2.5' LN WIDTH 01 CH HEIGHT 3 MM
Window width 70,00 CH FRAME 10 TW
Window height 58,00 LN /: BOX XPOS '4.2' CM YPOS '2.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
P0 ,,,,,,,,DATA,,ASSINATURA E Nº ENTREGADOR
-------------------------------------------------------------------------------- P0 ,, MUDOU-SE,, NÃO PROCURADO
Text elements for following windows: /: BOX XPOS '0.7' CM YPOS '3.5' LN WIDTH 01 CH HEIGHT 3 MM
-------------------------------------------------------------------------------- FRAME 10 TW
/: BOX XPOS '4.2' CM YPOS '3.5' LN WIDTH 01 CH HEIGHT 3 MM
FOOTER FRAME 10 TW
P0 ,, ENDEREÇO INSUF.,, AUSENTE
P6 ,,NQF=NOTA DA QUALIDADE DE FORNECIMENTO,,NAS=NOTA /: BOX XPOS '0.7' CM YPOS '4.5' LN WIDTH 01 CH HEIGHT 3 MM
DA AVALIAÇÃO DE FRAME 10 TW
SISTEMA /: BOX XPOS '4.2' CM YPOS '4.5' LN WIDTH 01 CH HEIGHT 3 MM
P6 ,,NFL=NOTA DE FORNECIMENTO DE LOTES,,NCQ=NOTA FRAME 10 TW
COMPROM. COM QUALIDADE P0 ,, NÃO EXISTE,, FALECIDO,,,,REINTEGRADO AO SERVIÇO POSTAL
(ITENS) EM
P6 ,,NPR=NOTA DE PROCESSO(PPM DE LINHA),,NPT=NOTA DE /: BOX XPOS '0.7' CM YPOS '5.5' LN WIDTH 01 CH HEIGHT 3 MM
PONTUALIDADE FRAME 10 TW
/: BOX XPOS '4.2' CM YPOS '5.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
P0 ,, DESCONHECIDO,, INFORMAÇÃO ESCRITA
HEADER P0 ,, RECUSADO,,P/ PORTEIRO/SÍNDICO
/: BOX XPOS '0.7' CM YPOS '6.5' LN WIDTH 01 CH HEIGHT 3 MM
/: INCLUDE TESTE3 OBJECT TEXT ID ST FRAME 10 TW
/: BOX YPOS '0.3' LN WIDTH '72' CH HEIGHT '63' LN FRAME 10 TW AS
/: BOX YPOS '0.3' LN WIDTH '7.2' CM HEIGHT '5' LN FRAME 10 TW AS
P1 ,,RELATÓRIO DE AVALIAÇÃO DO FORNECEDOR AS
P1 ,,DATA DE REFERÊNCIA : &ZSAPSCRIP2-DATA_REF& AS
P1 ,,ACUMULADO DE : &ZSAPSCRIP2-ACUM_DT1& ATÉ AS
&ZSAPSCRIP2-ACUM_DT2& /: INCLUDE TESTE3 OBJECT TEXT ID ST
P1 ,,FORN: &zsapscrip2-lifnr& AS
P1 ,,&ZSAPSCRIP2-NAMEF& AS
P1 ,,AVALIADO,,: &ZSAPSCRIP2-AVALIA&,,PPM MÊS,,:&ZSAPSCRIP2- /: BOX XPOS 1 CH YPOS 19 LN WIDTH 67 CH HEIGHT 06 LN
PPM_M& INTENSITY 35
72
ABAP Training
/: BOX XPOS 1 CH YPOS 25 LN WIDTH 09 CH HEIGHT 6 LN AS <K>,, ESTADO : &ZSAPSCRIP2-REM_REG&,, &ZSAPSCRIP2-
INTENSITY 35 REM_PAIS&
/: BOX XPOS 10 CH YPOS 25 LN WIDTH 50 CH HEIGHT 6 LN FRAME AS <K>,, ÁREA DE SUPRIMENTOS
10 TW INTENSITY 0
/: BOX XPOS 60 CH YPOS 25 LN WIDTH 8 CH HEIGHT 6 LN
INTENSITY 35
/: BOX XPOS 1 CH YPOS 31 LN WIDTH 67 CH HEIGHT 08 LN MAIN
INTENSITY 35
/* /* Criado por Antonio Celso Hunnicutt Cortada - 16/02/2001
/: BOX XPOS 1 CH YPOS 42 LN WIDTH 67 CH HEIGHT 8 LN /* Relatório de Avaliação de Forncedore - Português
INTENSITY 35 /* Request :MD0K914497
/: BOX XPOS 1 CH YPOS 50 LN WIDTH 09 CH HEIGHT 6 LN /* Alteração Funcional - Inclusão NPT por Unidade - MD0K915742
INTENSITY 35 /* Correção - MD0K915748
/: BOX XPOS 10 CH YPOS 50 LN WIDTH 50 CH HEIGHT 6 LN FRAME /* Alteração Funcional - Modificação NPT - MD0K915806
10 TW INTENSITY 0 /* Ajuste do layout - MD0K915848
/: BOX XPOS 60 CH YPOS 50 LN WIDTH 8 CH HEIGHT 6 LN /* ************************************************************************
INTENSITY 35
/: BOX XPOS 1 CH YPOS 56 LN WIDTH 67 CH HEIGHT 02 LN Element RESUMO_TODAS_UNIDADES
INTENSITY 35 /: BOX XPOS '19.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '6' LN
/ FRAME 10 TW
/ /: BOX XPOS '24.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '6' LN
/ FRAME 10 TW
/ /: BOX XPOS '29.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '6' LN
/ FRAME 10 TW
/ /: BOX XPOS '34.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '6' LN
/ FRAME 10 TW
/ /: BOX XPOS '39.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '6' LN
/ FRAME 10 TW
/ /: BOX XPOS '44.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '6' LN
/ FRAME 10 TW
AS <K>,, &ZSAPSCRIP2-DEST_NAME& /: BOX XPOS '19.5' CH YPOS '1.3' LN WIDTH '30' CH HEIGHT '1' LN
AS <K>,, &ZSAPSCRIP2-DEST_RUA& &ZSAPSCRIP2-DEST_CAIXA& FRAME 10 TW
AS <K>,, CEP: &ZSAPSCRIP2-DEST_CEP& &ZSAPSCRIP2- /: BOX XPOS '34.5' CH YPOS '2.3' LN WIDTH '15' CH HEIGHT '1' LN
DEST_CITY& FRAME 10 TW
AS <K>,, ESTADO : &ZSAPSCRIP2-DEST_REG&,, &ZSAPSCRIP2- /: BOX XPOS '34.5' CH YPOS '3.3' LN WIDTH '15' CH HEIGHT '1' LN
DEST_PAIS& FRAME 10 TW
AS <K>,, A/C DEPTO. VENDAS /: BOX XPOS '34.5' CH YPOS '4.3' LN WIDTH '15' CH HEIGHT '1' LN
/ FRAME 10 TW
/ /: BOX XPOS '19.5' CH YPOS '5.3' LN WIDTH '30' CH HEIGHT '1' LN
/ FRAME 10 TW
/ /: BOX XPOS '19.5' CH YPOS '6.3' LN WIDTH '30' CH HEIGHT '1' LN
/ FRAME 10 TW
/ P2 ,, ***RESUMO DE TODAS AS UNIDADES***
/ P2 ,,NOTA,,MÊS,,ACU,,NOTA,,MÊS,,ACU
/ P2 ,,NQF,,<LP>&ZSAPSCRIP2-NQF_M_T&,,&ZSAPSCRIP2-
/ NQF_AC_T&</>,,NFL
/ ,,<LP>&ZSAPSCRIP2-NFL_M_T&,,&ZSAPSCRIP2-NFL_AC_T&</>
/ P2 ,,,,,,,,NPR,,<LP>&ZSAPSCRIP2-NPR_M_T&,,&ZSAPSCRIP2-
/ NPR_AC_T&</>
/ P2 ,,,,,,,,NCQ,,<LP>&ZSAPSCRIP2-NCQ_M_T&,,&ZSAPSCRIP2-
/ NCQ_AC_T&</>
/ P2 ,,NAS,, <LP>&ZSAPSCRIP2-NAS_M_T&</>,,-,,-,,-,,-
/ P2 ,,NPT,, <LP>&ZSAPSCRIP2-NPT_M_T&</>,, <LP>&ZSAPSCRIP2-
/ NPT_AC_T&</>
/
AS Element RESUMO_POR_UNIDADE
AS /: PROTECT
AS <K>,, &ZSAPSCRIP2-REM_NAME& /: IF &ZSAPSCRIP2-CONT& > 253
AS <K>,, &ZSAPSCRIP2-REM_RUA& &ZSAPSCRIP2-REM_CAIXA& /: POSITION YORIGIN '12.7' MM
AS <K>,, CEP: &ZSAPSCRIP2-REM_CEP& &ZSAPSCRIP2-REM_CITY& /: ENDIF
73
ABAP Training
/: BOX XPOS '36.5' CH YPOS '9.3' LN WIDTH '10' CH HEIGHT '1' LN P3 ,,,,,,,,NCQ,,<LP>&ZSAPSCRIP2-NCQ_M&,,&ZSAPSCRIP2-
FRAME 10 TW NCQ_AC&</>
/: BOX XPOS '61.5' CH YPOS '9.3' LN WIDTH '7' CH HEIGHT '2' LN /: ENDPROTECT
FRAME 10 TW
/: BOX XPOS '1.5' CH YPOS '10.3' LN WIDTH '35' CH HEIGHT '1' LN Element RESUMO_INDICES_PPM
FRAME 10 TW /: PROTECT
/: BOX XPOS '36.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN /: IF &ZSAPSCRIP2-CONT& > 270
FRAME 10 TW /: POSITION YORIGIN '29.6' MM
/: BOX XPOS '41.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN /: ENDIF
FRAME 10 TW /: BOX XPOS '32.5' CH YPOS '5.3' LN WIDTH '18' CH HEIGHT '2' LN
/: BOX XPOS '46.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '50.5' CH YPOS '5.3' LN WIDTH '18' CH HEIGHT '2' LN
/: BOX XPOS '51.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '1.5' CH YPOS '6.3' LN WIDTH '67' CH HEIGHT 1 LN
/: BOX XPOS '56.5' CH YPOS '10.3' LN WIDTH 12 CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '38.5' CH YPOS '6.3' LN WIDTH '6' CH HEIGHT '1' LN
P2 FRAME 10 TW
P2 ,, ***RESUMO POR UNIDADE*** /: BOX XPOS '56.5' CH YPOS '6.3' LN WIDTH '6' CH HEIGHT '1' LN
P3 ,,,, N.Q.F.,,,,,,,,,, NPT FRAME 10 TW
P3 ,,UNIDADE,,MÊS,,ACU,,NOTA,,MÊS,,ACU,,MÊS/ACU P4
/: ENDPROTECT P4 ,, *** RESUMO DOS ÍNDICES DE PPM DE LINHA E % REJEIÇÃO DE
LOTE NO
Element DETALHE_RESUMO_POR_UNIDADE RECEBIMENTO ***
/: PROTECT P4 ,,,, PPM DE LINHA,,,,,, % REJEIÇÃO LOTE
/: POSITION YORIGIN &ZSAPSCRIP2-CONT& MM P4 ,,UNIDADE,,MÊS,,ACU,,OBJ,,MÊS,,ACU,,OBJ
/: BOX XPOS '1.5' CH YPOS '0.3' LN WIDTH '35' CH HEIGHT '3' LN /: ENDPROTECT
FRAME 10 TW
/: BOX XPOS '36.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '3' LN Element DETALHE_RESUMO_INDICES_PPM
FRAME 10 TW /: POSITION YORIGIN &ZSAPSCRIP2-CONT& MM
/: BOX XPOS '41.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '3' LN /: PROTECT
FRAME 10 TW /: BOX XPOS '1.5' CH YPOS '0.3' LN WIDTH '31' CH HEIGHT '1' LN
/: BOX XPOS '46.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '32.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN
/: BOX XPOS '46.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '38.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN
/: BOX XPOS '46.5' CH YPOS '2.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '44.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN
/: BOX XPOS '51.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '50.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN
/: BOX XPOS '51.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '56.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN
/: BOX XPOS '51.5' CH YPOS '2.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW /: BOX XPOS '62.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN
/: BOX XPOS '56.5' CH YPOS '0.3' LN WIDTH 5 CH HEIGHT '1' LN FRAME 10 TW
FRAME 10 TW P5 ,,&ZSAPSCRIP2-NAMEC&,,&ZSAPSCRIP2-
/: BOX XPOS '56.5' CH YPOS '1.3' LN WIDTH 5 CH HEIGHT '1' LN PPM_M_I&,,&ZSAPSCRIP2-PPM_AC_I&
FRAME 10 TW ,,&ZSAPSCRIP2-PPM_OBJ_R&,,&ZSAPSCRIP2-LOT_M&
/: BOX XPOS '56.5' CH YPOS '2.3' LN WIDTH 5 CH HEIGHT '1' LN ,,&ZSAPSCRIP2-LOT_AC&,,&ZSAPSCRIP2-LOT_OBJ_R&
FRAME 10 TW /: ENDPROTECT
/: BOX XPOS '61.5' CH YPOS '0.3' LN WIDTH '7' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '61.5' CH YPOS '1.3' LN WIDTH '7' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '61.5' CH YPOS '2.3' LN WIDTH '7' CH HEIGHT '1' LN
FRAME 10 TW
P3 ,,<LP>&ZSAPSCRIP2-NAMEC&,,&ZSAPSCRIP2-NQF_M&
,,&ZSAPSCRIP2-NQF_AC&</>,,NFL,,<LP>&ZSAPSCRIP2-NFL_M&
,,&ZSAPSCRIP2-NFL_AC&,,&ZSAPSCRIP2-NPT_M&/&ZSAPSCRIP2-
NPT_AC&</>
P3 ,,,,,,,,NPR,,<LP>&ZSAPSCRIP2-NPR_M&,,&ZSAPSCRIP2-
NPR_AC&</>
74
ABAP Training
EXERCÍCIOS
SAPSCRIPT
75
ABAP Training
Exercício 1:
Tabelas: MARA
MARC
MAKT
Fazer a quebra do relatório por centro (Pode-se usar os seguintes comandos para fazer
isso: ON CHANGE, AT END ou AT NEW. Atenção às peculiaridades de cada comando).
Dica: para fazer os quadros ao redor dos itens, não utilizar o comando BOX, usar a
alternativa apresentada anteriormente na apostila. Nos demais locais, utilizar esse
comando.
76
ABAP Training
MATERIAIS
Centro: xxxxxxxx data: dd/mm/aaaa
77
ABAP Training
Resolução 1:
1) Report:
************************************************************************
* *
* ******************************************** *
* * Confidencial e P roprietário * *
* * Copyright 2001, Accenture * *
* * Todos os direitos reservados * *
* ******************************************** *
* *
* Nome do Shell: Z_TEMPLATE_REPORT Versão do Shell: v1.03 *
* *
********************************** **************************************
* Nome do Programa : Z_EXC_SAPSCRIPT *
* Título do Programa : Programa de impressão dos materiais por centro *
* Programador : Aluno do curso de ABAP *
* Data : 29/03/2001 *
* Última atualização : 29/03/2001 *
* *
* Descrição : Este é um programa para a visualização de materiais *
* ou impressão dos dados, de acordo com o parâmetro *
* selecionado pelo usuário *
* Include : *
* *
* Calls : *
* *
* Módulos de Funções: *
* *
*---------------------------------------------------------------------- *
* Lista de Modificações: *
* Data Autor Corr. # Descrição *
* 29/03/2001 ABAPDEV1 AF1K900023 Desenvolvimento inicial do prg *
* *
************************************* ***********************************
REPORT Z_EXC_REPORT_1_AL06_D
NO STANDARD PAGE HEADING "Não mostra o cabeçalho padrão SAP
LINE-SIZE 170 "Largura do report de 170 caracteres
LINE-COUNT 58 "Comprimento do report de 58 caracteres
MESSAGE -ID ZABAP. "Classe de mensagens é ZABAP
*RESERVE 8 LINES. "Pelo menos n linhas serão impressas na última
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
* " SESSÃO DE DECLA RAÇÃO DE DADOS "
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
************************************************************************
* Includes *
******************** ****************************************************
*INCLUDE:
* ZZIHEADR. "Cabeçalho padrão de report
************************************************************************
* Tabelas *
************************************************************************
TABLES: mara,
marc,
makt.
************************************************************************
* Dados: *
* Constantes (C_...) *
* Variaveis (V_...) *
* Tabelas Internas (I_...) *
********* ***************************************************************
*- Constantes --------------------------------------------------------- *
*DATA:
* C_..
*- Variáveis --------------------------------------------------------- *
DATA:
V_CONT TYPE I VALUE 0. " contador
78
ABAP Training
*- Tabela Interna ----------------------------------------------------- *
************************************************************************
* Parâmetros de entrada : *
* Select Options (S_...) *
* Parameters (P_...) *
************************************************************************
SELECTION -SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1.
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
" SESSÃO DE PROCESSAMENTO "
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
*--------------------- ------------------------------------------------- *
INITIALIZATION. "Logica para defaults "inteligentes"
*---------------------------------------------------------------------- *
*---------------------------------------------------------------------- *
*AT SELECTION -SCREEN. "Tratamento de Erros e lógica para tela de seleção
*---------------------------------------------------------------------- *
*------------------------------ ---------------------------------------- *
START-OF-SELECTION. "Processamento principal
79
ABAP Training
*---------------------------------------------------------------------- *
* seleciona os dados
PERFORM F_SELECT_DATA.
* imprime os dados
PERFORM F _PRINT_REPORT.
*---------------------------------------------------------------------- *
*END-OF-SELECTION. "Fim do processamento principal
*---------------------------------------------------------------------- *
*-------------------- -------------------------------------------------- *
AT LINE-SELECTION. "Seleção da linha do relatório
*---------------------------------------------------------------------- *
set parameter id 'MAT' field i_final -matnr. "Seta variável que envolve
"transação
*------------------------------------------- --------------------------- *
TOP-OF-PAGE. "Cabeçalho (Aparece sempre no topo da tela.)
*---------------------------------------------------------------------- *
format color 2.
write: 'Código', 20 'Descrição do Material', 61 'Tipo', 66 'Centro' .
*---------------------------------------------------------------------- *
*END-OF-PAGE. "Rodapé
*---------------------------------------------------------------------- *
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>"
" SESSÃO DE FORMS "
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
*&--------------------------------------------------------------------- *
*& Form F_SELECT_DATA
*&--------------------------------------------------------------------- *
* Seleciona dados e armazena -os na tabela interna *
*---------------------------------------------------------------------- *
FORM F_SELECT_DATA.
select matnr
mtart
from mara
into table i_mara
where matnr in s_matnr
and mtart in s_mtart.
if sy-subrc ne 0.
message e001.
endif.
select matnr
werks
from marc
into table i_marc
for all entries in i_mara
where matnr = i_mara -matnr
and werks in s_werks.
select matnr
maktx
from makt
into table i_makt
for all entries in i_mara
where matnr = i_mara -matnr.
if sy -subrc eq 0.
read table i_makt with key matnr = i_mara -matnr.
80
ABAP Training
if sy -subrc eq 0.
i_final -matnr = i_mara -matnr .
i_final -mtart = i_mara -mtart .
i_final -werks = i_marc -werks .
i_final -maktx = i_makt -maktx .
append i_final.
endif.
endif.
endloop.
*&-------------- ------------------------------------------------------- *
*& Form F_PRINT_REPORT
*&--------------------------------------------------------------------- *
* Imprime o report *
*---------------------------------------------------------------------- *
FORM F_PRINT_REPORT.
**********************************
*Classifica a tabela final
**********************************
if p_screen EQ 'X'.
if p_cod eq 'X'.
sort i_final by matnr maktx werks.
elseif p_desc eq 'X'.
sort i_final by maktx w erks.
elseif p_tipo eq 'X'.
sort i_final by mtart maktx werks.
elseif p_centro eq 'X'.
sort i_final by werks maktx.
endif.
else.
if p_cod eq 'X'.
sort i_final by werks matnr maktx.
elseif p_desc eq 'X'.
sort i_ final by werks maktx.
elseif p_tipo eq 'X'.
sort i_final by werks mtart maktx.
elseif p_centro eq 'X'.
sort i_final by werks maktx.
endif.
endif.
**********************************
*Imprime a tabela final
************************* *********
* abre o formulário
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'PRINTER'
FORM = 'Z_EXC_SAPSCRIT'
LANGUAGE = ' P'.
* inicializa o formulário
CALL FUNCTION 'START_FORM'
EXPORTING
FORM = 'Z_EXC_SAPSCRIT'
LANGUAGE = 'P'.
* imprime o cabeçalho
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'CABEC '
WINDOW = 'MAIN'.
81
ABAP Training
if sy -tabix ne 1. " se não for o 1° registro
CALL FUNCTION 'WRITE_FORM' " quebra de página
EXPORTING
ELEMENT = 'QUEBRA'
WIND OW = 'MAIN'.
ENDLOOP.
* finaliza o formulário
CALL FUNCTION 'END_FORM'. " FECHA O START
* fecha o formulário
CALL FUNCTION 'CLOSE_FORM'. " FECHA O OPEN
82
ABAP Training
2) Sapscript:
--------------------------------------------------------------------------------
Formulário Z_EXC_SAPSCRIT
--------------------------------------------------------------------------------
Mandante 020
Idioma PT
Idioma original PT
Relevante p/tradução Sim
Status ativo
Cl.desenvolvimento ZABAP
Atributos standard
Página inicial PAGE1
Parágrf.default P0
Stop tabulador 1,00 CM
Formato página LETTER
Formato folha Form.vert.
Linhas/polegada 6,00
Caracs/polegada 10,00
AtribsFamCar.
Família caracs. TIMES
Alt.fam.caracs. 12,0 Ponto
Negrito Não
Itálico Não
Sublinhado Não
--------------------------------------------------------------------------------
Caracteres Atributos
--------------------------------------------------------------------------------
83
ABAP Training
PG Caracteres Grandes
Atributos standard
Marcação Não
AtribsFamCar.
Família caracs. TIMES
Alt.fam.caracs. 18,0 Ponto
PM Caracteres Médio
AtribsFamCar.
Família caracs. TIMES
Alt.fam.caracs. 12,0 Ponto
PP Caracteres Pequenos
AtribsFamCar.
Família caracs. TIMES
Alt.fam.caracs. 10,0 Ponto
--------------------------------------------------------------------------------
Parágrafos Atributos
--------------------------------------------------------------------------------
P0 Paragrafo da Main
Atributos standard
Espacej.linhas 1.00 LN
Alinhamento Alinh.esq.
Tabuladores
5.50 CM Alinh.à esquerda
17.50 CM Alinh.à esquerda
PC Paragrafo do Cabeçalho
Atributos standard
Espacej.linhas 1.00 LN
Margem esquerda 0.20 CM
Alinhamento Alinh.esq.
Tabuladores
7.50 CM Alinh.à esquerda
16.50 CM Alinh.à esquerda
UL LINHA DE SEPARAÇÃO
Atributos standard
Espacej.linhas 0.05 LN
Margem esquerda 0.80 MM
Alinhamento Alinh.esq.
84
ABAP Training
--------------------------------------------------------------------------------
Janela Atributos
--------------------------------------------------------------------------------
CABEC Cabeçalho
CategoriaJanela CONST
RODAPE Rodapé
CategoriaJanela CONST
--------------------------------------------------------------------------------
Páginas Atributos
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Elementos texto p/seg.janelas:
--------------------------------------------------------------------------------
CABEC
85
ABAP Training
PC ,,<PG>MATERIAIS</>,,<PM>&SY-DATUM&</>
PC <PM>CENTRO: &I_FINAL-werks&</>
MAIN
/* Janela princ
Elemento CABEC
UL &ULINE(90)&
P0 <PM>| Código do Material,,| Descrição ,,| Tipo,,|</>
UL &ULINE(90)&
Elemento ITEM
P0 <PM>|</> <PP>&I_FINAL-MATNR&</>,,<PM>|</> <PP>&I_FINAL-MAKTX&</>
= ,,<PM>|</> <PP>&I_FINAL-MTART&</>,,<PM>|</>
UL &ULINE(90)&
Elemento QUEBRA
/: NEW-PAGE
RODAPE
86