Módulo: DOC. EXPORTAÇÃO
Funcionalidade: Variação Cambial
Data/Hora da Publicação: 24/03/2006 00:00:00
Data/Hora Última Alteração: 21/02/2011 16:39:43
Descrição da Nota: EMISSÃO DE NOTA FISCAL COMPLEMENTAR COM REFERÊNCIA
Sintoma
O programa fazia tratamentos errados na geração de NF de variação cambial com referência, gerando
notas com valor duplicados.
Solução
Desenvolvimento de consistência e novo mapeamento da transação J1B1N.
Informações Complementares
----------------------------------------------------------------------------------------------------
Nota Número 01083 Data: 24/03/2006 Hora: 15:31:48
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
Nota Número : 01083
Categoria : Melhoria
Prioridade : Alta
Versão PW.CE : 6.0
Pacote : 00023
Agrupamento : 00106
----------------------------------------------------------------------------------------------------
Referência às notas relacionadas:
Número - Ordem - Versão - Pacote - Descrição Breve
01024 - 00001 - 6.0 - 00023 - EMISSÃO DE NOTAS EM VARIAÇÃO CAMBIAL COM REFERÊNCIA
01056 - 00002 - 6.0 - 00023 - DADOS DA NOTA FISCAL COM REFERÊNCIA ERRADOS OU DUPLICADOS
----------------------------------------------------------------------------------------------------
EMISSÃO DE NOTA FISCAL COMPLEMENTAR COM REFERÊNCIA
----------------------------------------------------------------------------------------------------
Palavras Chave:
EXPORTAÇÃO - VARIAÇÃO CAMBIAL - NOTA FISCAL COM REFERÊNCIA
----------------------------------------------------------------------------------------------------
Objetos da nota:
FUNC /PWS/ZYCE_TRANSACAO_J1B1N_C
REPS /PWS/LZYCEGF2UXX
REPS /PWS/ZYCEI007
REPS /PWS/ZYCER007
REPT /PWS/ZYCER007
----------------------------------------------------------------------------------------------------
Foi criada a função /PWS/ZYCE_TRANSACAO_J1B1N_C
- Características:
Grupo de funções /PWS/ZYCEGF2 CE - Grp Funções para Batch Input
Texto breve Criação de Nota Fiscal ( Complementar / Devolução )
Cl.desenvolvimento /PWS/ZYCE
- Importação:
Nome parâmetro Atrib Tipo referênciaValor proposto
V_MODO LIKE /PWS/ZYCBT039-M
- Tabelas:
Nome parâmetro Atrib.tipo Tipo referência
T_DADOS LIKE /PWS/ZYCEE005
T_CAMPOS LIKE /PWS/ZYCET004
T_ZYCET005 LIKE /PWS/ZYCET005
T_MESSAGE LIKE /PWS/ZYCEE006
T_ITENSNF LIKE /PWS/ZYCEE005
- Exceções:
CAMPO_EM_BRANCO
PERIODO_FECHADO
Texto fonte:
FUNCTION /PWS/ZYCE_TRANSACAO_J1B1N_C.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" REFERENCE(V_MODO) LIKE /PWS/ZYCBT039-MODO
*" TABLES
*" T_DADOS STRUCTURE /PWS/ZYCEE005
*" T_CAMPOS STRUCTURE /PWS/ZYCET004
*" T_ZYCET005 STRUCTURE /PWS/ZYCET005
*" T_MESSAGE STRUCTURE /PWS/ZYCEE006
*" T_ITENSNF STRUCTURE /PWS/ZYCEE005
*" EXCEPTIONS
*" CAMPO_EM_BRANCO
*" PERIODO_FECHADO
*"----------------------------------------------------------------------
* Variáveis
DATA:
v_data-doc(10) TYPE c, "Data Docm.
v_data-pst(10) TYPE c, "Data Lanc.
v_bukrs LIKE t001-bukrs, "Empresa
v_refer LIKE j_1bam-sconrf VALUE '0005', "Referência
v_string LIKE j_1bam-scrcon, "Valor string
v_netpr(16) TYPE c, "Preço Liq.
v_othbas(15) TYPE c, "Montante ICMS
v_menge(13) TYPE c, "Quantidade
v_nrmsg TYPE i VALUE 0, "Nº mensagem
v_transacao(5) TYPE c, "Transação
v_mode TYPE c, "Modo
v_update TYPE c, "Upadate
v_msgid LIKE t100-arbgb, "Mensagem OK
v_msgno LIKE t100-msgnr, "Mensagem Erro
v_campo TYPE j_1bdyftx-message,
v_cfop(06) TYPE c, "CFOP
v_netbase(16) TYPE c, "Preço Base.
v_cont TYPE n,
v_cont1 TYPE i,
v_text(16) TYPE c,
v_text_aux(16) TYPE c,
v_cont_aux(2) TYPE n,
v_campo1(21),
v_campo2(20),
v_campo3(20),
v_campo4(20).
*-----------------------------------------------------------------------
* Processamento
*-----------------------------------------------------------------------
* Lê dados da tabela t_dados
LOOP AT t_dados.
CHECK t_dados-tcode = 'J1B1N'.
* Verifica se os campos da T_dados que serão usados estão preenchidos
IF ( t_dados-docdat = space ).
* Preenche campo na tabela T_CAMPO
t_campos-mandt = t_dados-mandt.
t_campos-campo = 'J_1BDYDOC-DOCDAT'.
t_campos-descricao = text-001.
APPEND t_campos.
RAISE campo_em_branco.
ENDIF.
IF ( t_dados-pstdat = space ).
* Preenche campo na tabela T_CAMPO
t_campos-mandt = t_dados-mandt.
t_campos-campo = 'J_1BDYDOC-PSTDAT'.
t_campos-descricao = text-003.
APPEND t_campos.
RAISE campo_em_branco.
ENDIF.
IF ( t_dados-itmtyp = space ).
* Preenche campo na tabela t_campo.
t_campos-mandt = t_dados-mandt.
t_campos-campo = 'J_1BDYLIN-ITMTYP'.
t_campos-descricao = text-004.
APPEND t_campos.
RAISE campo_em_branco.
ENDIF.
* Determina string dos campos
PERFORM determina_string1 USING v_refer
CHANGING v_string.
* Verificando se campos obrigatórios estão preenchidos
CLEAR itab_oculto.
REFRESH itab_oculto.
PERFORM trata_campo_obrigatorio TABLES t_dados
t_campos
itab_oculto
USING v_string.
* Valor Base
CLEAR: v_text, v_cont, v_text_aux.
WRITE t_dados-netpr TO v_text.
SHIFT v_text LEFT DELETING LEADING space.
v_cont1 = strlen( v_text ).
DO v_cont1 TIMES.
IF v_text(1) EQ '.'.
SHIFT v_text.
ELSEIF v_text(1) EQ ','.
SHIFT v_text(1).
SHIFT v_text LEFT DELETING LEADING space.
CONCATENATE v_text_aux ',' v_text(2) INTO v_text_aux.
EXIT.
ENDIF.
CONCATENATE v_text_aux v_text(1) INTO v_text_aux.
SHIFT v_text(1).
SHIFT v_text LEFT DELETING LEADING space.
ENDDO.
WRITE: t_dados-bukrs TO v_bukrs,
t_dados-base TO v_othbas CURRENCY t_dados-waers,
t_dados-docdat TO v_data-doc,
t_dados-pstdat TO v_data-pst,
v_text_aux TO v_netbase CURRENCY t_dados-waers,
t_dados-menge TO v_menge UNIT t_dados-msehi.
* Tela 0900
PERFORM bdc_tela USING 'SAPMJ1B1' '0900'.
* Campos
PERFORM bdc_campo USING:
'J_1BDYDOC-NFTYPE' t_dados-nftype,
'J_1BDYDOC-BUKRS' v_bukrs,
'J_1BDYDOC-BRANCH' t_dados-branch,
'J_1BDYDOC-PARVW' t_dados-parvw,
'J_1BDYDOC-PARID' t_dados-parid,
'J_1BDYLIN-INCLTX' 'X',
'BDC_OKCODE' 'RENF'.
* TELA 0950.
PERFORM bdc_tela USING 'SAPMJ1B1' '0950'.
PERFORM bdc_campo USING:
'J_1BDYDOC-COP_DOCNUM' t_dados-docnum,
'BDC_OKCODE' '=CORE'.
* Tela 2000
PERFORM bdc_tela USING 'SAPLJ1BB2' '2000'.
* Campos
PERFORM bdc_campo USING:
'J_1BDYDOC-DOCDAT' v_data-doc,
'J_1BDYDOC-PSTDAT' v_data-pst,
'J_1BDYDOC-DOCREF' t_dados-docnum.
loop at t_itensnf.
ADD 1 TO v_cont_aux.
write t_itensnf-WRBTR to v_netpr CURRENCY t_dados-waers.
CONCATENATE 'J_1BDYLIN-ITMTYP(' v_cont_aux ')' INTO v_campo1.
CONCATENATE 'J_1BDYLIN-MENGE(' v_cont_aux ')' INTO v_campo2.
CONCATENATE 'J_1BDYLIN-NETPR(' v_cont_aux ')' INTO v_campo4.
PERFORM bdc_field USING: v_campo1 t_dados-itmtyp,
v_campo2 v_menge,
v_campo4 v_netpr.
endloop.
PERFORM bdc_field USING: 'BDC_OKCODE' '=TAB4'.
* Tela 2000
PERFORM bdc_tela USING 'SAPLJ1BB2' '2000'.
CLEAR v_cont.
CLEAR v_campo.
DESCRIBE TABLE t_message LINES v_cont.
clear v_cont_aux.
LOOP AT t_message.
clear v_campo1.
ADD 1 TO v_cont_aux.
concatenate 'J_1BDYFTX-MESSAGE(' v_cont_aux ')' INTO v_campo1.
if v_cont_aux = '1'.
CONCATENATE t_message-msg ' ' t_message-docnum INTO v_campo.
PERFORM bdc_campo USING:
v_campo1 v_campo .
elseif sy-tabix = v_cont.
CONCATENATE t_message-msg ' ' t_message-docnum INTO v_campo.
PERFORM bdc_campo USING:
v_campo1 v_campo .
endif.
ENDLOOP.
* Campos
PERFORM bdc_campo USING:
'BDC_OKCODE' '=LKML'.
* Tela 4100
PERFORM bdc_tela USING 'SAPLJ1BB2' '4100'.
* Campos
clear v_cont_aux.
loop at t_itensnf.
clear v_campo1.
ADD 1 TO v_cont_aux.
CONCATENATE 'J_1BDYREF-SELKZ(' v_cont_aux ')' INTO v_campo1.
PERFORM bdc_field USING: v_campo1 'X'.
endloop.
PERFORM bdc_campo USING:
'BDC_OKCODE' '=COLK'.
* Tela 3000
PERFORM bdc_tela USING 'SAPLJ1BB2' '2000'.
* Campos
PERFORM bdc_campo USING:
'BDC_OKCODE' '=SAVE'.
* Definição dos parâmetros p/ a sub-rotina CALL_TRANSACTION
v_transacao = 'J1B1N'.
v_update = 'S'.
v_msgid = '8B'.
v_msgno = '161'.
* Modo pode vir do programa de batch input.
IF v_modo IS INITIAL.
v_mode = 'N'. "N - BACKGROUND A - FOREGROUND
ELSE.
v_mode = v_modo.
ENDIF.
* Executa o Call Transaction e monta as mensagens de retorno
PERFORM call_transaction TABLES itab_msg
itab_bdc
t_zycet005
t_dados
USING v_transacao
v_mode
v_update
v_msgid
v_msgno
CHANGING v_nrmsg.
ENDLOOP.
FREE:
itab_bdc,
itab_msg.
ENDFUNCTION.
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/LZYCEGF2UXX
...
INCLUDE /PWS/LZYCEGF2U72.
INCLUDE /PWS/LZYCEGF2U73.
INCLUDE /PWS/LZYCEGF2U74.
INCLUDE /PWS/LZYCEGF2U77.
INCLUDE /PWS/LZYCEGF2U75.
* >> Início da inclusão:
INCLUDE /PWS/LZYCEGF2U76.
* << Fim da inclusão
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPS /PWS/ZYCER007
...
ENDIF.
ENDIF.
IF NOT it_zycet035-nfcref IS INITIAL.
MOVE: it_relat-nrseq TO it_emitenf-nrseq,
it_relat-branch TO it_emitenf-branch,
* >> Início da inclusão: FORM IMPRIME_DADOS
it_relat-docnum TO it_emitenf-docnum,
* << Fim da inclusão
it_relat-itmnum TO it_emitenf-itmnum,
it_relat-difer TO it_emitenf-difer.
ELSE.
MOVE: it_relat-nrseq TO it_emitenf-nrseq,
it_relat-branch TO it_emitenf-branch,
...
...
text-052.
it_zycee005-parid = it_relat-kunag.
ENDIF.
ENDIF.
it_zycee005-waers = 'BRL'.
* >> Início da exclusão: FORM FILL_DATA_J1B1
IF it_zycet035-flagfunc IS INITIAL.
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATA_J1B1
IF it_zycet035-flagfunc IS INITIAL and
it_zycet035-nfcref is initial.
* << Fim da inclusão
it_zycee005-tcode = text-050.
it_zycee005-maktx = text-055.
it_zycee005-matorg = text-056.
it_zycee005-taxtyp = text-063.
it_zycee005-taxtyp2 = text-061.
...
...
ENDIF.
ENDLOOP.
SORT it_nfnum BY nfnum.
IF NOT it_zycet035-nfcref IS INITIAL.
CLEAR: v_index2.
* >> Início da inclusão: FORM FILL_DATA_J1B1
clear it_zycee006.
refresh it_zycee006.
* << Fim da inclusão
READ TABLE it_relat_aux2 WITH KEY nrseq = it_emitenf-nrseq
branch = it_emitenf-branch
docnum = it_emitenf-docnum.
IF sy-subrc EQ 0.
MOVE: text-117 TO it_zycee006-msg,
...
...
it_emitenf-docnum TO it_zycee006-docnum,
it_emitenf-branch TO it_zycee006-branch.
ADD 1 TO v_index2.
it_zycee006-indice = v_index2.
APPEND it_zycee006.
* >> Início da exclusão: FORM FILL_DATA_J1B1
CONCATENATE text-118 it_relat_aux2-nfnum
INTO it_zycee006-msg SEPARATED BY space.
* << Fim da exclusão
* >> Início da inclusão: FORM FILL_DATA_J1B1
MOVE: text-130 TO it_zycee006-msg,
it_emitenf-nrseq TO it_zycee006-nrseq,
it_emitenf-docnum TO it_zycee006-docnum,
it_emitenf-branch TO it_zycee006-branch.
* << Fim da inclusão
ADD 1 TO v_index2.
it_zycee006-indice = v_index2.
APPEND it_zycee006.
ENDIF.
CLEAR it_itmnf.
...
...
READ TABLE it_relat_aux2 WITH KEY nrseq = it_relat-nrseq
docnum = it_emitenf-docnum
posnr = it_j1bnflin-itmnum.
IF sy-subrc EQ 0.
it_itmnf-netpr = it_relat_aux2-difer.
* >> Início da inclusão: FORM FILL_DATA_J1B1
it_itmnf-wrbtr = it_relat_aux2-difer.
* << Fim da inclusão
ENDIF.
* >> Início da inclusão: FORM FILL_DATA_J1B1
it_itmnf-TCODE = text-097.
it_itmnf-TABELA = text-006.
CONCATENATE it_relat-nrseq it_relat-branch it_emitenf-docnum
INTO it_itmnf-CPOCHV.
it_itmnf-nrseq = it_relat-nrseq.
* << Fim da inclusão
it_itmnf-docnum = it_j1bnflin-docnum.
it_itmnf-docref = it_j1bnflin-docnum.
it_itmnf-itmref = it_j1bnflin-itmnum.
it_itmnf-itmtyp = it_zycet035-itmtyp.
IF it_zycet035-nfcref <> 'X'.
...
...
CLEAR: r_nrseq, r_branch, r_docnum.
CLEAR: r_nrseq1, r_branch1, r_docnum1.
it_relat_aux2[] = it_relat[].
SORT it_emitenf BY nrseq branch docnum.
LOOP AT it_relat WHERE land1 NE 'AR'.
* >> Início da inclusão: FORM CONTABILIZA_J1B1_REF
ON CHANGE OF it_relat-nfnum.
* << Fim da inclusão
CLEAR v_execute.
IF NOT it_zycet035-nfcref IS INITIAL.
IF it_relat-nrseq NE r_nrseq OR
it_relat-branch NE r_branch OR
it_relat-docnum NE r_docnum OR
...
...
PERFORM (itab_zyglt100-formulario)
IN PROGRAM (itab_zyglt100-programa) IF FOUND.
ENDIF.
IF it_zycet004[] IS INITIAL AND
v_executa_j1b1 EQ 'X'.
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
IF it_zycet035-flagfunc IS INITIAL.
IF NOT it_zycet035-nfcref IS INITIAL.
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_J1B1_A'
EXPORTING
v_modo = v_modo_bi
TABLES
t_dados = it_zycee005
t_campos = it_zycet004
t_zycet005 = it_zycet005
t_message = it_zycee006
t_itensnf = it_itmnf
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
ENDIF.
ELSE.
* << Fim da exclusão
IF NOT it_zycet035-nfcref IS INITIAL.
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_J1B1N_B'
* << Fim da exclusão
* >> Início da inclusão: FORM CONTABILIZA_J1B1_REF
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_J1B1N_C'
* << Fim da inclusão
EXPORTING
v_modo = v_modo_bi
TABLES
t_dados = it_zycee005
t_campos = it_zycet004
...
...
periodo_fechado = 2
OTHERS = 3.
ENDIF.
ENDIF.
ENDIF.
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
ENDIF.
* << Fim da exclusão
* >> Início da inclusão: FORM CONTABILIZA_J1B1_REF
ENDON.
* << Fim da inclusão
ENDLOOP.
IF NOT it_zycee005_aux[] IS INITIAL.
CLEAR it_zycee005.
REFRESH it_zycee005.
MOVE it_zycee005_aux[] TO it_zycee005[].
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
ENDIF.
IF it_zycet004[] IS INITIAL AND
v_executa_j1b1 EQ 'X'.
IF it_zycet035-flagfunc IS INITIAL.
IF it_zycet035-nfcref IS INITIAL.
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_J1B1'
EXPORTING
v_modo = v_modo_bi
TABLES
t_dados = it_zycee005
t_campos = it_zycet004
t_zycet005 = it_zycet005
t_message = it_zycee006
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
ENDIF.
ELSEIF it_zycet035-nfcref IS INITIAL.
CALL FUNCTION '/PWS/ZYCE_TRANSACAO_J1B1N'
EXPORTING
v_modo = v_modo_bi
TABLES
t_dados = it_zycee005
t_campos = it_zycet004
t_zycet005 = it_zycet005
t_message = it_zycee006
EXCEPTIONS
campo_em_branco = 1
periodo_fechado = 2
OTHERS = 3.
ENDIF.
* << Fim da exclusão
ENDIF.
IF sy-subrc = 0.
CALL CUSTOMER-FUNCTION '002'.
LOOP AT it_relat.
CLEAR v_execute.
...
...
IF NOT v_execute IS INITIAL.
MOVE: it_relat-nrseq TO r_nrseq1,
it_relat-branch TO r_branch1,
it_relat-docnum TO r_docnum1.
LOOP AT it_emitenf WHERE nrseq = it_relat-nrseq
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
AND branch = it_relat-branch.
* << Fim da exclusão
* >> Início da inclusão: FORM CONTABILIZA_J1B1_REF
AND branch = it_relat-branch
and docnum = it_relat-docnum.
* << Fim da inclusão
CONCATENATE it_emitenf-nrseq it_emitenf-branch
it_emitenf-docnum INTO v_cpochv.
CLEAR it_zycet005.
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
IF it_zycet035-flagfunc IS INITIAL.
LOOP AT it_zycet005 WHERE tcode EQ text-050
AND tabela EQ text-006
AND cpochv EQ v_cpochv
AND tpmsg EQ 'S'.
PERFORM atualiza_tabelas_j1b1.
it_doccont-nrseq = it_relat-nrseq.
it_doccont-branch = it_relat-branch.
it_doccont-belnr5 = it_zycet005-belnr.
it_doccont-controle = 'N'.
APPEND it_doccont.
ENDLOOP.
ELSE.
* << Fim da exclusão
LOOP AT it_zycet005 WHERE tcode EQ text-097
AND tabela EQ text-006
AND cpochv EQ v_cpochv
AND tpmsg EQ 'S'.
PERFORM atualiza_tabelas_j1b1.
...
...
it_doccont-branch = it_relat-branch.
it_doccont-belnr5 = it_zycet005-belnr.
it_doccont-controle = 'N'.
APPEND it_doccont.
ENDLOOP.
* >> Início da exclusão: FORM CONTABILIZA_J1B1_REF
ENDIF.
* << Fim da exclusão
IF NOT it_doccont[] IS INITIAL.
SORT it_doccont BY nrseq branch belnr5 controle.
DELETE ADJACENT DUPLICATES FROM it_doccont.
ELSE.
READ TABLE it_zycet005 WITH KEY tcode = text-050
...
----------------------------------------------------------------------------------------------------
Modificações efetuadas em REPT /PWS/ZYCER007
------------------------------------------------------------------------
Modificado símbolo de texto:
Idioma: PT
Símbolo: 117
Texto: (63 caracteres)
"Nota Fiscal Complementar de Variação Cambial ref. a Nota Fiscal"
Comprimento máximo: 68
------------------------------------------------------------------------
Incluído símbolo de texto:
Idioma: PT
Símbolo: 130
Texto: (31 caracteres)
"Documento de Nota de Referência"
Comprimento máximo: 31