quarta-feira, 30 de outubro de 2019

SAP NFCe - Montagem QRCODE

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.
  DATAl_qrcode_ver TYPE string.
  DATAl_tpamb TYPE string.
  DATAl_url_cons TYPE string.
  DATAl_geral TYPE string.
  DATAl_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 '|' INTODATA(l_regioDATA(l_token)
                              DATA(l_cscDATA(l_url_cons_qrDATA(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