Emissao de Etiqueta em LX-300

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

mmaciel11
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 23 Mar 2006 11:16
Localização: sao luis
Contato:

Emissao de Etiqueta em LX-300

Mensagem por mmaciel11 »

Boa Noite,


Tenho um sistema hospitalar que estou convertendo para Xharbour + minigui e gostaria de saber como faço para imprimir a etiqueta com dados do paciente em modo gráfico ou não.

desde já agradeço.


Marco Maciel

Utilizo Xharbour + minigui
HBMake v1.55 - xHarbour Make
xHarbour build 0.99.60 (simplex)
Borland c++ 5.5.1
mmaciel11
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 23 Mar 2006 11:16
Localização: sao luis
Contato:

Re: Emissao de Etiqueta em LX-300

Mensagem por mmaciel11 »

Boa dia,

para impressao via DOS diretamente pela impressora local LPT1

é assim que imprimo ???



Function Etiqueta_Paciente()
Set Device to Print
@ 10, 10 Say 'Marco Maciel' to print
Set Device to Scree
HBMake v1.55 - xHarbour Make
xHarbour build 0.99.60 (simplex)
Borland c++ 5.5.1
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Re: Emissao de Etiqueta em LX-300

Mensagem por Mario Mesquita »

Bom dia a todos.

Estou "requentando" o tópico do colega aqui, pois queria uma dica, pois no meu programinha que estou fazendo e que já tiuve a preciosa ajuda de voces aqui, preciso emitir umas etiquetas em impressora LX e em modo Draft. Qual o modo mais simples de fazer? Vcs usam a MiniPrint? Vejo que alguns usam, ela facilita?

Desde já agradeço a ajuda e peço desculpas pela avalanche de tópicos. Como já me disseram, só se aprende fazendo. Mas, progredindo com as ferramentas, sinto que estou gostando de usá-las e me sentindo em casa, como todo velho clippeiro.

Boa semana a todos,
Mario.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Emissao de Etiqueta em LX-300

Mensagem por Toledo »

Mário, em modo Draft você pode continuar imprimindo como era feito no Clipper.

Código: Selecionar todos

SET PRINTER TO LPT1
SET DEVICE TO PRINT
@ 1,1 SAY "Aqui você monta sua etiqueta"
SET PRINTER TO
SET DEVICE TO SCREEN
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Re: Emissao de Etiqueta em LX-300

Mensagem por Mario Mesquita »

Toledo,

Como diz um amigo: "Só isso tudo"? Que beleza! E dá pra usar os CHR(15) e outros, para negrito, compressão, etc?

Que legal. Obrigado de novo pela dica!

Boa semana,
Mario.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Emissao de Etiqueta em LX-300

Mensagem por Toledo »

Mario Mesquita escreveu:E dá pra usar os CHR(15) e outros, para negrito, compressão, etc?
Sim, você pode usar os mesmos comandos.

Agora, se você quiser um relatório em modo gráfico, ai sim você pode utilizar a MiniPrint.

MiniPrint: veja o exemplo anexo a esta mensagem:
https://pctoledo.org/forum/viewto ... 404#p47179

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Re: Emissao de Etiqueta em LX-300

Mensagem por Mario Mesquita »

Toledo,

Eu vi lá. Tem que dar uma parada e olhar direito e farei isso.

De novo, obrigado.

Abraço,
Mario.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Re: Emissao de Etiqueta em LX-300

Mensagem por Mario Mesquita »

Boa noite a todos.

As dicas sobre impressão foram ótimas, obrigado aos colegas. Mas surgiu um antigo problema do tempo do Clipper. O buffer de impressão retem a etiqueta até fechar o programa ou esperar uma eternidade. No Clipper resolvi com uma pequena lib que vi aqui no fórum, com uma função PRCOMMIT(). Pelo que vi, o Harbour não tem uma coisa pronta para isso. Os colegas já se depararam com isso? E como resolveram?

Desde já, obrigado a todos.

Abraço,
Mario.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Emissao de Etiqueta em LX-300

Mensagem por Pablo César »

Aqui no fórum encontrei algo, não sei se servirá para seu caso. Mas não custa tentar e nos dizer se funcionou:

https://pctoledo.org/forum/viewto ... 936#p50966 Possível solução alterando REGISTRY
https://pctoledo.org/forum/viewto ... 936#p51481 Outra possível solução baixando e executando tal utilitário.
https://pctoledo.org/forum/viewto ... 936#p51492 Terceira possível solução, criando a função citada.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Re: Emissao de Etiqueta em LX-300

