Marca Posted February 29 Report Share Posted February 29 Bom dia a todos Pessoal. Estou tendo um problema com uma tela onde a função de saida de tela SairTelaVenda() esta sendo executada por mais de uma vez E só existe uma chamada desta tela que é lo valid da dialog. Uma vez confirmada a saida ela em algum momento é chamada novamente Observem a linha 3 08:20:14-BALCAO22-MONICA-393610-Confirmou a saida da tela de vendas com o texto Deseja realmente sair da venda ? e a linha 14 08:20:23-BALCAO22-MONICA-393610-Confirmou a saida da tela de vendas com o texto Deseja realmente sair da venda ? De alguma maneira se repetem Esta linha 14 não poderia existir devido a todo o processo ter sido finalizado na linha 13 mais de alguma maneira isso acontece Algúem já passou por algo semalhante ? 1 08:20:13-BALCAO22-MONICA-393610-Voltou o foco 2 08:20:13-BALCAO22-MONICA-393610-Retornando de TeclaVenda TEVD02901834080338 3 08:20:14-BALCAO22-MONICA-393610-Confirmou a saida da tela de vendas com o texto Deseja realmente sair da venda ? 4 08:20:14-BALCAO22-MONICA-393610-Retornou de SairTelaVenda como VERDADEIRO 5 08:20:14-BALCAO22-MONICA-393610-FINALIZANDO TELA DE VENDAS em temporário TEVD02901834080338 6 08:20:14-BALCAO22-MONICA-393610-Fechamento padrão do temporario : TEVD02901834080338 7 08:20:14-BALCAO22-MONICA-393610-Executando exclusão do temporário : TEVD02901834080338 : C:\sven\TE\TEVD02901834080338.DBF 8 08:20:14-BALCAO22-MONICA-393610-Executando exclusão do temporário : TEVD02901834080338 : C:\sven\TE\TEVD02901834080338.fpt 9 08:20:14-BALCAO22-MONICA-393610-NAO FOI ENCONTRADO NENHUM ARQUIVO : K:\sven\TEVD02901834080338.prn PARA EXCLUSÃO 10 08:20:14-BALCAO22-MONICA-393610-Finalizando venda em temporário TEVD02901834080338 11 08:20:14-BALCAO22-MONICA-393610-Nome atual do temporário de venda TEVD02901834080338 12 08:20:14-BALCAO22-MONICA-393610-Novo nome do temporário de venda FIMVD 13 08:20:14-BALCAO22-MONICA-393610-Trocou o nome e saiu FIMVD 14 08:20:23-BALCAO22-MONICA-393610-Confirmou a saida da tela de vendas com o texto Deseja realmente sair da venda ? 15 08:20:23-BALCAO22-MONICA-393610-Retornou de SairTelaVenda como VERDADEIRO ACTIVATE DIALOG oDlgVd CENTERED ON INIT ( Ini_Dialogs(oDlgVd,,cFonteTela) ,; BarraTelVd(oDlgVd,oBrVd,oGrupo[7]),; SetsVendas( cFonteTela ) ) ; VALID SairTelaVenda( oDlgVd ) *************************************//*************************************** STATIC FUNCTION SairTelaVenda( oDialogVd ) **************************************//*************************************** LOCAL lFinalizarTelaVd := .F. IF lBrowseVdEmProcesso GravaLogDia("Tentou sair sendo que o lBrowseVdEmProcesso estava como VERDADEIRO", "SVE") ELSE IF MSG( "Deseja realmente sair da venda" ,"ATENÇÃO","YESNO") IF p_Arg1 = "O" .AND. p_nPedido > 0 cQueryDav := "UPDATE orcamto SET coo_dav = " + ANY2SQL( 0 ) + " WHERE pedido = " + ANY2SQL(p_nPedido) p_nPedido := 0 MyMsgRun("Aguarde... Liberando a utilização do Dav ","AGUARDE...", {|| GravaBase(cQueryDav,"Orcamto") }) ENDIF GravaLogDia("Confirmou a saida da tela de vendas com o texto " + "Deseja realmente sair da venda", "SVE") lFinalizarTelaVd := .T. ENDIF ENDIF GravaLogDia("Retornou de SairTelaVenda como " + IF(lFinalizarTelaVd,"VERDADEIRO","FALSO") , "SVE") IF lFinalizarTelaVd MyMsgRun("Finalizando operação ........","AGUARDE", {|| TerminaProcessoVenda( oDialogVd ) }, "Engrena.gif" ) ENDIF RETURN lFinalizarTelaVd ************************************************************************ STATIC FUNCTION TerminaProcessoVenda( oDialogVd ) ************************************************************************ GravaLogDia( "FINALIZANDO TELA DE VENDAS em temporário " + cArqVendas , "SVE" ) IF File(oPub:wPathTemp + cArqParc + ".DBF") // Caso seja um orcamento com cond. de pgto MyMsgRun("Finalizando arquivo de parcelas ........","AGUARDE", {|| Fecha_Temp(cArqVendas,.T.) }, "Engrena.gif" ) GravaLogDia( "Finalizando Temporario das parcelas no final da venda em vd_00 " + cArqVendas , "SVE" ) ENDIF IF !oPub:lControleErr GravaLogDia( "Nome atual do temporário de venda " + cArqVendas , "SVE" ) cArqVendas := "FIMVD" GravaLogDia( "Novo nome do temporário de venda " + cArqVendas , "SVE") ENDIF WaitSeconds( 0.5 ) *HB_GCAll(.T.) GravaLogDia( "Trocou o nome e saiu " + cArqTemp , "SVE") RETURN .T. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 29 Report Share Posted February 29 O título está erado: Problamas no valid da dialog o problema é na lógica. E porquê você grava no ON INIT e não na SAÍDA da FUNÇAO(), trenzinho feio da pohha que tú fez, hein? melhore isso. Grave ao entrar antes do DEFINE DIALOG e na saida do ACTIVATE DIALOG para ver o que o corre. Regards, saludos. Quote Link to comment Share on other sites More sharing options...
Marca Posted February 29 Author Report Share Posted February 29 Pra variar vc não leu o fonte né !!!! coisas de curintiano O On Init nada mais faz do que as configurações de fontes , menus e outras coisas relativas a tela ON INIT ( Ini_Dialogs(oDlgVd,,cFonteTela) ,; BarraTelVd(oDlgVd,oBrVd,oGrupo[7]),; SetsVendas( cFonteTela ) ) Já o VALID SairTelaVenda( oDlgVd ) Faz o fechamento da mesma Grave ao entrar antes do DEFINE DIALOG Isso já e feito. Ete log q. tem ai é somente a parte q. interessa ser vista nada anterior a isso irá fazer diferenteça no problema que esta acontecendo E a saida do ACTIVATE DIALOG É exatamente o que esta sendo mostrado ali no log Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 29 Report Share Posted February 29 Que FONTE? você postou um pedaço de programa pohha! kkkk Faça um DEMO para os demais fazerem testes e descobrir onde está sua KGADA!! kkkkkkkk nóis é mau na alma. kkkkkk abs; Regards, saludos. Quote Link to comment Share on other sites More sharing options...
Marca Posted February 29 Author Report Share Posted February 29 Puts. O fonte onde acontece isso é gigante João. Mais uma vez q. saiu do valid da dialog concorda q. não poderia mais executar a rotina por já ter saido dela ? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 29 Report Share Posted February 29 43 minutos atrás, Marca disse: Puts. O fonte onde acontece isso é gigante João. Mais uma vez q. saiu do valid da dialog concorda q. não poderia mais executar a rotina por já ter saido dela ? Você não consegue simular como um DEMO pequeno? Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted February 29 Report Share Posted February 29 Sugestão: Vc pode chamar a rotina abaixo na sua func_valid e exibir num browse ou gravar em log(melhor), com isto vc poderia verificar de onde vem a segunda chamada. // The example implements a user defined function that collects call stack // information in an array. FUNCTION GetCallStack() LOCAL aStack := {} LOCAL nStack := 1 // Skip the GetCallStack() function in the result DO WHILE .NOT. Empty( ProcName(nStack) ) AAdd( aStack, { ProcFile(nStack), ProcName(nStack), ProcLine(nStack) }) nStack ++ ENDDO RETURN aStack este exemplo é proprio help do xHB Quote Link to comment Share on other sites More sharing options...
Marca Posted March 1 Author Report Share Posted March 1 19 horas atrás, Jmsilva disse: Sugestão: Vc pode chamar a rotina abaixo na sua func_valid e exibir num browse ou gravar em log(melhor), com isto vc poderia verificar de onde vem a segunda chamada. // The example implements a user defined function that collects call stack // information in an array. FUNCTION GetCallStack() LOCAL aStack := {} LOCAL nStack := 1 // Skip the GetCallStack() function in the result DO WHILE .NOT. Empty( ProcName(nStack) ) AAdd( aStack, { ProcFile(nStack), ProcName(nStack), ProcLine(nStack) }) nStack ++ ENDDO RETURN aStack este exemplo é proprio help do xHB Opa Bom dia JmSilva Eu já uso esta função em outros casos irei aplicar ela na rotina de saida da tela pra ver se me mostra de onde vem O mais estranho ainda é que isso acontece de chamar a rotina de saida estando dentro de um DO WHILE é mole não poderia sair em hipotese alguma sem os condicionais e se saisse o log pegaria o que mostra q. isso esta sendo executado em segundo plano. DO WHILE nInc < nFinal .AND. lContinue ENDDO E caso tivesse saido seira pego nInc := 1 GravaLogDia("Saiu do WHILE GERAL geral :" + oLbx:cAlias + " COM lBrowseVdEmProcesso : " + RetornaValorVar( lBrowseVdEmProcesso ) , "SVE") SetaArea(cArqTemp) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 1 Report Share Posted March 1 E quando lContinue é .F.? Regards, saludos. Quote Link to comment Share on other sites More sharing options...
Marca Posted March 1 Author Report Share Posted March 1 Da o erro ela sendo .T. na lógica se quer poderia ter saido do while Ai esta o problema. Quote Link to comment Share on other sites More sharing options...
devairlp Posted March 1 Report Share Posted March 1 Qual tipo de botão vc usa pra acionar a saida da Dialog, pois tive um problema parecido, que sempre duplicava o comando em algumas partes do prog., qdo eu usava BUTTONBMP, foi dificil descobrir que era isso que me causava o erro, mudei para BTNBMP e no pra mim resolveu. Quote Link to comment Share on other sites More sharing options...
Marca Posted March 1 Author Report Share Posted March 1 1 hora atrás, devairlp disse: Qual tipo de botão vc usa pra acionar a saida da Dialog, pois tive um problema parecido, que sempre duplicava o comando em algumas partes do prog., qdo eu usava BUTTONBMP, foi dificil descobrir que era isso que me causava o erro, mudei para BTNBMP e no pra mim resolveu. Por acaso é exatamente o BUTTONBMP Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 1 Report Share Posted March 1 33 minutos atrás, Marca disse: Por acaso é exatamente o BUTTONBMP Colocou a clausula CANCEL nele? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.