Sie sind auf Seite 1von 16

Best Practices

Here are few of DOs and DONTs when working and designing a Smart Forms.

Dont slam Code lines


Many times, Code lines are slammed with lot of code.

Few reasons, you should NOT slam code lines node within the Smart Forms.

Very small Editor: When you open the ABAP Editor to maintain the Code Lines, you would notice a very
small window. If you are using a normal screen, you would run into double scrollbar issue as well. Since it
is having double scroll bar and small editor, it would be difficult to write a code within it.

Difficult to find: Since Code lines can exist at any node level, it would be very difficult to navigate when
required to find a specific code lines

Commented Code: Commented code in the beginning of the program lines, makes it more difficult to
determine if there is any code or not.

Instead, you should think about alternative approaches:

Code Lines Node Usage: Use it only to do formatting on the data Code lines should be used for very few
lines of code.

Segregation of the Logic: Try to wrap the logic in an Object or a FM which can be easily called in more
than one places. This would give you an opportunity to re-factor your code, write an ABAP Unit test case,
Inherit existing functionality (if ABAP Objects is used)

Rename each and every Node and its description


Justifications to rename every node

Unclear Purpose: If you dont rename difficult to navigate and understand the purpose of the node. Its
difficult to find relevant node and locate it. You can search the text in the FM by if the node is not renamed
properly it wont find it

Without proper naming, nodes would be like:

Properly documented node will help you and others to understand the purpose of the node:

Translation in SE63: Without proper name of the text node, it will appear like a TEXT01 TEXT02 etc. You
would need to pay lot of extra attention to make sure you put the correct translation to correct node.
Without proper name, you will see this in SE63 while translating the SmartForms

With Proper Name, you would see nicely named text symbols in SE63:

Inactive Nodes
Many a times developers use 1=2 in condition to make that element Inactive from the form. This technique is fine
as you want to retain that node and relevant logic within it. But, not maintaining proper documentation would make
maintenance difficult. So, Make sure you update the description with phrase like COMMENTED, NOT USED,
INACTIVE, etc.
Eventually in subsequent changes, these inactive nodes must be removed from the form. Too many inactive nodes
will take long time for From to process.

Without Properly commented node, would be lost in the node tree of the Smartforms:

With proper comments, easy to find Inactive nodes:

Avoid Using Templates


Template needs definite space on the form. If you have many templates in single window which are conditionally
printed on the form, Form will not complaint about the height of the window at time of Syntax check. This error will
occur at run time and would be difficult to track.
Try to use LOOP with TABLE LINE. This will make sure that you dont need definite space when you are printing
dynamically.

Error Handling
After each generated FM call, make sure you get the errors as well whenever there is any exception. Call FM
SSF_READ_ERRORS to retrieve the error message. Pass these message back to the NAST protocol if the
SmartForm is being called from the Output control.

SmartForms Error Handling

CALL FUNCTION lf_fm_name


EXPORTING
archive_index
archive_parameters
control_parameters

= toa_dara
= arc_params
= ls_control_param

mail_recipient
mail_sender
output_options
user_settings

=
=
=
=

ls_recipient
ls_sender
ls_composer_param
SPACE

IMPORTING job_output_info
= ls_job_info
EXCEPTIONS formatting_error
= 1
internal_error
= 2
send_error
= 3
user_canceled
= 4
OTHERS
= 5.
IF sy-subrc <> 0.
*
DATA: LT_ERRORTAB
TYPE TSFERROR.
FIELD-SYMBOLS: <FS_ERRORTAB> TYPE LINE OF TSFERROR.
*
* get smart form protocoll
CALL FUNCTION 'SSF_READ_ERRORS'
IMPORTING
ERRORTAB = LT_ERRORTAB.
*
* add smartform protocoll to nast protocoll
LOOP AT LT_ERRORTAB ASSIGNING <FS_ERRORTAB>.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
MSG_ARBGB = <FS_ERRORTAB>-MSGID
MSG_NR
= <FS_ERRORTAB>-MSGNO
MSG_TY
= <FS_ERRORTAB>-MSGTY
MSG_V1
= <FS_ERRORTAB>-MSGV1
MSG_V2
= <FS_ERRORTAB>-MSGV2
MSG_V3
= <FS_ERRORTAB>-MSGV3
MSG_V4
= <FS_ERRORTAB>-MSGV4
EXCEPTIONS
OTHERS
= 1.
ENDLOOP.
ELSE.
*
*
ENDIF.

