Академический Документы
Профессиональный Документы
Культура Документы
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.
Page 2 of 86
Estrutura de Chamada e Controle do SAPScript
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
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:
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.
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:
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.
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,
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.
Page 7 of 86
CLOSE FORM - Serve para fechar um formulário.
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
Page 11 of 86
PASSO 1
1 – Criar um formulário ZWA_LIXO
Page 12 of 86
PASSO 2
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
<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
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</>
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.
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.
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
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.
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:
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.
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:
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 *
*----------------------------------------------------------------------*
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
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
--------------------------------------------------------------------------------
Page 33 of 86
TOTAL Totais da Nota
Window type CONST
--------------------------------------------------------------------------------
Pages Attributes Paginas do formulário com suas respectivas janelas
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Text elements for following windows:
--------------------------------------------------------------------------------
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
/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
TOTAL
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.
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.
Page 39 of 86
CALL FUNCTION 'SET_TEXTSYMBOL'
EXPORTING
NAME = '&cgc_number&'
VALUE = WCGC
REPLACE = 'X'
EXCEPTIONS
OTHERS = 1.
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.
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:
Page 44 of 86
Na tela abaixo, proceder da seguinte forma:
Page 45 of 86
Na tela abaixo, proceder da seguinte forma:
Page 46 of 86
Na tela abaixo, proceder da seguinte forma:
Page 47 of 86
Na tela abaixo, proceder da seguinte forma:
Page 48 of 86
Na tela abaixo, proceder da seguinte forma:
Page 49 of 86
Na tela abaixo, proceder da seguinte forma:
Page 50 of 86
Na tela abaixo, proceder da seguinte forma:
Page 51 of 86
Na tela abaixo, proceder da seguinte forma:
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.
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.
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.
Page 59 of 86
CALL FUNCTION 'SET_TEXTSYMBOL'
EXPORTING
NAME = '&cgc_number&'
VALUE = WCGC
REPLACE = 'X'
EXCEPTIONS
OTHERS = 1.
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.
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
Criar o Formulário ZWAnnT10, conforme lay out anexo, copiando o formulário “RT_CHECK_LIST”
Procedimentos:
Centro (WERKS)
Deposito (LGORT)
Estoque (LABST)
Valor (VKLAB)
Page 64 of 86
1
Cabecalho do Formulario
2
Material: xxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Page 65 of 86
2. Especificação de programa de treinamento: ZWAnnT11
Obs: Serão utilizadas impressoras Laser ou DeskJet usando folhas soltas em branco.
Procedimentos:
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.
Page 66 of 86
RELAÇÃO de MATERIAIS nos DEPOSITOS
30/09/1999 10:30:55
Nome da Empresa
Endereço da Empresa
Pág. nn
Page 67 of 86
RELAÇÃO de MATERIAIS nos DEPOSITOS
30/09/1999 10:30:55
Pág. nn
Page 68 of 86
1 – Tabela de Formatos de Elementos de Texto
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
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.
Obs: É aconselhável que se crie apenas uma janela somente para o logo.
Page 72 of 86
Comandos de Controle
Formatando Opções
Page 73 of 86
Download / Upload
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
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:
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.
Page 78 of 86
*&---------------------------------------------------------------------*
*& Form MATERIAL.. *
*&---------------------------------------------------------------------*
* GUARDA A REFERÊNCIA DESTAÇÃO PARA FAZER QUEBRA *
*----------------------------------------------------------------------*
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
( 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
- 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)).
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
= 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
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