Sap Script

110
ABAP Training Sapscript 1

description

Sap Script

Transcript of Sap Script

Page 1: Sap Script

ABAP Training

Sapscript

O que é SAPscript e quando utilizar

1

Page 2: Sap Script

ABAP Training

SAPscript é a ferramenta do SAP para criação de relatórios mais elaborados, chamados de formulários. A opção pela utilização da ferramenta geralmente se dá pela necessidade de alguns recursos que não podem ser obtidos através de código de ABAP comum, como nos chamados “reports”, tais como inserção de logotipos, fontes de tamanhos ou tipos diferentes, etc... Muitas vezes, também, dependendo da necessidade do relatório, pode compensar mais utilizar o desenvolvimento de um relatório convencional sobre um formulário pré impresso, que já contenha o layout e logotipo desejados.

2

Page 3: Sap Script

ABAP Training

Limitações e problemas da ferramenta

Embora seja a ferramenta de geração de formulários mais poderosa do SAP, o SAPscript ainda apresenta uma série de limitações, principalmente no que diz respeito a verificação de erros e análise de debug. Um comando escrito na grafia errada dentro de um formulário, jamais será detectado pelo mesmo. Somente a não funcionalidade esperada do comando poderá levar ao programador descobrir seu próprio erro.

O modo debug do ambiente de SAPscript pode ser ativado na transação SE71 (SAP Standard Menu -> Tools -> Sapscript -> Form), através do menu Utilitários -> Ativar debug. O método correto consiste em se preencher o nome do formulário e idioma nos campos da tela, antes de percorrer o caminho do menu. Algumas vezes, no entanto, principalmente para um processamento em background, o formulário não 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 artifícios como imprimir o conteúdo dos campos a serem checados em pontos estratégicos do formulário, para observar seu comportamento.

O comportamento de um formulário SAPscript pode também ser muitas vezes irritante, principalmente quando se desconhece alguns de seus detalhes. Um dos problemas mais comuns do formulário SAPscript é quanto a utilização de logotipos nos relatórios gerados. Sua filosofia pode parecer bastante simples e é, mas essa operação é bastante sensível, e devem ser salientados alguns pontos:1. O objeto com o logotipo deve ser gerado a partir de um programa de

ABAP, através da transação SE38, chamado RSTXLDMC. O modo como o arquivo com o logotipo é tratado, deve ser cuidadosamente verificado, pois implicará no sucesso ou fracasso da exibição do logotipo esperado. Inicialmente, deve ser ressaltado que o arquivo deve estar no formato TIFF (extensão .TIF), não comprimido. Essa figura gerada nestes padrões tem ainda algumas restrições para a sua aplicação. Em primeiro lugar, o número de píxeis da figura ( a resolução da mesma, em DPI – dots per inch ) devem ser exatamente o número de píxeis informado na tela de seleção do programa para se garantir que o logotipo seja exibido no tamanho em que foi gerado. Alguns programas de editoração gráfica, como o Paint Shop Pro, possuem recursos para se determinar o tamanho da figura em centímetros e até mudá-lo (resize), mantendo-se a resolução (número de píxels). Em alguns casos, se o número de píxeis não coincidir com o informado, a figura pode nem ser gerada no SAP, dificultando o trabalho do programador. Em segundo lugar, o número de cores ou

3

Page 4: Sap Script

ABAP Training

tonalidades de cinza também precisam coincidir (esse parâmentro varia de acordo com a versão do SAP, devendo-se estar atento aos dados na tela de seleção do programa). Por fim, um último parâmetro que pode alterar o tamanho e o formato do logotipo é a configuração da impressora no SAP. O SAP utiliza a configuração da impressora para gerar o formulário e imprimí-lo. Se a configuração não estiver correta, pode influenciar no logotipo e na criação de linhas e caixas (BOXES).

2. Nessa hora entra a segunda dificuldade de se trabalhar com logotipos em SAPscript. Ao se executar o formulário, em uma visualização na tela, o usuário nunca irá conseguir enxergar o logotipo. Esse somente irá aparecer na impressão em papel (ainda que impressão do layout do formulário, e não seu conteúdo final - Utilitários -> Imprimir layout). As novas versões do SAP já corrigiram esse problema.

Essas duas características podem tomar algumas horas do programador, ainda que bem experiente no trabalho com SAPscript.

É importante se observar também que os formulários são “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 instância que já o tenha. Isso não pareceria ser muito complicado se não fosse um trabalho a mais controlar a versão de todos no momento que uma alteração for feita. Por isso, recomenda-se que todos os números das Change Requests sejam inseridos como comentário no corpo do formulário, pois não há administração de versões para Sapscript, como há nos reports. Um outro problema são os objetos gerados, como os logotipos e textos, que além de dependentes do cliente, não estão vinculados a nenhuma request, não podendo nem ser transportados diretamente de um cliente para o outro. Tanto os logotipos quanto os textos são 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 reforçar que no momento do transporte de um formulário SAPscript, é necessário assegurar que todas as estruturas utilizadas por ele, tenham sido transportadas anteriormente. O objetivo é assegurar que tudo que será utilizado pelo formulário já esteja no cliente, no momento em que este for introduzido, para que não haja erros. A ordem mais aconselhada para esses transportes seria:

1 . Estrutura2 . Layout3 . Programa de povoamento

Também vale a pena chamar a atenção para que esses 3 classes de objetos estejam em requests separadas no desenvolvimento de um projeto,

4

Page 5: Sap Script

ABAP Training

o que pode evitar problemas quando algum deles não estiver funcionando propriamente e necessitar ser reparado...

5

Page 6: Sap Script

ABAP Training

Programa de Povoamento do SAPSCRIPT

O programa de povoamento é o programa responsável pelo controle da impressão do formulário. É através dele que o formulário é aberto, que os dados são enviados para as janelas corretas, que é feito o controle de quebra de páginas, que é feito o fechamento do formulário, etc.

É no programa de povoamento que é feita a seleção dos dados que deverão aparecer no relatório. Toda a lógica de seleção, busca dos dados, associação de tabelas, etc., é feita nele. O formulário é apenas um “dispositivo” para output dos dados.

A construção de um programa de povoamento deve seguir a seguinte estrutura:

- Abertura de um formulário- Inicialização de um formulário- Seleção dos dados do formulário- Impressão dos dados nas janelas do formulário- Encerramento do formulário- Fechamento do formulário

6

Page 7: Sap Script

ABAP Training

Abertura de formulários.

O primeiro passo para a impressão de um Sapscript através de um programa é a abertura de um formulário para que se possa fazer o povoamento.

Para que se possa inicializar um formulário é necessário que este seja aberto. Portanto, é obrigatória a presença de um comando de abertura num programa de povoamento.

A abertura de um formulário gera automaticamente a inicialização de um formulário.

O comando para a abertura de um formulário é a seguinte função:

call function 'OPEN_FORM' exporting * APPLICATION = 'TX' * ARCHIVE_INDEX = ' ' * ARCHIVE_PARAMS = ' ' DEVICE = 'PRINTER' * DIALOG = 'X' FORM = (Nome do Formulário) LANGUAGE = (Idioma do Formulário)* OPTIONS = ITCPO * importing * language = * new_archive_params = * result = exceptions canceled = 1 device = 2 form = 3 options = 4 unclosed = 5 others = 6.

Os parâmetros mais importantes a serem passados para a função são:Device – Dispositivo onde será gerado o formulário (geralmente PRINTER)Form – Nome do formulário a ser abertoLanguage – Idioma a ser utilizado

Dois outros parâmetros também muitas vezes utilizados são o dialog e o options.

No primeiro, indica-se se a caixa de diálogo para configuração da impressão deve ou não ser apresentado. Caso este deva ser omitido, os dados para impressão serão tomados de uma estrutura a ser colocada no segundo parâmetro. Nessa estrutura são passados os dados tais como número de cópias e nome da impressora. A opção de não exibição da caixa de diálogo esta diretamente ligada a utilização do segundo parâmetro. Se a

7

Page 8: Sap Script

ABAP Training

exibição estiver desabilitada (DIALOG = ‘ ‘) mas a estrutura ITCPO não estiver preenchida, a caixa de diálogo será exibida.

Alguns dos campos mais importantes e que normalmente são utilizados na estrutura ITCPO são:

- TDCOPIES (Número de Cópias)- TDDEST (Dispositivo de Saída)- TDPREVIEW (Print Preview)- TDIMMED (Saída Imediata)

Exemplo de abertura do formulário ZSCR_CURSO.

ITCPO-TDIMMED = ‘X’.ITCPO-TDCOPIES = 2.ITCPO-TDDEST = ‘IMP1’.

call function 'OPEN_FORM' exporting * APPLICATION = 'TX' * ARCHIVE_INDEX = ' ' * ARCHIVE_PARAMS = ' ' DEVICE = 'PRINTER' DIALOG = ' ' FORM = 'ZSCR_CURSO' LANGUAGE = 'P' OPTIONS = ITCPO * importing * language = * new_archive_params = * result = exceptions canceled = 1 device = 2 form = 3 options = 4 unclosed = 5 others = 6.

Neste exemplo, o formulário ZSCR_CURSO no idioma português será aberto, sem a exibição da caixa de diálogo de impressão, utilizando a impressora IMP1 e executando a impressão imediata de 2 cópias.

8

Page 9: Sap Script

ABAP Training

Inicialização de um formulário.

A abertura de um formulário automaticamente gera a inicialização do mesmo.

Mas, imagine por exemplo que estejamos gerando relatórios para uma empresa de computadores onde, para cada novo computador vendido, deve ser gerado um novo relatório, e esse relatório deve conter todos os componentes presentes no computador em questão.

A abertura de um formulário inicia o primeiro, mas para cada novo computador vendido um novo formulário deve ser gerado.

Para isso utilizamos o comando de inicialização. Este comando permite que, numa mesma impressão, sejam gerados vários formulários diferentes, como se estivéssemos abrindo um novo para cada computador vendido.

Este comando não é obrigatório e pode não ser utilizado caso não haja necessidade da quebra e criação de vários formulários para uma só seleção de dados.

O comando para inicialização de um formulário é a seguinte função:

call function 'START_FORM' exporting * ARCHIVE_INDEX = ' ' FORM = ' ' LANGUAGE = ' ' * STARTPAGE = ' ' * PROGRAM = ' ' * importing * language = exceptions form = 1 format = 2 unended = 3 unopened = 4 unused = 5 others = 6.

A função é muito similar à função OPEN_FORM, e novamente os parâmetros mais importantes são o nome (FORM) e o idioma (LANGUAGE) do formulário.

Para que se possa utilizar um comando START_FORM é obrigatório que um comando de OPEN_FORM tenha sido executado.

9

Page 10: Sap Script

ABAP Training

Finalizando um formulário.

Em contrapartida com o item acima (comando START_FORM), toda vez que um formulário é inicializado, o mesmo deve ser finalizado ao final do seu processamento. Isso é obtido através do comando :

CALL FUNCTION 'END_FORM'.* IMPORTING* RESULT =* EXCEPTIONS* UNOPENED = 1* BAD_PAGEFORMAT_FOR_PRINT = 2* OTHERS = 3

Para o seu funcionamento, apenas a sua chamada é suficiente, sem as cláusulas adicionais, comentadas acima.

Fechando um formulário.

Finalmente, em contrapartida ao comando OPEN_FORM, toda vez que um formulário é aberto, o mesmo deve ser fechado. Isso é obtido através do comando :

CALL FUNCTION 'CLOSE_FORM'.* IMPORTING* RESULT =* RDI_RESULT =* TABLES* OTFDATA =* EXCEPTIONS* UNOPENED = 1* BAD_PAGEFORMAT_FOR_PRINT = 2* SEND_ERROR = 3* OTHERS = 4

Como no comando END_FORM, para o seu funcionamento, apenas a sua chamada é suficiente, sem as cláusulas adicionais, comentadas acima.

10

Page 11: Sap Script

ABAP Training

Seleção dos dados

A seleção dos dados é feita normalmente com comandos SELECT e demais comandos ABAP, como já foi visto em tópicos anteriores.

Um ponto importante que deve ser observado é que não é possível utilizar tabelas internas e variáveis do programa para a impressão dos dados no SAPSCRIPT. Portanto, se algum dado que deva ser impresso estiver numa tabela interna ou variável, este deve ser copiado para uma estrutura para que possa ser enviado ao SAPSCRIPT.

11

Page 12: Sap Script

ABAP Training

Impressão dos dados nas janelas

A impressão dos dados nas janelas na maioria das vezes é feita simultaneamente com a seleção dos dados, ou seja, a medida que os dados são selecionados, são enviados imediatamente para o formulário.

O comando para impressão dos dados é a seguinte função:

call function 'WRITE_FORM' exporting ELEMENT = ' ' * FUNCTION = 'SET' * TYPE = 'BODY' WINDOW = 'MAIN' * importing * pending_lines = exceptions element = 1 function = 2 type = 3 unopened = 4 unstarted = 5 window = 6 others = 7.

Dois parâmetros são os mais importantes:Element – Determina qual Data Element será utilizado dentro do SapscriptWindow – Janela na qual os dados devem ser impressos.

Neste ponto fica evidente a diferenciação entre os tipos de janela MAIN e demais janelas.

Para as janelas do tipo MAIN, cada comando de escrita (write_form) significa uma nova linha no formulário e o valor a ser impresso é o valor que o campo armazena no momento do comando de impressão.

Por exemplo, digamos que o campo MARA-MATNR tenha o valor ‘1234’ e que um comando de impressão seja dado para a janela MAIN que irá imprimir este campo. Logo em seguida uma nova seleção da tabela MARA é feita e o campo MATNR agora vale ‘5678’. Se uma nova impressão na janela MAIN for executada o resultado será o seguinte:12345678

Já as janelas que não forem do tipo MAIN imprimem os dados uma única vez, no final da impressão do formulário ou na quebra de página, com os valores armazenados nos campos no momento do encerramento ou no momento da quebra, e não no momento da escrita (write_form), ou seja, se

12

Page 13: Sap Script

ABAP Training

no exemplo anterior fosse utilizada uma janela não-main, o resultado final seria somente 5678.

Na realidade, a utilização de um comando WRITE_FORM numa janela não-main é utilizada para a escolha de qual elemento de texto será utilizado para a impressão dos dados. Exemplo:

Uma janela HEADER não-main contém dois elementos de texto chamados FRASE1 e FRASE2 da seguinte forma:

/E FRASE1 &MARA-MATNR& Teste de Frase 1 /E FRASE2 &MARA-MATNR& Teste de Frase 2

Se um comando WRITE_FORM for executado para a janela HEADER utilizando o elemento de texto FRASE1,

call function 'WRITE_FORM' exporting ELEMENT = 'FRASE1' * FUNCTION = 'SET' * TYPE = 'BODY' WINDOW = 'HEADER'