Breakpoints
Since many of the developers feel comfortable putting break point in the code lines for debugging purpose even
though you can achieve Smartforms: Dynamic Breakpoints. If you have hard coded break point it would make it
difficult for you to debug the same form in Quality system, where you dont have access to remove the form. You
would think, Oh man, Why didnt I remove this?

Smartforms - Passo a Passo - Parte I


Ahhhhh,,, hoje vou comentar e mostrar pra vocs uns dos posts mais pedidos
por todos os meios de comunicao que vocs tem comigo que ehhhhhhhhhh .....
Bem,... no eh mais surpresa pois vocs devem ter lido o ttulo
deste post que Smartforms,,,, No custa lembrar mas esses posts passo a
passo que eu coloco no blog so simples, mas fazem voc sair do outro
lado, espero que consigam adquirir ou pelomenos complementar algum
conhecimento.
Primeiramente temos que saber que Smartforms so relatrios de impresso
dentro da sap, se vocs se lembram do Sapscript vo falar que a mesmo
coisa, e mesmo, pelomenos o resultado final, mas pra chegar at o momento
da impresso, os dois tem suas peculiaridades, o sapscript e bem mais dificil
de visualizar enquanto o Smartforms ele tem uma janela lateral num formato
hierarquico que voc consegue desenvolver com maior nitidez, cada objeto de
visualizao da tela; pra eu no ficar falando os pros e os contras vamos comear
a fazer logo isso e vocs mesmos falam qual o melhor depois.
Vamos entrar na transao 'SMARTFORMS' ( isso mesmo ).

Olha s a tela aiii, ela bem simples.... vamos dar um nome pro
formulrio e clicar no boto 'Criar'.
Fazendo isso voc ir para tela onde ns efetivamente iremos trabalhar com a
criao do Smartforms.

Reparem que eu numerei as janelas para que no tenha problemas,


N 1 - So os objetos, textos, janelas, logica de processamento,.. tudo
que existe dentro do seu smartforms de forma hierrquica
N 2 - Clicando na Parte N1 todos as informaes, caracteristicas e funes
daquele objeto sero mostrados nessa janela.
N 3 - Aqui e como tah ficando seu layout, conforme voc vai desenvolvendo
ele vai criando automaticamente os objetos mas ficam jogados na tela, portanto
clicando no boto 'FORM PAINTER' voc conseguir visualizar e mudar de posio
tudo que foi criado no se esquea das limitaes que sua pagina tm rsrs.
A idia inicial deste formulrio vai ser mostrar o resultado de um select
que ser feito em um programa, estou comeando pelo formulrio, mas na
verdade deveriamos comear pelo programa que ir dar carga no Smartforms,
mas como ser um passo a passo, vamos comear a explicar e fazer o
smartforms juntos, irei fazer um smart simples, depois iremos para o programa,
e depois voltamos para o Smart para deixarmos o mesmo um pouco mais
interessante.
Primeira coisa que iremos fazer e buscar o logo da empresa para o smart,
se voc no lembra como adicionar imagem no SAP acesse o link abaixo.
http://abapjuniores.blogspot.com.br/2012/01/importar-imagem-se78.html
Clique com o Boto direito na Pagina 1 e faa conforme imagem abaixo.

Clique duas vezes no objeto Grfico e coloque as informaes da imagem que


