Página 3 de 3

PESQUISAR EM UM DBF INDICE CDX

Enviado: 15 Jul 2022 10:23
por carlaoonline
Bom dia!

Muitas vezes no início, cheguei a achar que era um Bug no Harbour, pois acontecia a mesa coisa comigo.... depois entendi que a cada replace o registro pulava de posição deixando o loop bem louco....

A questão é que quando você atualiza um campo ele pode mudar de posição o registro corrente, podendo inclusive se transformar no último registro e já sair do loop pelo eolf() (no caso se você colocar no início do campo uma palavra com a letra "Z" por exemplo...)


Minha sugestão é que você mude o SetOrder para um campo que não seja o que você ira efetuar os replaces, dai nesse caso não haverá problema pois ele ira obedecer o loop certinho do início ao fim sem que haja mudança de posição dos registros no índice ativo (pois vc estará efetuando alterações em campos que não estão no SetOrder ativo)

Por exemplo, se você for efetuar um replace no campo "NOME então coloque o SetOrder (OrdSetFocus) para o campo "CODIGO" (ou outro qualquer)...

Dependendo o caso, se no index do campo que vc escolher o SetOrder houver cláusulas de indexação(como FOR ou outra cláusula qualquer) você ainda pode indexar esse arquivo já indexado para outro campo temporariamente usando o USECURRENT

Código: Selecionar todos

use arquivo index arquivo
ORDSETFOCUS(2)   <-- Essa ordem seria o campo "NOME' por exemplo e com cláusulas na indexação.

INDEX ON CODIGO TAG COD_TEMP USECURRENT TEMPORARY  <-- Criara um índice temporário na memória

ou 

INDEX ON CODIGO TAG TAG_TEMP TO IND_TEMP USECURRENT  <-- Criará o índice IND_TEMP
No caso do uso da cláusula USECURRENT, ele manterá as condições da primeira indexação original porém apresentará uma nova ordem, no caso agora pelo campo CODIGO.


E aproveitando, acredito que deveria tirar o DbCommit() de dentro do Loop e colocar ele somente no final de todos os replaces, vai economizar bastante tempo.

PESQUISAR EM UM DBF INDICE CDX

Enviado: 15 Jul 2022 11:55
por Itamar M. Lins Jr.
Olá!
Vcs leram o que postei ?

Código: Selecionar todos

OrdSetFocus(0)
Ai desliga os indices e deixa na ordem em que foi digitado no DBF. ATENÇÃO! Os indices são atualizados!
Basta um DbGoTop(); DO WHILE, IF "XYZ" == substr(upper(descricao),1,3) ; replace ... etc...

Vai varrer o DBF todo e se achar vai susbtituir. Neste caso use STRTRAN() para conservar o resto.

Por exemplo PINCEL AMARELO 123 quero trocar por PINC AMARELO 123 melhor usar strtran(). PINCEL por PINC.
replace descricao with strtran(descricao,"PINCEL","PINC")

Saudações,
Itamar M. Lins Jr.

PESQUISAR EM UM DBF INDICE CDX

Enviado: 15 Jul 2022 15:19
por deividdjs
sim ... eu li .. mais em vez de colocar o ordsetfocus(0) eu exclui dele do codigo ... por isso ..

fiz essa mudança e funcionou perfeitamente ... fiz de DEBUG manual aqui pra ver como estava se comportando e deu certinho ...

Obrigado amigos !! show!!

Abs!

PESQUISAR EM UM DBF INDICE CDX

Enviado: 15 Jul 2022 17:46
por JoséQuintas
Só voltando ao início: se funciona INDEX deveria funcionar no SET FILTER.

Sobre o REPLACE, pode ser interessante usar SET ORDER TO 0

Só que a rotina está errada, não vai funcionar DO WHILE condicao, porque o primeiro que aparecer diferente já sai do DO WHILE, pode até nem fazer nenhum.

PESQUISAR EM UM DBF INDICE CDX

Enviado: 17 Jul 2022 13:03
por Itamar M. Lins Jr.
Olá!
o primeiro que aparecer diferente já sai do DO WHILE,
O que postei faltou:
...
DO WHILE .T.
...
VARRER TODO O DBF.