estará sendo indicado ao programa que, ao se encerrar o formulário, deve ser impresso o elemento de texto FRASE1 para a janela HEADER (somente um elemento de texto é utilizado para cada janela não-main).

No caso do exemplo, se o campo MATNR for igual a ‘1234’ no encerramento do formulário, seria impressa a seguinte frase:

1234 Teste de Frase 1

O elemento de texto a ser impresso será sempre o último a ser selecionado antes do final ou da quebra de página.

Se nenhum for selecionado, ao encerrar o formulário ou mudar de página serão impressos os dados que não pertençam a nenhum elemento de texto. Portanto no caso de um campo que deva ser impresso sempre em todas as páginas, como numero de página por exemplo, basta colocá-lo fora de qualquer elemento de texto e não selecionar nenhum elemento de texto para a janela que, automaticamente, este dado será impresso em todas as páginas.

13

Page 14: Sap Script

ABAP Training

Fluxo do SAPSCRIPT:

Tendo visto os comandos acima, um fluxo simplificado de um programa para a impressão de um SAPSCRIPT seria:

FORM f_imprime_sapscript.

* Abre o formulário CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE = 'PRINTER' FORM = 'Z_SAPSCRIT' LANGUAGE = SY-LANGU.

* inicializa o formulário CALL FUNCTION 'START_FORM' EXPORTING FORM = 'Z_SAPSCRIT' LANGUAGE = SY-LANGU.

loop at i_tab.

* imprime o elemento de dados ITEM da janela MAIN do Sapscript* com os dados da tabela interna i_tab CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'ITEM' WINDOW = 'MAIN'. endloop.

* finaliza o formulário call function 'END_FORM'.

* fecha o formulário call function 'CLOSE_FORM'.

ENDFORM.

14

Page 15: Sap Script

ABAP Training

O formulário

Trabalhar com um formulário SAPscript não é complicado, desde que se entenda seus componentes da maneira correta. Um layout é composto por vários componentes, dentre os quais podemos citar:

1. Header - informações gerais do formulário, como formato e orientação da página em será utilizado, parágrafo e fontes default do mesmo (quando não for especificado nenhuma dentro do form). Nesse tópico aparece também o título do formulário, a classe de desenvolvimento do mesmo e os idiomas do formulário original e o corrente.

15

Page 16: Sap Script

ABAP Training

2. Parágrafos - são elementos que podem ser criados pelo usuário e apresentam informações dos textos de uma determinada janela. Nesses parágrafos são determinados tipos de fontes, tabulações, negrito ou sublinhado, etc...

Para criar um parágrafo novo, utilizar o caminho do menu Processar -> Create Element, lembrando que em um formulário standard, somente se pode alterar o layout no idioma original.

16

Page 17: Sap Script

ABAP Training

17

Page 18: Sap Script

ABAP Training

3. Caracter String - são informações semelhantes às do parágrafo, no que diz respeito a formatação de textos, no entanto podem ser aplicados a trechos de textos e não necessariamente a linhas inteiras do formulário.

Sua sintaxe de utilização se assemelha a programação HTML, conforme exemplo a seguir. Imagine um Caracter string definido com o nome B, cuja formatação de texto seja o incremento do modelo negrito a uma determinada fonte. Sua utilização seria:

<B>Texto</>

E seu resultado no formulário seria:

Texto

18

Page 19: Sap Script

ABAP Training

4. Janelas - as janelas são a base da construção do layout. As janelas podem ser criadas sem limites e tem por finalidade dividir espacialmente as regiões de um formulário para operações independentes.

Essas janelas podem ser criadas basicamente em 3 tipos distintos:

MAIN - janelas do tipo MAIN são as mais importantes do relatório (janela pela qual o formulário se guia). Somente é permitido um tipo de janela MAIN por formulário, e é a única janela obrigatória em uma página. Pode-se criar mais de uma janela MAIN por página, no entanto essas janelas, na verdade, só são divididas fisicamente, uma vez que seus elementos e processamento obedecem aos mesmos comandos, e não podem ter nomes diferentes. A passagem de uma janela MAIN para outra pode ser automática ou forçada pelo usuário. Quando o espaço físico de uma janela MAIN está tomado e necessita-se de mais dados na mesma, o formulário automaticamente passa à próxima janela MAIN do formulário. É através desse princípio que uma relatório ganha número de páginas

19

Page 20: Sap Script

ABAP Training

automaticamente quando da execução de um relatório desse tipo, conforme os dados são preenchidos. Para forçar a passagem de uma janela MAIN para outra, o usuário poderá utilizar o comando:

/: NEXT-WINDOW

A lógica de sequência das janelas MAIN de um formulário segue sempre a um critério. Dentro de uma página a navegação de uma MAIN para outra segue de acordo com os índices dessas janelas dentro do formulário, e quando uma nova página é gerada, a contagem segue a mesma disposição, continuamente.

O exemplo abaixo, figura a situação de uma diagramação conforme uma página de jornal. A sequência de preenchimento dos dados na página através do povoamento normal segue:

VAR - essa janela apresenta uma característica própria, que necessita de verificação constante do formulário com seus dados, que podem variar durante a execução do relatório. Esse tipo de janela deve ser utilizado quando se pretende trabalhar com textos que variam, como exemplos de mensagens que podem mudar durante o decorrer da execução do formulário.

CONST - são janelas que não merecem muita preocupação de processamento por parte do formulário, uma vez que seus dados devem ser mantidos os mesmos desde seu primeiro preenchimento até o fechamento do formulário. Geralmente nesse tipo de janela são incluído objetos e textos que permanecem os mesmos durante todo o relatório, independente do número de páginas, como logos e rodapés.

20

Page 21: Sap Script

ABAP Training

5. Páginas - as páginas são os elementos responsáveis pelo agrupamento das janelas durante certos momentos do relatório. Geralmente só são definidos duas páginas, que acabam em processo reflexivo, por formulário.

Geralmente uma página FIRST, que apresenta um layout de apresentação dos documentos e outra NEXT, que contém o layouts das outras páginas subsequentes do documento. Isso acontece, por exemplo, quando se que obter um relatório com o logotipo da empresa na primeira página, mas as seguintes, devem ocupar a folha inteira com os dados do relatório até o final. Cada uma das páginas criadas devem conter um nome (FIRST, NEXT,...) e pode conter um parágrafo default e um link para a próxima página. Esse link serve para formar a sequência em que as páginas do relatório devem ser geradas. Seguindo o exemplo anterior, deveríamos informar:

FIRST -> NEXTNEXT -> NEXT

21

Page 22: Sap Script

ABAP Training

Após a primeira página, seria chamada a segunda, com um layout diferente (sem o logotipo). A partir dessa, todas apresentariam o mesmo tipo de layout (com dados do relatório aproveitando a página inteira).

6. Page Windows

As page windows podem ser entendidas pelo nosso conceito de layout propriamente dito. São os elementos responsáveis pela aparecimento ou não das janelas dentro de uma determinada página, bem como seus posicionamentos em relação à folha a ser impressa. É também através das page windows que o programador terá acesso aos Text Elements de cada uma dessas janelas, responsáveis pelo tratamento dos dados em tempo de execução do formulário.

22

Page 23: Sap Script

ABAP Training

7. Text Elements

Corresponde à logica de processamento e comportamento de uma janela durante a execução do formulário. É responsável pelos valores que serão impressos no mesmo, bem como seu posicionamento dentro da janela e seu tipo de caracter.

De dentro de uma Page Window, é possível selecionarmos qualquer uma das janelas existentes em uma determinada página, simplesmente clicando o mouse sobre o seu nome e apertando o botão selecionar, ou mesmo dando um “double-click” diretamente sobre o nome da janela desejada. Uma vez selecionada a janela, se apertarmos o botão Text Element, uma tela semelhante à do editor de ABAP/4 do SAP irá se abrir, com as linhas onde a lógica da janela será introduzida.

Nesses elementos do SAPscript, o programador poderá utilizar alguns comandos semelhantes ao do ABAP/4, com a indicação de que se trata de uma linha de comando para o formulário (/:, à esquerda da linha). Abaixo,

23

Page 24: Sap Script

ABAP Training

alguns dos comandos que podem ser utilizados de dentro dos elementos de texto de uma janela em SAPscript:

IF..ELSE..ENDIFCASE..WHENDEFINE declaração de variáveis dentro da janela,

com atribuição de valorPERFORM..USING..CHANGING (ver documentação própria nesse material)BOX..FRAME

INCLUDE

O comando include dentro de uma janela de um formulário SAPscript serve para inserir um objeto no mesmo. Esse objeto pode ser desde um logo, até um texto com várias 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 formulário, deve-se sempre utilizar o idioma em que o objeto foi criado.

/: INCLUDE name OBJECT object ID id LANGUAGE spras

24

Page 25: Sap Script

ABAP Training

Manutenção de formulários

A manutenção dos formulários é feita pela mesma transação citada anteriormente (SE71). Nessa tela o nome do formulário e o idioma do mesmo são parâmetros obrigatórios. Nessa tela são feitas praticamente todas as operações com os formulários do SAP:

1. Criar um formulário novo

Um formulário pode ser criado inteiramente a partir dessa transação. Preenchendo um nome do formulário, que comece por Z ou Y, não diretamente seguidos por caracteres especiais, como o ‘_’, o usuário poderá apertar o botão Criar ou ir ao menu Layout -> Criar. O idioma preenchido será entendido como idioma original do formulário. A partir daí, outros formulários poderão ser traduzidos a partir desse original, nas mais diferentes línguas, porém todos manterão as características de layout do

25

Page 26: Sap Script

ABAP Training

formulário original. Ao mesmo tempo que uma alteração desse original, implica na imediata alteração de todos os seus “filhos”.

2. Copiar formulário em outro idioma (Tradução)

Uma vez criado um formulário (conforme descrito acima), poderá ser copiado sobre ele, as informações de um outro formulário do mesmo client, através do menu Layout -> Copy from, já de dentro da primeira tela do formulário criado (Header).

Atenção que essa cópia é fiel ao formulário copiado, e não poupa nenhuma informação que já existisse no formulário que recebe a cópia.

26

Page 27: Sap Script

ABAP Training

3. Copiar um formulário de outro cliente

Um formulário pode também ser copiado de um outro client na mesma instância, através do menu Utilitários -> Copy from client, da primeira janela da transação SE71, fora de qualquer formulário específico.

Essa opção irá abrir uma outra janela que recebe basicamente 3 informações:

Nome do formulário a ser copiadoCliente em que se encontra o originalNome da cópia no client corrente

27

Page 28: Sap Script

ABAP Training

Os outros dois campos de check box geralmente não são alterados pois tratam de informações como cópia do formulário somente no idioma original e exibição ou não de um log de erros ao final da execução da cópia.

Uma vez entrados os parâmetros, deve-se apertar o botão executar e obter uma cópia com sucesso em todos os idiomas existentes do formulário.

O cliente de origem do formulário, quando for cópia de forms standards, deve ser mantido 000, uma vez que o repositório dos formulários originais do SAP encontram-se todos no 000, e podem ser lidos de todos os outros.

28

Page 29: Sap Script

ABAP Training

Inclusão de Logos nos formulários

Utilizar logotipos em formulários SAPscripts, não é das tarefas mais simples que se possa ter. Teoricamente falando, o processo é bastante simples e consiste em gerar no sistema um objeto no formato hexadecimal, que possa ser interpretado pelo SAPscript, originando a inclusão de uma imagem. No entanto, devido ás limitações expostas no começo deste documento, isso pode levar um certo tempo até reproduzir o resultado desejado.

Para gerarmos o objeto no client desejado (lembre que esse objeto não pode ser transportado…), devemos executar o programa standard RSTXLDMC, com um arquivo no formato *.TIF.

29

Page 30: Sap Script

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 monocromático (default) ou colorido.

O último parâmetro que exige ser preenchido é o Text Name, onde é feita a atribuição do nome do objeto que será referenciado de dentro do formulário (padrão: ZHEX-MACRO-…).

A geração desse logo está intimamente ligado ao formato do arquivo TIF. Isso quer dizer que o seu tamanho obtido no formulário está relacionado ao tamanho da imagem geradora do objeto.

Tomar cuidado com o número de cores e tonalidades da imagem e lembrar na hora de fazer os testes, que o logotipo não aparece na tela, somente em impressões no papel (problema corrigido nas versões atuais).

Nesta hora, vale lembrar todas as ressalvas feitas anteriormente:

O arquivo deve estar no formato TIFF (extensão .TIF), não comprimido. Essa figura gerada nestes padrões tem ainda algumas restrições para a sua aplicação. Em primeiro lugar, o número de píxeis da figura ( a resolução da mesma, em DPI – dots per inch ) devem ser exatamente o número de píxeis informado na tela de seleção do programa para se garantir que o logotipo seja exibido no tamanho em que foi gerado. Alguns programas de editoração gráfica, como o Paint Shop Pro, possuem recursos para se determinar o tamanho da figura em centímetros e até mudá-lo (resize), mantendo-se a resolução (número de píxels). Em alguns casos, se o número de píxeis não coincidir com o informado, a figura pode nem ser gerada no SAP, dificultando o trabalho do programador.

O número de cores ou tonalidades de cinza também precisam coincidir (esse parâmentro varia de acordo com a versão do SAP, devendo-se estar atento aos dados na tela de seleção do programa).

A configuração da impressora no SAP pode alterar o tamanho e o formato do logotipo é a configuração da impressora no SAP. O SAP utiliza a configuração da impressora para gerar o formulário e imprimí-lo. Se a configuração não estiver correta, pode influenciar no logotipo e na criação de linhas e caixas (BOXES).

Para se transportar um logotipo ou texto, deve-se primeiro, associá-lo a uma Change Request, através do programa standard RSTXTRAN

30

Page 31: Sap Script

ABAP Training

Alterações 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 alteração depende muito das características do programa de povoamento standard e das características das funções do SAP que irão utilizar tal sapscript. No entanto, alguns procedimentos são padrões, e outros são utilizados na grande maioria das alterações. 1) Fazer uma cópia do programa standard e dos includes (se existirem) que

necessitam de alteração 2) Fazer uma cópia do layoutset standard3) NÃO DELETAR janelas, elementos de textos, etc. na cópia do layoutset. Mesmo

que alguns (ou todos) os dados e janelas do standard não sejam utilizados, o programa de povoamento continuará tentando executar escritas em janelas e elementos de dados específicos, já que é uma cópia do standard. Os novos dados e janelas devem ser apenas adicionados!