deseja mostrar.
Depois de criado, aperte o Boto 'FORM PAINTER' e posicione a imagem aonde
desejar.
Observao 1 : Lembrando que a Janela Principal ( MAIN ), como o nome dela
mesma diz, ela a principal, e tambm a nica que d loop de dados, portanto
quando quiser mostrar algo a nivel item voc ter que colocar na 'Main'.
Observao 2 : Diferentente que o Sapscript, o Smartforms pode ser executado
direto, clicando no F8 ir aparecer a tela da SE37 ( Funo ) e um nome de
funo bem loko, execute essa funo e passe os parametros obrigatrios caso
tenha, informe a impressora e visualize... No gaste papel a toa heimmm.
Bem, antes de continuar, o formulrio ir mostrar todos os dados de Spool
( informaes da pilha de impresso )do Usario que executa o programa,
os dados do cabealho ser as informaes do User, e os dados da Main ( Nivel

Item ) sero as informaes do Spool desse User.


portanto como iremos trazer estes dados que foram selecionados no programa
para o Smartforms, a resposta simples, o Smartforms que voc criou na
verdade uma funo criada dinamicamente pelo sap num grupo de funo tambm
criada s pra executar o seu Smart, da como ele tipo uma funo significa
que ele tem parametros de importao e exportao, e essas informaes esto
no menu 'Opes Globais / Interface de formulrio' conforme imagem abaixo,
faam conforme a imagem e criem na aba 'Tabelas' a tabela do tipo 'TSP01'
que ir receber todos os dados do Spool. ( Usem a atribuio 'LIKE' ).
Depois ative.

Agora vamos criar uma janela para colocar as informaes do header, primeiro
clique com o boto direito na Pagina e selecione Criar/Janela,

Depois disso deixe o layout conforme abaixo.

Agora clique com o boto direito na janela criada e selecione Criar/Tabela


e depois faa a mesma coisa s que selecionando Criar/Lgica de proces./
linhas de programa, conforme abaixo.

Iremos colocar uma informao na 'Area Principal' da tabela que acabamos de


criar com uma logica de processamento, mas para isso precisaremos criar uma

varivel para receber o valor que a lgica ir retornar, l na opes globais


da Smart existe o Menu 'Definies globais' clique duas vezes nele e crie a
varivel conforme abaixo.

Ative. Clique duas vezes no code e coloque o cdigo abaixo.


Repare nas informaes que eu coloquei nos parametros de entrada e de saida.

Eu sei, vocs devem estar pensando... Mas porque esse louco tah fazendo
tudo isso s pra pegar o nome do primeiro user que nico?
A resposta bem simples, porque eu queria mostrar como colocar cdigo
dentro do Smart, rsrsrs.
Agora que ns pegamos o nome vamos jogar essa varivel num lugar no Smart
para ser exibido, vamos clicar com o boto direito na Area principal da
tabela que criamos dentro da janela1 que criamos tambm, veja imagem abaixo.

Ir aparecer as informaes daquela linha ( entrada tabela ) e vamos


informar qual a categoria de linha que aquela tabela tm, existe uma padro,
ento coloque-a, mas a nivel item eu vou mostrar como trabalhar com isso
direito, e sobre o campo 'Estilo' eu vou postar mais tarde como criar e
atribuir um estilo para seu Smart que nada mais do que informar o formato
das palavras que iro ser exibidas, percebam que depois que voc atribuiu
uma categoria de linha foi criada uma celula (coluna ) na linha da tabela,
clique com o boto direito nessa celula e v no menu Criar / texto conforme
imagem.

Depois de criada v na aba 'Caractersticas Gerais' texto e clique no


boto 'Inserir Campo' al perto do Lapizinho digte a varivel no campo
'Campos' com a varivel entre o caracter especial & ( E comenrcial ),
tenso? rsrsrs, veja abaixo como.

Ta muito zuado nosso Smart, falando de beleza lgico, rsrs, o primeiro


