1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[RESOLVIDO] Codigo do emitente na criacao via cdapi366b

Discussão em 'EMS , HCM e Totvs 11' iniciado por reissobr, Junho 9, 2016.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Olha o que ele faz ....
    Código:
    /********************************************************************************
    ** Copyright DATASUL S.A. (1997)
    ** Todos os Direitos Reservados.
    **
    ** Este fonte e de propriedade exclusiva da DATASUL, sua reproducao
    ** parcial ou total por qualquer meio, so podera ser feita mediante
    ** autorizacao expressa.
    *******************************************************************************/
    {include/i-prgvrs.i CD9960 2.00.00.003}  /*** 010003 ***/
    
    &IF "{&EMSFND_VERSION}" >= "1.00"
    &THEN
    {include/i-license-manager.i CD9960 MCD}
    &ENDIF
    
    /******************************************************************************
    **  Programa: CD9960.p
    **  Objetivo: Retorna o numero do proximo emitente
    ******************************************************************************/
    
    def output param i-emitente like emitente.cod-emitente init 0 no-undo.
    
    def var i-tentativas   as  int               no-undo.
    def var i-ultimo-emit like emitente.cod-emit no-undo.
    
    /* Verifica o formato do campo na base para verificar o ultimo emiente */
    {utp/ut-field.i mgadm emitente cod-emitente 4}
    assign i-ultimo-emit = int(fill("9",length(return-value))).
    
    do  transaction:
        assign i-tentativas = 1.
        repeat while i-tentativas < 10:
            find first tab-ocor use-index descricao where
                       tab-ocor.cod-tab   = 098 and
                       tab-ocor.descricao = "Inclui Emit"
                       exclusive-lock no-wait no-error.
            if not locked tab-ocor then do:
               if not avail tab-ocor then do:
                  create tab-ocor.
                  assign tab-ocor.cod-tab    = 098
                         tab-ocor.descricao  = "Inclui Emit"
                         tab-ocor.i-campo[1] = 0.
               end.         
               leave.      
            end.
            else
               pause 5 no-message.
            assign i-tentativas = i-tentativas + 1.
        end.
        if not avail tab-ocor then
           find first tab-ocor use-index descricao where 
                      tab-ocor.cod-tab   = 098 and
                      tab-ocor.descricao = "Inclui Emit"
                      exclusive-lock no-error.
       
        assign i-emitente = tab-ocor.i-campo[1] + 1.
        if i-emitente = 1 or i-emitente = i-ultimo-emit then do:
           find last emitente use-index codigo no-lock no-error.
           if avail emitente and emitente.cod-emitente <> i-ultimo-emit then
              assign i-emitente = emitente.cod-emitente + 1.
           else
              assign i-emitente = 1.  
        end.
       
        repeat:
           if can-find(first emitente use-index codigo where
                             emitente.cod-emitente = i-emitente no-lock) then do:
              assign i-emitente = i-emitente + 1.
              if  i-emitente > i-ultimo-emit then
                  assign i-emitente = 1.
           end.                 
           else
              leave.
        end.
        assign tab-ocor.i-campo[1] = i-emitente.
       
    end. /* do transaction */
    
    
  2. reissobr

    reissobr Membro Ativo

    @bootstrapmaster, vou testar em duas sessões seguidas, mas acho que nao.
    Chamei duas vezes seguidas no editor, e ele deu uma sequencia tipo 10 e 11.
    O que preciso fazer agora é testar dentro de uma transação, e se nao gravar, cancelar a transação.
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    mas vc viu ai no fonte que ele lê o codigo da tabela, atualiza com + 1, depois que vai pra tabela emitente e ver se existe e se por um acaso existir, soma mais um e atualizar a tabelinha novamente.
    Então, pela logica ali, dificil de dar o problema.
  4. reissobr

    reissobr Membro Ativo

Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página