Академический Документы
Профессиональный Документы
Культура Документы
Sapscript
ABAP Training
ABAP Training
Limitaes e problemas da ferramenta
Embora seja a ferramenta de gerao de formulrios mais poderosa
do SAP, o SAPscript ainda apresenta uma srie de limitaes, principalmente
no que diz respeito a verificao de erros e anlise de debug. Um comando
escrito na grafia errada dentro de um formulrio, jamais ser detectado pelo
mesmo. Somente a no funcionalidade esperada do comando poder levar
ao programador descobrir seu prprio erro.
O modo debug do ambiente de SAPscript pode ser ativado na
transao SE71 (SAP Standard Menu -> Tools -> Sapscript -> Form), atravs
do menu Utilitrios -> Ativar debug. O mtodo correto consiste em se
preencher o nome do formulrio e idioma nos campos da tela, antes de
percorrer o caminho do menu. Algumas vezes, no entanto, principalmente
para um processamento em background, o formulrio no permite ser
debugado, embora percorrendo o caminho acima citado, nenhuma
mensagem de impossibilidade seja exibida. Simplesmente, nenhuma
tentativa de debug funciona. Nesses casos, o programador deve utilizar de
artifcios como imprimir o contedo dos campos a serem checados em
pontos estratgicos do formulrio, para observar seu comportamento.
O comportamento de um formulrio SAPscript pode tambm ser
muitas vezes irritante, principalmente quando se desconhece alguns de
seus detalhes. Um dos problemas mais comuns do formulrio SAPscript
quanto a utilizao de logotipos nos relatrios gerados. Sua filosofia pode
parecer bastante simples e , mas essa operao bastante sensvel, e
devem ser salientados alguns pontos:
1. O objeto com o logotipo deve ser gerado a partir de um programa de
ABAP, atravs da transao SE38, chamado RSTXLDMC. O modo como o
arquivo com o logotipo tratado, deve ser cuidadosamente verificado,
pois implicar no sucesso ou fracasso da exibio do logotipo esperado.
Inicialmente, deve ser ressaltado que o arquivo deve estar no formato
TIFF (extenso .TIF), no comprimido. Essa figura gerada nestes padres
tem ainda algumas restries para a sua aplicao. Em primeiro lugar, o
nmero de pxeis da figura ( a resoluo da mesma, em DPI dots per
inch ) devem ser exatamente o nmero de pxeis informado na tela de
seleo do programa para se garantir que o logotipo seja exibido no
tamanho em que foi gerado. Alguns programas de editorao grfica,
como o Paint Shop Pro, possuem recursos para se determinar o tamanho
da figura em centmetros e at mud-lo (resize), mantendo-se a resoluo
(nmero de pxels). Em alguns casos, se o nmero de pxeis no coincidir
com o informado, a figura pode nem ser gerada no SAP, dificultando o
trabalho do programador. Em segundo lugar, o nmero de cores ou
tonalidades de cinza tambm precisam coincidir (esse parmentro varia
3
ABAP Training
de acordo com a verso do SAP, devendo-se estar atento aos dados na
tela de seleo do programa). Por fim, um ltimo parmetro que pode
alterar o tamanho e o formato do logotipo a configurao da impressora
no SAP. O SAP utiliza a configurao da impressora para gerar o formulrio
e imprim-lo. Se a configurao no estiver correta, pode influenciar no
logotipo e na criao de linhas e caixas (BOXES).
2. Nessa hora entra a segunda dificuldade de se trabalhar com logotipos em
SAPscript. Ao se executar o formulrio, em uma visualizao na tela, o
usurio nunca ir conseguir enxergar o logotipo. Esse somente ir
aparecer na impresso em papel (ainda que impresso do layout do
formulrio, e no seu contedo final - Utilitrios -> Imprimir layout). As
novas verses do SAP j corrigiram esse problema.
Essas duas caractersticas podem tomar algumas horas do
programador, ainda que bem experiente no trabalho com SAPscript.
importante se observar tambm que os formulrios so client
dependent, o que significa dizer que devem ser transportados a todos os
clientes em que se deseja execut-lo, independentemente de estar na
mesma instncia que j o tenha. Isso no pareceria ser muito complicado se
no fosse um trabalho a mais controlar a verso de todos no momento que
uma alterao for feita. Por isso, recomenda-se que todos os nmeros das
Change Requests sejam inseridos como comentrio no corpo do formulrio,
pois no h administrao de verses para Sapscript, como h nos reports.
Um outro problema so os objetos gerados, como os logotipos e textos, que
alm de dependentes do cliente, no esto vinculados a nenhuma request,
no podendo nem ser transportados diretamente de um cliente para o
outro. Tanto os logotipos quanto os textos so armazenados da mesma
maneira no sistema. Para transport-los, deve-se executar o programa
RSTXTRAN, que associa esses textos a uma change request para em
seguida, poderem ser transportados
Por falar em transporte, sempre bom reforar que no momento do
transporte de um formulrio SAPscript, necessrio assegurar que todas as
estruturas utilizadas por ele, tenham sido transportadas anteriormente. O
objetivo assegurar que tudo que ser utilizado pelo formulrio j esteja no
cliente, no momento em que este for introduzido, para que no haja erros. A
ordem mais aconselhada para esses transportes seria:
1 . Estrutura
2 . Layout
3 . Programa de povoamento
Tambm vale a pena chamar a ateno para que esses 3 classes de
objetos estejam em requests separadas no desenvolvimento de um projeto,
ABAP Training
o que pode evitar problemas quando algum deles no estiver funcionando
propriamente e necessitar ser reparado...
ABAP Training
Programa de Povoamento do SAPSCRIPT
O programa de povoamento o programa responsvel pelo controle
da impresso do formulrio. atravs dele que o formulrio aberto, que
os dados so enviados para as janelas corretas, que feito o controle de
quebra de pginas, que feito o fechamento do formulrio, etc.
no programa de povoamento que feita a seleo dos dados que
devero aparecer no relatrio. Toda a lgica de seleo, busca dos dados,
associao de tabelas, etc., feita nele. O formulrio apenas um
dispositivo para output dos dados.
A construo de um programa de povoamento deve seguir a seguinte
estrutura:
-
Abertura de um formulrio
Inicializao de um formulrio
Seleo dos dados do formulrio
Impresso dos dados nas janelas do formulrio
Encerramento do formulrio
Fechamento do formulrio
ABAP Training
Abertura de formulrios.
=
=
=
=
=
=
=
=
'TX'
' '
' '
'PRINTER'
'X'
(Nome do Formulrio)
(Idioma do Formulrio)
ITCPO
=
=
=
=
=
=
=
=
=
1
2
3
4
5
6.
ABAP Training
exibio estiver desabilitada (DIALOG = ) mas a estrutura ITCPO no
estiver preenchida, a caixa de dilogo ser exibida.
Alguns dos campos mais importantes e que normalmente so
utilizados na estrutura ITCPO so:
-
ITCPO-TDIMMED = X.
ITCPO-TDCOPIES = 2.
ITCPO-TDDEST = IMP1.
call function 'OPEN_FORM'
exporting
*
APPLICATION
*
ARCHIVE_INDEX
*
ARCHIVE_PARAMS
DEVICE
DIALOG
FORM
LANGUAGE
OPTIONS
*
importing
*
language
*
new_archive_params
*
result
exceptions
canceled
device
form
options
unclosed
others
=
=
=
=
=
=
=
=
'TX'
' '
' '
'PRINTER'
' '
'ZSCR_CURSO'
'P'
ITCPO
=
=
=
=
=
=
=
=
=
1
2
3
4
5
6.
ABAP Training
Inicializao de um formulrio.
ABAP Training
Finalizando um formulrio.
=
= 1
= 2
= 3
Fechando um formulrio.
Finalmente, em contrapartida ao comando OPEN_FORM, toda vez que um
formulrio aberto, o mesmo deve ser fechado. Isso obtido atravs do
comando :
CALL
*
*
*
*
*
*
*
*
*
*
FUNCTION 'CLOSE_FORM'.
IMPORTING
RESULT
RDI_RESULT
TABLES
OTFDATA
EXCEPTIONS
UNOPENED
BAD_PAGEFORMAT_FOR_PRINT
SEND_ERROR
OTHERS
=
=
=
=
=
=
=
1
2
3
4
10
ABAP Training
Seleo dos dados
A seleo dos dados feita normalmente com comandos SELECT e
demais comandos ABAP, como j foi visto em tpicos anteriores.
Um ponto importante que deve ser observado que no possvel
utilizar tabelas internas e variveis do programa para a impresso dos
dados no SAPSCRIPT. Portanto, se algum dado que deva ser impresso estiver
numa tabela interna ou varivel, este deve ser copiado para uma estrutura
para que possa ser enviado ao SAPSCRIPT.
11
ABAP Training
12
ABAP Training
no exemplo anterior fosse utilizada uma janela no-main, o resultado final
seria somente 5678.
Na realidade, a utilizao de um comando WRITE_FORM numa janela
no-main utilizada para a escolha de qual elemento de texto ser utilizado
para a impresso dos dados. Exemplo:
Uma janela HEADER no-main contm dois elementos de texto
chamados FRASE1 e FRASE2 da seguinte forma:
/E
/E
FRASE1
&MARA-MATNR&
FRASE2
&MARA-MATNR&
Teste de Frase 1
Teste de Frase 2
= 'HEADER'
13
ABAP Training
Fluxo do SAPSCRIPT:
Tendo visto os comandos acima, um fluxo simplificado de um programa para a
impresso de um SAPSCRIPT seria:
FORM f_imprime_sapscript.
* Abre o formulrio
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE
FORM
LANGUAGE
= 'PRINTER'
= 'Z_SAPSCRIT'
= SY-LANGU.
* inicializa o formulrio
CALL FUNCTION 'START_FORM'
EXPORTING
FORM
= 'Z_SAPSCRIT'
LANGUAGE
= SY-LANGU.
loop at i_tab.
= 'ITEM'
= 'MAIN'.
* finaliza o formulrio
call function 'END_FORM'.
* fecha o formulrio
call function 'CLOSE_FORM'.
ENDFORM.
14
ABAP Training
O formulrio
Trabalhar com um formulrio SAPscript no complicado, desde que
se entenda seus componentes da maneira correta. Um layout composto
por vrios componentes, dentre os quais podemos citar:
1. Header - informaes gerais do formulrio, como formato e orientao da
pgina em ser utilizado, pargrafo e fontes default do mesmo (quando
no for especificado nenhuma dentro do form). Nesse tpico aparece
tambm o ttulo do formulrio, a classe de desenvolvimento do mesmo e
os idiomas do formulrio original e o corrente.
15
ABAP Training
2. Pargrafos - so elementos que podem ser criados pelo usurio e
apresentam informaes dos textos de uma determinada janela. Nesses
pargrafos so determinados tipos de fontes, tabulaes, negrito ou
sublinhado, etc...
16
ABAP Training
17
ABAP Training
3. Caracter String - so informaes semelhantes s do pargrafo, no que
diz respeito a formatao de textos, no entanto podem ser aplicados a
trechos de textos e no necessariamente a linhas inteiras do formulrio.
18
ABAP Training
4. Janelas - as janelas so a base da construo do layout. As janelas podem
ser criadas sem limites e tem por finalidade dividir espacialmente as
regies de um formulrio para operaes independentes.
19
ABAP Training
automaticamente quando da execuo de um relatrio desse tipo, conforme
os dados so preenchidos. Para forar a passagem de uma janela MAIN para
outra, o usurio poder utilizar o comando:
/: NEXT-WINDOW
A lgica de sequncia das janelas MAIN de um formulrio segue
sempre a um critrio. Dentro de uma pgina a navegao de uma MAIN para
outra segue de acordo com os ndices dessas janelas dentro do formulrio, e
quando uma nova pgina gerada, a contagem segue a mesma disposio,
continuamente.
O exemplo abaixo, figura a situao de uma diagramao conforme
uma pgina de jornal. A sequncia de preenchimento dos dados na pgina
atravs do povoamento normal segue:
20
ABAP Training
5.
21
ABAP Training
Aps a primeira pgina, seria chamada a segunda, com um layout diferente
(sem o logotipo). A partir dessa, todas apresentariam o mesmo tipo de
layout (com dados do relatrio aproveitando a pgina inteira).
6.
Page Windows
22
ABAP Training
7.
Text Elements
23
ABAP Training
alguns dos comandos que podem ser utilizados de dentro dos elementos de
texto de uma janela em SAPscript:
IF..ELSE..ENDIF
CASE..WHEN
DEFINE
PERFORM..USING..CHANGING
material)
BOX..FRAME
INCLUDE
O comando include dentro de uma janela de um formulrio SAPscript
serve para inserir um objeto no mesmo. Esse objeto pode ser desde um
logo, at um texto com vrias linhas. A sintaxe bastante simples, e
somente deve-se ter um cuidado bastante especial com o idioma que se
trata esse objeto. Independentemente do idioma do formulrio, deve-se
sempre utilizar o idioma em que o objeto foi criado.
/: INCLUDE name OBJECT object ID id LANGUAGE spras
24
ABAP Training
Manuteno de formulrios
A manuteno dos formulrios feita pela mesma transao citada
anteriormente (SE71). Nessa tela o nome do formulrio e o idioma do
mesmo so parmetros obrigatrios. Nessa tela so feitas praticamente
todas as operaes com os formulrios do SAP:
ABAP Training
2.
26
ABAP Training
3.
27
ABAP Training
28
ABAP Training
Incluso de Logos nos formulrios
Utilizar logotipos em formulrios SAPscripts, no 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 incluso de uma
imagem. No entanto, devido s limitaes expostas no comeo deste
documento, isso pode levar um certo tempo at reproduzir o resultado
desejado.
Para gerarmos o objeto no client desejado (lembre que esse objeto
no pode ser transportado), devemos executar o programa standard
RSTXLDMC, com um arquivo no formato *.TIF.
29
ABAP Training
Preencher o primeiro campo (file name), com o path completo do
arquivo da imagem do logotipo. Esse caminho pode ser no servidor ou local.
O segundo campo (type) determina se o logotipo deve ser gerado
monocromtico (default) ou colorido.
O ltimo parmetro que exige ser preenchido o Text Name, onde
feita a atribuio do nome do objeto que ser referenciado de dentro do
formulrio (padro: ZHEX-MACRO-).
A gerao desse logo est intimamente ligado ao formato do arquivo
TIF. Isso quer dizer que o seu tamanho obtido no formulrio est relacionado
ao tamanho da imagem geradora do objeto.
Tomar cuidado com o nmero de cores e tonalidades da imagem e
lembrar na hora de fazer os testes, que o logotipo no aparece na tela,
somente em impresses no papel (problema corrigido nas verses atuais).
Nesta hora, vale lembrar todas as ressalvas feitas anteriormente:
30
ABAP Training
Alteraes de Programas/Layouts Standards
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 alterao depende muito das caractersticas do
programa de povoamento standard e das caractersticas das funes do SAP que
iro utilizar tal sapscript. No entanto, alguns procedimentos so padres, e outros
so utilizados na grande maioria das alteraes.
1) Fazer uma cpia do programa standard e dos includes (se existirem) que
necessitam de alterao
2) Fazer uma cpia do layoutset standard
3) NO DELETAR janelas, elementos de textos, etc. na cpia do layoutset. Mesmo
que alguns (ou todos) os dados e janelas do standard no sejam utilizados, o
programa de povoamento continuar tentando executar escritas em janelas e
elementos de dados especficos, j que uma cpia do standard. Os novos
dados e janelas devem ser apenas adicionados!
4) Encontrar as posies ideais para alteraes no programa de povoamento.
Quando os novos dados devem ser impressos na MAIN, procurar por comandos
WRITE_FORM dentro do programa e colocar as alteraes o mais prximo
possvel do WRITE_FORM correto. Se devem ser impressos em outras janelas,
procurar pelo comando CLOSE_FORM/END_FORM e colocar as alteraes
imediatamente antes destes comandos (sempre que possvel)
5) Colocar todas as alteraes juntas sempre que possvel, identificando
visivelmente, atravs de comentrios, o bloco de alteraes. Isso facilita a
manuteno e visualizao do cdigo, alm de facilitar a busca por possveis
erros, visto que, na sua grande maioria, os programas standard da SAP so
bastante complicados.
*-------------------------------------------------------------------*
***write
texts
to
TEXTS
window
*
*-------------------------------------------------------------------*
**************************
ALTERAO
********************************
*------------------------------------------------------------------*
*
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.
31
ABAP Training
*Mensagem p/ materiais no perigosos
ybrvscript-mensg01 = text-001.
********************************************************************
**
istart = j_1bb2-totlih.
if istart > 10.
"maximum number of fields in J_1BPRNFTX
32
ABAP Training
Linhas e Boxes:
Para a criao de linhas e Boxes nos formulrios, 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 difcil a criao de boxes e
linhas dinmicos uma vez que eles dependem da posio na janela na qual esto
sendo criados.
Apesar da apresentao ser a melhor, utilizando-se boxes dinmicos, a
complexidade para seu desenvolvimento na maioria dos casos no justifica sua
aplicao.
Uma sada a ser aplicada nestes casos a seguinte:
Primeiro, cria-se um pargrafo especial, cujo espaamento entre linhas seja o
menor possvel:
UL
Linha de separao
Atributos standard
Espacej.linhas 0.05 LN
Margem esquerda 1.15 MM
Alinhamento
Alinh.esq.
&ULINE(73)&
<B>| Item,,|,,Cdigo,,|,,Quantidade,,| UN,,|,,Preo Unitrio,,|,, Preo
Total |</>
<B>|
,,|,,
,,|,,
,,| ,,|,, c/ ICMS ,,|,,
C/Impostos |</>
<B>|
,,|,,
,,|,,
,,| ,,|,,
(R$)
,,|,,
(R$)
|</>
&ULINE(73)&
33
ABAP Training
Tabuladores:
Um recurso extremamente importante e diversas vezes esquecidos pelos
programadores so os tabuladores.
Uma das principais queixas dos programadores em relao ao Sapscript que,
quando se altera a posio de um campo na impresso, acaba-se alterando as
posies dos demais, fazendo com que o trabalho do programador seja exaustivo.
A alternativa para isso no ocorrer o uso dos tabuladores, definidos para cada
pargrafo 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
E a sua utilizao no cdigo fica:
IL
&EKPO-EBELP&,,&EKPO-EMATN&,,&EKPO-TXZ01&
34
ABAP Training
Exemplos
Sapscript
------------------------------------------------------------------------------Formulrio
YBRV_CREDIT_MEMO
------------------------------------------------------------------------------Mandante
Idioma
Original lang.
Relevant for transl.
Status
650
P
P
Yes
Active
Development class
YBR0
Created by
SAO0105A
Date
01.09.1998
Time
19:52:15
Release
30F
Significado
Standard attributes
First page
utilizada
Default paragr.
textos
Tab stop
Page format
Orientation
Lines/inch
Characters/inch
caracteres
Font attributes
Font family
Font size
Bold
Italic
Underlined
Changed by
29.07.1998
Date
09:02:34
Time
30F
Release
Nota de Crdito
FIRST
MA
1,00 CM
DINA4
Landscape
6,00
12,00
COURIER
10,0 Point
No
No
No
35
ABAP Training
------------------------------------------------------------------------------Characters
Attributes
Definies dos Characters
Strings
------------------------------------------------------------------------------H1
H2
H3
Header 1
Standard attributes
Marker
Font attributes
Font family
Font size
Bold
Header 2
Standard attributes
Marker
Font attributes
Font family
Font size
Bold
Header 3
Standard attributes
Marker
Font attributes
Font family
Font size
Bold
No
COURIER
8,0 Point
Yes
No
COURIER
10,0 Point
Yes
No
COURIER
6,0 Point
Yes
------------------------------------------------------------------------------Paragraphs
Attributes
Definies dos tipos de
pargrafos
------------------------------------------------------------------------------H1
Paragrafo 1 p/ o header
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Tabs
Tabulaes para o
pargrafo
16,00 CH
66,00 CH
Left-aligned
Left-aligned
36
ABAP Training
80,00 CH
Left-aligned
H2
Paragrafo 2 p/ header
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
Alignment
1,00 LN
Left-aligned
------------------------------------------------------------------------------Windows
Attributes
Janelas definidas para o
formulrio
------------------------------------------------------------------------------HEADER
HEAD_PRI
MAIN
TEXT
TOTAL
Cabealho da Nota
Window type
CONST
Header p/ Main
Window type
CONST
Main window
Window type
MAIN
Textos da Nota
Window type
CONST
Totais da Nota
Window type
CONST
------------------------------------------------------------------------------Pages
Attributes
Paginas do formulrio com suas
respectivas janelas
------------------------------------------------------------------------------FIRST
Primeira Pgina
Page counter
37
ABAP Training
Mode
Numbering type
Page window
MAIN
HEADER
TEXT
TOTAL
INC
Arabic numerals
Left margin
Upper margin
Window width
Window height
Left margin
Upper margin
Window width
Window height
Left margin
Upper margin
Window width
Window height
Left margin
Upper margin
Window width
Window height
2,00
9,00
132,00
27,00
2,00
1,00
132,00
8,00
2,00
36,00
132,00
3,00
2,00
39,00
132,00
7,00
CH
LN
CH
LN
CH
LN
CH
LN
CH
LN
CH
LN
CH
LN
CH
LN
38
ABAP Training
<H3>PREZADOS SENHORES: PARTICIPAMOS A v.Sas. QUE FIZEMOS EM SUA
CONTA
OS LANAMENTOS ABAIXO:</>
H1 <H1>Histrico
:</> &ybrvs_nota-tipo&
H1 <H1>Valor por Extenso: </>&ybrvs_nota-tot_extens(100)&
<H1>Centavos:</> &spell-decimal(2)&
H1 <H1>Depsito:</> &ybrvs_nota-filial(6)& <H1>Setor:</>
&ybrvs_nota-setor(4)& <H1>Vendedor:</> &ybrvs_nota-vendedor(8)&
<H1>Zona:</> &ybrvs_nota-zona(6)& <H1>Doc. Entr</>
&ybrvs_nota-doc_entr(19)&
<H1>N/N.F.F.:</>
&ybrvs_notadoc_entr(11)&
<H1>de </> &ybrvs_nota-data&
Campo de
tabela/estrutura
HEAD_PRI
MAIN
|</>
Elemento de dados
/E
/:
/:
/:
/:
/:
/:
/:
/:
/:
/:
/:
MA
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
&ybrvs_nota-produto(15)&
&ybrvs_nota-unidade(3)&&ybrvs_nota-quant(15)&&ybrvs_notanome(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> Cdigo Produto
EMB UN.
Quantidade
do
Produto
RN Preo Unitrio
Valor Mercadoria
Desconto
%IPI
Valor IPI</>
Nome
Valor
39
ABAP Training
*
&uline(132)&
Pargrafo standard
TEXT
Linha de Comentrios
TOTAL
/: BOX XPOS 0 CH YPOS 0 CH WIDTH 15 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 15 CH YPOS 0 CH WIDTH 5 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 20 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 34 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 48 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 62 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 76 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 90 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 104 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 118 CH YPOS 0 CH WIDTH 14 CH HEIGHT 3 LN FRAME 10 TW
/: BOX XPOS 0 CH YPOS 0 CH WIDTH 132 CH HEIGHT 7 LN FRAME 10 TW
* <H1> Val. Trib. ICMS
%ICMS
Valor ICMS
Valor Mercadoria
Valor
Descontos
Valor IPI
Val. Outros Abat.
Valor Fretes
Val.
Seguros
Val. Total Nota</>
MA
&ybrvs_nota-porc_icms(5)&&ybrvs_nota-tot_icms(14)&
&ybrvs_nota-tot_merc(14)&&ybrvs_nota-tot_desc(14)&
&ybrvs_nota-tot_ipi+1(13)&
&ybrvs_nota-tot_seg(14)&&ybrvs_notatotal(14)&
MA
MA
MA
____________________________
___________________________
MA
Assinatura
Assinatura
40
ABAP Training
Exemplo:
Relatrio de Avaliao de Fornecedores
A seguir, temos o programa de povoamento e o formulrio Sapscript para um
Relatrio de Avaliao de Fornecedores, onde o usurio tem a opo de rodar um
relatrio ou imprimir o formulrio. A lgica de ambos complexa. No entanto,
servem como referncia de estudo pois abrangem quase todo o contedo acima
mencionado, incluindo, at, boxes dinmicos, ou seja, que variam com a
quantidade de linhas a ser exibida e impresso em frente e verso (para isso,
necessita-se de uma impressora com essa capacidade e programada para isso. Por
fim, se o formulrio for um envelope como neste caso, necessria a utilizao de
uma mquina envelopadora).
41
ABAP Training
****************************************************************
******************
*
*
*
********************************************
*
*
* Confidencial e Proprietrio
*
*
*
* Copyright 2001, Accenture
*
*
*
* Todos os direitos reservados
*
*
*
********************************************
*
*
*
*
Nome do Shell: YTRP0010 Verso do Shell: v1.01
*
*
*
****************************************************************
******************
* Nome do Programa : ZRQM001
*
* Ttulo do Programa : Shell - ABAP/4 List Report
*
* Programador
: Antonio Celso Hunnicutt Cortada
*
* Data
: 05/02/2001
*
* ltima atualizao : 05/02/2001
*
*
*
* Descrio : Criar uma transao ON-Line que sera chamada do
menu*
*
SAP, para definir o escopo dos calculos de avaliacao
*
*
de fornecedores.
*
*
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
*
*
por uma planilha excel.
*
*
*
*
*
* Include
: ZZIHEADR
*
*---------------------------------------------------------------------------------------------*
* Lista de Modificaes:
*
* Data
Autor
Corr. #
Descrio
*
* 05/02/2001
Desenvolvimento inicial do prg *
****************************************************************
********
REPORT ZRQM001
NO STANDARD PAGE HEADING "No mostra o cabealho
padro SAP
LINE-SIZE 170
"Largura do report de nnn caracteres
LINE-COUNT 58
"Comprimento do report de nn
caracteres
MESSAGE-ID ZM.
"Classe de mensagens ZM
RESERVE 8 LINES. "Pelo menos n linhas sero impressas na
ltima pgina
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
" SESSO DE DECLARAO DE DADOS "
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
****************************************************************
********
* Includes
*
****************************************************************
********
INCLUDE:
ZZIHEADR.
"Cabealho padro de report
****************************************************************
********
* Tabelas
*
****************************************************************
********
TABLES: MARA,
"Mestre do material: dados gerais
MAKT,
"Textos breves de material
CABN,
"Caracterstica
AUSP,
"Valores das modalidades das caractersticas
LFA1,
"Mestre de fornecedores (parte geral)
QAVE,
"Processamento de controle: deciso de utili
QALS,
"Registro do lote de controle
JEST,
"Status individual por objeto
VIQMEL,
"Nota - cabealho
VIQMSM,
"Nota - medidas
ELBP,
"Critrio principal da avaliao de forneced
T147C,
"Definio dos subcritrios para a avaliao
EKPO,
"Item do documento de compras
T001W,
"Centros/filiais
ZSAPSCRIP2,
"Estrutura auxiliar de Relatrio de Avalia
ITCPO,
"SAPscript output interface
T247,
"Denominaes e denominao breve dos
meses
KNA1,
"Mestre de clientes (parte geral)
T005T.
"Denominao dos pases
****************************************************************
********
* Dados:
*
* Constantes
(C_...)
*
* Variaveis
(V_...)
*
* Tabelas Internas (T_...)
*
****************************************************************
********
*- Variaveis ----------------------------------------------------------*
DATA: C_MILHAO(7) TYPE N VALUE '1000000', "Valor de calc de
Nota
C_LINHA
TYPE P DECIMALS 2,
"Cte p/ N. linhas Quebra
Pg
C_LINHA1
TYPE P DECIMALS 2,
"Cte p/ N. linhas Quebra
Pg
C_SIM(3) TYPE C VALUE 'SIM',
"SIM
C_NAO(3) TYPE C VALUE 'NAO',
"NAO
C_YES(3) TYPE C VALUE 'YES',
"SIM
C_NO(2)
TYPE C VALUE 'NO',
"NAO
C_PPM(8) TYPE C VALUE 'OBJ_PPM',
C_LOTE(8) TYPE C VALUE 'OBJ_LOTE',
C_NAS(3)
TYPE C VALUE 'NAS',
C_MT_101(6) TYPE C VALUE 'MT-101',
C_DEZ(03) TYPE C VALUE '010',
C_Z(03)
TYPE C VALUE 'Z01',
C_ERRO(10) TYPE C VALUE ' ERRO ',
C_P
TYPE C VALUE 'P',
"Idioma Portugus
C_ESP
TYPE C VALUE 'S',
"idioma espanhol
42
ABAP Training
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 ingls
DATA: C_STAT(5) TYPE C VALUE 'I0224',
C_KZART(1) TYPE C VALUE 'L',
C_HKRIT(02) TYPE C VALUE '04'.
DATA: V_TIME
TYPE P DECIMALS 2, "Var.P/ armazenar
No.Linhas(cm)
V_ATFLV
TYPE P DECIMALS 2,
V_VAL_PPM(7) TYPE C,
V_VAL_LOTE(7) TYPE C,
V_VAL_NAS(3) TYPE C,
V_FORNEC_50(50) TYPE C,
V_IDIOMA LIKE LFA1-SPRAS.
"idioma do fornecedor.
* variaveis auxiliares.
DATA:
V_PRIM_VEZ
TYPE C VALUE 'T',
V_ULTIMO_DIA
LIKE SY-DATUM,
V_PRIMEIRO_DIA
LIKE SY-DATUM,
V_DIA_CALCULO
LIKE SY-DATUM,
V_MULTIPLICADOR(5) TYPE N,
V_PRIMEIRO_MES
LIKE SY-DATUM,
V_DT_INICIO
LIKE SY-DATUM,
V_DT_FIM
LIKE SY-DATUM,
V_DTI_ANALISE
LIKE SY-DATUM,
V_QTDE(10)
TYPE C,
V_QTDE_SAP
TYPE I,
V_QTDE_SAP7
TYPE I.
* variaveis numericas.
DATA: V_SUM_PPM89_M LIKE T706U-BETFA,
V_SUM_PPM89_AC LIKE T706U-BETFA,
V_SUM_NFL_M
LIKE T706U-BETFA,
V_SUM_NFL_AC
LIKE T706U-BETFA,
V_SUM_LOT_M
LIKE T706U-BETFA,
V_SUM_LOT_AC
LIKE T706U-BETFA,
V_NUM_NFL_M
LIKE T706U-BETFA,
V_NUM_NFL_AC
LIKE T706U-BETFA,
V_SUM_NPT_M
LIKE T706U-BETFA,
V_SUM_NPT_AC
LIKE T706U-BETFA,
V_TOT_NFL_M
LIKE T706U-BETFA,
V_TOT_NFL_AC
LIKE T706U-BETFA,
V_TOT_LOT_M
LIKE T706U-BETFA,
V_TOT_LOT_AC
LIKE T706U-BETFA,
V_TOT_PPM_M
LIKE T706U-BETFA,
V_TOT_PPM_AC
LIKE T706U-BETFA,
V_TOT_NPR_M
LIKE T706U-BETFA,
V_TOT_NPR_AC
LIKE T706U-BETFA,
V_TOT_NPT_M
LIKE T706U-BETFA,
V_TOT_NPT_AC
LIKE T706U-BETFA,
V_TOT_NAS_M
LIKE T706U-BETFA,
V_TOT_NCQ_M
LIKE T706U-BETFA,
V_TOT_NCQ_AC
LIKE T706U-BETFA,
V_SUM_PPM01_M LIKE T706U-BETFA,
V_SUM_PPM01_AC LIKE PC207-BETPE,
V_SUM_ATRAS_M LIKE T706U-BETFA,
V_SUM_ATRAS_AC LIKE T706U-BETFA,
V_SUM_EMDIA_M LIKE T706U-BETFA,
V_SUM_EMDIA_AC LIKE T706U-BETFA,
V_TOT_NOTAS_M
LIKE T706U-BETFA,
V_TOT_NOTAS_AC LIKE T706U-BETFA,
V_FATOR_NFL(3) TYPE C,
V_FATOR_NPR(3) TYPE C,
V_FATOR_NCQ(3) TYPE C,
V_TOT_POND(5) TYPE I,
V_TOT_NQF_M
LIKE T706U-BETFA,
V_TOT_NQF_AC
LIKE T706U-BETFA.
* variaveis de total por centro.
DATA:
V_CENTRO_NFL LIKE T706U-BETFA,
V_CENTRO_NPR LIKE T706U-BETFA,
V_CENTRO_NCQ LIKE T706U-BETFA,
V_CENTRO_NQF LIKE T706U-BETFA,
V_CENTRO_NPT LIKE T706U-BETFA,
V_CENTRO_NAS
LIKE T706U-BETFA,
V_CENTRO_PPM LIKE T706U-BETFA,
V_CENTRO_PPM_OBJ LIKE T706U-BETFA,
V_CENTRO_LOT LIKE T706U-BETFA,
V_CENTRO_LOT_OBJ LIKE T706U-BETFA.
* variaveis de trabalho.
DATA: V_WERKS
LIKE QALS-WERK,
V_LIFNR
LIKE QALS-LIFNR,
V_MATNR
LIKE QALS-MATNR,
V_TIPO_NF LIKE QALS-ART,
V_QKENNZAHL LIKE QAVE-QKENNZAHL,
V_LINHAS(6) TYPE N.
* variveis de controle de impresso em branco
DATA: V_CHECK_NFL_M TYPE C, " flag para NFL = %LOT =
BRANCO
V_CHECK_PPM_M TYPE C, " flag para PPM = NPR =
BRANCO
V_CHECK_NAS_M TYPE C, " flag para NAS = BRANCO
V_CHECK_NQF_M TYPE C, " flag para NQF = BRANCO
V_CHECK_NFL_AC TYPE C, " flag para NFL = %LOT =
BRANCO
V_CHECK_PPM_AC TYPE C, " flag para PPM = NPR =
BRANCO
V_CHECK_NAS_AC TYPE C, " flag para NAS = BRANCO
V_CHECK_NQF_AC TYPE C. " flag para NQF = BRANCO
*- Tabela Interna -----------------------------------------------------*
* Tabela interna para armazenar os valores a serem utilizados no
clculo
* das notas para os caso: Acumulado no Centro e Acumulado na
MTB
DATA: BEGIN OF I_ACUM OCCURS 0,
CENTRO
LIKE QALS-WERK,
LIFNR
LIKE QALS-LIFNR,
SUM_PPM01_M LIKE PC207-BETPE,
SUM_PPM01_AC LIKE PC207-BETPE,
SUM_ATRAS_M LIKE T706U-BETFA,
SUM_ATRAS_AC LIKE T706U-BETFA,
SUM_EMDIA_M LIKE T706U-BETFA,
SUM_EMDIA_AC LIKE T706U-BETFA,
SUM_PPM89_M LIKE T706U-BETFA,
SUM_PPM89_AC LIKE T706U-BETFA,
SUM_NFL_M
LIKE T706U-BETFA,
SUM_NFL_AC
LIKE T706U-BETFA,
SUM_LOT_M
LIKE T706U-BETFA,
SUM_LOT_AC
LIKE T706U-BETFA,
43
ABAP Training
SUM_NPT_M
LIKE T706U-BETFA,
SUM_NPT_AC
LIKE T706U-BETFA,
NUM_NPT_M
LIKE T706U-BETFA,
NUM_NPT_AC
LIKE T706U-BETFA,
NUM_NFL_M
LIKE T706U-BETFA,
NUM_NFL_AC
LIKE T706U-BETFA.
DATA: END OF I_ACUM.
DATA: BEGIN OF I_ACUM_CENTRO OCCURS 0,
CENTRO
LIKE QALS-WERK,
SUM_PPM01
LIKE T706U-BETFA,
SUM_ATRAS
LIKE T706U-BETFA,
SUM_EMDIA
LIKE T706U-BETFA,
SUM_PPM89
LIKE T706U-BETFA,
SUM_NFL
LIKE T706U-BETFA,
SUM_LOT
LIKE T706U-BETFA,
SUM_NPT
LIKE T706U-BETFA,
NUM_NPT
LIKE T706U-BETFA,
NUM_NFL
LIKE T706U-BETFA.
DATA: END OF I_ACUM_CENTRO.
DATA: BEGIN OF I_QAVE OCCURS 0,
PRUEFLOS LIKE QAVE-PRUEFLOS, "N lote de controle.
KZART
LIKE QAVE-KZART,
"Cdigo: lote de controle, lote
QKENNZAHL LIKE QAVE-QKENNZAHL, "ndice de qualidade
VBEWERTUNG LIKE QAVE-VBEWERTUNG, "Avaliao do code
VDATUM
LIKE QAVE-VDATUM. "Data do code para a
dec.de util.
DATA: END OF I_QAVE.
DATA: BEGIN OF I_QALS OCCURS 0,
PRUEFLOS LIKE QALS-PRUEFLOS, "N lote de controle
WERKS
LIKE QALS-WERK,
"Centro
ART
LIKE QALS-ART,
"Tipo de controle
LIFNR
LIKE QALS-LIFNR,
"N conta do fornecedor
MATNR
LIKE QALS-MATNR,
"N material
LMENGESCH LIKE QALS-LMENGESCH, "Registro do lote de
controle
LMENGEIST LIKE QALS-LMENGEIST, "Registro do lote de
controle
OBJNR
LIKE QALS-OBJNR.
"N objeto
DATA: END OF I_QALS.
DATA: BEGIN OF I_JEST OCCURS 0,
OBJNR
LIKE JEST-OBJNR,
"N objeto
INACT
LIKE JEST-INACT.
"Cdigo: status inativo
DATA: END OF I_JEST.
DATA: BEGIN OF I_TABFIM OCCURS 0,
WERKS
LIKE QALS-WERK,
"Centro
LIFNR
LIKE QALS-LIFNR,
"Fornecedor
PPM1_M(7)
TYPE C,
PPM1_AC(7)
TYPE C,
PPM_M(7)
TYPE C,
PPM_AC(7)
TYPE C,
NFL_M(5)
TYPE C,
NFL_AC(5)
TYPE C,
LOT_M(7)
TYPE C,
LOT_AC(7)
TYPE C,
NPR_M(5)
TYPE C,
NPR_AC(5)
TYPE C,
NPT_M(5)
TYPE C,
NPT_AC(5)
TYPE C,
NCQ_M(5)
TYPE C,
NCQ_AC(5)
TYPE C,
NAS_M(5)
TYPE C,
NAS_AC(5)
TYPE C,
NQF_M(5)
TYPE C,
NQF_AC(5)
TYPE C,
LOT_OBJ_M(10) TYPE C,
LOT_OBJ_AC(10) TYPE C,
PPM_OBJ_M(10) TYPE C,
PPM_OBJ_AC(10) TYPE C.
DATA: END OF I_TABFIM.
DATA: BEGIN OF I_TOT_CENTRO OCCURS 0,
WERKS LIKE QALS-WERK,
"centro
NFL(5) TYPE C,
NPR(5) TYPE C,
NCQ(5) TYPE C,
NQF(5) TYPE C,
NPT(5) TYPE C,
PPM(7) TYPE C,
LOT(7) TYPE C.
DATA: END OF I_TOT_CENTRO.
DATA: BEGIN OF I_ACUM_MTB,
NFL_AC(5) TYPE C,
NPR_AC(5) TYPE C,
NCQ_AC(5) TYPE C,
NQF_AC(5) TYPE C,
NPT_AC(5) TYPE C,
PPM_AC(7) TYPE C,
LOT_AC(7) TYPE C.
DATA: END OF I_ACUM_MTB.
DATA: BEGIN OF I_TOT_FORNEC OCCURS 0,
LIFNR
LIKE QALS-LIFNR,
NFL_M(5) TYPE C,
NFL_AC(5) TYPE C,
NPR_M(5) TYPE C,
NPR_AC(5) TYPE C,
NCQ_M(5) TYPE C,
NCQ_AC(5) TYPE C,
NQF_M(5) TYPE C,
NQF_AC(5) TYPE C,
NPT_M(5) TYPE C,
NPT_AC(5) TYPE C,
PPM_M(7) TYPE C,
PPM_AC(7) TYPE C,
LOT_M(7) TYPE C,
LOT_AC(7) TYPE C.
DATA: END OF I_TOT_FORNEC.
DATA: BEGIN OF I_FORNEC OCCURS 0,
LIFNR
LIKE LFA1-LIFNR,
"fornecedor
PPM_OBJ(7) TYPE C,
LOT_OBJ(7) TYPE C,
NAS(3)
TYPE C.
DATA: END OF I_FORNEC.
DATA: BEGIN OF I_FORNEC_MAT OCCURS 0,
LIFNR
LIKE LFA1-LIFNR,
MATNR
LIKE MARA-MATNR,
PPM_OBJ(10) TYPE C,
LOT_OBJ(10) TYPE C.
DATA: END OF I_FORNEC_MAT.
DATA: BEGIN OF I_VIQMEL OCCURS 0,
MAWERKS
LIKE VIQMEL-IWERK,
44
"centro
ABAP Training
LIFNUM
LIKE VIQMEL-LIFNUM,
MATNR
LIKE VIQMEL-MATNR,
STRMN
LIKE VIQMEL-STRMN,
QMNUM
LIKE VIQMEL-QMNUM,
OBJNR
LIKE VIQMEL-OBJNR,
EBELN
LIKE VIQMEL-EBELN,
EBELP
LIKE VIQMEL-EBELP.
DATA: END OF I_VIQMEL.
"fornecedor
"material
"Data de incio desejada
"N nota
"n objeto
"Pedido
"Item
"N nota
"Data de criao do
"Centro
"Nome 1
"Chave de Idioma
"Morada
"CxPostal
"CEP
"Cidade
"Estado
"Pais
"Centro
"Nome 1
"Morada
"CxPostal
"CEP
"Cidade
"Estado
"Pais
de
WERKS
LIFNR
MATNR
DATA
LIKE T001W-WERKS,
LIKE LFA1-LIFNR,
LIKE MARA-MATNR,
LIKE QAVE-VDATUM,
"Centro
"N conta do fornecedor
"N material
"Data do code para a
TIPO_NF(2) TYPE C,
"Tipo NF
LMENGESCH LIKE QALS-LMENGESCH,
"Qtd.rejeitada em
amostr
QKENNZAHL LIKE QAVE-QKENNZAHL,
"ndice de
qualidade
LMENGEIST LIKE QALS-LMENGEIST.
"Quantidade de lote
real
DATA: END OF I_DET_MAT.
DATA: BEGIN OF I_TAB_DET_FIM OCCURS 0,
WERKS
LIKE T001W-WERKS,
"Centro
LIFNR
LIKE LFA1-LIFNR,
"N conta do fornecedor
MATNR
LIKE MARA-MATNR,
"Material
PPM_M(7) TYPE C,
PPM_AC(7) TYPE C,
LOT_M(7) TYPE C,
LOT_AC(7) TYPE C.
DATA: END OF I_TAB_DET_FIM.
DATA: BEGIN OF I_MAKT OCCURS 0,
MATNR
LIKE MAKT-MATNR,
MAKTX
LIKE MAKT-MAKTX.
DATA: END OF I_MAKT.
"material
"descricao
"pedido
"item do pedido
"centro
45
ABAP Training
DATA: BEGIN OF I_CABN OCCURS 0,
ATINN LIKE CABN-ATINN,
ADZHL LIKE CABN-ADZHL,
ATNAM LIKE CABN-ATNAM,
ATFOR LIKE CABN-ATFOR.
DATA: END OF I_CABN.
DATA: BEGIN OF I_AUSP OCCURS 0,
OBJEK LIKE AUSP-OBJEK,
ATINN LIKE AUSP-ATINN,
ATWRT LIKE AUSP-ATWRT,
ATFLV LIKE AUSP-ATFLV,
KLART LIKE AUSP-KLART.
DATA: END OF I_AUSP.
"Caracterstica interna
"Nmero interno
"Nome da caracterstica
"Formato da caracter.
"Chave do objeto
"Caracterstica interna
"Valor da caracterst.
"Valor interno vrgula
"Tipo de classe
T1 =
T2 =
T3 =
T4 =
TEXT-001.
TEXT-002.
TEXT-003.
TEXT-004.
" Caractersticas
" Perodo de Anlise
" Apresentao
" Dados para RAF
*----------------------------------------------------------------------*
AT SELECTION-SCREEN. "Tratamento de Erros e lgica para tela
de seleo
*----------------------------------------------------------------------*
* Condies de erro na tela de seleo:
* Se ambos os modos de apresentao esto selecionados
IF P_SOPPM = 'X'
AND P_RSUM = 'X'.
MESSAGE E083 WITH 'Selecionar apenas um modo '
'de apresentao'.
ENDIF.
* Se o ms informado est incorreto
IF P_MES+4(2) > 12
OR P_MES+4(2) = 0.
MESSAGE E083 WITH 'Ms de anlise errado'.
ENDIF.
* Se o perodo de anlise est incorreto
IF P_PERIOD <= 0.
MESSAGE E083 WITH 'Perodo de anlise errado'.
ENDIF.
IF P_RAF <> SPACE.
IF P_IMPRE EQ SPACE.
MESSAGE E351.
" Informar uma impressora!
ENDIF.
* verifica se o campo remetente est preenchido
IF P_REMET EQ SPACE.
MESSAGE E512.
" informar nmero do emitente
ENDIF.
ENDIF.
* verifica se o centro est preenchido quando o processamento
for em
* batch
IF P_BATCH NE SPACE
" Se for processamento em batch
AND SO_WERKS[] IS INITIAL.
MESSAGE E513.
" falta centro especificado
ENDIF.
" Se for processamento em batch
IF SO_WERKS EQ SPACE.
IF SO_FORNE EQ SPACE.
IF SO_MATNR EQ SPACE AND P_RAF NE 'X'.
*Centro, Fornecedor e Material esto em branco ! Processamento
demorado.
MESSAGE W365.
ENDIF.
ENDIF.
ENDIF.
IF SO_CENT NE ' '.
SELECT WERKS
FROM T001W
INTO TABLE I_CENTRO
WHERE WERKS IN SO_CENT.
LOOP AT I_CENTRO.
IF I_CENTRO-WERKS IN SO_WERKS.
ELSE.
46
ABAP Training
MESSAGE E083 WITH 'O(s) centro(s) selecionado(s) no'
'est(o) includo(s) no(s) centro(s)'
'da MTB considerado(s)'.
ENDIF.
ENDLOOP.
ENDIF.
*----------------------------------------------------------------------*
START-OF-SELECTION.
"Processamento principal
*----------------------------------------------------------------------*
PERFORM CALCULA_PERIODO.
* form para selecao dos dados referente a nota de fornecimento
de lotes,
* nota de processo e nota de pontualidade.
PERFORM F_SELECT_NFLPRPT.
* Form para selecao dos dados referente a nota compromisso com
qualida.
PERFORM F_SELECT_NCQ.
* form para selecao dos dados refer. a nota de avaliacao de
sistemas.
PERFORM F_SELECT_NAS.
* form para selecao dos dados ref. a nota de qualidade de
fornecimento.
PERFORM F_SELECT_NQF.
* Calcula os valores sumarizados.
PERFORM F_CALC_DET_MAT.
* Calcula PPM e OBJ.
PERFORM F_CALC_PPM_OBJ.
* acha descricoes.
PERFORM F_ACHA_DESCRICOES.
* Calcula valores acumulados para os Centros e MTB.
PERFORM F_CALC_ACUM.
* verifica se solicitou impressao do SAPSCRIPT e chama o form.
IF P_RAF = 'X'.
PERFORM F_PREPARA_SAPSCRIPT.
ELSEIF P_SOPPM = 'X'.
PERFORM F_PRINT_SOPPM.
ELSEIF P_RSUM = 'X'.
PERFORM F_PRINT_RSUM.
ELSE.
PERFORM F_PRINT_REPORT.
ENDIF.
*----------------------------------------------------------------------*
END-OF-SELECTION.
"Fim do processamento principal
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
TOP-OF-PAGE.
"Cabealho (Aparece sempre no topo da tela.)
*----------------------------------------------------------------------*
PERFORM F_HEADER USING SY-TITLE SPACE SPACE SPACE.
FORMAT COLOR COL_HEADING.
WRITE: /02 'FORNECEDOR',
15 'NOME',
170 ' ',
47
ABAP Training
*
*----------------------------------------------------------------------*
*
Form F_SELECT_NFLPRPT.
*----------------------------------------------------------------------*
* Funcao para selecao de dados do mes e do periodo
*
*----------------------------------------------------------------------*
FORM F_SELECT_NFLPRPT.
IF SY-SUBRC NE 0.
CONTINUE.
ENDIF.
IF V_LINHAS EQ 0.
EXIT.
ENDIF.
48
ABAP Training
V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_QALSLMENGESCH.
ELSE.
V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_QALSLMENGESCH.
ENDIF.
* Gera tabela para impressao detalhada por material.
PERFORM F_GRAVA_DET_MAT.
ELSEIF I_QALS-ART = '01'.
READ TABLE I_QAVE WITH KEY PRUEFLOS = I_QALSPRUEFLOS.
IF SY-SUBRC NE 0.
CONTINUE.
ENDIF.
IF I_QAVE-VDATUM >= V_DTI_ANALISE AND
I_QAVE-VDATUM <= V_DT_FIM.
* sumariza o numero de ocorrencias para um dos tipos de
controle.
V_NUM_NFL_M = V_NUM_NFL_M + 1.
* contabiliza o NFL e LOT.
V_SUM_NFL_M = V_SUM_NFL_M + I_QAVE-QKENNZAHL.
IF I_QAVE-QKENNZAHL <> 1.
V_SUM_LOT_M = V_SUM_LOT_M + I_QAVE-QKENNZAHL.
ENDIF.
* contabiliza valor para calculo de nota de processo.
V_SUM_PPM01_M = V_SUM_PPM01_M + I_QALS-LMENGEIST.
V_SUM_NFL_AC = V_SUM_NFL_AC + I_QAVE-QKENNZAHL.
IF I_QAVE-QKENNZAHL <> 1.
V_SUM_LOT_AC = V_SUM_LOT_AC + I_QAVE-QKENNZAHL.
ENDIF.
V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_QALSLMENGEIST.
V_NUM_NFL_AC = V_NUM_NFL_AC + 1.
* ----------------------- Fim da Alterao --------------------------- *
ELSE.
* sumariza o numero de ocorrenciaspara um dados tipo de
controle
V_NUM_NFL_AC = V_NUM_NFL_AC + 1.
* contabiliza NF e LOT
V_SUM_NFL_AC = V_SUM_NFL_AC + I_QAVE-QKENNZAHL.
IF I_QAVE-QKENNZAHL <> 1.
V_SUM_LOT_AC = V_SUM_LOT_AC + I_QAVE-QKENNZAHL.
ENDIF.
* contabiliza o valor para calculo de nota de processo.
V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_QALSLMENGEIST.
ENDIF.
* gera tabela para impressao detalhada por material.
PERFORM F_GRAVA_DET_MAT.
ELSEIF I_QALS-ART = '90'.
READ TABLE I_QAVE WITH KEY PRUEFLOS = I_QALSPRUEFLOS.
IF SY-SUBRC NE 0.
CONTINUE.
ENDIF.
IF I_QAVE-VDATUM >= V_DTI_ANALISE AND
I_QAVE-VDATUM <= V_DT_FIM.
IF I_QAVE-VBEWERTUNG <> 'A'.
V_QKENNZAHL = I_QAVE-QKENNZAHL * -1.
ELSE.
V_QKENNZAHL = I_QAVE-QKENNZAHL.
ENDIF.
V_SUM_NPT_M = V_SUM_NPT_M + V_QKENNZAHL.
V_SUM_NPT_AC = V_SUM_NPT_AC + V_QKENNZAHL.
ELSE.
IF I_QAVE-VBEWERTUNG <> 'A'.
V_QKENNZAHL = I_QAVE-QKENNZAHL * -1.
ELSE.
V_QKENNZAHL = I_QAVE-QKENNZAHL.
ENDIF.
V_SUM_NPT_AC = V_SUM_NPT_AC + V_QKENNZAHL.
ENDIF.
ENDIF.
ENDLOOP.
MOVE: V_WERKS
TO I_ACUM-CENTRO,
V_LIFNR
TO I_ACUM-LIFNR,
V_SUM_PPM89_M TO I_ACUM-SUM_PPM89_M,
V_SUM_PPM89_AC TO I_ACUM-SUM_PPM89_AC,
V_NUM_NFL_M
TO I_ACUM-NUM_NFL_M,
V_NUM_NFL_AC TO I_ACUM-NUM_NFL_AC,
V_SUM_NFL_M
TO I_ACUM-SUM_NFL_M,
V_SUM_NFL_AC
TO I_ACUM-SUM_NFL_AC,
V_SUM_LOT_M
TO I_ACUM-SUM_LOT_M,
V_SUM_LOT_AC TO I_ACUM-SUM_LOT_AC,
V_SUM_PPM01_M TO I_ACUM-SUM_PPM01_M,
V_SUM_PPM01_AC TO I_ACUM-SUM_PPM01_AC.
APPEND I_ACUM.
CLEAR I_ACUM.
* Calcula dados finais com a contabilizacao feita.
PERFORM F_CALC_NOTAS.
* Atualiza tabela com os dados calculados.
PERFORM F_GRAVA_TABFIM.
ENDFORM.
*----------------------------------------------------------------------*
*
Form F_CALC_NOTAS.
*----------------------------------------------------------------------*
* Calcula dados finais com a contabilizacao feita.
*----------------------------------------------------------------------*
FORM F_CALC_NOTAS.
* verifica qual tipo de nota sera calculada.
* calcula nota de fornecimento-mes.
IF V_NUM_NFL_M > 0.
V_CHECK_NFL_M = ' '.
V_TOT_NFL_M = V_SUM_NFL_M / V_NUM_NFL_M.
V_TOT_LOT_M = 100 - ( V_SUM_LOT_M / V_NUM_NFL_M ).
ELSE.
V_CHECK_NFL_M = 'X'.
ENDIF.
* calcula nota de fornecimento-acumulado.
IF V_NUM_NFL_AC > 0.
49
ABAP Training
V_CHECK_NFL_AC = ' '.
V_TOT_NFL_AC = V_SUM_NFL_AC / V_NUM_NFL_AC.
V_TOT_LOT_AC = 100 - ( V_SUM_LOT_AC / V_NUM_NFL_AC ) .
ELSE.
V_CHECK_NFL_AC = 'X'.
* ----------------------- Fim da Alterao --------------------------- *
ENDIF.
* calcula nota processo-mes.
IF V_SUM_PPM01_M > 0.
V_TOT_PPM_M = ( V_SUM_PPM89_M / V_SUM_PPM01_M ) *
C_MILHAO.
ENDIF.
V_TOT_NPR_M = 100 - ( V_TOT_PPM_M / 100 ).
IF V_TOT_NPR_M < 0.
V_TOT_NPR_M = 0.
ENDIF.
* calcula nota processo-acumulado.
IF V_SUM_PPM01_AC > 0.
V_TOT_PPM_AC = ( V_SUM_PPM89_AC / V_SUM_PPM01_AC ) *
C_MILHAO.
ENDIF.
V_TOT_NPR_AC = 100 - ( V_TOT_PPM_AC / 100 ).
IF V_TOT_NPR_AC < 0.
V_TOT_NPR_AC = 0.
ENDIF.
V_TOT_NPT_M = 100 + V_SUM_NPT_M.
IF V_TOT_NPT_M > 100.
V_TOT_NPT_M = 100.
ENDIF.
IF V_TOT_NPT_M < 0.
V_TOT_NPT_M = 0.
ENDIF.
* calcula nota de pontualidade.
V_TOT_NPT_AC = 100 + V_SUM_NPT_AC.
IF V_TOT_NPT_AC > 100.
V_TOT_NPT_AC = 100.
ENDIF.
IF V_TOT_NPT_AC < 0.
V_TOT_NPT_AC = 0.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
*
Form F_GRAVA_TABFIM.
*----------------------------------------------------------------------*
* Grava tabela Final.
*----------------------------------------------------------------------*
FORM F_GRAVA_TABFIM.
* Verifica se ja existe registro gerado para empresa/fornecedor.
CLEAR: I_TABFIM.
READ TABLE I_TABFIM WITH KEY WERKS = V_WERKS
LIFNR = V_LIFNR.
IF SY-SUBRC NE 0.
I_TABFIM-WERKS = V_WERKS.
I_TABFIM-LIFNR = V_LIFNR.
I_TABFIM-NCQ_M = 100.
I_TABFIM-NCQ_AC = 100.
APPEND I_TABFIM.
ENDIF.
* Verifica qual tipo de nota foi calculado.
IF V_TIPO_NF <> 'FQ'.
* grava nota de fornecimento-mes.
IF V_CHECK_NFL_M = 'X'.
I_TABFIM-NFL_M = ' '.
I_TABFIM-LOT_M = ' '.
ELSE.
WRITE V_TOT_NFL_M TO I_TABFIM-NFL_M DECIMALS 0 RIGHTJUSTIFIED.
WRITE V_TOT_LOT_M TO I_TABFIM-LOT_M DECIMALS 2 RIGHTJUSTIFIED.
ENDIF.
* grava nota de fornecimento - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_TABFIM-NFL_AC = ' '.
I_TABFIM-LOT_AC = ' '.
ELSE.
WRITE V_TOT_NFL_AC TO I_TABFIM-NFL_AC DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_LOT_AC TO I_TABFIM-LOT_AC DECIMALS 2
RIGHT-JUSTIFIED.
ENDIF.
* grava valores para calculo futuro de PPM
WRITE V_SUM_PPM01_M TO I_TABFIM-PPM1_M DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_SUM_PPM01_AC TO I_TABFIM-PPM1_AC DECIMALS 0
RIGHT-JUSTIFIED.
* grava nota de processo - mes
IF V_CHECK_NFL_M = 'X'.
I_TABFIM-PPM_M = ' '.
I_TABFIM-NPR_M = ' '.
ELSE.
WRITE V_TOT_PPM_M TO I_TABFIM-PPM_M DECIMALS 0 RIGHTJUSTIFIED.
WRITE V_TOT_NPR_M TO I_TABFIM-NPR_M DECIMALS 0 RIGHTJUSTIFIED.
ENDIF.
* grava nota processo - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_TABFIM-PPM_AC = ' '.
I_TABFIM-NPR_AC = ' '.
ELSE.
WRITE V_TOT_PPM_AC TO I_TABFIM-PPM_AC DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_NPR_AC TO I_TABFIM-NPR_AC DECIMALS 0
RIGHT-JUSTIFIED.
ENDIF.
* grava nota de pontualidade - mes.
WRITE V_TOT_NPT_M TO I_TABFIM-NPT_M DECIMALS 0 RIGHTJUSTIFIED.
* grava nota de pontualidade - acumulado.
50
ABAP Training
WRITE V_TOT_NPT_AC TO I_TABFIM-NPT_AC DECIMALS 0 RIGHTJUSTIFIED.
ELSEIF V_TIPO_NF = 'FQ'.
* grava valores de nota de compromisso de qualidade - mes.
WRITE V_TOT_NCQ_M TO I_TABFIM-NCQ_M DECIMALS 0 RIGHTJUSTIFIED.
* grava valores de nota de compromisso de qualidade acumulado.
WRITE V_TOT_NCQ_AC TO I_TABFIM-NCQ_AC DECIMALS 0
RIGHT-JUSTIFIED.
ENDIF.
* atualiza tabela com valores calculados.
MODIFY I_TABFIM INDEX SY-TABIX.
IF V_TIPO_NF <> 'FQ'.
I_ACUM-CENTRO = I_TABFIM-WERKS.
I_ACUM-LIFNR = I_TABFIM-LIFNR.
I_ACUM-SUM_NPT_M = I_TABFIM-NPT_M.
I_ACUM-NUM_NPT_M = 1.
I_ACUM-SUM_NPT_AC = I_TABFIM-NPT_AC.
I_ACUM-NUM_NPT_AC = 1.
APPEND I_ACUM.
CLEAR I_ACUM.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
*
Form F_SELECT_NCQ.
*----------------------------------------------------------------------*
* Selecao dos dados referente a nota de compromisso com a
qualidade.
*----------------------------------------------------------------------*
FORM F_SELECT_NCQ.
* seleciona os dados da VIqMEL.
SELECT MAWERK
LIFNUM
MATNR
STRMN
QMNUM
OBJNR
EBELN
EBELP
FROM VIQMEL
INTO TABLE I_VIQMEL
WHERE MAWERK IN SO_WERKS AND
LIFNUM IN SO_FORNE AND
MATNR IN SO_MATNR AND
STRMN >= V_DT_INICIO AND
STRMN <= V_DT_FIM AND
( QMART = 'F2' OR QMART = 'Q2' ).
IF SY-SUBRC NE 0. "se no encontrou medida.
V_TOT_NCQ_M = 100.
V_TOT_NCQ_AC = 100.
MOVE: I_VIQMEL-MAWERKS TO I_ACUM-CENTRO,
I_VIQMEL-LIFNUM TO I_ACUM-LIFNR,
1 TO I_ACUM-SUM_EMDIA_M,
1 TO I_ACUM-SUM_EMDIA_AC.
APPEND I_ACUM.
CLEAR I_ACUM.
EXIT.
ENDIF.
* Procura por notas estornadas
SELECT OBJNR
INACT
FROM JEST
INTO TABLE I_JEST_NCQ
FOR ALL ENTRIES IN I_VIQMEL
WHERE OBJNR = I_VIQMEL-OBJNR AND
STAT = 'I0076'.
* Elimina notas de fornecimento de lotes que estejam estornados.
LOOP AT I_VIQMEL.
READ TABLE I_JEST WITH KEY OBJNR = I_VIQMEL-OBJNR.
IF SY-SUBRC = 0 AND I_JEST-INACT = SPACE.
* Elimina registro marcado para delecao
DELETE I_VIQMEL.
ENDIF.
ENDLOOP.
* Verifica se ainda ha algum registro na tabela i_viqmel.
DESCRIBE TABLE I_VIQMEL LINES V_LINHAS.
IF V_LINHAS EQ 0.
V_TOT_NCQ_M = 100.
V_TOT_NCQ_AC = 100.
MOVE: I_VIQMEL-MAWERKS TO I_ACUM-CENTRO,
I_VIQMEL-LIFNUM TO I_ACUM-LIFNR,
1 TO I_ACUM-SUM_EMDIA_M,
1 TO I_ACUM-SUM_EMDIA_AC.
APPEND I_ACUM.
CLEAR I_ACUM.
EXIT.
ENDIF.
IF V_LINHAS > 0. "se ainda existe medida procura pelas notas.
SELECT QMNUM
ERDAT
FROM VIQMSM
INTO TABLE I_VIQMSM
FOR ALL ENTRIES IN I_VIQMEL
WHERE QMNUM = I_VIQMEL-QMNUM.
ENDIF.
SORT I_VIQMEL BY MAWERKS LIFNUM.
* atribui tipo de nota para gravacao na tabela final.
LOOP AT I_VIQMEL.
IF I_VIQMEL-MAWERKS EQ ' ' OR I_VIQMEL-LIFNUM EQ ' '.
CONTINUE.
ENDIF.
ON CHANGE OF I_VIQMEL-MAWERKS OR I_VIQMEL-LIFNUM.
IF V_TIPO_NF = 'FQ'.
MOVE:
V_WERKS
TO I_ACUM-CENTRO,
V_LIFNR
TO I_ACUM-LIFNR,
V_SUM_ATRAS_M TO I_ACUM-SUM_ATRAS_M,
V_SUM_ATRAS_AC TO I_ACUM-SUM_ATRAS_AC,
V_SUM_EMDIA_M TO I_ACUM-SUM_EMDIA_M,
51
ABAP Training
V_SUM_EMDIA_AC TO I_ACUM-SUM_EMDIA_AC.
APPEND I_ACUM.
CLEAR I_ACUM.
* chama rotina para calculo na NCQ.
PERFORM F_CALC_NCQ.
* chama rotina para gravacao da tabela final.
PERFORM F_GRAVA_TABFIM.
* limpa variaveis
CLEAR: V_SUM_ATRAS_M, V_SUM_ATRAS_AC,
V_SUM_EMDIA_M, V_SUM_EMDIA_AC,
V_TOT_NOTAS_M, V_TOT_NOTAS_AC,
V_TOT_NCQ_M, V_TOT_NCQ_AC.
ENDIF.
ENDON.
* guarda valores para geracao de arquivo final.
V_WERKS = I_VIQMEL-MAWERKS.
V_LIFNR = I_VIQMEL-LIFNUM.
V_TIPO_NF = 'FQ'.
READ TABLE I_VIQMSM WITH KEY QMNUM = I_VIQMEL-QMNUM.
IF SY-SUBRC EQ 0.
IF I_VIQMSM-ERDAT > I_VIQMEL-STRMN.
"nota QM
atrasada.
IF I_VIQMEL-STRMN >= V_DTI_ANALISE AND
I_VIQMEL-STRMN <= V_DT_FIM.
V_SUM_ATRAS_M = V_SUM_ATRAS_M + 1.
V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
ELSE.
V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
ENDIF.
ELSE.
IF I_VIQMEL-STRMN >= V_DTI_ANALISE AND
I_VIQMEL-STRMN <= V_DT_FIM.
V_SUM_EMDIA_M = V_SUM_EMDIA_M + 1.
V_SUM_EMDIA_AC = V_SUM_EMDIA_AC + 1.
ELSE.
V_SUM_EMDIA_AC = V_SUM_EMDIA_AC + 1.
ENDIF.
ENDIF.
ELSE.
IF I_VIQMEL-STRMN >= V_DTI_ANALISE AND
I_VIQMEL-STRMN <= V_DT_FIM.
V_SUM_ATRAS_M = V_SUM_ATRAS_M + 1.
V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
ELSE.
V_SUM_ATRAS_AC = V_SUM_ATRAS_AC + 1.
ENDIF.
ENDIF.
ENDLOOP.
MOVE: I_VIQMEL-MAWERKS TO I_ACUM-CENTRO,
I_VIQMEL-LIFNUM TO I_ACUM-LIFNR,
V_SUM_ATRAS_M TO I_ACUM-SUM_ATRAS_M,
V_SUM_ATRAS_AC TO I_ACUM-SUM_ATRAS_AC,
V_SUM_EMDIA_M TO I_ACUM-SUM_EMDIA_M,
V_SUM_EMDIA_AC TO I_ACUM-SUM_EMDIA_AC.
APPEND I_ACUM.
CLEAR I_ACUM.
* chama rotina para calculo da NCQ.
PERFORM F_CALC_NCQ.
* chama rotina para gravacao da tabela final.
PERFORM F_GRAVA_TABFIM.
ENDFORM.
*----------------------------------------------------------------------*
*
Form F_CALC_NCQ
*----------------------------------------------------------------------*
* rotina para calculo de NCQ.
*----------------------------------------------------------------------*
FORM F_CALC_NCQ.
* calculo do mes.
V_TOT_NOTAS_M = V_SUM_EMDIA_M + V_SUM_ATRAS_M.
IF V_TOT_NOTAS_M > 0.
V_TOT_NCQ_M = ( V_SUM_EMDIA_M / V_TOT_NOTAS_M ) * 100.
ELSE.
V_TOT_NCQ_M = 100.
ENDIF.
* calculo do acumulado.
V_TOT_NOTAS_AC = V_SUM_EMDIA_AC + V_SUM_ATRAS_AC.
IF V_TOT_NOTAS_AC > 0.
V_TOT_NCQ_AC = ( V_SUM_EMDIA_AC / V_TOT_NOTAS_AC ) *
100.
ELSE.
V_TOT_NCQ_AC = 100.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
*
Form F_SELECT_NAS.
*----------------------------------------------------------------------*
* Form para selecao dos dados referentea a nota de avaliacao de
sistem.
*----------------------------------------------------------------------*
FORM F_SELECT_NAS.
SELECT LIFNR
NAME1
SPRAS
STRAS
PFACH
PSTLZ
ORT01
REGIO
LAND1
FROM LFA1
INTO TABLE I_LFA1
WHERE LIFNR IN SO_FORNE.
ENDFORM.
*----------------------------------------------------------------------*
*
Form F_SELECT_NQF
*----------------------------------------------------------------------*
* Form para selecao dos dados referente a nota de qualidad. de
forn.
*----------------------------------------------------------------------*
FORM F_SELECT_NQF.
SELECT SINGLE KRGEW
FROM T147C
INTO V_FATOR_NFL
WHERE EKORG = '0001' AND
52
ABAP Training
HKRIT = '02' AND
TKRIT = '01'.
SELECT SINGLE KRGEW
FROM T147C
INTO V_FATOR_NPR
WHERE EKORG = '0001' AND
HKRIT = '02' AND
TKRIT = '04'.
SELECT SINGLE KRGEW
FROM T147C
INTO V_FATOR_NCQ
WHERE EKORG = '0001' AND
HKRIT = '02' AND
TKRIT = '02'.
* total de fatores de ponderacao
V_TOT_POND = V_FATOR_NFL + V_FATOR_NPR + V_FATOR_NCQ.
* loop na tabela de notas anterior p/ atualizacao do campo de nqf.
LOOP AT I_TABFIM.
* Se NFL e NPR estiverem BRANCOS, passar BRANCO *
IF I_TABFIM-NFL_M = ' ' AND I_TABFIM-NPR_M = ' '.
I_TABFIM-NQF_M = ' '.
ELSE.
IF V_TOT_POND <> 0.
"mes
V_TOT_NQF_M = ( ( I_TABFIM-NFL_M * V_FATOR_NFL ) +
( I_TABFIM-NPR_M * V_FATOR_NPR ) +
( I_TABFIM-NCQ_M * V_FATOR_NCQ ) ) /
V_TOT_POND.
WRITE V_TOT_NQF_M TO I_TABFIM-NQF_M DECIMALS 0.
ENDIF.
ENDIF.
IF I_TABFIM-NFL_AC = ' ' AND I_TABFIM-NPR_AC = ' '.
I_TABFIM-NQF_AC = ' '.
ELSE.
IF V_TOT_POND <> 0.
V_TOT_NQF_AC = ( ( I_TABFIM-NFL_AC * V_FATOR_NFL ) +
( I_TABFIM-NPR_AC * V_FATOR_NPR ) +
( I_TABFIM-NCQ_AC * V_FATOR_NCQ ) ) /
V_TOT_POND.
WRITE V_TOT_NQF_AC TO I_TABFIM-NQF_AC DECIMALS 0.
ENDIF.
ENDIF.
* Atualiza tabela
MODIFY I_TABFIM.
ENDLOOP.
SELECT WERKS
NAME1
SPRAS
STRAS
PFACH
PSTLZ
ORT01
REGIO
LAND1
FROM T001W
INTO TABLE I_T001W
FOR ALL ENTRIES IN I_TABFIM
WHERE WERKS = I_TABFIM-WERKS.
SELECT SINGLE
WERKS
NAME1
STRAS
PFACH
PSTLZ
ORT01
REGIO
LAND1
FROM KNA1
INTO I_REMET
WHERE KUNNR = P_REMET.
RAF)
53
ABAP Training
*----------------------------------------------------------------------*
FORM F_PRINT_REPORT.
DATA: V_FORNEC LIKE QALS-LIFNR.
CLEAR: V_TOT_NFL_M, V_TOT_NFL_AC,
V_TOT_NPR_M, V_TOT_NPR_AC,
V_TOT_NCQ_M, V_TOT_NCQ_AC,
V_TOT_NQF_M, V_TOT_NQF_AC,
V_TOT_NPT_M, V_TOT_NPT_AC,
V_TOT_NAS_M,
V_TOT_PPM_M, V_TOT_PPM_AC,
V_TOT_LOT_M, V_TOT_LOT_AC.
DESCRIBE TABLE I_TABFIM LINES V_LINHAS.
IF V_LINHAS EQ 0.
MESSAGE I083 WITH
'No h dados para os critrios de seleo' 'informados'.
EXIT.
ENDIF.
54
ABAP Training
FORM F_PRINT_REP_DET.
LOOP AT I_TAB_DET_FIM.
IF I_TAB_DET_FIM-LIFNR = I_TABFIM-LIFNR AND
I_TAB_DET_FIM-WERKS = I_TABFIM-WERKS.
CLEAR: I_MAKT, I_FORNEC_MAT.
READ TABLE I_MAKT WITH KEY MATNR = I_TAB_DET_FIMMATNR.
READ TABLE I_FORNEC_MAT WITH KEY LIFNR =
I_TAB_DET_FIM-LIFNR
MATNR = I_TAB_DET_FIM-MATNR.
FORMAT COLOR COL_NORMAL.
WRITE: /02 I_TAB_DET_FIM-MATNR,
17 I_MAKT-MAKTX.
WRITE: 55 I_TAB_DET_FIM-PPM_M,
70 I_TAB_DET_FIM-LOT_M.
WRITE: 84 I_TAB_DET_FIM-PPM_AC,
97 I_TAB_DET_FIM-LOT_AC,
113 I_FORNEC_MAT-PPM_OBJ,
133 I_FORNEC_MAT-LOT_OBJ,
170 ''.
ENDIF.
ENDLOOP.
ULINE.
ENDFORM.
*----------------------------------------------------------------------*
*
Form f_prepara_sapscript.
*----------------------------------------------------------------------*
* Prepara SAPSCRIPT para impresso
*----------------------------------------------------------------------*
FORM F_PREPARA_SAPSCRIPT.
DATA: V_FLAG_IMPRES(1) TYPE C,
V_PRIM_VEZ_SAPSCRIPT TYPE C VALUE 'S'.
* Define valores de linhas x quebra de pgina
C_LINHA = ( 64 * 127 / 30 ). "64 linhas * X mm por linha
C_LINHA1 = ( 61 * 127 / 30 ). "61 linhas * X mm por linha
* Contador de nmero de linhas
* 8.89 cm = 21 linhas do topo da pgina (11 linhas da MAIN + 10
at
*
o topo)
V_TIME = 889 / 10.
DESCRIBE TABLE I_TABFIM LINES V_LINHAS.
IF V_LINHAS = 0.
MESSAGE I083 WITH
'No h dados para os critrios de seleo' ' informados'.
EXIT.
ENDIF.
V_FLAG_IMPRES = C_SIM.
V_PRIM_VEZ = C_SIM.
SORT I_TABFIM BY LIFNR.
* Imprime SAPSCRIPT
LOOP AT I_TABFIM.
55
ABAP Training
ZSAPSCRIP2-REM_CITY
= I_REMET-ORT01.
ZSAPSCRIP2-REM_REG
= I_REMET-REGIO.
READ TABLE I_PAIS WITH KEY LAND1 = I_REMET-LAND1.
ZSAPSCRIP2-REM_PAIS
= I_PAIS-LANDX.
IF I_FORNEC-NAS = ' '.
* Se o pas do Remetente for
* argentina e o pas do fornecedor for argentina, imprimir o
relatrio
* espanhol. Se ambos forem Brasil, imprimir em portugus. Para
os
* demais casos, imprimir em ingls.
PERFORM F_WRITE_RESUMO_UNIDADES.
V_PRIM_VEZ_SAPSCRIPT = C_NAO(1).
ENDIF.
* Resumo por Unidade
ZSAPSCRIP2-NQF_M = I_TABFIM-NQF_M.
ZSAPSCRIP2-NQF_AC = I_TABFIM-NQF_AC.
ZSAPSCRIP2-NFL_M = I_TABFIM-NFL_M.
ZSAPSCRIP2-NFL_AC = I_TABFIM-NFL_AC.
ZSAPSCRIP2-NPR_M = I_TABFIM-NPR_M.
ZSAPSCRIP2-NPR_AC = I_TABFIM-NPR_AC.
ZSAPSCRIP2-NCQ_M = I_TABFIM-NCQ_M.
ZSAPSCRIP2-NCQ_AC = I_TABFIM-NCQ_AC.
ZSAPSCRIP2-NPT_M = I_TABFIM-NPT_M+1.
ZSAPSCRIP2-NPT_AC = I_TABFIM-NPT_AC+1.
56
ABAP Training
* Encerra a impresso via SAPSCRIPT.
CALL FUNCTION 'CLOSE_FORM'
EXCEPTIONS
UNOPENED = 1
OTHERS = 2.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
*
Form f_CALC_DET_MAT.
*----------------------------------------------------------------------*
* SUMARIZA VALORES POR MATERIAL
*----------------------------------------------------------------------*
FORM F_CALC_DET_MAT.
CLEAR: V_SUM_PPM89_M,
V_SUM_PPM89_AC,
V_NUM_NFL_M, V_SUM_NFL_M, V_SUM_PPM01_M,
V_SUM_LOT_M, V_SUM_LOT_AC,
V_NUM_NFL_AC, V_SUM_NFL_AC, V_SUM_PPM01_AC.
CLEAR: V_WERKS, V_LIFNR, V_MATNR, V_TIPO_NF.
SORT I_DET_MAT BY WERKS LIFNR MATNR TIPO_NF.
LOOP AT I_DET_MAT.
ON CHANGE OF I_DET_MAT-WERKS OR I_DET_MAT-LIFNR
OR I_DET_MAT-MATNR.
IF V_TIPO_NF NE ' '.
PERFORM F_GRAVA_DET_FIM.
CLEAR: V_SUM_PPM89_M,
V_SUM_PPM89_AC,
V_SUM_LOT_M, V_SUM_LOT_AC,
V_NUM_NFL_M, V_SUM_NFL_M, V_SUM_PPM01_M,
V_NUM_NFL_AC, V_SUM_NFL_AC, V_SUM_PPM01_AC.
ENDIF.
ENDON.
* guarda valores para geracao de arquivo final.
V_WERKS = I_DET_MAT-WERKS.
V_LIFNR = I_DET_MAT-LIFNR.
V_MATNR = I_DET_MAT-MATNR.
V_TIPO_NF = I_DET_MAT-TIPO_NF.
IF I_DET_MAT-TIPO_NF = '89'.
IF I_DET_MAT-DATA >= V_DTI_ANALISE AND
I_DET_MAT-DATA <= V_DT_FIM.
V_SUM_PPM89_M = V_SUM_PPM89_M + I_DET_MATLMENGESCH.
V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_DET_MATLMENGESCH.
ELSE.
V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_DET_MATLMENGESCH.
ENDIF.
ELSEIF I_DET_MAT-TIPO_NF = '01'.
IF I_DET_MAT-DATA >= V_DTI_ANALISE AND
I_DET_MAT-DATA <= V_DT_FIM.
* sumariza o numero de ocorrencias para um dado tipo de
controle.
V_NUM_NFL_M = V_NUM_NFL_M + 1.
57
ABAP Training
* grava nota de fornecimento - mes_acumulado.
IF V_NUM_NFL_M > 0.
V_CHECK_NFL_M = ' '.
V_TOT_LOT_M = 100 - ( V_SUM_LOT_M / V_NUM_NFL_M ).
ELSE.
V_CHECK_NFL_M = 'X'.
ENDIF.
* grava nota de fornecimento mes / acum.
IF V_NUM_NFL_AC > 0.
V_CHECK_NFL_AC = ' '.
V_TOT_LOT_AC = 100 - ( V_SUM_LOT_AC / V_NUM_NFL_AC ).
ELSE.
V_CHECK_NFL_AC = 'X'.
ENDIF.
* calcula nota de processo - mes.
IF V_SUM_PPM01_M > 0.
V_TOT_PPM_M = ( V_SUM_PPM89_M / V_SUM_PPM01_M ) *
C_MILHAO.
ENDIF.
* calcula nota de processo - acum.
IF V_SUM_PPM01_AC > 0.
V_TOT_PPM_AC = ( V_SUM_PPM89_AC / V_SUM_PPM01_AC ) *
C_MILHAO.
ENDIF.
* grava nota processo mes / ac.
IF V_CHECK_NFL_AC = 'X'.
I_TAB_DET_FIM-PPM_M = ' '.
I_TAB_DET_FIM-PPM_AC = ' '.
I_TAB_DET_FIM-LOT_M = ' '.
I_TAB_DET_FIM-LOT_AC = ' '.
ELSE.
WRITE V_TOT_LOT_AC TO I_TAB_DET_FIM-LOT_AC DECIMALS 2
RIGHT-JUSTIFIED.
WRITE V_TOT_LOT_M TO I_TAB_DET_FIM-LOT_M DECIMALS 2
RIGHT-JUSTIFIED.
WRITE V_TOT_PPM_M TO I_TAB_DET_FIM-PPM_M DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_PPM_AC TO I_TAB_DET_FIM-PPM_AC DECIMALS 0
RIGHT-JUSTIFIED.
ENDIF.
MODIFY I_TAB_DET_FIM INDEX SY-TABIX.
ENDFORM.
*----------------------------------------------------------------------*
*
Form f_acha_descricoes.
*----------------------------------------------------------------------*
* Grava tabela final de detalhes de itens.
*----------------------------------------------------------------------*
FORM F_ACHA_DESCRICOES.
SELECT MATNR
MAKTX
FROM MAKT
INTO TABLE I_MAKT
FOR ALL ENTRIES IN I_TAB_DET_FIM
WHERE MATNR = I_TAB_DET_FIM-MATNR.
ENDFORM.
*----------------------------------------------------------------------*
*
Form f_print_total.
*----------------------------------------------------------------------*
* Imprime total do rel. UM.
*----------------------------------------------------------------------*
FORM F_PRINT_TOTAL.
FORMAT COLOR COL_TOTAL.
WRITE: /05 'Acum ms MTB ',
32 I_TOT_FORNEC-NFL_M,
47 I_TOT_FORNEC-NPR_M,
62 I_TOT_FORNEC-NCQ_M,
77 I_TOT_FORNEC-NQF_M,
92 I_TOT_FORNEC-NPT_M,
107 I_TOT_FORNEC-PPM_M,
137 I_TOT_FORNEC-LOT_M,
170 ' '.
WRITE: /05 'Acum MTB(' NO-GAP, P_PERIOD, 'meses)',
32 I_TOT_FORNEC-NFL_AC,
47 I_TOT_FORNEC-NPR_AC,
62 I_TOT_FORNEC-NCQ_AC,
77 I_TOT_FORNEC-NQF_AC,
92 I_TOT_FORNEC-NPT_AC,
107 I_TOT_FORNEC-PPM_AC,
137 I_TOT_FORNEC-LOT_AC,
170 ' '.
FORMAT COLOR COL_NORMAL.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form F_OPEN_FORM
*&---------------------------------------------------------------------*
* Abre o frmulrio para impresso via SAPSCRIPT
*----------------------------------------------------------------------*
FORM F_OPEN_FORM.
DATA: V_DIALOG TYPE C VALUE 'X'.
ITCPO-TDDEST = P_IMPRE.
IF P_BATCH NE ' '.
ITCPO-TDIMMED = 'X'.
ITCPO-TDNEWID = 'X'.
V_DIALOG = ' '.
ENDIF.
* Abre o frmulrio para impresso via SAPSCRIPT
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE
= 'PRINTER'
FORM
= 'Z_AVAL_FORNEC'
LANGUAGE
= SY-LANGU
OPTIONS
= ITCPO
DIALOG
= V_DIALOG.
ENDFORM.
" F_OPEN_FORM
*&---------------------------------------------------------------------*
*&
Form F_WRITE_RESUMO_UNIDADES
*&---------------------------------------------------------------------*
* Chama o elemento de texto RESUMO_TODAS_ATIVIDADES
*----------------------------------------------------------------------*
FORM F_WRITE_RESUMO_UNIDADES.
* Chama o elemento de texto RESUMO_TODAS_ATIVIDADES
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT
= 'RESUMO_TODAS_UNIDADES'
58
ABAP Training
WINDOW
ENDFORM.
= 'MAIN'.
" F_WRITE_RESUMO_UNIDADES
*&---------------------------------------------------------------------*
*&
Form F_WRITE_RESUMO_POR_UNIDADE
*&---------------------------------------------------------------------*
* Chama o elemento de texto RESUMO_POR_UNIDADE
*----------------------------------------------------------------------*
FORM F_WRITE_RESUMO_POR_UNIDADE.
* Chama o elemento de texto RESUMO_POR_UNIDADE
* que contm o cabealho do RESUMO_POR_UNIDADE
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT
= 'RESUMO_POR_UNIDADE'
WINDOW
= 'MAIN'.
ENDFORM.
" F_WRITE_RESUMO_POR_UNIDADE
*&---------------------------------------------------------------------*
*&
Form F_WRITE_DET_RESUMO_POR_UNIDADE
*&---------------------------------------------------------------------*
* Chama o elemento de texto DETALHE_RESUMO_POR_UNIDADE,
que contm os
* dados do RESUMO_POR_UNIDADE.
*----------------------------------------------------------------------*
FORM F_WRITE_DET_RESUMO_POR_UNIDADE.
* Chama o elemento de texto DETALHE_RESUMO_POR_UNIDADE,
que contm os
* dados do RESUMO_POR_UNIDADE.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT
= 'DETALHE_RESUMO_POR_UNIDADE'
WINDOW
= 'MAIN'.
V_TIME = V_TIME + ( 127 / 10 ). "acrescenta 3 linhas origem
ZSAPSCRIP2-CONT = V_TIME.
ENDFORM.
" F_WRITE_DET_RESUMO_POR_UNIDADE
*&---------------------------------------------------------------------*
*&
Form F_WRITE_RESUMO_INDICE
*&---------------------------------------------------------------------*
* Chama o elemento de texto RESUMO_INDICES_PPM
*----------------------------------------------------------------------*
FORM F_WRITE_RESUMO_INDICE.
* Chama o elemento de texto RESUMO_INDICES_PPM
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT
= 'RESUMO_INDICES_PPM'
WINDOW
= 'MAIN'.
V_TIME = V_TIME + ( 1270 / 75 ). "PULA 4 LINHAS
ZSAPSCRIP2-CONT = V_TIME.
ENDFORM.
" F_WRITE_RESUMO_INDICE
*&---------------------------------------------------------------------*
*&
Form F_WRITE_DET_RESUMO_INDICE
*&---------------------------------------------------------------------*
* Chama o elemento de texto DETALHE_RESUMO_INDICES_PPM,
que contm os
* dados do RESUMO_INDICES_PPM.
*----------------------------------------------------------------------*
FORM F_WRITE_DET_RESUMO_INDICE.
* Chama o elemento de texto DETALHE_RESUMO_INDICES_PPM,
que contm os
* dados do RESUMO_INDICES_PPM.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT
= 'DETALHE_RESUMO_INDICES_PPM'
WINDOW
= 'MAIN'.
V_TIME = V_TIME + ( 127 / 30 ). "AUMENTA UMA LINHA
ZSAPSCRIP2-CONT = V_TIME.
ENDFORM.
" F_WRITE_DET_RESUMO_INDICE
*&---------------------------------------------------------------------*
*&
Form F_WRITE_VERSO_PAG
*&---------------------------------------------------------------------*
FORM F_WRITE_VERSO_PAG.
* Se o pas do Remetente for
* argentina e o pas do fornecedor for argentina, imprimir o
relatrio
* espanhol. Se ambos forem Brasil, imprimir em portugus. Para
os
* demais casos, imprimir em ingls.
IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
V_IDIOMA = C_P.
ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG.
V_IDIOMA = C_ESP.
ELSE.
V_IDIOMA = C_ENG.
ENDIF.
* Abre o formulrio para impresso da pgina de verso
CALL FUNCTION 'START_FORM'
EXPORTING
FORM
= 'Z_AVAL_FORNEC'
LANGUAGE
= V_IDIOMA
STARTPAGE = 'VERSO'
IMPORTING
LANGUAGE
= SY-LANGU.
* imprime pgina de verso
CALL FUNCTION 'WRITE_FORM'
EXPORTING
WINDOW = 'INFO3'.
CALL FUNCTION 'END_FORM'.
"Encerra formulrio
ENDFORM.
" F_WRITE_VERSO_PAG
*&---------------------------------------------------------------------*
*&
Form F_LOOP_RESUMO_INDICE
*&---------------------------------------------------------------------*
*
text
*
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM F_LOOP_RESUMO_INDICE.
* Resumo dos ndices de PPM de linha e % rejeio de Lote no
Recebimento
V_PRIM_VEZ = C_SIM.
LOOP AT I_RES_INDICE.
IF V_PRIM_VEZ = C_SIM(1) AND V_TIME <= C_LINHA1.
* Form de impresso de cabec de Resumo dos ndices
PERFORM F_WRITE_RESUMO_INDICE.
59
ABAP Training
V_PRIM_VEZ = C_NAO.
ELSEIF V_TIME > C_LINHA.
PERFORM F_WRITE_RESUMO_INDICE.
V_TIME = ( 14 * 127 / 30 ).
ENDIF.
CLEAR: I_FORNEC.
READ TABLE I_FORNEC WITH KEY LIFNR = I_RES_INDICE-LIFNR.
READ TABLE I_T001W WITH KEY WERKS = I_RES_INDICEWERKS.
ZSAPSCRIP2-CONT = V_TIME.
ZSAPSCRIP2-PPM_M_I = I_RES_INDICE-PPM_M.
ZSAPSCRIP2-PPM_AC_I = I_RES_INDICE-PPM_AC.
ZSAPSCRIP2-NAMEC
= I_T001W-NAME.
ZSAPSCRIP2-LOT_M = I_RES_INDICE-LOT_M.
ZSAPSCRIP2-LOT_AC = I_RES_INDICE-LOT_AC.
ZSAPSCRIP2-PPM_OBJ_R = I_FORNEC-PPM_OBJ.
ZSAPSCRIP2-LOT_OBJ_R = I_FORNEC-LOT_OBJ.
* Imprime Resumo dos ndices de PPM
PERFORM F_WRITE_DET_RESUMO_INDICE.
ENDLOOP.
* Encerra formulrio de dados de Nota
CALL FUNCTION 'END_FORM'.
* Form de Impresso de verso da pgina
PERFORM F_WRITE_VERSO_PAG.
* Limpa tabela
REFRESH I_RES_INDICE.
ENDFORM.
" F_LOOP_RESUMO_INDICE
*&---------------------------------------------------------------------*
*&
Form F_GRAVA_RES_INDICE
*&---------------------------------------------------------------------*
*
text
*
*----------------------------------------------------------------------*
FORM F_GRAVA_RES_INDICE.
I_RES_INDICE-LIFNR = I_TABFIM-LIFNR.
I_RES_INDICE-WERKS = I_TABFIM-WERKS.
I_RES_INDICE-PPM_M = I_TABFIM-PPM_M.
I_RES_INDICE-PPM_AC = I_TABFIM-PPM_AC.
I_RES_INDICE-LOT_M = I_TABFIM-LOT_M.
I_RES_INDICE-LOT_AC = I_TABFIM-LOT_AC.
I_RES_INDICE-LOT_OBJ_M = I_TABFIM-LOT_OBJ_M.
I_RES_INDICE-PPM_OBJ_M = I_TABFIM-PPM_OBJ_M.
APPEND I_RES_INDICE.
ENDFORM.
" F_GRAVA_RES_INDICE
*&---------------------------------------------------------------------*
*&
Form F_EXTENSO_DATA
*&---------------------------------------------------------------------*
FORM F_EXTENSO_DATA USING P_DATA_MES
P_DATA_ANO
CHANGING P_DATA_ATU.
DATA: V_ID LIKE T247-SPRAS.
* Se o pas do Remetente for
* argentina e o pas do fornecedor for argentina, imprimir o
relatrio
* espanhol. Se ambos forem Brasil, imprimir em portugus. Para
os
* demais casos, imprimir em ingls.
IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
V_ID = C_P.
ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG.
V_ID = C_ESP.
ELSE.
V_ID = C_ENG.
ENDIF.
SELECT SINGLE LTX
FROM T247
INTO T247-LTX
WHERE SPRAS = V_ID
AND MNR = P_DATA_MES.
CONCATENATE T247-LTX(3) '/' P_DATA_ANO INTO P_DATA_ATU.
ENDFORM.
" F_EXTENSO_DATA
*&---------------------------------------------------------------------*
*&
Form F_START_FORM
*&---------------------------------------------------------------------*
*
text
*
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM F_START_FORM.
* Se o pas do Remetente for
* argentina e o pas do fornecedor for argentina, imprimir o
relatrio
* espanhol. Se ambos forem Brasil, imprimir em portugus. Para
os
* demais casos, imprimir em ingls.
IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR.
V_IDIOMA = C_P.
ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG.
V_IDIOMA = C_ESP.
ELSE.
V_IDIOMA = C_ENG.
ENDIF.
* Abre o formulrio para impresso da pgina de verso
CALL FUNCTION 'START_FORM'
EXPORTING
FORM
= 'Z_AVAL_FORNEC'
LANGUAGE
= V_IDIOMA
STARTPAGE = 'FIRST'
IMPORTING
LANGUAGE
= SY-LANGU.
ENDFORM.
" F_START_FORM
*&---------------------------------------------------------------------*
*&
Form CARACTERISTICA
*&---------------------------------------------------------------------*
*
text
*
60
ABAP Training
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM CARACTERISTICA USING P_ATNAM P_OBJEK P_KLART
P_VALOR.
READ TABLE I_CABN WITH KEY ATNAM = P_ATNAM.
IF SY-SUBRC NE 0.
P_VALOR = 'ERRO'.
EXIT.
ENDIF.
READ TABLE I_AUSP WITH KEY OBJEK = P_OBJEK
ATINN = I_CABN-ATINN
KLART = P_KLART.
IF SY-SUBRC NE 0.
P_VALOR = ' '.
EXIT.
ENDIF.
IF I_CABN-ATFOR = 'NUM'.
V_ATFLV = I_AUSP-ATFLV.
IF P_VALOR = V_VAL_PPM.
WRITE V_ATFLV TO P_VALOR DECIMALS 0.
ELSE.
P_VALOR = V_ATFLV.
ENDIF.
ELSE.
P_VALOR = I_AUSP-ATWRT.
ENDIF.
ENDFORM.
" CARACTERISTICA
*&---------------------------------------------------------------------*
*&
Form f_calc_ppm_obj.
*&---------------------------------------------------------------------*
*
Calcula PPM e OBJ
*----------------------------------------------------------------------*
FORM F_CALC_PPM_OBJ.
DATA: V_OBJEK_FORN(50) TYPE C,
V_OBJEK_MAT(50) TYPE C.
* selecao na CABN
SELECT ATINN
ADZHL
ATNAM
ATFOR
FROM CABN
INTO TABLE I_CABN
WHERE ATNAM = C_LOTE OR
ATNAM = C_PPM OR
ATNAM = C_NAS.
select objek
atinn
atwrt
atflv
klart
from ausp
into table i_ausp
for all entries in i_cabn
where klart = c_dez or
klart = c_z and
atinn = i_cabn-atinn.
LOOP AT I_TABFIM.
ON CHANGE OF I_TABFIM-LIFNR.
* Calcula valor de OBJ PPM
V_OBJEK_FORN = I_TABFIM-LIFNR.
PERFORM CARACTERISTICA USING C_PPM V_OBJEK_FORN
C_DEZ V_VAL_PPM.
* Calcula valor de OBJ LOTE
PERFORM CARACTERISTICA USING C_LOTE V_OBJEK_FORN
C_DEZ V_VAL_LOTE.
* Grava valores selecionados
I_FORNEC-LIFNR = I_TABFIM-LIFNR.
TRANSLATE V_VAL_LOTE USING '.,'.
WRITE V_VAL_PPM TO I_FORNEC-PPM_OBJ RIGHT-JUSTIFIED.
WRITE V_VAL_LOTE TO I_FORNEC-LOT_OBJ RIGHT-JUSTIFIED.
READ TABLE I_CABN WITH KEY ATNAM = C_NAS.
IF SY-SUBRC NE 0.
I_FORNEC-NAS = ' '.
ELSE.
READ TABLE I_AUSP WITH KEY OBJEK = V_OBJEK_FORN
ATINN = I_CABN-ATINN
KLART = C_DEZ.
IF SY-SUBRC NE 0.
I_FORNEC-NAS = ' '.
ELSE.
IF I_CABN-ATFOR = 'NUM'.
V_ATFLV = I_AUSP-ATFLV.
WRITE V_ATFLV TO V_VAL_NAS DECIMALS 0.
ELSE.
V_VAL_NAS = I_AUSP-ATWRT.
ENDIF.
WRITE V_VAL_NAS TO I_FORNEC-NAS RIGHT-JUSTIFIED.
ENDIF.
ENDIF.
APPEND I_FORNEC.
CLEAR: V_VAL_PPM, V_VAL_LOTE.
ENDON.
ENDLOOP.
CLEAR: V_VAL_PPM, V_VAL_LOTE.
LOOP AT I_TAB_DET_FIM.
ON CHANGE OF I_TAB_DET_FIM-LIFNR OR I_TAB_DET_FIMMATNR.
V_OBJEK_MAT+0(18) = I_TAB_DET_FIM-MATNR.
V_OBJEK_MAT+18(10) = I_TAB_DET_FIM-LIFNR.
* Calcula valor de OBJ PPM
PERFORM CARACTERISTICA USING C_PPM V_OBJEK_MAT
C_Z V_VAL_PPM.
* Calcula valor de OBJ LOTE
PERFORM CARACTERISTICA USING C_LOTE V_OBJEK_MAT
C_Z V_VAL_LOTE.
* Gravar dados
I_FORNEC_MAT-LIFNR = I_TAB_DET_FIM-LIFNR.
I_FORNEC_MAT-MATNR = I_TAB_DET_FIM-MATNR.
TRANSLATE V_VAL_LOTE USING '.,'.
61
ABAP Training
WRITE V_VAL_PPM TO I_FORNEC_MAT-PPM_OBJ RIGHTJUSTIFIED.
WRITE V_VAL_LOTE TO I_FORNEC_MAT-LOT_OBJ RIGHTJUSTIFIED.
APPEND I_FORNEC_MAT.
CLEAR: V_VAL_PPM, V_VAL_LOTE.
ENDON.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form f_grava_total_final.
*&---------------------------------------------------------------------*
*
grava total final.
*----------------------------------------------------------------------*
FORM F_GRAVA_TOTAL_FINAL.
MOVE: I_TABFIM-WERKS
TO I_TOT_CENTRO-WERKS,
I_TABFIM-NFL_M
TO I_TOT_CENTRO-NFL,
I_TABFIM-NPR_M
TO I_TOT_CENTRO-NPR,
I_TABFIM-NCQ_M
TO I_TOT_CENTRO-NCQ,
I_TABFIM-NQF_M
TO I_TOT_CENTRO-NQF,
I_TABFIM-NPT_M
TO I_TOT_CENTRO-NPT,
I_TABFIM-PPM_M
TO I_TOT_CENTRO-PPM,
I_TABFIM-LOT_M
TO I_TOT_CENTRO-LOT.
COLLECT I_TOT_CENTRO.
MOVE: '9999'
TO I_TOT_CENTRO-WERKS.
COLLECT I_TOT_CENTRO.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form f_print_total_final.
*&---------------------------------------------------------------------*
*
Imprime o total final.
*----------------------------------------------------------------------*
FORM F_PRINT_TOTAL_FINAL.
FORMAT COLOR COL_TOTAL.
WRITE: /03 'ACUM NO CENTRO',
170 ' '.
SORT I_TOT_CENTRO BY WERKS.
LOOP AT I_TOT_CENTRO.
CLEAR: I_T001W.
READ TABLE I_T001W WITH KEY WERKS = I_TOT_CENTROWERKS.
WRITE: /03 I_TOT_CENTRO-WERKS,
I_T001W-NAME,
32 I_TOT_CENTRO-NFL,
47 I_TOT_CENTRO-NPR,
62 I_TOT_CENTRO-NCQ,
77 I_TOT_CENTRO-NQF,
92 I_TOT_CENTRO-NPT,
107 I_TOT_CENTRO-PPM,
137 I_TOT_CENTRO-LOT,
170 ' '.
ENDLOOP.
ULINE.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form f_print_total_acum.
*&---------------------------------------------------------------------*
*
Imprime o total final acum.
*----------------------------------------------------------------------*
FORM F_PRINT_TOTAL_ACUM.
WRITE: /03 'ACUM NO MTB',
170 ' '.
WRITE: /32 I_ACUM_MTB-NFL_AC,
47 I_ACUM_MTB-NPR_AC,
62 I_ACUM_MTB-NCQ_AC,
77 I_ACUM_MTB-NQF_AC,
92 I_ACUM_MTB-NPT_AC,
107 I_ACUM_MTB-PPM_AC,
137 I_ACUM_MTB-LOT_AC,
170 ' '.
ULINE.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form CALCULA_PERIODO
*&---------------------------------------------------------------------*
* Este Form utilizado para calcular o ms de incio do perodo
* selecionado
*----------------------------------------------------------------------*
FORM CALCULA_PERIODO.
DATA: V_MES_BATCH LIKE SY-DATUM.
IF P_BATCH = ' '.
CONCATENATE P_MES '01' INTO V_DIA_CALCULO.
ELSE.
CONCATENATE SY-DATUM(6) '01' INTO V_MES_BATCH.
V_MES_BATCH = V_MES_BATCH - 1.
CONCATENATE V_MES_BATCH(6) '01' INTO V_DIA_CALCULO.
ENDIF.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
DAY_IN
= V_DIA_CALCULO
IMPORTING
LAST_DAY_OF_MONTH = V_ULTIMO_DIA.
* primeiro dia do mes selecionado.
V_DTI_ANALISE = V_DIA_CALCULO.
* Clculo do incio do perodo de anlise
P_PERIOD = P_PERIOD - 1.
DO P_PERIOD TIMES.
V_PRIMEIRO_DIA = V_DIA_CALCULO - 1.
CONCATENATE V_PRIMEIRO_DIA(6) '01' INTO V_DIA_CALCULO.
ENDDO.
V_DT_INICIO = V_DIA_CALCULO.
V_DT_FIM = V_ULTIMO_DIA.
P_PERIOD = P_PERIOD + 1.
ENDFORM.
" CALCULA_PERIODO
62
ABAP Training
*&---------------------------------------------------------------------*
*&
Form F_CALC_ACUM
*&---------------------------------------------------------------------*
*
Form para calcular as notas acumuladas nos centros e MTB.
*
Este form tambm grava os resultados na tabela do centro.
*----------------------------------------------------------------------*
FORM F_CALC_ACUM.
* Declarao de variveis locais:
DATA: V_CENT_SUM_PPM89_AC LIKE T706U-BETFA,
V_CENT_NUM_NFL_AC
LIKE T706U-BETFA,
V_CENT_SUM_NFL_AC
LIKE T706U-BETFA,
V_CENT_SUM_LOT_AC
LIKE T706U-BETFA,
V_CENT_SUM_NPT_AC
LIKE T706U-BETFA,
V_CENT_NUM_NPT_AC
LIKE T706U-BETFA,
V_CENT_SUM_PPM01_AC LIKE T706U-BETFA,
V_CENT_SUM_ATRAS_AC LIKE T706U-BETFA,
V_CENT_SUM_EMDIA_AC LIKE T706U-BETFA.
DATA: C_MI(7) TYPE N VALUE '1000000'. "Valor de calc de Nota
DATA: V_PRIM_VEZ TYPE I.
"Flag primeira vez
DATA: V_MTB_SUM_PPM89_AC LIKE T706U-BETFA,
V_MTB_NUM_NFL_AC
LIKE T706U-BETFA,
V_MTB_SUM_NFL_AC
LIKE T706U-BETFA,
V_MTB_SUM_LOT_AC
LIKE T706U-BETFA,
V_MTB_SUM_NPT_AC
LIKE T706U-BETFA,
V_MTB_NUM_NPT_AC
LIKE T706U-BETFA,
V_MTB_SUM_PPM01_AC
LIKE PC207-BETPE,
V_MTB_SUM_ATRAS_AC
LIKE T706U-BETFA,
V_MTB_SUM_EMDIA_AC
LIKE T706U-BETFA.
DATA: V_FORNEC_SUM_PPM89_M LIKE T706U-BETFA,
V_FORNEC_SUM_PPM89_AC LIKE T706U-BETFA,
V_FORNEC_NUM_NFL_M
LIKE T706U-BETFA,
V_FORNEC_NUM_NFL_AC
LIKE T706U-BETFA,
V_FORNEC_SUM_NFL_M
LIKE T706U-BETFA,
V_FORNEC_SUM_NFL_AC
LIKE T706U-BETFA,
V_FORNEC_SUM_LOT_M
LIKE T706U-BETFA,
V_FORNEC_SUM_LOT_AC
LIKE T706U-BETFA,
V_FORNEC_SUM_NPT_M
LIKE T706U-BETFA,
V_FORNEC_SUM_NPT_AC
LIKE T706U-BETFA,
V_FORNEC_NUM_NPT_M
LIKE T706U-BETFA,
V_FORNEC_NUM_NPT_AC
LIKE T706U-BETFA,
V_FORNEC_LIFNR
LIKE QALS-LIFNR,
V_FORNEC_SUM_PPM01_M LIKE T706U-BETFA,
V_FORNEC_SUM_PPM01_AC LIKE T706U-BETFA,
V_FORNEC_SUM_ATRAS_M LIKE T706U-BETFA,
V_FORNEC_SUM_ATRAS_AC LIKE T706U-BETFA,
V_FORNEC_SUM_EMDIA_M LIKE T706U-BETFA,
V_FORNEC_SUM_EMDIA_AC LIKE T706U-BETFA.
DATA: BEGIN OF I_ACUM_FORNEC OCCURS 0,
LIFNR
LIKE QALS-LIFNR,
SUM_PPM89_M LIKE T706U-BETFA,
SUM_PPM89_AC LIKE T706U-BETFA,
NUM_NFL_M
LIKE T706U-BETFA,
NUM_NFL_AC
LIKE T706U-BETFA,
SUM_NFL_M
LIKE T706U-BETFA,
SUM_NFL_AC
LIKE T706U-BETFA,
SUM_LOT_M
LIKE T706U-BETFA,
SUM_LOT_AC
LIKE T706U-BETFA,
SUM_NPT_M
LIKE T706U-BETFA,
SUM_NPT_AC
LIKE T706U-BETFA,
NUM_NPT_M
LIKE T706U-BETFA,
NUM_NPT_AC
LIKE T706U-BETFA,
63
ABAP Training
I_ACUM_CENTRO-SUM_ATRAS = V_CENT_SUM_ATRAS_AC.
I_ACUM_CENTRO-SUM_EMDIA = V_CENT_SUM_EMDIA_AC.
APPEND I_ACUM_CENTRO.
CLEAR I_ACUM_CENTRO.
CLEAR: V_CENT_SUM_PPM89_AC,
V_CENT_NUM_NFL_AC,
V_CENT_SUM_NFL_AC,
V_CENT_SUM_LOT_AC,
V_CENT_SUM_NPT_AC,
V_CENT_NUM_NPT_AC,
V_CENT_SUM_PPM01_AC,
V_CENT_SUM_ATRAS_AC,
V_CENT_SUM_EMDIA_AC.
ENDAT.
ENDLOOP.
LOOP AT I_ACUM_CENTRO.
* Limpar as variaveis utilizadas no calculo.
CLEAR: V_TOT_NFL_AC,
V_TOT_LOT_AC,
V_TOT_PPM_AC,
V_TOT_NPR_AC,
V_TOT_NPT_AC,
V_TOT_NOTAS_AC,
V_TOT_NCQ_AC.
* calcula nota de fornecimento-acumulado.
IF I_ACUM_CENTRO-NUM_NFL > 0.
V_CHECK_NFL_AC = ' '.
V_TOT_NFL_AC = I_ACUM_CENTRO-SUM_NFL /
I_ACUM_CENTRO-NUM_NFL.
V_TOT_LOT_AC = 100 - ( I_ACUM_CENTRO-SUM_LOT /
I_ACUM_CENTRO-NUM_NFL ).
ELSE.
V_CHECK_NFL_AC = 'X'.
ENDIF.
* calcula nota processo-acumulado.
IF I_ACUM_CENTRO-SUM_PPM01 > 0.
V_TOT_PPM_AC = I_ACUM_CENTRO-SUM_PPM89 /
I_ACUM_CENTRO-SUM_PPM01 * C_MI.
ENDIF.
V_TOT_NPR_AC = 100 - ( V_TOT_PPM_AC / 100 ).
IF V_TOT_NPR_AC < 0.
V_TOT_NPR_AC = 0.
ENDIF.
* calcula nota de pontualidade.
V_TOT_NPT_AC = I_ACUM_CENTRO-SUM_NPT /
I_ACUM_CENTRO-NUM_NPT.
IF V_TOT_NPT_AC > 100.
V_TOT_NPT_AC = 100.
ENDIF.
IF V_TOT_NPT_AC < 0.
V_TOT_NPT_AC = 0.
ENDIF.
* calculo do NCQ acumulado.
V_TOT_NOTAS_AC = I_ACUM_CENTRO-SUM_EMDIA +
I_ACUM_CENTRO-SUM_ATRAS.
IF V_TOT_NOTAS_AC > 0.
V_TOT_NCQ_AC = ( I_ACUM_CENTRO-SUM_EMDIA /
V_TOT_NOTAS_AC ) * 100.
ELSE.
V_TOT_NCQ_AC = 100.
ENDIF.
* Grava dados na tabela i_tot_centro.
* centro
I_TOT_CENTRO-WERKS = I_ACUM_CENTRO-CENTRO.
* grava nota de fornecimento - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_TOT_CENTRO-NFL = ' '.
I_TOT_CENTRO-LOT = ' '.
ELSE.
WRITE V_TOT_NFL_AC TO I_TOT_CENTRO-NFL DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_LOT_AC TO I_TOT_CENTRO-LOT DECIMALS 2
RIGHT-JUSTIFIED.
ENDIF.
* grava nota processo - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_TOT_CENTRO-PPM = ' '.
I_TOT_CENTRO-NPR = ' '.
ELSE.
WRITE V_TOT_PPM_AC TO I_TOT_CENTRO-PPM DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_NPR_AC TO I_TOT_CENTRO-NPR DECIMALS 0
RIGHT-JUSTIFIED.
ENDIF.
* grava nota de pontualidade - acumulado.
WRITE V_TOT_NPT_AC TO I_TOT_CENTRO-NPT DECIMALS 0
RIGHT-JUSTIFIED.
* grava valores de nota de compromisso de qualidade acumulado.
WRITE V_TOT_NCQ_AC TO I_TOT_CENTRO-NCQ DECIMALS 0
RIGHT-JUSTIFIED.
* Clculo do NQF
* Se NFL e NPR estiverem BRANCOS, passar BRANCO *
IF I_TOT_CENTRO-NFL = ' ' AND I_TOT_CENTRO-NPR = ' '.
I_TOT_CENTRO-NQF = ' '.
ELSE.
IF V_TOT_POND <> 0.
V_TOT_NQF_AC = ( ( I_TOT_CENTRO-NFL * V_FATOR_NFL ) +
( I_TOT_CENTRO-NPR * V_FATOR_NPR ) +
( I_TOT_CENTRO-NCQ * V_FATOR_NCQ ) ) /
V_TOT_POND.
WRITE V_TOT_NQF_AC TO I_TOT_CENTRO-NQF DECIMALS 0.
ENDIF.
ENDIF.
* Grava os dados acima na tabela.
APPEND I_TOT_CENTRO.
ENDLOOP.
CLEAR: V_TOT_NFL_M, V_TOT_NFL_AC,
V_TOT_LOT_M, V_TOT_LOT_AC,
V_TOT_PPM_M, V_TOT_PPM_AC,
V_TOT_NPR_M, V_TOT_NPR_AC,
64
ABAP Training
V_TOT_NPT_M, V_TOT_NPT_AC,
V_TOT_NOTAS_M, V_TOT_NOTAS_AC,
V_TOT_NCQ_M, V_TOT_NCQ_AC.
IF SO_CENT EQ ''. " verifica se nenhum centro foi selecionado
* Clculo dos dados gerais para Empresa
* calcula nota de fornecimento-acumulado.
IF V_MTB_NUM_NFL_AC > 0.
V_CHECK_NFL_AC = ' '.
V_TOT_NFL_AC = V_MTB_SUM_NFL_AC / V_MTB_NUM_NFL_AC.
V_TOT_LOT_AC = 100 - ( V_MTB_SUM_LOT_AC /
V_MTB_NUM_NFL_AC ).
ELSE.
V_CHECK_NFL_AC = 'X'.
ENDIF.
* calcula nota processo-acumulado.
IF V_MTB_SUM_PPM01_AC > 0.
V_TOT_PPM_AC = ( V_MTB_SUM_PPM89_AC /
V_MTB_SUM_PPM01_AC ) * C_MILHAO.
ENDIF.
V_TOT_NPR_AC = 100 - ( V_TOT_PPM_AC / 100 ).
IF V_TOT_NPR_AC < 0.
V_TOT_NPR_AC = 0.
ENDIF.
* calcula nota de pontualidade.
V_TOT_NPT_AC = V_MTB_SUM_NPT_AC / V_MTB_NUM_NPT_AC.
IF V_TOT_NPT_AC > 100.
V_TOT_NPT_AC = 100.
ENDIF.
IF V_TOT_NPT_AC < 0.
V_TOT_NPT_AC = 0.
ENDIF.
* calculo do NCQ acumulado.
V_TOT_NOTAS_AC = V_MTB_SUM_EMDIA_AC +
V_MTB_SUM_ATRAS_AC.
IF V_TOT_NOTAS_AC > 0.
V_TOT_NCQ_AC = ( V_MTB_SUM_EMDIA_AC /
V_TOT_NOTAS_AC ) * 100.
ELSE.
V_TOT_NCQ_AC = 100.
ENDIF.
* Grava os dados para a estrutura i_acum_MTB
* grava nota de fornecimento - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_ACUM_MTB-NFL_AC = ' '.
I_ACUM_MTB-LOT_AC = ' '.
ELSE.
WRITE V_TOT_NFL_AC TO I_ACUM_MTB-NFL_AC DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_LOT_AC TO I_ACUM_MTB-LOT_AC DECIMALS 2
RIGHT-JUSTIFIED.
ENDIF.
* grava nota processo - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_ACUM_MTB-PPM_AC = ' '.
65
ABAP Training
I_ACUM_FORNEC-SUM_ATRAS_AC =
V_FORNEC_SUM_ATRAS_AC.
I_ACUM_FORNEC-SUM_EMDIA_M =
V_FORNEC_SUM_EMDIA_M.
I_ACUM_FORNEC-SUM_EMDIA_AC =
V_FORNEC_SUM_EMDIA_AC.
APPEND I_ACUM_FORNEC.
CLEAR I_ACUM_FORNEC.
CLEAR: V_FORNEC_SUM_PPM89_M,
V_FORNEC_SUM_PPM89_AC,
V_FORNEC_NUM_NFL_M,
V_FORNEC_NUM_NFL_AC,
V_FORNEC_SUM_NFL_M,
V_FORNEC_SUM_NFL_AC,
V_FORNEC_SUM_LOT_M,
V_FORNEC_SUM_LOT_AC,
V_FORNEC_SUM_NPT_M,
V_FORNEC_SUM_NPT_AC,
V_FORNEC_NUM_NPT_M,
V_FORNEC_NUM_NPT_AC,
V_FORNEC_SUM_PPM01_M,
V_FORNEC_SUM_PPM01_AC,
V_FORNEC_SUM_ATRAS_M,
V_FORNEC_SUM_ATRAS_AC,
V_FORNEC_SUM_EMDIA_M,
V_FORNEC_SUM_EMDIA_AC.
ENDIF.
ENDON.
V_FORNEC_SUM_PPM89_M = V_FORNEC_SUM_PPM89_M +
I_ACUM-SUM_PPM89_M.
V_FORNEC_SUM_PPM89_AC = V_FORNEC_SUM_PPM89_AC +
I_ACUM-SUM_PPM89_AC.
V_FORNEC_NUM_NFL_M = V_FORNEC_NUM_NFL_M + I_ACUMNUM_NFL_M.
V_FORNEC_NUM_NFL_AC = V_FORNEC_NUM_NFL_AC +
I_ACUM-NUM_NFL_AC.
V_FORNEC_SUM_NFL_M = V_FORNEC_SUM_NFL_M + I_ACUMSUM_NFL_M.
V_FORNEC_SUM_NFL_AC = V_FORNEC_SUM_NFL_AC +
I_ACUM-SUM_NFL_AC.
V_FORNEC_SUM_LOT_M = V_FORNEC_SUM_LOT_M + I_ACUMSUM_LOT_M.
V_FORNEC_SUM_LOT_AC = V_FORNEC_SUM_LOT_AC +
I_ACUM-SUM_LOT_AC.
V_FORNEC_SUM_NPT_M = V_FORNEC_SUM_NPT_M + I_ACUMSUM_NPT_M.
V_FORNEC_SUM_NPT_AC = V_FORNEC_SUM_NPT_AC +
I_ACUM-SUM_NPT_AC.
V_FORNEC_NUM_NPT_M = V_FORNEC_NUM_NPT_M +
I_ACUM-NUM_NPT_M.
V_FORNEC_NUM_NPT_AC = V_FORNEC_NUM_NPT_AC +
I_ACUM-NUM_NPT_AC.
V_FORNEC_SUM_PPM01_M = V_FORNEC_SUM_PPM01_M +
I_ACUM-SUM_PPM01_M.
V_FORNEC_SUM_PPM01_AC = V_FORNEC_SUM_PPM01_AC +
I_ACUM-SUM_PPM01_AC.
V_FORNEC_SUM_ATRAS_M = V_FORNEC_SUM_ATRAS_M +
I_ACUM-SUM_ATRAS_M.
V_FORNEC_SUM_ATRAS_AC = V_FORNEC_SUM_ATRAS_AC +
I_ACUM-SUM_ATRAS_AC.
V_FORNEC_SUM_EMDIA_M = V_FORNEC_SUM_EMDIA_M +
I_ACUM-SUM_EMDIA_M.
V_FORNEC_SUM_EMDIA_AC = V_FORNEC_SUM_EMDIA_AC +
I_ACUM-SUM_EMDIA_AC.
V_PRIM_VEZ = 1.
V_FORNEC_LIFNR = I_ACUM-LIFNR.
ENDLOOP.
CLEAR: V_TOT_NFL_M, V_TOT_NFL_AC,
V_TOT_LOT_M, V_TOT_LOT_AC,
V_TOT_PPM_M, V_TOT_PPM_AC,
V_TOT_NPR_M, V_TOT_NPR_AC,
V_TOT_NPT_M, V_TOT_NPT_AC,
V_TOT_NOTAS_M, V_TOT_NOTAS_AC,
V_TOT_NCQ_M, V_TOT_NCQ_AC.
* Clculo dos dados por fornecedor.
LOOP AT I_ACUM_FORNEC.
* Fornecedor
I_TOT_FORNEC-LIFNR = I_ACUM_FORNEC-LIFNR.
* calcula nota de fornecimento-mes.
IF I_ACUM_FORNEC-NUM_NFL_M > 0.
V_CHECK_NFL_M = ' '.
V_TOT_NFL_M = I_ACUM_FORNEC-SUM_NFL_M /
I_ACUM_FORNEC-NUM_NFL_M.
V_TOT_LOT_M = 100 - ( I_ACUM_FORNEC-SUM_LOT_M /
I_ACUM_FORNEC-NUM_NFL_M ).
ELSE.
V_CHECK_NFL_M = 'X'.
ENDIF.
* calcula nota de fornecimento-acumulado.
IF I_ACUM_FORNEC-NUM_NFL_AC > 0.
V_CHECK_NFL_AC = ' '.
V_TOT_NFL_AC = I_ACUM_FORNEC-SUM_NFL_AC /
I_ACUM_FORNEC-NUM_NFL_AC.
V_TOT_LOT_AC = 100 - ( I_ACUM_FORNEC-SUM_LOT_AC /
I_ACUM_FORNEC-NUM_NFL_AC ) .
ELSE.
V_CHECK_NFL_AC = 'X'.
ENDIF.
* calcula nota processo-mes.
IF I_ACUM_FORNEC-SUM_PPM01_M > 0.
V_TOT_PPM_M = ( i_acum_fornec-SUM_PPM89_M
/ I_ACUM_FORNEC-SUM_PPM01_M ) * C_MI.
ENDIF.
V_TOT_NPR_M = 100 - ( V_TOT_PPM_M / 100 ).
IF V_TOT_NPR_M < 0.
V_TOT_NPR_M = 0.
ENDIF.
* calcula nota processo-acumulado.
IF I_ACUM_FORNEC-SUM_PPM01_AC > 0.
V_TOT_PPM_AC = ( I_ACUM_FORNEC-SUM_PPM89_AC
/ I_ACUM_FORNEC-SUM_PPM01_AC ) * C_MI.
ENDIF.
V_TOT_NPR_AC = 100 - ( V_TOT_PPM_AC / 100 ).
IF V_TOT_NPR_AC < 0.
V_TOT_NPR_AC = 0.
ENDIF.
* calcula nota de pontualidade.
V_TOT_NPT_M = I_ACUM_FORNEC-SUM_NPT_M /
I_ACUM_FORNEC-NUM_NPT_M.
V_TOT_NPT_AC = I_ACUM_FORNEC-SUM_NPT_AC /
I_ACUM_FORNEC-NUM_NPT_AC.
66
ABAP Training
IF V_TOT_NPT_M > 100.
V_TOT_NPT_M = 100.
ENDIF.
IF V_TOT_NPT_M < 0.
V_TOT_NPT_M = 0.
ENDIF.
IF V_TOT_NPT_AC > 100.
V_TOT_NPT_AC = 100.
ENDIF.
IF V_TOT_NPT_AC < 0.
V_TOT_NPT_AC = 0.
ENDIF.
* calculo do NCQ mes.
V_TOT_NOTAS_M = I_ACUM_FORNEC-SUM_EMDIA_M +
I_ACUM_FORNEC-SUM_ATRAS_M.
IF V_TOT_NOTAS_M > 0.
V_TOT_NCQ_M = ( I_ACUM_FORNEC-SUM_EMDIA_M /
V_TOT_NOTAS_M ) * 100.
ELSE.
V_TOT_NCQ_M = 100.
ENDIF.
* calculo do NCQ acumulado.
V_TOT_NOTAS_AC = i_acum_fornec-SUM_EMDIA_AC
+ I_ACUM_FORNEC-SUM_ATRAS_AC.
IF V_TOT_NOTAS_AC > 0.
V_TOT_NCQ_AC = ( I_ACUM_FORNEC-SUM_EMDIA_AC
/ V_TOT_NOTAS_AC ) * 100.
ELSE.
V_TOT_NCQ_AC = 100.
ENDIF.
* Grava os dados para a estrutura i_tot_fornec
* grava nota de fornecimento-mes.
IF V_CHECK_NFL_M = 'X'.
I_TOT_FORNEC-NFL_M = ' '.
I_TOT_FORNEC-LOT_M = ' '.
ELSE.
WRITE V_TOT_NFL_M TO I_TOT_FORNEC-NFL_M DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_LOT_M TO I_TOT_FORNEC-LOT_M DECIMALS 2
RIGHT-JUSTIFIED.
ENDIF.
* grava nota de fornecimento - acumulado.
IF V_CHECK_NFL_AC = 'X'.
I_TOT_FORNEC-NFL_AC = ' '.
I_TOT_FORNEC-LOT_AC = ' '.
ELSE.
WRITE V_TOT_NFL_AC TO I_TOT_FORNEC-NFL_AC DECIMALS 0
RIGHT-JUSTIFIED.
WRITE V_TOT_LOT_AC TO I_TOT_FORNEC-LOT_AC DECIMALS 2
RIGHT-JUSTIFIED.
ENDIF.
* grava nota de processo - mes
IF V_CHECK_NFL_M = 'X'.
I_TOT_FORNEC-PPM_M = ' '.
I_TOT_FORNEC-NPR_M = ' '.
ELSE.
67
ABAP Training
ENDFORM.
" F_CALC_ACUM
*&---------------------------------------------------------------------*
*&
Form F_PRINT_SOPPM
*&---------------------------------------------------------------------*
*
imprime somente PPM
*
*----------------------------------------------------------------------*
FORM F_PRINT_SOPPM.
DATA: V_FORNEC LIKE QALS-LIFNR.
"Nr. do fornecedor
DESCRIBE TABLE I_TABFIM LINES V_LINHAS.
IF V_LINHAS EQ 0.
MESSAGE I083 WITH
'No h dados para os critrios de seleo' 'informados'.
EXIT.
ENDIF.
SORT I_TABFIM BY LIFNR WERKS.
LOOP AT I_TABFIM.
READ TABLE I_T001W WITH KEY WERKS = I_TABFIM-WERKS.
READ TABLE I_LFA1 WITH KEY LIFNR = I_TABFIM-LIFNR.
ON CHANGE OF I_TABFIM-LIFNR.
IF V_PRIM_VEZ = 'F'.
READ TABLE I_TOT_FORNEC WITH KEY LIFNR = V_FORNEC.
PERFORM F_PRINT_TOTAL_SOPPM.
ENDIF.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
WRITE: /02 I_TABFIM-LIFNR,
15 I_LFA1-NAME1,
170 ' '.
FORMAT COLOR COL_NORMAL.
V_PRIM_VEZ = 'F'.
* Busca valores de OBJ PPM e LOTE
READ TABLE I_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR.
ENDON.
* Imprimir descrio de Centro
ON CHANGE OF I_TABFIM-WERKS OR I_TABFIM-LIFNR.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
WRITE: /05 I_TABFIM-WERKS,
15 I_T001W-NAME,
170 ' '.
ENDON.
FORMAT COLOR COL_NORMAL.
WRITE: /05 P_MES,
107 I_TABFIM-PPM_M HOTSPOT ON,
119 I_FORNEC-PPM_OBJ,
137 I_TABFIM-LOT_M,
147 I_FORNEC-LOT_OBJ,
170 ' '.
HIDE: I_TABFIM-LIFNR, I_TABFIM-WERKS.
FORMAT COLOR COL_NORMAL.
FORMAT COLOR COL_NORMAL.
WRITE: /05 'Acum.', P_PERIOD, 'Mes(es)',
107 I_TABFIM-PPM_AC HOTSPOT ON,
137 I_TABFIM-LOT_AC,
68
ABAP Training
*&
Form f_print_total_acum_soppm.
*&---------------------------------------------------------------------*
*
Imprime o total final acum.
*----------------------------------------------------------------------*
FORM F_PRINT_TOTAL_ACUM_SOPPM.
WRITE: /03 'ACUM NO MTB',
170 ' '.
WRITE: /107 I_ACUM_MTB-PPM_AC,
137 I_ACUM_MTB-LOT_AC,
170 ' '.
ULINE.
ENDFORM.
*----------------------------------------------------------------------*
*
Form f_print_total_soppm.
*----------------------------------------------------------------------*
* Imprime total do rel. somente PPM e Lote
*----------------------------------------------------------------------*
FORM F_PRINT_TOTAL_SOPPM.
FORMAT COLOR COL_TOTAL.
WRITE: /05 'Acum ms MTB ',
107 I_TOT_FORNEC-PPM_M,
137 I_TOT_FORNEC-LOT_M,
170 ' '.
WRITE: /05 'Acum MTB(' NO-GAP, P_PERIOD, 'meses)',
107 I_TOT_FORNEC-PPM_AC,
137 I_TOT_FORNEC-LOT_AC,
170 ' '.
FORMAT COLOR COL_NORMAL.
ENDFORM.
Lines/inch
6,00
Characters/inch
10,00
Font attributes
Font family
HELVE
Font size
12,0 Point
Bold
No
Italic
No
Underlined
No
-------------------------------------------------------------------------------Characters Attributes
-------------------------------------------------------------------------------B
Bold print
Standard attributes
Marker
No
Font attributes
Bold
Yes
Italics
Font attributes
Italic
Yes
Key word
Font attributes
Font family
HELVE
Font size
10,0 Point
LP
Font attributes
Font family
COURIER
Font size
8,0 Point
--------------------------------------------------------------------------------
Formulrio
Z_AVAL_FORNEC
Underlined
Font attributes
Underlined
-------------------------------------------------------------------------------Mandante
Idioma
Original lang.
Status
200
P
E
Active
SAP
11.07.1993
16:24:01
20A
Changed by
Date
Time
Release
ACSATOS
09.06.1999
15:38:09
30F
-------------------------------------------------------------------------------Paragraphs Attributes
-------------------------------------------------------------------------------AS
Standard
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Tabs
12,00 CH
Left-aligned
35,00 CH
Left-aligned
DE
Detalhe
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Font attributes
Font family
HELVE
Font size
10,0 Point
Standard attributes
First page
FIRST
Default paragr. AS
Tab stop
5,00 CH
Page format
DINA4
Orientation
Portrait
Yes
69
ABAP Training
Tabs
11,00 CH
16,00 CH
26,00 CH
46,00 CH
56,00 CH
60,00 CH
2,00 CH
37,00 CH
42,00 CH
47,00 CH
52,00 CH
57,00 CH
62,00 CH
Left-aligned
Left-aligned
Left-aligned
Left-aligned
Left-aligned
Left-aligned
FO
P4
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
6,0 Point
P0
P1
P2
Left-aligned
Left-aligned
Left-aligned
Left-aligned
Left-aligned
Left-aligned
Left-aligned
P3
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
10,0 Point
Tabs
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
10,0 Point
Tabs
2,00 CH
Left-aligned
33,00 CH
Left-aligned
39,00 CH
Left-aligned
45,00 CH
Left-aligned
51,00 CH
Left-aligned
57,00 CH
Left-aligned
63,00 CH
Left-aligned
P5
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
8,0 Point
Tabs
2,00 CH
Left-aligned
33,00 CH
Left-aligned
39,00 CH
Left-aligned
45,00 CH
Left-aligned
51,00 CH
Left-aligned
57,00 CH
Left-aligned
63,00 CH
Left-aligned
P6
Standard attributes
Line spacing
1,00 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
6,0 Point
Tabs
1,00 CH
Left-aligned
24,00 CH
Left-aligned
50,00 CH
Left-aligned
P7
Standard attributes
Line spacing
0,45 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
6,0 Point
Tabs
1,00 CM
Left-aligned
4,50 CM
Left-aligned
5,50 CM
Left-aligned
7,60 CM
Left-aligned
12,70 CM
Left-aligned
70
ABAP Training
T3
TI
UL
Separator
Standard attributes
Line spacing
0,50 LN
Space after
0,50 LN
Alignment
Left-aligned
Font attributes
Font family
COURIER
Font size
12,0 Point
Underlined
No
-------------------------------------------------------------------------------Windows
Attributes
-------------------------------------------------------------------------------FOOTER
rodap
Window type
CONST
HEADER
cabealho
Window type
CONST
INFO3
Endereo
Window type
VAR
MAIN
Janela Principal
Window type
MAIN
-------------------------------------------------------------------------------Pages
Attributes
-------------------------------------------------------------------------------FIRST
HEADER
VERSO
Upper margin
Window width
Window height
Left margin
Upper margin
Window width
Window height
65,00 LN
70,00 CH
4,00 LN
4,00 CH
2,00 LN
70,00 CH
8,00 LN
Verso da carta
Standard attributes
Next page
FIRST
Page counter
Mode
START
Numbering type Arabic numerals
Page window
INFO3
Left margin
4,00 CH
Upper margin
2,00 LN
Window width
70,00 CH
Window height
58,00 LN
HEADER
/: INCLUDE TESTE3 OBJECT TEXT ID ST
/: BOX YPOS '0.3' LN WIDTH '72' CH HEIGHT '63' LN FRAME 10 TW
/: BOX YPOS '0.3' LN WIDTH '7.2' CM HEIGHT '5' LN FRAME 10 TW
P1 ,,RELATRIO DE AVALIAO DO FORNECEDOR
P1 ,,DATA DE REFERNCIA : &ZSAPSCRIP2-DATA_REF&
P1 ,,ACUMULADO DE : &ZSAPSCRIP2-ACUM_DT1& AT
&ZSAPSCRIP2-ACUM_DT2&
P1 ,,FORN: &zsapscrip2-lifnr&
P1 ,,&ZSAPSCRIP2-NAMEF&
P1 ,,AVALIADO,,: &ZSAPSCRIP2-AVALIA&,,PPM
MS,,:&ZSAPSCRIP2-PPM_M&
P1 ,,ATIVO NO MS,,: &ZSAPSCRIP2-ATIVO&,,PPM
ACUMULADO,,:&ZSAPSCRIP2-PPM_AC&
INFO3
/* Criado por Antonio Celso Hunnicutt Cortada - 16/02/2001
/* Relatrio de Avaliao de Forncedore - Portugus
/* Request :MD0K914497
/*
****************************************************************
********
/: BOX XPOS '0.5' CM YPOS '0.3' LN WIDTH '16.5' CM HEIGHT '1.2'
LN FRAME 10 TW
71
ABAP Training
/: BOX XPOS '0.5' CM YPOS '1.5' LN WIDTH '3.5' CM HEIGHT 6 LN
FRAME 10 TW
/: BOX XPOS '4' CM YPOS '1.5' LN WIDTH '3.5' CM HEIGHT 6 LN
FRAME 10 TW
/: BOX XPOS '7.5' CM YPOS '1.5' LN WIDTH 5 CM HEIGHT 3 LN
FRAME 10 TW
/: BOX XPOS '7.5' CM YPOS '1.5' LN WIDTH 5 CM HEIGHT 6 LN
FRAME 10 TW
/: BOX XPOS '12.5' CM YPOS '1.5' LN WIDTH '4.5' CM HEIGHT 6 LN
FRAME 10 TW
/*
/*
P0 ,,,,
<K><B>PARA USO DO CORREIO</></>
/: BOX XPOS '0.7' CM YPOS '2.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
/: 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,, NO PROCURADO
/: 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
FRAME 10 TW
P0 ,, ENDEREO INSUF.,, AUSENTE
/: BOX XPOS '0.7' CM YPOS '4.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
/: BOX XPOS '4.2' CM YPOS '4.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
P0 ,, NO EXISTE,, FALECIDO,,,,REINTEGRADO AO SERVIO
POSTAL EM
/: BOX XPOS '0.7' CM YPOS '5.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
/: BOX XPOS '4.2' CM YPOS '5.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
P0 ,, DESCONHECIDO,, INFORMAO ESCRITA
P0 ,, RECUSADO,,P/ PORTEIRO/SNDICO
/: BOX XPOS '0.7' CM YPOS '6.5' LN WIDTH 01 CH HEIGHT 3 MM
FRAME 10 TW
AS
AS
AS
AS
AS
/: INCLUDE TESTE3 OBJECT TEXT ID ST
AS
AS
/: BOX XPOS 1 CH YPOS 19 LN WIDTH 67 CH HEIGHT 06 LN
INTENSITY 35
/: BOX XPOS 1 CH YPOS 25 LN WIDTH 09 CH HEIGHT 6 LN
INTENSITY 35
/: BOX XPOS 10 CH YPOS 25 LN WIDTH 50 CH HEIGHT 6 LN FRAME
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
INTENSITY 35
/*
/: BOX XPOS 1 CH YPOS 42 LN WIDTH 67 CH HEIGHT 8 LN
INTENSITY 35
/: BOX XPOS 1 CH YPOS 50 LN WIDTH 09 CH HEIGHT 6 LN
INTENSITY 35
/: BOX XPOS 10 CH YPOS 50 LN WIDTH 50 CH HEIGHT 6 LN FRAME
10 TW INTENSITY 0
/: BOX XPOS 60 CH YPOS 50 LN WIDTH 8 CH HEIGHT 6 LN
INTENSITY 35
MAIN
/* Criado por Antonio Celso Hunnicutt Cortada - 16/02/2001
/* Relatrio de Avaliao de Forncedore - Portugus
/* Request :MD0K914497
/* Alterao Funcional - Incluso NPT por Unidade - MD0K915742
/* Correo - MD0K915748
/* Alterao Funcional - Modificao NPT - MD0K915806
/* Ajuste do layout - MD0K915848
/*
****************************************************************
********
Element RESUMO_TODAS_UNIDADES
72
ABAP Training
/: 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
/: BOX XPOS '19.5' CH YPOS '1.3' LN WIDTH '30' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '34.5' CH YPOS '2.3' LN WIDTH '15' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '34.5' CH YPOS '3.3' LN WIDTH '15' CH HEIGHT '1' LN
FRAME 10 TW
/: 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,,MS,,ACU,,NOTA,,MS,,ACU
P2 ,,NQF,,<LP>&ZSAPSCRIP2-NQF_M_T&,,&ZSAPSCRIP2NQF_AC_T&</>,,NFL
,,<LP>&ZSAPSCRIP2-NFL_M_T&,,&ZSAPSCRIP2-NFL_AC_T&</>
P2 ,,,,,,,,NPR,,<LP>&ZSAPSCRIP2-NPR_M_T&,,&ZSAPSCRIP2NPR_AC_T&</>
P2 ,,,,,,,,NCQ,,<LP>&ZSAPSCRIP2-NCQ_M_T&,,&ZSAPSCRIP2NCQ_AC_T&</>
P2 ,,NAS,, <LP>&ZSAPSCRIP2-NAS_M_T&</>,,-,,-,,-,,P2 ,,NPT,, <LP>&ZSAPSCRIP2-NPT_M_T&</>,,
<LP>&ZSAPSCRIP2-NPT_AC_T&</>
Element RESUMO_POR_UNIDADE
/: PROTECT
/: IF &ZSAPSCRIP2-CONT& > 253
/: POSITION YORIGIN '12.7' MM
/: ENDIF
/: BOX XPOS '36.5' CH YPOS '9.3' LN WIDTH '10' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '61.5' CH YPOS '9.3' LN WIDTH '7' CH HEIGHT '2' LN
FRAME 10 TW
/: BOX XPOS '1.5' CH YPOS '10.3' LN WIDTH '35' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '36.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '41.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '46.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '51.5' CH YPOS '10.3' LN WIDTH '5' CH HEIGHT '1' LN
FRAME 10 TW
/: BOX XPOS '56.5' CH YPOS '10.3' LN WIDTH 12 CH HEIGHT '1' LN
FRAME 10 TW
P2
P2 ,, ***RESUMO POR UNIDADE***
P3 ,,,, N.Q.F.,,,,,,,,,, NPT
P3 ,,UNIDADE,,MS,,ACU,,NOTA,,MS,,ACU,,MS/ACU
/: ENDPROTECT
Element DETALHE_RESUMO_POR_UNIDADE
/: PROTECT
73
ABAP Training
/: PROTECT
/: BOX XPOS '1.5' CH YPOS '0.3' LN WIDTH '31' CH HEIGHT
FRAME 10 TW
/: BOX XPOS '32.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT
FRAME 10 TW
/: BOX XPOS '38.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT
FRAME 10 TW
/: BOX XPOS '44.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT
FRAME 10 TW
/: BOX XPOS '50.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT
FRAME 10 TW
/: BOX XPOS '56.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT
FRAME 10 TW
/: BOX XPOS '62.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT
FRAME 10 TW
P5 ,,&ZSAPSCRIP2-NAMEC&,,&ZSAPSCRIP2PPM_M_I&,,&ZSAPSCRIP2-PPM_AC_I&
,,&ZSAPSCRIP2-PPM_OBJ_R&,,&ZSAPSCRIP2-LOT_M&
,,&ZSAPSCRIP2-LOT_AC&,,&ZSAPSCRIP2-LOT_OBJ_R&
/: ENDPROTECT
'1' LN
'1' LN
'1' LN
'1' LN
'1' LN
'1' LN
'1' LN
74
ABAP Training
EXERCCIOS
SAPSCRIPT
75
ABAP Training
Exerccio 1:
Desenvolver um programa Z_EXC_SAP_1_AL## que permita que o usurio
visualize ou imprima um formulrio com os cdigos dos Materiais, a descrio,
o tipo e o centro.
Permitir a ordenao dos dados por centro, tipo e material
Tabelas:
MARA
MARC
MAKT
76
ABAP Training
MATERIAIS
Centro: xxxxxxxx
Cdigo do Material
000000
000000
000000
000000
data: dd/mm/aaaa
Descrio
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx
Tipo
XXXX
XXXX
XXXX
XXXX
77
ABAP Training
Resoluo 1:
1) Report:
************************************************************************
*
*
*
********************************************
*
*
* Confidencial e Proprietrio
*
*
*
* Copyright 2001, Accenture
*
*
*
* Todos os direitos reservados
*
*
*
********************************************
*
*
*
*
Nome do Shell: Z_TEMPLATE_REPORT Verso do Shell: v1.03 *
*
*
************************************************************************
* Nome do Programa : Z_EXC_SAPSCRIPT
*
* Ttulo do Programa : Programa de impresso dos materiais por centro *
* Programador
: Aluno do curso de ABAP
*
* Data
: 29/03/2001
*
* ltima atualizao : 29/03/2001
*
*
*
* Descrio : Este um programa para a visualizao de materiais *
*
ou impresso dos dados, de acordo com o parmetro
*
*
selecionado pelo usurio
*
* Include
:
*
*
*
* Calls
:
*
*
*
* Mdulos de Funes:
*
*
*
*----------------------------------------------------------------------*
* Lista de Modificaes:
*
* Data
Autor
Corr. #
Descrio
*
* 29/03/2001 ABAPDEV1
AF1K900023 Desenvolvimento inicial do prg *
*
*
************************************************************************
REPORT Z_EXC_REPORT_1_AL06_D
NO STANDARD PAGE HEADING "No mostra o cabealho padro 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 sero impressas na ltima
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
*
" SESSO DE DECLARAO DE DADOS "
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
************************************************************************
* Includes
*
************************************************************************
*INCLUDE:
* ZZIHEADR.
"Cabealho padro de report
************************************************************************
* Tabelas
*
************************************************************************
TABLES: mara,
marc,
makt.
************************************************************************
* Dados:
*
* Constantes
(C_...)
*
78
ABAP Training
* Variaveis
(V_...)
*
* Tabelas Internas (I_...)
*
************************************************************************
*- Constantes ---------------------------------------------------------*
*DATA:
* C_..
*- Variveis ---------------------------------------------------------*
DATA:
V_CONT TYPE I VALUE 0.
" contador
*- Tabela Interna -----------------------------------------------------*
* tabela interna para armazenar o cdigo e o tipo do material
DATA: BEGIN OF I_mara OCCURS 100,
matnr like mara-matnr ,
mtart like mara-mtart ,
END OF I_mara.
* tabela interna para armazenar os materiais por centro
DATA: BEGIN OF I_marc OCCURS 200,
matnr like marc-matnr ,
werks like marc-werks ,
END OF I_marc.
* tabela interna para armazenar a descrio dos materiais
DATA: BEGIN OF I_makt OCCURS 100,
matnr like makt-matnr ,
maktx like makt-maktx ,
END OF I_makt.
* tabela final contendo todos os dados
DATA: BEGIN OF I_final OCCURS 200,
matnr like mara-matnr ,
mtart like mara-mtart ,
werks like marc-werks ,
maktx like makt-maktx ,
END OF I_final.
************************************************************************
* Parmetros de entrada :
*
* Select Options (S_...)
*
* Parameters
(P_...)
*
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1.
select-options: s_matnr for mara-matnr, " cd material
s_mtart for mara-mtart, " tipo de material
s_werks for marc-werks. " centro
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE T2.
parameters: p_cod
radiobutton group g1, " ordenado por cdigo
p_desc
radiobutton group g1, " ordenado por descrio
p_centro radiobutton group g1, " ordenado por centro
p_tipo
radiobutton group g1. " ordenado por tipo
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE T3.
79
ABAP Training
parameters: p_SCREEN radiobutton group g3, " visualizao dos dados
p_SCRIPT radiobutton group g3. " impresso do formulrio
SELECTION-SCREEN END OF BLOCK B3.
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
" SESSO DE PROCESSAMENTO "
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
*----------------------------------------------------------------------*
INITIALIZATION.
"Logica para defaults "inteligentes"
*----------------------------------------------------------------------*
T2 = 'Relatrio Ordenado Por:'.
T3 = 'Opes de sada'.
*----------------------------------------------------------------------*
*AT SELECTION-SCREEN. "Tratamento de Erros e lgica para tela de seleo
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
START-OF-SELECTION.
"Processamento principal
*----------------------------------------------------------------------*
* seleciona os dados
PERFORM F_SELECT_DATA.
* imprime os dados
PERFORM F_PRINT_REPORT.
*----------------------------------------------------------------------*
*END-OF-SELECTION.
"Fim do processamento principal
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
AT LINE-SELECTION.
"Seleo da linha do relatrio
*----------------------------------------------------------------------*
set parameter id 'MAT' field i_final-matnr. "Seta varivel que envolve
"transao
call transaction 'MM03' and skip first screen. "Chama transao
"consulta de materiais
*----------------------------------------------------------------------*
TOP-OF-PAGE.
"Cabealho (Aparece sempre no topo da tela.)
*----------------------------------------------------------------------*
format color 2.
write: 'Cdigo', 20 'Descrio do Material', 61 'Tipo', 66 'Centro'.
*----------------------------------------------------------------------*
*END-OF-PAGE.
"Rodap
*----------------------------------------------------------------------*
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
" SESSO DE FORMS "
"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
*&---------------------------------------------------------------------*
*&
Form F_SELECT_DATA
*&---------------------------------------------------------------------*
* Seleciona dados e armazena-os na tabela interna
80
ABAP Training
*----------------------------------------------------------------------*
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.
* l os dados para junt-los em uma tabela interna final
loop at i_marc.
read table i_mara with key matnr = i_marc-matnr.
if sy-subrc eq 0.
read table i_makt with key matnr = i_mara-matnr.
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.
ENDFORM.
" F_SELECT_DATA
*&---------------------------------------------------------------------*
*&
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 werks.
elseif p_tipo eq 'X'.
sort i_final by mtart maktx werks.
81
ABAP Training
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
**********************************
* se a opo do usurio for imprimir o formulrio
if p_script eq 'X'.
* abre o formulrio
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'PRINTER'
FORM
= 'Z_EXC_SAPSCRIT'
LANGUAGE = 'P'.
* inicializa o formulrio
CALL FUNCTION 'START_FORM'
EXPORTING
FORM
= 'Z_EXC_SAPSCRIT'
LANGUAGE = 'P'.
* imprime o cabealho
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'CABEC'
WINDOW = 'MAIN'.
* l os dados da tabela final
loop at i_final.
V_CONT = V_CONT + 1.
* a cada mudana de centro, chama o elemento de dados QUEBRA da janela
* MAIN, que inicializa uma nova pgina e o elemento CABEC que imprime
* o cabealho
on change of i_final-werks.
if sy-tabix ne 1.
" se no for o 1 registro
CALL FUNCTION 'WRITE_FORM' " quebra de pgina
EXPORTING
ELEMENT = 'QUEBRA'
WINDOW = 'MAIN'.
CALL FUNCTION 'WRITE_FORM' " imprime o cabealho
EXPORTING
ELEMENT = 'CABEC'
WINDOW = 'MAIN'.
V_CONT = 0.
" inicializa o contador de materiais
endif.
" se no for o 1 registro
endon.
* imprime os itens
CALL FUNCTION 'WRITE_FORM'
82
ABAP Training
EXPORTING
ELEMENT = 'ITEM'
WINDOW = 'MAIN'.
ENDLOOP.
* finaliza o formulrio
CALL FUNCTION 'END_FORM'.
* fecha o formulrio
CALL FUNCTION 'CLOSE_FORM'.
" F_PRINT_REPORT
83
ABAP Training
2) Sapscript:
-------------------------------------------------------------------------------Formulrio
Z_EXC_SAPSCRIT
-------------------------------------------------------------------------------Mandante
020
Idioma
PT
Idioma original
PT
Relevante p/traduo Sim
Status
ativo
Cl.desenvolvimento ZABAP
Autor
Data
Hora
Release
ABAPDEV1
04.04.2001
07:52:50
46B
Significado
Modificador
Data
Hora
Release
ABAPDEV1
04.04.2001
16:05:03
46B
Relatrio de Materiais
Atributos standard
Pgina inicial
PAGE1
Pargrf.default
P0
Stop tabulador
1,00 CM
Formato pgina
LETTER
Formato folha
Form.vert.
Linhas/polegada
6,00
Caracs/polegada
10,00
AtribsFamCar.
Famlia caracs.
Alt.fam.caracs.
Negrito
Itlico
Sublinhado
TIMES
12,0 Ponto
No
No
No
-------------------------------------------------------------------------------Caracteres Atributos
-------------------------------------------------------------------------------PG
Caracteres Grandes
Atributos standard
84
ABAP Training
Marcao
No
AtribsFamCar.
Famlia caracs. TIMES
Alt.fam.caracs. 18,0 Ponto
PM
Caracteres Mdio
AtribsFamCar.
Famlia caracs. TIMES
Alt.fam.caracs. 12,0 Ponto
PP
Caracteres Pequenos
AtribsFamCar.
Famlia caracs. TIMES
Alt.fam.caracs. 10,0 Ponto
-------------------------------------------------------------------------------Pargrafos 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 Cabealho
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 SEPARAO
Atributos standard
Espacej.linhas 0.05 LN
Margem esquerda 0.80 MM
Alinhamento
Alinh.esq.
-------------------------------------------------------------------------------Janela
Atributos
--------------------------------------------------------------------------------
85
ABAP Training
CABEC
Cabealho
CategoriaJanela CONST
MAIN
Janela princ
CategoriaJanela MAIN
RODAPE
Rodap
CategoriaJanela CONST
-------------------------------------------------------------------------------Pginas
Atributos
-------------------------------------------------------------------------------PAGE1
Pgina nova
Atributos standard
Pg.seg.
PAGE1
Numer.pgs.
Modo
INC
Ctg.numerao
Algarismos rabes
Janelas pginas
MAIN
Margem esquerda
1.00 CM
Margem superior
2.80 CM
Largura janela
19.60 CM
Altura janela
21.20 CM
CABEC
Margem esquerda
1.00 CM
Margem superior
1.00 CM
Largura janela
19.60 CM
Altura janela
1.20 CM
RODAPE Margem esquerda
1.00 CM
Margem superior
24.00 CM
Largura janela
19.60 CM
Altura janela
0.60 CM
86
ABAP Training
UL
P0
UL
&ULINE(90)&
<PM>| Cdigo do Material,,| Descrio ,,| Tipo,,|</>
&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
/:
PC
87