PARA OS DESAVIDADOS PELO MENOS ATÉ HOJE 10/2019 A SAP NÃO TEM UMA SOLUÇÃO PARA NFCE, O MODELO 65 TEM Q SER ADICIONADO NO DOMINIO, ENHANCEMENTS SÃO NECESSÁRIOS PARA VISUALIZAR O XML, E NA FUNÇÃO DE SAIDA DO XML ATÉ TEM A ESTRUTURA COMO PARÂMETRO, MAS PRECISA DE UM ENHANCEMENT PARA PREECHER OS DADOS DO QRCODE SÓ PARA O MODELO 65.
Nesse caso tem uma TVARV q guardo os parâmetros por depender do estado e do tipo do ambiente.
Na minha TVARV eu tenho alguns parâmetros separados por "|"
- REGIO - Número da região da J_1BNFE_ACTIVE
- TOKEN - É o número da sequência do CSC( Código de Segurança do Contribuinte ), onde a empresa tem cadastro no SEFAZ do seu estado
- CSC - é o código Código de Segurança do Contribuinte que vem do SEFAZ do estado
- URL de consulta - É o endereço para consulta do QRCODE
- URL - a outra URL é para utilizar na função /XNFE/OUTNFE_CREATE_400, no parâmetro IS_NFESUPL.
Verificar como é montado o hash e como ele vai na estrutura do XML do QRCODE.
Para montar o código HASH , usar a função abaixo.
CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'
EXPORTING
data = fu_chave
IMPORTING
hash = fc_hash
EXCEPTIONS
unknown_alg = 1
param_error = 2
internal_error = 3
OTHERS = 4.
- CONTINGÊNCIA
Para esses caso são adicionados alguns campos a mais. Acho q o mais complicado é pegar o DIGEST VALUE
eu criei uma rotina para pegar o xml e pegar o valor da tag no XML, vou deixa em outro post
DATA : l_nfe_key TYPE string.
DATA: l_qrcode_ver TYPE string.
DATA: l_tpamb TYPE string.
DATA: l_url_cons TYPE string.
DATA: l_geral TYPE string.
DATA: l_hash TYPE hash160,
l_vlr_total TYPE j_1bnfdoc-nftot,
l_valor_c TYPE char15,
l_dig_value TYPE string.
SELECT SINGLE *
INTO @DATA(ls_active)
FROM j_1bnfe_active
WHERE docnum EQ @i_docnum.
l_nfe_key = ls_active-regio &&
ls_active-nfyear &&
ls_active-nfmonth &&
ls_active-stcd1 &&
ls_active-model &&
ls_active-serie &&
ls_active-nfnum9 &&
ls_active-docnum9 &&
ls_active-cdv.
l_qrcode_ver = '2'.
l_tpamb = ls_active-tpamb.
SELECT low
INTO TABLE @DATA(lt_low)
FROM tvarvc
WHERE name EQ 'ZSD_QRCODE_UF_CSC'
AND type EQ 'S'.
LOOP AT lt_low INTO DATA(ls_low).
SPLIT ls_low AT '|' INTO: DATA(l_regio) DATA(l_token)
DATA(l_csc) DATA(l_url_cons_qr) DATA(l_url).
CASE l_regio.
WHEN ls_active-regio.
TRANSLATE l_url_cons_qr TO LOWER CASE.
TRANSLATE l_url TO LOWER CASE.
e_url = l_url.
EXIT.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
CHECK l_csc IS NOT INITIAL.
"CONTINGÊNCIA
IF ls_active-tpemis = '2' OR
ls_active-tpemis = '3' OR
ls_active-tpemis = '4' OR
ls_active-tpemis = '5'.
SELECT SINGLE *
INTO @DATA(ls_nfdoc)
FROM j_1bnfdoc
WHERE docnum EQ @i_docnum.
CHECK sy-subrc = 0.
IF i_vlr_total <= 0.
LOOP AT it_binlin INTO DATA(ls_binlin).
ADD ls_binlin-nfnet TO l_vlr_total.
ENDLOOP.
ELSE.
l_vlr_total = i_vlr_total.
ENDIF.
l_valor_c = l_vlr_total.
PERFORM f_digest_value USING ls_active
CHANGING l_dig_value.
l_geral = l_nfe_key && '|' && l_qrcode_ver && '|' && ls_active-tpamb &&
'|' && ls_nfdoc-docdat+6(2) && '|' && l_valor_c && l_dig_value &&
'|' && l_token && l_csc.
PERFORM f_conv_hash USING l_geral
CHANGING l_hash.
IF sy-subrc = 0.
e_qrcode_key = l_url_cons_qr && l_nfe_key && '|' && l_qrcode_ver &&
'|' && ls_active-tpamb && '|' && l_dig_value &&
'|' && l_token && '|' && l_hash.
ENDIF.
ELSE. "Nota normal.
l_geral = l_nfe_key && '|' && l_qrcode_ver && '|' && ls_active-tpamb &&
'|' && l_token && l_csc.
PERFORM f_conv_hash USING l_geral
CHANGING l_hash.
IF sy-subrc = 0.
e_qrcode_key = l_url_cons_qr && l_nfe_key && '|' && l_qrcode_ver &&
'|' && ls_active-tpamb && '|' && l_token && '|' && l_hash.
ENDIF.
ENDIF.
ENDFUNCTION.
Nenhum comentário:
Postar um comentário