Saudações,
Itamar M. Lins Jr.

PESQUISAR EM UM DBF INDICE CDX

Enviado: 18 Jul 2022 15:15
por deividdjs
realmente era somente a ordem de indexação mesmo .. funcionou perfeitamente e lindamente !! rsrs

coloquei o SET ORDER TO 0 é tá feito a magica heheheh

Obrigado parceiros ... cêis são fera !!

Forte abraço!

PESQUISAR EM UM DBF INDICE CDX

Enviado: 21 Jul 2022 09:39
por deividdjs
Amigos ... surgiu mais uma duvida aqui .. vejam aí se conseguem me dar uma luz por favor ...

meu cliente pediu para imprimir o ticket de venda em uma impressora termina .. até aí tudo bem ... fiz um modelinho tudo certinho ela é em USB imprime bonitinho .. porém quando chega no item 16 ela corta a impressão e no arquivo .prn gerado pelo sistema está tudo certo .. acredito q seja por causa da configuração da pagina o sistema entende q é tipo uma A4 e corta a impressão neste ponto, como eu faço pra configurar na hora a impressão pra ela entender q é bobina e não um papel comum ?? alguem já passou por isso ?? no meu sistema eu uso o no nodosimp versão comercial ... até tem uma lista de modelo de papeis porém não encontrei nenhum compatível com bobina ...


segue lista

Código: Selecionar todos