4) Encontrar as posições ideais para alterações no programa de povoamento. Quando os novos dados devem ser impressos na MAIN, procurar por comandos WRITE_FORM dentro do programa e colocar as alterações o mais próximo possível do WRITE_FORM correto. Se devem ser impressos em outras janelas, procurar pelo comando CLOSE_FORM/END_FORM e colocar as alterações imediatamente antes destes comandos (sempre que possível)

5) Colocar todas as alterações juntas sempre que possível, identificando visivelmente, através de comentários, o bloco de alterações. Isso facilita a manutenção e visualização do código, além de facilitar a busca por possíveis erros, visto que, na sua grande maioria, os programas standard da SAP são bastante complicados.

*--------------------------------------------------------------------* ***write texts to TEXTS window * *--------------------------------------------------------------------* ************************** ALTERAÇÃO ******************************** *-------------------------------------------------------------------* * Elimina mensagem ONU.... caso ela exista *-------------------------------------------------------------------* read table wk_header_msg with key message(3) = 'ONU'. v_msg_onu = wk_header_msg-seqnum. delete wk_header_msg where message(3) = 'ONU'. delete wk_refer_msg

31

Page 32: Sap Script

ABAP Training

where seqnum = v_msg_onu. *Mensagem p/ materiais não perigosos ybrvscript-mensg01 = text-001. ********************************************************************** istart = j_1bb2-totlih. if istart > 10. "maximum number of fields in J_1BPRNFTX

32

Page 33: Sap Script

ABAP Training

Linhas e Boxes:

Para a criação de linhas e Boxes nos formulários, utiliza-se o comando Box. A sintaxe deste comando é a seguinte:

/: BOX xpos ypos WIDTH largura unidade(CH, cm) HEIGHT altura unidade FRAME espessura unidade INTENSITY intensidade (0 a 100%)

No entanto, como podemos observar, torna-se muito difícil a criação de boxes e linhas dinâmicos uma vez que eles dependem da posição na janela na qual estão sendo criados.

Apesar da apresentação ser a melhor, utilizando-se boxes dinâmicos, a complexidade para seu desenvolvimento na maioria dos casos não justifica sua aplicação.

Uma saída a ser aplicada nestes casos é a seguinte:

Primeiro, cria-se um parágrafo especial, cujo espaçamento entre linhas seja o menor possível:

UL Linha de separação Atributos standard Espacej.linhas 0.05 LN Margem esquerda 1.15 MM Alinhamento Alinh.esq.

Em seguida, no formulário, simula-se os boxes da seguinte forma na janela Main:

UL &ULINE(73)&AS <B>| Item,,|,,Código,,|,,Quantidade,,| UN,,|,,Preço Unitário,,|,, Preço Total |</>AS <B>| ,,|,, ,,|,, ,,| ,,|,, c/ ICMS ,,|,, C/Impostos |</>AS <B>| ,,|,, ,,|,, ,,| ,,|,, (R$) ,,|,, (R$) |</>UL &ULINE(73)&

Como o espaçamento entre linhas no parágrafo UL é pequeno, na hora da impressão, as linhas horizontais acabam se encontrando com as verticais, simulando-se os boxes.

33

Page 34: Sap Script

ABAP Training

Tabuladores:

Um recurso extremamente importante e diversas vezes esquecidos pelos programadores são os tabuladores.Uma das principais queixas dos programadores em relação ao Sapscript é que, quando se altera a posição de um campo na impressão, acaba-se alterando as posições dos demais, fazendo com que o trabalho do programador seja exaustivo.A alternativa para isso não ocorrer é o uso dos tabuladores, definidos para cada parágrafo criado, conforme o exemplo abaixo:

IL Linha de item Atributos standard Espacej.linhas 1.00 LN Alinhamento Alinh.esq. Tabuladores 6.00 CH Alinh.à esquerda 25.00 CH Alinh.à esquerda 54.00 CH Alinh.à esquerda 73.00 CH Alinh.à esquerda

E a sua utilização no código fica:

IL &EKPO-EBELP&,,&EKPO-EMATN&,,&EKPO-TXZ01&

Os tabuladores são representados no Sapscript por 2 vírgulas (,,) e seu espaçamento pode estar tanto em caracteres (CH) quanto em centímetros (CM) e milímetros (MM). Uma ressalva que deve ser feita é que impressoras matriciais trabalham sempre com caracteres, dificultando um pouco a determinação do tamanho. Nos casos onde a unidade seja caracter, o espaçamento utilizado é feito com base no caracter padrão, definido no header do formulário.

Agindo-se assim, garante-se que os textos estarão sempre na posição e alinhados da maneira como planejada, facilitando futuras manutenções, como a alteração da posição ou tamanho de um determinado campo. Além disso, a alteração da posição é feita somente em um lugar e não repetidamente no código, eliminado esforço desnecessário.

Por fim, há uma outra ferramenta que pode ajudar no posicionamento dos textos, principalmente para impressoras matriciais. Existem réguas especiais que possuem as escalas mais comuns de caracteres. Um exemplo é a régua Trident modelo FC-1.

34

Page 35: Sap Script

ABAP Training

Exemplos

Sapscript

--------------------------------------------------------------------------------Formulário YBRV_CREDIT_MEMO--------------------------------------------------------------------------------

Mandante 650Idioma P Original lang. P Idioma Original de CriaçãoRelevant for transl. YesStatus Active

Development class YBR0 General Multi-purpose Development class

Created by SAO0105A Changed by SAO0105ADate 29.07.1998 Date 01.09.1998Time 09:02:34 Time 19:52:15Release 30F Release 30F

Significado Nota de Crédito

Standard attributes First page FIRST Primeira página a ser utilizada Default paragr. MA Parágrafo default para os textos Tab stop 1,00 CM Page format DINA4 Tipo de Papel Orientation Landscape Lines/inch 6,00 Espaçamento entre as linhas Characters/inch 12,00 Espaçamento entre os caracteres

Font attributes Font family COURIER Fonte padrão do formulário Font size 10,0 Point Tamanho da fonte padrão Bold No Italic No Underlined No

35

Page 36: Sap Script

ABAP Training

--------------------------------------------------------------------------------Characters Attributes Definições dos Characters Strings--------------------------------------------------------------------------------

H1 Header 1 Standard attributes Marker No Font attributes Font family COURIER Font size 8,0 Point Bold Yes

H2 Header 2 Standard attributes Marker No Font attributes Font family COURIER Font size 10,0 Point Bold Yes

H3 Header 3 Standard attributes Marker No Font attributes Font family COURIER Font size 6,0 Point Bold Yes

--------------------------------------------------------------------------------Paragraphs Attributes Definições dos tipos de parágrafos--------------------------------------------------------------------------------

H1 Paragrafo 1 p/ o header Standard attributes Line spacing 1,00 LN Alignment Left-aligned Tabs Tabulações para o parágrafo 16,00 CH Left-aligned 66,00 CH Left-aligned

36

Page 37: Sap Script

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 1,00 LN Alignment Left-aligned

--------------------------------------------------------------------------------Windows Attributes Janelas definidas para o formulário--------------------------------------------------------------------------------

HEADER Cabeçalho da Nota Window type CONST

HEAD_PRI Header p/ Main Window type CONST

MAIN Main window Window type MAIN

TEXT Textos da Nota Window type CONST

TOTAL Totais da Nota Window type CONST

--------------------------------------------------------------------------------Pages Attributes Paginas do formulário com suas respectivas janelas--------------------------------------------------------------------------------

FIRST Primeira Página Page counter

37

Page 38: Sap Script

ABAP Training

Mode INC Numbering type Arabic numerals Page window MAIN Left margin 2,00 CH Upper margin 9,00 LN Window width 132,00 CH Window height 27,00 LN HEADER Left margin 2,00 CH Upper margin 1,00 LN Window width 132,00 CH Window height 8,00 LN TEXT Left margin 2,00 CH Upper margin 36,00 LN Window width 132,00 CH Window height 3,00 LN TOTAL Left margin 2,00 CH Upper margin 39,00 LN Window width 132,00 CH Window height 7,00 LN

--------------------------------------------------------------------------------Text elements for following windows:--------------------------------------------------------------------------------

HEADER Definição do parágrafo para a linha /: BOX XPOS 0 CH YPOS 0 CH WIDTH 132 CH HEIGHT 8 LN FRAME 10 TW/: BOX XPOS 0 CH YPOS 7 LN WIDTH 132 CH HEIGHT 1 LN FRAME 10 TW/: IF &YBRVS_NOTA-REPRINT& EQ 'S'H2 REIMPRESSO,,<H2>NOTA DE CRÉDITO</>,,&ybrvs_nota-data&,,Nº &ybrvs_nota-numero& Desativa Character String/: ELSE Ativa Character StringH2 ,,<H2>NOTA DE CRÉDITO</>,,&ybrvs_nota-data&,,Nº &ybrvs_nota-numero&/: ENDIFH1 ,,,,CLARIANT S/A Salta p/ próx. tabulaçãoH1 <H1>Razão Social:</> &ybrvs_nota-razao(50)& <H1>Cliente: </>&ybrvs_nota-cliente(20)& <H1>Filial: </>&ybrvs_nota-filial&H1 <H1>Endereço :</> &ybrvs_nota-endereco(26)& <H1>Bairro :</> &ybrvs_nota-bairro& H1 <H1>C.E.P. :</> &ybrvs_nota-cep(11)& <H1>Cidade: Texto Fixo </>&ybrvs_nota-cidade(19)& <H1>Estado: </>&ybrvs_nota-estado(4)&

38

Page 39: Sap Script

ABAP Training

<H3>PREZADOS SENHORES: PARTICIPAMOS A v.Sas. QUE FIZEMOS EM SUA CONTA OS LANÇAMENTOS ABAIXO:</>H1 <H1>Histórico :</> &ybrvs_nota-tipo&H1 <H1>Valor por Extenso: </>&ybrvs_nota-tot_extens(100)& <H1>Centavos:</> &spell-decimal(2)&H1 <H1>Depósito:</> &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_nota-doc_entr(11)& <H1>de </> &ybrvs_nota-data& Campo de tabela/estrutura

HEAD_PRI Indicação de linha de comando

/: BOX WIDTH 132 CH HEIGHT 1 LN FRAME 10 TW <H1> Código Produto |EMB |UN.| Quantidade |</>

MAIN Elemento de dados

/E DADOS/: BOX XPOS 0 CH YPOS 0 CH WIDTH 132 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 15 CH YPOS 0 CH WIDTH 117 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 18 CH YPOS 0 CH WIDTH 114 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 21 CH YPOS 0 CH WIDTH 111 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 36 CH YPOS 0 CH WIDTH 96 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 67 CH YPOS 0 CH WIDTH 65 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 69 CH YPOS 0 CH WIDTH 63 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 83 CH YPOS 0 CH WIDTH 49 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 97 CH YPOS 0 CH WIDTH 35 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 111 CH YPOS 0 CH WIDTH 21 CH HEIGHT 27 LN FRAME 10 TW/: BOX XPOS 116 CH YPOS 0 CH WIDTH 16 CH HEIGHT 27 LN FRAME 10 TWMA &ybrvs_nota-produto(15)& &ybrvs_nota-unidade(3)&&ybrvs_nota-quant(15)&&ybrvs_nota-nome(31)& &ybrvs_nota-preco_un(14)&&ybrvs_nota-val_merc(14)& &ybrvs_nota-val_desc(12)&&ybrvs_nota-porc_ipi(5)& &ybrvs_nota-val_ipi(15)&

/E HEADER* <H1> Código Produto EMB UN. Quantidade Nome do Produto RN Preço Unitário Valor Mercadoria Valor Desconto %IPI Valor IPI</>

39

Page 40: Sap Script

ABAP Training

* &uline(132)& Parágrafo standard

TEXT Linha de Comentários

