Вы находитесь на странице: 1из 86

SAPSCRIPT

O que é SAPScript

O SAPScript é a ferramenta do SAP para criação de formulários mais elaborados. A opção pela utilização
desta ferramenta se dá pela necessidade de alguns recursos gráficos que não podem ser obtidos através
de código de ABAP comum. Com o SAPScript é possível criar um formulário com logotipo, letras
formatadas de vários tamanhos, criação de grades, código de barras, etc.

Apesar de ser uma ferramenta poderosa na geração de formulários, o SAPScript ainda apresenta uma
série de limitações, o seu verificador de erros e debug não possuem as mesmas características do editor
ABAP. Caso, seja digitado um comando com grafia errada ou sem sentido lógico dentro de um formulário,
não será detectado pelo mesmo e poderá não ser executado, passando as vezes despercebido pelo
programador.

Para que o SAPScript funcione é necessário que um trabalho em conjunto com um programa ABAP que
deverá conter algumas funções de chamada e controle do Script.

O esquema abaixo ilustra o processo de preenchimento de dados do SAPScript.

Page 2 of 86
Estrutura de Chamada e Controle do SAPScript

CALL FUNCTION “OPEN_FORM”

CALL FUNCTION “START_FORM”

CALL FUNCTION “WRITE_FORM”

CALL FUNCTION “END_FORM”

CALL FUNCTION “CLOSE_FORM”

Esta seqüência de funções deverá ser inserida no programa ABAP, o qual iniciará o SAPScript.

Page 3 of 86
Descrição das Funções

OPEN FORM - Serve para abrir um formulário de impressão.

Dois parâmetros muito utilizados são o dialog e o options. No primeiro, indica 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 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)

call function 'OPEN_FORM'


exporting
* APPLICATION = 'TX'
* ARCHIVE_INDEX =''
* ARCHIVE_PARAMS =''
DEVICE = 'PRINTER' ou 'SCREEN'
* DIALOG = 'X' ou '' (Tela de características de impressão)
FORM = 'Z_SCRIPT' (Nome do Formulário)
LANGUAGE = 'P' (Idioma do Formulário)
* OPTIONS = ITCPO (Estrutura com todas as características)
* importing
* language =
* new_archive_params =
* result =
exceptions
canceled =1
device =2
form =3
options =4
unclosed =5
others = 6.

START FORM - Serve para iniciar um formulário de impressão.

Porque deve ser iniciado se a abertura de um formulário automaticamente gera a inicialização do mesmo?

Se estivermos 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.

Page 4 of 86
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.

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. Caso isso não seja feito um erro de sintaxe irá aparecer.

WRITE FORM - Serve para a impressão de saída de um elemento de texto de uma janela do formulário.

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.

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.

Page 5 of 86
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 SAPScript.


 Window – 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:
1234
5678

Já as janelas que não forem do tipo MAIN imprimem os dados uma única vez, no final da impressão do
formulário ou na quebra de página, com os valores armazenados nos campos no momento do
encerramento ou no momento da quebra, e não no momento da escrita (write_form), ou seja, se no
exemplo anterior fosse utilizada uma janela não-main, o resultado final seria somente 5678.

Na realidade, a utilização de um comando WRITE_FORM numa janela não-main é utilizada para a


escolha de qual elemento de texto será utilizado para a impressão dos dados.

Exemplo:

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

/E FRASE1

Page 6 of 86
&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.

END FORM - Serve para finalizar um formulário.

call function 'END_FORM'


importing
RESULT =''
exceptions
unopened =1
others = 2.

Page 7 of 86
CLOSE FORM - Serve para fechar um formulário.

call function 'CLOSE_FORM'


importing
RESULT =''
Tables
* OTFDATA =
exceptions
unopened =1
others = 2.

Page 8 of 86
O Formulário

Trabalhar com um formulário SAPScript não é complicado, desde que se entenda seus componentes da
maneira correta. Um formulário começado de maneira errada pode ser um grande problema, pois para ser
corrigido pode ser necessário o mesmo ou mais tempo que a criação de um novo.

Para isto, é aconselhável que se saiba qual o tipo de impressora utilizada, se a impressora for do tipo
matricial é aconselhável que as medidas utilizadas na construção do formulário seja LN(Linha) e CH
(Caracteres); se a impressora for laser, jato de tinta, térmica ou qualquer tipo de impressora gráfica deve-
se utilizar CM (Centímetro), MM(Milímetro).

É importante salientar que se estiver sendo utilizado uma impressora matricial, a ordem de impressão é
muito importante para a correta edição do formulário, pois os comandos de posição funcionam, mas deve-
se lembrar que a cabeça de impressão não volta, ou seja, a leitura do formulário é feita linha à linha, já as
impressoras gráficas, isso não ocorre, pois a leitura é feita página à página.

O SAP possui vários formulários standards incluídos, estes formulários estão localizados no mandante
000 e através deles é possível fazer uma cópia e alterá-los. Os formulários standards funcionam como
programas standards, e os formulários a ser criados devem iniciar pelas letras Z ou Y.

Page 9 of 86
Copiando um Formulário

Para acessar o editor do SAPScript utilize o caminho Ferramentas > Processamento texto > Formulário ou
digitar a Transação SE71:

SE71