/*/////////////////////////////////////////////////////////////////////////////////////
// TIPO PAPEL 

#define DMPAPER_FIRST                DMPAPER_LETTER
#define DMPAPER_LETTER               1  /* Letter 8 1/2 x 11 in               */
#define DMPAPER_LETTERSMALL          2  /* Letter Small 8 1/2 x 11 in         */
#define DMPAPER_TABLOID              3  /* Tabloid 11 x 17 in                 */
#define DMPAPER_LEDGER               4  /* Ledger 17 x 11 in                  */
#define DMPAPER_LEGAL                5  /* Legal 8 1/2 x 14 in                */ // OFICIO
#define DMPAPER_STATEMENT            6  /* Statement 5 1/2 x 8 1/2 in         */
#define DMPAPER_EXECUTIVE            7  /* Executive 7 1/4 x 10 1/2 in        */
#define DMPAPER_A3                   8  /* A3 297 x 420 mm                    */
#define DMPAPER_A4                   9  /* A4 210 x 297 mm                    */
#define DMPAPER_A4SMALL             10  /* A4 Small 210 x 297 mm              */
#define DMPAPER_A5                  11  /* A5 148 x 210 mm                    */
#define DMPAPER_B4                  12  /* B4 (JIS) 250 x 354                 */
#define DMPAPER_B5                  13  /* B5 (JIS) 182 x 257 mm              */
#define DMPAPER_FOLIO               14  /* Folio 8 1/2 x 13 in                */
#define DMPAPER_QUARTO              15  /* Quarto 215 x 275 mm                */
#define DMPAPER_10X14               16  /* 10x14 in                           */
#define DMPAPER_11X17               17  /* 11x17 in                           */
#define DMPAPER_NOTE                18  /* Note 8 1/2 x 11 in                 */
#define DMPAPER_ENV_9               19  /* Envelope #9 3 7/8 x 8 7/8          */
#define DMPAPER_ENV_10              20  /* Envelope #10 4 1/8 x 9 1/2         */
#define DMPAPER_ENV_11              21  /* Envelope #11 4 1/2 x 10 3/8        */
#define DMPAPER_ENV_12              22  /* Envelope #12 4 \276 x 11           */
#define DMPAPER_ENV_14              23  /* Envelope #14 5 x 11 1/2            */
#define DMPAPER_CSHEET              24  /* C size sheet                       */
#define DMPAPER_DSHEET              25  /* D size sheet                       */
#define DMPAPER_ESHEET              26  /* E size sheet                       */
#define DMPAPER_ENV_DL              27  /* Envelope DL 110 x 220mm            */
#define DMPAPER_ENV_C5              28  /* Envelope C5 162 x 229 mm           */
#define DMPAPER_ENV_C3              29  /* Envelope C3  324 x 458 mm          */
#define DMPAPER_ENV_C4              30  /* Envelope C4  229 x 324 mm          */
#define DMPAPER_ENV_C6              31  /* Envelope C6  114 x 162 mm          */
#define DMPAPER_ENV_C65             32  /* Envelope C65 114 x 229 mm          */
#define DMPAPER_ENV_B4              33  /* Envelope B4  250 x 353 mm          */
#define DMPAPER_ENV_B5              34  /* Envelope B5  176 x 250 mm          */
#define DMPAPER_ENV_B6              35  /* Envelope B6  176 x 125 mm          */
#define DMPAPER_ENV_ITALY           36  /* Envelope 110 x 230 mm              */
#define DMPAPER_ENV_MONARCH         37  /* Envelope Monarch 3.875 x 7.5 in    */
#define DMPAPER_ENV_PERSONAL        38  /* 6 3/4 Envelope 3 5/8 x 6 1/2 in    */
#define DMPAPER_FANFOLD_US          39  /* US Std Fanfold 14 7/8 x 11 in      */
#define DMPAPER_FANFOLD_STD_GERMAN  40  /* German Std Fanfold 8 1/2 x 12 in   */
#define DMPAPER_FANFOLD_LGL_GERMAN  41  /* German Legal Fanfold 8 1/2 x 13 in */
#define DMPAPER_ISO_B4              42  /* B4 (ISO) 250 x 353 mm              */
#define DMPAPER_JAPANESE_POSTCARD   43  /* Japanese Postcard 100 x 148 mm     */
#define DMPAPER_9X11                44  /* 9 x 11 in                          */
#define DMPAPER_10X11               45  /* 10 x 11 in                         */
#define DMPAPER_15X11               46  /* 15 x 11 in                         */
#define DMPAPER_ENV_INVITE          47  /* Envelope Invite 220 x 220 mm       */
#define DMPAPER_RESERVED_48         48  /* RESERVED--DO NOT USE               */
#define DMPAPER_RESERVED_49         49  /* RESERVED--DO NOT USE               */
#define DMPAPER_LETTER_EXTRA        50  /* Letter Extra 9 \275 x 12 in        */
#define DMPAPER_LEGAL_EXTRA         51  /* Legal Extra 9 \275 x 15 in         */
#define DMPAPER_TABLOID_EXTRA       52  /* Tabloid Extra 11.69 x 18 in        */
#define DMPAPER_A4_EXTRA            53  /* A4 Extra 9.27 x 12.69 in           */
#define DMPAPER_LETTER_TRANSVERSE   54  /* Letter Transverse 8 \275 x 11 in   */
#define DMPAPER_A4_TRANSVERSE       55  /* A4 Transverse 210 x 297 mm         */
#define DMPAPER_LETTER_EXTRA_TRANSVERSE 56 /* Letter Extra Transverse 9\275 x 12 in */
#define DMPAPER_A_PLUS              57  /* SuperA/SuperA/A4 227 x 356 mm      */
#define DMPAPER_B_PLUS              58  /* SuperB/SuperB/A3 305 x 487 mm      */
#define DMPAPER_LETTER_PLUS         59  /* Letter Plus 8.5 x 12.69 in         */
#define DMPAPER_A4_PLUS             60  /* A4 Plus 210 x 330 mm               */
#define DMPAPER_A5_TRANSVERSE       61  /* A5 Transverse 148 x 210 mm         */
#define DMPAPER_B5_TRANSVERSE       62  /* B5 (JIS) Transverse 182 x 257 mm   */
#define DMPAPER_A3_EXTRA            63  /* A3 Extra 322 x 445 mm              */
#define DMPAPER_A5_EXTRA            64  /* A5 Extra 174 x 235 mm              */
#define DMPAPER_B5_EXTRA            65  /* B5 (ISO) Extra 201 x 276 mm        */
#define DMPAPER_A2                  66  /* A2 420 x 594 mm                    */
#define DMPAPER_A3_TRANSVERSE       67  /* A3 Transverse 297 x 420 mm         */
#define DMPAPER_A3_EXTRA_TRANSVERSE 68  /* A3 Extra Transverse 322 x 445 mm   */
#define DMPAPER_DBL_JAPANESE_POSTCARD 69 /* Japanese Double Postcard 200 x 148 mm */
#define DMPAPER_A6                  70  /* A6 105 x 148 mm                 */
#define DMPAPER_JENV_KAKU2          71  /* Japanese Envelope Kaku #2       */
#define DMPAPER_JENV_KAKU3          72  /* Japanese Envelope Kaku #3       */
#define DMPAPER_JENV_CHOU3          73  /* Japanese Envelope Chou #3       */
#define DMPAPER_JENV_CHOU4          74  /* Japanese Envelope Chou #4       */
#define DMPAPER_LETTER_ROTATED      75  /* Letter Rotated 11 x 8 1/2 11 in */
#define DMPAPER_A3_ROTATED          76  /* A3 Rotated 420 x 297 mm         */
#define DMPAPER_A4_ROTATED          77  /* A4 Rotated 297 x 210 mm         */
#define DMPAPER_A5_ROTATED          78  /* A5 Rotated 210 x 148 mm         */
#define DMPAPER_B4_JIS_ROTATED      79  /* B4 (JIS) Rotated 364 x 257 mm   */
#define DMPAPER_B5_JIS_ROTATED      80  /* B5 (JIS) Rotated 257 x 182 mm   */
#define DMPAPER_JAPANESE_POSTCARD_ROTATED 81 /* Japanese Postcard Rotated 148 x 100 mm */
#define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 /* Double Japanese Postcard Rotated 148 x 200 mm */
#define DMPAPER_A6_ROTATED          83  /* A6 Rotated 148 x 105 mm         */
#define DMPAPER_JENV_KAKU2_ROTATED  84  /* Japanese Envelope Kaku #2 Rotated */
#define DMPAPER_JENV_KAKU3_ROTATED  85  /* Japanese Envelope Kaku #3 Rotated */
#define DMPAPER_JENV_CHOU3_ROTATED  86  /* Japanese Envelope Chou #3 Rotated */
#define DMPAPER_JENV_CHOU4_ROTATED  87  /* Japanese Envelope Chou #4 Rotated */
#define DMPAPER_B6_JIS              88  /* B6 (JIS) 128 x 182 mm           */
#define DMPAPER_B6_JIS_ROTATED      89  /* B6 (JIS) Rotated 182 x 128 mm   */
#define DMPAPER_12X11               90  /* 12 x 11 in                      */
#define DMPAPER_JENV_YOU4           91  /* Japanese Envelope You #4        */
#define DMPAPER_JENV_YOU4_ROTATED   92  /* Japanese Envelope You #4 Rotated*/
#define DMPAPER_P16K                93  /* PRC 16K 146 x 215 mm            */
#define DMPAPER_P32K                94  /* PRC 32K 97 x 151 mm             */
#define DMPAPER_P32KBIG             95  /* PRC 32K(Big) 97 x 151 mm        */
#define DMPAPER_PENV_1              96  /* PRC Envelope #1 102 x 165 mm    */
#define DMPAPER_PENV_2              97  /* PRC Envelope #2 102 x 176 mm    */
#define DMPAPER_PENV_3              98  /* PRC Envelope #3 125 x 176 mm    */
#define DMPAPER_PENV_4              99  /* PRC Envelope #4 110 x 208 mm    */
#define DMPAPER_PENV_5              100 /* PRC Envelope #5 110 x 220 mm    */
#define DMPAPER_PENV_6              101 /* PRC Envelope #6 120 x 230 mm    */
#define DMPAPER_PENV_7              102 /* PRC Envelope #7 160 x 230 mm    */
#define DMPAPER_PENV_8              103 /* PRC Envelope #8 120 x 309 mm    */
#define DMPAPER_PENV_9              104 /* PRC Envelope #9 229 x 324 mm    */
#define DMPAPER_PENV_10             105 /* PRC Envelope #10 324 x 458 mm   */
#define DMPAPER_P16K_ROTATED        106 /* PRC 16K Rotated                 */
#define DMPAPER_P32K_ROTATED        107 /* PRC 32K Rotated                 */
#define DMPAPER_P32KBIG_ROTATED     108 /* PRC 32K(Big) Rotated            */
#define DMPAPER_PENV_1_ROTATED      109 /* PRC Envelope #1 Rotated 165 x 102 mm */
#define DMPAPER_PENV_2_ROTATED      110 /* PRC Envelope #2 Rotated 176 x 102 mm */
#define DMPAPER_PENV_3_ROTATED      111 /* PRC Envelope #3 Rotated 176 x 125 mm */
#define DMPAPER_PENV_4_ROTATED      112 /* PRC Envelope #4 Rotated 208 x 110 mm */
#define DMPAPER_PENV_5_ROTATED      113 /* PRC Envelope #5 Rotated 220 x 110 mm */
#define DMPAPER_PENV_6_ROTATED      114 /* PRC Envelope #6 Rotated 230 x 120 mm */
#define DMPAPER_PENV_7_ROTATED      115 /* PRC Envelope #7 Rotated 230 x 160 mm */
#define DMPAPER_PENV_8_ROTATED      116 /* PRC Envelope #8 Rotated 309 x 120 mm */
#define DMPAPER_PENV_9_ROTATED      117 /* PRC Envelope #9 Rotated 324 x 229 mm */
#define DMPAPER_PENV_10_ROTATED     118 /* PRC Envelope #10 Rotated 458 x 324 mm */

