Módulo: DOC. EXPORTAÇÃO
Funcionalidade: Embarque
Data/Hora da Publicação: 14/12/2007 00:00:00
Data/Hora Última Alteração: 22/02/2011 10:57:10
Descrição da Nota: AGRUPAMENTO DE EMBARQUE COM COMMODITIES
Sintoma
Após o envio do embarque para câmbio, não era possível ajustar os valores dos itens.
Solução
Criado o reagrupamento de embarque com a finalidade de se realizar o ajuste de preços de
commodities.
7.0
Produto:
Nota
Descrição
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 05457 Data: 14/12/2007 Hora: 09:09:02
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 05457
Categoria : Melhoria
Prioridade : Baixa
Versão PW.CE : 7.0
Pacote : 00003
Agrupamento : 00027
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
03435 - 00001 - 7.0 - 00001 - DECLARAÇÃO DE VARIÁVEIS PARA A EXIT EMB006
04855 - 00002 - 7.0 - 00003 - PERMITIR INCLUSÃO DE RE MANUAL APÓS EMBARQUE TER SIDO ENVIADO AO
04921 - 00006 - 7.0 - 00003 - CRIAÇÃO DA VISÃO /PWS/ZYCEV023.
04946 - 00003 - 7.0 - 00003 - GERAR VARIAÇÃO CAMBIAL AO EXECUTAR O AGRUPAMENTO DO EMBARQUE
04958 - 00004 - 7.0 - 00003 - FATURA/VINCULAÇÃO/LIQUIDAÇÃO - COMMODITIES
05207 - 00005 - 7.0 - 00003 - INICIALIZAR OS DADOS CORRETAMENTE NA TRANSAÇÃO F-30
----------------------------------------------------------------------------------------------------
AGRUPAMENTO DE EMBARQUE COM COMMODITIES
----------------------------------------------------------------------------------------------------
Palavras Chave:
AGRUPAMENTO COMMODITIES EMBARQUE REAGRUPAMENTO ZYCER314
----------------------------------------------------------------------------------------------------
Objetos da nota:
DTEL /PWS/ZYCEL706
DTEL /PWS/ZYCEL707
TABD /PWS/ZYCEE002
TABD /PWS/ZYCET002
TABD /PWS/ZYCET037
TABD /PWS/ZYCET023
VIED /PWS/ZYCEV023
TOBJ /PWS/ZYCEV023V
DYNP /PWS/SAPLZYCEGF1 0023
MESS /PWS/ZYCEM110
DOCU NA/PWS/ZYCEM110
MESS /PWS/ZYCEM150
DOCU NA/PWS/ZYCEM150
MESS /PWS/ZYCEM15
DOCU NA/PWS/ZYCEM151
MESS /PWS/ZYCEM152
DOCU NA/PWS/ZYCEM152
MESS /PWS/ZYCEM153
DOCU NA/PWS/ZYCEM153
MESS /PWS/ZYCEM154
DOCU NA/PWS/ZYCEM154
MESS /PWS/ZYCEM155
DOCU NA/PWS/ZYCEM155
MESS /PWS/ZYCEM293
DOCU NA/PWS/ZYCEM293
REPT /PWS/SAPMZYCE312
DYNP /PWS/SAPMZYCE312 0102
FUNC /PWS/ZYCE_TRANSACAO_F_30
CUAD /PWS/SAPMZYCE003
REPT /PWS/SAPMZYCE003
REPS /PWS/MZYCE003F01
REPS /PWS/MZYCE003F02
REPS /PWS/MZYCE003TCD
REPS /PWS/MZYCE003TSD
REPS /PWS/MZYCE003X01
REPS /PWS/MZYCE312I01
REPS /PWS/ZYCER314
TRAN /PWS/ZYCER314
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DTEL /PWS/ZYCEL706
Elemento de dados criado: /PWS/ZYCEL706
Classe de desenvolvimento: /PWS/ZYGL
Idioma original: PT
Descrição breve incluída: (38 caracteres), idioma: PT
"CE - Usado para ajuste de commodities?"
Categoria de dados: Domínio
Domínio: BOOLEAN_01
ID parâmetro:
Nome componente default:
Documentar modificações: NÃO
Nome da ajuda de pesquisa:
Parâmetro da ajuda de pesquisa:
Comprimento máximo do denominador breve: 00
Denominador breve incluído (0 caracteres), idioma: PT
""
Comprimento máximo do denominador médio: 00
Denominador médio incluído (0 caracteres), idioma: PT
""
Comprimento máximo do denominador longo: 00
Denominador longo incluído (0 caracteres), idioma: PT
""
Comprimento máximo do título: 00
Título incluído (0 caracteres), idioma: PT
""
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DTEL /PWS/ZYCEL707
Elemento de dados criado: /PWS/ZYCEL707
Classe de desenvolvimento: /PWS/ZYGL
Idioma original: PT
Descrição breve incluída: (36 caracteres), idioma: PT
"CE - Atende Processo de Commodities?"
Categoria de dados: Domínio
Domínio: XFELD
ID parâmetro:
Nome componente default:
Documentar modificações: NÃO
Nome da ajuda de pesquisa:
Parâmetro da ajuda de pesquisa:
Comprimento máximo do denominador breve: 05
Denominador breve incluído (4 caracteres), idioma: PT
"Comm"
Comprimento máximo do denominador médio: 12
Denominador médio incluído (11 caracteres), idioma: PT
"Commodities"
Comprimento máximo do denominador longo: 26
Denominador longo incluído (25 caracteres), idioma: PT
"Atende Proc. Commodities?"
Comprimento máximo do título: 32
Título incluído (31 caracteres), idioma: PT
"Atende Processo de Commodities?"
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TABD /PWS/ZYCEE002
Incluir um novo campo:
Nome: AJUSTE_COMMOD
Elemento de dados: /PWS/ZYCEL706
Posição: após o campo GRUPO (último campo)
Campo-chave?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TABD /PWS/ZYCET002
Incluir um novo campo:
Nome: AJUSTE_COMMOD
Elemento de dados: /PWS/ZYCEL706
Posição: após o campo GRUPO (último campo)
Campo-chave?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TABD /PWS/ZYCET037
Incluir um novo campo:
Nome: AJUSTA_COMMOD
Elemento de dados: /PWS/ZYCEL707
Posição: após o campo GERA_VAR (último campo)
Campo-chave?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TABD /PWS/ZYCET023
Incluir um novo campo:
Nome: AJUSTA_COMMOD
Elemento de dados: /PWS/ZYCEL707
Posição: entre os campos ESTORNO e ESTAT
Campo-chave?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em VIED /PWS/ZYCEV023
Incluir um novo campo:
Nome: AJUSTA_COMMOD
Tabela: /PWS/ZYCET023
Posição: entre os campos ESTORNO e USERNAMEC
Campo-chave?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TOBJ /PWS/ZYCEV023V
Recriar o diálogo de atualização da visão /PWS/ZYCEV023 (transação SE54)
Marcar o seguinte motivo de modificação:
"Campo/tabela secundária nova na estrutura"
Marcar para recriar as telas 0023 e 1023.
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DYNP /PWS/SAPLZYCEGF1 0023
Incluir os seguintes campos no table controle TCTRL_/PWS/ZYCEV023 da tela 0023 do grupo de funções
/PWS/ZYCEGF1:
Tipo: I/O
Nome: /PWS/ZYCEV023-DTUSERC
Posição: A esquerda do /PWS/ZYCEV023-USERNAMEC (último campo)
Nome do Campo de título da coluna: /PWS/ZYCEV023-DTUSERC
Tipo: I/O
Nome: /PWS/ZYCEV023-HRUSERC
Posição: A esquerda do /PWS/ZYCEV023-DTUSERC (último campo)
Nome do Campo de título da coluna: /PWS/ZYCEV023-HRUSERC
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM110
Criar a mensagem nº 110 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: A ordem/item &1/&2 não possui faturamento
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM110
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 110 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM110
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 27 11 2007
/:FIRST-TIME 11 50 29
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 57 01
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASUm item sem documento de faturamento foi incluído para fazer o ajuste de
commodities.
U1&SYSTEM_RESPONSE&
ASO item não pode ser utilizado para ajuste de commodities e será
eliminado do embarque.
U1&WHAT_TO_DO&
ASFaturar os itens a serem incluídos.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM150
Criar a mensagem nº 150 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: O faturamento/item &1/&2 já utilizado no agrupamento
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM150
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 150 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM150
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 27 11 2007
/:FIRST-TIME 14 16 11
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 57 49
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASFoi incluído um item para ajuste de commodities que já é parte do
agrupamento.
U1&SYSTEM_RESPONSE&
ASO item não pode ser usado no ajuste de commodities e será eliminado do
embarque.
U1&WHAT_TO_DO&
ASUtilizar um outro item para fazer o ajuste.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM151
Criar a mensagem nº 151 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: Tipo de faturamento &1 não permitido para ajuste de commodities
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM151
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 151 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM151
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 27 11 2007
/:FIRST-TIME 14 19 14
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 57 54
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASO tipo do faturamento incluído (&V2&/&V3&) não é permitido para ajustar
commodities.
U1&SYSTEM_RESPONSE&
ASO item não pode ser usado no ajuste de commodities e será eliminado do
embarque.
U1&WHAT_TO_DO&
ASVerificar os tipos de fatura permitidos na parametrização de Tipo de
Faturamento. Transação <DS:TRAN./PWS/ZYCET023>/PWS/ZYCET023</>.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM152
Criar a mensagem nº 152 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: O faturamento/item &1/&2 não possui documento contábil
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM152
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 152 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM152
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 27 11 2007
/:FIRST-TIME 14 19 20
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 58 00
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASFoi incluído um item sem documento contábil.
U1&SYSTEM_RESPONSE&
ASO item não pode ser usado no ajuste de commodities e será eliminado do
embarque.
U1&WHAT_TO_DO&
ASSerá necessário efetuar a liberação contábil do faturamento.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM153
Criar a mensagem nº 153 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: Divisão &1 / cond. pagamento &2 inexistentes no agrupamento
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM153
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 153 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM153
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 27 11 2007
/:FIRST-TIME 14 19 26
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 58 05
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASFoi incluído um item (&V3&/&V4&) com ajuste em uma divisão e condição de
pagamento inexistentes no agrupamento atual.
U1&SYSTEM_RESPONSE&
ASO item não pode ser usado no ajuste de commodities e será eliminado do
embarque.
U1&WHAT_TO_DO&
ASUtilizar itens que possuem divisão e condição de pagamento iguais a uma
das parcelas já existentes no agrupamento.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM154
Criar a mensagem nº 154 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: Saldo insuficiente para a divisão &1 / cond. pagamento &2
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM154
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 154 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM154
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 27 11 2007
/:FIRST-TIME 14 19 32
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 58 13
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASFoi incluído um item para ajuste de commodities (&V3&/&V4&) que tornou o
saldo de valor a transferir e valor a liquidar no câmbio negativo
(/PWS/ZYCBT017-VLAVINC e /PWS/ZYCBT030-VLSLTRANS).
U1&SYSTEM_RESPONSE&
ASO item não pode ser usado no ajuste de commodities e será eliminado do
embarque.
U1&WHAT_TO_DO&
ASUtilizar itens dentro dos limites de saldo da(s) parcela(s) a que se
refere(m) no câmbio.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM155
Criar a mensagem nº 155 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: Já existe liqüidação para a parcela &1
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM155
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 155 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM155
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 10 12 2007
/:FIRST-TIME 14 28 04
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 58 18
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
ASFoi incluído um item para ajuste de commodities (&V2&/&V3&) que tentou
atualizar uma parcela já liquidada.
U1&SYSTEM_RESPONSE&
ASO item não pode ser usado no ajuste de commodities e será eliminado do
embarque.
U1&WHAT_TO_DO&
ASEstornar a liquidação.
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em MESS /PWS/ZYCEM293
Criar a mensagem nº 293 na classe de mensagens /PWS/ZYCEM
-Texto da mensagem: Impossível agrupar embarque: Receita de Vendas ainda não contabilizada
-Auto-explicativa?: Não
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DOCU NA/PWS/ZYCEM293
Criar um arquivo texto com o conteúdo abaixo e fazer o upload (como arquivo ITF) da documentação da
mensagem 293 da classe de mensagens /PWS/ZYCEM.
/HTEXT
/:OBJECT DOKU
/:NAME /PWS/ZYCEM293
/:ID NA
/:LANGUAGE P
/:FORM S_DOCU_SHOW
/:STYLE S_DOCUS1
/:FIRST-USER PWSCE
/:FIRST-DATE 08 10 2007
/:FIRST-TIME 07 47 53
/:LAST-USER PWSCE
/:LAST-DATE 14 12 2007
/:LAST-TIME 07 57 32
/:TITLE ' '
/:TITLE1 ' '
/:TITLE2 ' '
/MTEXT
U1&CAUSE&
B1O sistema foi configurado para não permitir o agrupamento de embarque
sem que a receita de vendas esteja contabilizada (ver transação
<DS:TRAN./PWS/ZYCE037>/PWS/ZYCE037</>).
B1Existem itens cuja receita de vendas ainda não foi contabilizada.
U1&SYSTEM_RESPONSE&
ASO agrupamento de embarque para câmbio é cancelado.
U1&WHAT_TO_DO&
ASEfetuar a contabilização antes do agrupamento (ver transação
<DS:TRAN./PWS/ZYCER173>/PWS/ZYCER173</>).
U1&SYS_ADMIN&
AS
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPT /PWS/SAPMZYCE312
Incluído símbolo de texto:
-Idioma: PT
-Símbolo: 011
-Texto: (49 caracteres)
"Para ajustar commodities, não é permitido alterar"
-Comprimento máximo: 50
Incluído símbolo de texto:
-Idioma: PT
-Símbolo: 012
-Texto: (23 caracteres)
"a condição de pagamento"
-Comprimento máximo: 50
----------------------------------------------------------------------------------------------------
Modificações efetuadas em DYNP /PWS/SAPMZYCE312 0102
-Modificações na lista de elementos:
Criar campo de texto (label)
-Nome: /PWS/ZYCET037-AJUSTA_COMMOD
-Posição: Linha 8, coluna 46
-Comprimento default / visível: 32 / 32
-Trazer características do dicionário: Sim
-Comprimento do texto do dicionário: 4 - Título
Criar campo de I/O (textbox)
-Nome: /PWS/ZYCET037-AJUSTA_COMMOD
-Posição: Linha 8, coluna 82
-Comprimento default / visível: 1 / 7
-Tipo de Dropdown: Listbox
Modificar campo de I/O (textbox)
-Nome: /PWS/ZYCET037-GERA_FORNEC
-Comprimento visível: 7
Modificar campo de I/O (textbox)
-Nome: /PWS/ZYCET037-ELIMINA_ESTORNO
-Comprimento visível: 7
-Modificações na lógica de processamento:
PROCESS BEFORE OUTPUT.
MODULE: tratar_tela,
selecionar_empresa.
PROCESS AFTER INPUT.
* >> Início da inclusão - PAI da tela 0102
CHAIN.
FIELD: /pws/zycet037-alt_cond,
/pws/zycet037-ajusta_commod.
MODULE check_ajusta_commod.
ENDCHAIN.
* << Fim da inclusão - PAI da tela 0102
----------------------------------------------------------------------------------------------------
Modificações efetuadas em FUNC /PWS/ZYCE_TRANSACAO_F_30
...
INTO v_xpos1
WHERE event = 'SL-AG'
AND feldn = 'BELNR'.
ADD 1 TO v_xpos1.
SHIFT v_xpos1 LEFT DELETING LEADING '0'.
CONCATENATE 'RF05A-XPOS1(' v_xpos1 ')' INTO v_xpos.
CLEAR v_xpos1.
SELECT SINGLE selps FROM t021r
INTO v_xpos1
WHERE event = 'SU-AG'
* >> Início da exclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
AND feldn = 'BUDAT'.
* << Fim da exclusão
* >> Início da inclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
AND feldn = 'BELNR'.
* << Fim da inclusão
SHIFT v_xpos1 LEFT DELETING LEADING '0'.
CONCATENATE 'RF05A-XPOS1(' v_xpos1 ')' INTO v_xpos_budat.
CLEAR v_xpos1.
SELECT * FROM t041t INTO TABLE itab_t041t
WHERE spras = sy-langu.
READ TABLE itab_t041t WITH KEY auglv = 'UMBUCHNG'.
v_xpos1 = sy-tabix.
SHIFT v_xpos1 LEFT DELETING LEADING '0'.
CONCATENATE 'RF05A-XPOS1(' v_xpos1 ')' INTO v_xpos_comp.
LOOP AT t_dados.
...
...
'BDC_OKCODE' '=SL'.
PERFORM bdc_screen USING 'SAPMF05A' '0710'.
PERFORM bdc_field USING:
'RF05A-AGKON' t_dados-agkon,
'RF05A-AGKOA' t_dados-agkoa,
v_xpos 'X',
'BDC_OKCODE' '=PA'.
PERFORM bdc_screen USING 'SAPMF05A' '0731'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
CLEAR v_cont.
* >> Início da exclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
LOOP AT itab_zycbt036 WHERE tcode = t_dados-tcode
AND tabela = t_dados-tabela
AND cpochv = t_dados-cpochv.
* << Fim da exclusão
* >> Início da inclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
LOOP AT itab_zycbt036.
* << Fim da inclusão
ADD 1 TO v_cont.
CONCATENATE 'RF05A-SEL01(' v_cont ')' INTO v_campo.
PERFORM bdc_field USING v_campo itab_zycbt036-belnr.
IF v_cont = 5.
PERFORM bdc_screen USING 'SAPMF05A' '0731'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
CLEAR v_cont.
ENDIF.
ENDLOOP.
PERFORM bdc_screen USING 'SAPMF05A' '0731'.
...
...
PERFORM bdc_field USING 'BDC_OKCODE' '=PA'.
IF t_dados-agkoa = 'S'.
v_tela = '3100'.
v_tela2 = '0300'.
ELSEIF t_dados-agkoa = 'K'.
v_tela = '3100'.
v_tela2 = '0302'.
ELSE.
v_tela = '3100'.
v_tela2 = '0301'.
* >> Início da exclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
ENDIF.
LOOP AT itab_zycbt036 WHERE dtdocto NE ' ' AND
dtdocto NE '00000000'.
ENDLOOP.
IF sy-subrc EQ 0.
PERFORM bdc_screen USING 'SAPDF05X' v_tela.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-ABPOS'.
PERFORM bdc_field USING 'BDC_OKCODE' '=OMX'.
PERFORM bdc_screen USING 'SAPDF05X' v_tela.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-ABPOS'.
PERFORM bdc_field USING 'BDC_OKCODE' '=Z-'.
PERFORM bdc_screen USING 'SAPDF05X' v_tela.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-ABPOS'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.
PERFORM bdc_field USING 'BDC_OKCODE' '=OSU'.
PERFORM bdc_screen USING 'SAPDF05X' '2000'.
PERFORM bdc_field USING 'BDC_CURSOR' v_xpos_budat.
PERFORM bdc_field USING v_xpos_budat text-001.
PERFORM bdc_field USING 'BDC_OKCODE' '=GO'.
PERFORM bdc_screen USING 'SAPDF05X' '0732'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-VONDT(01)'.
CLEAR v_cont.
LOOP AT itab_zycbt036 WHERE tcode = t_dados-tcode
AND tabela = t_dados-tabela
AND cpochv = t_dados-cpochv.
ADD 1 TO v_cont.
CONCATENATE 'RF05A-VONDT(' v_cont ')' INTO v_campo.
CONCATENATE 'RF05A-BISDT(' v_cont ')' INTO v_campo2.
WRITE itab_zycbt036-dtdocto TO v_dtdocto.
PERFORM bdc_field USING v_campo v_dtdocto.
PERFORM bdc_field USING v_campo2 v_dtdocto.
IF v_cont = 5.
PERFORM bdc_field USING 'BDC_OKCODE' '=SU1'.
PERFORM bdc_screen USING 'SAPDF05X' '0732'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-VONDT(01)'.
CLEAR v_cont.
* << Fim da exclusão
ENDIF.
* >> Início da exclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
ENDLOOP.
PERFORM bdc_field USING 'BDC_OKCODE' '=GO'.
ENDIF.
* << Fim da exclusão
PERFORM bdc_screen USING 'SAPDF05X' v_tela.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-ABPOS'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.
PERFORM bdc_field USING 'BDC_OKCODE' '=OMX'.
PERFORM bdc_screen USING 'SAPDF05X' v_tela.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-ABPOS'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.
PERFORM bdc_field USING 'BDC_OKCODE' '=Z+'.
* >> Início da exclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
PERFORM bdc_screen USING 'SAPDF05X' v_tela.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05A-ABPOS'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=REST'.
PERFORM bdc_screen USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPDF05X'.
PERFORM bdc_field USING 'RF05A-ABPOS' '1'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'DF05B-PSDIF(01)',
'BDC_OKCODE' '=PI'.
* << Fim da exclusão
PERFORM bdc_screen USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=BU'.
* >> Início da exclusão: FUNCTION /PWS/ZYCE_TRANSACAO_F_30
PERFORM bdc_screen USING 'SAPMF05A' '0700'.
PERFORM bdc_field USING:
'BDC_CURSOR' 'RF05A-AZEI1(01)',
'BDC_OKCODE' '=PI'.
WRITE: t_dados-d_valut TO v_valut.
PERFORM bdc_screen USING 'SAPMF05A' v_tela2.
PERFORM bdc_field USING:
'BDC_OKCODE' '=BU'.
READ TABLE itab_oculto WITH KEY campo = 'BSEG-VALUT' chave = 'D'.
IF sy-subrc <> 0.
IF t_dados-agkoa = 'S'.
PERFORM bdc_field USING 'BSEG-VALUT' v_valut.
ENDIF.
ENDIF.
READ TABLE itab_oculto WITH KEY campo = 'BSEG-SGTXT' chave = 'D'.
IF sy-subrc <> 0.
PERFORM bdc_field USING 'BSEG-SGTXT' t_dados-d_sgtxt.
ENDIF.
PERFORM bdc_screen USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.
READ TABLE itab_oculto WITH KEY campo = 'COBL-GSBER' chave = 'D'.
IF sy-subrc <> 0.
PERFORM bdc_field USING 'COBL-GSBER' t_dados-d_gsber.
ENDIF.
IF t_dados-tabela = '/PWS/ZYCET013'.
PERFORM bdc_screen USING 'SAPMF05A' '0700'.
PERFORM bdc_field USING:
'BDC_CURSOR' 'RF05A-AZEI1(04)',
'BDC_OKCODE' '=PI'.
ELSE.
PERFORM bdc_screen USING 'SAPMF05A' '0700'.
PERFORM bdc_field USING:
'BDC_CURSOR' 'RF05A-AZEI1(02)',
'BDC_OKCODE' '=PI'.
ENDIF.
WRITE: t_dados-d_valut TO v_valut.
PERFORM bdc_screen USING 'SAPMF05A' v_tela2.
PERFORM bdc_field USING:
'BDC_OKCODE' '=BU'.
PERFORM bdc_screen USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.
READ TABLE itab_oculto WITH KEY campo = 'COBL-GSBER' chave = 'D'.
IF sy-subrc <> 0.
PERFORM bdc_field USING 'COBL-GSBER' t_dados-d_gsber.
ENDIF.
IF t_dados-tabela = '/PWS/ZYCET013'.
IF NOT t_dados-c_prctr IS INITIAL.
PERFORM bdc_field USING 'COBL-PRCTR' t_dados-c_prctr.
ENDIF.
ENDIF.
* << Fim da exclusão
REFRESH itab_msg.
CLEAR itab_msg.
v_transacao = 'F-30'.
v_update = 'S'.
v_msgid = 'F5'.
v_msgno = '312'.
IF v_modo IS INITIAL.
v_mode = 'N'.
ELSE.
v_mode = v_modo.
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em CUAD /PWS/SAPMZYCE003
Criar uma nova "tecla de função" no status-gui 0010_HDR
-Código de função: REENV_CB
-Atalho: Ctrl-Shift-F5
-Texto de função: Reenvia para Câmbio
-Ícone: ICON_PLANNING_IN
-Texto informativo: Reenvia Embarque para Câmbio
Esta tecla de função deverá ser incluída na barra de botões, na posição de número 7 (entre o botão
ENV_CB e o separador de botões)
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPT /PWS/SAPMZYCE003
Incluído símbolo de texto:
-Idioma: PT
-Símbolo: 636
-Texto: (30 caracteres)
"Efetuar ajuste de commodities?"
-Comprimento máximo: 50
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003F01
...
tipodoc
back
atual_c
FROM /pws/zycet020
INTO TABLE itab_zycet020. "#EC CI_NOWHERE
SELECT fkart
bukrs
somaqtd
tipodoc
estorno
* >> Início da inclusão: FORM CARREGA_PARAMETROS
ajusta_commod
* << Fim da inclusão
FROM /pws/zycet023
INTO TABLE itab_zycet023.
SELECT tpcomis
vkgrp
FROM /pws/zycet025
INTO TABLE itab_zycet025.
SELECT bukrs
parvw1
gewei
envia_c
...
...
consig_std
cond_inativa
alt_cond
rec_camb
doc_camb
agrup_fat_blq
tpverifparc
alt_incoterm
dtlct
cond_estat
* >> Início da inclusão: FORM CARREGA_PARAMETROS
ajusta_commod
* << Fim da inclusão
FROM /pws/zycet037
INTO TABLE itab_zycet037.
SELECT pgmna
codint
tdid
FROM /pws/zycet041
INTO TABLE itab_zycet041. "#EC CI_SGLSELECT
SELECT vktrt
dtvencto
dtvar
...
...
msgty = 'I'
msgv1 = text-519
msgv2 = /pws/zycee001-nrseq
txtnr = 221
zeile = 'CEX_SEL_001'.
ENDIF.
ENDFORM.
FORM refresh_embarque USING value(p_novos).
v_refresh_novos = p_novos.
PERFORM executa_exit USING 'EMB006'.
* >> Início da inclusão: FORM REFRESH_EMBARQUE
IF /pws/zycee001-envia_c = 'X' AND okcode = 'REFRESH'.
wa_controle-ajuste_commodities = 'X'.
/pws/zycee001-envia_c = space.
ENDIF.
* << Fim da inclusão
CHECK sy-subrc EQ 0.
PERFORM progress_indicator USING 1 36
'Efetuando Refresh do Embarque'(m01).
IF p_novos EQ 'X'.
IF wa_controle-novos_itens IS INITIAL.
PERFORM limpa_dados_sap.
PERFORM seleciona_dados_sap USING wa_controle-novos_itens.
ELSE.
LOOP AT itab_zycet002 WHERE novo = 'X'.
PERFORM seleciona_dados_sap USING wa_controle-novos_itens.
...
...
IF itab_zycet002[] IS INITIAL.
PERFORM limpa_dados_sap.
ENDIF.
PERFORM atualiza_dados_pw_no_embarque USING 'X'.
CLEAR v_rec_cont.
READ TABLE itab_zycet002 WITH KEY status = 'C'
TRANSPORTING NO FIELDS.
IF sy-subrc IS INITIAL.
v_rec_cont = 'X'.
ENDIF.
* >> Início da inclusão: FORM REFRESH_EMBARQUE
IF wa_controle-ajuste_commodities = 'X' AND okcode = 'REFRESH'.
/pws/zycee001-envia_c = 'X'.
ENDIF.
* << Fim da inclusão
PERFORM progress_indicator USING 36 36
'Efetuando Refresh do Embarque'(m01).
ENDFORM.
FORM atualiza_dados_sap_no_embarque USING value(p_novos).
DATA: v_linhas_ant TYPE i,
v_linhas_dep TYPE i,
v_checa_auart TYPE c.
v_checa_auart = 'X'.
v_linhas_dep = 0.
DESCRIBE TABLE itab_zycet002 LINES v_linhas_ant.
...
...
WITH KEY codigo = itab_zycet008-codigo
bukrs = space
proccond = 'COM'.
ENDIF.
IF sy-subrc EQ 0.
wa_status_cab-comag = 'A'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
* >> Início da exclusão: FORM MONTA_TABELA_STATUS_CAB
IF /pws/zycee001-envia_c EQ 'X'.
* << Fim da exclusão
* >> Início da inclusão: FORM MONTA_TABELA_STATUS_CAB
IF /pws/zycee001-envia_c EQ 'X'
OR wa_controle-ajuste_commodities = 'X'.
* << Fim da inclusão
wa_status_cab-envcb = 'C'.
ELSE.
wa_status_cab-envcb = 'A'.
ENDIF.
IF wa_status_cab-envcb = 'C'.
LOOP AT itab_zycbt005.
IF itab_zycbt005-dtvincul GT wa_status_cab-d_vin.
wa_status_cab-d_vin = itab_zycbt005-dtvincul.
ENDIF.
ENDLOOP.
...
...
PERFORM reclass_cambiais.
ENDIF.
COMMIT WORK.
v_modo_venc = /pws/zycee001-modo_venc.
IF itab_zycet037-agrup_fat_rec = '0'.
v_mode = v_modo.
EXPORT v_mode TO MEMORY ID '035'.
READ TABLE itab_zycet079 WITH KEY func = 'AGR'.
IF sy-subrc NE 0 OR
itab_zycet079-transacao IS INITIAL.
* >> Início da exclusão: FORM ENVIA_PARA_CAMBIO
itab_zycet079-transacao = '/PWS/ZYCER089'.
* << Fim da exclusão
* >> Início da inclusão: FORM ENVIA_PARA_CAMBIO
itab_zycet079-transacao = '/PWS/ZYCER314'.
* << Fim da inclusão
ENDIF.
AUTHORITY-CHECK OBJECT 'S_TCODE'
ID 'TCD'
FIELD itab_zycet079-transacao.
IF sy-subrc EQ 0.
EXPORT v_modo_venc TO MEMORY ID 'VCTO'.
SUBMIT (itab_zycet079-transacao)
WITH p_nrseq = /pws/zycee001-nrseq
WITH p_flag = 'X'
AND RETURN.
...
...
posnl
vbeln_vf
posnr
ebeln
ebelp.
IF wa_limpa-werks EQ 'X'.
CLEAR: /pws/zycee001-werks.
ENDIF.
IF wa_limpa-gsber EQ 'X'.
CLEAR: /pws/zycee001-gsber.
* >> Início da inclusão: FORM CONSISTENCIA_ITENS
ENDIF.
IF wa_controle-ajuste_commodities = 'X'.
PERFORM consiste_ajuste_commodities
USING
/pws/zycee001
itab_zycet002_ant[]
itab_zycet023[]
itab_zycbt017[]
itab_bkpf[]
itab_bseg[]
itab_zycbt030[]
CHANGING
itab_zycet002[]
itab_zycbt030_pendcomm[].
* << Fim da inclusão
ENDIF.
CHECK p_excluir EQ 'X'.
READ TABLE itab_zycet002 WITH KEY mark = 'X'.
IF sy-subrc IS INITIAL.
PERFORM elimina_itens_marcados USING space
CHANGING v_exclui.
ENDIF.
CHECK v_exclui EQ 'X'.
PERFORM limpa_dados_para_refresh.
PERFORM refresh_embarque USING space.
...
...
v_executa = 'X'.
ENDIF.
IF v_executa EQ 'X'.
PERFORM exclui_dados_cambio.
itab_zycet002-emb_liq = space.
MODIFY itab_zycet002 TRANSPORTING emb_liq
WHERE emb_liq NE space.
itab_zycet002_ant-emb_liq = space.
MODIFY itab_zycet002_ant TRANSPORTING emb_liq
WHERE emb_liq NE space.
* >> Início da inclusão: FORM RETIRA_DO_CAMBIO
itab_zycet002-ajuste_commod = space.
MODIFY itab_zycet002
TRANSPORTING ajuste_commod
WHERE ajuste_commod <> space.
itab_zycet002-ajuste_commod = space.
MODIFY itab_zycet002_ant
TRANSPORTING ajuste_commod
WHERE ajuste_commod <> space.
* << Fim da inclusão
UPDATE /pws/zycet002 SET emb_liq = space
* >> Início da inclusão: FORM RETIRA_DO_CAMBIO
ajuste_commod = space
* << Fim da inclusão
WHERE nrseq = /pws/zycee001-nrseq.
/pws/zycee001-envia_c = space.
CLEAR /pws/zycee001-dtenvcamb.
UPDATE /pws/zycet001 SET envia_c = space
dtenvcamb = /pws/zycee001-dtenvcamb
WHERE nrseq = /pws/zycee001-nrseq.
...
...
ENDFORM.
FORM seleciona_itens_contabeis.
SELECT bukrs
belnr
gjahr
buzei
augcp
augbl
koart
shkzg
* >> Início da inclusão: FORM SELECIONA_ITENS_CONTABEIS
gsber
* << Fim da inclusão
wrbtr
fdwbt
kunnr
lifnr
* >> Início da inclusão: FORM SELECIONA_ITENS_CONTABEIS
zterm
* << Fim da inclusão
bupla
FROM bseg
APPENDING TABLE itab_bseg
...
...
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = v_msgtp
msgv1 = p_msgv1
msgv2 = p_msgv2
msgv3 = p_msgv3
msgv4 = p_msgv4
txtnr = p_txtnr
zeile = p_zeile.
ENDFORM.
* >> Início da inclusão:
FORM reenvia_para_cambio.
DATA: v_resposta(1) TYPE c,
v_result(1) TYPE c.
PERFORM refresh_embarque USING 'X'.
PERFORM verifica_alteracao.
CHECK sy-subrc IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = text-636
titel = text-530
cancel_display = space
IMPORTING
answer = v_resposta.
CHECK v_resposta CA 'YJ'.
EXPORT v_mode = v_modo TO MEMORY ID '035'.
READ TABLE itab_zycet079 WITH KEY func = 'AGR'.
IF sy-subrc NE 0 OR itab_zycet079-transacao IS INITIAL.
itab_zycet079-transacao = '/PWS/ZYCER314'.
ENDIF.
AUTHORITY-CHECK OBJECT 'S_TCODE'
ID 'TCD'
FIELD itab_zycet079-transacao.
IF sy-subrc EQ 0.
SUBMIT (itab_zycet079-transacao)
WITH p_nrseq = /pws/zycee001-nrseq
WITH p_flag = 'R'
AND RETURN.
COMMIT WORK.
ELSE.
MESSAGE e261(sf) WITH itab_zycet079-transacao.
ENDIF.
IMPORT v_result FROM MEMORY ID '031'.
IF sy-subrc = 0 AND v_result = 'Y'.
itab_zycet002-ajuste_commod = '1'.
MODIFY itab_zycet002[] FROM itab_zycet002
TRANSPORTING ajuste_commod
WHERE ajuste_commod = '0'.
MODIFY itab_zycet002_ant[] FROM itab_zycet002
TRANSPORTING ajuste_commod
WHERE ajuste_commod = '0'.
UPDATE /pws/zycet002
SET ajuste_commod = '1'
WHERE nrseq = /pws/zycee001-nrseq
AND ajuste_commod = '0'.
MESSAGE s245 WITH /pws/zycee001-nrseq.
ENDIF.
ENDFORM.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003F02
...
IF sy-subrc EQ 0.
LEAVE TO TRANSACTION c_transacao_a AND SKIP FIRST SCREEN.
ELSE.
MESSAGE e261(sf) WITH c_transacao_a.
ENDIF.
WHEN 'ENTER'.
IF sy-tcode EQ c_transacao_c.
ENDIF.
WHEN 'ENV_CB'.
PERFORM envia_para_cambio.
* >> Início da inclusão: FORM OKCODE_0010
WHEN 'REENV_CB'.
PERFORM reenvia_para_cambio.
* << Fim da inclusão
WHEN 'HDR'.
CALL SCREEN '4001' STARTING AT 20 05.
WHEN 'MODO'.
PERFORM modo_batch_input.
WHEN 'NEXT'.
wa_controle-item_atual = wa_controle-item_atual + 1.
WHEN 'PREV'.
wa_controle-item_atual = wa_controle-item_atual - 1.
WHEN 'REFRESH'.
PERFORM refresh_embarque USING 'X'.
...
...
IF wa_status_cab-rgexp EQ 'A' OR
wa_status_cab-rgexp IS INITIAL.
APPEND 'F_DDEXP' TO i_botoes.
ENDIF.
IF sy-tcode NE c_transacao_a.
APPEND 'REFRESH' TO i_botoes.
APPEND 'ELIMI' TO i_botoes.
APPEND 'DESBLOQ' TO i_botoes.
APPEND 'REM_CB' TO i_botoes.
APPEND 'ENV_CB' TO i_botoes.
* >> Início da inclusão: FORM EXCLUI_STATUS_GUI_0010_HDR
APPEND 'REENV_CB' TO i_botoes.
* << Fim da inclusão
ENDIF.
IF sy-tcode EQ c_transacao_e.
APPEND 'SALVA' TO i_botoes.
APPEND 'EM_EXIB' TO i_botoes.
ENDIF.
IF sy-tcode EQ c_transacao_a.
APPEND 'EM_MODI' TO i_botoes.
IF /pws/zycee001-sta1 EQ '4' OR
itab_zycet002[] IS INITIAL.
IF /pws/zycee001-sta1 EQ '4'.
...
...
APPEND 'F_APROP' TO i_botoes.
ELSE.
APPEND 'DESBLOQ' TO i_botoes.
IF wa_valores-preco_base GT itab_zycet312-wrbtr_dse.
APPEND 'F_DSEXP' TO i_botoes.
ENDIF.
ENDIF.
ENDIF.
IF /pws/zycee001-envia_c EQ 'X'.
APPEND 'ENV_CB' TO i_botoes.
* >> Início da inclusão: FORM EXCLUI_STATUS_GUI_0010_HDR
APPEND 'ELIMI' TO i_botoes.
IF itab_zycet037-ajusta_commod IS INITIAL.
* << Fim da inclusão
APPEND 'REFRESH' TO i_botoes.
* >> Início da exclusão: FORM EXCLUI_STATUS_GUI_0010_HDR
APPEND 'ELIMI' TO i_botoes.
* << Fim da exclusão
* >> Início da inclusão: FORM EXCLUI_STATUS_GUI_0010_HDR
APPEND 'REENV_CB' TO i_botoes.
ENDIF.
* << Fim da inclusão
ELSE.
APPEND 'REM_CB' TO i_botoes.
* >> Início da inclusão: FORM EXCLUI_STATUS_GUI_0010_HDR
APPEND 'REENV_CB' TO i_botoes.
* << Fim da inclusão
ENDIF.
IF wa_status_cab-cvinc CA 'BC' OR
wa_status_cab-cliqu CA 'BC'.
APPEND 'REM_CB' TO i_botoes.
ENDIF.
CLEAR itab_t001.
READ TABLE itab_t001 WITH KEY bukrs = /pws/zycee001-bukrs.
IF itab_t001-land1 NE 'BR'.
APPEND 'F_RGVEN' TO i_botoes.
APPEND 'F_REXPO' TO i_botoes.
...
...
MODIFY itab_zycet015 TRANSPORTING nrseq
WHERE nrseq NE /pws/zycee001-nrseq.
itab_zycet016-nrseq = /pws/zycee001-nrseq.
MODIFY itab_zycet016 TRANSPORTING nrseq
WHERE nrseq NE /pws/zycee001-nrseq.
IF NOT itab_permiso[] IS INITIAL.
READ TABLE itab_permiso INDEX 1.
MOVE-CORRESPONDING itab_permiso TO /pws/zycee001.
ENDIF.
MODIFY /pws/zycet001 FROM /pws/zycee001.
* >> Início da exclusão: FORM SALVA_EMBARQUE
IF /pws/zycee001-envia_c IS INITIAL.
* << Fim da exclusão
* >> Início da inclusão: FORM SALVA_EMBARQUE
IF /pws/zycee001-envia_c IS INITIAL OR
wa_controle-ajuste_commodities = 'X'.
* << Fim da inclusão
DELETE FROM /pws/zycet002 WHERE nrseq = /pws/zycee001-nrseq.
IF NOT itab_zycet002[] IS INITIAL.
MODIFY /pws/zycet002 FROM TABLE itab_zycet002.
PERFORM verifica_alteracao_bd.
CHECK sy-subrc EQ 0.
ENDIF.
PERFORM exclui_items_container
USING
/pws/zycee001-nrseq
itab_zycet002[].
...
...
itab_zycet047[]
itab_zycet037[]
CHANGING
wa_zycet010
wa_zycet013.
PERFORM salva_comissao
USING
/pws/zycee001-nrseq
wa_zycet010
wa_zycet013.
* >> Início da inclusão: FORM SALVA_EMBARQUE
ENDIF.
IF wa_controle-ajuste_commodities = 'X'.
LOOP AT itab_zycbt030_pendcomm.
UPDATE /pws/zycbt030 SET pendcomm = 'X'
WHERE nrinvoic = itab_zycbt030_pendcomm-nrinvoic
AND nrparcf = itab_zycbt030_pendcomm-nrparcf
AND vbeln = itab_zycbt030_pendcomm-vbeln
AND gsberf = itab_zycbt030_pendcomm-gsberf.
ENDLOOP.
REFRESH itab_zycbt030_pendcomm[].
* << Fim da inclusão
ENDIF.
ENDIF.
COMMIT WORK.
*/pws/zycee001 = /pws/zycee001.
*/pws/zycee014 = /pws/zycee014.
*/pws/zycee014a = /pws/zycee014a.
itab_zycet002_ant[] = itab_zycet002[].
itab_zycet003_ant[] = itab_zycet003[].
itab_zycet008_ant[] = itab_zycet008[].
itab_zycet015_ant[] = itab_zycet015[].
...
...
ENDLOOP.
ENDIF.
ENDLOOP.
IF itab_excluir[] IS INITIAL.
EXIT.
ELSE.
p_exclui = 'X'.
ENDIF.
SORT itab_excluir.
LOOP AT itab_excluir.
* >> Início da inclusão: FORM ELIMINA_ITENS_MARCADOS
IF wa_controle-ajuste_commodities = 'X'.
READ TABLE itab_zycet002_ant[] TRANSPORTING NO FIELDS
WITH KEY vbeln_va = itab_excluir-vbeln_va
vbeln_vf = itab_excluir-vbeln_vf
posnr = itab_excluir-posnr
vbeln_vl = itab_excluir-vbeln_vl
posnl = itab_excluir-posnl
aupos = itab_excluir-aupos.
CHECK sy-subrc <> 0.
ENDIF.
* << Fim da inclusão
DELETE itab_zycet002 WHERE vbeln_va = itab_excluir-vbeln_va AND
aupos = itab_excluir-aupos AND
vbeln_vl = itab_excluir-vbeln_vl AND
posnl = itab_excluir-posnl AND
vbeln_vf = itab_excluir-vbeln_vf AND
posnr = itab_excluir-posnr.
DELETE itab_zycet002_tc WHERE vbeln_va = itab_excluir-vbeln_va AND
aupos = itab_excluir-aupos AND
vbeln_vl = itab_excluir-vbeln_vl AND
posnl = itab_excluir-posnl AND
...
...
ENDCASE.
ENDFORM.
FORM loop_at_screen_4005.
DATA: wa_cols TYPE cxtab_column.
LOOP AT tc_cartacred-cols INTO wa_cols.
wa_cols-screen-input = '0'.
MODIFY tc_cartacred-cols FROM wa_cols.
ENDLOOP.
DESCRIBE TABLE itab_carta_cred LINES tc_cartacred-lines.
ENDFORM.
* >> Início da inclusão:
FORM consiste_ajuste_commodities
USING
p_zycet001 TYPE /pws/zycee001
p_t_zycet002_ant LIKE itab_zycet002_ant[]
p_t_zycet023 LIKE itab_zycet023[]
p_t_zycbt017 LIKE itab_zycbt017[]
p_t_bkpf LIKE itab_bkpf[]
p_t_bseg LIKE itab_bseg[]
p_t_zycbt030 LIKE itab_zycbt030[]
CHANGING
p_t_zycet002 LIKE itab_zycet002[]
p_t_zycbt030_pendcomm LIKE itab_zycbt030_pendcomm[].
DATA: wa_zycet002 LIKE LINE OF p_t_zycet002[],
wa_bkpf LIKE LINE OF p_t_bkpf[],
wa_bseg LIKE LINE OF p_t_bseg[].
DATA: it_zycbt017 LIKE p_t_zycbt017,
it_zycbt030 LIKE p_t_zycbt030.
DATA: wa_zycbt030_pendcomm LIKE LINE OF p_t_zycbt030_pendcomm[].
FIELD-SYMBOLS: <fs_zycbt017> LIKE LINE OF it_zycbt017[],
<fs_zycbt030> LIKE LINE OF it_zycbt030[].
DATA: BEGIN OF wa_valores_doc,
gsber TYPE bseg-gsber,
zterm TYPE bseg-zterm,
wrbtr TYPE bseg-wrbtr,
END OF wa_valores_doc,
it_valores_doc LIKE STANDARD TABLE OF wa_valores_doc
WITH NON-UNIQUE KEY gsber
zterm.
it_zycbt017[] = p_t_zycbt017[].
it_zycbt030[] = p_t_zycbt030[].
LOOP AT p_t_zycet002[] INTO wa_zycet002.
READ TABLE p_t_zycet002_ant[] TRANSPORTING NO FIELDS
WITH KEY vbeln_va = wa_zycet002-vbeln_va
vbeln_vf = wa_zycet002-vbeln_vf
posnr = wa_zycet002-posnr
docnum = wa_zycet002-docnum
vbeln_vl = wa_zycet002-vbeln_vl
posnl = wa_zycet002-posnl
aupos = wa_zycet002-aupos.
IF ( sy-subrc <> 0 OR wa_zycet002-ajuste_commod = '0' )
AND wa_zycet002-estorno IS INITIAL
AND wa_zycet002-estornado IS INITIAL.
IF wa_zycet002-vbeln_vf IS INITIAL.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002 TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_zycet002-vbeln_va
msgv2 = wa_zycet002-aupos
txtnr = '110'
EXCEPTIONS
OTHERS = 0.
CONTINUE.
ENDIF.
READ TABLE p_t_zycet023[] TRANSPORTING NO FIELDS
WITH KEY fkart = wa_zycet002-fkart
bukrs = wa_zycet002-bukrs
ajusta_commod = 'X'.
IF sy-subrc <> 0.
READ TABLE p_t_zycet023[] TRANSPORTING NO FIELDS
WITH KEY fkart = wa_zycet002-fkart
bukrs = space
ajusta_commod = 'X'.
IF sy-subrc <> 0.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002 TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_zycet002-fkart
msgv2 = wa_zycet002-vbeln_vf
msgv3 = wa_zycet002-posnr
txtnr = '151'
EXCEPTIONS
OTHERS = 0.
CONTINUE.
ENDIF.
ENDIF.
IF wa_zycet002-emb_liq = 'E'.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002 TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_zycet002-vbeln_vf
msgv2 = wa_zycet002-posnr
txtnr = '150'
EXCEPTIONS
OTHERS = 0.
CONTINUE.
ENDIF.
READ TABLE p_t_bkpf[] INTO wa_bkpf
WITH KEY awkey = wa_zycet002-vbeln_vf.
IF sy-subrc = 0.
CLEAR it_valores_doc[].
LOOP AT p_t_bseg[] INTO wa_bseg
WHERE bukrs = wa_bkpf-bukrs
AND belnr = wa_bkpf-belnr
AND gjahr = wa_bkpf-gjahr
AND koart = 'D'
AND kunnr = p_zycet001-codportd.
wa_valores_doc-gsber = wa_bseg-gsber.
wa_valores_doc-zterm = wa_bseg-zterm.
IF wa_bseg-shkzg = 'H'.
wa_valores_doc-wrbtr = - wa_bseg-wrbtr.
ELSE.
wa_valores_doc-wrbtr = wa_bseg-wrbtr.
ENDIF.
COLLECT wa_valores_doc INTO it_valores_doc[].
ENDLOOP.
LOOP AT it_valores_doc[] INTO wa_valores_doc.
READ TABLE it_zycbt017[] ASSIGNING <fs_zycbt017>
WITH KEY gsberf = wa_valores_doc-gsber
zterm = wa_valores_doc-zterm.
IF sy-subrc = 0.
READ TABLE it_zycbt030[] ASSIGNING <fs_zycbt030>
WITH KEY nrinvoic = <fs_zycbt017>-nrinvoic
nrparcf = <fs_zycbt017>-nrparcf
gsberf = <fs_zycbt017>-gsberf.
IF sy-subrc = 0.
IF <fs_zycbt030>-vlslliq < <fs_zycbt030>-kwert.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002
TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = <fs_zycbt030>-nrparcf
msgv2 = wa_zycet002-vbeln_vf
msgv3 = wa_zycet002-posnr
txtnr = '155'
EXCEPTIONS
OTHERS = 0.
CONTINUE.
ENDIF.
ADD wa_valores_doc-wrbtr TO <fs_zycbt017>-vlslf.
ADD wa_valores_doc-wrbtr TO <fs_zycbt030>-vlsltrans.
wa_zycbt030_pendcomm-nrinvoic = <fs_zycbt030>-nrinvoic.
wa_zycbt030_pendcomm-nrparcf = <fs_zycbt030>-nrparcf.
wa_zycbt030_pendcomm-vbeln = <fs_zycbt030>-vbeln.
wa_zycbt030_pendcomm-gsberf = <fs_zycbt030>-gsberf.
IF <fs_zycbt017>-vlslf < 0
OR <fs_zycbt030>-vlsltrans < 0.
SUBTRACT wa_valores_doc-wrbtr
FROM <fs_zycbt017>-vlslf.
SUBTRACT wa_valores_doc-wrbtr
FROM <fs_zycbt030>-vlsltrans.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002
TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_valores_doc-gsber
msgv2 = wa_valores_doc-zterm
msgv3 = wa_zycet002-vbeln_vf
msgv4 = wa_zycet002-posnr
txtnr = '154'
EXCEPTIONS
OTHERS = 0.
DELETE TABLE p_t_zycbt030_pendcomm[]
FROM wa_zycbt030_pendcomm.
ELSE.
COLLECT wa_zycbt030_pendcomm
INTO p_t_zycbt030_pendcomm[].
ENDIF.
UNASSIGN <fs_zycbt030>.
ELSE.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002 TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_valores_doc-gsber
msgv2 = wa_valores_doc-zterm
msgv3 = wa_zycet002-vbeln_vf
msgv4 = wa_zycet002-posnr
txtnr = '153'
EXCEPTIONS
OTHERS = 0.
ENDIF.
UNASSIGN <fs_zycbt017>.
ELSE.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002 TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_valores_doc-gsber
msgv2 = wa_valores_doc-zterm
msgv3 = wa_zycet002-vbeln_vf
msgv4 = wa_zycet002-posnr
txtnr = '153'
EXCEPTIONS
OTHERS = 0.
ENDIF.
ENDLOOP.
ELSE.
wa_zycet002-mark = 'X'.
MODIFY p_t_zycet002[] FROM wa_zycet002 TRANSPORTING mark.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_zycet002-vbeln_vf
msgv2 = wa_zycet002-posnr
txtnr = '152'
EXCEPTIONS
OTHERS = 0.
CONTINUE.
ENDIF.
IF wa_zycet002-mark IS INITIAL.
wa_zycet002-ajuste_commod = '0'.
MODIFY p_t_zycet002[] FROM wa_zycet002
TRANSPORTING ajuste_commod.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003TCD
...
END OF itab_zycbt005.
DATA: BEGIN OF itab_zycbt017 OCCURS 0.
INCLUDE STRUCTURE /pws/zycbt017.
DATA: END OF itab_zycbt017.
DATA: BEGIN OF itab_zycbt018 OCCURS 0.
INCLUDE STRUCTURE /pws/zycbt018.
DATA: END OF itab_zycbt018.
DATA: BEGIN OF itab_zycbt030 OCCURS 0.
INCLUDE STRUCTURE /pws/zycbt030.
DATA: END OF itab_zycbt030.
* >> Início da inclusão:
DATA: BEGIN OF itab_zycbt030_pendcomm OCCURS 0,
nrinvoic TYPE /pws/zycbt030-nrinvoic,
nrparcf TYPE /pws/zycbt030-nrparcf,
vbeln TYPE /pws/zycbt030-vbeln,
gsberf TYPE /pws/zycbt030-gsberf,
END OF itab_zycbt030_pendcomm.
* << Fim da inclusão
DATA: BEGIN OF itab_zycit244 OCCURS 0,
nrseqd TYPE /pws/zycit244-nrseqd,
lifnr TYPE /pws/zycit244-lifnr,
nratoc TYPE /pws/zycit244-nratoc,
tipo TYPE /pws/zycit244-tipo,
END OF itab_zycit244.
DATA: BEGIN OF itab_zycit247 OCCURS 0,
nrseqd TYPE /pws/zycit247-nrseqd,
nritem TYPE /pws/zycit247-nritem,
codmat TYPE /pws/zycit247-codmat,
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003TSD
DATA: BEGIN OF itab_bseg OCCURS 0,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
buzei TYPE bseg-buzei,
augcp TYPE bseg-augcp,
augbl TYPE bseg-augbl,
koart TYPE bseg-koart,
shkzg TYPE bseg-shkzg,
* >> Início da inclusão:
gsber TYPE bseg-gsber,
* << Fim da inclusão
wrbtr TYPE bseg-wrbtr,
fdwbt TYPE bseg-fdwbt,
kunnr TYPE bseg-kunnr,
lifnr TYPE bseg-lifnr,
* >> Início da inclusão:
zterm TYPE bseg-zterm,
* << Fim da inclusão
bupla TYPE bseg-bupla,
END OF itab_bseg.
DATA: BEGIN OF itab_dd03l OCCURS 0,
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE003X01
...
enviado_cambio(1) TYPE c,
nivel_tela(3) TYPE c,
nivel_item(3) TYPE c,
aba_anter(4) TYPE c,
edicao(1) TYPE c,
linhas TYPE sy-srows,
item_atual TYPE i,
novos_itens(1) TYPE c,
okcode_chamada TYPE sy-ucomm,
refresh(1) TYPE c,
* >> Início da inclusão:
ajuste_commodities TYPE xfeld,
* << Fim da inclusão
END OF wa_controle.
DATA: v_rec_cont TYPE flag.
DATA: BEGIN OF itab_vbfa OCCURS 0,
vbelv TYPE vbfa-vbelv,
posnv TYPE vbfa-posnv,
vbeln TYPE vbfa-vbeln,
posnn TYPE vbfa-posnn,
vbtyp_n TYPE vbfa-vbtyp_n,
vbtyp_v TYPE vbfa-vbtyp_v,
matnr TYPE vbfa-matnr,
...
...
consig_std TYPE /pws/zycet037-consig_std,
cond_inativa TYPE /pws/zycet037-cond_inativa,
alt_cond TYPE /pws/zycet037-alt_cond,
rec_camb TYPE /pws/zycet037-rec_camb,
doc_camb TYPE /pws/zycet037-doc_camb,
agrup_fat_blq TYPE /pws/zycet037-agrup_fat_blq,
tpverifparc TYPE /pws/zycet037-tpverifparc,
alt_incoterm TYPE /pws/zycet037-alt_incoterm,
dtlct TYPE /pws/zycet037-dtlct,
cond_estat TYPE /pws/zycet037-cond_estat,
* >> Início da inclusão:
ajusta_commod TYPE /pws/zycet037-ajusta_commod,
* << Fim da inclusão
END OF itab_zycet037.
DATA: BEGIN OF itab_zycet023 OCCURS 0,
fkart TYPE /pws/zycet023-fkart,
bukrs TYPE /pws/zycet023-bukrs,
somaqtd TYPE /pws/zycet023-somaqtd,
tipodoc TYPE /pws/zycet023-tipodoc,
estorno TYPE /pws/zycet023-estorno,
* >> Início da inclusão:
ajusta_commod TYPE /pws/zycet023-ajusta_commod,
* << Fim da inclusão
END OF itab_zycet023.
DATA: BEGIN OF itab_ekko OCCURS 0,
ebeln TYPE ekko-ebeln,
bukrs TYPE ekko-bukrs,
lifnr TYPE ekko-lifnr,
zterm TYPE ekko-zterm,
ekorg TYPE ekko-ekorg,
ekgrp TYPE ekko-ekgrp,
waers TYPE ekko-waers,
ihrez TYPE ekko-ihrez,
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/MZYCE312I01
...
LEAVE PROGRAM.
ENDIF.
ELSE.
LEAVE PROGRAM.
ENDIF.
WHEN OTHERS.
PERFORM destravar_tabela.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
* >> Início da inclusão:
MODULE check_ajusta_commod INPUT.
IF /pws/zycet037-ajusta_commod = 'X'
AND /pws/zycet037-alt_cond <> '0'.
MESSAGE w016
WITH 'Para ajustar commodities, não é permitido alterar'(011)
'a condição de pagamento'(012).
/pws/zycet037-alt_cond = '0'.
ENDIF.
ENDMODULE.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCER314
Criar o programa /PWS/ZYCER314
Classe de desenvolvimento: /PWS/ZYCE
Título: Agrupamento / Estorno do Câmbio com Commodities
Categoria: 1-Executável
Status: K-Programa de clientes produtivo
Grupo de autorização: ZYCE
O código-fonte segue abaixo:
* --------------------------------------------------------------------
* PROCWORK Software
* Produto: pw.CE
* Módulo: DE - Documentação de Exportação
* Descrição: Agrupamento de embarque para câmbio, estorno e ajuste de
* commodities
* Help Desk: (11) 5504-0270
* --------------------------------------------------------------------
* ESTE PROGRAMA NÃO DEVE SER ALTERADO SEM PRÉVIA CONSULTA
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 31/12/08 Codificação inicial
* --------------------------------------------------------------------
REPORT /pws/zycer314 MESSAGE-ID /pws/zycem.
* Tipos ---------------------------------------------------------------
TYPES: resultado(1) TYPE c.
TYPES: s_zycbt011 TYPE /pws/zycbt011,
BEGIN OF s_zycbt017,
nrinvoic TYPE /pws/zycbt017-nrinvoic,
nrparcf TYPE /pws/zycbt017-nrparcf,
gsberf TYPE /pws/zycbt017-gsberf,
zterm TYPE /pws/zycbt017-zterm,
END OF s_zycbt017,
s_zycbt030 TYPE /pws/zycbt030.
TYPES: s_zycet001 TYPE /pws/zycet001,
s_zycet037 TYPE /pws/zycet037,
s_zycet093 TYPE /pws/zycet093.
TYPES: t_zycbt012 TYPE STANDARD TABLE OF /pws/zycbt012 WITH DEFAULT KEY,
t_zycbt017 TYPE STANDARD TABLE OF s_zycbt017 WITH DEFAULT KEY,
t_zycbt030 TYPE STANDARD TABLE OF s_zycbt030 WITH DEFAULT KEY,
t_zycbt032 TYPE STANDARD TABLE OF /pws/zycbt032 WITH DEFAULT KEY,
t_zycbe033 TYPE STANDARD TABLE OF /pws/zycbe033 WITH DEFAULT KEY,
t_zycbt034 TYPE STANDARD TABLE OF /pws/zycbt034 WITH DEFAULT KEY,
t_zycbt036 TYPE STANDARD TABLE OF /pws/zycbt036 WITH DEFAULT KEY.
TYPES: t_zycet002 TYPE STANDARD TABLE OF /pws/zycet002 WITH DEFAULT KEY,
t_zycee005 TYPE STANDARD TABLE OF /pws/zycee005 WITH DEFAULT KEY,
t_zycet093 TYPE STANDARD TABLE OF /pws/zycet093 WITH DEFAULT KEY.
TYPES: BEGIN OF s_bkpf,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
awkey TYPE bkpf-awkey,
budat TYPE bkpf-budat,
END OF s_bkpf,
t_bkpf TYPE STANDARD TABLE OF s_bkpf WITH DEFAULT KEY.
TYPES: BEGIN OF s_bsad,
bukrs TYPE bsad-bukrs,
kunnr TYPE bsad-kunnr,
umsks TYPE bsad-umsks,
umskz TYPE bsad-umskz,
augdt TYPE bsad-augdt,
augbl TYPE bsad-augbl,
zuonr TYPE bsad-zuonr,
gjahr TYPE bsad-gjahr,
belnr TYPE bsad-belnr,
buzei TYPE bsad-buzei,
END OF s_bsad,
t_bsad TYPE STANDARD TABLE OF s_bsad WITH DEFAULT KEY.
TYPES: t_t052s TYPE STANDARD TABLE OF t052s WITH DEFAULT KEY.
TYPES: BEGIN OF s_valores_documento,
belnr TYPE bseg-belnr,
zterm TYPE bseg-zterm,
gsber TYPE bseg-gsber,
budat TYPE bkpf-budat,
commodity TYPE xfeld, " 'X' = Doc. para ajuste de commod.
dmbtr TYPE bseg-dmbtr,
wrbtr TYPE bseg-wrbtr,
END OF s_valores_documento,
t_valores_documento TYPE STANDARD TABLE OF s_valores_documento
WITH NON-UNIQUE KEY belnr
zterm
gsber
budat
commodity.
TYPES: BEGIN OF s_valores_por_condicao,
zterm TYPE dzterm,
montante_md TYPE bseg-wrbtr,
montante_mi TYPE bseg-dmbtr,
END OF s_valores_por_condicao,
t_valores_por_condicao TYPE STANDARD TABLE
OF s_valores_por_condicao
WITH NON-UNIQUE KEY zterm.
* Constantes ----------------------------------------------------------
CONSTANTS: c_sucesso TYPE resultado VALUE 'Y',
c_erro TYPE resultado VALUE 'N'.
* Variáveis -----------------------------------------------------------
DATA: g_resultado TYPE resultado.
* Tela de seleção -----------------------------------------------------
PARAMETERS: p_nrseq TYPE /pws/zycet001-nrseq OBLIGATORY,
p_flag(1) TYPE c.
SELECTION-SCREEN COMMENT 38(50) text-000.
* Processamento -------------------------------------------------------
START-OF-SELECTION.
CALL FUNCTION 'MESSAGES_INITIALIZE'.
CASE p_flag.
WHEN 'X'. " Agrupamento de faturas
PERFORM envia_embarque
USING
p_nrseq
CHANGING
g_resultado.
WHEN 'R'. " Reagrupamento das faturas para ajuste dos commodities
PERFORM reenvia_embarque
USING
p_nrseq
CHANGING
g_resultado.
WHEN space. " Estorno dos documentos gerados
PERFORM remove_embarque
USING
p_nrseq
CHANGING
g_resultado.
WHEN OTHERS. " Código inválido
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'A'
msgv1 = 'Código de operação inválido:'(008)
msgv2 = p_flag
txtnr = '016'
zeile = 'Verificação dos dados'(015)
EXCEPTIONS
OTHERS = 0.
g_resultado = c_erro.
ENDCASE.
EXPORT v_result = g_resultado TO MEMORY ID '031'.
CALL FUNCTION 'MESSAGES_SHOW'
EXPORTING
object = 'Resultado do agrupamento / estorno'(012)
show_linno = 'X'
i_use_grid = 'X'
EXCEPTIONS
OTHERS = 0.
END-OF-SELECTION.
* --------------------------------------------------------------------
* Form ENVIA_EMBARQUE
* --------------------------------------------------------------------
* Objetivo: Faz o envio (agrupamento) de embarque para câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Número seqüencial do embarque a ser enviado
* <-- p_resultado Resultado do envio: sucesso ou erro
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM envia_embarque
USING
p_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_resultado TYPE resultado.
DATA: wa_zycet001 TYPE /pws/zycet001,
it_zycet002 TYPE t_zycet002,
it_zycet093 TYPE t_zycet093.
DATA: it_zycet002_por_centro LIKE it_zycet002,
wa_zycet002 LIKE LINE OF it_zycet002[].
DATA: wa_proximo_zycet002 LIKE LINE OF it_zycet002[],
indice_proximo_zycet002 TYPE i.
DATA: wa_zycet037 TYPE /pws/zycet037.
DATA: it_zycbt030 TYPE t_zycbt030.
DATA: wa_zycbt011 TYPE /pws/zycbt011,
it_zycbt012 TYPE t_zycbt012.
DATA: modo_bi TYPE bdcmode.
PERFORM seleciona_dados_exportacao
USING
p_nrseq
CHANGING
wa_zycet001
it_zycet002[]
it_zycet093[].
IF wa_zycet001 IS INITIAL OR it_zycet002[] IS INITIAL.
p_resultado = c_erro.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-007
msgv2 = p_nrseq
txtnr = 016
zeile = 'Sel. de dados do emb.'(016)
EXCEPTIONS
OTHERS = 0.
EXIT.
ENDIF.
PERFORM seleciona_parametros_export
USING
wa_zycet001
CHANGING
wa_zycet037.
* Verifica se pode agrupar sem receita de vendas
IF wa_zycet037-agrup_sem_rec <> '1'.
LOOP AT it_zycet002[] TRANSPORTING NO FIELDS WHERE status NE 'C'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
txtnr = '293'
zeile = 'Verif. de rec. vendas'(017)
EXCEPTIONS
OTHERS = 0.
p_resultado = c_erro.
EXIT.
ENDIF.
ENDIF.
PERFORM seleciona_documentos_cambio
USING
wa_zycet001-nrseq
CHANGING
it_zycbt030[].
PERFORM seleciona_parametros_cambio
USING
wa_zycet001
CHANGING
wa_zycbt011
it_zycbt012[].
PERFORM determina_modo_batch_input
CHANGING
modo_bi.
IF wa_zycet037-centro_dif = '0'.
PERFORM agrupa_documentos
USING
modo_bi
wa_zycet001
it_zycet002[]
wa_zycet037
wa_zycbt011
CHANGING
p_resultado.
ELSE. " Quebra por divisão
SORT it_zycet002[] BY gsber.
LOOP AT it_zycet002 INTO wa_zycet002.
indice_proximo_zycet002 = sy-tabix + 1.
APPEND wa_zycet002 TO it_zycet002_por_centro[].
READ TABLE it_zycet002[] INTO wa_proximo_zycet002
INDEX indice_proximo_zycet002
TRANSPORTING gsber.
IF sy-subrc <> 0 " Este é o último passo do loop
OR wa_proximo_zycet002-gsber <> wa_zycet002-gsber.
PERFORM agrupa_documentos
USING
modo_bi
wa_zycet001
it_zycet002_por_centro[]
wa_zycet037
wa_zycbt011
CHANGING
p_resultado.
CLEAR it_zycet002_por_centro[].
IF p_resultado = c_erro.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " ENVIA_EMBARQUE
* --------------------------------------------------------------------
* Form REENVIA_EMBARQUE
* --------------------------------------------------------------------
* Objetivo: Faz o reenvio de embarque para ajuste de commodities.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Número seqüencial do embarque a ser reenviado
* <-- p_resultado Resultado do reenvio: sucesso ou erro
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM reenvia_embarque
USING
p_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_resultado TYPE resultado.
DATA: wa_zycet001 TYPE /pws/zycet001,
it_zycet002 TYPE t_zycet002,
it_zycet093 TYPE t_zycet093,
wa_zycet093 LIKE LINE OF it_zycet093[].
DATA: wa_zycet037 TYPE /pws/zycet037.
DATA: it_zycbt017 TYPE t_zycbt017,
wa_zycbt017 LIKE LINE OF it_zycbt017[].
DATA: it_zycbt030 TYPE t_zycbt030,
wa_zycbt030 LIKE LINE OF it_zycbt030[].
DATA: wa_zycbt011 TYPE /pws/zycbt011,
it_zycbt012 TYPE t_zycbt012.
DATA: it_bsad TYPE t_bsad,
wa_bsad LIKE LINE OF it_bsad[].
DATA: it_valores_itens TYPE t_valores_documento.
DATA: modo_bi TYPE bdcmode.
DATA: l_resultado TYPE resultado.
PERFORM seleciona_dados_exportacao
USING
p_nrseq
CHANGING
wa_zycet001
it_zycet002[]
it_zycet093[].
IF wa_zycet001 IS INITIAL OR it_zycet002[] IS INITIAL.
p_resultado = c_erro.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-007
msgv2 = p_nrseq
txtnr = 016
zeile = 'Sel. de dados do emb.'(016)
EXCEPTIONS
OTHERS = 0.
EXIT.
ENDIF.
READ TABLE it_zycet002[] TRANSPORTING NO FIELDS
WITH KEY ajuste_commod = '0'.
IF sy-subrc = 4. " Não há itens de ajuste
p_resultado = c_erro.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-014
txtnr = 016
zeile = 'Verif. reagrupamento'(018)
EXCEPTIONS
OTHERS = 0.
EXIT.
ENDIF.
PERFORM seleciona_parametros_export
USING
wa_zycet001
CHANGING
wa_zycet037.
PERFORM determina_valores_itens
USING
wa_zycet001
it_zycet002[]
CHANGING
it_valores_itens[].
PERFORM seleciona_documentos_cambio
USING
wa_zycet001-nrseq
CHANGING
it_zycbt030[].
PERFORM seleciona_part_cliente_compens
USING
wa_zycet001-codportd
wa_zycet001-bukrs
it_zycbt030[]
CHANGING
it_bsad[].
PERFORM seleciona_parcelas_cambio
USING
wa_zycet001-nrseq
CHANGING
it_zycbt017[].
PERFORM seleciona_parametros_cambio
USING
wa_zycet001
CHANGING
wa_zycbt011
it_zycbt012[].
PERFORM determina_modo_batch_input
CHANGING
modo_bi.
p_resultado = c_sucesso.
LOOP AT it_zycbt030[] INTO wa_zycbt030 WHERE NOT pendcomm IS initial.
CLEAR: wa_zycbt017,
wa_zycet093,
wa_bsad.
* Verifica se tem item para ajustar
READ TABLE it_zycbt017[] INTO wa_zycbt017
WITH KEY nrinvoic = wa_zycbt030-nrinvoic
nrparcf = wa_zycbt030-nrparcf
gsberf = wa_zycbt030-gsberf.
CHECK sy-subrc = 0.
READ TABLE it_valores_itens[] TRANSPORTING NO FIELDS
WITH KEY gsber = wa_zycbt030-gsberf
zterm = wa_zycbt017-zterm
commodity = 'X'.
CHECK sy-subrc = 0.
* Estorna o documento de agrupamento antigo
READ TABLE it_zycet093[] INTO wa_zycet093
WITH KEY belnr_i = wa_zycbt030-belnr.
* Não houve desmembramento da fatura
IF wa_zycbt030-belnr6 IS INITIAL.
PERFORM anula_doc_compensacao_agrup
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
PERFORM estorna_doc_agrupamento
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
* Cria o novo documento de agrupamento
PERFORM reagrupa_documentos
USING
modo_bi
wa_zycet001
it_zycet002[]
wa_zycet037
wa_zycbt011
wa_zycbt017
wa_zycbt030
it_valores_itens[]
CHANGING
l_resultado.
IF l_resultado = c_erro.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-013
msgv2 = wa_zycbt017-gsberf
msgv3 = wa_zycbt017-zterm
txtnr = '016'
zeile = 'Reagrupamento'(020)
EXCEPTIONS
OTHERS = 0.
p_resultado = c_erro.
ENDIF.
ELSE. " Houve desmembramento no câmbio...
READ TABLE it_bsad[] TRANSPORTING NO FIELDS
WITH KEY belnr = wa_zycbt030-belnr6.
IF sy-subrc <> 0. "...mas não houve compensação
READ TABLE it_bsad[] INTO wa_bsad
WITH KEY belnr = wa_zycbt030-belnr.
PERFORM anula_doc_compensacao_desmembr
USING
modo_bi
wa_zycet001
wa_bsad
CHANGING
l_resultado.
PERFORM clearing_desmembramento
USING
modo_bi
wa_zycet001
it_zycet002
wa_zycet037
wa_zycbt011
wa_zycbt030
wa_bsad
CHANGING
l_resultado.
IF l_resultado = c_sucesso.
PERFORM anula_doc_compensacao_agrup
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
PERFORM estorna_doc_agrupamento
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
PERFORM reagrupa_documentos
USING
modo_bi
wa_zycet001
it_zycet002[]
wa_zycet037
wa_zycbt011
wa_zycbt017
wa_zycbt030
it_valores_itens[]
CHANGING
l_resultado.
IF l_resultado = c_erro.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-013
msgv2 = wa_zycbt017-gsberf
msgv3 = wa_zycbt017-zterm
txtnr = '016'
zeile = 'Reagrupamento'(020)
EXCEPTIONS
OTHERS = 0.
p_resultado = c_erro.
ENDIF.
ELSE.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-013
msgv2 = wa_zycbt017-gsberf
msgv3 = wa_zycbt017-zterm
txtnr = '016'
zeile = 'Reagrupamento'(020)
EXCEPTIONS
OTHERS = 0.
p_resultado = c_erro.
ENDIF.
ELSE. " Houve compensação do desmembramento
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_zycbt030-nrparcf
txtnr = 155
zeile = 'Verif. reagrupamento'(018)
EXCEPTIONS
OTHERS = 0.
p_resultado = c_erro.
ENDIF.
ENDIF.
ENDLOOP.
IF sy-subrc <> 0.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = 'Nenhum item pendente de atualização'(010)
txtnr = '016'
zeile = 'Verif. reagrupamento'(018)
EXCEPTIONS
OTHERS = 0.
p_resultado = c_erro.
ENDIF.
ENDFORM. " REENVIA_EMBARQUE
* --------------------------------------------------------------------
* Form REMOVE_EMBARQUE
* --------------------------------------------------------------------
* Objetivo: Faz a remoção (estorno) do embarque no câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Número seqüencial do embarque a ser estornado
* <-- p_resultado Resultado do estorno: sucesso ou erro
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM remove_embarque
USING
p_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_resultado TYPE resultado.
DATA: wa_zycet001 TYPE s_zycet001.
DATA: it_zycet002 TYPE t_zycet002,
wa_zycet002 LIKE LINE OF it_zycet002[].
DATA: it_zycet093 TYPE t_zycet093,
wa_zycet093 LIKE LINE OF it_zycet093[].
DATA: wa_zycet037 TYPE s_zycet037.
DATA: wa_zycbt011 TYPE s_zycbt011,
it_zycbt012 TYPE t_zycbt012.
DATA: it_zycbt030 TYPE t_zycbt030,
wa_zycbt030 LIKE LINE OF it_zycbt030[].
DATA: it_bsad TYPE t_bsad,
wa_bsad LIKE LINE OF it_bsad[],
cliente TYPE bsad-kunnr.
DATA: modo_bi TYPE bdcmode.
DATA: l_resultado LIKE p_resultado.
DATA: l_belnr TYPE bkpf-belnr.
PERFORM seleciona_dados_exportacao
USING
p_nrseq
CHANGING
wa_zycet001
it_zycet002[]
it_zycet093[].
IF wa_zycet001 IS INITIAL OR it_zycet002[] IS INITIAL.
p_resultado = c_erro.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = text-007
msgv2 = p_nrseq
txtnr = 016
zeile = 'Sel. de dados do emb.'(016)
EXCEPTIONS
OTHERS = 0.
EXIT.
ENDIF.
PERFORM seleciona_parametros_export
USING
wa_zycet001
CHANGING
wa_zycet037.
PERFORM seleciona_documentos_cambio
USING
wa_zycet001-nrseq
CHANGING
it_zycbt030[].
LOOP AT it_zycbt030[] INTO wa_zycbt030
WHERE pendcomm = 'X'.
IF NOT wa_zycbt030-belnr IS INITIAL.
l_belnr = wa_zycbt030-belnr.
ELSE.
l_belnr = wa_zycbt030-belnr6.
ENDIF.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = 'Documento pendente de atualização:'(011)
msgv2 = l_belnr
txtnr = '016'
zeile = 'Verif. desagrupamento'(019)
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
IF sy-subrc = 0.
p_resultado = c_erro.
EXIT.
ENDIF.
PERFORM seleciona_parametros_cambio
USING
wa_zycet001
CHANGING
wa_zycbt011
it_zycbt012[].
LOOP AT it_zycet002[] INTO wa_zycet002 WHERE NOT kunrg IS initial.
cliente = wa_zycet002-kunrg.
EXIT.
ENDLOOP.
PERFORM seleciona_part_cliente_compens
USING
cliente
wa_zycet001-bukrs
it_zycbt030
CHANGING
it_bsad.
PERFORM determina_modo_batch_input
CHANGING
modo_bi.
p_resultado = c_sucesso.
LOOP AT it_zycbt030[] INTO wa_zycbt030.
IF NOT wa_zycbt030-belnr IS INITIAL.
l_belnr = wa_zycbt030-belnr.
ELSE.
l_belnr = wa_zycbt030-belnr6.
ENDIF.
READ TABLE it_bsad[] INTO wa_bsad
WITH KEY belnr = wa_zycbt030-belnr.
* Documento já compensado
IF sy-subrc = 0.
PERFORM anula_doc_compensacao_desmembr
USING
modo_bi
wa_zycet001
wa_bsad
CHANGING
l_resultado.
PERFORM clearing_desmembramento
USING
modo_bi
wa_zycet001
it_zycet002
wa_zycet037
wa_zycbt011
wa_zycbt030
wa_bsad
CHANGING
l_resultado.
IF l_resultado = c_erro.
p_resultado = c_erro.
ELSE.
PERFORM anula_doc_compensacao_agrup
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
PERFORM estorna_doc_agrupamento
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
ENDIF.
* Documento não compensado
ELSE.
CLEAR wa_zycet093.
READ TABLE it_zycet093[] INTO wa_zycet093
WITH KEY belnr_i = l_belnr.
PERFORM anula_doc_compensacao_agrup
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
PERFORM estorna_doc_agrupamento
USING
modo_bi
wa_zycet001
wa_zycet037
wa_zycet093
wa_zycbt030
CHANGING
l_resultado.
IF l_resultado = c_erro.
p_resultado = c_erro.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " REMOVE_EMBARQUE
* --------------------------------------------------------------------
* Form SELECIONA_DADOS_EXPORTACAO
* --------------------------------------------------------------------
* Objetivo: Faz a seleção de dados das tabelas do embarque de
* exportação
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Número seqüencial do embarque a ser selecionado
* <-- p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* p_t_zycet093 Dados da receita de vendas
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_dados_exportacao
USING
p_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_t_zycet093 TYPE t_zycet093.
DATA: it_complemento TYPE STANDARD TABLE OF /pws/zycet002,
it_devolucao TYPE STANDARD TABLE OF /pws/zycet002.
SELECT SINGLE *
FROM /pws/zycet001
INTO p_zycet001
WHERE nrseq = p_nrseq.
IF sy-subrc = 0.
CALL FUNCTION '/PWS/ZYCE_SEPARA_ITENS_EMB'
EXPORTING
nrseq = p_nrseq
inclui_par_dt = 'X'
inclui_es_saida = ' '
TABLES
tab_saida = p_t_zycet002[]
tab_complemento = it_complemento[]
tab_devolucao = it_devolucao[]
EXCEPTIONS
itens_nao_encontrados = 1
OTHERS = 2.
IF sy-subrc = 0.
APPEND LINES OF: it_complemento TO p_t_zycet002[],
it_devolucao TO p_t_zycet002[].
ELSE.
CLEAR: p_zycet001,
p_t_zycet002[].
ENDIF.
SELECT *
FROM /pws/zycet093
INTO TABLE p_t_zycet093[]
WHERE nrseq = p_nrseq.
IF sy-subrc = 0.
CLEAR p_t_zycet093[].
ENDIF.
ELSE.
CLEAR: p_zycet001,
p_t_zycet002[],
p_t_zycet093[].
ENDIF.
ENDFORM. " SELECIONA_DADOS_EXPORTACAO
* --------------------------------------------------------------------
* Form SELECIONA_DOCUMENTOS_CAMBIO
* --------------------------------------------------------------------
* Objetivo: Faz a seleção de dados do agrupamento do embarque no
* câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Número seqüencial do embarque a ser selecionado
* <-- p_t_zycbt030 Documentos de agrupamento
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_documentos_cambio
USING
p_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_t_zycbt030 TYPE t_zycbt030.
DATA: nrinvoic TYPE /pws/zycbt030-nrinvoic.
nrinvoic = p_nrseq.
SELECT *
FROM /pws/zycbt030
INTO TABLE p_t_zycbt030
WHERE nrinvoic = nrinvoic.
IF sy-subrc <> 0.
CLEAR p_t_zycbt030[].
ENDIF.
ENDFORM. " SELECIONA_DOCUMENTOS_CAMBIO
* --------------------------------------------------------------------
* Form SELECIONA_PARCELAS_CAMBIO
* --------------------------------------------------------------------
* Objetivo: Faz a seleção de dados do agrupamento do embarque no
* câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_nrseq Número seqüencial do embarque a ser selecionado
* <-- p_t_zycbt030 Documentos de agrupamento
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_parcelas_cambio
USING
p_nrseq TYPE /pws/zycet001-nrseq
CHANGING
p_t_zycbt017 TYPE t_zycbt017.
DATA: nrinvoic TYPE /pws/zycbt017-nrinvoic.
nrinvoic = p_nrseq.
SELECT nrinvoic
nrparcf
gsberf
zterm
FROM /pws/zycbt017
INTO TABLE p_t_zycbt017
WHERE nrinvoic = nrinvoic.
IF sy-subrc <> 0.
CLEAR p_t_zycbt017[].
ENDIF.
ENDFORM. " SELECIONA_PARCELAS_CAMBIO
* --------------------------------------------------------------------
* Form SELECIONA_PARAMETROS_EXPORT
* --------------------------------------------------------------------
* Objetivo: Faz a seleção de parâmetros do módulo de exportação
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho de um embarque
* <-- p_zycet037 Parâmetros de embarque por empresa
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_parametros_export
USING
p_zycet001 TYPE s_zycet001
CHANGING
p_zycet037 TYPE s_zycet037.
SELECT SINGLE *
FROM /pws/zycet037
INTO p_zycet037
WHERE bukrs = p_zycet001-bukrs.
IF sy-subrc <> 0.
CLEAR p_zycet037.
ENDIF.
ENDFORM. " SELECIONA_PARAMETROS_EXPORT
* --------------------------------------------------------------------
* Form SELECIONA_PARAMETROS_CAMBIO
* --------------------------------------------------------------------
* Objetivo: Faz a seleção de parâmetros do módulo de exportação
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho de um embarque
* <-- p_zycbt011 Parâmetros do evento 005, módulo exportação
* p_t_zycbt012 Tabela de contas contábeis
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_parametros_cambio
USING
p_zycet001 TYPE s_zycet001
CHANGING
p_zycbt011 TYPE s_zycbt011
p_t_zycbt012 TYPE t_zycbt012.
SELECT SINGLE *
FROM /pws/zycbt011
INTO p_zycbt011
WHERE codeven = '005'
AND codmod = 'X'
AND bukrs = p_zycet001-bukrs.
IF sy-subrc <> 0.
CLEAR p_zycbt011.
ENDIF.
SELECT *
FROM /pws/zycbt012
INTO TABLE p_t_zycbt012[]
WHERE codeven = '005'
AND codmod = 'X'.
IF sy-subrc <> 0.
CLEAR p_t_zycbt012.
ENDIF.
ENDFORM. " SELECIONA_PARAMETROS_CAMBIO
* --------------------------------------------------------------------
* Form SELECIONA_DOCUMENTOS_DOS_ITENS
* --------------------------------------------------------------------
* Objetivo: Faz a seleção do cabeçalho dos documentos contábeis de
* itens de um embarque.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_t_zycet002 Itens do embarque
* <-- p_t_bkpf Documentos dos itens do embarque
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_documentos_dos_itens
USING
p_t_zycet002 TYPE t_zycet002
CHANGING
p_t_bkpf TYPE t_bkpf.
DATA: wa_zycet002 LIKE LINE OF p_t_zycet002[].
DATA: it_awkey TYPE STANDARD TABLE OF bkpf-awkey,
wa_awkey LIKE LINE OF it_awkey[].
LOOP AT p_t_zycet002[] INTO wa_zycet002 WHERE NOT vbeln_vf IS initial.
wa_awkey = wa_zycet002-vbeln_vf.
COLLECT wa_awkey INTO it_awkey[].
ENDLOOP.
IF NOT it_awkey[] IS INITIAL.
SORT it_awkey[].
SELECT belnr
gjahr
awkey
budat
FROM bkpf
INTO TABLE p_t_bkpf[]
FOR ALL ENTRIES IN it_awkey[]
WHERE awtyp = 'VBRK'
AND awkey = it_awkey-table_line
AND awsys = space.
IF sy-subrc <> 0.
CLEAR p_t_bkpf[].
ENDIF.
ELSE.
CLEAR p_t_bkpf[].
ENDIF.
ENDFORM. " SELECIONA_DOCUMENTOS_DOS_ITENS
* --------------------------------------------------------------------
* Form DETERMINA_MODO_BATCH_INPUT
* --------------------------------------------------------------------
* Objetivo: Retorna o modo de execução do batch input escolhido no
* embarque (através do IMPORT do memory id '035'). Se o modo
* não foi previamente escolhido, retorna 'N' (invisível)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução de um batch-input
* <-- <nenhum>
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_modo_batch_input
CHANGING
p_modo_bi TYPE bdcmode.
IMPORT v_mode = p_modo_bi FROM MEMORY ID '035'.
IF sy-subrc <> 0 OR p_modo_bi IS INITIAL.
p_modo_bi = 'N'.
ENDIF.
ENDFORM. " DETERMINA_MODO_BATCH_INPUT
* --------------------------------------------------------------------
* Form AGRUPA_DOCUMENTOS
* --------------------------------------------------------------------
* Objetivo: Executa a F-30 para agrupamento dos documentos
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_zycet001 Cabeçalho de embarque
* p_t_zycet002 Itens de embarque
* p_zycet037 Parâmetros de embarque
* p_zycbt011 Parâmetros de eventos do câmbio
* <-- p_resultado Resultado da execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM agrupa_documentos
USING
p_modo_bi TYPE bdcmode
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_zycet037 TYPE s_zycet037
p_zycbt011 TYPE s_zycbt011
CHANGING
p_resultado TYPE resultado.
DATA: it_cabecalho TYPE t_zycbe033,
it_itens TYPE t_zycbt036.
DATA: v_belnr TYPE bkpf-belnr.
PERFORM preenche_cabecalho_agrupamento
USING
p_zycet001
p_t_zycet002[]
p_zycet037
p_zycbt011
CHANGING
it_cabecalho[].
PERFORM preenche_itens_agrupamento
USING
p_zycet001
p_t_zycet002[]
CHANGING
it_itens[].
PERFORM executa_f_30c
USING
p_modo_bi
it_cabecalho[]
it_itens[]
CHANGING
v_belnr
p_resultado.
ENDFORM. " AGRUPA_DOCUMENTOS
* --------------------------------------------------------------------
* Form PREENCHE_CABECALHO_AGRUPAMENTO
* --------------------------------------------------------------------
* Objetivo: Preenche os dados do cabeçalho da F-30 para a execução do
* agrupamento
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho de embarque
* p_t_zycet002 Itens de embarque
* p_zycet037 Parâmetros de embarque
* p_zycbt011 Parâmetros de eventos do câmbio
* <-- p_t_cabecalho Dados do cabeçalho de execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_cabecalho_agrupamento
USING
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_zycet037 TYPE s_zycet037
p_zycbt011 TYPE s_zycbt011
CHANGING
p_t_cabecalho TYPE t_zycbe033.
DATA: wa_cabecalho LIKE LINE OF p_t_cabecalho[].
DATA: wa_zycet002_index1 LIKE LINE OF p_t_zycet002[].
DATA: it_valores TYPE t_valores_por_condicao,
wa_valores LIKE LINE OF it_valores[].
READ TABLE p_t_zycet002[] INTO wa_zycet002_index1 INDEX 1.
wa_cabecalho-mandt = sy-mandt.
wa_cabecalho-tcode = 'F-30'.
wa_cabecalho-tabela = '/PWS/ZYCET002'.
wa_cabecalho-cpochv = p_zycet001-nrseq.
wa_cabecalho-bukrs = p_zycet001-bukrs.
wa_cabecalho-waers = wa_zycet002_index1-waers.
wa_cabecalho-blart = p_zycbt011-blart.
PERFORM determina_data_de_lancamento
USING
p_zycet037
p_zycet001
CHANGING
wa_cabecalho-budat.
PERFORM determina_data_do_documento
USING
p_zycet037
p_zycet001
CHANGING
wa_cabecalho-bldat.
wa_cabecalho-wwert = p_zycet001-dtemb.
wa_cabecalho-zfbdt = p_zycet001-dtvencto.
wa_cabecalho-d_valut = sy-datlo.
wa_cabecalho-c_valut = sy-datlo.
wa_cabecalho-bktxt = 'AGRUPAMENTO'(004).
PERFORM determina_data_vencimento_emb
USING
p_zycet001
CHANGING
wa_cabecalho-dtdocto.
PERFORM determina_nr_doc_referencia
USING
p_zycet001
CHANGING
wa_cabecalho-xblnr.
wa_cabecalho-d_gsber = wa_zycet002_index1-gsber.
wa_cabecalho-agkon = wa_zycet002_index1-kunrg.
wa_cabecalho-agkoa = p_zycbt011-koart.
PERFORM determina_taxa_conversao
USING
p_zycet001-bukrs
wa_zycet002_index1-waers
wa_cabecalho-dtdocto
CHANGING
wa_cabecalho-kursf.
PERFORM determina_valores_documento
USING
p_zycet001
p_zycet037
p_t_zycet002[]
wa_zycet002_index1-zterm
CHANGING
it_valores[].
LOOP AT it_valores[] INTO wa_valores.
wa_cabecalho-zterm = wa_valores-zterm.
IF NOT wa_cabecalho-zterm IS INITIAL.
wa_cabecalho-mwskz = 'X'.
ELSE.
CLEAR wa_cabecalho-mwskz.
ENDIF.
wa_cabecalho-wrbtr = wa_valores-montante_md.
wa_cabecalho-dmbtr = wa_valores-montante_mi.
wa_cabecalho-newbs = '04'.
wa_cabecalho-d_newko = p_zycet001-codportd.
APPEND wa_cabecalho TO p_t_cabecalho[].
ENDLOOP.
ENDFORM. " PREENCHE_CABECALHO_AGRUPAMENTO
* --------------------------------------------------------------------
* Form DETERMINA_DATA_DE_LANCAMENTO
* --------------------------------------------------------------------
* Objetivo: Retorna a data de lançamento, conforme opção da
* /PWS/ZYCET037-DTLCT
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet037 Parâmetros de embarque
* p_zycet001 Cabeçalho de embarque
* <-- p_data Data de lançamento
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_data_de_lancamento
USING
p_zycet037 TYPE s_zycet037
p_zycet001 TYPE s_zycet001
CHANGING
p_data TYPE d.
IF p_zycet037-dtlct CA 'EN'.
p_data = p_zycet001-dtemb.
ELSE.
p_data = sy-datlo.
ENDIF.
ENDFORM. " DETERMINA_DATA_DE_LANCAMENTO
* --------------------------------------------------------------------
* Form DETERMINA_DATA_DO_DOCUMENTO
* --------------------------------------------------------------------
* Objetivo: Retorna a data do documento, conforme opção da
* /PWS/ZYCET037-DTDOC
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet037 Parâmetros de embarque
* p_zycet001 Cabeçalho de embarque
* <-- p_data Data do documento
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_data_do_documento
USING
p_zycet037 TYPE s_zycet037
p_zycet001 TYPE s_zycet001
CHANGING
p_data TYPE d.
IF p_zycet037-dtdoc CA 'EN'.
p_data = p_zycet001-dtemb.
ELSE.
p_data = sy-datlo.
ENDIF.
ENDFORM. " DETERMINA_DATA_DO_DOCUMENTO
* --------------------------------------------------------------------
* Form DETERMINA_DATA_VENCIMENTO_EMB
* --------------------------------------------------------------------
* Objetivo: Retorna a data de vencimento de um embarque, conforme
* opção da /PWS/ZYCET001-MODO_VENC
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* <-- p_data Data de vencimento do embarque
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_data_vencimento_emb
USING
p_zycet001 TYPE s_zycet001
CHANGING
p_data TYPE d.
CASE p_zycet001-modo_venc.
WHEN 'E'. " Data do embarque
p_data = p_zycet001-dtemb.
WHEN 'B'. " Data do B/L (Conhecimento de embarque)
SELECT SINGLE dtbl
FROM /pws/zycet047
INTO p_data
WHERE nrseq = p_zycet001-nrseq. "#EC *
WHEN 'V'. " Data da averbação
p_data = p_zycet001-dtaverb.
WHEN 'S'. " Data do cruze
p_data = p_zycet001-dtcruze.
ENDCASE.
ENDFORM. " DETERMINA_DATA_VENCIMENTO_EMB
* --------------------------------------------------------------------
* Form DETERMINA_NR_DOC_REFERENCIA
* --------------------------------------------------------------------
* Objetivo: Retorna o valor a ser preenchido no campo referência
* (XBLNR), conforme opção da tabela /PWS/ZYCBT013
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* <-- p_xblnr Referência
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_nr_doc_referencia
USING
p_zycet001 TYPE s_zycet001
CHANGING
p_xblnr TYPE xblnr.
STATICS: cpocb TYPE /pws/zycbt013-cpocb.
IF cpocb IS INITIAL.
SELECT SINGLE cpocb
FROM /pws/zycbt013
INTO cpocb
WHERE tabela = '/PWS/ZYCET001'
AND cpor3 = 'XBLNR'. "#EC *
ENDIF.
CASE cpocb.
WHEN 'NRSEQ'.
p_xblnr = p_zycet001-nrseq.
WHEN 'NREMB'.
p_xblnr = p_zycet001-nremb.
WHEN OTHERS.
CLEAR p_xblnr.
ENDCASE.
ENDFORM. " DETERMINA_NR_DOC_REFERENCIA
* --------------------------------------------------------------------
* Form DETERMINA_TAXA_CONVERSAO
* --------------------------------------------------------------------
* Objetivo: Retorna a taxa de conversão entre a moeda de uma empresa e
* uma moeda escolhida.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_empresa Empresa
* p_de_moeda Moeda a converter
* p_data_conversao Data da taxa de conversão
* <-- p_taxa Taxa de conversão
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_taxa_conversao
USING
p_empresa TYPE bukrs
p_de_moeda TYPE tcurr-fcurr
p_data_conversao TYPE d
CHANGING
p_taxa TYPE tcurr-ukurs.
DATA: moeda_empresa TYPE tcurr-fcurr,
categoria TYPE /pws/zycbt011-ctmoed.
CLEAR p_taxa.
PERFORM determina_moeda_empresa
USING
p_empresa
CHANGING
moeda_empresa.
CHECK NOT moeda_empresa IS INITIAL.
PERFORM determina_categoria_conversao
USING
p_empresa
CHANGING
categoria.
CHECK NOT categoria IS INITIAL.
CALL FUNCTION '/PWS/ZYGL_MONTANTE_CONVERTE'
EXPORTING
i_montante = 1
i_demoeda = p_de_moeda
i_paramoeda = moeda_empresa
i_ctmoeda = categoria
i_dtbase = p_data_conversao
IMPORTING
e_txc = p_taxa
EXCEPTIONS
OTHERS = 0.
ENDFORM. " DETERMINA_TAXA_CONVERSAO
* --------------------------------------------------------------------
* Form DETERMINA_MOEDA_EMPRESA
* --------------------------------------------------------------------
* Objetivo: Retorna a moeda de uma empresa (T001-WAERS)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_empresa Empresa
* <-- p_moeda Moeda
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_moeda_empresa
USING
p_empresa TYPE t001-bukrs
CHANGING
p_moeda TYPE t001-waers.
STATICS: BEGIN OF buffer,
empresa TYPE t001-bukrs,
moeda TYPE t001-waers,
END OF buffer.
IF p_empresa <> buffer-empresa.
buffer-empresa = p_empresa.
SELECT SINGLE waers
FROM t001
INTO buffer-moeda
WHERE bukrs EQ p_empresa.
IF sy-subrc <> 0.
CLEAR buffer-moeda.
ENDIF.
ENDIF.
p_moeda = buffer-moeda.
ENDFORM. " DETERMINA_MOEDA_EMPRESA
* --------------------------------------------------------------------
* Form DETERMINA_CATEGORIA_CONVERSAO
* --------------------------------------------------------------------
* Objetivo: Retorna qual a categoria de conversão de moedas a ser
* usada, para uma determinada empresa.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_empresa Empresa
* <-- p_categoria Categoria de conversão
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_categoria_conversao
USING
p_empresa TYPE /pws/zycbt011-bukrs
CHANGING
p_categoria TYPE /pws/zycbt011-ctmoed.
STATICS: BEGIN OF buffer,
empresa TYPE /pws/zycbt011-bukrs,
categoria TYPE /pws/zycbt011-ctmoed,
END OF buffer.
IF p_empresa <> buffer-empresa.
buffer-empresa = p_empresa.
SELECT SINGLE ctmoed
FROM /pws/zycbt011
INTO buffer-categoria
WHERE codmod = 'X'
AND codeven = '001'
AND bukrs = p_empresa.
IF sy-subrc <> 0.
CLEAR buffer-categoria.
ENDIF.
ENDIF.
p_categoria = buffer-categoria.
ENDFORM. " DETERMINA_CATEGORIA_CONVERSAO
* --------------------------------------------------------------------
* Form DETERMINA_VALORES_DOCUMENTO
* --------------------------------------------------------------------
* Objetivo: Determina quais os valores em moeda do documento e moeda
* interna de um documento contábil. Os valores são agrupados
* por condição de pagamento
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho de embarque
* p_zycet037 Parâmetros de embarque
* p_t_zycet002 Itens do embarque
* p_zterm Condição de pagamento
* <-- p_t_valores Tabela dos valores MD e MI
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_valores_documento
USING
p_zycet001 TYPE s_zycet001
p_zycet037 TYPE s_zycet037
p_t_zycet002 TYPE t_zycet002
p_zterm TYPE dzterm
CHANGING
p_t_valores TYPE t_valores_por_condicao.
DATA: it_zycet002 LIKE p_t_zycet002[],
wa_zycet002 LIKE LINE OF it_zycet002[].
DATA: wa_valores LIKE LINE OF p_t_valores[].
DATA: awkey TYPE bkpf-awkey,
it_t052s TYPE t_t052s,
wa_t052s LIKE LINE OF it_t052s[],
it_bseg TYPE STANDARD TABLE OF bseg,
wa_bseg LIKE LINE OF it_bseg[].
CLEAR p_t_valores[].
it_zycet002[] = p_t_zycet002[].
SORT it_zycet002[] BY vbeln_vf.
DELETE ADJACENT DUPLICATES FROM it_zycet002[] COMPARING vbeln_vf.
PERFORM determina_condicoes_parcelas
USING
p_zterm
CHANGING
it_t052s[].
IF it_t052s[] IS INITIAL.
wa_t052s-ratzt = p_zterm.
APPEND wa_t052s TO it_t052s[].
ENDIF.
LOOP AT it_t052s[] INTO wa_t052s.
wa_valores-zterm = wa_t052s-ratzt.
CLEAR: wa_valores-montante_md,
wa_valores-montante_mi.
LOOP AT it_zycet002[] INTO wa_zycet002.
awkey = wa_zycet002-vbeln_vf.
CALL FUNCTION '/PWS/ZYCE_SELECT_DOC_CONTABIL'
EXPORTING
p_awkey = awkey
p_bukrs = wa_zycet002-bukrs
p_date = wa_zycet002-fkdat
TABLES
itab_bseg = it_bseg[]
EXCEPTIONS
documento_nao_encontrado = 1
itens_nao_encontrados = 2
variante_de_exercicio = 3
data_nao_encontrada = 4
empresa_nao_encontrada = 5
erro_periodo = 6
OTHERS = 7.
IF sy-subrc = 0.
DELETE it_bseg[] WHERE koart <> 'D'
OR kunnr <> p_zycet001-codportd.
IF NOT wa_t052s-zterm IS INITIAL.
DELETE it_bseg[] WHERE zterm <> wa_valores-zterm.
ENDIF.
LOOP AT it_bseg[] INTO wa_bseg.
IF wa_bseg-shkzg = 'H'.
SUBTRACT wa_bseg-wrbtr FROM wa_valores-montante_md.
SUBTRACT wa_bseg-dmbtr FROM wa_valores-montante_mi.
ELSE.
ADD wa_bseg-wrbtr TO wa_valores-montante_md.
ADD wa_bseg-dmbtr TO wa_valores-montante_mi.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
* Não utilizar o valor MI encontrado: recalcular usando a taxa de VRC.
IF p_zycet037-gera_var = '1'.
PERFORM determina_valor_mi
USING
p_zycet001
wa_zycet002-waers
wa_valores-montante_md
CHANGING
wa_valores-montante_mi.
ENDIF.
COLLECT wa_valores INTO p_t_valores[].
ENDLOOP.
ENDFORM. " DETERMINA_VALORES_DOCUMENTO
* --------------------------------------------------------------------
* Form DETERMINA_VALOR_MI
* --------------------------------------------------------------------
* Objetivo: Calcula o valor MI, aplicando uma taxa de conversão ao
* valor MD infomado. A moeda interna é a moeda da empresa.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_de_moeda Moeda a converter
* p_montante_md Montante em moeda do documento (a converter)
* <-- p_montante_mi Montante em moeda interna (convertido)
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_valor_mi
USING
p_zycet001 TYPE s_zycet001
p_de_moeda TYPE waers
p_montante_md TYPE bseg-wrbtr
CHANGING
p_montante_mi TYPE bseg-dmbtr.
DATA: taxa TYPE tcurr-ukurs,
data_variacao_cambial TYPE d.
PERFORM determina_data_variacao_camb
USING
p_zycet001
CHANGING
data_variacao_cambial.
IF NOT data_variacao_cambial IS INITIAL.
PERFORM determina_taxa_conversao
USING
p_zycet001-bukrs
p_de_moeda
data_variacao_cambial
CHANGING
taxa.
p_montante_mi = p_montante_md * taxa.
ELSE.
p_montante_mi = 0.
ENDIF.
ENDFORM. " DETERMINA_VALOR_MI
* --------------------------------------------------------------------
* Form DETERMINA_CONDICOES_PARCELAS
* --------------------------------------------------------------------
* Objetivo: Retorna as condições de pagamento de cada parcela de uma
* condição parcelada
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zterm Condição de pagamento
* <-- p_t_t052s Tabela de condições das parcelas
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_condicoes_parcelas
USING
p_zterm TYPE t052s-zterm
CHANGING
p_t_t052s TYPE t_t052s.
SELECT *
FROM t052s
INTO TABLE p_t_t052s
WHERE zterm = p_zterm.
IF sy-subrc <> 0.
CLEAR p_t_t052s[].
ENDIF.
ENDFORM. " DETERMINA_CONDICOES_PARCELAS
* --------------------------------------------------------------------
* Form DETERMINA_DATA_VARIACAO_CAMBIAL
* --------------------------------------------------------------------
* Objetivo: Retorna qual a data a ser usada no cálculo da variação
* cambial
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho de embarque
* <-- p_data Data da variação cambial
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_data_variacao_camb
USING
p_zycet001 TYPE s_zycet001
CHANGING
p_data TYPE d.
DATA: dtvrc TYPE /pws/zycet048-dtvrc.
CLEAR p_data.
SELECT SINGLE dtvrc
FROM /pws/zycet048
INTO dtvrc
WHERE vktrt = any ( SELECT vktrt
FROM /pws/zycet139
WHERE viatrans = p_zycet001-viatrans ).
CHECK sy-subrc = 0.
CASE dtvrc.
WHEN 'DTEMB'.
p_data = p_zycet001-dtemb.
WHEN 'DTBL'.
SELECT SINGLE dtbl
FROM /pws/zycet047
INTO p_data
WHERE nrseq = p_zycet001-nrseq. "#EC *
WHEN 'DTAVERB'.
p_data = p_zycet001-dtaverb.
WHEN 'DTCRUZE'.
p_data = p_zycet001-dtcruze.
WHEN OTHERS.
CLEAR p_data.
ENDCASE.
ENDFORM. " DETERMINA_DATA_VARIACAO_CAMBIAL
* --------------------------------------------------------------------
* Form PREENCHE_ITENS_AGRUPAMENTO
* --------------------------------------------------------------------
* Objetivo: Preenche os dados dos itens da F-30 para a execução do
* agrupamento
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* <-- p_t_itens Itens para execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_itens_agrupamento
USING
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
CHANGING
p_t_itens TYPE t_zycbt036.
DATA: wa_itens LIKE LINE OF p_t_itens[].
DATA: wa_zycet002 LIKE LINE OF p_t_zycet002[].
DATA: it_bkpf TYPE t_bkpf,
wa_bkpf LIKE LINE OF it_bkpf[].
PERFORM seleciona_documentos_dos_itens
USING
p_t_zycet002[]
CHANGING
it_bkpf[].
LOOP AT p_t_zycet002[] INTO wa_zycet002.
READ TABLE it_bkpf[] INTO wa_bkpf
WITH KEY awkey = wa_zycet002-vbeln_vf.
IF sy-subrc EQ 0.
wa_itens-mandt = sy-mandt.
wa_itens-tcode = 'F-30'.
wa_itens-tabela = '/PWS/ZYCET002'.
wa_itens-cpochv = p_zycet001-nrseq.
wa_itens-belnr = wa_bkpf-belnr.
wa_itens-residuo = wa_zycet002-vlme.
wa_itens-waers = wa_zycet002-waers.
wa_itens-dtdocto = wa_bkpf-budat.
COLLECT wa_itens INTO p_t_itens[].
ENDIF.
ENDLOOP.
ENDFORM. " PREENCHE_ITENS_AGRUPAMENTO
* --------------------------------------------------------------------
* Form VERIFICA_CABECALHO_F_30
* --------------------------------------------------------------------
* Objetivo: Verifica se alguns campos críticos do cabeçalho de
* execução da F-30 estão preenchidos.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_t_cabecalho Cabeçalho de execução da F-30
* <-- p_t_mensagens Tabela de mensagens de erro
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM verifica_cabecalho_f_30
USING
p_t_cabecalho TYPE t_zycbe033
CHANGING
p_t_mensagens TYPE t_zycbt034.
DATA: wa_cabecalho LIKE LINE OF p_t_cabecalho[].
LOOP AT p_t_cabecalho INTO wa_cabecalho.
IF wa_cabecalho-dtdocto IS INITIAL.
PERFORM adiciona_mensagem_campo_branco
USING
'ZFBDT'
'Data de vencimento'(001)
CHANGING
p_t_mensagens[].
ENDIF.
IF wa_cabecalho-bukrs IS INITIAL.
PERFORM adiciona_mensagem_campo_branco
USING
'BUKRS'
'Empresa'(002)
CHANGING
p_t_mensagens[].
ENDIF.
IF wa_cabecalho-waers IS INITIAL.
PERFORM adiciona_mensagem_campo_branco
USING
'MOEDA'
'Moeda'(003)
CHANGING
p_t_mensagens[].
ENDIF.
IF wa_cabecalho-blart IS INITIAL.
PERFORM adiciona_mensagem_campo_branco
USING
'BLART'
'Tipo de documento'(005)
CHANGING
p_t_mensagens[].
ENDIF.
ENDLOOP.
ENDFORM. " VERIFICA_CABECALHO_F_30
* --------------------------------------------------------------------
* Form ADICIONA_MENSAGEM_CAMPO_BRANCO
* --------------------------------------------------------------------
* Objetivo: Inclui uma mensagem de "Campo em branco" numa tabela de
* mensagens
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_campo Nome o campo
* p_descricao Descrição do campo
* <-- p_t_mensagens Tabela de mensagens
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM adiciona_mensagem_campo_branco
USING
p_campo TYPE /pws/zycbt034-campo
p_descricao TYPE /pws/zycbt034-descricao
CHANGING
p_t_mensagens TYPE t_zycbt034.
DATA: wa_mensagem LIKE LINE OF p_t_mensagens[].
wa_mensagem-campo = p_campo.
wa_mensagem-descricao = p_descricao.
APPEND wa_mensagem TO p_t_mensagens[].
ENDFORM. " ADICIONA_MENSAGEM_CAMPO_BRANCO
* --------------------------------------------------------------------
* Form EXECUTA_FB08
* --------------------------------------------------------------------
* Objetivo: Executa a transação FB08 (estorno de documentos)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_t_dados Dados para execução da FB08
* <-- p_resultado Resultado da FB08
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM executa_fb08
USING
p_modo_bi TYPE bdcmode
p_t_dados TYPE t_zycee005
CHANGING
p_resultado TYPE resultado.
DATA: it_mensagens TYPE STANDARD TABLE OF /pws/zycet005,
wa_mensagens LIKE LINE OF it_mensagens[].
DATA: wa_dados_indx1 LIKE LINE OF p_t_dados[].
READ TABLE p_t_dados[] INTO wa_dados_indx1 INDEX 1
TRANSPORTING cpochv.
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_FB08'
EXPORTING
v_modo = p_modo_bi
TABLES
t_dados = p_t_dados[]
t_zycet005 = it_mensagens[]
EXCEPTIONS
campo_em_branco = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE it_mensagens[] TRANSPORTING NO FIELDS
WITH KEY tabela = '/PWS/ZYCBT030'
cpochv = wa_dados_indx1-cpochv
tpmsg = 'S'.
IF sy-subrc = 0.
p_resultado = c_sucesso.
ELSE.
p_resultado = c_erro.
ENDIF.
ELSE.
p_resultado = c_erro.
ENDIF.
IF p_resultado = c_erro.
LOOP AT it_mensagens[] INTO wa_mensagens.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'W'
msgv1 = wa_mensagens-msg(50)
msgv2 = wa_mensagens-msg+50(50)
txtnr = '016'
zeile = 'FB08'
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
ENDIF.
ENDFORM. " EXECUTA_FB08
* --------------------------------------------------------------------
* Form PREENCHE_DADOS_FB08
* --------------------------------------------------------------------
* Objetivo: Preenche os dados necessários ao estorno de um documento
* contábil (transação FB08)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_zycet093 Dados da receita de vendas
* p_zycet037 Parâmetros de embarque
* p_zycbt030 Documento a ser estornado
* <-- p_t_dados Dados para execução da FB08
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_dados_fb08
USING
p_zycet001 TYPE s_zycet001
p_zycet093 TYPE s_zycet093
p_zycet037 TYPE s_zycet037
p_zycbt030 TYPE s_zycbt030
CHANGING
p_t_dados TYPE t_zycee005.
DATA: wa_dados LIKE LINE OF p_t_dados[].
wa_dados-tcode = 'FB08'.
wa_dados-tabela = '/PWS/ZYCBT030'.
wa_dados-cpochv = p_zycet001-nrseq.
IF NOT p_zycbt030-belnr IS INITIAL.
wa_dados-belnr = p_zycbt030-belnr.
ELSE.
wa_dados-belnr = p_zycbt030-belnr6.
ENDIF.
wa_dados-bukrs = p_zycet001-bukrs.
IF p_zycet037-agrup_fat_rec = '0'.
IF NOT p_zycbt030-dtbelnr IS INITIAL.
wa_dados-budat = p_zycbt030-dtbelnr.
ELSE.
wa_dados-budat = p_zycbt030-budat.
ENDIF.
ELSE.
wa_dados-budat = p_zycet093-dtfat.
ENDIF.
wa_dados-bldat = wa_dados-budat.
CALL FUNCTION '/PWS/ZYCE_CHECA_PERIODO_FISCAL'
EXPORTING
v_bukrs = wa_dados-bukrs
v_date = wa_dados-budat
v_koart = '+'
IMPORTING
v_year = wa_dados-gjahr
v_stgrd = wa_dados-stgrd
EXCEPTIONS
variante_de_exercicio = 1
data_nao_encontrada = 2
empresa_nao_encontrada = 3
period_in_not_valid = 4
period_not_assigned = 5
version_undefined = 6
OTHERS = 7.
IF sy-subrc = 0.
IF wa_dados-stgrd = '02'.
wa_dados-budat = sy-datlo.
ENDIF.
ELSE.
CLEAR: wa_dados-gjahr,
wa_dados-stgrd.
ENDIF.
APPEND wa_dados TO p_t_dados[].
ENDFORM. " PREENCHE_DADOS_FB08
* --------------------------------------------------------------------
* Form EXECUTA_FBRA
* --------------------------------------------------------------------
* Objetivo: Executa uma anulação de compensação de documento
* contábil (FBRA)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_t_dados Dados para execução da FBRA
* <-- p_resultado Resultado da anulação
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM executa_fbra
USING
p_modo_bi TYPE bdcmode
p_t_dados TYPE t_zycbe033
CHANGING
p_resultado TYPE resultado.
DATA: it_mensagens TYPE t_zycbt032,
wa_mensagem LIKE LINE OF it_mensagens[].
DATA: wa_dados_indx1 LIKE LINE OF p_t_dados[].
READ TABLE p_t_dados[] INTO wa_dados_indx1 INDEX 1
TRANSPORTING cpochv.
CALL FUNCTION '/PWS/ZYCB_TRANSACAO_FBRA'
EXPORTING
v_modo = p_modo_bi
TABLES
t_dados = p_t_dados[]
t_zycbt032 = it_mensagens[]
EXCEPTIONS
campo_em_branco = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE it_mensagens[] TRANSPORTING NO FIELDS
WITH KEY tabela = '/PWS/ZYCBT030'
cpochv = wa_dados_indx1-cpochv
tpmsg = 'S'.
IF sy-subrc = 0.
p_resultado = c_sucesso.
ELSE.
p_resultado = c_erro.
ENDIF.
ELSE.
p_resultado = c_erro.
ENDIF.
IF p_resultado = c_erro.
LOOP AT it_mensagens[] INTO wa_mensagem.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'W'
msgv1 = wa_mensagem-msg(50)
msgv2 = wa_mensagem-msg+50(50)
txtnr = '016'
zeile = 'FBRA'
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
ENDIF.
ENDFORM. " EXECUTA_FBRA
* --------------------------------------------------------------------
* Form PREENCHE_DADOS_FBRA
* --------------------------------------------------------------------
* Objetivo: Preenche os dados necessários a excução de uma anulação de
* compensação de documento contábil (transação FBRA)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_zycet093 Dados da receita de vendas
* p_zycet037 Parâmetros de embarque
* p_zycbt030 Documento para anulação
* <-- p_t_dados Dados para execução da FBRA
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_dados_fbra
USING
p_zycet001 TYPE s_zycet001
p_zycet093 TYPE s_zycet093
p_zycet037 TYPE s_zycet037
p_zycbt030 TYPE s_zycbt030
CHANGING
p_t_dados TYPE t_zycbe033.
DATA: wa_dados LIKE LINE OF p_t_dados[].
wa_dados-mandt = sy-mandt.
wa_dados-tcode = 'FBRA'.
wa_dados-tabela = '/PWS/ZYCBT030'.
wa_dados-cpochv = p_zycet001-nrseq.
IF NOT p_zycbt030-belnr IS INITIAL.
wa_dados-belnr = p_zycbt030-belnr.
ELSE.
wa_dados-belnr = p_zycbt030-belnr6.
ENDIF.
wa_dados-bukrs = p_zycet001-bukrs.
IF p_zycet037-agrup_fat_rec <> '1'.
IF NOT p_zycbt030-dtbelnr IS INITIAL.
wa_dados-budat = p_zycbt030-dtbelnr.
ELSE.
wa_dados-budat = p_zycbt030-budat.
ENDIF.
ELSE.
wa_dados-budat = p_zycet093-dtfat.
ENDIF.
APPEND wa_dados TO p_t_dados[].
ENDFORM. " PREENCHE_DADOS_FBRA
* --------------------------------------------------------------------
* Form ANULA_DOC_COMPENSACAO
* --------------------------------------------------------------------
* Objetivo: Faz uma anulação de compensação de documento (FBRA)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_zycet001 Cabeçalho do embarque
* p_bsad Documento de compensação
* <-- p_resultado Resultado da anulação
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM anula_doc_compensacao_desmembr
USING
p_modo_bi TYPE bdcmode
p_zycet001 TYPE s_zycet001
p_bsad TYPE s_bsad
CHANGING
p_resultado TYPE resultado.
DATA: it_dados TYPE t_zycbe033,
wa_dados LIKE LINE OF it_dados.
wa_dados-mandt = sy-mandt.
wa_dados-tcode = 'FBRA'.
wa_dados-tabela = '/PWS/ZYCBT030'.
wa_dados-cpochv = p_zycet001-nrseq.
wa_dados-belnr = p_bsad-augbl.
wa_dados-bukrs = p_zycet001-bukrs.
wa_dados-budat = p_bsad-augdt.
wa_dados-bldat = p_bsad-augdt.
APPEND wa_dados TO it_dados[].
PERFORM executa_fbra
USING
p_modo_bi
it_dados[]
CHANGING
p_resultado.
ENDFORM. " ANULA_DOC_COMPENSACAO
* --------------------------------------------------------------------
* Form SELECIONA_PART_CLIENTE_COMPENS
* --------------------------------------------------------------------
* Objetivo: Retorna as partidas de cliente já compensadas
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_cliente Código do cliente
* p_empresa Código da empresa
* p_t_zycbt030 Documentos a processar
* <-- p_t_bsad Partidas compensadas encontradas
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM seleciona_part_cliente_compens
USING
p_cliente TYPE bsad-kunnr
p_empresa TYPE bsad-bukrs
p_t_zycbt030 TYPE t_zycbt030
CHANGING
p_t_bsad TYPE t_bsad.
DATA: wa_zycbt030 LIKE LINE OF p_t_zycbt030[].
DATA: BEGIN OF wa_docs,
gjahr TYPE bsad-gjahr,
belnr TYPE bsad-belnr,
END OF wa_docs,
it_docs LIKE STANDARD TABLE OF wa_docs
WITH DEFAULT KEY.
LOOP AT p_t_zycbt030 INTO wa_zycbt030.
IF NOT wa_zycbt030-budat(04) IS INITIAL
AND NOT wa_zycbt030-belnr6 IS INITIAL.
wa_docs-gjahr = wa_zycbt030-budat(04).
wa_docs-belnr = wa_zycbt030-belnr6.
COLLECT wa_docs INTO it_docs[].
ENDIF.
IF NOT wa_zycbt030-dtbelnr(04) IS INITIAL
AND NOT wa_zycbt030-belnr IS INITIAL.
wa_docs-gjahr = wa_zycbt030-dtbelnr(04).
wa_docs-belnr = wa_zycbt030-belnr.
COLLECT wa_docs INTO it_docs[].
ENDIF.
ENDLOOP.
IF NOT it_docs[] IS INITIAL.
SORT it_docs[].
SELECT bukrs
kunnr
umsks
umskz
augdt
augbl
zuonr
gjahr
belnr
buzei
FROM bsad
INTO TABLE p_t_bsad[]
FOR ALL ENTRIES IN it_docs[]
WHERE bukrs = p_empresa
AND kunnr = p_cliente
AND gjahr = it_docs-gjahr
AND belnr = it_docs-belnr
AND buzei = '001'.
IF sy-subrc <> 0.
CLEAR p_t_bsad[].
ENDIF.
ELSE.
CLEAR p_t_bsad[].
ENDIF.
ENDFORM. " SELECIONA_PART_CLIENTE_COMPENS
* --------------------------------------------------------------------
* Form CLEARING_DESMEMBRAMENTO
* --------------------------------------------------------------------
* Objetivo: Executa o clearing do desmenbramento no câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* p_zycet037 Parâmetros de embarque
* p_zycbt011 Parâmetros de eventos do câmbio
* p_zycbt030 Documento do desmembramento
* p_bsad Partidas compensadas
* <-- p_resultado Resultado do clearing
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM clearing_desmembramento
USING
p_modo_bi TYPE bdcmode
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_zycet037 TYPE s_zycet037
p_zycbt011 TYPE s_zycbt011
p_zycbt030 TYPE s_zycbt030
p_bsad TYPE s_bsad
CHANGING
p_resultado TYPE resultado.
DATA: it_cabecalho TYPE t_zycbe033,
it_itens TYPE t_zycbt036.
DATA: v_belnr TYPE bkpf-belnr.
PERFORM preenche_cabec_clearing_desmem
USING
p_zycet001
p_t_zycet002[]
p_zycet037
p_zycbt011
p_bsad
CHANGING
it_cabecalho[].
PERFORM preenche_itens_clearing_desmem
USING
p_zycet001
p_zycbt030
p_bsad
CHANGING
it_itens[].
PERFORM executa_f_30
USING
p_modo_bi
it_cabecalho[]
it_itens[]
CHANGING
v_belnr
p_resultado.
ENDFORM. " CLEARING_DESMEMBRAMENTO
* --------------------------------------------------------------------
* Form PREENCHE_CABEC_CLEARING_DESMEM
* --------------------------------------------------------------------
* Objetivo: Preenche o cabecalho da F-30 para o clearing do
* desmembramento no câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* p_zycet037 Parâmetros de embarque
* p_zycbt011 Parâmetros de eventos
* p_bsad Partidas compensadas
* <-- p_t_cabecalho Cabeçalho de execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_cabec_clearing_desmem
USING
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_zycet037 TYPE s_zycet037
p_zycbt011 TYPE s_zycbt011
p_bsad TYPE s_bsad
CHANGING
p_t_cabecalho TYPE t_zycbe033.
DATA: wa_cabecalho LIKE LINE OF p_t_cabecalho[].
DATA: wa_zycet002_index1 LIKE LINE OF p_t_zycet002[].
READ TABLE p_t_zycet002[] INTO wa_zycet002_index1 INDEX 1.
wa_cabecalho-mandt = sy-mandt.
wa_cabecalho-tcode = 'F-30'.
wa_cabecalho-tabela = '/PWS/ZYCET002'.
wa_cabecalho-cpochv = p_zycet001-nrseq.
PERFORM determina_data_de_lancamento
USING
p_zycet037
p_zycet001
CHANGING
wa_cabecalho-budat.
PERFORM determina_data_do_documento
USING
p_zycet037
p_zycet001
CHANGING
wa_cabecalho-bldat.
wa_cabecalho-wwert = p_zycet001-dtemb.
wa_cabecalho-zfbdt = p_zycet001-dtvencto.
wa_cabecalho-d_valut = sy-datlo.
wa_cabecalho-c_valut = sy-datlo.
wa_cabecalho-bktxt = 'AGRUPAMENTO'(004).
wa_cabecalho-bukrs = p_zycet001-bukrs.
wa_cabecalho-waers = wa_zycet002_index1-waers.
wa_cabecalho-blart = p_zycbt011-blart.
wa_cabecalho-dtdocto = p_bsad-augdt.
PERFORM determina_nr_doc_referencia
USING
p_zycet001
CHANGING
wa_cabecalho-xblnr.
CONCATENATE p_zycbt011-txtdesc
p_zycet001-nremb
INTO wa_cabecalho-augtx
SEPARATED BY space.
wa_cabecalho-d_sgtxt = wa_cabecalho-augtx.
wa_cabecalho-c_sgtxt = wa_cabecalho-augtx.
wa_cabecalho-agkon = p_bsad-kunnr.
wa_cabecalho-agkoa = 'D'.
wa_cabecalho-belnr = p_bsad-belnr.
APPEND wa_cabecalho TO p_t_cabecalho[].
ENDFORM. " PREENCHE_CABEC_CLEARING_DESMEM
* --------------------------------------------------------------------
* Form PREENCHE_ITENS_CLEARING_DESMEM
* --------------------------------------------------------------------
* Objetivo: Preenche os itens da F-30 para o clearing do
* desmembramento no câmbio
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_zycbt030 Documento do desmembramento
* p_bsad Partidas compensadas
* <-- p_t_itens Itens da execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_itens_clearing_desmem
USING
p_zycet001 TYPE s_zycet001
p_zycbt030 TYPE s_zycbt030
p_bsad TYPE s_bsad
CHANGING
p_t_itens TYPE t_zycbt036.
DATA: wa_itens LIKE LINE OF p_t_itens[].
wa_itens-mandt = sy-mandt.
wa_itens-tcode = 'F-30'.
wa_itens-tabela = '/PWS/ZYCET002'.
wa_itens-cpochv = p_zycet001-nrseq.
wa_itens-belnr = p_bsad-augbl.
wa_itens-dtdocto = p_bsad-augdt.
APPEND wa_itens TO p_t_itens[].
CLEAR wa_itens.
wa_itens-mandt = sy-mandt.
wa_itens-tcode = 'F-30'.
wa_itens-tabela = '/PWS/ZYCET002'.
wa_itens-cpochv = p_zycet001-nrseq.
wa_itens-belnr = p_zycbt030-belnr6.
wa_itens-dtdocto = p_zycbt030-budat.
APPEND wa_itens TO p_t_itens[].
ENDFORM. " PREENCHE_ITENS_CLEARING_DESMEM
* --------------------------------------------------------------------
* Form executa_f_30
* --------------------------------------------------------------------
* Objetivo: Executa uma transação F-30 (Transferir e compensar)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_t_cabecalho Cabeçalhos de execução da F-30
* p_t_itens Itens de execução da F-30
* <-- p_belnr Documento gerado
* p_resultado Resultado da execução
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM executa_f_30c
USING
p_modo_bi TYPE bdcmode
p_t_cabecalho TYPE t_zycbe033
p_t_itens TYPE t_zycbt036
CHANGING
p_belnr TYPE bkpf-belnr
p_resultado TYPE resultado.
DATA: wa_cabecalho LIKE LINE OF p_t_cabecalho[].
DATA: it_mensagens TYPE STANDARD TABLE OF /pws/zycbt032,
wa_mensagens LIKE LINE OF it_mensagens[],
it_erros TYPE STANDARD TABLE OF /pws/zycbt034,
wa_erros LIKE LINE OF it_erros[].
CLEAR p_belnr.
PERFORM verifica_cabecalho_f_30
USING
p_t_cabecalho[]
CHANGING
it_erros[].
IF it_erros[] IS INITIAL.
READ TABLE p_t_cabecalho[] INTO wa_cabecalho INDEX 1
TRANSPORTING cpochv.
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_F_30C'
EXPORTING
v_modo = p_modo_bi
TABLES
t_dados = p_t_cabecalho[]
t_campo = it_erros[]
t_zycbt032 = it_mensagens[]
t_zycbt036 = p_t_itens[]
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
ELSE.
sy-subrc = 4.
ENDIF.
IF sy-subrc = 0.
READ TABLE it_mensagens[] INTO wa_mensagens
WITH KEY tabela = '/PWS/ZYCET002'
cpochv = wa_cabecalho-cpochv
tpmsg = 'S'.
IF sy-subrc = 0.
p_resultado = c_sucesso.
p_belnr = wa_mensagens-belnr.
ELSE.
p_resultado = c_erro.
ENDIF.
ELSE.
p_resultado = c_erro.
ENDIF.
IF p_resultado = c_erro.
LOOP AT it_erros[] INTO wa_erros.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_erros-descricao
txtnr = '060'
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
LOOP AT it_mensagens[] INTO wa_mensagens.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_mensagens-msg(50)
msgv2 = wa_mensagens-msg+50(50)
txtnr = '001'
zeile = 'F-30'
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
ENDIF.
ENDFORM. " EXECUTA_F_30C
* --------------------------------------------------------------------
* Form executa_f_30
* --------------------------------------------------------------------
* Objetivo: Executa uma transação F-30 (Transferir e compensar)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_t_cabecalho Cabeçalhos de execução da F-30
* p_t_itens Itens de execução da F-30
* <-- p_belnr Documento gerado
* p_resultado Resultado da execução
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM executa_f_30
USING
p_modo_bi TYPE bdcmode
p_t_cabecalho TYPE t_zycbe033
p_t_itens TYPE t_zycbt036
CHANGING
p_belnr TYPE bkpf-belnr
p_resultado TYPE resultado.
DATA: wa_cabecalho LIKE LINE OF p_t_cabecalho[].
DATA: it_mensagens TYPE STANDARD TABLE OF /pws/zycbt032,
wa_mensagens LIKE LINE OF it_mensagens[],
it_erros TYPE STANDARD TABLE OF /pws/zycbt034,
wa_erros LIKE LINE OF it_erros[].
CLEAR p_belnr.
PERFORM verifica_cabecalho_f_30
USING
p_t_cabecalho[]
CHANGING
it_erros[].
IF it_erros[] IS INITIAL.
READ TABLE p_t_cabecalho[] INTO wa_cabecalho INDEX 1
TRANSPORTING cpochv.
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_F_30'
EXPORTING
v_modo = p_modo_bi
TABLES
t_dados = p_t_cabecalho[]
t_campo = it_erros[]
t_zycbt032 = it_mensagens[]
t_zycbt036 = p_t_itens[]
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
ELSE.
sy-subrc = 4.
ENDIF.
IF sy-subrc = 0.
READ TABLE it_mensagens[] INTO wa_mensagens
WITH KEY tabela = '/PWS/ZYCET002'
cpochv = wa_cabecalho-cpochv
tpmsg = 'S'.
IF sy-subrc = 0.
p_resultado = c_sucesso.
p_belnr = wa_mensagens-belnr.
ELSE.
p_resultado = c_erro.
ENDIF.
ELSE.
p_resultado = c_erro.
ENDIF.
IF p_resultado = c_erro.
LOOP AT it_erros[] INTO wa_erros.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_erros-descricao
txtnr = '060'
zeile = 'F-30'
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
LOOP AT it_mensagens[] INTO wa_mensagens.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = '/PWS/ZYCEM'
msgty = 'E'
msgv1 = wa_mensagens-msg(50)
msgv2 = wa_mensagens-msg+50(50)
txtnr = '001'
zeile = 'F-30'
EXCEPTIONS
OTHERS = 0.
ENDLOOP.
ENDIF.
ENDFORM. " EXECUTA_F_30
* --------------------------------------------------------------------
* Form ANULA_DOC_COMPENSACAO_AGRUP
* --------------------------------------------------------------------
* Objetivo: Executa a anulação da compensação do documento de
* agrupamento
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch input
* p_zycet001 Cabeçalho do embarque
* p_zycet037 Parâmetros de embarque
* p_zycet093 Dados da receita de vendas
* p_zycbt030 Documento a ser anulado
* <-- p_resultado Resultado da anulação
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM anula_doc_compensacao_agrup
USING
p_modo_bi TYPE bdcmode
p_zycet001 TYPE s_zycet001
p_zycet037 TYPE s_zycet037
p_zycet093 TYPE s_zycet093
p_zycbt030 TYPE s_zycbt030
CHANGING
p_resultado TYPE resultado.
DATA: it_dados TYPE t_zycbe033.
PERFORM preenche_dados_fbra
USING
p_zycet001
p_zycet093
p_zycet037
p_zycbt030
CHANGING
it_dados[].
PERFORM executa_fbra
USING
p_modo_bi
it_dados[]
CHANGING
p_resultado.
ENDFORM. " ANULA_DOC_COMPENSACAO_AGRUP
* --------------------------------------------------------------------
* Form ESTORNA_DOC_AGRUPAMENTO
* --------------------------------------------------------------------
* Objetivo: Faz o estorno do documento de agrupamento
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_zycet001 Cabeçalho do embarque
* p_zycet037 Parâmetros de embarque
* p_zycet093 Dados de receita de vendas
* p_zycbt030 Documento a ser estornado
* <-- p_resultado Resultado do estorno
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM estorna_doc_agrupamento
USING
p_modo_bi TYPE bdcmode
p_zycet001 TYPE s_zycet001
p_zycet037 TYPE s_zycet037
p_zycet093 TYPE s_zycet093
p_zycbt030 TYPE s_zycbt030
CHANGING
p_resultado TYPE resultado.
DATA: it_dados TYPE t_zycee005.
PERFORM preenche_dados_fb08
USING
p_zycet001
p_zycet093
p_zycet037
p_zycbt030
CHANGING
it_dados[].
PERFORM executa_fb08
USING
p_modo_bi
it_dados[]
CHANGING
p_resultado.
ENDFORM. " ESTORNA_DOC_AGRUPAMENTO
* --------------------------------------------------------------------
* Form DETERMINA_VALORES_ITENS
* --------------------------------------------------------------------
* Objetivo: Determina os valores dos documentos contábeis dos itens de
* embarque, por divisão e condição de pagamento.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* <-- p_t_valores_itens Valores dos itens por divisão e cond. pgto.
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_valores_itens
USING
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
CHANGING
p_t_valores_itens TYPE t_valores_documento.
DATA: wa_valores_itens LIKE LINE OF p_t_valores_itens.
DATA: wa_zycet002 LIKE LINE OF p_t_zycet002[].
DATA: v_periv TYPE t001-periv.
DATA: BEGIN OF wa_faturamentos,
awkey TYPE bkpf-awkey,
bukrs TYPE bkpf-bukrs,
gjahr TYPE bkpf-gjahr,
END OF wa_faturamentos,
it_faturamentos LIKE STANDARD TABLE OF wa_faturamentos
WITH DEFAULT KEY.
DATA: BEGIN OF wa_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
awkey TYPE bkpf-awkey,
budat TYPE bkpf-budat,
END OF wa_bkpf,
it_bkpf LIKE STANDARD TABLE OF wa_bkpf
WITH NON-UNIQUE KEY bukrs
belnr
gjahr.
DATA: BEGIN OF wa_bseg,
bukrs TYPE bseg-bukrs,
belnr TYPE bseg-belnr,
gjahr TYPE bseg-gjahr,
shkzg TYPE bseg-shkzg,
gsber TYPE bseg-gsber,
dmbtr TYPE bseg-dmbtr,
wrbtr TYPE bseg-wrbtr,
zterm TYPE bseg-zterm,
END OF wa_bseg,
it_bseg LIKE STANDARD TABLE OF wa_bseg
WITH DEFAULT KEY.
CLEAR p_t_valores_itens[].
PERFORM determina_variante_exercicio
USING
p_zycet001-bukrs
CHANGING
v_periv.
LOOP AT p_t_zycet002[] INTO wa_zycet002.
CLEAR wa_faturamentos.
wa_faturamentos-awkey = wa_zycet002-vbeln_vf.
wa_faturamentos-bukrs = wa_zycet002-bukrs.
CALL FUNCTION 'DETERMINE_PERIOD'
EXPORTING
date = wa_zycet002-fkdat
version = v_periv
IMPORTING
year = wa_faturamentos-gjahr
EXCEPTIONS
period_in_not_valid = 1
period_not_assigned = 2
version_undefined = 3
OTHERS = 4.
CHECK sy-subrc = 0.
COLLECT wa_faturamentos INTO it_faturamentos[].
ENDLOOP.
IF NOT it_faturamentos[] IS INITIAL.
SELECT bukrs
belnr
gjahr
awkey
budat
FROM bkpf
INTO TABLE it_bkpf[]
FOR ALL ENTRIES IN it_faturamentos[]
WHERE bukrs = it_faturamentos-bukrs
AND gjahr = it_faturamentos-gjahr
AND awtyp = 'VBRK'
AND awkey = it_faturamentos-awkey
AND awsys = space.
ENDIF.
CHECK NOT it_bkpf[] IS INITIAL.
SELECT bukrs
belnr
gjahr
shkzg
gsber
dmbtr
wrbtr
zterm
FROM bseg
INTO TABLE it_bseg[]
FOR ALL ENTRIES IN it_bkpf[]
WHERE bukrs = it_bkpf-bukrs
AND belnr = it_bkpf-belnr
AND gjahr = it_bkpf-gjahr
AND koart = 'D'
AND kunnr = p_zycet001-codportd.
LOOP AT p_t_zycet002[] INTO wa_zycet002.
LOOP AT it_bkpf[] INTO wa_bkpf
WHERE awkey = wa_zycet002-vbeln_vf.
CLEAR wa_valores_itens.
wa_valores_itens-belnr = wa_bkpf-belnr.
wa_valores_itens-budat = wa_bkpf-budat.
IF wa_zycet002-ajuste_commod = '0'.
wa_valores_itens-commodity = 'X'.
ENDIF.
LOOP AT it_bseg[] INTO wa_bseg
WHERE bukrs = wa_bkpf-bukrs
AND belnr = wa_bkpf-belnr
AND gjahr = wa_bkpf-gjahr.
wa_valores_itens-zterm = wa_bseg-zterm.
wa_valores_itens-gsber = wa_bseg-gsber.
IF wa_bseg-shkzg = 'H'.
wa_valores_itens-dmbtr = - wa_bseg-dmbtr.
wa_valores_itens-wrbtr = - wa_bseg-wrbtr.
ELSE.
wa_valores_itens-dmbtr = wa_bseg-dmbtr.
wa_valores_itens-wrbtr = wa_bseg-wrbtr.
ENDIF.
COLLECT wa_valores_itens INTO p_t_valores_itens[].
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDFORM. " DETERMINA_VALORES_ITENS
* --------------------------------------------------------------------
* Form PREENCHE_CABEC_REAGRUPAMENTO
* --------------------------------------------------------------------
* Objetivo: Preenche o cabeçalho da F-30 para o reagrupamento de
* embarque (ajuste de commodities)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* p_zycet037 Parâmetros de embarque
* p_zycbt011 Parâmetros de eventos
* p_valores_reagrupados Valores totais após ajuste (reagrupados)
* <-- p_t_cabecalho Cabeçalho de execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_cabec_reagrupamento
USING
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_zycet037 TYPE s_zycet037
p_zycbt011 TYPE s_zycbt011
p_valores_reagrupados TYPE s_valores_documento
CHANGING
p_t_cabecalho TYPE t_zycbe033.
DATA: wa_cabecalho LIKE LINE OF p_t_cabecalho[].
DATA: wa_zycet002_indx1 LIKE LINE OF p_t_zycet002[].
READ TABLE p_t_zycet002[] INTO wa_zycet002_indx1
WITH KEY ajuste_commod = '0'.
wa_cabecalho-mandt = sy-mandt.
wa_cabecalho-tcode = 'F-30'.
wa_cabecalho-tabela = '/PWS/ZYCET002'.
wa_cabecalho-cpochv = p_zycet001-nrseq.
wa_cabecalho-bukrs = p_zycet001-bukrs.
wa_cabecalho-waers = wa_zycet002_indx1-waers.
wa_cabecalho-blart = p_zycbt011-blart.
PERFORM determina_data_de_lancamento
USING
p_zycet037
p_zycet001
CHANGING
wa_cabecalho-budat.
PERFORM determina_data_do_documento
USING
p_zycet037
p_zycet001
CHANGING
wa_cabecalho-bldat.
wa_cabecalho-wwert = p_zycet001-dtemb.
wa_cabecalho-zfbdt = p_zycet001-dtvencto.
wa_cabecalho-d_valut = sy-datlo.
wa_cabecalho-c_valut = sy-datlo.
wa_cabecalho-bktxt = 'REAGRUPAMENTO'(009).
PERFORM determina_data_vencimento_emb
USING
p_zycet001
CHANGING
wa_cabecalho-dtdocto.
PERFORM determina_nr_doc_referencia
USING
p_zycet001
CHANGING
wa_cabecalho-xblnr.
wa_cabecalho-agkon = wa_zycet002_indx1-kunrg.
wa_cabecalho-agkoa = p_zycbt011-koart.
PERFORM determina_taxa_conversao
USING
p_zycet001-bukrs
wa_zycet002_indx1-waers
wa_cabecalho-dtdocto
CHANGING
wa_cabecalho-kursf.
wa_cabecalho-newbs = '04'.
wa_cabecalho-d_newko = p_zycet001-codportd.
wa_cabecalho-zterm = p_valores_reagrupados-zterm.
wa_cabecalho-mwskz = 'X'.
wa_cabecalho-d_gsber = p_valores_reagrupados-gsber.
wa_cabecalho-wrbtr = p_valores_reagrupados-wrbtr.
wa_cabecalho-dmbtr = p_valores_reagrupados-dmbtr.
APPEND wa_cabecalho TO p_t_cabecalho[].
ENDFORM. " PREENCHE_CABEC_REAGRUPAMENTO
* --------------------------------------------------------------------
* Form REAGRUPA_DOCUMENTOS
* --------------------------------------------------------------------
* Objetivo: Faz o reagrupamento de embarque para câmbio, para o ajuste
* de commodities
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_modo_bi Modo de execução do batch-input
* p_zycet001 Cabeçalho do embarque
* p_t_zycet002 Itens do embarque
* p_zycet037 Parâmetros de embarque
* p_zycbt011 Parâmetros de evento do câmbio
* p_zycbt017 Fatura antiga na câmbio
* p_zycbt030 Documento antigo na câmbio
* p_t_documentos Documentos contábeis do embarque
* <-- p_resultado Resultado das F-30's
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM reagrupa_documentos
USING
p_modo_bi TYPE bdcmode
p_zycet001 TYPE s_zycet001
p_t_zycet002 TYPE t_zycet002
p_zycet037 TYPE s_zycet037
p_zycbt011 TYPE s_zycbt011
p_zycbt017 TYPE s_zycbt017
p_zycbt030 TYPE s_zycbt030
p_t_documentos TYPE t_valores_documento
CHANGING
p_resultado TYPE resultado.
DATA: it_cabecalho TYPE t_zycbe033,
it_itens TYPE t_zycbt036.
DATA: wa_cabecalho LIKE LINE OF it_cabecalho[].
DATA: wa_documentos LIKE LINE OF p_t_documentos.
DATA: it_documentos_reagrupados LIKE p_t_documentos,
wa_valores_reagrupados LIKE LINE OF it_documentos_reagrupados[].
DATA: valor_ajuste TYPE bseg-wrbtr.
DATA: v_belnr TYPE bkpf-belnr.
* Monta as novas variáveis com os valores reagrupados a partir dos
* valores de commodities e valores agrupados informados:
* a) it_documentos_reagrupados: tem todos os documentos contábeis do
* reagrupamento
* b) wa_valores_reagrupados: tem o total do reagrupamento
LOOP AT p_t_documentos[] INTO wa_documentos
WHERE gsber = p_zycbt017-gsberf
AND zterm = p_zycbt017-zterm.
APPEND wa_documentos TO it_documentos_reagrupados[].
wa_valores_reagrupados-gsber = p_zycbt017-gsberf.
wa_valores_reagrupados-zterm = p_zycbt017-zterm.
ADD: wa_documentos-wrbtr TO wa_valores_reagrupados-wrbtr,
wa_documentos-dmbtr TO wa_valores_reagrupados-dmbtr.
IF wa_documentos-commodity = 'X'.
ADD: wa_documentos-wrbtr TO valor_ajuste.
ENDIF.
ENDLOOP.
PERFORM preenche_cabec_reagrupamento
USING
p_zycet001
p_t_zycet002[]
p_zycet037
p_zycbt011
wa_valores_reagrupados
CHANGING
it_cabecalho[].
READ TABLE it_cabecalho[] INTO wa_cabecalho INDEX 1.
PERFORM preenche_itens_reagrupamento
USING
p_zycet001
it_documentos_reagrupados[]
CHANGING
it_itens[].
PERFORM executa_f_30c
USING
p_modo_bi
it_cabecalho[]
it_itens[]
CHANGING
v_belnr
p_resultado.
IF p_resultado = c_sucesso.
PERFORM grava_valores_reagrupados
USING
v_belnr
wa_cabecalho-budat
p_zycbt030
valor_ajuste.
ENDIF.
ENDFORM. " REAGRUPA_DOCUMENTOS
* --------------------------------------------------------------------
* Form PREENCHE_ITENS_REAGRUPAMENTO
* --------------------------------------------------------------------
* Objetivo: Preenche os itens da F-30 para o reagrupamento de embarque
* (ajuste de commodities)
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_zycet001 Cabeçalho do embarque
* p_t_documentos Documentos contábeis do embarque
* <-- p_t_itens Itens da execução da F-30
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM preenche_itens_reagrupamento
USING
p_zycet001 TYPE s_zycet001
p_t_documentos TYPE t_valores_documento
CHANGING
p_t_itens TYPE t_zycbt036.
DATA: wa_itens LIKE LINE OF p_t_itens[].
DATA: wa_documentos LIKE LINE OF p_t_documentos[].
LOOP AT p_t_documentos[] INTO wa_documentos.
CLEAR wa_itens.
wa_itens-mandt = sy-mandt.
wa_itens-tcode = 'F-30'.
wa_itens-tabela = '/PWS/ZYCET002'.
wa_itens-cpochv = p_zycet001-nrseq.
wa_itens-belnr = wa_documentos-belnr.
wa_itens-dtdocto = wa_documentos-budat.
COLLECT wa_itens INTO p_t_itens[].
ENDLOOP.
ENDFORM. " PREENCHE_ITENS_REAGRUPAMENTO
* --------------------------------------------------------------------
* Form DETERMINA_VARIANTE_EXERCICIO
* --------------------------------------------------------------------
* Objetivo: Retorna qual a variante de exercício utilizada por uma
* empresa
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_bukrs Empresa a ser pesquisada
* <-- p_periv Variante de exercício da empresa
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM determina_variante_exercicio
USING
p_bukrs TYPE t001-bukrs
CHANGING
p_periv TYPE t001-periv.
STATICS: BEGIN OF wa_t001,
bukrs TYPE t001-bukrs,
periv TYPE t001-periv,
END OF wa_t001.
IF p_bukrs <> wa_t001-bukrs.
wa_t001-bukrs = p_bukrs.
SELECT SINGLE periv
FROM t001
INTO wa_t001-periv
WHERE bukrs = p_bukrs.
IF sy-subrc <> 0.
CLEAR wa_t001-periv.
ENDIF.
ENDIF.
p_periv = wa_t001-periv.
ENDFORM. " DETERMINA_VARIANTE_EXERCICIO
* --------------------------------------------------------------------
* Form GRAVA_VALORES_REAGRUPADOS
* --------------------------------------------------------------------
* Objetivo: Atualizar as tabelas do câmbio com os novos documentos
* gerados e o ajuste de commodities.
* --------------------------------------------------------------------
* Parâmetros: ( --> Entrada ) ( <-- Saída ) ( <-> Tabelas )
* --------------------------------------------------------------------
* --> p_belnr Novo documento gerado
* p_budat Data de lançamento do novo documento
* p_zycbt030 Documento antigo no câmbio
* p_ajuste Valor de ajuste a ser aplicado
* <-- <nenhum>
* <-> <nenhum>
* --------------------------------------------------------------------
* Chamado Data Descrição
* --------------------------------------------------------------------
* 391103 30/11/07 Codificação inicial
* --------------------------------------------------------------------
FORM grava_valores_reagrupados
USING
p_belnr TYPE bkpf-belnr
p_budat TYPE bkpf-budat
p_zycbt030 TYPE s_zycbt030
p_ajuste TYPE bseg-wrbtr.
IF p_zycbt030-belnr6 IS INITIAL.
UPDATE /pws/zycbt030
SET belnr = p_belnr
kwert = kwert + p_ajuste
vlsltrans = vlsltrans + p_ajuste
vlslliq = vlslliq + p_ajuste
dtbelnr = p_budat
pendcomm = space
WHERE nrinvoic = p_zycbt030-nrinvoic
AND nrparcf = p_zycbt030-nrparcf
AND vbeln = p_zycbt030-vbeln
AND gsberf = p_zycbt030-gsberf.
ELSE. " Se já houver BELNR6, atualiza
UPDATE /pws/zycbt030
SET belnr = p_belnr
kwert = kwert + p_ajuste
belnr6 = p_belnr
vlsltrans = vlsltrans + p_ajuste
vlslliq = vlslliq + p_ajuste
dtbelnr = p_budat
pendcomm = space
WHERE nrinvoic = p_zycbt030-nrinvoic
AND nrparcf = p_zycbt030-nrparcf
AND vbeln = p_zycbt030-vbeln
AND gsberf = p_zycbt030-gsberf.
ENDIF.
UPDATE /pws/zycbt017
SET vlavinc = vlavinc + p_ajuste
vlfob = vlfob + p_ajuste
vlslf = vlslf + p_ajuste
vlslfc = vlslfc + p_ajuste
WHERE nrinvoic = p_zycbt030-nrinvoic
AND nrparcf = p_zycbt030-nrparcf
AND gsberf = p_zycbt030-gsberf.
ENDFORM. " grava_valores_reagrupados
----------------------------------------------------------------------------------------------------
Modificações efetuadas em TRAN /PWS/ZYCER314
Criar nova transação:
Tipo: Programa e tela de seleção (Transação de report)
Código: /PWS/ZYCER314
Programa: /PWS/ZYCER314
Tela: 1000
Classe de desenvolvimento: /PWS/ZYCE
Texto da transação: Agrupamento p/ Câmbio c/ Commodities