cancel
Showing results for 
Search instead for 
Did you mean: 

Conversão código de barras da leitora

Former Member
0 Kudos

Boa Tarde,

Quando faço uma leitura de código de barras com uma leitora Voyager MS9520, a leitora traz o código de barras com 44 dígitos e invertidos e não a linha digitável original com 47 digitos.

Quando mandamos o arquivo com o código de barras ele nao consegue gerar a linha digitável.

Existe alguma rotina que faça a conversão desse código de barras para a a linha digitável original?

Att;

Daniel Salerno

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Solução muito boa Daniel!

Fiz igual aqui. Implementei a BADI da mesma forma.

Marcelo,

Monta uma lógica mais ou menos assim, só que dentro da BADI para atualizar o barcode via FB02.

REPORT  z_barcode_44_revert_47.

PARAMETERS : p_brcde TYPE brcde.

START-OF-SELECTION.

   DATA: w_block_1(4)      TYPE c,

         w_block_2(14)     TYPE c,

         w_block_3(5)      TYPE c,

         w_block_4(10)     TYPE c,

         w_block_5(10)     TYPE c,

         w_block_aux(18)   TYPE c,

         w_dv_1(1)         TYPE c,

         w_dv_2(1)         TYPE c,

         w_dv_3(1)         TYPE c,

         w_dv_4(1)         TYPE c.

   w_block_1 = p_brcde(4).

   w_dv_4 = p_brcde+4(1).

   w_block_2 = p_brcde+5(14).

   w_block_3 = p_brcde+19(5).

   w_block_4 = p_brcde+24(10).

   w_block_5 = p_brcde+34(10).

   CONCATENATE w_block_1

               w_block_3

          INTO w_block_aux.

   CALL FUNCTION 'CALCULATE_CHECK_DIGIT_MOD10'

     EXPORTING

       number_part = w_block_aux

     IMPORTING

       check_digit = w_dv_1.

   CALL FUNCTION 'CALCULATE_CHECK_DIGIT_MOD10'

     EXPORTING

       number_part = w_block_4

     IMPORTING

       check_digit = w_dv_2.

   CALL FUNCTION 'CALCULATE_CHECK_DIGIT_MOD10'

     EXPORTING

       number_part = w_block_5

     IMPORTING

       check_digit = w_dv_3.

   CONCATENATE w_block_1

               w_block_3

               w_dv_1

               w_block_4

               w_dv_2

               w_block_5

               w_dv_3

               w_dv_4

               w_block_2

          INTO p_brcde.

   WRITE p_brcde.

Answers (3)

Answers (3)

Former Member
0 Kudos

Boa Tarde!

Consegui realizar a transformação de código de barras para linha digitável.

Tive que aplicar a minha lógica mesmo, pois não existia nenhuma função standard que realizasse este processo.

Utilizei para isto a implementação BOLETO_BARCODE_BR, aplicando a transformação no método IF_EX_BOLETO_BARCODE~CONVERT.

A função que utilizei para gerar o digito verificador foi: CALCULATE_CHECK_DIGIT_MOD10.

Obrigado a todos!

Daniel Salerno de Arruda

former_member182114
Active Contributor
0 Kudos

Show de Bola Daniel,

Obrigado por postar a solução este é o espírito do fórum, pede ajuda quando precisa e dá o feedback da solução. Outra pessoa que ler a thread entenderá tudo que se passou e como você chegou a solução.

Atenciosamente, Fernando Da Ró

marcelom_bovo
Participant
0 Kudos

Olá Daniel,

Tem como você colocar o que fizeste no método?

obrigado

Former Member
0 Kudos

Senhores,

O que eu preciso seria uma lógica para aplicar na BADI BOLETO_BARCODE_BR, na qual faria a transformação do código de barras para linha digitável!

Alguem conhece essa lógica de conversão?

Att;

Daniel Salerno

Former Member
0 Kudos

Oi Daniel.

A lógica você pode consultar no manual do banco. Veja se o link abaixo lhe ajuda em algo...

Abraço

Eduardo Chagas

former_member182114
Active Contributor
0 Kudos

Te juro que não entendido o problema, só quando o Eduardo deu a dica entendi.

Segue outro link:

http://www.macoratti.net/07/10/net_bol.htm

Atenciosamente, Fernando Da Ró

Former Member
0 Kudos

Muito Obrigado Senhores!

Fernando,

Acho que não fui muito claro em minha pergunta, desculpe.

Com estes documentos consegui entender a lógica do código de barras e da linha digitável.

No meu cenário, o que eu possuo é já o código de barras invertido com 44 posições, e o que eu preciso é gerar a linha digitável com 47 posições, a partir deste código de barras.

Pelo que li nos links terei que fazer uma lógica para transformar o código de barras em linha digitável, aplicando esta lógica na BADI que já está implementada: "BOLETO_BARCODE_BR".

Minha pergunta agora é:

Existe alguma funcão que realize este processo de transformação de código de barras para linha digitável? (Acho que deve existir, porém ainda não consegui encontra-la), ao invés de eu mesmo realizar o desenvolvimento desta lógica?

Obrigado!

Att;

Daniel Salerno

former_member182114
Active Contributor
0 Kudos

Bom dia Daniel,

Veja SAP Note 784748 que criou a BAdI, também criou algumas funções como a J_1B_BARCODE_CONVERT esta é só um frontend que verifica se tem implementação da BAdI, caso sim chama a BAdi, caso não exista chave a função CONVERT_BARCODE que era utilizada até então.

Então se a CONVERT_BARCODE não atende, vais ter que cair dentro.

Atenciosamente, Fernando Da Ró

Former Member
0 Kudos

Oi Daniel,

acho que não vai ter uma função standard para essa conversão.

dê uma olhada na função J_1B_BARCODE_CONTROLDIGIT, nos parâmetros dela tem BARCODE_NUM (linha digitável de 47 números) e tem BARCODE_GRF (igual sua leitora retorna, 44 números)

essa função não é exatamente o que você precisa, mas dá uma idéia nos cálculos de dígito verificador dos 3 primeiros grupos da linha digitável, que são as únicas informações que sua leitora não retornará.

para estes dígitos verificadores (posições 10, 21 e 32) se não quiser copiar a lógica você poderia usar:

PERFORM CALCULATE_CD IN PROGRAM SAPLJ1BS USING VL_GRUPO VL_DV.

att,

Paulo.

Former Member
0 Kudos

Alguem pode me ajudar?

Att;

Daniel Salerno