#define DMPAPER_USER                256

// uso este codigo abaixo para imprimir 

MYRUN("&NODOSIMP &ARQ_USB 96 /PAPERSIZE{DMPAPER_A4SMALL}/nofixed/nover/sel/pre/look1/del/key4406557-321") // IMPRIME EM USB 



porém na impressão de ticket eu tirei o parâmetro PAPERSIZE{ } porque não funcionou em nenhum ., todos cortam a impressao no item 16.

Abraço!

PESQUISAR EM UM DBF INDICE CDX

Enviado: 21 Jul 2022 11:46
por carlaoonline
Bom dia!

Nesse caso, se é na linha 16 não deveria parar mesmo sendo A4.

As vezes pode ser algum caractere oculto no próprio arquivo que causa isso.

Você pode usar o NotePad++ ou outro editor para enxergar o final das linhas no arquivo texto (.prn) para se certificar que não é isso antes de partir para outras configurações.
Símbolos ocultos em arquivo texto
Símbolos ocultos em arquivo texto
Em meus relatórios mais simples, eu transformo o .PRN para .PDF com o TXT2PDF.exe. Eu não mando imprimir nativamente o arquivo PDF gerado, para imprimir eu uso um leitor de PDF como o Sumatra ou o Foxit Reader (o Adobe tb faz) para mandar imprimir através deles por linha de comando.


