Página 1 de 1
Emissao de Etiqueta em LX-300
Enviado: 01 Mar 2010 18:40
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
Re: Emissao de Etiqueta em LX-300
Enviado: 02 Mar 2010 09:01
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
Re: Emissao de Etiqueta em LX-300
Enviado: 14 Fev 2011 11:26
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.
Re: Emissao de Etiqueta em LX-300
Enviado: 14 Fev 2011 12:59
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,
Re: Emissao de Etiqueta em LX-300
Enviado: 14 Fev 2011 13:43
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.
Re: Emissao de Etiqueta em LX-300
Enviado: 14 Fev 2011 14:11
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,
Re: Emissao de Etiqueta em LX-300
Enviado: 15 Fev 2011 14:17
por Mario Mesquita
Toledo,
Eu vi lá. Tem que dar uma parada e olhar direito e farei isso.
De novo, obrigado.
Abraço,
Mario.
Re: Emissao de Etiqueta em LX-300
Enviado: 28 Fev 2011 21:31
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.
Emissao de Etiqueta em LX-300
Enviado: 28 Fev 2011 22:12
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.
Re: Emissao de Etiqueta em LX-300
Enviado: 01 Mar 2011 11:42
por Mario Mesquita
Bom dia a todos.
Valeu Pablo! Vou fuçar e conto como ficou. Obrigado.
Abraço,
Mario.
Re: Emissao de Etiqueta em LX-300
Enviado: 01 Mar 2011 12:51
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
Re: Emissao de Etiqueta em LX-300
Enviado: 01 Mar 2011 23:19
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.