Page 10 of 86
Colocar o nome do formulário e o idioma que desejar. Se o formulário for standard deve-se utilizar o
idioma, o qual foi criado. Primeiramente, devemos fazer uma cópia do mandante 000 para o que se está
trabalhando. Dependendo da versão do SAP, o idioma possuirá um dos caracteres abaixo:

Inglês : E ou EN
Alemão : D ou DE
Português : P ou PT

Seqüência de cópia:

Passo 1 Passo 2

Mandante 000 Mandante de Mandante de


Idioma: DE / EN desenvolvimento desenvolvimento
Idioma DE/ EN Idioma PT

Page 11 of 86
PASSO 1
1 – Criar um formulário ZWA_LIXO

2 - Digitar o Nome do Formulário original (CO_ORDER).


3 - Digitar o Mandante de origem (000).
4 - Digitar o Formulário de destino (temporário ZWA_LIXO).
5 - Clicar no botão <Executar> F8.

Page 12 of 86
PASSO 2

6 - Criar outro formulário ZWA_TST1_01 com o idioma P ou PT.


7 - Clicar em Formulário - Aceitar.

8 - Digitar o nome do formulário temporário.


9 - Digitar o Idiomas do formulário temporário.
10 - Salvar.

11 – Após a realização dos passos anteriores, o formulário ZWA_LIXO pode ser deletado, pois é apenas
um meio de mudança de idioma.

Page 13 of 86
12 - Selecionar o caminho: Formulário  Eliminar.

Obs. : Na criação de um formulário novo (inédito), será feito apenas na criação no idioma PT.

Page 14 of 86
Partes de um formulário

JANELA DE PÁGINAS

PÁGINAS

JANELAS E ELEMENTOS DE TEXTO

<H> </>
CARACTERES DE COMANDO

P PARÁGRAFOS

Page 15 of 86
1. Header - informações gerais do formulário, como formato e orientação da página que será utilizado,
parágrafo e fontes default do mesmo (quando não for especificado nenhum 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.

Page 16 of 86
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,
sublinhado, entre outros.

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

Page 17 of 86
Page 18 of 86
3. Caracter de Seleção - são informações semelhantes às do parágrafo, referente a formatação de
textos, no entanto, podem ser aplicados a trechos de textos e não necessariamente a linhas inteiras do
formulário.

On – Ativa item
Off – Desativa Item
Manter – Utiliza a
formatação do parágrafo

Este atributo define o formato de caracter,


uma chave de pesquisa é associada ao Protegido –Não permite a quebra de linha,
Caracter String quando o usuário utiliza este mas apresenta todo o bloco de texto na
formato de caracter. próxima linha.
Exemplos: hipertextos, links de elementos de Oculto – Não é apresentado, somente visível
dados e glossários. no editor de texto
Superescrito / Subscrito – é apresentado
meia linha acima ou abaixo

Page 19 of 86
Sua sintaxe de utilização assemelha-se 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

Page 20 of 86
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 especialmente 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 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

Page 21 of 86
A lógica de seqüê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.

Na atual versão do SAP, essa distinção de atenção de processamento do formulário é só teórica,


mas deve ser levada em conta, pois deve ser tratada por versões mais novas do sistema.

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.

Page 22 of 86
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 seqüência em que as
páginas do relatório devem ser geradas. Seguindo o exemplo anterior, deveríamos informar:
FIRST -> NEXT
NEXT -> NEXT

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).

Page 23 of 86
6. Page Windows

As page windows podem ser entendidas pelo nosso conceito de layout propriamente dito.
São os elementos responsáveis pelo 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.

Page 24 of 86
7. Text Elements

Corresponde à lógica 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, alguns dos comandos que podem ser utilizados de
dentro dos elementos de texto de uma janela em SAPscript:

Page 25 of 86
IF..ELSE..ENDIF
CASE..WHEN
DEFINE declaração de variáveis dentro da janela, com atribuição
de valor
PERFORM..USING..CHANGING (ver documentação própria nesse material)
BOX..FRAME

INCLUDE

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

Page 26 of 86
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 formulário original. Ao mesmo tempo que uma alteração desse
original, implica na imediata alteração de todos os seus “filhos”.

Page 27 of 86
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.

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.

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

Nome do formulário a ser copiado


Cliente em que se encontra o original
Nome da cópia no client corrente

Page 29 of 86
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.

Page 30 of 86
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 atentem às exigências 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ão, e outros são utilizados na grande maioria das
alterações.
1) Fazer uma cópia do programa standard e dos includes (se existirem) que necessitam de
alteração
2) Fazer uma cópia do layoutset standard
3) NÃO DELETAR janelas, elementos de textos, etc. na cópia do layoutset. Mesmo que alguns
(ou todos) os dados e janelas do standard não sejam utilizados, o programa de povoamento
continuará tentando executar escritas em janelas e elementos de dados específicos, já que é
uma cópia do standard. Os novos dados e janelas devem ser apenas adicionados!
4) Encontrar as posições ideais para alterações no programa de povoamento. Quando os novos
dados devem ser impressos na MAIN, procurar por comandos WRITE_FORM dentro do
programa e colocar as alterações o mais próximo possível do WRITE_FORM correto. Se devem
ser impressos em outras janelas, procurar pelo comando CLOSE_FORM/END_FORM e
colocar as alterações imediatamente antes destes comandos (sempre que possível)
5) Colocar todas as alterações juntas sempre que possível, identificando visivelmente, através de
comentários, o bloco de alterações. Isso facilita a manutenção e visualização do código, além
de facilitar a busca por possíveis erros, visto que, na sua grande maioria, os programas
standard da SAP são bastante complicados.