Para converter arquivo texto em PDF com o TXT2PDF eu uso essa linha de comando:

Código: Selecionar todos


    // txt2pdf -iTERM04.PRN -oARQUIVO.PDF    <<==  Modo direto   -iOrigem  -oDestino

    // Exemplo:
    cTemporario="D:\UTIL\"
    cArquivo="Arq_"
    cExtensao=".PRN"
    cRando=RIGHT(ALLTRIM(STR(SECOND())),3)

    BB="&Temporario"+"txt2pdf.exe -i"+CHR(34)+cArquivo+cExtensao+CHR(34)+" -o"+CHR(34)+cArquivo+cRando+".pdf"+chr(34)



      HB_RUN( BB )  //-restrict -fullscreen
      INKEY(1)


Para abrir na tela para o usuário olhar antes de imprimir (caso queira)

Código: Selecionar todos


        BB=cArquivo+RANDO+".PDF"
         ShellExecuteOpen( BB )   // Funcao Local (abre o programa padrão do Windows para a extensão do arquivo)
         // hb_run( explorer /select, "e:\teste\prog.exe" )  // Abre o exporer com o arquivo selecionado
         
//
//   Executa programa padrão Windows para a extensão do arquivo passado como referencia
//
FUNCTION ShellExecuteOpen( cFileName, cParameters, nShow )
   nShow := iif( nShow == NIL, SW_SHOWNORMAL, nShow )   // SW_SHOWMAXIMIZED   SW_SHOW
   WAPI_ShellExecute( NIL, "open", cFileName, cParameters,, nShow )
RETURN NIL

Para imprimir direto por linha de comando usando o SumatraPDF