n, ento bele. Agora que nosso formulrio tem informao header, vamos
colocar o que o pessoal mais tem medo num Smart que colocar as informaes
nivel item, o que na verdade um grande mito, pois muito de boa, como eu
tinha falado antes, tudo que for nivel item temos que colocar dentro da
janela principal pois somente l e liberado o Loop, ento vamos clicar com
o boto direito na janela Principal ( MAIN ) e criar uma tabela igualzinho a
primeira janela que criamos os dados Header, s que aki ns vamos ter que
criar alguns campinhos que viro na tabela de item e nesses campos tero que
ser mostrados informaes de cada registro, conforme abaixo.
TabSmart
campo 1 campo 2 campo 3 campo 4 campo 5 -

CampoItem
Numero Spool
Nome User
Hora gerao Spool
Hora eliminao Spool
Dispositivo Saida

CampoTabelaTransp.
RQIDENT
RQOWNER
RQCRETIME
RQDELTIME
RQDEST

Portanto temos que vamos criar essas 5 colunas nessa categoria de linha,
o que tambm muito fcil, depois de criar a tabela na Janela principal
vamos clicar no boto 'Linhas e colunas' um lpis que est na aba
'Tabelas', e delimitar o tamanho de cada campo, caso queira fazer algo com
medidas um pouco mais exatas s clicar no boto 'Detalhes' e escrever o
tamanho das colunas que vo ficar os valores, pra voltar na tela anterior
s clicar no boto 'Table Painter' veja imagem e v se ajuda alguma coisa.

Na tabela da Janela principal iremos trabalhar com as informaes da tabela


de item, para fazer esse 'Link' v na aba 'Dados' digite o nome da tabela e
o nome da estrutura que vai receber o mesmo, tipo o comando 'READ TABLE',
reparem nas janelinhas 'Condio WHERE' e 'Critrios de Ordenao',
o Smartforms uma ferramenta bem completa.

Voltando na aba 'Tabela' reparem que no espao que riscamos as limitaes


de cada linha est escrito '%LTYPE1' esse o nome da sua categoria de linha,
agora vamos criar uma linha( Entrada tabela ) igual a tabela que passamos,
s que agora quando informarmos a categoria dessa linha ser gerada
5 celulas ( colunas )abaixo da mesma, e em cada uma delas vamos criar um texto

e em cada texto vamos colocar um campo da estrutura que ir receber os dados


tabela de itens que colocamos na aba 'Dados' anteriormente, faam conforme a
imagem abaixo e conforme a tabelinha que eu informei acima.

Ative, Ufa, parece que acabamos a parte de desenho, agora vamos pra nossa
razo de viver, os cdigos, to brincando, a parte dos cdigos vamos no prximo
post porque se eu to cansado de escrever vocs devem estar cansado jah de ler,
portanto, proximo post sobre o programa que chama o Smart e alguns comentrios
pertinentes ao assunto Smartforms, e depois vamos comear a entrar um pouco
mais fundo no assunto. Bons Estudos e vamo l rapaziada, qualquer duvida estou
a disposio, tentarei responder o mximo no menor prazo possvel.

Postado por Mauro Luiz Junior s 05:44


Marcadores: ABAP, Smartforms, Transaes

6 comentrios:
1.

Vincius de Morais Mussato11 de setembro de 2012 10:17


Excelente post. No aguardo da parte 2 :)
Responder

2.
Mauro Luiz Junior12 de setembro de 2012 06:49
Logo Mais...
Responder

3.

Al Henrique25 de setembro de 2012 07:44


Isso ae Mauro, s alegria.
Responder

4.
Annimo11 de abril de 2013 10:58
Muito
bom
Somente uma ressalva... como eu defino o tamanho do logo ?

mesmo!

Responder