*----------------------------------------------------------------------*
* write texts to TEXTS window *
*----------------------------------------------------------------------*

***************************** ALTERAÇÃO ********************************


*----------------------------------------------------------------------*
* Elimina mensagem ONU.... caso ela exista
*----------------------------------------------------------------------*
read table wk_header_msg with key message(3) = 'ONU'.
v_msg_onu = wk_header_msg-seqnum.
delete wk_header_msg
where message(3) = 'ONU'.
delete wk_refer_msg
where seqnum = v_msg_onu.

*Mensagem p/ materiais não perigosos


ybrvscript-mensg01 = text-001.
************************************************************************

istart = j_1bb2-totlih.
if istart > 10. "maximum number of fields in J_1BPRNFTX

Page 31 of 86
Exemplos

 Sapscript

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

Mandante 650
Idioma P
Original lang. P Idioma Original de Criação
Relevant for transl. Yes
Status Active

Development class YBR0 General Multi-purpose Development class

Created by SAO0105A Changed by SAO0105A


Date 29.07.1998 Date 01.09.1998
Time 09:02:34 Time 19:52:15
Release 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

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

Page 32 of 86
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
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

Page 33 of 86
TOTAL Totais da Nota
Window type CONST

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

FIRST Primeira Página


Page counter
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 String
H2 ,,<H2>NOTA DE CRÉDITO</>,,&ybrvs_nota-data&,,Nº &ybrvs_nota-numero&
/: ENDIF
H1 ,,,,CLARIANT S/A Salta p/ próx. tabulação
H1 <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)&
<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)&

Page 34 of 86
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 TW
MA &ybrvs_nota-produto(15)&
&ybrvs_nota-unidade(3)&&ybrvs_nota-quant(15)&&ybrvs_nota-nome(31)&
&ybrvs_nota-preco_un(14)&&ybrvs_nota-val_merc(14)&
&ybrvs_nota-val_desc(12)&&ybrvs_nota-porc_ipi(5)&
&ybrvs_nota-val_ipi(15)&

/E HEADER
* <H1> Código Produto EMB UN. Quantidade Nome do
Produto RN Preço Unitário Valor Mercadoria Valor
Desconto %IPI Valor IPI</>
* &uline(132)&
Parágrafo standard

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

Page 35 of 86
/: 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 ____________________________
___________________________
MA Assinatura Assinatura

Page 36 of 86
Digitar o código do Programa (ZWA10T09)
Clicar no botão Criar
Complementar as informações necessárias, Gravar e Voltar
Clicar no botão Modificar

Page 37 of 86
***************************************
*** SAPSCRIPT ***
***************************************
REPORT ZWA10T09.

*** DEFINIÇÃO DE TABELAS


TABLES: T001.

*** DEFINIÇÃO DE campos


DATA: WBUKRS LIKE T001-BUKRS,
WBUTXT LIKE T001-BUTXT,
WADRNR LIKE T001-ADRNR,
WORT01 LIKE T001-ORT01,
WLAND1 LIKE T001-LAND1,
WCGC LIKE J_1BWFIELD-CGC_NUMBER.

*** DEFINIÇÃO DE PARAMETROS


SELECTION-SCREEN BEGIN OF BLOCK PARAM WITH FRAME TITLE TEXT-001.
PARAMETERS: P_EMPR LIKE T001-BUKRS.
SELECTION-SCREEN END OF BLOCK PARAM.

*** INICIO DO PROGRAMA


SELECT BUKRS BUTXT ADRNR ORT01 LAND1
INTO (WBUKRS,WBUTXT,WADRNR,WORT01,WLAND1)
FROM T001
WHERE BUKRS = P_EMPR.
ENDSELECT.

*** OBTEM E FORMATA O CGC


CALL FUNCTION 'J_1BREAD_CGC_COMPANY'
EXPORTING
BUKRS = WBUKRS
IMPORTING
CGC_NUMBER = WCGC
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 041.
ENDIF.

Page 38 of 86
*** MONTA O FORMULARIO
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'PRINTER'
DIALOG = 'X'
EXCEPTIONS
CANCELED = 1
DEVICE = 2
FORM = 3
OPTIONS = 4
UNCLOSED = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 033.
ENDIF.

CALL FUNCTION 'START_FORM'


EXPORTING
FORM = 'ZWA01T09'
EXCEPTIONS
FORM = 1
FORMAT = 2
UNENDED = 3
UNOPENED = 4
UNUSED = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 034.
ENDIF.

CALL FUNCTION 'WRITE_FORM'


EXPORTING
WINDOW = 'CABEC'
ELEMENT = 'TEXTCB'
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 038.
ENDIF.

Page 39 of 86
CALL FUNCTION 'SET_TEXTSYMBOL'
EXPORTING
NAME = '&cgc_number&'
VALUE = WCGC
REPLACE = 'X'
EXCEPTIONS
OTHERS = 1.

CALL FUNCTION 'WRITE_FORM'


EXPORTING
WINDOW = 'MAIN'
ELEMENT = 'TEXTMA'
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 039.
ENDIF.

CALL FUNCTION 'WRITE_FORM'


EXPORTING
WINDOW = 'RODAPE'
ELEMENT = 'TEXTRO'
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 040.
ENDIF.