Código: Selecionar todos

       //  sumatrapdf.exe -print-to "58 Printer" MeuPDF.PDF   <<== Comando direto 


       // Exemplo:

        // ATENCAO: HB_Run com o START, executa o programa em segundo plano,a parte, e não pausa a execução do principal...
        //    HB_Run sem o START, aguarda o termino da execução para voltar ao principal (esse APP)

        cImpressora="58 Printer"
        cMeuPdf=cArquivo+cRando+".PDF"
        BB = "START &cTemporario"+"sumatrapdf.exe -print-to "+CHR(34)+cImpressora+CHR(34)+cMeuPdf
        HB_RUN( BB )
        ALERT("Arquivo enviado para a impressora"+ cImpressora)
Segue em anexo o SumatraPdf e o Txt2Pdf
SumatraPDF_e_TXT2PDF.zip
SumatraPdf.exe e Txt2Pdf.exe
(3.57 MiB) Baixado 230 vezes

PESQUISAR EM UM DBF INDICE CDX

Enviado: 21 Jul 2022 16:10
por deividdjs
carlaoonline escreveu:Nesse caso, se é na linha 16 não deveria parar mesmo sendo A4.
Ola Carlos acho q eu me expressei mal .. não é linha 16 ... são 16 itens do pedido q ultrapassa as margens e tamanho da folha A4 ... e no arquivo .PRG está tudo lá bonitinho ... porém como é uma impressora termica e o papel é bobina o NODOSIMP não consegue decifrar isso e corta a impressao ... então a duvida é como eu faço pra aumentar a area de impressão analisando o tamanho do pedido impresso ... algo assim ...

no notepad sai perfeito!

ELECTRO AVENIDA
AVDA. LAS ACACIAS C/ TREBOL - MCAL. LOPEZ
Tel: 0973-545757
---------------------------------------------
PEDIDO N§ 005696
Fecha/Hora: 21/07/2022 16:07
---------------------------------------------
Cliente.: 00340 DEIVID JOSE DE SOUZA
R.U.C...: 5993742-4
Direci¢n:
Vendedor: 0001 D.ALLENDE
=============================================
ITEM D E S C R I P C I à N
CODIGO CANT UN PRECIO TOTAL
---------------------------------------------
1 ABRAZ. SIN FIN 08-10MM (5/16X3/8") 9MM
003300 10 UN 2.000 20.000

2 ABRAZ. SIN FIN 13-16MM (1/2X5/8)9MM
003307 10 UN 2.000 20.000

3 ABRAZ. SIN FIN 25-38MM (1X1.1/2)
000010 10 UN 4.500 45.000

4 ABRAZ. SIN FIN 8-10MM (5/16X3/8)9MM
000006 5 UN 1.500 7.500

5 ABRIDOR BLIST. SA35025
000015 1 UN 7.500 7.500

6 ACEITE INCONGELABLE P/R22
000020 1 UN 4.000 4.000
---------------------------------------------
Cond. Pago: AL CONTADO
-------------------------------
Sub_total.: 104.000
Desc/Acres: 0,00% 0
TOTAL G$..: 104.000
=============================================
GRACIAS POR SU PREFERENCIA!!


porém quando são mais de 16 itens ele corta ... entendendo que o papel é um A4 ou algo assim ...

PESQUISAR EM UM DBF INDICE CDX

Enviado: 21 Jul 2022 17:20
por Itamar M. Lins Jr.
Olá!
Corte o papel antes e continue.
Ou use HTML.

Código: Selecionar todos

<html>
<pre>
seu código
</pre>
</html>
Salve pedido.html veja que no navegador, a folha já fica continua, sem cortes.
PS. Atenção que estas questões(tópico) será movido, pois não fazem parte da primeira pergunta.

Saudações,
Itamar M. Lins Jr.

PESQUISAR EM UM DBF INDICE CDX

Enviado: 21 Jul 2022 21:04
por deividdjs
deividdjs escreveu:Salve pedido.html veja que no navegador, a folha já fica continua, sem cortes.
PS. Atenção que estas questões(tópico) será movido, pois não fazem parte da primeira pergunta.
Ok Itamar .. vou tentar !!

vdd eu me empolguei aqui nas perguntas ... e o topico não condiz ... perdão !

Abraço!