Imprimi Página | Fechar janela

PROBLEMA COM ALIAS TEMPORARIO

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=42851
Data da Impressão: quinta-feira, 18 de abril de 2024 at 00:49


Topico: PROBLEMA COM ALIAS TEMPORARIO

Postado por: DAUGER
Assunto: PROBLEMA COM ALIAS TEMPORARIO
Data Postagem: sexta-feira, 9 de agosto de 2019 at 15:57

Boa tarde povo, tudo certo?

pra mim não faz sentido nenhum.. mas estou com um problema bem besta!


tenho uma parte de uma customizacao que é a seguinte:

     If Select(cAliasTMP) > 0
          (cAliasTMP)->( dBCloseArea( ) )
     EndIf

     cQuery := ""
     cQuery += "SELECT D2_ITEM, D2_COD, D2_QUANT "+ CRLF
     cQuery += "FROM " + RetSqlName( "SD2" ) + " "+ CRLF
     cQuery += "WHERE D_E_L_E_T_ <> ‘*‘ AND D2_FILIAL = ‘" + cFilBkp + "‘ AND D2_DOC = ‘"+ cDoc +"‘ ORDER BY D2_ITEM"


     TcQuery cQuery New Alias (cAliasTMP)

     DbSelectArea(cAliasTMP)
     (cAliasTMP)->(DbGoTop())

     //Inclusão no Vetor para futura transferencia

     While (cAliasTMP)->(!eof())
               aux := (cAliasTMP)->D2_ITEM
               aadd(aGrade1, { (cAliasTMP)->D2_COD, (cAliasTMP)->D2_QUANT, POSICIONE("SBZ",1,cFilLoc+(cAliasTMP)->D2_COD,"BZ_RF_CSTD"), "01"})
               (cAliasTMP)->(dbSkip())
     Enddo     


debugando.. pego o valor do cQuery e jogo no sql.. ele me retorna certinho uma tabelinha com o item, codigo do produto e quantidade.. são no total 4 itens..

na parte de baixo para atribuir esse alias no array aGrade1 usei uma variavel auxiliar para ver em qual item do aliasTMP está posicionado antes de fazer a inclusao.. acontece que ele está pulando o item 3!

passa o 1, insere.. 2, insere.. 4, insere.. e cai fora.. deixando o produto do item 3 para tras.. por que isso ocorre?

Grato pela ajuda!!!!


IN CODE WE TRUST


Respostas:

Postado Por: ERPC
Data Postagem: sexta-feira, 9 de agosto de 2019 at 18:47

Experimenta rodar a Query no APSDU, e verifica se lá ele traz os 4 registros. Se ele trouxe os registros, pode ser que a Posicione() está "desposicionando"... Neste caso, eu acho que voce nem precisaria usar a posicione, mas já colocar na Query os campos que voce quer da SBZ com um JOIN. :D





Postado Por: DAUGER
Data Postagem: segunda-feira, 12 de agosto de 2019 at 14:46

Boa tarde!

executando o select no query analyzer do apsdu, o resultado tambem consta 4 itens..

porem quando debugo o fonte.. apenas na montagem do meu alias temporario ja da problema.. re-executando o sql no apdsu ele pula o item 3! sem mudar nada.. cancelando o debug.. o sql volta a trazer os 4 itens..

ja viram algo parecido?




Postado Por: DAUGER
Data Postagem: segunda-feira, 12 de agosto de 2019 at 15:12

Respondendo a minha propria duvida..

o item 3 some por que a rotina ja comecou a executar.. no meu select eu removo os itens deletados e a rotina é exclusao de documento de saida.. sendo assim ele ja exclui o primeiro do indice doc + produto.. que o menor codigo é o do item 3.. removendo o d_e_l_e_t_ da d2, ele retorna certo.. porem com o item ja deletado..
descobri o por que some.. mas ainda assim nao tenho uma solucao para meu problema..



Postado Por: DAUGER
Data Postagem: segunda-feira, 12 de agosto de 2019 at 16:14

E resolvendo meu proprio problema...

estava usando o PE MSD2520, que na documentacao esta que é chamado cada vez antes de excluir cada item.. (ate havia feito uma flag para nao executar toda vez..)
porem ele executa DEPOIS de excluir cada item.. entao na primeira execucao ja trazia o item com menor codigo deletado.. o select nao pegava..

a solucao foi trocar de PE! usei o MS520VLD.

Obrigado a todos! encerrado.




Imprimir Página | Fechar Janela