Page 40 of 86
CALL FUNCTION 'END_FORM'
EXCEPTIONS
UNOPENED = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 036.
ENDIF.

CALL FUNCTION 'CLOSE_FORM'


EXCEPTIONS
UNOPENED = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 037.
ENDIF.

Executar F8
Informar a Empresa e F8

Page 41 of 86
Page 42 of 86
Page 43 of 86
Na tela abaixo, proceder da seguinte forma:

1- Digitar o nome do Formulário (ZWA10T09)


2- Digitar o Idioma (PT)
3- Clicar no botão Criar
4- Clicar no botão Avançar Enter (na janela Informação)

Page 44 of 86
Na tela abaixo, proceder da seguinte forma:

1 - Digitar o Significado (exemplo: Treinamento)


2 - Clicar em Layout F6

Page 45 of 86
Na tela abaixo, proceder da seguinte forma:

1 - Manter as informações referentes a Página


2 - Criar as Janelas de acordo com o layout do exercício

Page 46 of 86
Na tela abaixo, proceder da seguinte forma:

1 – Clicar no botão Criar

Page 47 of 86
Na tela abaixo, proceder da seguinte forma:

Após aparecer a nova janela (WINDOW1)


clicar no botão Dar novo nome

Page 48 of 86
Na tela abaixo, proceder da seguinte forma:

Após aparecer a janela Renomear janela

1 – Digitar o novo nome


2 – Clicar no botão Avançar ENTER

Page 49 of 86
Na tela abaixo, proceder da seguinte forma:

1 – Dimensionar e posicionar a janela CABEC


2 – Dimensionar e posicionar a janela MAIN
3 – Inserir nova janela RODAPE
4 – Dimensionar e posicionar a janela RODAPE
5 – Clicar no botão Gravar Ctrl+S
6 – Informar a Classe de Desenvolvimento
7 – Clicar no botão Ativar Ctrl+F3

OBS: Para checar se existem erros de ortografia Clicar em DEFINIÇÃO

Page 50 of 86
Na tela abaixo, proceder da seguinte forma:

Clicar em Formatos de parágrafo F7

Page 51 of 86
Na tela abaixo, proceder da seguinte forma:

1 – Criar os 3 parágrafos necessários


2 – Clicar no botão Gravar Ctrl+S
3 – Clicar no botão Ativar Ctrl+F3
4 – Clicar no botão Layout F6

Page 52 of 86
Selecionar o caminho:
Processar > Elementos de texto Shift+F4

Page 53 of 86
Nas 3 telas a seguir, devem ser preparados os elementos de texto:

Page 54 of 86
Com isto, está encerrada a preparação do Formulário.

Voltar ao Menu Principal.

Page 55 of 86
Clicar no botão Editor ABAP F7

Page 56 of 86
Digitar o codigo do Programa (ZWA10T09)
Clicar no botão Criar
Complementar as informações necessariás, Gravar e Voltar
Clicar no botão Modificar

Page 57 of 86
***************************************
*** SAPSCRIPT ***
***************************************
REPORT ZWA10T09.

*** DEFINIÇÃO DE TABELAS


TABLES: T001.

*** DEFINIÇÃO DE campos


DATA: WBUKRS LIKE T001-BUKRS,
WBUTXT LIKE T001-BUTXT,
WADRNR LIKE T001-ADRNR,
WORT01 LIKE T001-ORT01,
WLAND1 LIKE T001-LAND1,
WCGC LIKE J_1BWFIELD-CGC_NUMBER.

*** DEFINIÇÃO DE PARAMETROS


SELECTION-SCREEN BEGIN OF BLOCK PARAM WITH FRAME TITLE TEXT-001.
PARAMETERS: P_EMPR LIKE T001-BUKRS.
SELECTION-SCREEN END OF BLOCK PARAM.

*** INICIO DO PROGRAMA


SELECT BUKRS BUTXT ADRNR ORT01 LAND1
INTO (WBUKRS,WBUTXT,WADRNR,WORT01,WLAND1)
FROM T001
WHERE BUKRS = P_EMPR.
ENDSELECT.

*** OBTEM E FORMATA O CGC


CALL FUNCTION 'J_1BREAD_CGC_COMPANY'
EXPORTING
BUKRS = WBUKRS
IMPORTING
CGC_NUMBER = WCGC
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 041.
ENDIF.

Page 58 of 86
*** MONTA O FORMULARIO
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'PRINTER'
DIALOG = 'X'
EXCEPTIONS
CANCELED = 1
DEVICE = 2
FORM = 3
OPTIONS = 4
UNCLOSED = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 033.
ENDIF.

CALL FUNCTION 'START_FORM'


EXPORTING
FORM = 'ZWA10T09'
EXCEPTIONS
FORM = 1
FORMAT = 2
UNENDED = 3
UNOPENED = 4
UNUSED = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 034.
ENDIF.

CALL FUNCTION 'WRITE_FORM'


EXPORTING
WINDOW = 'CABEC'
ELEMENT = 'TEXTCB'
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 038.
ENDIF.

Page 59 of 86
CALL FUNCTION 'SET_TEXTSYMBOL'
EXPORTING
NAME = '&cgc_number&'
VALUE = WCGC
REPLACE = 'X'
EXCEPTIONS
OTHERS = 1.

CALL FUNCTION 'WRITE_FORM'