/: BOX WIDTH 132 CH HEIGHT 3 LN FRAME 10 TW/* Exibe tipo no campo texto* <H1>Textos:</>* &ybrvs_nota-tipo&

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_nota-total(14)&MA MAMA ____________________________ ___________________________MA Assinatura Assinatura

40

Page 41: Sap Script

ABAP Training

Exemplo:

Relatório de Avaliação de Fornecedores

A seguir, temos o programa de povoamento e o formulário Sapscript para um Relatório de Avaliação de Fornecedores, onde o usuário tem a opção de rodar um relatório ou imprimir o formulário. A lógica de ambos é complexa. No entanto, servem como referência de estudo pois abrangem quase todo o conteúdo acima mencionado, incluindo, até, boxes dinâmicos, ou seja, que variam com a quantidade de linhas a ser exibida e impressão em frente e verso (para isso, necessita-se de uma impressora com essa capacidade e programada para isso. Por fim, se o formulário for um envelope como neste caso, é necessária a utilização de uma máquina envelopadora).

41

Page 42: Sap Script

ABAP Training

*********************************************************************************** ** ********************************************

** * Confidencial e Proprietário *

** * Copyright 2001, Accenture *

** * Todos os direitos reservados *

** ********************************************

** ** Nome do Shell: YTRP0010 Versão do Shell: v1.01

** ************************************************************************************ Nome do Programa : ZRQM001

** Título do Programa : Shell - ABAP/4 List Report

** Programador : Antonio Celso Hunnicutt Cortada

** Data : 05/02/2001

** Última atualização : 05/02/2001

** ** Descrição : Criar uma transação 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 Modificações: ** Data Autor Corr. # Descrição ** 05/02/2001 Desenvolvimento inicial do prg *************************************************************************REPORT ZRQM001 NO STANDARD PAGE HEADING "Não mostra o cabeçalho padrão 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 serão impressas na última página

"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"

" SESSÃO DE DECLARAÇÃO DE DADOS ""<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"************************************************************************* Includes *************************************************************************INCLUDE: ZZIHEADR. "Cabeçalho padrão de report

************************************************************************* Tabelas *************************************************************************TABLES: MARA, "Mestre do material: dados gerais MAKT, "Textos breves de material CABN, "Característica AUSP, "Valores das modalidades das características LFA1, "Mestre de fornecedores (parte geral) QAVE, "Processamento de controle: decisão de utili QALS, "Registro do lote de controle JEST, "Status individual por objeto VIQMEL, "Nota - cabeçalho VIQMSM, "Nota - medidas ELBP, "Critério principal da avaliação de forneced T147C, "Definição dos subcritérios para a avaliação EKPO, "Item do documento de compras T001W, "Centros/filiais ZSAPSCRIP2, "Estrutura auxiliar de Relatório de Avaliaçã ITCPO, "SAPscript output interface T247, "Denominações e denominação breve dos meses KNA1, "Mestre de clientes (parte geral) T005T. "Denominação dos países

************************************************************************* 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 Pág C_LINHA1 TYPE P DECIMALS 2, "Cte p/ N. linhas Quebra Pág 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',

42

Page 43: Sap Script

ABAP Training

C_ERRO(10) TYPE C VALUE ' ERRO ', C_P TYPE C VALUE 'P', "Idioma Português C_ESP TYPE C VALUE 'S', "idioma espanhol C_ARG(2) TYPE C VALUE 'AR', "Argentina C_BR(2) TYPE C VALUE 'BR', "Brasil C_SI(2) TYPE C VALUE 'SÍ', "SÍ C_ENG TYPE C VALUE 'E'. "Idioma inglês

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.* variáveis de controle de impressão em brancoDATA: 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 cálculo* 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,

43

Page 44: Sap Script

ABAP Training

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, 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, "Código: lote de controle, lote QKENNZAHL LIKE QAVE-QKENNZAHL, "Índice de qualidade VBEWERTUNG LIKE QAVE-VBEWERTUNG, "Avaliação 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º objetoDATA: END OF I_QALS.

DATA: BEGIN OF I_JEST OCCURS 0, OBJNR LIKE JEST-OBJNR, "Nº objeto INACT LIKE JEST-INACT. "Código: status inativoDATA: 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,

44

Page 45: Sap Script

ABAP Training

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, "centro LIFNUM LIKE VIQMEL-LIFNUM, "fornecedor MATNR LIKE VIQMEL-MATNR, "material STRMN LIKE VIQMEL-STRMN, "Data de início desejada QMNUM LIKE VIQMEL-QMNUM, "Nº nota OBJNR LIKE VIQMEL-OBJNR, "nº objeto EBELN LIKE VIQMEL-EBELN, "Pedido EBELP LIKE VIQMEL-EBELP. "ItemDATA: END OF I_VIQMEL.

DATA: BEGIN OF I_JEST_NCQ OCCURS 0, OBJNR LIKE JEST-OBJNR, "Nº objeto INACT LIKE JEST-INACT. "Código: status inativoDATA: END OF I_JEST_NCQ.

DATA: BEGIN OF I_VIQMSM OCCURS 0, QMNUM LIKE VIQMSM-QMNUM, "Nº nota ERDAT LIKE VIQMSM-ERDAT. "Data de criação do registDATA: END OF I_VIQMSM.

DATA: BEGIN OF I_LFA1 OCCURS 0, LIFNR LIKE LFA1-LIFNR, "Nº conta do fornecedor NAME1 LIKE LFA1-NAME1, "Nome 1 SPRAS LIKE LFA1-SPRAS, "Chave do idioma STRAS LIKE LFA1-STRAS, "Rua e nº PFACH LIKE LFA1-PFACH, "CxPostal PSTLZ LIKE LFA1-PSTLZ, "Código Postal (CEP) ORT01 LIKE LFA1-ORT01, "Cidade REGIO LIKE LFA1-REGIO, "Estado LAND1 LIKE LFA1-LAND1. "PaisDATA: END OF I_LFA1.

DATA: BEGIN OF I_ELBP OCCURS 0, LIFNR LIKE ELBP-LIFNR, "Nº conta do fornecedor BEURT LIKE ELBP-BEURT. "NotaDATA: END OF I_ELBP.

DATA: BEGIN OF I_T001W OCCURS 0, WERKS LIKE T001W-WERKS, "Centro NAME LIKE T001W-NAME1, "Nome 1 SPRAS LIKE T001W-SPRAS, "Chave de Idioma STRAS LIKE T001W-STRAS, "Morada PFACH LIKE T001W-PFACH, "CxPostal PSTLZ LIKE T001W-PSTLZ, "CEP ORT01 LIKE T001W-ORT01, "Cidade REGIO LIKE T001W-REGIO, "Estado LAND1 LIKE T001W-LAND1. "PaisDATA: END OF I_T001W.

DATA: BEGIN OF I_REMET, WERKS LIKE KNA1-WERKS, "Centro NAME LIKE KNA1-NAME1, "Nome 1 STRAS LIKE KNA1-STRAS, "Morada PFACH LIKE KNA1-PFACH, "CxPostal PSTLZ LIKE KNA1-PSTLZ, "CEP ORT01 LIKE KNA1-ORT01, "Cidade REGIO LIKE KNA1-REGIO, "Estado LAND1 LIKE KNA1-LAND1. "Pais

DATA: END OF I_REMET.

DATA: BEGIN OF I_PAIS OCCURS 0, LAND1 LIKE T005T-LAND1, LANDX LIKE T005T-LANDX.DATA: END OF I_PAIS.

DATA: BEGIN OF I_DET_MAT OCCURS 0, WERKS LIKE T001W-WERKS, "Centro LIFNR LIKE LFA1-LIFNR, "Nº conta do fornecedor MATNR LIKE MARA-MATNR, "Nº material DATA LIKE QAVE-VDATUM, "Data do code para a de 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 realDATA: 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, "material MAKTX LIKE MAKT-MAKTX. "descricaoDATA: END OF I_MAKT.

DATA: BEGIN OF I_EKPO OCCURS 0, EBELN LIKE VIQMEL-EBELN, "pedido EBELP LIKE VIQMEL-EBELP, "item do pedido WERKS LIKE EKPO-WERKS. "centroDATA: END OF I_EKPO.

DATA: BEGIN OF I_TAB_RES OCCURS 0, WERKS LIKE QALS-WERK, "centro LIFNR LIKE QALS-LIFNR, "fornecedor PPM_M LIKE T706U-BETFA, PPM_AC LIKE T706U-BETFA, NFL_M LIKE T706U-BETFA, NFL_AC LIKE T706U-BETFA, LOT_M LIKE T706U-BETFA, LOT_AC LIKE T706U-BETFA, NPR_M LIKE T706U-BETFA, NPR_AC LIKE T706U-BETFA, NPT_M LIKE T706U-BETFA, NCQ_M LIKE T706U-BETFA, NCQ_AC LIKE T706U-BETFA, NAS_M LIKE T706U-BETFA, NQF_M LIKE T706U-BETFA, NQF_AC LIKE T706U-BETFA, OBJ_M LIKE T706U-BETFA, OBJ_AC LIKE T706U-BETFA.DATA: END OF I_TAB_RES.

DATA: BEGIN OF I_RES_INDICE OCCURS 0,

45

Page 46: Sap Script

ABAP Training

LIFNR LIKE MSEG-LIFNR, "fornecedor WERKS LIKE MSEG-WERKS, "centro PPM_M(7) TYPE C, PPM_AC(7) TYPE C, LOT_M(7) TYPE C, LOT_AC(7) TYPE C, LOT_OBJ_M(10) TYPE C, PPM_OBJ_M(10) TYPE C.DATA: END OF I_RES_INDICE.

DATA: BEGIN OF I_CABN OCCURS 0, ATINN LIKE CABN-ATINN, "Característica interna ADZHL LIKE CABN-ADZHL, "Número interno ATNAM LIKE CABN-ATNAM, "Nome da característica ATFOR LIKE CABN-ATFOR. "Formato da caracterí.DATA: END OF I_CABN.

DATA: BEGIN OF I_AUSP OCCURS 0, OBJEK LIKE AUSP-OBJEK, "Chave do objeto ATINN LIKE AUSP-ATINN, "Característica interna ATWRT LIKE AUSP-ATWRT, "Valor da característ. ATFLV LIKE AUSP-ATFLV, "Valor interno vírgula KLART LIKE AUSP-KLART. "Tipo de classeDATA: END OF I_AUSP.

DATA: BEGIN OF I_CENTRO OCCURS 0, WERKS LIKE T001W-WERKS.DATA: END OF I_CENTRO.

************************************************************************* Parâmetros de entrada : ** Select Options (S_...) ** Parameters (P_...) *************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1.

SELECT-OPTIONS: SO_CENT FOR LFA1-WERKS, "centro para impressão SO_FORNE FOR LFA1-LIFNR, "fornecedor SO_MATNR FOR MARA-MATNR, "material SO_WERKS FOR LFA1-WERKS. "centros p/ calc. acum. MTBSELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE T2.PARAMETERS: P_MES LIKE S031-SPMON OBLIGATORY, "mês de analise P_PERIOD(2) TYPE C OBLIGATORY. "período (mes p tras)

SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE T3.PARAMETERS: P_SOPPM AS CHECKBOX, " só ppm P_RSUM AS CHECKBOX. " relatório sumarizadoSELECTION-SCREEN END OF BLOCK B3.

SELECTION-SCREEN BEGIN OF BLOCK B4 WITH FRAME TITLE T4.PARAMETERS: P_RAF AS CHECKBOX, " imprime Formulário do RAF P_IMPRE LIKE USR01-SPLD, " Impressora P_REMET LIKE KNA1-KUNNR, " remetente

P_BATCH AS CHECKBOX. " Impressão via BatchSELECTION-SCREEN END OF BLOCK B4."<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" " SESSÃO DE PROCESSAMENTO ""<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"*----------------------------------------------------------------------*INITIALIZATION. "Logica para defaults "inteligentes"*----------------------------------------------------------------------* T1 = TEXT-001. " Características T2 = TEXT-002. " Período de Análise T3 = TEXT-003. " Apresentação T4 = TEXT-004. " Dados para RAF

*----------------------------------------------------------------------*AT SELECTION-SCREEN. "Tratamento de Erros e lógica para tela de seleção*----------------------------------------------------------------------*

* Condições de erro na tela de seleção:* Se ambos os modos de apresentação estão selecionados IF P_SOPPM = 'X' AND P_RSUM = 'X'. MESSAGE E083 WITH 'Selecionar apenas um modo ' 'de apresentação'. ENDIF.

* Se o mês informado está incorreto IF P_MES+4(2) > 12 OR P_MES+4(2) = 0. MESSAGE E083 WITH 'Mês de análise errado'. ENDIF.

* Se o período de análise está incorreto IF P_PERIOD <= 0. MESSAGE E083 WITH 'Período de análise 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 número 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 estão em branco ! Processamento demorado. MESSAGE W365. ENDIF. ENDIF.

46

Page 47: Sap Script

ABAP Training

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. MESSAGE E083 WITH 'O(s) centro(s) selecionado(s) não' 'está(ão) incluído(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. "Cabeçalho (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 ' ', /02 ' CENTRO', 15 'DESCRIÇÃO', 170 ' '.

FORMAT COLOR COL_HEADING.

WRITE: /05 'MÊS/ANO', 33 'NFL', 48 'NPR', 63 'NCQ', 78 'NQF', 93 'NPT', 108 'PPM', 123 'OBJ', 138 '%LOT', 153 'OBJ', 170 ' '.

ULINE.

*----------------------------------------------------------------------*TOP-OF-PAGE DURING LINE-SELECTION.*----------------------------------------------------------------------* PERFORM F_HEADER USING SY-TITLE SPACE SPACE SPACE.

READ TABLE I_T001W WITH KEY WERKS = I_TAB_DET_FIM-WERKS.

FORMAT COLOR COL_HEADING. WRITE: /002 'ÍNDICE PPM E LOTES NO CENTRO', I_TAB_DET_FIM-WERKS, ' - ', I_T001W-NAME, 170 ''.

* format color col_heading. WRITE: /01 '', 53 ' Mês ', 79 ' Acum. ', 170 '' . WRITE: /02 'Material', 17 'Descrição Breve', 58 'PPM', 72 '%LOT', 87 'PPM', 99 '%LOT', 116 'OBJ PPM', 135 'OBJ %LOT', 170 ' '. ULINE.*----------------------------------------------------------------------*AT LINE-SELECTION. "*----------------------------------------------------------------------*

47

Page 48: Sap Script

ABAP Training

IF P_RSUM NE 'X'. PERFORM F_PRINT_REP_DET. ENDIF.*----------------------------------------------------------------------*

*----------------------------------------------------------------------*END-OF-PAGE. "Rodapé*----------------------------------------------------------------------***<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>** " SESSÃO DE FORMS " **<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>***----------------------------------------------------------------------** Form F_SELECT_NFLPRPT.*----------------------------------------------------------------------** Funcao para selecao de dados do mes e do periodo **----------------------------------------------------------------------*FORM F_SELECT_NFLPRPT.

* selecionar dados da tabela QAVE. SELECT PRUEFLOS KZART QKENNZAHL VBEWERTUNG VDATUM FROM QAVE INTO TABLE I_QAVE WHERE VDATUM >= V_DT_INICIO AND VDATUM <= V_DT_FIM AND KZART = C_KZART.

IF SY-SUBRC = 0. SELECT PRUEFLOS WERK ART LIFNR MATNR LMENGESCH LMENGEIST OBJNR FROM QALS INTO TABLE I_QALS FOR ALL ENTRIES IN I_QAVE WHERE PRUEFLOS = I_QAVE-PRUEFLOS AND WERK IN SO_WERKS AND LIFNR IN SO_FORNE AND MATNR IN SO_MATNR AND ( ART = '01' OR ART = '89' OR ART = '90' ) AND STAT35 <> SPACE.

IF SY-SUBRC EQ 0. SELECT OBJNR INACT FROM JEST INTO TABLE I_JEST FOR ALL ENTRIES IN I_QALS WHERE OBJNR = I_QALS-OBJNR AND STAT = C_STAT. "I0224 ENDIF. ENDIF.

* elimina notas de fornecimento de lotes que estejam estornados. LOOP AT I_QALS.* ler a tabela para checar se existe objeto. READ TABLE I_JEST WITH KEY OBJNR = I_QALS-OBJNR. IF SY-SUBRC EQ 0 AND I_JEST-INACT = SPACE. DELETE I_QALS. "deleta registro estornado. ENDIF. ENDLOOP.

DESCRIBE TABLE I_QALS LINES V_LINHAS.

IF V_LINHAS EQ 0. EXIT. ENDIF.

* ordenar tabela para facilitar sapscript. SORT I_QALS BY WERKS LIFNR ART.

LOOP AT I_QALS. IF I_QALS-LIFNR EQ ''. CONTINUE. ENDIF.* Atualiza dados qnado muda o centro e o fornecedor. ON CHANGE OF I_QALS-WERKS OR I_QALS-LIFNR.

IF V_TIPO_NF NE ' '.

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.

* Limpar as variaveis utilizadas no calculo. CLEAR: V_SUM_PPM89_M, V_SUM_PPM89_AC, V_NUM_NFL_M, V_NUM_NFL_AC, V_SUM_NFL_M, V_SUM_NFL_AC, V_SUM_NPT_M, V_SUM_NPT_AC, V_SUM_LOT_M, V_SUM_LOT_AC, 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_SUM_PPM01_M, V_SUM_PPM01_AC. ENDIF. ENDON.

* guarda valores para geracao de arquivo final. V_WERKS = I_QALS-WERKS. V_LIFNR = I_QALS-LIFNR.

48

Page 49: Sap Script

ABAP Training

V_MATNR = I_QALS-MATNR. V_TIPO_NF = I_QALS-ART.

IF I_QALS-ART = '89'. READ TABLE I_QAVE WITH KEY PRUEFLOS = I_QALS-PRUEFLOS.* ---------------------------Fim da Alteração--------------------------*

IF SY-SUBRC NE 0. CONTINUE. ENDIF.

IF I_QAVE-VDATUM >= V_DTI_ANALISE AND I_QAVE-VDATUM <= V_DT_FIM. V_SUM_PPM89_M = V_SUM_PPM89_M + I_QALS-LMENGESCH. V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_QALS-LMENGESCH. ELSE. V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_QALS-LMENGESCH. 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_QALS-PRUEFLOS.

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_QALS-LMENGEIST. V_NUM_NFL_AC = V_NUM_NFL_AC + 1.* ----------------------- Fim da Alteração --------------------------- * ELSE.* sumariza o numero de ocorrencias´para 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_QALS-LMENGEIST. 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_QALS-PRUEFLOS.

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.

49

Page 50: Sap Script

ABAP Training

*----------------------------------------------------------------------** 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. 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 Alteração --------------------------- * 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 RIGHT-JUSTIFIED. WRITE V_TOT_LOT_M TO I_TABFIM-LOT_M DECIMALS 2 RIGHT-JUSTIFIED. 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 RIGHT-JUSTIFIED.

50

Page 51: Sap Script

ABAP Training

WRITE V_TOT_NPR_M TO I_TABFIM-NPR_M DECIMALS 0 RIGHT-JUSTIFIED. 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 RIGHT-JUSTIFIED.

* grava nota de pontualidade - acumulado. WRITE V_TOT_NPT_AC TO I_TABFIM-NPT_AC DECIMALS 0 RIGHT-JUSTIFIED.

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 RIGHT-JUSTIFIED.

* 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 não 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

51

Page 52: Sap Script

ABAP Training

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, 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

52

Page 53: Sap Script

ABAP Training

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 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. " N° remetente (quem emite o RAF)

* o idioma pelo qual o nome do país deve ser procurado depende do* país do remetente. IF I_REMET-LAND1 EQ C_BR. " Se remetente for brasileiro V_IDIOMA = C_P. " português ELSEIF I_REMET-LAND1 EQ C_ARG. " Se remetente for argentino V_IDIOMA = C_ESP. " espanhol ENDIF. " Se remetente for brasileiro

SELECT LAND1 LANDX FROM T005T INTO TABLE I_PAIS WHERE SPRAS = V_IDIOMA.

ENDFORM.

*----------------------------------------------------------------------** Form F_GRAVA_DET_MAT.

53

Page 54: Sap Script

ABAP Training

*----------------------------------------------------------------------** Gera impressao detalhada por material*----------------------------------------------------------------------*FORM F_GRAVA_DET_MAT.

CLEAR: I_DET_MAT.

I_DET_MAT-WERKS = V_WERKS. I_DET_MAT-LIFNR = V_LIFNR. I_DET_MAT-MATNR = V_MATNR. I_DET_MAT-DATA = I_QAVE-VDATUM. I_DET_MAT-TIPO_NF = V_TIPO_NF.

IF V_TIPO_NF = '89'. I_DET_MAT-LMENGESCH = I_QALS-LMENGESCH. ELSEIF V_TIPO_NF = '01'. I_DET_MAT-QKENNZAHL = I_QAVE-QKENNZAHL. I_DET_MAT-LMENGEIST = I_QALS-LMENGEIST. ENDIF.

APPEND I_DET_MAT.

ENDFORM.

*----------------------------------------------------------------------** Form F_PRINT_REPORT*----------------------------------------------------------------------** imprime o report*----------------------------------------------------------------------*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 'Não há dados para os critérios de seleção' 'informados'. EXIT. ENDIF.

SORT I_TABFIM BY LIFNR WERKS.

LOOP AT I_TABFIM WHERE WERKS IN SO_CENT.

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'. IF SO_CENT EQ ' '. READ TABLE I_TOT_FORNEC WITH KEY LIFNR = V_FORNEC. PERFORM F_PRINT_TOTAL. ENDIF. ENDIF.

READ TABLE I_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR.

FORMAT COLOR COL_NORMAL INTENSIFIED ON. WRITE: /02 I_TABFIM-LIFNR, 15 I_LFA1-NAME1, 60 'NAS = ', I_FORNEC-NAS, 170 ' '.

FORMAT COLOR COL_NORMAL.

V_PRIM_VEZ = 'F'.

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.

* Busca valores de OBJ PPM e LOTE READ TABLE I_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR. ENDON.* Imprimir descrição 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, 32 I_TABFIM-NFL_M, 47 I_TABFIM-NPR_M, 62 I_TABFIM-NCQ_M, 77 I_TABFIM-NQF_M, 92 I_TABFIM-NPT_M, 107 I_TABFIM-PPM_M HOTSPOT ON.

WRITE: 119 I_FORNEC-PPM_OBJ.

WRITE: 137 I_TABFIM-LOT_M.

WRITE: 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)', 32 I_TABFIM-NFL_AC, 47 I_TABFIM-NPR_AC, 62 I_TABFIM-NCQ_AC, 77 I_TABFIM-NQF_AC, 92 I_TABFIM-NPT_AC, 107 I_TABFIM-PPM_AC HOTSPOT ON, 137 I_TABFIM-LOT_AC, 170 ' '. HIDE: I_TABFIM-LIFNR, I_TABFIM-WERKS. V_FORNEC = I_TABFIM-LIFNR. AT LAST.

READ TABLE I_TOT_FORNEC WITH KEY LIFNR = V_FORNEC. IF SO_CENT EQ ' '.

54

Page 55: Sap Script

ABAP Training

PERFORM F_PRINT_TOTAL. ENDIF. ENDAT.

FORMAT COLOR COL_NORMAL.

ENDLOOP. IF SY-SUBRC NE 0. MESSAGE I083 WITH 'Não há dados para os critérios de seleção' 'informados'. EXIT. ENDIF.

ULINE.

IF SO_CENT EQ '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. PERFORM F_PRINT_TOTAL_FINAL. PERFORM F_PRINT_TOTAL_ACUM. ELSEIF SO_CENT NE '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. PERFORM F_PRINT_TOTAL_FINAL. ENDIF.

ENDFORM.

*----------------------------------------------------------------------** Form F_PRINT_REP_DET.*----------------------------------------------------------------------** Imprime relatorio detalhado por item.*----------------------------------------------------------------------*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_FIM-MATNR.

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 impressão*----------------------------------------------------------------------*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 página C_LINHA = ( 64 * 127 / 30 ). "64 linhas * X mm por linha C_LINHA1 = ( 61 * 127 / 30 ). "61 linhas * X mm por linha

* Contador de número de linhas* 8.89 cm = 21 linhas do topo da página (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 'Não há dados para os critérios de seleção' ' informados'. EXIT. ENDIF.

V_FLAG_IMPRES = C_SIM.

V_PRIM_VEZ = C_SIM.

SORT I_TABFIM BY LIFNR.

* Imprime SAPSCRIPT LOOP AT I_TABFIM.

READ TABLE I_TOT_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR. IF I_TOT_FORNEC-PPM_M = ' '. CONTINUE. ENDIF.

IF V_FLAG_IMPRES = C_SIM(1).* Abre form para impressão de sapscript PERFORM F_OPEN_FORM. V_FLAG_IMPRES = C_NAO. ENDIF.

ON CHANGE OF I_TABFIM-LIFNR. IF V_PRIM_VEZ <> C_SIM(1).* Resumo dos índices de PPM de linha e % rejeição de Lote no Recebimento PERFORM F_LOOP_RESUMO_INDICE. V_TIME = 889 / 10. V_PRIM_VEZ = C_SIM. V_PRIM_VEZ_SAPSCRIPT = C_SIM(1). ENDIF. ENDON.

CLEAR: I_LFA1, I_T001W.

* Descrição do Fornecedor e Centro READ TABLE I_LFA1 WITH KEY LIFNR = I_TABFIM-LIFNR. READ TABLE I_T001W WITH KEY WERKS = I_TABFIM-WERKS. READ TABLE I_TOT_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR. READ TABLE I_FORNEC WITH KEY LIFNR = I_TABFIM-LIFNR.* Inicia formulário IF V_PRIM_VEZ_SAPSCRIPT = C_SIM(1).

55

Page 56: Sap Script

ABAP Training

PERFORM F_START_FORM. ENDIF.* Data de Referência / Acumulado de:

PERFORM F_EXTENSO_DATA USING V_DT_FIM+4(2) V_DT_FIM+2(2) CHANGING ZSAPSCRIP2-DATA_REF.

PERFORM F_EXTENSO_DATA USING V_DT_INICIO+4(2) V_DT_INICIO+2(2) CHANGING ZSAPSCRIP2-ACUM_DT1. PERFORM F_EXTENSO_DATA USING V_DT_FIM+4(2) V_DT_FIM+2(2) CHANGING ZSAPSCRIP2-ACUM_DT2.* Dados do Destinário ZSAPSCRIP2-NAMEF = I_LFA1-NAME1. ZSAPSCRIP2-LIFNR = I_TABFIM-LIFNR. ZSAPSCRIP2-DEST_NAME = I_LFA1-NAME1. ZSAPSCRIP2-DEST_RUA = I_LFA1-STRAS. ZSAPSCRIP2-DEST_CAIXA = I_LFA1-PFACH. ZSAPSCRIP2-DEST_CEP = I_LFA1-PSTLZ. ZSAPSCRIP2-DEST_CITY = I_LFA1-ORT01. ZSAPSCRIP2-DEST_REG = I_LFA1-REGIO. READ TABLE I_PAIS WITH KEY LAND1 = I_LFA1-LAND1. ZSAPSCRIP2-DEST_PAIS = I_PAIS-LANDX.

* Dados do Remetente ZSAPSCRIP2-NAMEC = I_T001W-NAME. ZSAPSCRIP2-REM_NAME = I_REMET-NAME. ZSAPSCRIP2-REM_RUA = I_REMET-STRAS. ZSAPSCRIP2-REM_CAIXA = I_REMET-PFACH. ZSAPSCRIP2-REM_CEP = I_REMET-PSTLZ. 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 país do Remetente for* argentina e o país do fornecedor for argentina, imprimir o relatório* espanhol. Se ambos forem Brasil, imprimir em português. Para os* demais casos, imprimir em inglês.

IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. ZSAPSCRIP2-AVALIA = C_NAO. ELSE. ZSAPSCRIP2-AVALIA = C_NO. ENDIF. ELSE. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. ZSAPSCRIP2-AVALIA = C_SIM. ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG. ZSAPSCRIP2-AVALIA = C_SI. ELSE. ZSAPSCRIP2-AVALIA = C_YES. ENDIF. ENDIF. IF I_TOT_FORNEC-NFL_M = ' '. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. ZSAPSCRIP2-ATIVO = C_NAO.

ELSE. ZSAPSCRIP2-ATIVO = C_NO. ENDIF. ELSE. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. ZSAPSCRIP2-ATIVO = C_SIM. ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG. ZSAPSCRIP2-ATIVO = C_SI. ELSE. ZSAPSCRIP2-ATIVO = C_YES. ENDIF. ENDIF.

* Iguala todos os campos da tabela de resumo de unidade para a estrutura ZSAPSCRIP2-PPM_M = I_TOT_FORNEC-PPM_M. ZSAPSCRIP2-PPM_AC = I_TOT_FORNEC-PPM_AC. ZSAPSCRIP2-NQF_M_T = I_TOT_FORNEC-NQF_M. ZSAPSCRIP2-NQF_AC_T = I_TOT_FORNEC-NQF_AC. ZSAPSCRIP2-NAS_M_T = I_FORNEC-NAS. ZSAPSCRIP2-NPT_AC_T = I_TOT_FORNEC-NPT_AC+1. ZSAPSCRIP2-NPT_M_T = I_TOT_FORNEC-NPT_M+1. ZSAPSCRIP2-NFL_M_T = I_TOT_FORNEC-NFL_M. ZSAPSCRIP2-NFL_AC_T = I_TOT_FORNEC-NFL_AC. ZSAPSCRIP2-NPR_M_T = I_TOT_FORNEC-NPR_M. ZSAPSCRIP2-NPR_AC_T = I_TOT_FORNEC-NPR_AC. ZSAPSCRIP2-NCQ_M_T = I_TOT_FORNEC-NCQ_M. ZSAPSCRIP2-NCQ_AC_T = I_TOT_FORNEC-NCQ_AC.

* Impressão do resumo de todas as Unidades IF V_PRIM_VEZ_SAPSCRIPT = C_SIM(1). 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.

* Verifica se está ativo para o determinado fornecedor: IF I_TABFIM-NFL_M = ' '.* Se o país do Remetente for* argentina e o país do fornecedor for argentina, imprimir o relatório* espanhol. Se ambos forem Brasil, imprimir em português. Para os* demais casos, imprimir em inglês. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. ZSAPSCRIP2-ATIVO = C_NAO. ELSE. ZSAPSCRIP2-ATIVO = C_NO. ENDIF. ELSE. IF I_LFA1-LAND1 EQ C_BR AND I_REMET-LAND1 EQ C_BR. ZSAPSCRIP2-ATIVO = C_SIM.

56

Page 57: Sap Script

ABAP Training

ELSEIF I_LFA1-LAND1 EQ C_ARG AND I_REMET-LAND1 EQ C_ARG. ZSAPSCRIP2-ATIVO = C_SI. ELSE. ZSAPSCRIP2-ATIVO = C_YES. ENDIF. ENDIF. IF V_PRIM_VEZ = C_SIM(1).* Impressão do resumo por Unidades PERFORM F_WRITE_RESUMO_POR_UNIDADE. V_PRIM_VEZ = C_NAO. ELSEIF V_TIME > C_LINHA1.* Impressão do resumo por Unidades PERFORM F_WRITE_RESUMO_POR_UNIDADE. V_TIME = ( 14 * 127 / 30 ). ENDIF.

* Atualiza contador de linhas ZSAPSCRIP2-CONT = V_TIME.

* Chama FORM de impressão de detalhe Resumo por Unidade PERFORM F_WRITE_DET_RESUMO_POR_UNIDADE.* Grava dados para resumo de índice de PPM PERFORM F_GRAVA_RES_INDICE. ENDLOOP.

IF V_PRIM_VEZ <> C_SIM(1).* Imprime último fornecedor cadastrado PERFORM F_LOOP_RESUMO_INDICE. ENDIF.

IF V_FLAG_IMPRES = C_SIM(1). MESSAGE I083 WITH 'Não há dados para os critérios de seleção' ' informados'. ELSE.* Encerra a impressão 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_MAT-LMENGESCH. V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_DET_MAT-LMENGESCH. ELSE. V_SUM_PPM89_AC = V_SUM_PPM89_AC + I_DET_MAT-LMENGESCH. 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.* contabiliza NFL e LOT. V_SUM_NFL_M = V_SUM_NFL_M + I_DET_MAT-QKENNZAHL. IF I_DET_MAT-QKENNZAHL <> 1. V_SUM_LOT_M = V_SUM_LOT_M + I_DET_MAT-QKENNZAHL. ENDIF.

V_SUM_PPM01_M = V_SUM_PPM01_M + I_DET_MAT-LMENGEIST. V_NUM_NFL_AC = V_NUM_NFL_AC + 1. V_SUM_NFL_AC = V_SUM_NFL_AC + I_DET_MAT-QKENNZAHL. IF I_DET_MAT-QKENNZAHL <> 1. V_SUM_LOT_AC = V_SUM_LOT_AC + I_DET_MAT-QKENNZAHL. ENDIF. V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_DET_MAT-LMENGEIST. ELSE.* sumariza o numero de ocorrencias pára um dado tipo de controle. V_NUM_NFL_AC = V_NUM_NFL_AC + 1.* contabiliza NFL e LOT. V_SUM_NFL_AC = V_SUM_NFL_AC + I_DET_MAT-QKENNZAHL. IF I_DET_MAT-QKENNZAHL <> 1. V_SUM_LOT_AC = V_SUM_LOT_AC + I_DET_MAT-QKENNZAHL. ENDIF.

57

Page 58: Sap Script

ABAP Training

* contabiliza valor para calculo de nota de processo. V_SUM_PPM01_AC = V_SUM_PPM01_AC + I_DET_MAT-LMENGEIST. ENDIF. ENDIF. ENDLOOP.

* Grava dados do último registro 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.

ENDFORM.

*----------------------------------------------------------------------** Form f_grava_det_fim.*----------------------------------------------------------------------** Grava tabela final de detalhes de itens.*----------------------------------------------------------------------*FORM F_GRAVA_DET_FIM.

CLEAR: I_TAB_DET_FIM.

READ TABLE I_TAB_DET_FIM WITH KEY WERKS = V_WERKS LIFNR = V_LIFNR MATNR = V_MATNR.

IF SY-SUBRC <> 0. I_TAB_DET_FIM-WERKS = V_WERKS. I_TAB_DET_FIM-LIFNR = V_LIFNR. I_TAB_DET_FIM-MATNR = V_MATNR. APPEND I_TAB_DET_FIM. ENDIF.

* 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 mês 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 ' '.

58

Page 59: Sap Script

ABAP Training

FORMAT COLOR COL_NORMAL.

ENDFORM.

*&---------------------------------------------------------------------**& Form F_OPEN_FORM*&---------------------------------------------------------------------** Abre o fórmulário para impressão 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 fórmulário para impressão 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' WINDOW = 'MAIN'.

ENDFORM. " 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 contém o cabeçalho 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 contém os

* dados do RESUMO_POR_UNIDADE.*----------------------------------------------------------------------*FORM F_WRITE_DET_RESUMO_POR_UNIDADE.

* Chama o elemento de texto DETALHE_RESUMO_POR_UNIDADE, que contém 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 contém os* dados do RESUMO_INDICES_PPM.*----------------------------------------------------------------------*FORM F_WRITE_DET_RESUMO_INDICE.

* Chama o elemento de texto DETALHE_RESUMO_INDICES_PPM, que contém 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 país do Remetente for* argentina e o país do fornecedor for argentina, imprimir o relatório* espanhol. Se ambos forem Brasil, imprimir em português. Para os* demais casos, imprimir em inglês.

59

Page 60: Sap Script

ABAP Training

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 formulário para impressão da página de verso CALL FUNCTION 'START_FORM' EXPORTING FORM = 'Z_AVAL_FORNEC' LANGUAGE = V_IDIOMA STARTPAGE = 'VERSO' IMPORTING LANGUAGE = SY-LANGU.

* imprime página de verso CALL FUNCTION 'WRITE_FORM' EXPORTING WINDOW = 'INFO3'.

CALL FUNCTION 'END_FORM'. "Encerra formulário

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 % rejeição 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 impressão de cabec de Resumo dos índices PERFORM F_WRITE_RESUMO_INDICE. 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_INDICE-WERKS.

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 formulário de dados de Nota CALL FUNCTION 'END_FORM'.

* Form de Impressão de verso da página 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 país do Remetente for* argentina e o país do fornecedor for argentina, imprimir o relatório* espanhol. Se ambos forem Brasil, imprimir em português. Para os* demais casos, imprimir em inglês.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

60

Page 61: Sap Script

ABAP Training

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 país do Remetente for* argentina e o país do fornecedor for argentina, imprimir o relatório* espanhol. Se ambos forem Brasil, imprimir em português. Para os* demais casos, imprimir em inglês.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 formulário para impressão da página 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 **----------------------------------------------------------------------** --> 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.

61

Page 62: Sap Script

ABAP Training

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_FIM-MATNR. 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 '.,'.

WRITE V_VAL_PPM TO I_FORNEC_MAT-PPM_OBJ RIGHT-JUSTIFIED. WRITE V_VAL_LOTE TO I_FORNEC_MAT-LOT_OBJ RIGHT-JUSTIFIED. 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_CENTRO-WERKS.

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',

62

Page 63: Sap Script

ABAP Training

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 mês de início do período* 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.

* Cálculo do início do período de análise 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*&---------------------------------------------------------------------**& Form F_CALC_ACUM*&---------------------------------------------------------------------** Form para calcular as notas acumuladas nos centros e MTB.* Este form também grava os resultados na tabela do centro.*----------------------------------------------------------------------*FORM F_CALC_ACUM.

* Declaração de variáveis 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, SUM_PPM01_M LIKE T706U-BETFA, SUM_PPM01_AC LIKE T706U-BETFA, SUM_ATRAS_M LIKE T706U-BETFA, SUM_ATRAS_AC LIKE T706U-BETFA, SUM_EMDIA_M LIKE T706U-BETFA, SUM_EMDIA_AC LIKE T706U-BETFA.DATA: END OF I_ACUM_FORNEC.

SORT I_ACUM BY CENTRO.

* verifica se é necessária a impressão dos totais por centro e empresaIF SO_FORNE EQ '' AND SO_MATNR EQ ''.

* Soma totais gerais para os Centros e para Empresa

63

Page 64: Sap Script

ABAP Training

LOOP AT I_ACUM.

V_CENT_SUM_PPM89_AC = V_CENT_SUM_PPM89_AC + I_ACUM-SUM_PPM89_AC. V_CENT_NUM_NFL_AC = V_CENT_NUM_NFL_AC + I_ACUM-NUM_NFL_AC. V_CENT_SUM_NFL_AC = V_CENT_SUM_NFL_AC + I_ACUM-SUM_NFL_AC. V_CENT_SUM_LOT_AC = V_CENT_SUM_LOT_AC + I_ACUM-SUM_LOT_AC. V_CENT_SUM_NPT_AC = V_CENT_SUM_NPT_AC + I_ACUM-SUM_NPT_AC. V_CENT_NUM_NPT_AC = V_CENT_NUM_NPT_AC + I_ACUM-NUM_NPT_AC. V_CENT_SUM_PPM01_AC = V_CENT_SUM_PPM01_AC + I_ACUM-SUM_PPM01_AC. V_CENT_SUM_ATRAS_AC = V_CENT_SUM_ATRAS_AC + I_ACUM-SUM_ATRAS_AC. V_CENT_SUM_EMDIA_AC = V_CENT_SUM_EMDIA_AC + I_ACUM-SUM_EMDIA_AC.

IF SO_CENT EQ ''. "verifica se nenhum centro foi selecionado V_MTB_SUM_PPM89_AC = V_MTB_SUM_PPM89_AC + I_ACUM-SUM_PPM89_AC. V_MTB_NUM_NFL_AC = V_MTB_NUM_NFL_AC + I_ACUM-NUM_NFL_AC. V_MTB_SUM_NFL_AC = V_MTB_SUM_NFL_AC + I_ACUM-SUM_NFL_AC. V_MTB_SUM_LOT_AC = V_MTB_SUM_LOT_AC + I_ACUM-SUM_LOT_AC. V_MTB_SUM_NPT_AC = V_MTB_SUM_NPT_AC + I_ACUM-SUM_NPT_AC. V_MTB_NUM_NPT_AC = V_MTB_NUM_NPT_AC + I_ACUM-NUM_NPT_AC. V_MTB_SUM_PPM01_AC = V_MTB_SUM_PPM01_AC + I_ACUM-SUM_PPM01_AC. V_MTB_SUM_ATRAS_AC = V_MTB_SUM_ATRAS_AC + I_ACUM-SUM_ATRAS_AC. V_MTB_SUM_EMDIA_AC = V_MTB_SUM_EMDIA_AC + I_ACUM-SUM_EMDIA_AC. ENDIF.

AT END OF CENTRO. I_ACUM_CENTRO-CENTRO = I_ACUM-CENTRO. I_ACUM_CENTRO-SUM_PPM89 = V_CENT_SUM_PPM89_AC. I_ACUM_CENTRO-NUM_NFL = V_CENT_NUM_NFL_AC. I_ACUM_CENTRO-SUM_NFL = V_CENT_SUM_NFL_AC. I_ACUM_CENTRO-SUM_LOT = V_CENT_SUM_LOT_AC. I_ACUM_CENTRO-SUM_NPT = V_CENT_SUM_NPT_AC. I_ACUM_CENTRO-NUM_NPT = V_CENT_NUM_NPT_AC. I_ACUM_CENTRO-SUM_PPM01 = V_CENT_SUM_PPM01_AC. 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.

64

Page 65: Sap Script

ABAP Training

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.

* Cálculo 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, 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* Cálculo 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 = ' '. I_ACUM_MTB-NPR_AC = ' '. ELSE. WRITE V_TOT_PPM_AC TO I_ACUM_MTB-PPM_AC DECIMALS 0 RIGHT-JUSTIFIED. WRITE V_TOT_NPR_AC TO I_ACUM_MTB-NPR_AC DECIMALS 0 RIGHT-JUSTIFIED. ENDIF.

* grava nota de pontualidade - acumulado.

65

Page 66: Sap Script

ABAP Training

WRITE V_TOT_NPT_AC TO I_ACUM_MTB-NPT_AC DECIMALS 0 RIGHT-JUSTIFIED.

* grava valores de nota de compromisso de qualidade - acumulado. WRITE V_TOT_NCQ_AC TO I_ACUM_MTB-NCQ_AC DECIMALS 0 RIGHT-JUSTIFIED.

* Cálculo do NQF* Se NFL e NPR estiverem BRANCOS, passar BRANCO IF I_ACUM_MTB-NFL_AC = ' ' AND I_ACUM_MTB-NPR_AC = ' '. I_ACUM_MTB-NQF_AC = ' '. ELSE. IF V_TOT_POND <> 0. V_TOT_NQF_AC = ( ( I_ACUM_MTB-NFL_AC * V_FATOR_NFL ) + ( I_ACUM_MTB-NPR_AC * V_FATOR_NPR ) + ( I_ACUM_MTB-NCQ_AC * V_FATOR_NCQ ) ) / V_TOT_POND. WRITE V_TOT_NQF_AC TO I_ACUM_MTB-NQF_AC DECIMALS 0. ENDIF. ENDIF.

ENDIF.ENDIF.

* Calcula totais gerais por fornecedor.* Insere elemento na tabela para funcionar comando on change. I_ACUM-LIFNR = '999999999'. APPEND I_ACUM. SORT I_ACUM BY LIFNR. LOOP AT I_ACUM. ON CHANGE OF I_ACUM-LIFNR. IF V_PRIM_VEZ NE 0. I_ACUM_FORNEC-LIFNR = V_FORNEC_LIFNR. I_ACUM_FORNEC-SUM_PPM89_M = V_FORNEC_SUM_PPM89_M. I_ACUM_FORNEC-SUM_PPM89_AC = V_FORNEC_SUM_PPM89_AC. I_ACUM_FORNEC-NUM_NFL_M = V_FORNEC_NUM_NFL_M. I_ACUM_FORNEC-NUM_NFL_AC = V_FORNEC_NUM_NFL_AC. I_ACUM_FORNEC-SUM_NFL_M = V_FORNEC_SUM_NFL_M. I_ACUM_FORNEC-SUM_NFL_AC = V_FORNEC_SUM_NFL_AC. I_ACUM_FORNEC-SUM_LOT_M = V_FORNEC_SUM_LOT_M. I_ACUM_FORNEC-SUM_LOT_AC = V_FORNEC_SUM_LOT_AC. I_ACUM_FORNEC-SUM_NPT_M = V_FORNEC_SUM_NPT_M. I_ACUM_FORNEC-SUM_NPT_AC = V_FORNEC_SUM_NPT_AC. I_ACUM_FORNEC-NUM_NPT_M = V_FORNEC_NUM_NPT_M. I_ACUM_FORNEC-NUM_NPT_AC = V_FORNEC_NUM_NPT_AC. I_ACUM_FORNEC-SUM_PPM01_M = V_FORNEC_SUM_PPM01_M. I_ACUM_FORNEC-SUM_PPM01_AC = V_FORNEC_SUM_PPM01_AC. I_ACUM_FORNEC-SUM_ATRAS_M = V_FORNEC_SUM_ATRAS_M. 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_ACUM-NUM_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_ACUM-SUM_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_ACUM-SUM_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_ACUM-SUM_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,

66

Page 67: Sap Script

ABAP Training

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.* Cálculo 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. 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. WRITE V_TOT_PPM_M TO I_TOT_FORNEC-PPM_M DECIMALS 0 RIGHT-JUSTIFIED. WRITE V_TOT_NPR_M TO I_TOT_FORNEC-NPR_M DECIMALS 0 RIGHT-JUSTIFIED. ENDIF.

67

Page 68: Sap Script

ABAP Training

* grava nota processo - acumulado. IF V_CHECK_NFL_AC = 'X'. I_TOT_FORNEC-PPM_AC = ' '. I_TOT_FORNEC-NPR_AC = ' '. ELSE. WRITE V_TOT_PPM_AC TO I_TOT_FORNEC-PPM_AC DECIMALS 0 RIGHT-JUSTIFIED. WRITE V_TOT_NPR_AC TO I_TOT_FORNEC-NPR_AC DECIMALS 0 RIGHT-JUSTIFIED. ENDIF.

* grava nota de pontualidade - mes. WRITE V_TOT_NPT_M TO I_TOT_FORNEC-NPT_M DECIMALS 0 RIGHT-JUSTIFIED.

* grava nota de pontualidade - acumulado. WRITE V_TOT_NPT_AC TO I_TOT_FORNEC-NPT_AC DECIMALS 0 RIGHT-JUSTIFIED.

* grava valores de nota de compromisso de qualidade - mes. WRITE V_TOT_NCQ_M TO I_TOT_FORNEC-NCQ_M DECIMALS 0 RIGHT-JUSTIFIED.

* grava valores de nota de compromisso de qualidade - acumulado. WRITE V_TOT_NCQ_AC TO I_TOT_FORNEC-NCQ_AC DECIMALS 0 RIGHT-JUSTIFIED.

* Cálculo do NQF* Se NFL e NPR estiverem BRANCOS, passar BRANCO

IF I_TOT_FORNEC-NFL_M = ' ' AND I_TOT_FORNEC-NPR_M = ' '. I_TOT_FORNEC-NQF_M = ' '. ELSE. IF V_TOT_POND <> 0. "mes V_TOT_NQF_M = ( ( I_TOT_FORNEC-NFL_M * V_FATOR_NFL ) + ( I_TOT_FORNEC-NPR_M * V_FATOR_NPR ) + ( I_TOT_FORNEC-NCQ_M * V_FATOR_NCQ ) ) / V_TOT_POND. WRITE V_TOT_NQF_M TO I_TOT_FORNEC-NQF_M DECIMALS 0. ENDIF. ENDIF. IF I_TOT_FORNEC-NFL_AC = ' ' AND I_TOT_FORNEC-NPR_AC = ' '. I_TOT_FORNEC-NQF_AC = ' '. ELSE. IF V_TOT_POND <> 0. V_TOT_NQF_AC = ( ( I_TOT_FORNEC-NFL_AC * V_FATOR_NFL ) + ( I_TOT_FORNEC-NPR_AC * V_FATOR_NPR ) + ( I_TOT_FORNEC-NCQ_AC * V_FATOR_NCQ ) ) / V_TOT_POND. WRITE V_TOT_NQF_AC TO I_TOT_FORNEC-NQF_AC DECIMALS 0. ENDIF. ENDIF.

* grava dados da tabela i_tot_fornec APPEND I_TOT_FORNEC. CLEAR I_TOT_FORNEC.ENDLOOP.

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 'Não há dados para os critérios de seleção' '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 descrição 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, 170 ' '. HIDE: I_TABFIM-LIFNR, I_TABFIM-WERKS.* Armazena o Número do fornecedor para pesquisa na tabela i_tot_fornec

68

Page 69: Sap Script

ABAP Training

V_FORNEC = I_TABFIM-LIFNR. AT LAST. READ TABLE I_TOT_FORNEC WITH KEY LIFNR = V_FORNEC. PERFORM F_PRINT_TOTAL_SOPPM. ENDAT. FORMAT COLOR COL_NORMAL. ENDLOOP. ULINE. IF SO_CENT EQ '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. PERFORM F_PRINT_TOTAL_CENTRO_SOPPM. PERFORM F_PRINT_TOTAL_ACUM_SOPPM. ELSEIF SO_CENT NE '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. PERFORM F_PRINT_TOTAL_CENTRO_SOPPM. ENDIF.ENDFORM. " F_PRINT_SOPPM

*&---------------------------------------------------------------------**& Form F_PRINT_RSUM*&---------------------------------------------------------------------** imprime relatório sumarizado **----------------------------------------------------------------------*FORM F_PRINT_RSUM. IF SO_CENT EQ '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. PERFORM F_PRINT_TOTAL_FINAL. PERFORM F_PRINT_TOTAL_ACUM. ELSEIF SO_CENT NE '' AND SO_FORNE EQ '' AND SO_MATNR EQ ''. PERFORM F_PRINT_TOTAL_FINAL. ELSE. MESSAGE E083 WITH 'Não é possível imprimir' 'com o modo de apresentação' 'escolhido'. ENDIF.

ENDFORM. " F_PRINT_RSUM*&---------------------------------------------------------------------**& Form f_print_total_centro_soppm.*&---------------------------------------------------------------------** Imprime o total final.*----------------------------------------------------------------------*FORM F_PRINT_TOTAL_CENTRO_SOPPM. 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_CENTRO-WERKS. WRITE: /03 I_TOT_CENTRO-WERKS, I_T001W-NAME, 107 I_TOT_CENTRO-PPM, 137 I_TOT_CENTRO-LOT, 170 ' '. ENDLOOP. ULINE.

ENDFORM.*&---------------------------------------------------------------------**& 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 mês 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.

--------------------------------------------------------------------------------

Formulário Z_AVAL_FORNEC--------------------------------------------------------------------------------

Mandante 200Idioma POriginal lang. EStatus Active

Layout set class FMHN Dunning reportsDevelopment class ZGAL Classe de desenvolvimento Projeto Galileo

Created by SAP Changed by ACSATOSDate 11.07.1993 Date 09.06.1999Time 16:24:01 Time 15:38:09Release 20A Release 30F

Significado Relatório de Aval. Fornecedor

Standard attributes First page FIRST Default paragr. AS Tab stop 5,00 CH Page format DINA4 Orientation Portrait Lines/inch 6,00 Characters/inch 10,00

69

Page 70: Sap Script

ABAP Training

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

I Italics Font attributes Italic Yes

K Key word Font attributes Font family HELVE Font size 10,0 Point

LP Font attributes Font family COURIER Font size 8,0 Point

S Key word (lower case) Font attributes Font family HELVE Font size 8,0 Point

U Underlined Font attributes Underlined Yes

--------------------------------------------------------------------------------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 Tabs 11,00 CH Left-aligned

16,00 CH Left-aligned 26,00 CH Left-aligned 46,00 CH Left-aligned 56,00 CH Left-aligned 60,00 CH Left-aligned

FO Standard attributes Line spacing 1,00 LN Alignment Left-aligned Font attributes Font family COURIER Font size 6,0 Point

P0 par. cabeçalho verso Standard attributes Line spacing 1,00 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

P1 PARÁGRAFO HEADER Standard attributes Line spacing 1,00 LN Alignment Left-aligned Font attributes Font family COURIER Font size 10,0 Point Tabs 30,00 CH Left-aligned 44,00 CH Left-aligned 50,00 CH Left-aligned 62,00 CH Left-aligned

P2 Standard attributes Line spacing 1,00 LN Alignment Left-aligned Font attributes Font family COURIER Font size 10,0 Point Tabs 20,00 CH Left-aligned 25,00 CH Left-aligned 30,00 CH Left-aligned 35,00 CH Left-aligned 40,00 CH Left-aligned 45,00 CH Left-aligned

P3 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

70

Page 71: Sap Script

ABAP Training

37,00 CH Left-aligned 42,00 CH Left-aligned 47,00 CH Left-aligned 52,00 CH Left-aligned 57,00 CH Left-aligned 62,00 CH Left-aligned

P4 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

T3 Tabulator for line items Standard attributes Line spacing 1,00 LN No blank lines Yes Alignment Left-aligned Tabs 3,00 CM Left-aligned 6,00 CM Left-aligned 11,00 CM Sign, right-aligned 12,00 CM Left-aligned 16,50 CM Right-aligned 17,00 CM Left-aligned

TI Title in info window Standard attributes Line spacing 1,00 LN Alignment Left-aligned Font attributes Font family HELVE Font size 14,0 Point Bold Yes

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 cabeçalho Window type CONST

INFO3 Endereço Window type VAR

MAIN Janela Principal Window type MAIN

--------------------------------------------------------------------------------Pages Attributes--------------------------------------------------------------------------------

FIRST Payment reminder: 1st page Standard attributes Next page VERSO Page counter Mode INC Numbering type Arabic numerals Page window MAIN Left margin 4,00 CH Upper margin 10,00 LN Window width 70,00 CH Window height 55,00 LN

71

Page 72: Sap Script

ABAP Training

FOOTER Left margin 4,00 CH Upper margin 65,00 LN Window width 70,00 CH Window height 4,00 LN HEADER Left margin 4,00 CH Upper margin 2,00 LN Window width 70,00 CH Window height 8,00 LN

VERSO 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

--------------------------------------------------------------------------------Text elements for following windows:--------------------------------------------------------------------------------

FOOTER

P6 ,,NQF=NOTA DA QUALIDADE DE FORNECIMENTO,,NAS=NOTA DA AVALIAÇÃO DE SISTEMAP6 ,,NFL=NOTA DE FORNECIMENTO DE LOTES,,NCQ=NOTA COMPROM. COM QUALIDADE (ITENS)P6 ,,NPR=NOTA DE PROCESSO(PPM DE LINHA),,NPT=NOTA DE PONTUALIDADE

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 TWP1 ,,RELATÓRIO DE AVALIAÇÃO DO FORNECEDORP1 ,,DATA DE REFERÊNCIA : &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 MÊS,,:&ZSAPSCRIP2-PPM_M&P1 ,,ATIVO NO MÊS,,: &ZSAPSCRIP2-ATIVO&,,PPM ACUMULADO,,:&ZSAPSCRIP2-PPM_AC&

INFO3

/* Criado por Antonio Celso Hunnicutt Cortada - 16/02/2001/* Relatório de Avaliação de Forncedore - Português /* Request :MD0K914497/* ************************************************************************

/: BOX XPOS '0.5' CM YPOS '0.3' LN WIDTH '16.5' CM HEIGHT '1.2' LN FRAME 10 TW/: 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 TWP0 ,,,,,,,,DATA,,ASSINATURA E Nº ENTREGADORP0 ,, MUDOU-SE,, NÃO 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 TWP0 ,, ENDEREÇO 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 TWP0 ,, NÃO EXISTE,, FALECIDO,,,,REINTEGRADO AO SERVIÇO 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 TWP0 ,, DESCONHECIDO,, INFORMAÇÃO ESCRITAP0 ,, RECUSADO,,P/ PORTEIRO/SÍNDICO/: BOX XPOS '0.7' CM YPOS '6.5' LN WIDTH 01 CH HEIGHT 3 MM FRAME 10 TWASASASASAS/: INCLUDE TESTE3 OBJECT TEXT ID STASAS/: 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

72

Page 73: Sap Script

ABAP Training

/: BOX XPOS 60 CH YPOS 50 LN WIDTH 8 CH HEIGHT 6 LN INTENSITY 35/: BOX XPOS 1 CH YPOS 56 LN WIDTH 67 CH HEIGHT 02 LN INTENSITY 35///////////AS <K>,, &ZSAPSCRIP2-DEST_NAME&AS <K>,, &ZSAPSCRIP2-DEST_RUA& &ZSAPSCRIP2-DEST_CAIXA&AS <K>,, CEP: &ZSAPSCRIP2-DEST_CEP& &ZSAPSCRIP2-DEST_CITY&AS <K>,, ESTADO : &ZSAPSCRIP2-DEST_REG&,, &ZSAPSCRIP2-DEST_PAIS&AS <K>,, A/C DEPTO. VENDAS//////////////////ASASAS <K>,, &ZSAPSCRIP2-REM_NAME&AS <K>,, &ZSAPSCRIP2-REM_RUA& &ZSAPSCRIP2-REM_CAIXA&AS <K>,, CEP: &ZSAPSCRIP2-REM_CEP& &ZSAPSCRIP2-REM_CITY&AS <K>,, ESTADO : &ZSAPSCRIP2-REM_REG&,, &ZSAPSCRIP2-REM_PAIS&AS <K>,, ÁREA DE SUPRIMENTOS

MAIN

/* Criado por Antonio Celso Hunnicutt Cortada - 16/02/2001/* Relatório de Avaliação de Forncedore - Português/* Request :MD0K914497/* Alteração Funcional - Inclusão NPT por Unidade - MD0K915742/* Correção - MD0K915748/* Alteração Funcional - Modificação NPT - MD0K915806/* Ajuste do layout - MD0K915848/* ************************************************************************

Element RESUMO_TODAS_UNIDADES/: 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 TWP2 ,, ***RESUMO DE TODAS AS UNIDADES***P2 ,,NOTA,,MÊS,,ACU,,NOTA,,MÊS,,ACUP2 ,,NQF,,<LP>&ZSAPSCRIP2-NQF_M_T&,,&ZSAPSCRIP2-NQF_AC_T&</>,,NFL ,,<LP>&ZSAPSCRIP2-NFL_M_T&,,&ZSAPSCRIP2-NFL_AC_T&</>P2 ,,,,,,,,NPR,,<LP>&ZSAPSCRIP2-NPR_M_T&,,&ZSAPSCRIP2-NPR_AC_T&</>P2 ,,,,,,,,NCQ,,<LP>&ZSAPSCRIP2-NCQ_M_T&,,&ZSAPSCRIP2-NCQ_AC_T&</>P2 ,,NAS,, <LP>&ZSAPSCRIP2-NAS_M_T&</>,,-,,-,,-,,-P2 ,,NPT,, <LP>&ZSAPSCRIP2-NPT_M_T&</>,, <LP>&ZSAPSCRIP2-NPT_AC_T&</>

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 TWP2P2 ,, ***RESUMO POR UNIDADE***P3 ,,,, N.Q.F.,,,,,,,,,, NPTP3 ,,UNIDADE,,MÊS,,ACU,,NOTA,,MÊS,,ACU,,MÊS/ACU/: ENDPROTECT

73

Page 74: Sap Script

ABAP Training

Element DETALHE_RESUMO_POR_UNIDADE/: PROTECT/: POSITION YORIGIN &ZSAPSCRIP2-CONT& MM/: BOX XPOS '1.5' CH YPOS '0.3' LN WIDTH '35' CH HEIGHT '3' LN FRAME 10 TW/: BOX XPOS '36.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '3' LN FRAME 10 TW/: BOX XPOS '41.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '3' LN FRAME 10 TW/: BOX XPOS '46.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '46.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '46.5' CH YPOS '2.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '51.5' CH YPOS '0.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '51.5' CH YPOS '1.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '51.5' CH YPOS '2.3' LN WIDTH '5' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '56.5' CH YPOS '0.3' LN WIDTH 5 CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '56.5' CH YPOS '1.3' LN WIDTH 5 CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '56.5' CH YPOS '2.3' LN WIDTH 5 CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '61.5' CH YPOS '0.3' LN WIDTH '7' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '61.5' CH YPOS '1.3' LN WIDTH '7' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '61.5' CH YPOS '2.3' LN WIDTH '7' CH HEIGHT '1' LN FRAME 10 TWP3 ,,<LP>&ZSAPSCRIP2-NAMEC&,,&ZSAPSCRIP2-NQF_M& ,,&ZSAPSCRIP2-NQF_AC&</>,,NFL,,<LP>&ZSAPSCRIP2-NFL_M& ,,&ZSAPSCRIP2-NFL_AC&,,&ZSAPSCRIP2-NPT_M&/&ZSAPSCRIP2-NPT_AC&</>P3 ,,,,,,,,NPR,,<LP>&ZSAPSCRIP2-NPR_M&,,&ZSAPSCRIP2-NPR_AC&</>P3 ,,,,,,,,NCQ,,<LP>&ZSAPSCRIP2-NCQ_M&,,&ZSAPSCRIP2-NCQ_AC&</>/: ENDPROTECT

Element RESUMO_INDICES_PPM/: PROTECT/: IF &ZSAPSCRIP2-CONT& > 270/: POSITION YORIGIN '29.6' MM/: ENDIF/: BOX XPOS '32.5' CH YPOS '5.3' LN WIDTH '18' CH HEIGHT '2' LN FRAME 10 TW/: BOX XPOS '50.5' CH YPOS '5.3' LN WIDTH '18' CH HEIGHT '2' LN FRAME 10 TW/: BOX XPOS '1.5' CH YPOS '6.3' LN WIDTH '67' CH HEIGHT 1 LN FRAME 10 TW/: BOX XPOS '38.5' CH YPOS '6.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '56.5' CH YPOS '6.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TWP4P4 ,, *** RESUMO DOS ÍNDICES DE PPM DE LINHA E % REJEIÇÃO DE LOTE NO RECEBIMENTO ***P4 ,,,, PPM DE LINHA,,,,,, % REJEIÇÃO LOTE

P4 ,,UNIDADE,,MÊS,,ACU,,OBJ,,MÊS,,ACU,,OBJ/: ENDPROTECT

Element DETALHE_RESUMO_INDICES_PPM/: POSITION YORIGIN &ZSAPSCRIP2-CONT& MM/: PROTECT/: BOX XPOS '1.5' CH YPOS '0.3' LN WIDTH '31' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '32.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '38.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '44.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '50.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '56.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TW/: BOX XPOS '62.5' CH YPOS '0.3' LN WIDTH '6' CH HEIGHT '1' LN FRAME 10 TWP5 ,,&ZSAPSCRIP2-NAMEC&,,&ZSAPSCRIP2-PPM_M_I&,,&ZSAPSCRIP2-PPM_AC_I& ,,&ZSAPSCRIP2-PPM_OBJ_R&,,&ZSAPSCRIP2-LOT_M& ,,&ZSAPSCRIP2-LOT_AC&,,&ZSAPSCRIP2-LOT_OBJ_R&/: ENDPROTECT

74

Page 75: Sap Script

ABAP Training

EXERCÍCIOSSAPSCRIPT

75

Page 76: Sap Script

ABAP Training

Exercício 1:

Desenvolver um programa Z_EXC_SAP_1_AL## que permita que o usuário visualize ou imprima um formulário com os códigos dos Materiais, a descrição, o tipo e o centro.Permitir a ordenação dos dados por centro, tipo e material

Tabelas: MARAMARCMAKT

Fazer a quebra do relatório por centro (Pode-se usar os seguintes comandos para fazer isso: ON CHANGE, AT END ou AT NEW. Atenção às peculiaridades de cada comando).

O relatório deve apresentar o layout abaixo:

Dica: para fazer os quadros ao redor dos itens, não utilizar o comando BOX, usar a alternativa apresentada anteriormente na apostila. Nos demais locais, utilizar esse comando.

76

Page 77: Sap Script

ABAP Training

Código do Material Descrição Tipo000000 xxxxxxxxxxxxxxxxxxxxxxxxx XXXX000000 xxxxxxxxxxxxxxxxxxxxxxxxx XXXX000000 xxxxxxxxxxxxxxxxxxxxxxxxx XXXX000000 xxxxxxxxxxxxxxxxxxxxxxxxx XXXX

77

MATERIAISCentro: xxxxxxxx data: dd/mm/aaaa

Total de Materiais no Centro: 00

Page 78: Sap Script

ABAP Training

Resolução 1:

1) Report:

************************************************************************* ** ******************************************** ** * Confidencial e Proprietário * ** * Copyright 2001, Accenture * ** * Todos os direitos reservados * ** ******************************************** ** ** Nome do Shell: Z_TEMPLATE_REPORT Versão do Shell: v1.03 ** ************************************************************************** Nome do Programa : Z_EXC_SAPSCRIPT ** Título do Programa : Programa de impressão dos materiais por centro ** Programador : Aluno do curso de ABAP ** Data : 29/03/2001 ** Última atualização : 29/03/2001 ** ** Descrição : Este é um programa para a visualização de materiais ** ou impressão dos dados, de acordo com o parâmetro ** selecionado pelo usuário ** Include : ** ** Calls : ** ** Módulos de Funções: ** **----------------------------------------------------------------------** Lista de Modificações: ** Data Autor Corr. # Descrição ** 29/03/2001 ABAPDEV1 AF1K900023 Desenvolvimento inicial do prg ** *************************************************************************REPORT Z_EXC_REPORT_1_AL06_D NO STANDARD PAGE HEADING "Não mostra o cabeçalho padrão SAP LINE-SIZE 170 "Largura do report de 170 caracteres LINE-COUNT 58 "Comprimento do report de 58 caracteres MESSAGE-ID ZABAP. "Classe de mensagens é ZABAP*RESERVE 8 LINES. "Pelo menos n linhas serão impressas na última*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"* " SESSÃO DE DECLARAÇÃO DE DADOS "*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"************************************************************************* Includes **************************************************************************INCLUDE:* ZZIHEADR. "Cabeçalho padrão de report

************************************************************************* Tabelas *************************************************************************TABLES: mara, marc, makt.

************************************************************************* Dados: ** Constantes (C_...) *

78

Page 79: Sap Script

ABAP Training

* Variaveis (V_...) ** Tabelas Internas (I_...) **************************************************************************- Constantes ---------------------------------------------------------**DATA:* C_..

*- Variáveis ---------------------------------------------------------*DATA: V_CONT TYPE I VALUE 0. " contador

*- Tabela Interna -----------------------------------------------------*

* tabela interna para armazenar o código e o tipo do materialDATA: 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 centroDATA: BEGIN OF I_marc OCCURS 200, matnr like marc-matnr , werks like marc-werks ,END OF I_marc.

* tabela interna para armazenar a descrição dos materiaisDATA: BEGIN OF I_makt OCCURS 100, matnr like makt-matnr , maktx like makt-maktx ,END OF I_makt.

* tabela final contendo todos os dadosDATA: 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.

************************************************************************* Parâmetros de entrada : ** Select Options (S_...) ** Parameters (P_...) *************************************************************************SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1.

select-options: s_matnr for mara-matnr, " cód 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 código p_desc radiobutton group g1, " ordenado por descrição 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

Page 80: Sap Script

ABAP Training

parameters: p_SCREEN radiobutton group g3, " visualização dos dados p_SCRIPT radiobutton group g3. " impressão do formulário

SELECTION-SCREEN END OF BLOCK B3.

"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" " SESSÃO DE PROCESSAMENTO ""<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"*----------------------------------------------------------------------*INITIALIZATION. "Logica para defaults "inteligentes"

*----------------------------------------------------------------------*

T2 = 'Relatório Ordenado Por:'. T3 = 'Opções de saída'.

*----------------------------------------------------------------------**AT SELECTION-SCREEN. "Tratamento de Erros e lógica para tela de seleção*----------------------------------------------------------------------*

*----------------------------------------------------------------------*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. "Seleção da linha do relatório*----------------------------------------------------------------------*

set parameter id 'MAT' field i_final-matnr. "Seta variável que envolve "transação

call transaction 'MM03' and skip first screen. "Chama transação "consulta de materiais

*----------------------------------------------------------------------*TOP-OF-PAGE. "Cabeçalho (Aparece sempre no topo da tela.)*----------------------------------------------------------------------*

format color 2. write: 'Código', 20 'Descrição do Material', 61 'Tipo', 66 'Centro'.

*----------------------------------------------------------------------**END-OF-PAGE. "Rodapé*----------------------------------------------------------------------*

"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" " SESSÃO DE FORMS ""<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"

*&---------------------------------------------------------------------**& Form F_SELECT_DATA

80

Page 81: Sap Script

ABAP Training

*&---------------------------------------------------------------------** Seleciona dados e armazena-os na tabela interna **----------------------------------------------------------------------*FORM F_SELECT_DATA.

select matnr mtart from mara into table i_mara where matnr in s_matnr and mtart in s_mtart. if sy-subrc ne 0. message e001. endif.

select matnr werks from marc into table i_marc for all entries in i_mara where matnr = i_mara-matnr and werks in s_werks.

select matnr maktx from makt into table i_makt for all entries in i_mara where matnr = i_mara-matnr.

* 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'.

81

Page 82: Sap Script

ABAP Training

sort i_final by maktx werks. elseif p_tipo eq 'X'. sort i_final by mtart maktx werks. elseif p_centro eq 'X'. sort i_final by werks maktx. endif. else. if p_cod eq 'X'. sort i_final by werks matnr maktx. elseif p_desc eq 'X'. sort i_final by werks maktx. elseif p_tipo eq 'X'. sort i_final by werks mtart maktx. elseif p_centro eq 'X'. sort i_final by werks maktx. endif. endif.***********************************Imprime a tabela final**********************************

* se a opção do usuário for imprimir o formulário if p_script eq 'X'.

* abre o formulário CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE = 'PRINTER' FORM = 'Z_EXC_SAPSCRIT' LANGUAGE = 'P'.

* inicializa o formulário CALL FUNCTION 'START_FORM' EXPORTING FORM = 'Z_EXC_SAPSCRIT' LANGUAGE = 'P'.

* imprime o cabeçalho CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'CABEC' WINDOW = 'MAIN'.

* lê os dados da tabela final loop at i_final. V_CONT = V_CONT + 1.* a cada mudança de centro, chama o elemento de dados QUEBRA da janela* MAIN, que inicializa uma nova página e o elemento CABEC que imprime* o cabeçalho on change of i_final-werks. if sy-tabix ne 1. " se não for o 1° registro CALL FUNCTION 'WRITE_FORM' " quebra de página EXPORTING ELEMENT = 'QUEBRA' WINDOW = 'MAIN'.

CALL FUNCTION 'WRITE_FORM' " imprime o cabeçalho EXPORTING ELEMENT = 'CABEC' WINDOW = 'MAIN'.

V_CONT = 0. " inicializa o contador de materiais

82

Page 83: Sap Script

ABAP Training

endif. " se não for o 1° registro endon.* imprime os itens CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'ITEM' WINDOW = 'MAIN'.

ENDLOOP.

* finaliza o formulário CALL FUNCTION 'END_FORM'. " FECHA O START* fecha o formulário CALL FUNCTION 'CLOSE_FORM'. " FECHA O OPEN

* senão (se for visualização dos dados na tela) else. format color 1. loop at i_final. if p_centro eq 'X'. on change of i_final-werks. if sy-tabix ne 1. " se não for o primeiro registro new-page. " cria uma nova página endif. " fim do se for o primeiro registro endon. endif. write: / i_final-matnr hotspot, i_final-maktx , i_final-mtart , i_final-werks , ' '. hide: i_final-matnr. endloop. endif.

ENDFORM. " F_PRINT_REPORT

83

Page 84: Sap Script

ABAP Training

2) Sapscript:--------------------------------------------------------------------------------Formulário Z_EXC_SAPSCRIT--------------------------------------------------------------------------------

Mandante 020Idioma PTIdioma original PTRelevante p/tradução SimStatus ativo

Cl.desenvolvimento ZABAP

Autor ABAPDEV1 Modificador ABAPDEV1Data 04.04.2001 Data 04.04.2001Hora 07:52:50 Hora 16:05:03Release 46B Release 46B

Significado Relatório de Materiais

Atributos standard Página inicial PAGE1 Parágrf.default P0 Stop tabulador 1,00 CM Formato página LETTER Formato folha Form.vert. Linhas/polegada 6,00 Caracs/polegada 10,00

AtribsFamCar. Família caracs. TIMES Alt.fam.caracs. 12,0 Ponto Negrito Não Itálico Não Sublinhado Não

--------------------------------------------------------------------------------Caracteres Atributos--------------------------------------------------------------------------------

PG Caracteres Grandes Atributos standard

84

Page 85: Sap Script

ABAP Training

Marcação Não AtribsFamCar. Família caracs. TIMES Alt.fam.caracs. 18,0 Ponto

PM Caracteres Médio AtribsFamCar. Família caracs. TIMES Alt.fam.caracs. 12,0 Ponto

PP Caracteres Pequenos AtribsFamCar. Família caracs. TIMES Alt.fam.caracs. 10,0 Ponto

--------------------------------------------------------------------------------Parágrafos Atributos--------------------------------------------------------------------------------

P0 Paragrafo da Main Atributos standard Espacej.linhas 1.00 LN Alinhamento Alinh.esq. Tabuladores 5.50 CM Alinh.à esquerda 17.50 CM Alinh.à esquerda

PC Paragrafo do Cabeçalho Atributos standard Espacej.linhas 1.00 LN Margem esquerda 0.20 CM Alinhamento Alinh.esq. Tabuladores 7.50 CM Alinh.à esquerda 16.50 CM Alinh.à esquerda

UL LINHA DE SEPARAÇÃO Atributos standard Espacej.linhas 0.05 LN Margem esquerda 0.80 MM Alinhamento Alinh.esq.

--------------------------------------------------------------------------------Janela Atributos--------------------------------------------------------------------------------

85

Page 86: Sap Script

ABAP Training

CABEC Cabeçalho CategoriaJanela CONST

MAIN Janela princ CategoriaJanela MAIN

RODAPE Rodapé CategoriaJanela CONST

--------------------------------------------------------------------------------Páginas Atributos--------------------------------------------------------------------------------

PAGE1 Página nova Atributos standard Pág.seg. PAGE1 Numer.págs. Modo INC Ctg.numeração Algarismos árabes Janelas páginas 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

--------------------------------------------------------------------------------Elementos texto p/seg.janelas:--------------------------------------------------------------------------------CABEC

/: BOX YPOS '-1' MM WIDTH 192 MM HEIGHT 12 MM FRAME 10 TW INTENSITY 10PC ,,<PG>MATERIAIS</>,,<PM>&SY-DATUM&</>PC <PM>CENTRO: &I_FINAL-werks&</>MAIN

/* Janela princ

Elemento CABEC

86

Page 87: Sap Script

ABAP Training

UL &ULINE(90)&P0 <PM>| Código do Material,,| Descrição ,,| Tipo,,|</>UL &ULINE(90)&

Elemento ITEMP0 <PM>|</> <PP>&I_FINAL-MATNR&</>,,<PM>|</> <PP>&I_FINAL-MAKTX&</>= ,,<PM>|</> <PP>&I_FINAL-MTART&</>,,<PM>|</>UL &ULINE(90)&

Elemento QUEBRA/: NEW-PAGE

RODAPE

/: BOX WIDTH 192 MM HEIGHT 06 MM FRAME 10 TWPC <PM>TOTAL DE MATERIAIS NO CENTRO: &V_CONT&

87