Mensagem por Mario Mesquita »

Bom dia a todos.

Valeu Pablo! Vou fuçar e conto como ficou. Obrigado.

Abraço,
Mario.
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Re: Emissao de Etiqueta em LX-300

Mensagem por MARCELOG »

Olá combatente,
atualmente estou usando harbour+minigui+miniprint+sqlite.
Como a miniprint tem a opção de gerar as coordenadas em mm, achei a melhor opção para etiquetas que, normalmente, vêm em formulários contínuos ou folhas soltas.
Ah! E ainda tem a opção de pré-visualização. Demais.
Num arquivo de configuração, gravo as informações do formulário e da última etiqueta utilizada.
As informações para impressão são obtidas do banco de dados e transferidas para uma matriz.
Depois, é só percorrer a matriz e imprimir.
O exemplo abaixo foi elaborado com o xharbour + minigui + tsbrowse + miniprint + postgresql, mas a lógica é a mesma e vai funcionar em outras situações.

Código: Selecionar todos

PROCEDURE PARTEIMPRIME3()

LOCAL aParte, i, nLin, nCol, nEtq, x, nColunas, nLinhas, cCodigo, cQuery, oQuery
//, nString, aEstado, cLinha

IF FILE('c:\divijuri\divijuri.cfg')

   hCfg                           := HB_READINI('c:\divijuri\divijuri.cfg')

   hCfg['ETIQUETA']['SUPERIOR']   := NTRIM(ETIQUETA.SPN1.VALUE)

   hCfg['ETIQUETA']['ESQUERDA']   := NTRIM(ETIQUETA.SPN2.VALUE)

   hCfg['ETIQUETA']['LARGURA']    := NTRIM(ETIQUETA.SPN3.VALUE)

   hCfg['ETIQUETA']['ALTURA']     := NTRIM(ETIQUETA.SPN4.VALUE)

   hCfg['ETIQUETA']['ESPACOH']    := NTRIM(ETIQUETA.SPN5.VALUE)

   hCfg['ETIQUETA']['ESPACOV']    := NTRIM(ETIQUETA.SPN6.VALUE)

   hCfg['ETIQUETA']['LINHAS']     := NTRIM(ETIQUETA.SPN7.VALUE)

   hCfg['ETIQUETA']['COLUNAS']    := NTRIM(ETIQUETA.SPN8.VALUE)

   hCfg['ETIQUETA']['FONTE']      := NTRIM(ETIQUETA.SPN9.VALUE)

ENDIF

IF !HB_WRITEINI('c:\divijuri\divijuri.cfg',hCfg)

   MSGSTOP('Desculpe, mas nÆo foi poss¡vel gravar'+CRLF+'informa‡äes no arquivo.')

ENDIF


IF PARTEIMPRIME.RDG2.VALUE == 1 // Este

   OTBR:ASELECTED  := {OTBR:NAT}

ELSEIF PARTEIMPRIME.RDG2.VALUE == 2 // Selecionado(s)

   // NÆo faz nada

ELSEIF PARTEIMPRIME.RDG2.VALUE == 3 // Todos

   OTBR:ASELECTED := {}

   FOR i := 1 TO OTBR:NLEN

       AADD(OTBR:ASELECTED,i)

   NEXT i

ENDIF

aParte := {}

FOR i := 1 TO LEN(OTBR:ASELECTED)

    cCodigo := OTBR:AARRAY[OTBR:ASELECTED[i],1] 

    //                          1               2
    cQuery := 'SELECT BTRIM(parte),BTRIM(endereco) '+;
              'FROM parte '+;
              "WHERE codigo='" + cCodigo + "'"

    oQuery := oServer:QUERY(cQuery)

    IF oQuery:NETERR()

       MSGSTOP(PROCFILE()+CRLF+PROCNAME()+CRLF+NTRIM(PROCLINE())+CRLF+oQuery:ERRORMSG())

       oQuery:DESTROY()

       END PAGE

       END DOC

       RELEASE PRINTSYS

       OTBR:ASELECTED := {}

       RETURN

    ENDIF

    AADD(aParte,{oQuery:GETROW(1):FIELDGET(1),;
                 ALLTRIM(MEMOLINE(oQuery:GETROW(1):FIELDGET(2),79,1)),;
                 ALLTRIM(MEMOLINE(oQuery:GETROW(1):FIELDGET(2),79,2)),;
                 ALLTRIM(MEMOLINE(oQuery:GETROW(1):FIELDGET(2),79,3)),;
                 ALLTRIM(MEMOLINE(oQuery:GETROW(1):FIELDGET(2),79,4))})