EXPORTING
WINDOW = 'MAIN'
ELEMENT = 'TEXTMA'
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 039.
ENDIF.

CALL FUNCTION 'WRITE_FORM'


EXPORTING
WINDOW = 'RODAPE'
ELEMENT = 'TEXTRO'
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 040.
ENDIF.

Page 60 of 86
CALL FUNCTION 'END_FORM'
EXCEPTIONS
UNOPENED = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 036.
ENDIF.

CALL FUNCTION 'CLOSE_FORM'


EXCEPTIONS
UNOPENED = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID 'ZWA' TYPE 'E' NUMBER 037.
ENDIF.

Executar F8
Informar a Empresa e F8

Page 61 of 86
Page 62 of 86
Page 63 of 86
1. Especificação de programa de treinamento: ZWAnnT10

Tabelas envolvidas: MARA - Mestre dos Materiais (Dados Gerais)


MARD - Mestre dos Materiais (Deposito)
MAKT - Textos breves de Materiais

1.1.1. Parâmetros: Código do material

Criar o Formulário ZWAnnT10, conforme lay out anexo, copiando o formulário “RT_CHECK_LIST”

Serão usadas as impressoras Laser ou DeskJet com folha solta branca.

Procedimentos:

Pedir o parâmetro: Código do Material.

Ler na tabela MARA o código digitado no parâmetro, (MATNR),

Ler na tabela MARD


Centro de Custos (WERKS),
Deposito (LGORT),
Estoque (LABST),
Valor (VKLAB).

Ler na tabela MAKT


Descr.do Material (MAKTX)

Formatar o formulário referido com:

1- cabeçalho: “RELATORIO DE MATERIAL”

2- Codigo e Nome do Material,

Estoque Total: com a somatoria das quantidades (LABST)

Valor Total: com a somatoria dos valores (VKLAB)

3- main Imprimir cada um dos registros lidos na tabela MARD com:

Centro (WERKS)
Deposito (LGORT)
Estoque (LABST)
Valor (VKLAB)

Obs.: Imprimir as molduras definidas no Formulário.

Page 64 of 86
1
Cabecalho do Formulario

2
Material: xxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Estoque Total: xxxxxxxxxxxx

Valor Total: xxxxxxxxxxxx

Centro Deposito Estoque Valor


Disponivel

xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx


xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx
xxxxxxxx xxxxxxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx

Page 65 of 86
2. Especificação de programa de treinamento: ZWAnnT11

Tabelas envolvidas: MARA - Mestre dos Materiais (Dados Gerais)


MARD - Mestre dos Materiais (Deposito)
MAKT - Textos breves de Materiais
T001 - Empresas

Criar os Formulários ZWAnnT11_1 e ZWAnnT11_2 , conforme os layout’s anexo.

Obs: Serão utilizadas impressoras Laser ou DeskJet usando folhas soltas em branco.

Procedimentos:

Pedir no Parâmetro: Código de Empresa

Ler a tabela T001 com o campo do Parâmetro e salvar Nome da Empresa e Endereço.

Ler nas tabelas MARA, MARD e MAKT todos os materiais e guardar as informações necessárias
em tabela interna.

Formatar uma página do formulário ZWAnnT11_1 e


formatar tantas páginas quantas forem necessárias do formulário ZWAnnT11_2.

Obs.: Imprimir as molduras definidas no formulário.

Page 66 of 86
RELAÇÃO de MATERIAIS nos DEPOSITOS

30/09/1999 10:30:55

Nome da Empresa

Endereço da Empresa

Prezados Srs.: Estamos enviando relatório de todos os

materiais em nossos estoques, que estarão a sua disposição

a partir da próxima semana.

Material Descrição Deposito Centro Estoque Disponivel

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

Pág. nn

Page 67 of 86
RELAÇÃO de MATERIAIS nos DEPOSITOS

30/09/1999 10:30:55

Material Descrição Deposito Centro Estoque Disponível

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

XXXXX XXXXXXXXXXXXXXX XXXX XXXXXX 9999999999999999

Pág. nn

Page 68 of 86
1 – Tabela de Formatos de Elementos de Texto

Nesta tabela aparecem os formatos de parágrafo standard e todos os formatos de parágrafo


que foram criados pelo usuário ex P1 – Parágrafo P1.
É através dele que se pode determinar as características do parágrafo discriminado.

