1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Gerador Código Item

Discussão em 'EMS , HCM e Totvs 11' iniciado por Marcos Frasson, Outubro 11, 2021.

  1. Marcos Frasson

    Marcos Frasson Membro Participativo

    Então acontece que nós tínhamos uma rotina em VBA que gerava os código e guardava em um SQL, deu um problema no HD do servidor e não estava sendo feito Backup do banco, então vamos criar uma rotina em Progress e criar uma tabela especifica para gravar/consultar os códigos gerados para os novos.

    O nosso padrão é esse acima, o numero ali informado é somente um exemplo, quando gente for começar a nova rotina eu vou consultar a base e ver qual foi o ultimo item criado depois criar o primeiro registro na tabela especifica e dai por diante será o incremental + digito verificador.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Veja se isso te atende:

    Código:
    DEF VAR Digito AS INTEGER.
    DEF VAR Somatoria AS INTEGER.
    DEF VAR Posicao AS INTEGER EXTENT 6.
    DEF VAR Codigo AS CHAR.
    
    Codigo = STRING(350100). /* Usar uma SEQUENCE no Banco */
    
    Posicao[1] = INT(SUBSTRING(codigo,1,1)) * 2.
    Posicao[2] = INT(SUBSTRING(codigo,2,1)) * 3.
    Posicao[3] = INT(SUBSTRING(codigo,3,1)) * 4.
    Posicao[4] = INT(SUBSTRING(codigo,4,1)) * 5.
    Posicao[5] = INT(SUBSTRING(codigo,5,1)) * 6.
    Posicao[6] = INT(SUBSTRING(codigo,6,1)) * 7.
    
    Somatoria = Posicao[1] + Posicao[2] + Posicao[3] + Posicao[4] + Posicao[5] + Posicao[6].
    Somatoria = Somatoria * 10.
    Digito = ((Somatoria MODULO 11) MODULO 10).
    
    Codigo = Codigo + "-" + STRING(Digito).
    
    MESSAGE Codigo 
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Esse aqui tá com formatação no código

    Código:
    DEF VAR Digito AS INTEGER.
    DEF VAR Somatoria AS INTEGER.
    DEF VAR Posicao AS INTEGER EXTENT 6.
    DEF VAR Codigo AS CHAR.
    
    Codigo = STRING(350100,">>>,>>>"). /* Usar uma SEQUENCE no Banco */
    
    Posicao[1] = INT(SUBSTRING(codigo,1,1)) * 2.
    Posicao[2] = INT(SUBSTRING(codigo,2,1)) * 3.
    Posicao[3] = INT(SUBSTRING(codigo,3,1)) * 4.
    Posicao[4] = INT(SUBSTRING(codigo,4,1)) * 5.
    Posicao[5] = INT(SUBSTRING(codigo,5,1)) * 6.
    Posicao[6] = INT(SUBSTRING(codigo,6,1)) * 7.
    
    Somatoria = Posicao[1] + Posicao[2] + Posicao[3] + Posicao[4] + Posicao[5] + Posicao[6].
    Somatoria = Somatoria * 10.
    Digito = ((Somatoria MODULO 11) MODULO 10).
    
    Codigo = Codigo + "-" + STRING(Digito).
    
    MESSAGE Codigo 
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Marcos Frasson curtiu isso.
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Ignora o anterior, esse aqui é o mais certo, tem que aplicar a formatação depois de tudo.

    Código:
    DEF VAR Digito AS INTEGER.
    DEF VAR Somatoria AS INTEGER.
    DEF VAR Posicao AS INTEGER EXTENT 6.
    DEF VAR Codigo AS INTEGER.
    DEF VAR CodFinal AS CHAR.
    
    Codigo = 350200. /* Usar uma SEQUENCE no Banco */
    
    Posicao[1] = INT(SUBSTRING(STRING(codigo),1,1)) * 2.
    Posicao[2] = INT(SUBSTRING(STRING(codigo),2,1)) * 3.
    Posicao[3] = INT(SUBSTRING(STRING(codigo),3,1)) * 4.
    Posicao[4] = INT(SUBSTRING(STRING(codigo),4,1)) * 5.
    Posicao[5] = INT(SUBSTRING(STRING(codigo),5,1)) * 6.
    Posicao[6] = INT(SUBSTRING(STRING(codigo),6,1)) * 7.
    
    Somatoria = Posicao[1] + Posicao[2] + Posicao[3] + Posicao[4] + Posicao[5] + Posicao[6].
    Somatoria = Somatoria * 10.
    Digito = ((Somatoria MODULO 11) MODULO 10).
    
    CodFinal = STRING(Codigo,">>>,>>9") + "-" + STRING(Digito).
    
    MESSAGE CodFinal 
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
    Marcos Frasson curtiu isso.
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Estranho que esse código original parece estar redundante, tipo

    ABSOLUTE((Somatoria MODULO 11) MODULO 10) = ((Somatoria MODULO 11) MODULO 10) = (Somatoria MODULO 11)

    Ou seja, dá tudo o mesmo resultado.
  6. Marcos Frasson

    Marcos Frasson Membro Participativo

    Muito Obrigado pelo exemplo.

    Eu não estava conseguindo fechar a parte do digito, não conhecia a função MODULO do progress.

    Obrigado.

Compartilhe esta Página