Imprimi Página | Fechar janela

Codigo sequencial para Titulos a Pagar

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=41935
Data da Impressão: segunda-feira, 22 de outubro de 2018 at 01:30


Topico: Codigo sequencial para Titulos a Pagar

Postado por: GRAVATAL
Assunto: Codigo sequencial para Titulos a Pagar
Data Postagem: quinta-feira, 10 de maio de 2018 at 18:16

Boa tarde pessoal, gostaria de uma ajuda de vocês, meu cenário é o seguinte, minha SE5010 é compartilhada, minha SE2010 é exclusiva, ao efetuar uma baixa em um dos títulos ele gera dois registros na SE5, sequencia 1 e 2, mas somente deveria haver um, isso acontece por que os títulos tem as mesmas informações: SE5->E5_FILIAL+SE5->E5_PREFIXO+SE5->E5_NUMERO+SE5->E5_PARCELA+SE5->E5_CLIFOR... Por incrível que pareça, os títulos tinham essas mesmas informações. E ao cancelarmos essa baixa, o sistema trás as duas baixas para serem canceladas, pois o índice usado não contempla o CAMPO SE5->E5_MSFIL ou o campo SE5->E5_FILORI, poderia resolver isso se gerasse um único numero sequencial na SE2010, mas o GetSxeNum() pega da Filial, podendo acontecer de ter dois números de títulos iguais em filiais diferentes. Tentei tratar da seguinte forma no inicializador do campo SE2->E2_NUM = u_nnNumSE2()(fonte esta mais abaixo), só que gera um problema em duas pessoas estarem criando um titulo ao mesmo tem, o numero da primeira ainda não foi gravado no banco, sendo assim não é contemplado com a inclusão do titulo da segunda pessoa, as duas terão titulos com mesmo numero. Essa é a via sacra que estou.

A Solução mais correta seria deixar tudo como exclusivo, mas não posso devido a algumas regras de negocio da empresa, como resolver?


user function nnNumSE2()
     Local cAliasSE2     := GetNextAlias()
     Local aLastQry     := {}
     Local cNumSE2     := ""

     If Select(cAliasSE2) > 0
          dbSelecArea(cAliasSE2)
          (cAliasSE2)->(dbCloseArea())
     EndIf

     BeginSql alias cAliasSE2
          SELECT      Max (SE2.E2_NUM) AS cXNumSE2
          FROM %table:SE2% SE2 (NOLOCK)
          WHERE
          SE2.%NotDel%
     EndSql

     aLastQry := GetLastQuery()
     cNumSE2 := Soma1( (cAliasSE2)->cXNumSE2 )

return(cNumSE2)






Imprimir Página | Fechar Janela