Atualização em 7 de fevereiro de 2014 (Update from february, 7th, 2014):


Essas são as notas que foram lançadas para corrigir o problema abaixo descrito:

(These are notes released to fix related problem below):


1974643 DIRF: sequence of records PSE
1973505 DIRF: Dependents and BAdI records reported twice



Texto original de 6 de fevereiro de 2014 (Original text from february, 6th, 2014):

Uma vez que a SAP não lançou uma nota para consertar esse problema, e o prazo é até 28 de fevereiro de 2014, tenho visto muitos clientes desenvolvendo soluções próprias para solucionar o problema, conforme imagem abaixo:

(Once SAP had not released a note to fix this problem, and the due/delivery date is February, 28th, 2014, I’m seeing many customers developing their own solution to solve this problem, which is illustrated below:)

/wp-content/uploads/2014/02/dirf_2013_2014_1_381883.gif/wp-content/uploads/2014/02/dirf_2013_2014_2_381920.gif/wp-content/uploads/2014/02/dirf_2013_2014_3_381921.gif/wp-content/uploads/2014/02/dirf_2013_2014_4_381922.gif/wp-content/uploads/2014/02/dirf_2013_2014_5_381923.gif/wp-content/uploads/2014/02/dirf_2013_2014_6_381924.gif

Perceba que a cada registro IDREC, ele repete os registros PSE (na imagem não há como perceber, pois tive que ocultar os dados do cliente), mas os dados são os mesmos. Isso acontece porque a SAP criou uma estrutura onde os dados de PSE (HRPAYBR_S_DIRF_2010_PRIVHEALTH) ficam dentro do IDREC (HRPAYBR_S_DIRF_2010_RET_CODE), o que não é correto conforme o layout da RFB que pode ser verificado neste endereço: Ato Declarat�rio Executivo Cofis n� 82, de 25 de outubro de 2013

(Note that for each IDREC record, the PSE records are repeated (on image there’s no how to show it, cause I had to delete customer data), but data are the same. It happens cause SAP had created an structure where PSE data (HRPAYBR_S_DIRF_2010_PRIVHEALTH) are inside IDREC data (HRPAYBR_S_DIRF_2010_RET_CODE), what is not correct according to RFB layout which can be found at this link: Ato Declarat�rio Executivo Cofis n� 82, de 25 de outubro de 2013 )

Para resolver esse problema aparentemente complicado, adotamos a seguinte solução:

(To solve this seemingly complicated problem, we adopt the following solution:)

No método: SUMMARIZE_FIELDS da classe: CL_HRPAYBR_DIRF1 que é chamado no programa HBRDIRF1, criar um enhancement e incluir no final do código ABAP o seguinte trecho de código:

(At CL_HRPAYBR_DIRF1~SUMMARIZE_FIELDS class method, which is called from HBRDIRF1 program, create an enhancement at the method’s ending and include the following ABAP code:)

  DATA: zlv_count TYPE i.

  FIELD-SYMBOLS: <zfs_ret_codes> LIKE LINE OF es_dirf-ret_codes.

  DESCRIBE TABLE es_dirf-ret_codes LINES zlv_count.

  LOOP AT es_dirf-ret_codes ASSIGNING <zfs_ret_codes>.

    IF sy-tabix NE zlv_count.

      CLEAR <zfs_ret_codes>-health_plan.

    ENDIF.

  ENDLOOP.

O que esse trecho de código faz nada mais é que excluir todos os dados de PSE deixando somente o último que será gravado no final do arquivo, conforme layout da RFB.

(What this code does is nothing more than delete all PSE data leaving only the last one, which will be generated at the end of file, according to RFB’s layout.)

Espero que este documento possa ser útil para outras pessoas. Comentários e ajuda, serão bem vindos.

(I hope this document help some people. Comments and helps, are welcome.)

To report this post you need to login first.