O documento fornece instruções sobre como implementar mensagens de saída (output messages) no processo de vendas do SAP. Explica como definir condições de mensagens, tipos de mensagem, esquemas de mensagem e registros de condição, além de fornecer um exemplo de programa e dicas para debugar programas de output message no faturamento de vendas.
1. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Output Message – Exemplo de Processo e parametrizações na Confirmação da
ordem de Vendas
Transação: IMG Aplicação ( Processo )
Atualizar tipos de mensagem
Definir, nesta entrada de menu, as condições de mensagens para registros de condições de mensagens.
A condição de mensagens forma diferentes mensagens no sistema SAP, como por exemplo, cotação,
confirmações de ordens e notas de remessa.
Para definir uma condição de mensagem, o usuário terá de efetuar as seguintes entradas:
• Tipo de condição
Chave alfanumérica com até 4 carcaterers que identifique uma condição de mensagem univocamente
• Sequência de acesso
Chave de sequência de acesso
• Denominação
Texto para a descrição da condição de mensagens
• Dados de detalhe (apenas os dados de detalhe mais importantes serão elucidados)
o Meio de transmissão
Chave alfanumérica com um caractere que determina o tipo de processamento de mensagem
(por exemplo, saída de impressão, transmissão por fax ou mail)
o Momento
Chave alfanumérica com um caractere que determina o momento do processamento de
mensagem (por exemplo, imediatamente ao gravar um documento ou com o processo de
seleção seguinte)
o Função do parceiro
Função do parceiro para a definição do recebedor de uma mensagem no documento de vendas
o Acesso de condições
Código com o qual se determina que a proposta de mensagem para esta mensagem deverá ser
efetuada através da técnica de condição.
Caso o usuário não defina o código, esta mensagem poderá ser localizada através da proposta
proveniente do registro mestre de clientes. Para isto, o usuário terá de ter efetuado as opções
correspondentes para a determinação de mensagens proveniente do registro mestre de
clientes.
o Parâmetros de impressão
Chave alfanumérica com um caractere que define os requisitos que serão a base para a
determinação dos parâmetros de impressão (ver Seção "Definir parâmetros de impressão").
o Modo de arquivamento Este campo controla se um documento será apenas impresso, apenas
arquivado ou tanto impresso como arquivado.
Menu : Vendas e distribuição > Funções básicas> Controle de Mensagens > Determinação de mensagens > Determinação de
mensagem via técnica de condições>Atualizar determinação de mensagens para docs. vendas> atualizar tipos de mensagem
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 1
2. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Foi criado um controle de cópia para cotação como ZA00
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 2
3. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 3
4. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 4
5. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 5
6. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 6
7. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 7
8. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 8
9. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 9
10. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 10
11. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 11
12. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Aqui associo os tipos de ordem com os controles de mensagem criado.
Necessário entrar na transação VV11
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 12
13. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 13
14. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 14
15. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 15
16. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Output Message – Exemplo de Processo e parametrizações no faturamento
Transação: NACE Aplicação ( Processo )
Escolher o processo, Ordem , Remessa, transporte, Fatura ou NF.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 16
17. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Output Message – Tipo de Mensagem
Transação: NACE Esquema de Mensagem
O tipo de mensagem define o programa que deve ser executado.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 17
18. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Output Message – Seqüência de Acesso
Transação: NACE Seqüência de Acesso
Definir a seqüência de acesso conforme a necessidade do Cliente.
A seqüência de acesso é definida no tipo de mensagem.
Na seqüência de acesso é possível incluir um requisito, onde a mensagem só é executada, se o
retorno do requisito for positivo. Ou seja, em que condição esta mensagem deve ser
executada.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 18
19. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Output Message – Esquema de Mensagem
Transação: NACE Tipo de Mensagem
Incluir o tipo de mensagem no Esquema de mensagem
No esquema de mensagem também é possível incluir um requisito, onde a mensagem só é
executada, se o retorno do requisito for positivo. Ou seja, em que condição esta mensagem
deve ser executada.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 19
20. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Output Message – Registro de Condição
Transação: VV31 Tipo de Mensagem
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 20
21. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
O meio e a Hora em que o processo deve ser executado é muito importante e é
indicado Na condition record.
Neste caso foi utilizado o tipo de documento como chave para executar a
mensagem, mas poderia ser qualquer informação disponível no SAP.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 21
22. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Exemplo de Programa e Explicações
Transação: Se38 Menu Sap:
A rotina marcada em Vermelho é o segredo, para atualizar o Status da
mensagem no documento de vendas que fez o start da operação ( Tabela
NAST).
O laureano da Complex é o programador ABAP que fez este programa.
Ele é o CARA..........
REPORT ZPrograma LINE-COUNT 100 MESSAGE-ID ZMensagem.
TABLES: Ztabela,
vbrk,
vbrp.
INCLUDE rvadtabl.
DATA: ls_bkpf TYPE bkpf,
ls_vbrk TYPE vbrk,
retcode LIKE sy-subrc, "Returncode
xscreen(1) TYPE c. "Output on printer or screen
*&---------------------------------------------------------------------*
*& Form ENTRY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM entry USING return_code us_screen.
CLEAR retcode.
xscreen = us_screen.
PERFORM ler_tabela. ( Rotina de Processamento )
CASE retcode.
WHEN 0.
return_code = 0.
WHEN 3.
return_code = 3.
WHEN OTHERS.
return_code = 1.
ENDCASE.
ENDFORM. " ENTRY
*&---------------------------------------------------------------------*
*& Form ler_tabela
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 22
23. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ler_tabela.
SELECT SINGLE * FROM vbrk
WHERE vbeln = nast-objky.
IF sy-subrc IS INITIAL.
SELECT SINGLE * FROM vbrp
WHERE vbeln = vbrk-vbeln.
IF sy-subrc IS INITIAL AND
NOT vbrp-codigo_ac IS INITIAL.
SELECT SINGLE * FROM Ztabela
WHERE codigo_ac = vbrp-codigo_ac AND
matnr = vbrp-matnr AND
tipomov = 'S'.
IF sy-subrc NE 0.
Ztabela-codigo_ac = vbrp-codigo_ac.
Ztabela-matnr = vbrp-matnr.
Ztabela-tipomov = 'S'.
Ztabela-menge = vbrp-fkimg.
INSERT Ztabela.
COMMIT WORK.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " ler_tabela
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 23
24. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Debugando Programas de Output Message – Exemplo Faturamento de SD
Transação: VV31 – Criar Menu Sap: Logistica>Vendas e Distribuição>Dados
VV32 – Modificar Mestres>Mensagens>Documento de Faturamento
VV33 - Exibir
Resumo do Processo
Criação / Modificação / Consulta de Record Condition de output Message
Dicas
Ao Criar sua record condition, escolher a opção 1 - Enviar através de jobs escalonados periodicamente.
Esta opção faz com que o Output message não seja executado imediatamente após a gravação da aplicação,
Necessitando da execução de um JOB para para definir o momento do envio.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 24
25. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Debugando Programas de Output Message – Exemplo Faturamento de SD
Transação: VF01 – Criar Menu Sap: Logistica>Vendas e Distribuição>Faturamento>Documento de
VF02 – Modificar Faturamento
VF03 - Exibir
Digitar o numero da fatura para modificação e Dar Enter...
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 25
26. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Clicar no Icone ( Lupa ) para ir para o Cabeçalho do documento faturamento
Já na pasta Cabeçalho, clicar em Mensagens:
Na Primeira Tela vc tb pode ir por este caminho para chegar na mensagem...
Resumo do Processo
Na Criação ou Modificação de um Documento de faturamento, é possivel Gravar uma output Message com as suas opções.
Dicas
Neste caso, se vc tem uma record condition para a sua Output Messagem, a mesma pode ser modificada para a sua necessidade.
Debugando Programas de Output Message – Exemplo Faturamento de SD
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 26
27. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Transação: VF01 – Criar Menu Sap: Logistica>Vendas e Distribuição>Faturamento>Documento de
VF02 – Modificar Faturamento
VF03 - Exibir
Marcar a sua mensagem e Clicar em dados complementares para abrir a proxima tela:
Alterar a opção de momento do envio para 1 Enviar através de jobs escalonados periodicamente.
Resumo do Processo
Modificar a sua Output Message, segundo as suas necessidades
Dicas
Debugando Programas de Output Message – Exemplo Faturamento de SD
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 27
28. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Transação: VF01 – Criar Menu Sap: Logistica>Vendas e Distribuição>Faturamento>Documento de
VF02 – Modificar Faturamento
VF03 - Exibir
Resumo do Processo
Gravar a fatura para gerar a sua Output Message, segundo as suas necessidades
Dicas
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 28
29. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Debugando Programas de Output Message – Exemplo Faturamento de SD
Transação: Nace Verificando o programa que a Output Message Executa...
Marcar a Output e clicar em tipo de mensagem...
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 29
30. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Marcar o tipo de mensagem e clicar na pasta Rotina de processamento no SAP
Neste caso o programa é o RVADIN01...
Resumo do Processo
Gravar a fatura para gerar a sua Output Message, segundo as suas necessidades
Dicas
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 30
31. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Debugando Programas de Output Message – Exemplo Faturamento de SD
Transação: SE38 Menu Sap: Ferramentas > ABAP Workbench > Desenvolvimento > Editor
ABAP
Chamar o programa a ser debugado e colocar nele um Break-Point:
Neste exemplo vamos colocar um break-point no programa RVADIN01,
Standard do tipo de output message RD00.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 31
32. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Digitar o codigo do programa e clicar no icone exibir.
Posicionar na linha desejada e clicar no icone STOP.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 32
33. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Esta opção acima, tb funciona.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 33
34. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Feito o Break-point o linha fica marcada....
Resumo do Processo
Bem existem varias literaturas sobre break-point, como colocar como tirar....secão, servidor, usuário...ETC....
Dicas
OBS: Para retirar o breack-point basta repetir a operação no mesmo ponto ou utilizar a opção de eliminar pontos de parada via
utilitarios da se38....em relação a Break-Point fui....Deus te ajude e até a próxima.....
Continuando......... o Debugging....
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 34
35. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Debugando Programas de Output Message – Exemplo Faturamento de SD
Transação: SE38 Menu Sap: Ferramentas > ABAP Workbench > Desenvolvimento > Editor
ABAP
Resumo do Processo
Executar o programa RSNAST00
Dicas
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 35
36. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Debugando Programas de Output Message – Exemplo Faturamento de SD
Transação: SE38 Menu Sap: Ferramentas > ABAP Workbench > Desenvolvimento > Editor
ABAP
Resumo do Processo
Aplicacação de mensagem = V3 ( Fatura )
Chave de objeto = O numero da sua fatura
Tipo de mensagem = RD00
Ao executar o programa o debug entra no ponto em que o break-point foi definido....
Dicas
Na tela abaixo o inicio do debug........
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 36
37. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 37
38. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
Programa Exemplo:
REPORT zsavo_acumulado_vendas LINE-SIZE 200 NO STANDARD PAGE HEADING.
************************************************************************
*** Programa: ZSAVO_ACUMULADO_VENDAS ***
*** Descrição: Relatorio Acumulado Vendas ***
*** Autor: jhrezende Data : 17/05/2007 ***
************************************************************************
*** Description: ***
*** ***
************************************************************************
*** Tabelas Utilizadas: ***
*** vbak - Documento de vendas: dados de cabeçalho ***
*** vbap - Documento de vendas: dados de item ***
*** vbrp - Documento de faturamento: dados de item ***
*** vbfa - Fluxo de documentos de vendas e distribuição (VD) ***
************************************************************************
*** Funções Utilizadas: ***
*** ***
*** Includes ***
*** ***
*** Transação ***
*** ***
*** ***
*** Parâmetros de Entrada: ***
*** p_VBELN - Documento de venda ***
*** ***
*** Histórico de Alterações: ***
************************************************************************
*** Data | Change # | Autor | Alteração ***
*** 17.05.2007| SD1K9A05KY | Jhrezende | Desenv. Inicial ***
************************************************************************
* OBS: NÃO UTILIZAR: DISPLAY DE MENSAGENS, STOP, BREAK-POINT,
* COMMIT_WORK
* Sempre que for necessitar que mostre uma msg utilize a fução
* CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
************************************************************************
*** Tabelas do dicionário de dados
************************************************************************
*TABLES: tvagt, dd07t.
DATA: qtd LIKE ekpo-menge,
puni(16) TYPE p DECIMALS 10,
vluni(16) TYPE p DECIMALS 10,
uni1(3) TYPE c,
uni2(3) TYPE c,
vbeln LIKE vbak-vbeln,
cred(1) TYPE c,
xscreen(1) TYPE c. "Output on printer or screen
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 38
39. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
*CONSTANTS: c_cmgst(5) TYPE c VALUE 'CMGST',
* c_a(1) TYPE c VALUE 'A'.
* Definição das tabelas internas globais *******************************
DATA:
* Dados de Ordem de Venda Cabec
t_vbak TYPE vbak OCCURS 0 WITH HEADER LINE,
* Dados de Ordem de Venda Item
t_vbap TYPE vbap OCCURS 0 WITH HEADER LINE,
t_s604n TYPE s604 OCCURS 0 WITH HEADER LINE,
*Documento VD: status de cabeçalho e dados administrativos
t_vbuk TYPE vbuk OCCURS 0 WITH HEADER LINE,
* Fluxo de documentos de vendas e distribuição (VD)
t_vbfa TYPE vbfa OCCURS 0 WITH HEADER LINE,
* Documento de faturamento: dados de cabeçalho
t_vbrk TYPE vbrk OCCURS 0 WITH HEADER LINE,
* Documento de faturamento: dados de item
t_vbrp TYPE vbrp OCCURS 0 WITH HEADER LINE.
*
INCLUDE rvadtabl. "obrigatorio
DATA: retcode LIKE sy-subrc. "Returncode "obrigatorio
*---------------------------------------------------------------------*
* FORM entry *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> RETURN_CODE *
* --> US_SCREEN *
*---------------------------------------------------------------------*
FORM entry USING return_code us_screen. "#EC CALLED
* Quando o programa for acionado já vem algumas informações da NAST,
* se houver necessidade de mais informações dessa tabela é só fazer
* uma leitura da mesma
*--------------------------------------------------------------------
CLEAR retcode.
IF nast-kappl = 'V3'.
vbeln = nast-objky.
PERFORM f_ler_documento_venda_0.
LOOP AT t_vbrp.
vbeln = t_vbrp-aubel.
PERFORM get_data.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDLOOP.
ELSEIF nast-kappl = 'V1'.
vbeln = nast-objky.
PERFORM get_data.
IF retcode NE 0.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 39
40. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM PROTOCOL_UPDATE "obrigatorio *
*---------------------------------------------------------------------*
* The messages are collected for the processing protocol. *
*---------------------------------------------------------------------*
FORM protocol_update.
* sempre que necessitar mostrar mensagens deve ser utilizada essa
* função
CHECK xscreen = space.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
* NÃO COLOCAR WRITE DE MSG.
* utilizar CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET_DATA *
*---------------------------------------------------------------------*
FORM get_data.
* essa parte é livre não tem nada de diferente
CLEAR: t_s604n. REFRESH: t_s604n.
PERFORM f_ler_documento_venda.
PERFORM f_montar_s604_nova.
PERFORM f_deletar_s604_velha.
PERFORM f_gravar_s604_nova.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form f_ler_documento_venda
*&---------------------------------------------------------------------*
FORM f_ler_documento_venda_0.
* Seleção dos dados VBRP Documento de faturamento: dados de item
SELECT * FROM vbrp
INTO TABLE t_vbrp
WHERE vbeln = vbeln.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 40
41. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
SORT t_vbrp BY aubel.
DELETE ADJACENT DUPLICATES FROM t_vbrp COMPARING aubel.
ENDFORM. " f_ler_documento_venda_0
*&---------------------------------------------------------------------*
*& Form f_ler_documento_venda
*&---------------------------------------------------------------------*
FORM f_ler_documento_venda.
* Seleção dos dados VBAK (Venda)
SELECT * FROM vbak
INTO TABLE t_vbak
WHERE vbeln = vbeln.
IF NOT t_vbak[] IS INITIAL.
* Seleção dos dados VBAP (Carteira)
SELECT * FROM vbap
INTO TABLE t_vbap
FOR ALL ENTRIES IN t_vbak
WHERE vbeln = t_vbak-vbeln.
* Documento VD: status de cabeçalho e dados administrativos
SELECT * FROM vbuk
INTO TABLE t_vbuk
FOR ALL ENTRIES IN t_vbak
WHERE vbeln = t_vbak-vbeln.
* Fluxo de documentos de vendas e distribuição (VD)
SELECT * FROM vbfa
INTO TABLE t_vbfa
FOR ALL ENTRIES IN t_vbak
WHERE vbelv = t_vbak-vbeln AND
vbtyp_n = 'M'.
IF NOT t_vbfa[] IS INITIAL.
*Documento de faturamento: dados de cabeçalho
SELECT * FROM vbrk
INTO TABLE t_vbrk
FOR ALL ENTRIES IN t_vbfa
WHERE vbeln = t_vbfa-vbeln AND
fksto = ' '.
IF NOT t_vbrk[] IS INITIAL.
* Fluxo de documentos de vendas e distribuição (VD)
SELECT * FROM vbfa
INTO TABLE t_vbfa
FOR ALL ENTRIES IN t_vbrk
WHERE vbeln = t_vbrk-vbeln AND
vbelv = vbeln AND
vbtyp_n = 'M'.
SORT t_vbfa BY posnv.
ELSE.
REFRESH: t_vbfa[].
ENDIF.
ENDIF.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 41
42. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
ENDIF.
ENDFORM. " f_ler_documento_venda
*&---------------------------------------------------------------------*
*& Form f_montar_s604_nova
*&---------------------------------------------------------------------*
FORM f_montar_s604_nova.
CLEAR: t_vbak,t_vbuk.
READ TABLE t_vbak WITH KEY vbeln = vbeln.
* READ TABLE t_tvko INDEX 1.
READ TABLE t_vbuk INDEX 1.
LOOP AT t_vbap.
MOVE-CORRESPONDING t_vbap TO t_s604n.
t_s604n-vrsio = '000'. " sempre 000
t_s604n-spmon = t_vbak-erdat. " ano e mes
t_s604n-erdat = t_vbak-erdat. " ano/mes/dia
t_s604n-bukrs = t_vbak-kkber. " empresa
t_s604n-auart = t_vbak-auart. " Tipo de documento de venda
t_s604n-vkbur = t_vbak-vkbur. " Escritorio de vendas
t_s604n-kunnr = t_vbak-knkli. " Emissor da ordem
t_s604n-vtweg = t_vbak-vtweg. " canal Distribuição
t_s604n-stwae = t_vbak-waerk. " Moeda
t_s604n-gewei = ' '. " Unidade de peso
t_s604n-basme = ' '. "t_vbap-meins. " Unidade medida basica
* Carteira
PERFORM f_carteira.
* Recusa
IF t_vbap-abgru <> ' ' .
PERFORM f_recusa.
ELSE.
* ajustar credito - é só ele
PERFORM f_ajustar_credito.
IF cred = ' '.
* Ajustar faturado
PERFORM f_faturado.
* Ajustar a faturar
PERFORM f_afaturar.
* backorder = carteira - a faturar
PERFORM f_backorder.
ENDIF.
ENDIF.
* ----------------------------------------------------
IF t_vbak-vbtyp = 'H'.
PERFORM f_multipl_menos_hum.
ENDIF.
APPEND t_s604n.
CLEAR: t_s604n, t_vbap, cred.
ENDLOOP.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 42
43. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
ENDFORM. " f_montar_s604_nova
*&---------------------------------------------------------------------*
*& Form f_deletar_s604_velha
*&---------------------------------------------------------------------*
FORM f_deletar_s604_velha.
DELETE FROM s604 WHERE vbeln = vbeln.
ENDFORM. " f_deletar_s604_velha
*&---------------------------------------------------------------------*
*& Form f_gravar_s604_nova
*&---------------------------------------------------------------------*
FORM f_gravar_s604_nova.
IF retcode = 0.
LOOP AT t_s604n.
INSERT INTO s604 VALUES t_s604n.
ENDLOOP.
ENDIF.
ENDFORM. " f_gravar_s604_nova
*&---------------------------------------------------------------------*
*& Form f_converter_unidade
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UNI1 text
* -->P_UNI2 text
* -->P_QTD text
*----------------------------------------------------------------------*
FORM f_converter_unidade USING p_uni1
p_uni2
p_qtd.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
i_matnr = t_vbap-matnr
i_in_me = p_uni1
i_out_me = p_uni2
i_menge = p_qtd
IMPORTING
e_menge = qtd
EXCEPTIONS
error_in_application = 1
error =2
OTHERS = 3.
IF sy-subrc <> 0.
* retcode = sy-subrc.
PERFORM protocol_update.
ENDIF.
ENDFORM. " f_converter_unidade
*&---------------------------------------------------------------------*
*& Form f_carteira
*&---------------------------------------------------------------------*
FORM f_carteira.
IF t_vbap-kwmeng = 0.
t_vbap-kwmeng = t_vbap-zmeng.
ENDIF.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 43
44. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
t_s604n-cartkg = t_vbap-brgew. " carteira kg
t_s604n-cartvl = t_vbap-netwr. " Valor carteira
* ajustar campos carteira dp e carteira cx
qtd = t_vbap-kwmeng.
uni1 = t_vbap-meins. " unidade original
uni2 = 'DP' .
PERFORM f_converter_unidade USING uni1 uni2 qtd.
t_s604n-cartdp = qtd.
IF t_s604n-cartdp <> 0.
* Peso unitário menor unidade existente que é o display
puni = t_s604n-cartkg / t_s604n-cartdp.
vluni = t_s604n-cartvl / t_s604n-cartdp.
ELSE.
MESSAGE i368(00) WITH t_vbak-vbeln.
puni = 1.
vluni = 1.
ENDIF.
qtd = t_vbap-kwmeng.
uni1 = t_vbap-meins. " unidade original
uni2 = 'KI' . " caixa
PERFORM f_converter_unidade USING uni1 uni2 qtd.
t_s604n-cartcx = qtd.
ENDFORM. " f_carteira
*&---------------------------------------------------------------------*
*& Form f_faturado
*&---------------------------------------------------------------------*
FORM f_faturado.
READ TABLE t_vbfa WITH KEY posnv = t_vbap-posnr BINARY SEARCH.
IF sy-subrc = 0.
* convertendo para caixa
qtd = t_vbfa-rfmng_flo.
uni1 = t_vbfa-vrkme. " unidade original
uni2 = 'KI' . " caixa
PERFORM f_converter_unidade USING uni1 uni2 qtd.
t_s604n-fatcx = qtd.
* convertendo para display
qtd = t_vbfa-rfmng_flo.
uni1 = t_vbfa-vrkme. " unidade original
uni2 = 'DP' . " display
PERFORM f_converter_unidade USING uni1 uni2 qtd.
t_s604n-fatdp = qtd.
t_s604n-fatkg = t_s604n-fatdp * puni.
* mult pelo peso bruto do item
t_s604n-fatvl = t_s604n-fatdp * vluni.
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 44
45. SAP R/3
GUIA DE IMPLEMENTAÇÃO
___________________________________________________________________________________________
ENDIF.
ENDFORM. " f_faturado
*&---------------------------------------------------------------------*
*& Form f_afaturar
*&---------------------------------------------------------------------*
FORM f_afaturar.
* convertendo para caixa
uni1 = t_vbap-zieme. " unidade original
qtd = t_vbap-kbmeng.
uni2 = 'KI' . " caixa
PERFORM f_converter_unidade USING uni1 uni2 qtd.
t_s604n-afatcx = qtd.
* convertendo para display
qtd = t_vbap-kbmeng.
uni1 = t_vbap-zieme. " unidade original
uni2 = 'DP' . " display
PERFORM f_converter_unidade USING uni1 uni2 qtd.
t_s604n-afatdp = qtd.
t_s604n-afatkg = t_s604n-afatdp * puni.
t_s604n-afatvl = t_s604n-afatdp * vluni.
ENDFORM. " f_afaturar
*&---------------------------------------------------------------------*
*& Form f_backorder
*&---------------------------------------------------------------------*
FORM f_backorder.
t_s604n-backcx = t_s604n-cartcx - t_s604n-afatcx .
t_s604n-backdp = t_s604n-cartdp - t_s604n-afatdp.
t_s604n-backkg = t_s604n-backdp * puni.
IF t_s604n-backcx <> 0.
t_s604n-backvl = t_s604n-cartvl - t_s604n-afatvl.
ENDIF.
ENDFORM. " f_backorder
*&---------------------------------------------------------------------*
*& Form f_ajustar_credito
*&---------------------------------------------------------------------*
FORM f_ajustar_credito.
cred = ' '.
IF t_vbuk-cmgst = 'B' OR t_vbuk-cmgst = 'C'.
t_s604n-credkg = t_s604n-cartkg.
t_s604n-credvl = t_s604n-cartvl.
t_s604n-creddp = t_s604n-cartdp.
t_s604n-credcx = t_s604n-cartcx.
cred = 'X'.
ENDIF.
ENDFORM. " f_ajustar_credito
*&---------------------------------------------------------------------*
*& Form f_RECUSA
______________________________________________________________________________________________________
Versão: 1.0 - 19/08/09 Pág. 45