roberio Posted July 10, 2012 Report Share Posted July 10, 2012 kapiaba a chave vc tem q passar sem os pontos ex: 999999999999999999999999999999999999999999 retorna a danfe em formato pdf Editado por - roberio on 10/07/2012 16:50:16 Quote Link to comment Share on other sites More sharing options...
nardeypm Posted March 9, 2013 Report Share Posted March 9, 2013 não estou conseguindo filtrar com o ordscope quando tenho mais de uma condição. tenho um arquivo indexado por controle+turma+estagio+nome e quero filtrar todos pelo controle+turma+estagio usando o ordscope. abaixo uma das tentativas que tb não funcionou. SANOTA->(DBSETORDER(6)) // indexado por str(CONTROLE,3)+STR(TURMA,2)+ESTAGIO+NOMESANOTA->(OrdScope(0,str(ccontr,3)+str(ctur,2)+cestagio))SANOTA->(OrdScope(1,str(ccontr,3)+str(ctur,2)+cestagio))SANOTA->(DBGOTOP()) Quote Link to comment Share on other sites More sharing options...
AnaCatacombs Posted March 11, 2013 Report Share Posted March 11, 2013 Caro Colega. Não tenho muita experiência com OrdScope, talvez algum outro colega saiba a solução correta. Eu utilizaria o Set filter: SET FILTER TO cContr == Controle .AND. cTur == Turma .AND. cEstagio == Estagio. o Set filter é bem lento, principalmente em rede. Mas fica aà uma solução temporaria até alguma alma caridosa com mais experiência responder. Quote Link to comment Share on other sites More sharing options...
Alain da Silva Posted March 11, 2013 Report Share Posted March 11, 2013 SANOTA->(DBSETORDER(6)) // indexado por str(CONTROLE,3)+STR(TURMA,2)+ESTAGIO+NOMEOrdScope(0,str(ccontr,3)+str(ctur,2)+cestagio)OrdScope(1,str(ccontr,3)+str(ctur,2)+cestagio)SANOTA->(DBGOTOP()) Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted March 11, 2013 Report Share Posted March 11, 2013 Olá, tente... SANOTA->(OrdScope( 0 , {||str(ccontr,3)+str(ctur,2)+cestagio} )) SANOTA->(OrdScope( 1 , {||str(ccontr,3)+str(ctur,2)+cestagio} )) Quote Link to comment Share on other sites More sharing options...
vagner Posted March 11, 2013 Report Share Posted March 11, 2013 Olá, Está correto como vc postou, deveria funcionar, eu não gosto muito de usar Ãndices desse jeito com str, prefira usar o StrZero() ao invés do Str(), mas de qualquer maneira está correto. Veja que ele irá filtrar primeiramente pelo cContr+cTurm+cEstagio Só uma pergunta, essas variáveis são Numéricas né ? pergunto isso por vc ter colocado "c" na frente, indicando ser uma var Caracter ao invés de ser numéria como deveria ser para poder usar o STR() Abraços Vagner Wirts Quote Link to comment Share on other sites More sharing options...
nardeypm Posted March 11, 2013 Report Share Posted March 11, 2013 a minha primeira escolha foi o set filter to, mas na rede está muito lento. por isso, pedi ajuda em relação ao ordscope. estranhamente, as linhas do ordscope que postei no inÃcio que nunca funcionaram, agora estão funcionando. só a variavel cestagio é caracter, as demais são numericas. está funcionando corretamente. obrigado.... Quote Link to comment Share on other sites More sharing options...
nardeypm Posted March 18, 2013 Report Share Posted March 18, 2013 funcionou assim: sanota->(OrdScope(0,str(ccontr,3)+str(cturma,2)+cestagio))sanota->(OrdScope(1,str(ccontr,3)+str(cturma,2)+cestagio))sanota->(DBGOTOP()) agora tenho outro problema com ordscope. vejam: sanota->(DBSETORDER(7)) // indexado por NOME + str(CONTROLE,3)+ DTOS(DT_SAIDA)sanota->(OrdScope(0,cnome+str(ccontr,3)+EMPTY(DTOS(DT_SAIDA))))sanota->(OrdScope(1,cnome+str(ccontr,3)+EMPTY(DTOS(DT_SAIDA))sanota->(DBGOTOP()) ele dá erro informando que existe uma variavel lógica.preciso fazer o ordscope com nome + controle+ (empty(dt_saida e outro com !empty(dt_saida)). não estou conseguindo visualizar isso com o ordscope. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 18, 2013 Report Share Posted March 18, 2013 Eu faria com INDICE TEMPORÃRIO NA MEMÓRIA, a velocidade é a mesma do OrdScope(). Você pode criar quantos INDICES temporários na Memóra quiser, desde que esteja usando .CDX. abs, Exemplo: INDEX ON STATUS+STR(NFECOD,6,0) TAG 06 TO INFETEMP ; FOR ( .NOT. EOF() ) .AND. ; CADNFE->NFECOD >= NFE_INICIAL .AND. ; CADNFE->NFECOD <= NFE_FINAL .AND. ; CADNFE->STATUS = " " .AND. ; CADNFE->STATUS != "GER" .AND. ; CADNFE->STATUS != "APR" .AND. ; CADNFE->STATUS != "CAN" .AND. ; CADNFE->STATUS != "IMP" .AND. ; CADNFE->STATUS != "ENV" .AND. ; CADNFE->STATUS != "INU" .AND. ; CADNFE->STATUS != "DEN" .AND. ; CADNFE->TPFAT_OP = [P] TEMPORARY Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted March 18, 2013 Report Share Posted March 18, 2013 Alguém arruma a hora desse servidor, aaaaaaaaaaaaa sanota->(DBSETORDER(7)) // indexado por NOME + str(CONTROLE,3)+ DTOS(DT_SAIDA) sanota->(OrdScope( 0 , cnome+str(ccontr,3)+ DTOS( CTOD('') ) )) sanota->(OrdScope( 1 , cnome+str(ccontr,3)+ DTOS( CTOD('') ) )) sanota->(DBGOTOP()) Quote Link to comment Share on other sites More sharing options...
vagner Posted March 18, 2013 Report Share Posted March 18, 2013 O Erro é exatamente isso : EMPTY(DTOS(DT_SAIDA)) o Empty() lhe retorna .T. ou .F. (variável Lógica) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 19, 2013 Report Share Posted March 19, 2013 Alguém arruma a hora desse servidor, aaaaaaaaaaaaa sanota->(DBSETORDER(7)) // indexado por NOME + str(CONTROLE,3)+ DTOS(DT_SAIDA) sanota->(OrdScope( 0 , cnome+str(ccontr,3)+ DTOS( CTOD('') ) )) sanota->(OrdScope( 1 , cnome+str(ccontr,3)+ DTOS( CTOD('') ) )) sanota->(DBGOTOP()) Olá, para arrumar a hora, você deve entrar no seu "PERFIL" e alterar o relogio para hora de Brasilia - GMT. abs. Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted March 19, 2013 Report Share Posted March 19, 2013 Alguém arruma a hora desse servidor, aaaaaaaaaaaaa sanota->(DBSETORDER(7)) // indexado por NOME + str(CONTROLE,3)+ DTOS(DT_SAIDA) sanota->(OrdScope( 0 , cnome+str(ccontr,3)+ DTOS( CTOD('') ) )) sanota->(OrdScope( 1 , cnome+str(ccontr,3)+ DTOS( CTOD('') ) )) sanota->(DBGOTOP()) Olá, para arrumar a hora, você deve entrar no seu "PERFIL" e alterar o relogio para hora de Brasilia - GMT. abs. Vlw Kapiaba ^^ Quote Link to comment Share on other sites More sharing options...
nardeypm Posted March 19, 2013 Report Share Posted March 19, 2013 nunca usei indices na memoria. como faço isso. o sistema funciona em rede. tá lento demais. todos os terminais tem um executavel que acessa a base de dados dbf no server. os indices que uso são cdx. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 20, 2013 Report Share Posted March 20, 2013 Primeiro, vc. deve eliminar todos os SET FILTERS do seu sistema, e em todos os locais que precise de FILTRO, que não necessitem de INDICES FIXOS, voce usa INDICE TEMPORARIO, a indexação é igual a normal, só que em vez de fazer a INDEXAÇÃO no arquivo.CDX, vc. faz na memória em tempo real, o modo de fazer o INDICE é igual ao normal, só que voce acrescenta o comando TEMPORARY ao indexador. Ao sair do indice temporário, para não quebrar o programa, já que voce perderá a TAG do indice normal, você carrega o indice original. Dúvidas vá perguntando, para melhor entender, vá fazendo testes até "matar" a charada, veja exemplo acima. abs. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 20, 2013 Report Share Posted March 20, 2013 Parametros para .CDX INDEX ON ; TAG TO ; FOR ; WHILE ; NEXT | RECORD | REST | ALL ; UNIQUE ; ASCENDING | DESCENDING ; EVAL EVERY ; USECURRENT ; ADDITIVE ; CUSTOM ; NOOPTIMIZE; TEMPORARY http://forums.fivetechsupport.com/viewtopic.php?f=3&t=25771&hilit=TEMPORARY Abs, Quote Link to comment Share on other sites More sharing options...
oziel Posted May 10, 2013 Report Share Posted May 10, 2013 Eu fiz o trabalho com o OrdScope foi perfeito mas estou tentando fazer com arquivo temporário. De acordo com o exemplo que foi dado acima. Vejam como fiz, e o problema acontece quanto tenta abrir o arquivo .CDX Abraços Oziel Lopes //---------------------------------------------------------------------------------------- Select Cadastro INDEX ON IDADE+SEXO+GRAU+AREA+NOME TAG 05 TO CADTMP ; FOR ( .NOT. EOF() ) .AND. ; CADASTRO->IDADE >= "cIdade1" .AND. ; CADASTRO->IDADE <= "cIdade2" .AND. ; CADASTRO->SEXO = "cSexo" .AND. ; CADASTRO->GRAU = "cGrau" .AND. ; CADASTRO->AREA = "cArea" TEMPORARY Select Cadastro Set Index to CADTMP TEMPORARY // -------- LInha 2602 DBGotop()//-- ERRO DO SISTEMA ------------------------------------------------------- Application =========== Path and name: C:\Proj_FWH\grh\GRH.EXE (32 bits) Size: 2,418,688 bytes Time from start: 0 hours 0 mins 20 secs Error occurred at: 10/05/13, 16:18:06 Error description: (DOS Error 2) DBFCDX/1003 Open error: CADTMP.cdx Stack Calls =========== Called from: => ORDLISTADD(0) Called from: => PESQIDADE(2602) Called from: cadastro.000 => (b)CADASTRO(185) Called from: DBTNBMP.PRG => TDBTNBMP:CLICK(409) Called from: DBTNBMP.PRG => TDBTNBMP:LBUTTONUP(481) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 10, 2013 Report Share Posted May 10, 2013 Carissimo, se é na memória, isto não existe: CADTMP.cdx Retire isto: Select Cadastro Set Index to CADTMP TEMPORARY // -------- LInha 2602 quando sair do indice temporário, ai sim você diz: Set Index to e abre os indices normais .cdx abs, Quote Link to comment Share on other sites More sharing options...
oziel Posted May 13, 2013 Report Share Posted May 13, 2013 Obrigado Kapiaba. Essa é a primeira vez que utilizo arq com o comando Temporary Já fiz os testes funcionou perfeito. :D OZIEL LOPES Quote Link to comment Share on other sites More sharing options...
emotta Posted May 13, 2013 Report Share Posted May 13, 2013 Indice temporário é uma mão na roda mesmo... Somente para acrescentar na dica, a respeito do que o Kapiaba disse sobre quebrar o programa e ter que restaurar o indice, para não se preocupar com isso voce pode abrir a tabela com um alias só para criar o indice temporário. Por exemplo, se vc tem a tabela CLIENTES e em todo sistema voce abre a tabela com o alias CLI vc pode abrir nessa rotina especifica, que cria o indice temporario como, 'CLI_TRB'. Assim somente no alias CLI_TRB que voce terá o indice temporario vinculado e não desposiciona a CLI. Estou alterando em todos os meus sistemas para esse conceito de abrir ALIAS separado em locais que uso filtro ou indices temporarios. Em todos os meus cadastros eu abro um xBrowse exibindo todos os registros da tabela, nesse xBrowse eu posso passar filtros, movimentar, etc... O grande problema era que com o filtro ativo, ao abrir a rotina de ALTERACAO (por exemplo) eu tinha que tirar o filtro, posicionar, executar a rotina, ao fechar a rotina voltar o filtro e posicoonar novamente. Agora eu faço o seguinte: Ao acionar a opcao do menu eu abro um ALIAS temporario e com nome UNICO para a rotina, exemplo CLI_0001, e no xBrowse eu posso filtrar, desposiconar e fazer qualquer coisa que o alias CLI, nao tem nenhuma alteracao e nao me preocupo em nada com filtros ativos e com desposicionamento. Pelos testes que fiz no xHarbour podemos abrir mais de 4000 alias em cada instancia do sistema. Exemplo prático: USE CLIENTES ALIAS CLI SHARED NEW USE CLIENTES ALIAS CLI_0001 SHARED NEW DbSelectArea('CLI_0001') DbGoTo(5) DbSelectArea('CLI') DbGoTo(2) ? CLI_0001->(Recno()) // retorna 5 ? CLI->(Recno()) // retorna 2 DbSelectArea('CLI_0001') Set Filter To TIPO='1' DbSelectArea('CLI') Set Filter To TIPO='2' ? CLI_0001->(DbFilter()) // retorna TIPO='1' ? CLI->(DbFilter()) // retorna TIPO='2' abraços Primeiro, vc. deve eliminar todos os SET FILTERS do seu sistema, e em todos os locais que precise de FILTRO, que não necessitem de INDICES FIXOS, voce usa INDICE TEMPORARIO, a indexação é igual a normal, só que em vez de fazer a INDEXAÇÃO no arquivo.CDX, vc. faz na memória em tempo real, o modo de fazer o INDICE é igual ao normal, só que voce acrescenta o comando TEMPORARY ao indexador. Ao sair do indice temporário, para não quebrar o programa, já que voce perderá a TAG do indice normal, você carrega o indice original. Dúvidas vá perguntando, para melhor entender, vá fazendo testes até "matar" a charada, veja exemplo acima. abs. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 13, 2013 Report Share Posted May 13, 2013 EXCELENTE Emotta, mas um simples SET FILTER TO, fecha o indice temporário e não quebrará quando voce der um SELECT NomedoArquivo. Mas a sua idéia é ótema. aumenta o código, mas é ótema. obg, abs. Quote Link to comment Share on other sites More sharing options...
emotta Posted May 13, 2013 Report Share Posted May 13, 2013 se usar filtro temporário não existe motivo pra usar Set Filter To.... Realmente, pra gente está uma mão na roda, da mais liberdade pra trabalhar na tabela sem preocupação em desposicionar a tabela. é a maneira ideal para se trabalhar com o sistema em MDI... É uma mudança de conceito mesmo.. vlw ae, abraços EXCELENTE Emotta, mas um simples SET FILTER TO, fecha o indice temporário e não quebrará quando voce der um SELECT NomedoArquivo. Mas a sua idéia é ótema. aumenta o código, mas é ótema. obg, abs. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 13, 2013 Report Share Posted May 13, 2013 ERREI emotta, eu quis dizer: SET INDEX TO... Desculpe nossa falha.... kkkkkkkkkkkkkk Quote Link to comment Share on other sites More sharing options...
emotta Posted May 13, 2013 Report Share Posted May 13, 2013 kkkk ta perdoado parcero.... abraços e se começar a usar esse esquema de alias temporarios me avisa como foi .... sobre os indices temporários vou usar em alguns casos... apesar de conhecer isso estava esquecido a sua utilização pra mim.... ERREI emotta, eu quis dizer: SET INDEX TO... Desculpe nossa falha.... kkkkkkkkkkkkkk Quote Link to comment Share on other sites More sharing options...
oziel Posted May 13, 2013 Report Share Posted May 13, 2013 Emotta - Kapiaba Guardei a dica... quando eu fizer outras mudanças o que acontecer informo... Abraços... OZIEL 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.