NEXT i

oQuery:DESTROY()

INIT PRINTSYS

SELECT PRINTER PARTEIMPRIME.CMB1.ITEM(PARTEIMPRIME.CMB1.VALUE) PREVIEW

IF HBPRNERROR > 0

   RETURN

ENDIF

SET PREVIEW RECT 0,0,GETDESKTOPHEIGHT(),GETDESKTOPWIDTH()

DEFINE FONT 'FONTETQ' NAME 'Courier New' SIZE ETIQUETA.SPN9.VALUE

// DEFINE PEN 'P0' STYLE PS_DOT WIDTH 1 COLOR 0x000000

// DEFINE PEN 'P1' STYLE PS_SOLID WIDTH 1 COLOR 0x000000

SET UNITS MM

IF PARTEIMPRIME.RDG1.VALUE == 1 // Retrato

   SET PREVIEW SCALE 2

   SET ORIENTATION PORTRAIT

ELSE

   SET PREVIEW SCALE 1

   SET ORIENTATION LANDSCAPE

ENDIF

// A impressÆo come‡a aqui!!!

START DOC NAME HB_OEMTOANSI('Etiqueta de Parte')

START PAGE

nLin := ETIQUETA.SPN1.VALUE

nCol := ETIQUETA.SPN2.VALUE

nEtq := 1

FOR i := 1 TO INT(ROUND(LEN(aParte)/ETIQUETA.SPN8.VALUE,0)) // Linhas = registros : colunas

    IF nEtq > LEN(aParte)

       EXIT

    ENDIF
        
    FOR x := 1 TO ETIQUETA.SPN8.VALUE // Colunas

        IF nEtq > LEN(aParte)

           EXIT

        ENDIF

        @ nLin+2,nCol SAY aParte[nEtq,1] FONT 'FONTETQ' ALIGN TA_LEFT TO PRINT

        @ nLin+2 + (ETIQUETA.SPN4.VALUE-4)/5,nCol SAY aParte[nEtq,2] FONT 'FONTETQ' ALIGN TA_LEFT TO PRINT

        @ nLin+2 + ((ETIQUETA.SPN4.VALUE-4)/5*2),nCol SAY aParte[nEtq,3] FONT 'FONTETQ' ALIGN TA_LEFT TO PRINT

        @ nLin+2 + ((ETIQUETA.SPN4.VALUE-4)/5*3),nCol SAY aParte[nEtq,4] FONT 'FONTETQ' ALIGN TA_LEFT TO PRINT
                                                                               
        @ nLin+2 + ((ETIQUETA.SPN4.VALUE-4)/5*4),nCol SAY aParte[nEtq,5] FONT 'FONTETQ' ALIGN TA_LEFT TO PRINT

        nEtq++

        nCol += (ETIQUETA.SPN3.VALUE+ETIQUETA.SPN5.VALUE)
        
    NEXT x

    nLin += (ETIQUETA.SPN4.VALUE+ETIQUETA.SPN6.VALUE)

    nCol := ETIQUETA.SPN2.VALUE

    IF i % ETIQUETA.SPN7.VALUE == 0 // Linhas

       END PAGE

       START PAGE

       nLin := ETIQUETA.SPN1.VALUE

       nCol := ETIQUETA.SPN2.VALUE

    ENDIF

NEXT i

END PAGE

END DOC

RELEASE PRINTSYS

ATIVIDADE('SOLICITOU IMPRESSAO DE ETIQUETA')

OTBR:ASELECTED := {}

OTBR:REFRESH(.T.)

RETURN
MarceloG
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Re: Emissao de Etiqueta em LX-300

Mensagem por Mario Mesquita »

Boa noite a todos.

Valeu, MarceloG. A codificação parece sofisticada, complexa. Vale como estudo da MiniPrint. As etiquetas que estou fazendo são supersimples e diretas em impressora matricial em modo Draft. Como é pra atendimento a púbilco, com volume elevado de impressões, a impressão direta me resolve fácil. Mas como quero entender a MiniPrint para uso futuro, muito obrigado pela luz.

Abraço,
Mario.
Responder