5.
Mauro Luiz Junior6 de maio de 2013 06:32
Fala Mano, na hora que voc tiver atribuindo a imagem ao objeto grfico do seu Smartforms,
voc vai precisar colocar, NOME , OBJETO e ID.... Logo abaixo vai ter um frame Escrito...
'Caractersticas tcnicas' Na resoluo, dependendo do valor que colocar a imagem aumenta
ou
diminui.
Espero ter ajudado.
Responder

6.
Fernando Silva31 de julho de 2015 06:47
Mauro, parabns pelos posts... esse foi meio difcil de acompanhar, mas estou tentando!
hahaha... vou ver a parte 2! Valeu!

Smartforms - Passo a Passo - Parte II


* Olha ai, essa e a segunda parte sobre Smartforms onde agora falaremos
* sobre o programa que ir chamar e popular seu Smartforms.
* lembrando que depois desse passo iremos deixar esse mesmo Smart com
* uma cara de documento mesmo, e no esse rascunho de nada que fizemos,
* faremos tratativas de dados internos, criaremos mas parametros de
* Importao e tabelas, sem conta o Estilo que mostrei num proximo post.*
*&---------------------------------------------------------------------*
REPORT z_prog_call_smartforms.
DATA :
it_tsp01
TYPE TABLE OF tsp01,
vl_fm_name TYPE rs38l_fnam.CONSTANTS :
* Aqui vos coloquem o nome do Smartforms de vocs.
c_form TYPE rs38l_fnam VALUE 'ZSD_TESTE2'.

START-OF-SELECTION.
SELECT *
FROM tsp01
INTO TABLE it_tsp01
WHERE rqowner = sy-uname.
BREAK-POINT.

Bons estudos.

* Eu mantive os comentrios do Post sobre essa funo. Good Luck.


IF it_tsp01 IS NOT INITIAL.
*

Executada a funo que retorna o nome da funo que chama o formulrio


PERFORM z_busca_nome_function.

* Executa o function que chama o formulrio.


PERFORM z_call_form.
ENDIF.

*&---------------------------------------------------------------------*
*&
Form z_busca_nome_function
*&---------------------------------------------------------------------*
FORM z_busca_nome_function .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname
= c_form
*
VARIANT
= ' '
*
DIRECT_CALL
= ' '
IMPORTING
fm_name
= vl_fm_name
EXCEPTIONS
no_form
= 1
no_function_module
= 2
OTHERS
= 3
.

ENDFORM.
" z_busca_nome_function
*&---------------------------------------------------------------------*
*&
Form z_call_form
*&---------------------------------------------------------------------*
FORM z_call_form .* Uma diquinha pra que voc traga todos os parametros corretos
executar
* o smartforms, quando voc apertar F8 ele ira para a transao se37 com
* funo j escrita no campo do nome da funo, copie o nome daquela funo,
* volte para esse programa, clique no boto MODELO e e cole o nome da funo,
* mas no se esquea que esse nome de funo temporrio, portanto, depois
* de fazer esse procedimento mude o nome da funo que voc colou pela variavel
* de retorno da funo acima conforme eu fiz abaixo.
CALL FUNCTION vl_fm_name
* EXPORTING
*
ARCHIVE_INDEX
*
ARCHIVE_INDEX_TAB
*
ARCHIVE_PARAMETERS
*
CONTROL_PARAMETERS
*
MAIL_APPL_OBJ
*
MAIL_RECIPIENT
*
MAIL_SENDER
*
OUTPUT_OPTIONS
*
USER_SETTINGS
* IMPORTING
*
DOCUMENT_OUTPUT_INFO
*
JOB_OUTPUT_INFO
*
JOB_OUTPUT_OPTIONS
TABLES
it_tsp01
EXCEPTIONS

=
=
=
=
=
=
=
=
= 'X'
=
=
=
= it_tsp01

formatting_error
= 1
internal_error
= 2
send_error
= 3
user_canceled
= 4
OTHERS
= 5
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM.

" z_call_form