Download - SapScript Passo a Passo
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 1/31
1
1. Arquitetura
2. SapScript
2.1. Cabeçalho
2.2. Parágrafos
2.3. Caracteres
2.4. Janelas
2.5. Páginas
2.6. Janela de páginas
2.6.1. Elementos de texto
2.6.2. INCLUDES
2.6.3. Box
2.6.4. Comandos de controle
2.6.5. Símbolos do sistema
2.6.6. Campos genéricos do Sapscript
3. Estrutura do programa
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 2/31
2
SAP DB
Programa impressão
Formulário
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 3/31
3
Janelas
de
paginas
Páginas
Janelas e
elementos de
Textos
<H></>
P
Parágrafos
Caracteres
Header
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 4/31
4
SE71
Transação SE71
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 5/31
5
Podemos criar um novo
Formulário (botão criar) ou
Utilizar as opções encontradas
No menu ³Utilities´
Transação SE71
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 6/31
6
Header - informações gerais do formulário, como formato da página que será utilizado, parágrafo e fontes default do mesmo(quando não for especificado nenhuma dentro do FORM). Nesse tópico aparece também o título do formulário, a classe dedesenvolvimento do mesmo e os idiomas do formulário original e o corrente.
O bs1: Quanto o usuário fazer
LOGO N com uma linguagem
Que não existe o FORM,
O sistema utilizará a linguagem
Original
O bs2: Todas as janelas só podem
Ser alteradas no idioma original,
Isso significa que só existirá um
Layout, porém os dados poderão
Ser diferentes
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 7/31
7
O bs: Duas vírgulas ³,,´
R epresenta uma tabulação
Header - Cabeçalho
SPAD ex: Nota Fiscal
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 8/31
8
Parágrafos - são elementos que podem ser criados pelo usuário e apresentam informações dos textos de uma determinada janela.Nesses parágrafos são determinados tipos de fontes, tabulações, negrito ou sublinhado, etc... Para criar um parágrafo novo,utilizar o caminho do menu EDIT -> Create Element, lembrando que em um formulário standard, somente se pode alterar olayout no idioma original.
Define o parágrafo, descrição,
Margem ³default´, alinhamento,
Espaçamento, etc
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 9/31
9
Define a letra e suas opções
( tipo, tamanho, etc)
Parágrafos
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 10/31
10
Parágrafos
Define tabulações
O bs: Cada 2 vírgulas ³,,´ o
Sistema saltará para cada
Tabulação
Ex: mara-matnr ,,mara-matkl,,
mara-labor
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 11/31
11
Caracter de Seleção - são informações semelhantes às do parágrafo, no que diz respeito a formatação de textos, no entanto podemser aplicados a trechos de textos e não necessariamente a linhas inteiras do formulário.
Protegido ±Não permite a quebra
de linha, mas apresenta todo o bloco de texto na próxima linha.
Oculto ± Não é apresentado,
somente visível no editor de texto
Superescrito/ Subescrito ± é
apresentado meia linha acima ou
abaixo
Sua sintaxe de utilização se assemelha a programação HTML, conforme exemplo a seguir. Imagine um Caracter string definido como 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
Utilizado para código de barras
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 12/31
12
Também podemos definir o tipo eTamanho do fonte, porém mais
Utilizado para definir atributos
Strings ± Caracteres de seleção
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 13/31
13
Exercício ± parte 1. Criar um formulário que contenha:
1. Linguagem original PT
2. Página com formato Carta - Portrait
3. Com parágrafo default -AS- tipo courier de tamanho 124. Defina os parágrafos:
AS ± descrito acima
HE ± Header ± Courier 20 ± com 2 tabulações (1cm e 8cm)
LI ± Line ± Courier 10 ± com 3 tabulações (2,5 e 17cm)
5. Criar um Caracter string para impressão em negrito chamado A
(não definir fonte).
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 14/31
14
Janelas - as janelas são a base da construção do layout. As janelas podem ser criadas sem limites e tem por finalidade dividirespacialmente as regiões de um formulário para operações independentes.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 15/31
15
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 processamentoobedecem aos mesmos comandos, e não podem ter nomes diferentes. A passagem de uma janela MAIN para outra pode serautomá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 namesma, o formulário automaticamente passa à próxima janela MAIN do formulário. É através desse princípio que uma relatórioganha 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
A lógica de sequência das janelas MAIN de um formulário segue sempre a um critério. Dentro de uma página anavegação de uma MAIN para outra segue de acordo com os índices dessas janelas dentro do formulário, e quando uma novapáginaé gerada, a contagem segue a mesma disposição, continuamente.
VAR - essa janela apresenta uma característica própria, que necessita de verificação constante do formulário com seusdados, que podem variar durante a execução do relatório. Esse tipo de janela deve ser utilizado quando se pretende trabalhar comtextos 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 queseus 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 depáginas, como logos e rodapés.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 16/31
16
Páginas - as páginas são os elementos responsáveis pelo agrupamento das janelas durante certos momentos do relatório. Geralmentesó são definidos duas páginas, que acabam em processo reflexivo, por formulário.
FIRST -> NEXTNEXT -> NEXT
Após a primeira página, seria chamada a segunda, com um layout diferente (sem o logotipo). A partir dessa, todas apresentariam omesmo tipo de layout (com dados do relatório aproveitandoa página inteira).
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 17/31
17
Page WindowsAs page windows podem ser entendidas pelo nosso conceito de layout propriamente dito. São os elementos responsáveis peloaparecimento ou não das janelas dentro de uma determinada página, bem como seus posicionamentos em relação à folha a serimpressa. É 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.
Neste momento define-se onde a
Janela aparecerá no formulário.
Só é definido no formulário com
Linguagem original.
Programação dentro
do formulário. Onde
definimos os TextsElements
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 18/31
18
Exercício ± parte 2. Usar o formulário criado na parte 1:
1. Criar 3 windows
1.1. Header ± var
1.2. Footer ± var
1.3. Main - var
2. Criar a 2 Páginas2.1. First
2.2. Next
3. Criar 3 page windows
3.1. Header ± largura 27 e altura 4cm *
3.2. Footer ± deslocamento de altura 28cm
largura 21 e altura 1cm
3.2. Main - ± deslocamento de altura 3cm *largura 21 e altura 22cm
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 19/31
19
Page Windows ± Texts 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 telasemelhante à 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 aindicação de que se trata de uma linha de comando para o formulário (/:, à esquerda da linha). Abaixo, alguns dos comandosque podem ser utilizados de dentro dos elementos de texto de uma janela em SAPscript:
IF..ELSE..ENDIF
CASE..WHEN
DEFINE declaraçãode variáveis dentro da janela, com atribuiçãode valor
PERFORM..USING..CHANGING (Ver formulário ZBR_MF_PEDIDO_NA)
BOX..FRAMEINCLUDE
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 umcuidado bastante especial com o idioma que se trata esse objeto. Independentemente do idioma do formulário, deve-sesempre utilizar o idioma em que o objeto foi criado.
/: INCLUDE name OBJECT object ID id LANGUAGE spras
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 20/31
20
Page Windows ± Texts Elements
Linha de comando ±
Usado para
Comandos, parágrafos
e texts elements
Explorar MENU
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 21/31
21
Page Windows ± Texts Elements
Text Element definido
dentro do programa de
impressão na função
³WRITE_FORM´
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 22/31
22
Page Windows ± Texts Elements
ADDRESS Formatação automática de informação de endereço
BO
TTOM 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
NE W -PAGE Força uma nova página
NE W - W INDOW Força uma nova janelaPERFORM Chama subrotina
POSITION Usado para caixas setando X & Y
PRINT-CONTROL Inicializa um seqüência definida de controle de impressão
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
Linha de comando ±
Sempre usar /:
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 23/31
23
CALL FUNCTION ³OPEN_FORM´
CALL FUNCTION ³START_FORM´
CALL FUNCTION ³WRITE_FORM´
CALL FUNCTION ³END_FORM´
CALL FUNCTION ³CLOSE_FORM´
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 24/31
24
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ãopassados 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 estadiretamente ligada a utilização do segundo parâmetro. Se a exibição estiver desabilitada (DIALOG = ¶ ¶) mas a estrutura ITCPOnã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)- TDPREVIE W (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)
LA NGU A GE = 'P' (Idioma do Formulário)
* OPTIONS = ITCPO (Estrutura com todas as características)* importing
* language =
* new_archive_params =
* result =
exceptions
canceled = 1device = 2
form = 3
options = 4
unclosed = 5
others = 6.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
DEVICE = 'PRINTER'
DIALOG = 'X'
FORM = 'ZBR_TESTE_LUIZ'LANGUAGE = SY-LANGU.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 25/31
25
START FORM - Serve para iniciar um formuláriode impressão.Mas ai vem a pergunta porque deve ser iniciado se a abertura de um formulário automaticamente gera a inicialização domesmo.Se estivermos gerando relatórios para uma empresa de computadores onde, para cada novo computador vendido, deve sergerado um novo relatório, e esse relatório deve conter todos os componentes presentes no computador em questão.A abertura de um formulário inicia o primeiro, mas para cada novo computador vendido um novo formulário deve ser gerado.Para isso utilizamos o comando de inicialização. Este comando permite que, numa mesma impressão, sejam gerados váriosformulá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áriospara 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.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 26/31
26
W RITE 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 SAPSRIPT. Portanto, se algum dado que deva ser impresso estiver numa tabela interna ouvariá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, amedida que os dados são selecionados, são enviados imediatamente para o formulário.
O comando para impressão dos dados é a seguinte função:
call function 'WRITE_FORM'exporting
ELEMENT = ' '
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'MAIN'
* importing
* pending_lines =
exceptions
element = 1
function = 2
type = 3unopened = 4
unstarted = 5
window = 6
others = 7.
EX: CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'NF'
WINDOW = 'HEADER'
EXCEPTIONS
OTHERS = 01.
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 armazenano 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 campoMATNR agora vale ¶5678·. Se uma nova impressão na janela MAIN for executada o resultado será o seguinte:
12345678
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 27/31
27
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 naquebra de página, com os valores armazenados nos campos no momento do encerramento ou no momento da quebra, e não nomomento da escrita (write_form), ou seja, se no exemplo anterior fosse utilizada uma janela não-main, o resultado final seriasomente 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-maincontém dois elementos de texto chamados FRASE1 e FRASE2 da seguinte forma:
/E FRASE1
&MARA-MATNR& Teste de Frase 1
/E FRASE2
&MARA-MATNR& Teste de Frase 2
Se um comandoWRITE_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 seguintefrase:
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 depágina por exemplo, basta colocá-lo fora de qualquer elemento de texto e não selecionar nenhum elemento de texto para a janelaque, automaticamente, este dado será impresso em todas as páginas.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 28/31
28
END FORM - Serve para finalizar um formulário.
call function 'END_FORM'
importing
RESULT = ' '
exceptionsunopened = 1
others = 2.
CLOSE FORM - Serve para fechar um formulário.
call function 'CLOSE_FORM'
importing
RESULT = ' '
Tables
* OTFDATA =exceptions
unopened = 1
others = 2.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 29/31
29
Abordar pontos:
. Textos standards ± SO10ver transporte em OSS note - 65253
. Impressão de logotipos ± programa R STXLDMC ± ver arq. ANOTSAP
. Textos da tabela STXL (função R ead Text) são impressos pelo comando
I NCLUDE.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 30/31
30
Exercício ± parte 3
. Imprimir nas page Windows:1. Header:
TEXT ELEMENT = NF
Fazer um box de 20,5cm de comprimento, 3 de altura e
0,5cm de deslocamento
Imprimir o documento interno da NF
Na linha abaixo imprimir o nro do NF em negrito
O bs: o documento e a NF devem ficar dentro do BOX2. Footer
Imprimir o seu nome e a página atual e a quantidade total de
páginas
3. Main
Imprimir os campos da tabela interna ITAB com tabulações:
(0cm, 2cm, 6cm e 17cm) *
Como o campo descrição do material não está no programa,fazer um PER FORM para buscar a descrição na tabela MAKT
(utilizar o FORM busca_makt do programa YTEIXE_ MAKT)
e imprimir na linha abaixo somente quando a descricão do
material não comece com a letra µA¶.
5/8/2018 SapScript Passo a Passo - slidepdf.com
http://slidepdf.com/reader/full/sapscript-passo-a-passo 31/31
31
Trabalhar com um formulário SAPscript não é complicado, desde que seentenda seus componentes da maneira correta. Um formulário começado demaneira 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 impressorautilizada, se a impressora for do tipo matricial é aconselhável que as medidasutilizadas na construção do formulário seja LN(Linha) e CH (Caracteres); se aimpressora for laser, jato de tinta, térmica ou qualquer tipo de impressoragráfica deve-se utilizar CM (Centímetro), MM(Milímetro). É importante
salientar que se estivermos utilizando uma impressora matricial a ordem deimpressão é muito importante para a correta edição do formulário pois oscomandos de posição funcionam mas devemos lembrar que a cabeça deimpressão não volta ou seja a leitura do formulário é feita linha a linha, já asimpressoras gráficas isso não ocorre pois a leitura é feita página a 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 fazeruma cópia e altera-los. Os formulários standards funcionam como programasstandards, e os formulários criados devem ser iniciados pelas letras Z ou Y.