rochinha Posted January 13, 2019 Report Share Posted January 13, 2019 Amiguinhos, EDUTEK Desde que fiz meu primeiro teste de Set Relation em 1990, decidi nunca mais usá-lo. É muito lento, e você esta processando ´varios ao mesmo tempo,não vale o esforço. Monte seu xBrowse sobre a tabela principal e use uma funcção de pesquisa das outras informações que compõem as colunas usando seek nos indices periféricos. Exemplo: ... pesq(str(pn->IDFUNC,5,0),"vendedor",2,"nome") ... Theotokos 1 Quote Link to comment Share on other sites More sharing options...
rochinha Posted January 13, 2019 Report Share Posted January 13, 2019 Amiguinhos, EDUTEK Desde que fiz meu primeiro teste de Set Relation em 1990, decidi nunca mais usá-lo. É muito lento, e você esta processando ´varios ao mesmo tempo,não vale o esforço. Monte seu xBrowse sobre a tabela principal e use uma funcção de pesquisa das outras informações que compõem as colunas usando seek nos indices periféricos. Exemplo: ... pesq(str(pn->IDFUNC,5,0),"vendedor",2,"nome") ... Na função acima passo a string de pesquisa baseada na formatação do indice, o nome da tabela, a posição do indice e o nome do campo que quero recuperar o conteúdo. Exemplo: Function HTMLPedido( _num_, _oque_, l2Vias ) // Parametros: // _num_ - numero de pedido // _oque_ - tipo do impresso // l2Vias - quantidades de vias // Pego informações para compor o cabeçalho Cl_Nome := VerifyINI( "CLIENTE" , "NOME" , "NOME DA EMPRESA" , cPath+"nfw.ini" ) Cl_Endereco := VerifyINI( "CLIENTE" , "ENDERECO" , "ENDERECO DA EMPRESA" , cPath+"nfw.ini" ) Cl_Bairro := VerifyINI( "CLIENTE" , "BAIRRO" , "BAIRRO DA EMPRESA" , cPath+"nfw.ini" ) Cl_Cidade := VerifyINI( "CLIENTE" , "CIDADE" , "SP " , cPath+"nfw.ini" ) Cl_Telefone := VerifyINI( "CLIENTE" , "TELEFONE" , "(0xx11)0000-0000" , cPath+"nfw.ini" ) Cl_Cep := VerifyINI( "CLIENTE" , "CEP" , "00000-000" , cPath+"nfw.ini" ) Cl_Estado := VerifyINI( "CLIENTE" , "ESTADO" , "SP" , cPath+"nfw.ini" ) Cl_Fax := VerifyINI( "CLIENTE" , "FAX" , "(0xx11)0000-0000" , cPath+"nfw.ini" ) Cl_Cnpj := VerifyINI( "CLIENTE" , "CGC" , "00.000.000/0000-00" , cPath+"nfw.ini" ) Cl_Inscricao:= VerifyINI( "CLIENTE" , "IE" , "00.000.000-00" , cPath+"nfw.ini" ) Cl_Email := VerifyINI( "CLIENTE" , "EMAIL" , "email@provedor.com.br" , cPath+"nfw.ini" ) l2Vias := .f. // Default é via unica if MsgYesNo( "Deseja impressao em duas vias?" ) l2Vias := .t. endif // Seleção do arquivo principal dbSelectArea( "PN" ) OrdSetFocus( 2 ) // Busca do primeiro parametro dbSeek(STR(_num_,6,0)) if .not. found() MsgStop( "Nada encontrado com o numero(" + STR(_num_,6,0) + ")" ) return .t. endif // Carrego variaveis iniciais M->IDCLIENTE := PN->IDCLIENTE M->IDFUNC := PN->IDFUNC M->OBS2 := PN->OBS2 M->PRN_DATAPED := PN->DATAPED M->PRN_IDCONDICAO := PN->IDCONDICAO M->PRN_AVALIACAO := PN->AVALIACAO M->PRN_FRETE := PN->FRETE // Valor de desconto M->PRN_IDFUNC := PN->IDFUNC // Codigo do funcionario M->PRN_IDTRANSP := PN->IDTRANSP // codigo da transportadora em PN M->PRN_IDCLIENTE := PN->IDCLIENTE // Codigo do cliente // Carrego outras veriaveis através de pesquisa em outras tabelas M->PRN_CONDICAO := PESQ( M->PRN_IDCONDICAO, "CONDICAO", 1, "CONDICAO" ) // M->PRN_NOME := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "NOME" ) M->PRN_ENDERECO := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "ENDERECO" ) M->PRN_BAIRRO := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "BAIRRO" ) M->PRN_CIDADE := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "CIDADE" ) M->PRN_CEP := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "CEP" ) M->PRN_ESTADO := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "ESTADO" ) M->PRN_INSCR := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "INSCR" ) M->PRN_CGC := PESQ( STR(M->PRN_IDCLIENTE,5,0), "CLIENTES", 2, "CGC" ) // Segundo parametro define o tipo do impresso // define o arquivo template usado para o cabeçalho cHTMLFile := STR( Random(), 8 ) + ".HTM" do case case _oque_ = "V" // Pedido cTPLFile := "PEDIDOC.TPL" cHTMLName := "PEDIDO DE VENDA" cHTMLFile := "PE"+STRZERO(M->IDPEDIDO,6)+".HTM" case _oque_ = "O" // Orcamento cTPLFile := "PEDIDOC.TPL" cHTMLName := "ORCAMENTO" cHTMLFile := "OC"+STRZERO(M->IDPEDIDO,6)+".HTM" case _oque_ = "N" // Pre-Nota cTPLFile := "PEDIDOC.TPL" cHTMLName := "PRE-NOTA" cHTMLFile := "NF"+STRZERO(M->IDPEDIDO,6)+".HTM" endcase // Verifico a existencia do template CABECALHO para fazer uso if !file( cTPLFile ) MsgStop( "Template de cabecalho "+cTPLFile+" nao encontrado." ) dbSelectArea( "PN" ) OrdSetFocus( 1 ) return .t. endif // Faco o carregamento do template de CABECALHO cHTMLFile1 := MemoRead( cTPLFile ) // Preenchimento de algumas variaveis a serem usadas Cl_Nome := VerifyINI( "CLIENTE" , "NOME" , "NOME DA EMPRESA" , cPath+"nfw.ini" ) Cl_Endereco := VerifyINI( "CLIENTE" , "ENDERECO" , "ENDERECO DA EMPRESA" , cPath+"nfw.ini" ) Cl_Bairro := VerifyINI( "CLIENTE" , "BAIRRO" , "BAIRRO DA EMPRESA" , cPath+"nfw.ini" ) Cl_Cidade := VerifyINI( "CLIENTE" , "CIDADE" , "SP " , cPath+"nfw.ini" ) Cl_Telefone := VerifyINI( "CLIENTE" , "TELEFONE" , "(0xx11)0000-0000" , cPath+"nfw.ini" ) Cl_Cep := VerifyINI( "CLIENTE" , "CEP" , "00000-000" , cPath+"nfw.ini" ) Cl_Estado := VerifyINI( "CLIENTE" , "ESTADO" , "SP" , cPath+"nfw.ini" ) Cl_Fax := VerifyINI( "CLIENTE" , "FAX" , "(0xx11)0000-0000" , cPath+"nfw.ini" ) Cl_Cnpj := VerifyINI( "CLIENTE" , "CGC" , "00.000.000/0000-00" , cPath+"nfw.ini" ) Cl_Inscricao:= VerifyINI( "CLIENTE" , "IE" , "00.000.000-00" , cPath+"nfw.ini" ) Cl_Email := VerifyINI( "CLIENTE" , "EMAIL" , "email@provedor.com.br" , cPath+"nfw.ini" ) // Neste momento faço o inxerto de variaveis via MERGE, com conteudos ja capturados // Cada uma das linhas abaixo fara a troca das variaveis com conteudos cHTMLFile1 := StrTran( cHTMLFile1, "{#impresso#}" , cHTMLName ) cHTMLFile1 := StrTran( cHTMLFile1, "{#empresa#}" , Cl_Nome ) cHTMLFile1 := StrTran( cHTMLFile1, "{#endereco#}" , Cl_Endereco ) cHTMLFile1 := StrTran( cHTMLFile1, "{#bairro#}" , Cl_Bairro ) cHTMLFile1 := StrTran( cHTMLFile1, "{#cidade#}" , Cl_Cidade ) cHTMLFile1 := StrTran( cHTMLFile1, "{#pais#}" , "Brasil" ) cHTMLFile1 := StrTran( cHTMLFile1, "{#telefone#}" , Cl_Telefone ) cHTMLFile1 := StrTran( cHTMLFile1, "{#fax#}" , Cl_Fax ) cHTMLFile1 := StrTran( cHTMLFile1, "{#website#}" , "www.website.com" ) cHTMLFile1 := StrTran( cHTMLFile1, "{#email#}" , Cl_Email ) cHTMLFile1 := StrTran( cHTMLFile1, "{#idpedido#}" , str( M->IDPEDIDO, 6 ) ) cHTMLFile1 := StrTran( cHTMLFile1, "{#situacao#}" , M->PRN_AVALIACAO ) cHTMLFile1 := StrTran( cHTMLFile1, "{#dataped#}" , dtoc( M->PRN_DATAPED ) ) cHTMLFile1 := StrTran( cHTMLFile1, "{#idcondicao#}" , M->PRN_IDCONDICAO ) cHTMLFile1 := StrTran( cHTMLFile1, "{#identrega#}" , M->PRN_TR_NOME ) cHTMLFile1 := StrTran( cHTMLFile1, "{#barcode#}" , "BARCODE" ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteNome#}" , OemToAnsi( FDecripta( M->PRN_NOME ) ) ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteEmail#}" , M->PRN_EMAIL ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteTelefone#}" , M->PRN_TELEFONE ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteFax#}" , M->PRN_FAX ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteEndereco#}" , M->PRN_ENDERECO ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteBairro#}" , M->PRN_BAIRRO ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteCidade#}" , M->PRN_CIDADE ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteEstado#}" , M->PRN_ESTADO ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteCep#}" , M->PRN_CEP ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteINSCR#}" , M->PRN_INSCR ) cHTMLFile1 := StrTran( cHTMLFile1, "{#ClienteCGC#}" , M->PRN_CGC ) // Momento de impressao dos dados do corpo usando mais um template // Promovo a selecao do arquivo, indice e filtragem dos itens dbSelectArea( "ES" ) OrdSetFocus( 3 ) dbSeek(str(_num_,6,0)) OrdScope(0,STR(_num_,6,0)) OrdScope(1,STR(_num_,6,0)) dbGoTop() // Zeramento de variaveis de somatoria usada no rodapé M->SUBTOTAL := 0 M->DESCONTO := 0 // Verifico a existencia do template CORPO para fazer uso cTPLFile := "PEDIDOI.TPL" if !file( cTPLFile ) MsgStop( "Template de itens "+cTPLFile+" nao encontrado." ) dbSelectArea( "PN" ) OrdSetFocus( 1 ) return .t. endif // Faco o carregamento do template de geracao do CORPO do impresso cHTMLFile2 := MemoRead( cTPLFile ) // A variavel cHTMLFile22 irá comportar todos os registros do corpo // ou seja irá usar o template de corpo varias vezes conforme o numero // de registros cHTMLFile22 := "" DO WHILE .NOT. EOF() cHTMLFile21 := "" cHTMLFile21 := StrTran( cHTMLFile2 , "{#Resumido#}" , SUBSTR(ES->RESUMIDO,1,10) ) cHTMLFile21 := StrTran( cHTMLFile21, "{#Descricao#}" , ALLTRIM(SUBSTR(ES->DESCRICAO,1,45)) ) cHTMLFile21 := StrTran( cHTMLFile21, "{#Medida#}" , ES->MEDIDA ) cHTMLFile21 := StrTran( cHTMLFile21, "{#Quantidade#}", TRANSF(ES->QUANTIDADE,ES->MASCARA) ) cHTMLFile21 := StrTran( cHTMLFile21, "{#Unitario#}" , TRANSF(ES->VALORVENDA,"@E 99,999.99") ) cHTMLFile21 := StrTran( cHTMLFile21, "{#Desconto#}" , TRANSF(ES->DESCONTO,"@E 99,999.99") ) cHTMLFile21 := StrTran( cHTMLFile21, "{#SubTotal#}" , TRANSF(ES->SUBTOTAL,"@E 99,999.99") ) cHTMLFile22 := cHTMLFile22 + cHTMLFile21 // Subtotalizacao dos registros M->SUBTOTAL := M->SUBTOTAL + ES->SUBTOTAL M->DESCONTO := M->DESCONTO + ES->DESCONTO SKIP ENDDO // Verifico a existencia do template RODAPE para fazer uso cTPLFile := "PEDIDOR.TPL" if !file( cTPLFile ) MsgStop( "Template de rodape "+cTPLFile+" nao encontrado." ) dbSelectArea( "PN" ) OrdSetFocus( 1 ) return .t. endif // Faco o carregamento do template de geracao do RODAPE do impresso cHTMLFile3 := MemoRead( cTPLFile ) // Neste momento faço o inxerto de variaveis via MERGE, com conteudos ja capturados // Cada uma das linhas abaixo fara a troca das variaveis com conteudos cHTMLFile31 := StrTran( cHTMLFile3 , "{#Observacao1#}", substr(M->OBS2,01,54) ) cHTMLFile31 := StrTran( cHTMLFile31, "{#Observacao2#}", substr(M->OBS2,55,54) ) cHTMLFile31 := StrTran( cHTMLFile31, "{#tt_SubTotal#}", TRANSF(M->SUBTOTAL,"@E 99,999.99") ) cHTMLFile31 := StrTran( cHTMLFile31, "{#tt_Desconto#}", TRANSF(M->DESCONTO,"@E 99,999.99") ) cHTMLFile31 := StrTran( cHTMLFile31, "{#tt_Total#}" , TRANSF((M->SUBTOTAL-M->DESCONTO),"@E 99,999.99") ) // Caso use 2 vias, promovo a separacao dos dois impressos if l2Vias cTracejado := [<table cellpadding="0" cellspacing="0" width="705" border="0">] cTracejado := cTracejado + [<tr><td width="700" style="border: #444444; border-style: solid; border-width: 0px" align="center">] cTracejado := cTracejado + [<p></p><p></p><p></p><p></p><p></p><p></p><p></p>] cTracejado := cTracejado + [-<hr size="1" noshade="noshade"></hr>] cTracejado := cTracejado + [<p></p>-] cTracejado := cTracejado + [<p></p><p></p><p></p><p></p><p></p><p></p></td></tr></table>] MemoWrit( cHTMLFile, cHTMLFile1 + cHTMLFile22 + cHTMLFile31 + cTracejado + cHTMLFile1 + cHTMLFile22 + cHTMLFile31 ) else MemoWrit( cHTMLFile, cHTMLFile1 + cHTMLFile22 + cHTMLFile31 ) endif // Nome do HTML que contem o impresso cEndereco := cHTMLFile // Chamada de função do Windows para apresentacao do impresso // Pode se usar RUN( "START " + cEndereco ) ShellExecute(7, "open", cEndereco, , , 1) SysRefresh() // dbSelectArea( "PN" ) OrdSetFocus( 1 ) return .t. Veja uma explicação completa e o código da função em http://pctoledo.com.br/forum/viewtopic.php?f=1&t=3630&p=14111&hilit=function+pesq#p14111 http://pctoledo.com.br/forum/viewtopic.php?f=1&t=3630&p=14111&hilit=function+pesq#p14111 Quote Link to comment Share on other sites More sharing options...
EDUTEK Posted January 14, 2019 Report Share Posted January 14, 2019 ok obrigado vou dar uma analizada Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 14, 2019 Report Share Posted January 14, 2019 Bom Dia Ainda estou tendo problemas com a Mensagem "nao respondendo", na questao da movimentação, inclusão e alterações não tive mais problemas se o usuario esta usando o sistema ele não trava. estou com o problema assim, quando o usuário abre o sistema e deixa ele num "browse" qualquer, ai nao usa e vai em outra aplicação ou na web, quando ele volta para usar o sistema ele fica congelado com a mensagem "não respondendo." ai o usuário tem que fechar o programa via gerenciador de tarefas, e abrir novamente. isso ocorre várias vezes ao dia uso tabela DBFCDX ta na rede FWH18.05 bcc 7.3 a maioria com win 10 as que tem win 7 não tenho muito problema Bom Dia Ainda estou tendo problemas com a Mensagem "nao respondendo", na questao da movimentação, inclusão e alterações não tive mais problemas se o usuario esta usando o sistema ele não trava. estou com o problema assim, quando o usuário abre o sistema e deixa ele num "browse" qualquer, ai nao usa e vai em outra aplicação ou na web, quando ele volta para usar o sistema ele fica congelado com a mensagem "não respondendo." ai o usuário tem que fechar o programa via gerenciador de tarefas, e abrir novamente. isso ocorre várias vezes ao dia uso tabela DBFCDX ta na rede FWH18.05 bcc 7.3 a maioria com win 10 as que tem win 7 não tenho muito problema Acredito que implementando um timer com refresh, resolverá esta dormência do browser. Blz 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.