" Cria um arquivo externo conforme 'Filename com as informações da 'Data_tab
p_log = 'C:\Documents and Settings\user\Desktop\arquivo.TXT'. " Exemploooo
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_log " Endereço do arquivo a ser criado
TABLES
data_tab = it_message " Tabela com as informações que irão popular o arquivo
EXCEPTIONS
OTHERS = 17.
terça-feira, 26 de abril de 2011
Função - GUI_UPLOAD
" Pega o arquivo externo relacionado e coloca os dados em uma tabela
" sem trata as informações.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_dest " Endereço completo do arquivo com os dados
TABLES
data_tab = t_line " Tabela interna que receberá os dados.
EXCEPTIONS
OTHERS = 17.
" sem trata as informações.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_dest " Endereço completo do arquivo com os dados
TABLES
data_tab = t_line " Tabela interna que receberá os dados.
EXCEPTIONS
OTHERS = 17.
Função - WS_FILENAME_GET
" A Idéia desta 'Function é muito simples, serve pra conseguir selecionar
" um arquivo externo com a extensão desejada. É usado muito na seleção do
" arquivo para o Batch Input
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' ' " Nome default
def_path = 'C:\' " Pasta default
mask = ',Texto,*.txt,Todos,*.*.' " Formato .txt
" mask = ',Imagem,*.jpeg,Todos,*.*.'" Formato .jpeg
mode = 'O' " S = Save, O = Open
title = 'Arquivo de Entrada'(004) " Titulo da caixa de msg
IMPORTING
filename = p_dest " Endereço completo do arquivo.
EXCEPTIONS
OTHERS
.
" um arquivo externo com a extensão desejada. É usado muito na seleção do
" arquivo para o Batch Input
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' ' " Nome default
def_path = 'C:\' " Pasta default
mask = ',Texto,*.txt,Todos,*.*.' " Formato .txt
" mask = ',Imagem,*.jpeg,Todos,*.*.'" Formato .jpeg
mode = 'O' " S = Save, O = Open
title = 'Arquivo de Entrada'(004) " Titulo da caixa de msg
IMPORTING
filename = p_dest " Endereço completo do arquivo.
EXCEPTIONS
OTHERS
.
Batch Input - Básico
" Vamos agora tentar explicar um Batch Input, sabe quando tem aquele
" funcionário que tem um monte de dados dentro de um arquivo externo como
" um arquivo .xls ou .txt ou qualquer outro formato fora do SAP e este
" funcinário fala que os dados estão dentro de um arquivo e que pra
" cadastrar todos dentro da SAP demoraria dias, nessa hora o funcional
" escuta em sua mente sombria a palavra BATCH INPUT, a primeira coisa
" que o funcional fala é organize todos os dados em um único arquivo
" pulando uma linha por registro e separando os dados por ';' ou 'Space'
" recomendo ';' pois as vezes contem dados com espaço dentro e isso pode
" atrapalhar o processo de Input no Sistema.
" Crie um arquivo que servirá como entrada de dados com as informações:
" 8000000001;nome teste1;rua teste1;São Paulo1;12345671
" 8000000002;nome teste2;rua teste2;São Paulo2;12345672
" Lembrando que a ordem é muito importante pois eh gravado na ordem.
" Tem um outro arquivo muito importante tb, o famoso SHDB contendo o
" mapeamento do processo por este arquivo vc consegue ver quais são os
" dados necessários para realizar com sucesso o processo qualque dúvida
" http://abapjuniores.blogspot.com/2011/04/shdb-basico.html.
" Segue abaixo um programa comentado básico para um batch imput funciona.
*&---------------------------------------------------------------------*
REPORT zmj_batch.
" Tipos ....
TYPES:
" Dados que serão informados pelo arquivo.
BEGIN OF ty_arqui,
cliente TYPE rf02d-kunnr, " Código do Cliente
nome TYPE kna1-name1, " Nome do cliente
rua TYPE kna1-stras, " Rua do cliente
end TYPE kna1-ort01, " Endereço do cliente
tel TYPE kna1-telf1, " telefone do cliente
END OF ty_arqui,
" Batch input nova estrutura do campo de tabela
BEGIN OF ty_bdcdata,
program TYPE bdcdata-program, " Pool de módulos BDC
dynpro TYPE bdcdata-dynpro, " NÚmero de tela BDC
dynbegin TYPE bdcdata-dynbegin, " Início BDC de uma tela
fnam TYPE bdcdata-fnam, " Nome do campo
fval TYPE bdcdata-fval, " Valor do campo BDC
END OF ty_bdcdata,
" Relação informativa do log
BEGIN OF ty_message,
cliente TYPE rf02d-kunnr, " Código do cliente
msgty TYPE message-msgty, " Tipo da mensagem
msgno TYPE message-msgno, " Numero da mensagem
msgtx TYPE message-msgtx, " Descrição da mensagem
END OF ty_message
.
" Tabelas Internas ....
DATA: it_arqui TYPE TABLE OF ty_arqui,
it_bdcdata TYPE TABLE OF ty_bdcdata,
it_msg TYPE TABLE OF bdcmsgcoll WITH HEADER LINE,
it_message TYPE TABLE OF ty_message
.
" Tabela que recebe as informações crua do arquivo que será tratado
DATA: BEGIN OF t_line OCCURS 0,
linha(108) TYPE c,
END OF t_line
.
" Estruturas ...
DATA: st_arqui TYPE ty_arqui,
st_bdcdata TYPE ty_bdcdata,
st_message TYPE ty_message
.
" Variaveis ....
DATA: vg_mode(1) TYPE c VALUE 'N', " informa o Modo do Call Transaction
vg_texto(100) TYPE c, " Texto para o Indicator
vg_s TYPE c VALUE 'S', " Informa o Update do call Transaction
mensg LIKE message VALUE IS INITIAL, " variavel que recebe retorno
msgno LIKE sy-msgno
.
" Tela de Seleção ....
" texto (
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
PARAMETERS: p_dest TYPE string, " Texto ( Arquivo txt: )
p_log TYPE string " Texto ( Arquivo log: )
.
SELECTION-SCREEN END OF BLOCK a.
" Quando for requisitado um valor no 'Parameter faça ...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dest.
PERFORM z_busca_arquivo.
" Quando for requisitado um valor no 'Parameter faça ...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_log.
PERFORM z_mostra_local.
" Começa aki ...
START-OF-SELECTION.
PERFORM: z_baixa_arquivo,
z_trata_arquivo,
z_monta_shdb,
z_manda_arquivo
.
*&---------------------------------------------------------------------*
*& Form z_busca_arquivo
*&---------------------------------------------------------------------*
" Pega o valor contido no parameters e add o texto '.txt' no final assim o
" o nome do arquivo fica com a extensão desejada.
FORM z_busca_arquivo.
CONCATENATE p_dest '.txt' INTO p_dest.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = 'C:\'
mask = ',Texto,*.txt,Todos,*.*.'
mode = 'O'
title = 'Arquivo de Entrada'(004)
IMPORTING
filename = p_dest
EXCEPTIONS
OTHERS.
ENDFORM. " z_busca_local
*&---------------------------------------------------------------------*
*& Form z_mostra_local
*&---------------------------------------------------------------------*
" Mostra o local onde será gravado o arquivo de Log.
FORM z_mostra_local .
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Informar o caminho para gerar o arquivo'
initial_folder = 'C:\'
CHANGING
selected_folder = p_log
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
" Nome do Arquivo do Log contendo o endereço+NOME1+HORA+.TXT.
CONCATENATE p_log '\' sy-uname '_' sy-uzeit '.TXT' INTO p_log
.
ENDFORM. " Z_MOSTRA_LOCAL
*&---------------------------------------------------------------------*
*& Form Z_MONTA_ARQUIVO
*&---------------------------------------------------------------------*
" Pega o arquivo externo relacionado e coloca os dados na 'T_LINE
FORM z_baixa_arquivo.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_dest
TABLES
data_tab = t_line
EXCEPTIONS
OTHERS = 17.
ENDFORM. " Z_MONTA_ARQUIVO
*&---------------------------------------------------------------------*
*& Form Z_TRATA_ARQUIVO
*&---------------------------------------------------------------------*
" Será os dados conforme sequencia de campos e add na tabela principal
FORM z_trata_arquivo.
LOOP AT t_line.
" o Split quebra a linha e separa por delimitador ';' colocando cada dado
" em cada campo sequencialmente.
SPLIT t_line AT ';' INTO: st_arqui-cliente
st_arqui-nome
st_arqui-rua
st_arqui-end
st_arqui-tel
.
" Add registro na tabela.
APPEND st_arqui TO it_arqui.
ENDLOOP.
ENDFORM. " Z_TRATA_ARQUIVO
*&---------------------------------------------------------------------*
*& Form z_monta_shdb
*&---------------------------------------------------------------------*
FORM z_monta_shdb.
LOOP AT it_arqui INTO st_arqui.
" cria uma variavel pra informar qual cliente está porcessando no
" perform z_sapgui_progress_indicator.
CONCATENATE 'Processando o Cliente -' st_arqui-cliente
INTO vg_texto SEPARATED BY space.
" informa o processo atual
PERFORM z_sapgui_progress_indicator USING vg_texto.
" É aki que o bixo pega, lembra dakele arquivo SHDB que enviaram pra vc
" é aki que ele começa a faze sentido, oq nós estamos fazendo aki e criando
" uma tabela com as informações conforme o SHDB só mundando a informação
" que vc quer que mude conforme o registro.
" Depois de terminar os performs z_preenche_bdc vc vai dar uma olhada
" na tabela it_bdcdata pq ela vai estar igualzinha com o SHDB que
" enviaram pra vc.
" Crie um 'Perform pra cada tela que tiver no SHDB.
PERFORM z_preenche_bdc USING:
'X' 'SAPMF02D' '0101',
' ' 'BDC_CURSOR' 'RF02D-D0110',
' ' 'BDC_OKCODE' '/00',
' ' 'RF02D-KUNNR' st_arqui-cliente,
' ' 'RF02D-D0110' 'X'.
PERFORM z_preenche_bdc USING:
'X' 'SAPMF02D' '0110',
' ' 'BDC_CURSOR' 'KNA1-TELF1',
' ' 'BDC_OKCODE' '/00',
' ' 'KNA1-NAME1' st_arqui-nome,
' ' 'KNA1-STRAS' st_arqui-rua,
' ' 'KNA1-ORT01' st_arqui-end,
' ' 'KNA1-TELF1' st_arqui-tel.
PERFORM z_carrega_transacao.
PERFORM z_imprime_mensagem.
CLEAR it_bdcdata.
ENDLOOP.
ENDFORM. " z_monta_shdb
*&---------------------------------------------------------------------*
*& Form Z_PREENCHE_BDC
*&---------------------------------------------------------------------*
" Se Dynbegin = 'X' ele preenche as informações da tela, senão ele preenche
" o campo e o dado dela. prontio.
FORM z_preenche_bdc USING dynbegin
name
value.
IF dynbegin = 'X'.
MOVE: name TO st_bdcdata-program,
value TO st_bdcdata-dynpro,
dynbegin TO st_bdcdata-dynbegin.
APPEND st_bdcdata TO it_bdcdata.
ELSE.
MOVE: name TO st_bdcdata-fnam,
value TO st_bdcdata-fval.
APPEND st_bdcdata TO it_bdcdata.
ENDIF.
" prepara a estrutura para o Loop.
CLEAR st_bdcdata.
ENDFORM. " Z_PREENCHE_BDC
*&---------------------------------------------------------------------*
*& Form Z_CARREGA_TRANSACAO
*&---------------------------------------------------------------------*
FORM z_carrega_transacao .
" Chama a trasação informada usando a tabela 'IT_BDCDATA que na verdade
" é um shdb que vai automátiza o processo até o ultimo registro, existe
" dois metodos de ver o processo, no 'MODE se colocar 'N' vc não visualiza
" o processo, agora se vc coloca 'A' no 'MODE vc terá que apertar 'Enter
" por processo e depois de efetuar o processo por registro ele popula a
" tabela 'IT_MSG com os dados de retorno,se foi realizado com exito, ou se
" deu algum problema.
CALL TRANSACTION 'XD02' USING it_bdcdata
MODE vg_mode
UPDATE vg_s
MESSAGES INTO it_msg
.
ENDFORM. " Z_CARREGA_TRANSACAO
*&---------------------------------------------------------------------*
*& Form Z_IMPRIME_MENSAGEM
*&---------------------------------------------------------------------*
FORM z_imprime_mensagem.
" Dá 'Loop na tabela de retorno da chamada da transação e alimenta outra
" tabela com a retorno referenciado com o Cliente
LOOP AT it_msg.
msgno = it_msg-msgnr.
" Function que faz mostrar a mensagem
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = it_msg-msgid
msgno = msgno
msgty = it_msg-msgtyp
msgv1 = it_msg-msgv1
msgv2 = it_msg-msgv2
msgv3 = it_msg-msgv3
msgv4 = it_msg-msgv4
msgv5 = ' '
IMPORTING
* ERROR =
messg = mensg
* MSGLN =
.
ENDLOOP.
st_message-cliente = st_arqui-cliente.
st_message-msgty = mensg-msgty.
st_message-msgno = mensg-msgno.
st_message-msgtx = mensg-msgtx.
" popula a tabela principal de mensagem que será o Log de erro.
APPEND st_message TO it_message.
* WRITE: / , st_arqui-cliente ,
* mensg-msgtx,
* mensg-msgty
* .
ENDFORM. " Z_IMPRIME_MENSAGEM
*&---------------------------------------------------------------------*
*& Form Z_MANDA_ARQUIVO
*&---------------------------------------------------------------------*
FORM z_manda_arquivo .
" Cria um arquivo externo conforme 'Filename com as informações da 'Data_tab
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_log
TABLES
data_tab = it_message
EXCEPTIONS
OTHERS = 17.
ENDFORM. " Z_MANDA_ARQUIVO
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING texto.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 10
text = texto.
ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR
" Debugem isso, estudem, façam de outra forma pois não eh tão facil assim,
" apertem F1, muda o 'MODE no 'CALL TRANSACTION pra ver processo por processo
" abusem deste programa, olhem abaixo o SHDB possivel para este Batch input,
" provavelmente deve ter mais campo mostrando valores mas nós não precisavamos
" cadatrar outros campos, e qualquer dúvida e soh fala, t+.
" T XD02 BS AA X F
"SAPMF02D 0101 X
" BDC_CURSOR RF02D-D0110
" BDC_OKCODE /00
" RF02D-KUNNR 8000000001
" RF02D-D0110 X
"SAPMF02D 0110 X
" BDC_CURSOR KNA1-TELF1
" BDC_OKCODE /00
" KNA1-NAME1 teste
" KNA1-STRAS rua teste
" KNA1-ORT01 São Paulo
" KNA1-TELF1 12345678
" funcionário que tem um monte de dados dentro de um arquivo externo como
" um arquivo .xls ou .txt ou qualquer outro formato fora do SAP e este
" funcinário fala que os dados estão dentro de um arquivo e que pra
" cadastrar todos dentro da SAP demoraria dias, nessa hora o funcional
" escuta em sua mente sombria a palavra BATCH INPUT, a primeira coisa
" que o funcional fala é organize todos os dados em um único arquivo
" pulando uma linha por registro e separando os dados por ';' ou 'Space'
" recomendo ';' pois as vezes contem dados com espaço dentro e isso pode
" atrapalhar o processo de Input no Sistema.
" Crie um arquivo que servirá como entrada de dados com as informações:
" 8000000001;nome teste1;rua teste1;São Paulo1;12345671
" 8000000002;nome teste2;rua teste2;São Paulo2;12345672
" Lembrando que a ordem é muito importante pois eh gravado na ordem.
" Tem um outro arquivo muito importante tb, o famoso SHDB contendo o
" mapeamento do processo por este arquivo vc consegue ver quais são os
" dados necessários para realizar com sucesso o processo qualque dúvida
" http://abapjuniores.blogspot.com/2011/04/shdb-basico.html.
" Segue abaixo um programa comentado básico para um batch imput funciona.
*&---------------------------------------------------------------------*
REPORT zmj_batch.
" Tipos ....
TYPES:
" Dados que serão informados pelo arquivo.
BEGIN OF ty_arqui,
cliente TYPE rf02d-kunnr, " Código do Cliente
nome TYPE kna1-name1, " Nome do cliente
rua TYPE kna1-stras, " Rua do cliente
end TYPE kna1-ort01, " Endereço do cliente
tel TYPE kna1-telf1, " telefone do cliente
END OF ty_arqui,
" Batch input nova estrutura do campo de tabela
BEGIN OF ty_bdcdata,
program TYPE bdcdata-program, " Pool de módulos BDC
dynpro TYPE bdcdata-dynpro, " NÚmero de tela BDC
dynbegin TYPE bdcdata-dynbegin, " Início BDC de uma tela
fnam TYPE bdcdata-fnam, " Nome do campo
fval TYPE bdcdata-fval, " Valor do campo BDC
END OF ty_bdcdata,
" Relação informativa do log
BEGIN OF ty_message,
cliente TYPE rf02d-kunnr, " Código do cliente
msgty TYPE message-msgty, " Tipo da mensagem
msgno TYPE message-msgno, " Numero da mensagem
msgtx TYPE message-msgtx, " Descrição da mensagem
END OF ty_message
.
" Tabelas Internas ....
DATA: it_arqui TYPE TABLE OF ty_arqui,
it_bdcdata TYPE TABLE OF ty_bdcdata,
it_msg TYPE TABLE OF bdcmsgcoll WITH HEADER LINE,
it_message TYPE TABLE OF ty_message
.
" Tabela que recebe as informações crua do arquivo que será tratado
DATA: BEGIN OF t_line OCCURS 0,
linha(108) TYPE c,
END OF t_line
.
" Estruturas ...
DATA: st_arqui TYPE ty_arqui,
st_bdcdata TYPE ty_bdcdata,
st_message TYPE ty_message
.
" Variaveis ....
DATA: vg_mode(1) TYPE c VALUE 'N', " informa o Modo do Call Transaction
vg_texto(100) TYPE c, " Texto para o Indicator
vg_s TYPE c VALUE 'S', " Informa o Update do call Transaction
mensg LIKE message VALUE IS INITIAL, " variavel que recebe retorno
msgno LIKE sy-msgno
.
" Tela de Seleção ....
" texto (
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
PARAMETERS: p_dest TYPE string, " Texto ( Arquivo txt: )
p_log TYPE string " Texto ( Arquivo log: )
.
SELECTION-SCREEN END OF BLOCK a.
" Quando for requisitado um valor no 'Parameter faça ...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dest.
PERFORM z_busca_arquivo.
" Quando for requisitado um valor no 'Parameter faça ...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_log.
PERFORM z_mostra_local.
" Começa aki ...
START-OF-SELECTION.
PERFORM: z_baixa_arquivo,
z_trata_arquivo,
z_monta_shdb,
z_manda_arquivo
.
*&---------------------------------------------------------------------*
*& Form z_busca_arquivo
*&---------------------------------------------------------------------*
" Pega o valor contido no parameters e add o texto '.txt' no final assim o
" o nome do arquivo fica com a extensão desejada.
FORM z_busca_arquivo.
CONCATENATE p_dest '.txt' INTO p_dest.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path = 'C:\'
mask = ',Texto,*.txt,Todos,*.*.'
mode = 'O'
title = 'Arquivo de Entrada'(004)
IMPORTING
filename = p_dest
EXCEPTIONS
OTHERS.
ENDFORM. " z_busca_local
*&---------------------------------------------------------------------*
*& Form z_mostra_local
*&---------------------------------------------------------------------*
" Mostra o local onde será gravado o arquivo de Log.
FORM z_mostra_local .
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Informar o caminho para gerar o arquivo'
initial_folder = 'C:\'
CHANGING
selected_folder = p_log
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
" Nome do Arquivo do Log contendo o endereço+NOME1+HORA+.TXT.
CONCATENATE p_log '\' sy-uname '_' sy-uzeit '.TXT' INTO p_log
.
ENDFORM. " Z_MOSTRA_LOCAL
*&---------------------------------------------------------------------*
*& Form Z_MONTA_ARQUIVO
*&---------------------------------------------------------------------*
" Pega o arquivo externo relacionado e coloca os dados na 'T_LINE
FORM z_baixa_arquivo.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_dest
TABLES
data_tab = t_line
EXCEPTIONS
OTHERS = 17.
ENDFORM. " Z_MONTA_ARQUIVO
*&---------------------------------------------------------------------*
*& Form Z_TRATA_ARQUIVO
*&---------------------------------------------------------------------*
" Será os dados conforme sequencia de campos e add na tabela principal
FORM z_trata_arquivo.
LOOP AT t_line.
" o Split quebra a linha e separa por delimitador ';' colocando cada dado
" em cada campo sequencialmente.
SPLIT t_line AT ';' INTO: st_arqui-cliente
st_arqui-nome
st_arqui-rua
st_arqui-end
st_arqui-tel
.
" Add registro na tabela.
APPEND st_arqui TO it_arqui.
ENDLOOP.
ENDFORM. " Z_TRATA_ARQUIVO
*&---------------------------------------------------------------------*
*& Form z_monta_shdb
*&---------------------------------------------------------------------*
FORM z_monta_shdb.
LOOP AT it_arqui INTO st_arqui.
" cria uma variavel pra informar qual cliente está porcessando no
" perform z_sapgui_progress_indicator.
CONCATENATE 'Processando o Cliente -' st_arqui-cliente
INTO vg_texto SEPARATED BY space.
" informa o processo atual
PERFORM z_sapgui_progress_indicator USING vg_texto.
" É aki que o bixo pega, lembra dakele arquivo SHDB que enviaram pra vc
" é aki que ele começa a faze sentido, oq nós estamos fazendo aki e criando
" uma tabela com as informações conforme o SHDB só mundando a informação
" que vc quer que mude conforme o registro.
" Depois de terminar os performs z_preenche_bdc vc vai dar uma olhada
" na tabela it_bdcdata pq ela vai estar igualzinha com o SHDB que
" enviaram pra vc.
" Crie um 'Perform pra cada tela que tiver no SHDB.
PERFORM z_preenche_bdc USING:
'X' 'SAPMF02D' '0101',
' ' 'BDC_CURSOR' 'RF02D-D0110',
' ' 'BDC_OKCODE' '/00',
' ' 'RF02D-KUNNR' st_arqui-cliente,
' ' 'RF02D-D0110' 'X'.
PERFORM z_preenche_bdc USING:
'X' 'SAPMF02D' '0110',
' ' 'BDC_CURSOR' 'KNA1-TELF1',
' ' 'BDC_OKCODE' '/00',
' ' 'KNA1-NAME1' st_arqui-nome,
' ' 'KNA1-STRAS' st_arqui-rua,
' ' 'KNA1-ORT01' st_arqui-end,
' ' 'KNA1-TELF1' st_arqui-tel.
PERFORM z_carrega_transacao.
PERFORM z_imprime_mensagem.
CLEAR it_bdcdata.
ENDLOOP.
ENDFORM. " z_monta_shdb
*&---------------------------------------------------------------------*
*& Form Z_PREENCHE_BDC
*&---------------------------------------------------------------------*
" Se Dynbegin = 'X' ele preenche as informações da tela, senão ele preenche
" o campo e o dado dela. prontio.
FORM z_preenche_bdc USING dynbegin
name
value.
IF dynbegin = 'X'.
MOVE: name TO st_bdcdata-program,
value TO st_bdcdata-dynpro,
dynbegin TO st_bdcdata-dynbegin.
APPEND st_bdcdata TO it_bdcdata.
ELSE.
MOVE: name TO st_bdcdata-fnam,
value TO st_bdcdata-fval.
APPEND st_bdcdata TO it_bdcdata.
ENDIF.
" prepara a estrutura para o Loop.
CLEAR st_bdcdata.
ENDFORM. " Z_PREENCHE_BDC
*&---------------------------------------------------------------------*
*& Form Z_CARREGA_TRANSACAO
*&---------------------------------------------------------------------*
FORM z_carrega_transacao .
" Chama a trasação informada usando a tabela 'IT_BDCDATA que na verdade
" é um shdb que vai automátiza o processo até o ultimo registro, existe
" dois metodos de ver o processo, no 'MODE se colocar 'N' vc não visualiza
" o processo, agora se vc coloca 'A' no 'MODE vc terá que apertar 'Enter
" por processo e depois de efetuar o processo por registro ele popula a
" tabela 'IT_MSG com os dados de retorno,se foi realizado com exito, ou se
" deu algum problema.
CALL TRANSACTION 'XD02' USING it_bdcdata
MODE vg_mode
UPDATE vg_s
MESSAGES INTO it_msg
.
ENDFORM. " Z_CARREGA_TRANSACAO
*&---------------------------------------------------------------------*
*& Form Z_IMPRIME_MENSAGEM
*&---------------------------------------------------------------------*
FORM z_imprime_mensagem.
" Dá 'Loop na tabela de retorno da chamada da transação e alimenta outra
" tabela com a retorno referenciado com o Cliente
LOOP AT it_msg.
msgno = it_msg-msgnr.
" Function que faz mostrar a mensagem
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = it_msg-msgid
msgno = msgno
msgty = it_msg-msgtyp
msgv1 = it_msg-msgv1
msgv2 = it_msg-msgv2
msgv3 = it_msg-msgv3
msgv4 = it_msg-msgv4
msgv5 = ' '
IMPORTING
* ERROR =
messg = mensg
* MSGLN =
.
ENDLOOP.
st_message-cliente = st_arqui-cliente.
st_message-msgty = mensg-msgty.
st_message-msgno = mensg-msgno.
st_message-msgtx = mensg-msgtx.
" popula a tabela principal de mensagem que será o Log de erro.
APPEND st_message TO it_message.
* WRITE: / , st_arqui-cliente ,
* mensg-msgtx,
* mensg-msgty
* .
ENDFORM. " Z_IMPRIME_MENSAGEM
*&---------------------------------------------------------------------*
*& Form Z_MANDA_ARQUIVO
*&---------------------------------------------------------------------*
FORM z_manda_arquivo .
" Cria um arquivo externo conforme 'Filename com as informações da 'Data_tab
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_log
TABLES
data_tab = it_message
EXCEPTIONS
OTHERS = 17.
ENDFORM. " Z_MANDA_ARQUIVO
*&---------------------------------------------------------------------*
*& Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING texto.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 10
text = texto.
ENDFORM. " Z_SAPGUI_PROGRESS_INDICATOR
" Debugem isso, estudem, façam de outra forma pois não eh tão facil assim,
" apertem F1, muda o 'MODE no 'CALL TRANSACTION pra ver processo por processo
" abusem deste programa, olhem abaixo o SHDB possivel para este Batch input,
" provavelmente deve ter mais campo mostrando valores mas nós não precisavamos
" cadatrar outros campos, e qualquer dúvida e soh fala, t+.
" T XD02 BS AA X F
"SAPMF02D 0101 X
" BDC_CURSOR RF02D-D0110
" BDC_OKCODE /00
" RF02D-KUNNR 8000000001
" RF02D-D0110 X
"SAPMF02D 0110 X
" BDC_CURSOR KNA1-TELF1
" BDC_OKCODE /00
" KNA1-NAME1 teste
" KNA1-STRAS rua teste
" KNA1-ORT01 São Paulo
" KNA1-TELF1 12345678
segunda-feira, 25 de abril de 2011
SHDB - Básico
" Um SHDB e nada mais nada menos que um mapeamento do processo feito dentro
" de uma transação, serve para informar as coordenadas para um Batch Input.
" Na verdade esta informação tem que vir do funcional mas caso de algum
" erro no batch input durante a gravação vc mesmo pode ir na transação e criar
" um SHDB para verificar a e comparar se o funcional se equivocou.
" Criar um SHDB é muito facil, primeiro entre na transação SHDB, clique no
" botão 'Nova Gravação e aparecerá uma na tela.
" Nela preencha o 'Registro com o nome que quiser ( seja Organizado )
" e colocar a transação no 'Código da transação, clique em 'Executar registro,
" agora eh soh realizar o processo normal dentro da transação q quando
" terminar ele irá mostrar um arquivo contendo todos os campos, telas e
" informações usadas durante o seu processo, ai é soh copiar ( Crtl+Y )
" e colar num arquivo .txt ( caso precise ).
" de uma transação, serve para informar as coordenadas para um Batch Input.
" Na verdade esta informação tem que vir do funcional mas caso de algum
" erro no batch input durante a gravação vc mesmo pode ir na transação e criar
" um SHDB para verificar a e comparar se o funcional se equivocou.
" Criar um SHDB é muito facil, primeiro entre na transação SHDB, clique no
" botão 'Nova Gravação e aparecerá uma na tela.
" Nela preencha o 'Registro com o nome que quiser ( seja Organizado )
" e colocar a transação no 'Código da transação, clique em 'Executar registro,
" agora eh soh realizar o processo normal dentro da transação q quando
" terminar ele irá mostrar um arquivo contendo todos os campos, telas e
" informações usadas durante o seu processo, ai é soh copiar ( Crtl+Y )
" e colar num arquivo .txt ( caso precise ).
quarta-feira, 20 de abril de 2011
Função - CONVERSION_EXIT_PDATE_OUTPUT
" Função usada para converter a data padrão americano pra versão brasileira,
" usa bastante isso pra mostra pro usuário na forma que ele entenda.
report zmj_func_003.
" Caso o 'Vg_input seja do tipo 'dats ou 'sy-datum vc não vai precisar
" nem chamar a função pois a SAP já muda conforme a lingua do sistema
" na hora de dar um 'Write
data : vg_input(8) type c ,
vg_output like vg_input
.
vg_input = '20111230'.
CALL FUNCTION 'CONVERSION_EXIT_PDATE_OUTPUT'
EXPORTING
input = vg_input " Valor a ser alterada
importing
output = vg_output " Valor alterado
.
write :
vg_input ,
/, vg_output
.
" usa bastante isso pra mostra pro usuário na forma que ele entenda.
report zmj_func_003.
" Caso o 'Vg_input seja do tipo 'dats ou 'sy-datum vc não vai precisar
" nem chamar a função pois a SAP já muda conforme a lingua do sistema
" na hora de dar um 'Write
data : vg_input(8) type c ,
vg_output like vg_input
.
vg_input = '20111230'.
CALL FUNCTION 'CONVERSION_EXIT_PDATE_OUTPUT'
EXPORTING
input = vg_input " Valor a ser alterada
importing
output = vg_output " Valor alterado
.
write :
vg_input ,
/, vg_output
.
Função - RZL_SLEEP
" Função muito utilizada junto com o 'SAPGUI_PROGRESS_INDICATOR',
" onde chamando estah função ele faz esperar durante um tempo de
" 0 a 5 segundos, não sei pra que serviria em outra coisa mas tah ai.
CALL FUNCTION 'RZL_SLEEP'
EXPORTING
SECONDS = 1 " Qtde de segundos à esperar
EXCEPTIONS
ARGUMENT_ERROR = 1 " O erro que dara
OTHERS = 2 " Retorno caso não seja nenhum das opções
.
" onde chamando estah função ele faz esperar durante um tempo de
" 0 a 5 segundos, não sei pra que serviria em outra coisa mas tah ai.
CALL FUNCTION 'RZL_SLEEP'
EXPORTING
SECONDS = 1 " Qtde de segundos à esperar
EXCEPTIONS
ARGUMENT_ERROR = 1 " O erro que dara
OTHERS = 2 " Retorno caso não seja nenhum das opções
.
Função - SAPGUI_PROGRESS_INDICATOR
" Agora que nós sabemos fazer uma 'function vamos agora aprender a trabalhar
" com elas, (caso não saiba http://abapjuniores.blogspot.com/2011/04/funcao-basico.html)
" vou usar de exemplo uma função chamada SAPGUI_PROGRESS_INDICATOR,
" que uma função standard que serve para interação com o usuário informando
" em qualquer parte do processo um texto na barra inferior esquerdo,
" primeiro como sempre colocar essa 'function dentro de um Perform, no caso
" dessa 'Function usaremos o 'Using no Perform pq dependendo do processo o
" texto vai mudar. Dentro do 'Form clicar no botão 'MODELO' que fica ao lado
" do 'Pretty Printer' e nele abrirá um campo com a descrição de 'Call Function
" coloque o nome da função standart ou criado e aperte 'Enter.
" Assim é mais fácil porque ele mostra todas as variáveis onde as
" opcionais estão comentadas e ai e só descomentar e relacionar ela com
" alguma variável ou qualquer outra coisa que tenha o valor requerido ou
" até mesmo o proprio valor.
report zmj_func_001.
" Tabelas .....
tables : bsak
.
" Tipos .....
types :
begin of ty_bsak,
bukrs type bsak-bukrs, " Empresa
lifnr type bsak-lifnr, " Nº conta do fornecedor
augdt type bsak-augdt, " tabela de contabilidade
end of ty_bsak
.
" Estruturas ....
data : st_bsak type ty_bsak
.
" Tabelas internas .....
data : it_bsak type table of ty_bsak
.
" Constantes .....
constants : c_re(2) type c value 'RE'.
" Tela de seleção ....
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_bukrs FOR bsak-bukrs no intervals " Empresa
.
SELECTION-SCREEN END OF BLOCK b01.
" Initialization ....
perform seleciona_dados.
*&---------------------------------------------------------------------*
*& Form SELECIONA_DADOS
*&---------------------------------------------------------------------*
form SELECIONA_DADOS .
perform SAPGUI_PROGRESS_INDICATOR using 'Processo 1'.
* Seleciona os dados da tabela 'BSAK e coloca na tabela interna 'IT_BSAK
* conforme criterios de seleção pela tela.
SELECT bukrs " Empresa
lifnr " Nº conta do fornecedor
augdt " Data de compensação
FROM bsak " tabela de contabilidade
INTO TABLE it_bsak " Tabla Interna
WHERE bukrs IN so_bukrs " Empresa
AND blart = c_re. " Tipo de documento
endform. " SELECIONA_DADOS
*&---------------------------------------------------------------------*
*& Form SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
form SAPGUI_PROGRESS_INDICATOR using p_process.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 10 " Velo do reloginho em %
TEXT = p_process " Texto que aparecerá
.
endform. " SAPGUI_PROGRESS_INDICATOR
" Agora é soh executar e ver a mensagem que a aparece na barra inferior,
" eu uso ele principalmente quando o código tem varios processos e quero
" ver oq o programa tah fazendo...
" Espero que tenham entendido até o proximo Post.
" com elas, (caso não saiba http://abapjuniores.blogspot.com/2011/04/funcao-basico.html)
" vou usar de exemplo uma função chamada SAPGUI_PROGRESS_INDICATOR,
" que uma função standard que serve para interação com o usuário informando
" em qualquer parte do processo um texto na barra inferior esquerdo,
" primeiro como sempre colocar essa 'function dentro de um Perform, no caso
" dessa 'Function usaremos o 'Using no Perform pq dependendo do processo o
" texto vai mudar. Dentro do 'Form clicar no botão 'MODELO' que fica ao lado
" do 'Pretty Printer' e nele abrirá um campo com a descrição de 'Call Function
" coloque o nome da função standart ou criado e aperte 'Enter.
" Assim é mais fácil porque ele mostra todas as variáveis onde as
" opcionais estão comentadas e ai e só descomentar e relacionar ela com
" alguma variável ou qualquer outra coisa que tenha o valor requerido ou
" até mesmo o proprio valor.
report zmj_func_001.
" Tabelas .....
tables : bsak
.
" Tipos .....
types :
begin of ty_bsak,
bukrs type bsak-bukrs, " Empresa
lifnr type bsak-lifnr, " Nº conta do fornecedor
augdt type bsak-augdt, " tabela de contabilidade
end of ty_bsak
.
" Estruturas ....
data : st_bsak type ty_bsak
.
" Tabelas internas .....
data : it_bsak type table of ty_bsak
.
" Constantes .....
constants : c_re(2) type c value 'RE'.
" Tela de seleção ....
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_bukrs FOR bsak-bukrs no intervals " Empresa
.
SELECTION-SCREEN END OF BLOCK b01.
" Initialization ....
perform seleciona_dados.
*&---------------------------------------------------------------------*
*& Form SELECIONA_DADOS
*&---------------------------------------------------------------------*
form SELECIONA_DADOS .
perform SAPGUI_PROGRESS_INDICATOR using 'Processo 1'.
* Seleciona os dados da tabela 'BSAK e coloca na tabela interna 'IT_BSAK
* conforme criterios de seleção pela tela.
SELECT bukrs " Empresa
lifnr " Nº conta do fornecedor
augdt " Data de compensação
FROM bsak " tabela de contabilidade
INTO TABLE it_bsak " Tabla Interna
WHERE bukrs IN so_bukrs " Empresa
AND blart = c_re. " Tipo de documento
endform. " SELECIONA_DADOS
*&---------------------------------------------------------------------*
*& Form SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
form SAPGUI_PROGRESS_INDICATOR using p_process.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 10 " Velo do reloginho em %
TEXT = p_process " Texto que aparecerá
.
endform. " SAPGUI_PROGRESS_INDICATOR
" Agora é soh executar e ver a mensagem que a aparece na barra inferior,
" eu uso ele principalmente quando o código tem varios processos e quero
" ver oq o programa tah fazendo...
" Espero que tenham entendido até o proximo Post.
Função - Básico
" A Partir de hoje estaremos postando sobre 'Functions, bem para quem não
" sabe, 'Function é uma ferramenta usada para otimizar programas como rotinas
" podendo ser usado em varios programas ao mesmo tempo.
" Na teoria eh meio complicado, mas vcs vão ver que eh mou de boua, primeira
" coisa vou mostrar um Passo a Passo de como fazer uma 'Function e depois eu
" eu dou varios exemplos de 'functions que já vem da SAP, principalmente as
" mais usadas.
" Primeiro para ter uma 'function temos que ter um 'Grupo de funções onde é
" ir no se80, colocar Grupo de funções, colocar o nome e dar Enter, nessa
" hora ele ira informar que não existe ai e só preencher os campos e pronto,
" agora pra criar uma 'Function e soh clicar com o botão direito do mouse
" sobre o grupo de funções criada agora e criar uma função, mas aki nós
" vamos trabalhar com o se37 pois é quase uma obrigação saber usar bem esta
" transação.
" Na SE37 coloque o nome da 'Function e clique em Criar, o sistema irá
" informar que não existe então aparecerá uma tela onde vc deve colocar
" o grupo de função ( que eu espero que já tenha sido criado ) e clicar em
" Gravar.
" Dentro da função existe algumas abas uma delas é a 'Importing onde vc
" deve colocar aki todas as variáveis que o seu programa irá enviar para
" a função e na aba 'Exporting colocar todas as variaveis que a função irá
" exportar depois da execução.
" Repare bem nas propriedades preenchidas de cada campo dentro das abas
" 'Importing e 'Exporting onde está "Op..." seria 'Opcional que significa
" que para o funcionamento da 'Functions ela não precisa necessariamente
" que está variavel contenha valor e onde está " Tra..." seria 'Tranferivel.
" Caso tenha alguma variável que será modificado durante a execução, colocar
" na aba 'Modify.
" Caso vc tenha alguma tabela interna no programa que vá usar na sua 'function
" declarar ela na aba 'tables, lembrando que está tabela pode ser tipo uma
" estrutura "Z como tb qualquer coisa standart.
" Em Exceções serão colocadas às mensagens que a função irá retornar.
" Em 'Texto fonte' deverá ser codificado em ABAP normalmente, onde é
" só colocar o código abaixo é ver oq acontece.
FUNCTION Z_CRIAR_FUNCAO.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(V_MATNR) LIKE MARA-MATNR
*" EXPORTING
*" REFERENCE(V_MAKTX) LIKE MAKT-MAKTX
*" TABLES
*" T_TELA STRUCTURE ZCRIAR_ESTRUT OPTIONAL
*" EXCEPTIONS
*" MATERIAL_INEXISTENTE
*"----------------------------------------------------------------------
REFRESH: t_tela.
CLEAR t_tela.
SELECT matnr werks
INTO TABLE t_tela
FROM marc
WHERE matnr = v_matnr.
IF sy-subrc NE 0.
RAISE Material_Inexistente.
ENDIF.
SELECT SINGLE maktx
INTO v_maktx
FROM makt
WHERE spras = sy-langu and
matnr = v_matnr.
LOOP AT t_tela.
t_tela-maktx = v_maktx.
MODIFY t_tela.
ENDLOOP.
ENDFUNCTION.
" Salve, Ative e aperte F8 para testar onde aparecerá essa tela.
" E digite um Nº de material valido, caso contrario aparece mensagem
" de retorno.
" Portanto daki por diante se precisar uma descrição de material
" pelo numero do material informado é soh usar essa função, rsrs,
" t+ e qualquer coisa comentem.
segunda-feira, 18 de abril de 2011
Module Pool - Básico
" Vou tentar comentar como faze um 'Module Pool simples o sulficiente pra
" fala que um dia fez um, vou tentar ser um pouco mais didádico.
" 'Module Pool ou programa online É uma ferramenta da SAP para interação
" de com o usuário.
" Existem duas maneiras de Cria um 'OnLine seria pelo se38 ( editor ABAP
" normal ) se41 (MenuPainter) se51(Screen Painter) mas isso eh soh pra sabe
" pq na verdade vc vai usa o se80 ( Object Navigator ) pq vc fika vendo a
" arvore do esquema todo que vc tah criando, 'Includes, 'Campos, ' Modulos,
" 'Telas e mais um monte de coisa que faz o se80 fika bem mais vantajoso.
" Vamo lah então step by step,
" Na se80 clique com o botão direito do mouse no na pastinha de programa e crie
" um novo programa e muito importante vc seguir a nomenclatura padrão SAP
" que seria conforme exemplo SAPMZSD0001 onde o 'SAP' é nome padrão, 'M' indica
" que é 'Module Pool, 'SD' indica pra que Modulo está sendo feita este 'Module,
" a partir daki seguir a metodologia utilizada pelo cliente ou ambiente.
" Escolha a opção com 'Include Top pq assim os includes vão ser declarados
" automaticamente, a SAP irá sugerir um nome, o mais indicado é aceitar, nos
" atributos do programa preencha o tipo de programa com 'Pool de modulos' .
" Num 'Online existem 4 principais 'Includes que serão utilizados durante
" todo o processo que ficam no programa principal já veêm escrito no código
" mas esta comentando portando soh descomente e clique duas vezes para criar,
" siga o padrão de nomenclatura que a SAP coloca no comentario:
" Nomenclatura : Include TOP - TOP / Include PBO - O01 / Include PAI - I01
" / Include Performs - f01.
" Include TOP - serve pra vc coloca todas as declarações que será usado no
" programa como variáveis, tipos, estrutura, tabelas internas, constantes etc.
" Include PBO - Serão armazenados todos os Modules PBO que são todas as
" rotinas para a preparação das informações e/ou elementos da tela antes
" da sua exibição.
" Include PAI - Serão armazenados todos os Modules PAI que são todas as
" rotinas de tratamento das ações ( comando do usuário ) que foram
" executados na tela.
" Include Performs - Onde vai fika todos os performs que vc cria.
" Agora nós estamos quase terminando, rsrs, vixi tem muita coisa ainda,
" vamos criar as telas agora, é a parte que o usuário visualiza os campos
" que tem que ser preenchido.
" Clique com o botão direito no nome do programa criar/ tela de um numero
" pra essa tela que servirá como referencia para chamar apos numero da tela
" confirme e coloque a descrição da tela e salve.
" ( a SAP recomenda usar o numero da tela de 9000 a 9999 indicando que
" a tela criada é uma tela 'Z' ( criada por nois mortais ))
" Após gravar a tela irá aparecer na arvore de objetos do programa,
" Toda ação feita na tela do programa faz retornar um valor , o
" código de função, Para saber que valor é esse, deve-se definir um
" campo OK_CODE como um campo da tela, o qual receberá o valor desse código
" e assim tomando as ações relacionadas a ela, Portanto defina uma variavel
" do tipo sy-ucomm e atribua ao campo Ok_code da tela.
" Caso queira fazer uma validação nos valores que foram informados na tela
" e informar ao usuário de que algo não está correto, deve se usar o comando
" 'Field, com a adição de uma chamada para o 'Module, isso significa que o
" referido modulo é somente executado para o campo especificado no codigo.
" Se quiser fazer uma validação em muitos campos é só reunir todos os
" campos dentro de um bloco de comandos ('Chain / EndChain'), um mesmo
" campo pode ser chamados em blocos de comandos diferentes.
" Podemos querer que chame o 'Module somente se o conteudo do campo for
" alterado usando o parâmetro 'On input na chamada do 'Module, ou então
" chamar o 'Module se o conteudo de algum dos campos dentro do bloco
" usando o parâmetro 'On chain-imput.
" O parâmetro adicional 'At exit-command, faz com que o 'Module sejá
" processado antes das verificações automaticas de entrada (PAI).
" Existe o famoso 'Status_gui que serve para customiza as barrinhas
" com os botões, menus como o botão de ativar, salvar, voltar, modelo
" e todos os outros botões que ficam encima quando vc tah programando,
" primeiro vc tem que criar o Status-gui clicando com o botão direito
" do mouse no nome do programa e ir em criar / status gui informe o
" nome do status, coloque um texto breve e no tipo de sttatus deixe como
" Status dialog mesmo e avance.
" Recomendo sempre definir primeiro as funções standard da barra 'ToolBar
" que seriam os botões Voltar / Sair / Cancelar na teclas de função onde
" vc ativa estes botões só colocando o nome neles.
" Agora com o 'Status-gui pronto nós devemos associar para uma tela onde
" é só descomentar o 'Module status_(nº tela), dar um duplo clique para
" criar o 'Module adicionando-o no PBO, dentro do 'Module coloque
" 'Set Pf-Status '(nome do status-gui criado) descomentando a linha rsrs,
" vcs viram que o SAP ajuda muito a gente pq tudo no 'Module pool e meio
" pré-definido bom pra gente rsrs.
" Um Online pode utilizar varias telas é para chamá-las e só usarmos
" set screen : para atualizar a proxima tela temporariamente, e
" call screen : para inserir um processamento de uma ou mais telas antes
" da tela atual.
" Leave to screen : Sai da tela atual ou indicada caso sejá descrita
" no código.
" Existem tb as subtelas que são areas reservadas dentro da tela principal
" para outra tela, a diferença eh que ela não tem OK_CODE, nas caracteristicas
" ela eh definida como SUBTELA.
" Existe um recurso muito utilizado que se chama 'Table control que serve
" pra mostra e edita dados de uma tabela dentro de uma tela, o 'Table control
" e tipo um quadro adicionado no 'Screen Painter ( akele botão chamado
" layout que fica do lado do 'pretty Printer na tela que vc tá mexendo ),
" para trabalhar com ela eh muito simples,
" Existe com wizard mas aih nós não vamos aprender nada, portanto manualmente
" defina o nome da 'Table Control no 'Top Include (Onde fika todas as
" declarações); na tela criar um 'Table control com as dimensões que achar
" necessário; Inserir os campos da tabela interna dentro do 'Table control.
" Bem espero ter ajuda mais duq atrapalhado, com isso que eu passei vc já
" consegue fazer um On-line feio mas que funciona e que você pode deixar
" bem maior conforme sua necessidade ou curiosidade.
" Qualquer dúvida, opnião e sugestão por favor comentar aee pq 'Module Pool
" tem muito dúvida as vezes até pra gente velha do ABAP.
"
report z_comm_modpool.
Assinar:
Postagens (Atom)