Formato Significado
* Parágrafo Default
Texto Corrido
= Linha longa
( Linha Bruta
/ Avanço de Linha
/= Avanço de Linha e Linha Longa
/( Avanço de Linha e Linha Bruta
/: Linha de Comando
/* Linha de Comentário
/E Elemento de Texto

Page 69 of 86
2 – Tabela de Simbolos do Sistema

Os símbolos de texto são como comandos pré-definidos que quando utilizados facilitam a programação.
Ex. DATE ao invés de ter que exportar SY-DATUM

Page 70 of 86
Inclusão de Logos nos formulários

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.
Primeiramente devemos pegar um editor de gráficos que possua a saída no formato TIF
pois se o formato não for baseado no “Baseline TIFF 6.0” o compilador hexadecimal do SAP não
conseguirá compilá-lo. Um editor que permite a gravação em formato TIFF é o Lview Pro, que
pode ser conseguido através do site : http://winfiles.com.
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.

Caminho para o
arquivo tif

Imagem preto e
branco

Colocar o nome do
logotipo

Page 71 of 86
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
BMON(default) ou colorido BCOL.

Importante: Quando gerarmos a figura colorida deverá ser até 256 cores senão o compilador não
irá conseguir compilar tal nível de resolução. Na hora dos testes o logotipo não vai aparecer!!!

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-…).
Tome cuidado, pois se o programa for executado com o mesmo nome vai sobrepor o
logotipo antigo sem perguntar se deseja sobrepor.
A geração desse logo está intimamente ligado ao formato do arquivo TIFF. Isso quer dizer
que o seu tamanho obtido no formulário está relacionado ao tamanho da imagem geradora do
objeto.

No elemento de texto deverá ser utilizado o seguinte comando:

/: INCLUDE ZHEX-MACRO-COMPLEXLOGO OBJECT TEXT ID ST

Obs: É aconselhável que se crie apenas uma janela somente para o logo.

Page 72 of 86
Comandos de Controle

ADDRESS Formatação automática de informação de endereço


BOTTOM Usado apenas na janela MAIN para imprimir no rodapé da janela
BOX Cria caixa
CASE Cria condição para argumentos
DEFINE Cria um novo símbolo em tempo de execução
HEX Passa valores hexadecimais diretamente
IF Cria condição para argumentos
INCLUDE Incluí outros textos e logotipos
NEW-PAGE Força uma nova página
NEW-WINDOW Força uma nova janela
PERFORM Chama subrotina
POSITION Usado para caixas setando X & Y
PRINT- Inicializa um seqüência definida de controle de impressão
CONTROL
PROTECT Protege uma página de parada
RESET Reestarta seqüência de números de saída
SET COUNTRY Seta o país para campos
SET DATE MASK Seta formato de data
SET SIGN Coloca o campo a direita ou esquerda do número
SET TIME MASK Seta formato de hora
SIZE Usado apenas para caixa onde seta o tamanho da caixa
STYLE Usa um diferente tipo de estilo
SUMMING Adiciona valores para um total
TOP Usado apenas na janela MAIN para imprimir no topo da janela

Formatando Opções

(<) Alinha a esquerda


(>) Alinha a direita
‘’ Insere um prefixo ou sufixo literal
(C) Representa símbolo retirando-se os espaços em branco
(n) Define um comprimento explícito
(. n) Seta o número de casas decimais
+n Caracteres não setados a direita
(En) Representa um símbolo como um número exponencial
(Ff) Utiliza um tipo de caracter nos espaços
(I) Representa apenas valores não iniciais
(K) Ignora conversão de rotinas
( R) Força alinhamento a direita
( S) O símbolo é representado através de um campo
(T) O símbolo é representado através de um separador de milhar
(Z) Ignora zeros

Page 73 of 86
Download / Upload

Para se fazer download ou Upload deve-se utilizar o programa RSTXSCRP

O processo de upload e download é um pouco diferente do realizado em programas. Para


isso foi criado o programa RSTXSCRP que pode ser executado através da transação SE38.
Este programa pode ser utilizado também para fazer o transporte de Script’s, pois pelo fato
do script ser Client Dependent esta pode ser uma ferramenta útil.
O arquivo gerado em formato texto fica no formato abaixo:

SFORMZA_WM_S_LVSKOMM3
HFORMZA_WM_S_LVSKOMM3
OLANP
HEADFORM ZA_WM_S_LVSKOMM3SAP DEF PLista de picking fora de SP
ZA_WM_S_LVSKOMM3 00018CTPICOLOF 46B 20000616170909CTMEDEIROSAA46C 2000071222343913200051
P0 200
LINE/:FORM CPI 10; LPI 6; TAB-STOP 1 CH; START-PAGE PAGE; FORMAT LETTER PORTRAIT;
LINE/:FORM PARAGRAPH L; RDI; RDIDEV;
LINE/:PARAGRAPH L LINE-SPACE 1 LN; LEFT-INDENT 1 CH;

Page 74 of 86
LINE/:PARAGRAPH L1 LINE-SPACE 1 LN;
LINE/:PARAGRAPH L2 LINE-SPACE 1 LN;
LINE/:PARAGRAPH L1 TAB 1 1.90 CM LEFT;
LINE/:PARAGRAPH L2 TAB 1 0.10 CM LEFT; TAB 2 2 CM LEFT; TAB 3 7.60 CM LEFT;
LINE/:PARAGRAPH L2 TAB 4 9 CM LEFT; TAB 5 11.70 CM LEFT; TAB 6 14 CM LEFT;
LINE/:PARAGRAPH L3 TAB 1 16 CH RIGHT;
END
HEADFORM ZA_WM_S_LVSKOMM3SAP TXT PLista de picking fora de SP
ZA_WM_S_LVSKOMM3 00018CTPICOLOF 46B 20000616170909CTMEDEIROSAA46C 2000071222343913200246
P0 200
LINE/:FORM TEXT 'Lista de picking fora de SP';
LINE/:PARAGRAPH L TEXT 'Parágrafo default';
LINE/:PARAGRAPH L1 TEXT 'Título da Capa';
LINE/:PARAGRAPH L2 TEXT 'Dados de cabeçalho Capa';
LINE/:PARAGRAPH L3 TEXT 'Código de barras';
LINE/:PARAGRAPH L5 TEXT 'Título de lista + linha 1';
LINE/:PARAGRAPH L6 TEXT 'Título de lista + linha 2';
LINE/:PARAGRAPH L7 TEXT 'Título de lista + linha 3';
LINE/:PARAGRAPH L8 TEXT 'Subcabecalho Capa';
LINE/:PARAGRAPH L9 TEXT 'Dados da MAIN';
LINE/:PARAGRAPH LC TEXT 'Itens da capa MAIN';
LINE/:PARAGRAPH LV TEXT 'Dados de embalagem';
LINE/:STRING BC TEXT 'Código de barras lista pick.WM';
LINE/:STRING GK TEXT 'Caracter Pequeno Negrito';
LINE/:STRING GR TEXT 'Caracter Pequeno Negrito';
LINE/:STRING H TEXT 'Cadeia caracteres ressaltada';
LINE/:STRING PK TEXT 'Caracter Pequeno';
LINE/:STRING PQ TEXT 'Caracter Pequeno';
LINE/:STRING U TEXT 'Cadeia caracteres sublinhada';
LINE/:WINDOW FUSS TEXT 'Rodapé';
LINE/:WINDOW HEADER TEXT 'Nova janela';
LINE/:WINDOW KOPF TEXT 'Cabeçalho da lista picking';
LINE/:WINDOW MAIN TEXT 'Janela principal';
LINE/:PAGE CAPA TEXT 'Página nova';
LINE/:PAGE PAGE TEXT 'Página de texto';
END
ACTVSAP
E

Page 75 of 86
Debug

O debug do SAPscript possui praticamente os mesmos comandos do debug do editor


Abap, porém sob outra forma de apresentação .
Para acioná-lo devemos utilizar o caminho SE71>Utilitários>Ativar Depurador

Após feito isto irá parecer que nada aconteceu, porém quando for executado o programa
que aciona o script e for comandada a impressão o depurador entrará em ação.
Algumas diferenças entre os depuradores do Abap e Script são que o do Abap faz análise
linha a linha, já o do Script faz linha a linha quando for comando e palavra a palavra quando
forem textos a serem editados. Devido a isto ele possui uma barra (regra) onde há um cursor que
aponta o local da linha que ele está lendo.

Page 76 of 86
Para se desativar o depurador basta clicar em ENCERAR na antes do formulário entrar em
depuração.

Janela executada

Régua de Cursor

Apontador de Linha

Janela de visualização
de variáveis

Page 77 of 86
UTILIZAÇÃO DO PERFORM

Como sabemos só devemos alterar os programas standard em último caso, por isso é
possível se criar um programa como um pool de Forms e aciona-lo através de chamadas dentro
do script.
Isto é bem interessante na medida que tivermos de fazer contadores, consistências, etc.
A estrutura fica assim:

Programa SAP SCRIPT Pool de Forms


Standard

Dentro do script colocar :

PERFORM MATERIAL IN PROGRAM TESTE


USING &MARA-MATNR&
CHANGING &V_FLAG&.
ENDPERFORM.
IF &V_FLAG = ‘X’.
IMPRIME LINHA DO MATERIAL
ELSE.
SOMA A QUANTIDADE DE MATERIAL
ENDIF.

Aqui estou chamando um form chamado MATERIAL no Programa TESTE enviando como
referencia o valor do número do material MARA-MATNR e recebendo o valor para a variável
V_FLAG.
Se o valor for X imprimir a linha ou seja quando no form o número do material mudar imprime
uma linha referente a ele senão você pode fazer um outro perform do mesmo jeito somando a
quantidade do material e retornando o total.

Criar um programa Z e dentro dele criar os Forms

Dentro do programa colocar o form

Page 78 of 86
*&---------------------------------------------------------------------*
*& Form MATERIAL.. *
*&---------------------------------------------------------------------*
* GUARDA A REFERÊNCIA DESTAÇÃO PARA FAZER QUEBRA *
*----------------------------------------------------------------------*

FORM MATERIAL TABLES


ITAB STRUCTURE ITCSY
OTAB STRUCTURE ITCSY.

DATA: L_MATERIAL(18) TYPE C,


L_MATMEM(18) TYPE C,
L_ESPACOS TYPE P DECIMALS 2,
L_FLAG TYPE C.

*Lê o valor enviado do script para a variavel L_MATERIAL


READ TABLE ITAB INDEX 1.
L_MATERIAL = ITAB-VALUE.

*Importa o valor da variavel L_MATMEM da memória


import L_MATMEM from memory id 'ABCD'.

*Verifica se ela é inicial


IF L_MATMEM = ''.
L_MATMEM = L_MATERIAL.
export L_MATMEM to memory id 'ACBD'.
L_FLAG = ''.
ELSE.

*Se os materiais forem diferentes Imprimir


IF L_MATERIAL <> L_MATMEM.
L_FLAG = 'X'.
*Atualiza o valor e joga para a memória
.. L_MATMEM = L_MATERIAL.
export L_MATMEM to memory id 'ABCD'.
ELSE.
*Se forem iguais não imprimir
L_FLAG = ''.
ENDIF.
ENDIF.

*Mover o valor da variável L_FLAG para o SCRIPT


MOVE L_FLAG TO OTAB-VALUE.
MOVE 'V_FLAG' TO OTAB-NAME.

MODIFY OTAB INDEX 1.


ENDFORM.

Page 79 of 86
Estas Estruturas OTAB(Tabela de saída OUT) e ITAB(Tabela de Entrada IN) são utilizadas para
se fazer o link entre o Script e o Form, se você pedir para visualiza-las verá que elas possuem
apenas dois campos um NAME(que é o nome da variável de destino) e VALUE (que é o valor da
variável a ser passada)

Isso pode ser utilizado para se controlar qualquer coisa do script sem alteração do standard.
Obs só tome cuidado no uso dos endereços de memória no caso acima coloquei como ABCD, eles
não são perdidos ficam na memória. Então se for fazer vários performs use endereços de memória
diferentes.

A utilização de variáveis neste caso é impossível, pois ao sair do form ou do programa você perde
o valor , ficando assim com valores locais.

Page 80 of 86
UTILIZAÇÃO DO CÓDIGO DE BARRAS

A utilização de código de barras é de certa forma simples, pois o SAP já possui os


principais tipos de códigos de barra existentes.
Para se criar um código de barras basta criar um formato de caracter e dizer qual tipo a ser
utilizado. Quando este tipo de parágrafo criado for utilizado, a variável ou o texto que seguir do
código do carecter será transformado em código de barras.
Os principais cuidados a se tomar:

1- Verificar se o tipo de código de barras utilizado é alfanumérico no caso da utilização de


caracteres.
2-A impressora deve conseguir imprimir código de barras. As impressoras da HP não
possuem esta característica por isso deve-se utilizar placas de memória adicionais para que seja
possível a identificação.

( IMPORTANT NOTE: If you want to print bar codes from R/3 using device type HPLJ4, HPLJ5,
HPLJ5SI or HPLJ4000 on HP LaserJet 4, 5, 6 or 4000 series printers, you need what is known as a
SIMM module (IC card). This SIMM module is called "JetCAPS Intelligent Barcode SIMM" and can be
obtained for most HP LaserJet 4, 5, 6 and Laser Jet 4000 printers. For more detailed information
refer to Note 121305. Other bar code SIMM modules for HP LaserJet printers are not supported by
SAP! ) nota 5196 SAP

- É necessário que se configure através da transação SPAD:

Spool -> Adminstração Spool -> Selecionar:


- device type (ZHPLJ4) - Caso não exista criar a partir da cópia de uma pré-existente que contenha as
características necessárias, como tipo de fonte(character set) e tipo de impressora(laser, jato de tinta,
matricial, etc)

Spool -> Manutenção de Fontes -> Selecionar:


- system barcodes (tipo de barcode - Z_C25D2P - Planner). O código gerado terá que ter a dimensão de 103mm
de largura por 13mm de altura.

- printer barcodes: Selecionar o device type correspondente (ZHPLJ4) e checar os print controls
existentes (double click sobre o device). Nesta lista deverá existir (se não existir deve-se criar) o
Prefix (barcode_on) e Sufix (barcode_off)) correspondente ao tipo de barcode (Z_C25D2P). Posicionar sobre o
prefix e visualizar o print control. A sequência de controle estará em hexadecimal. Esta sequência é dada
pelo fabricante da placa que gera o barcode (Planner) e cada qual possui a sua seqüência correspondente.
- a leitura de um código de barras é dada por um identificador de início ( 167 = A7(hex)) e fim ( 168 =
A8(hex)).

- Hardware específico para a impressão de barcode (adaptado na impressora).

2- É aconselhável que se crie uma janela apenas para o código de barras devido ao seu
formato diferenciado.
3- As notas da SAP que falam sobre o assunto são: 121305 & 5196

Page 81 of 86
Código de barras apresentado
quando a impressora não possui
módulo de conversão

Page 82 of 86
Criar formato de caracter e colocar
na janela o código de barras
desejado.
Acima demonstrado na lista.

Page 83 of 86
TEXTOS CONDICIONAIS

Podemos usar o comando IF de ntro do SAPSCRIPT do mesmo jeito que utilizamos no


ABAP, porém algumas condições não existem como CN ( Contains Not only )/ CO (Contains
Only) / CA (Conteins Any) / NA (contains Not Any ) / CS (Contains String ) / NS (contains No
String) / CP (Contais Pattern) / NP (contains No Pattner) não podem ser utilizados.
Para conseguir utilizálos deve-se fazer um PERFORM como demonstrado anteriormente.

As condições que podem ser utilizadas são:

= EQ (igual)
< LT (menor que)
>GT (maior que)
<= LE (menor ou igual a)
>=GE (maior ou igual a )
<>NE (diferente)
NOT
AND
OR

Sintaxe:

/: IF condição
:
/:ELSE IF condição
:
/:ELSE
:
/:ENDIF

Obs 1 : Caso ocorra um erro de sintaxe este não aparecerá pois o IF não será executado.
Obs2 : Não é necessária a utilização de ponto no final dos comandos pois a interpretação dos
comando estará sendo executada no comando do início da linha.

Page 84 of 86
Administração de Spool

Na transação SPAD é onde podemos gerenciar as impressoras e formatos de páginas, desta


forma esta transação geralmente é controlada pelo pessoal de BASIS.
Deve-se ter cuidado ao se manipular a mesma pois qualquer alteração errônea pode
danificar as atribuições feitas a outros componentes do SAP R/3.

Clicar em Saltar> 1 Tela_Alternativa

Page 85 of 86
Cada uma das opções leva a um tipo de configuração:
- Página
- Impressora
- Caracteres...etc

Page 86 of 86

Вам также может понравиться