bondrucker epson tm-t88v
bondrucker epson tm-t88v
hallo leute,
ich habe derzeit eine verständnisfrage zum programmieren eines bondruckers. epson tm-t88v ist das prachtstück von einem kunden.
hier meine frage:
muss ich die druckdatei vollständig binär generieren? oder eine ascii-textdatei erzeugen, das die erwünschten escapebefehle etc. hat.
und wie nutze ich die escape befehle genau? ich meine, falls binär:
wie müssen die zahlen gereiht angegeben werden und geht auch dezimal oder ist hexadezimal pflicht?
falls text, wie geht die eingabe der escape-befehle. ich verstehe da sowas wie \ESC ... oder sieht es doch ganz anders aus?
habe im weiten des netzes über die wochenende keine wirklich brauchbare lösung gefunden. nutze kein dot.net und habe es auch nicht vor.
mein problem ist nur, das mir nicht ganz klar ist, wieso der drucker die ausgabe nicht sauber durchführt.
ich habe einmal das ganze als ascii-datei generiert, wohl gemerkt mit den escape-steuerbefehlen. der drucker hat einfach die text-datei so ausgegeben, wie es eben vorliegt. er hat nichts interpretiert.
dann habe ich die escape-steuerbefehle in form von chr(zeichencode) bzw. auch in form asc(zeichen) und den stringanteil als gewöhnliche text eingegeben, da hat er wirres zeug rausgedruckt.
dann habe ich alles in binär geschrieben, und es kam wieder blödsinn raus. ich bin irgendwo an mein limit gelangt. ich weiß nicht weiter.
die befehlssätze sind mir vollkommen klar, mir ist lediglich nicht klar, wie ich das dem drucke beibringe, sprich in welchem format bzw. auf welche weise ich die druckdatei generieren muss, damit der bondrucker die datei korrekt ausdruckt.
der drucker selbst ist an usb angeschlossen. es gibt ein programm namens dosprinter.exe, im internet zu finden, der die druckdatei problemlos an den drucken sendet und auch das mit dem abschneiden übernimmt. nur was dabei rauskommen soll, muss in der datei stehen. und darin liegt mein problem. hoffe ich konnte mein problem erklären.
ich brauche funktionsfähige beispielcodes, mit denen ich was anfangen kann. hat irgendjemand eine idee?
mfg
kurt
ich habe derzeit eine verständnisfrage zum programmieren eines bondruckers. epson tm-t88v ist das prachtstück von einem kunden.
hier meine frage:
muss ich die druckdatei vollständig binär generieren? oder eine ascii-textdatei erzeugen, das die erwünschten escapebefehle etc. hat.
und wie nutze ich die escape befehle genau? ich meine, falls binär:
wie müssen die zahlen gereiht angegeben werden und geht auch dezimal oder ist hexadezimal pflicht?
falls text, wie geht die eingabe der escape-befehle. ich verstehe da sowas wie \ESC ... oder sieht es doch ganz anders aus?
habe im weiten des netzes über die wochenende keine wirklich brauchbare lösung gefunden. nutze kein dot.net und habe es auch nicht vor.
mein problem ist nur, das mir nicht ganz klar ist, wieso der drucker die ausgabe nicht sauber durchführt.
ich habe einmal das ganze als ascii-datei generiert, wohl gemerkt mit den escape-steuerbefehlen. der drucker hat einfach die text-datei so ausgegeben, wie es eben vorliegt. er hat nichts interpretiert.
dann habe ich die escape-steuerbefehle in form von chr(zeichencode) bzw. auch in form asc(zeichen) und den stringanteil als gewöhnliche text eingegeben, da hat er wirres zeug rausgedruckt.
dann habe ich alles in binär geschrieben, und es kam wieder blödsinn raus. ich bin irgendwo an mein limit gelangt. ich weiß nicht weiter.
die befehlssätze sind mir vollkommen klar, mir ist lediglich nicht klar, wie ich das dem drucke beibringe, sprich in welchem format bzw. auf welche weise ich die druckdatei generieren muss, damit der bondrucker die datei korrekt ausdruckt.
der drucker selbst ist an usb angeschlossen. es gibt ein programm namens dosprinter.exe, im internet zu finden, der die druckdatei problemlos an den drucken sendet und auch das mit dem abschneiden übernimmt. nur was dabei rauskommen soll, muss in der datei stehen. und darin liegt mein problem. hoffe ich konnte mein problem erklären.
ich brauche funktionsfähige beispielcodes, mit denen ich was anfangen kann. hat irgendjemand eine idee?
mfg
kurt
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: bondrucker epson tm-t88v
Es ist unüblich (um es mal höflich auszudrücken) dieselbe Frage in 2 Foren gleichzeitig zu stellen, siehe:
http://www.purebasic.fr/english/viewtop ... 70#p478170
Man sollte zumindest im erstem Forum ein paar Tage warten, ob eine Antwort erfolgt, bevor man in einem
anderem Forum dieselbe Frage stellt. Die ganzen Leerzeilen sind auch nicht besonders sinnvoll, aber das
nur nebenbei.
Zur Frage selber kann ich leider nichts beitragen.
Gruß
Thomas
http://www.purebasic.fr/english/viewtop ... 70#p478170
Man sollte zumindest im erstem Forum ein paar Tage warten, ob eine Antwort erfolgt, bevor man in einem
anderem Forum dieselbe Frage stellt. Die ganzen Leerzeilen sind auch nicht besonders sinnvoll, aber das
nur nebenbei.
Zur Frage selber kann ich leider nichts beitragen.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: bondrucker epson tm-t88v
Gross und Kleinschreibung wäre auch nicht schlecht! Es liest sich besser. 
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: bondrucker epson tm-t88v
Hast du den Beispieldateien, die man dosprint.exe übergeben kann?
Re: bondrucker epson tm-t88v
ein ausschnitt:
Code: Alles auswählen
Enumeration
#schrift_klein
#schrift_mitte
#schrift_gross
; ***
#schrift_kursiv_1
#schrift_kursiv_2
; ***
#schrift_fett_1
#schrift_fett_2
; ***
#schrift_courier_new
#schrift_lucida_console
#schrift_arial
#schrift_impact
#schrift_verdana
#schrift_tahoma
; ***
#schrift_linksbundig
#schrift_zentriert
#schrift_rechtsbundig
EndEnumeration
Global bon_pos.w = 0
Global bon_bandbreite.w = 44 * 6
Global cpi10.w = 13, cpi12.w = 16, cpi15.w = 21
Procedure.s bon_druberschreiben( ziel.s, quelle.s )
Define p.w = 0, t.s = ""
; ***
If Len(ziel) > Len(quelle)
For p = 1 To Len(ziel)
If p <= Len(quelle)
t + Mid( quelle, p, 1 )
Else
t + Mid( ziel, p, 1 )
EndIf
Next
ElseIf Len(ziel) = Len(quelle)
t = quelle
ElseIf Len(ziel) < Len(quelle)
For p = 1 To Len(ziel)
t + Mid( quelle, p, 1 )
Next
EndIf
; ***
ProcedureReturn t
EndProcedure
Procedure.s bon_abstand( position.w )
If position < 10
ProcedureReturn " "
ElseIf position < 100
ProcedureReturn " "
Else
ProcedureReturn " "
EndIf
EndProcedure
Procedure.s bon_passender_anteil( schriftg.a, schriftt.a, ruckabstand.s, text.s )
Select schriftg
Case #schrift_klein
Select schriftt
Case #schrift_courier_new : LoadFont( 2000, "Courier New", cpi10 )
Case #schrift_lucida_console : LoadFont( 2000, "Lucida Console", cpi10 )
Case #schrift_arial : LoadFont( 2000, "Arial", cpi10 )
Case #schrift_impact : LoadFont( 2000, "Impact", cpi10 )
Case #schrift_verdana : LoadFont( 2000, "Verdana", cpi10 )
Case #schrift_tahoma : LoadFont( 2000, "Tahoma", cpi10 )
EndSelect
Case #schrift_mitte
Select schriftt
Case #schrift_courier_new : LoadFont( 2000, "Courier New", cpi12 )
Case #schrift_lucida_console : LoadFont( 2000, "Lucida Console", cpi12 )
Case #schrift_arial : LoadFont( 2000, "Arial", cpi12 )
Case #schrift_impact : LoadFont( 2000, "Impact", cpi12 )
Case #schrift_verdana : LoadFont( 2000, "Verdana", cpi12 )
Case #schrift_tahoma : LoadFont( 2000, "Tahoma", cpi12 )
EndSelect
Case #schrift_gross
Select schriftt
Case #schrift_courier_new : LoadFont( 2000, "Courier New", cpi15 )
Case #schrift_lucida_console : LoadFont( 2000, "Lucida Console", cpi15 )
Case #schrift_arial : LoadFont( 2000, "Arial", cpi15 )
Case #schrift_impact : LoadFont( 2000, "Impact", cpi15 )
Case #schrift_verdana : LoadFont( 2000, "Verdana", cpi15 )
Case #schrift_tahoma : LoadFont( 2000, "Tahoma", cpi15 )
EndSelect
EndSelect
; ***
Define p.w, t.s = ""
; ***
If CreateImage( 2000, bon_bandbreite, 100 ) And StartDrawing(ImageOutput(2000))
ww.w = TextWidth(text)
; ***
If TextWidth(ruckabstand) + ww <= bon_bandbreite
t = text
Else
For p = 1 To Len(text)
If TextWidth(ruckabstand) + TextWidth(t) < bon_bandbreite
t + Mid(text,p,1)
Else
Break
EndIf
Next
; ***
If Len(t) > 1
t = Mid( t, 1, Len(t) - 1 )
EndIf
EndIf
; ***
StopDrawing()
EndIf
; ***
ProcedureReturn t
EndProcedure
Procedure.s bon_leerfeld( text.s )
Define p.w = 0, t.s = ""
; ***
For p = 1 To Len(text)
t + " "
Next
; ***
ProcedureReturn t
EndProcedure
Procedure.s bon_ruck( schriftg.a, schriftt.a, text.s, rechtsbunding.a = #False )
Select schriftg
Case #schrift_klein
Select schriftt
Case #schrift_courier_new : LoadFont( 2000, "Courier New", cpi10 )
Case #schrift_lucida_console : LoadFont( 2000, "Lucida Console", cpi10 )
Case #schrift_arial : LoadFont( 2000, "Arial", cpi10 )
Case #schrift_impact : LoadFont( 2000, "Impact", cpi10 )
Case #schrift_verdana : LoadFont( 2000, "Verdana", cpi10 )
Case #schrift_tahoma : LoadFont( 2000, "Tahoma", cpi10 )
EndSelect
Case #schrift_mitte
Select schriftt
Case #schrift_courier_new : LoadFont( 2000, "Courier New", cpi12 )
Case #schrift_lucida_console : LoadFont( 2000, "Lucida Console", cpi12 )
Case #schrift_arial : LoadFont( 2000, "Arial", cpi12 )
Case #schrift_impact : LoadFont( 2000, "Impact", cpi12 )
Case #schrift_verdana : LoadFont( 2000, "Verdana", cpi12 )
Case #schrift_tahoma : LoadFont( 2000, "Tahoma", cpi12 )
EndSelect
Case #schrift_gross
Select schriftt
Case #schrift_courier_new : LoadFont( 2000, "Courier New", cpi15 )
Case #schrift_lucida_console : LoadFont( 2000, "Lucida Console", cpi15 )
Case #schrift_arial : LoadFont( 2000, "Arial", cpi15 )
Case #schrift_impact : LoadFont( 2000, "Impact", cpi15 )
Case #schrift_verdana : LoadFont( 2000, "Verdana", cpi15 )
Case #schrift_tahoma : LoadFont( 2000, "Tahoma", cpi15 )
EndSelect
EndSelect
; ***
Define p.a, t.s = ""
; ***
If CreateImage( 2000, bon_bandbreite, 100 ) And StartDrawing(ImageOutput(2000))
ww.w = TextWidth(text)
; ***
If rechtsbunding = #False
ww = ( ( bon_bandbreite - ww ) / 2 )
Else
ww = bon_bandbreite - ww
EndIf
; ***
ww + TextWidth(" ")
; ***
For p = 1 To 40
t + " "
; ***
If TextWidth(t) >= ww
Break
EndIf
Next
; ***
If Len(t) > 1
t = Mid( t, 1, Len(t) - 1 )
Else
t = ""
EndIf
; ***
StopDrawing()
EndIf
; ***
ProcedureReturn t
EndProcedure
Procedure.s bon_text( schriftg.a, schriftt.a, textstrom.s, ausrichtung.a = 13 )
Dim schrift.s(13)
; Schriftgrößen
schrift(0) = "ESC P" ; 10 cpi
schrift(1) = "ESC M" ; 12 cpi
schrift(2) = "ESC g" ; 15 cpi
schrift(3) = "ESC 4" ; Kursiv -> Select
schrift(4) = "ESC 5" ; Kursiv -> Cancel
schrift(5) = "ESC E" ; Fett -> Select
schrift(6) = "ESC F" ; Fett -> Cancel
; Schriftarten
schrift(7) = "ESC k 0" ; Courier New
schrift(8) = "ESC k 1" ; Lucida Console
schrift(9) = "ESC k 5" ; Arial
schrift(10) = "ESC k 6" ; Impact
schrift(11) = "ESC k 15"; Verdana
schrift(12) = "ESC k 16"; Tahoma
Define t.s = "", text.s = ""
Select ausrichtung
Case #schrift_linksbundig : text = textstrom
Case #schrift_zentriert : text = bon_ruck(schriftg, schriftt, textstrom, #False) + textstrom
Case #schrift_rechtsbundig : text = bon_ruck(schriftg, schriftt, textstrom, #True ) + textstrom
EndSelect
t + schrift(schriftg) + #CRLF$ +
schrift(schriftt) + #CRLF$ +
text
ProcedureReturn t
EndProcedure
Procedure.s bon_opp_text( schriftg.a, schriftt.a, tlinks.s, trechts.s )
Dim schrift.s(13)
; Schriftgrößen
schrift(0) = "ESC P" ; 10 cpi
schrift(1) = "ESC M" ; 12 cpi
schrift(2) = "ESC g" ; 15 cpi
schrift(3) = "ESC 4" ; Kursiv -> Select
schrift(4) = "ESC 5" ; Kursiv -> Cancel
schrift(5) = "ESC E" ; Fett -> Select
schrift(6) = "ESC F" ; Fett -> Cancel
; Schriftarten
schrift(7) = "ESC k 0" ; Courier New
schrift(8) = "ESC k 1" ; Lucida Console
schrift(9) = "ESC k 5" ; Arial
schrift(10) = "ESC k 6" ; Impact
schrift(11) = "ESC k 15"; Verdana
schrift(12) = "ESC k 16"; Tahoma
Define t.s = "", links.s = bon_ruck( schriftg, schriftt, trechts, #True )
links = bon_druberschreiben( links, tlinks )
t + schrift(schriftg) + #CRLF$ +
schrift(schriftt) + #CRLF$ +
links + trechts
ProcedureReturn t
EndProcedure
Procedure.s bon_tab_text( schriftg.a, schriftt.a, text1.s, text2.s = "", text3.s = "" )
Dim schrift.s(13)
; Schriftgrößen
schrift(0) = "ESC P" ; 10 cpi
schrift(1) = "ESC M" ; 12 cpi
schrift(2) = "ESC g" ; 15 cpi
schrift(3) = "ESC 4" ; Kursiv -> Select
schrift(4) = "ESC 5" ; Kursiv -> Cancel
schrift(5) = "ESC E" ; Fett -> Select
schrift(6) = "ESC F" ; Fett -> Cancel
; Schriftarten
schrift(7) = "ESC k 0" ; Courier New
schrift(8) = "ESC k 1" ; Lucida Console
schrift(9) = "ESC k 5" ; Arial
schrift(10) = "ESC k 6" ; Impact
schrift(11) = "ESC k 15"; Verdana
schrift(12) = "ESC k 16"; Tahoma
Define t.s, t2.s, t3.s = ""
t2 = bon_passender_anteil( schriftg, schriftt, text1 + text2, text3 )
If t2 <> text3
t3 = Mid( text3, Len(t2) + 1 )
EndIf
t + schrift(schriftg) + #CRLF$ +
schrift(schriftt) + #CRLF$ +
text1 + text2 + t2
; ***
If t3
t + bon_leerfeld(text1 + text2) + t3
EndIf
ProcedureReturn t
EndProcedure
Procedure bon_datei( dateiNummer.l, strom.s )
Define satz.s = Trim(strom), es.a = 0
; ***
; If FindString( satz, "ESC " ) > 0 Or FindString( satz, "ESC" + Chr(9) ) > 0
; es = 1
; EndIf
; ***
satz = ReplaceString( satz, "ESC k 0", "\" + Str(Asc("k")) + "\" + "0" )
satz = ReplaceString( satz, "ESC k 1", "\" + Str(Asc("k")) + "\" + "1" )
satz = ReplaceString( satz, "ESC k 5", "\" + Str(Asc("k")) + "\" + "5" )
satz = ReplaceString( satz, "ESC k 6", "\" + Str(Asc("k")) + "\" + "6" )
satz = ReplaceString( satz, "ESC k 15", "\" + Str(Asc("k")) + "\" + "15" )
satz = ReplaceString( satz, "ESC k 16", "\" + Str(Asc("k")) + "\" + "16" )
satz = ReplaceString( satz, "ESC P", "\" + Str(Asc("P")) )
satz = ReplaceString( satz, "ESC M", "\" + Str(Asc("M")) )
satz = ReplaceString( satz, "ESC g", "\" + Str(Asc("g")) )
satz = ReplaceString( satz, "ESC 4", "\" + "4" )
satz = ReplaceString( satz, "ESC 5", "\" + "5" )
satz = ReplaceString( satz, "ESC E", "\" + Str(Asc("E")) )
satz = ReplaceString( satz, "ESC F", "\" + Str(Asc("F")) )
satz = ReplaceString( satz, "ESC R 2", "\" + Str(Asc("R")) + "\" + "2" )
satz = ReplaceString( satz, "ESC ! 4", "\" + Str(Asc("!")) + "\" + "4" )
If FindString( satz, "\" ) > 0
Select CountString( satz, "\" )
Case 1 : WriteByte( dateiNummer, Val(take(1,"\",satz)) )
WriteByte( dateiNummer, 0 )
Case 2 : WriteByte( dateiNummer, Val(take(1,"\",satz)) )
WriteByte( dateiNummer, Val(take(2,"\",satz)) )
WriteByte( dateiNummer, 0 )
EndSelect
Else
WriteStringN( dateiNummer, satz )
EndIf
; ***
ProcedureReturn 0
satz = ReplaceString( satz, "ESC", "#" )
; ***
Define c.w
; ***
If es = 1; Mid(satz,1,1) = "#"
WriteByte( dateiNummer, 27 )
; ***
;Debug satz + " >> " + take(1," ",satz) + " <> " + take(2," ",satz)
Debug ">>" + satz
Select FindString( satz, " " )
Case 1 ; ESC n
WriteByte( dateiNummer, Asc(take(1," ",satz)) )
WriteByte( dateiNummer, 1 )
Case 2 ; ESC n m
WriteByte( dateiNummer, Asc(take(1," ",satz)) )
; ***
ni.l = Val(take(2," ",satz))
; ***
WriteByte( dateiNummer, ni )
WriteByte( dateiNummer, 1 )
EndSelect
Else
Debug satz
WriteStringN( dateiNummer, satz, #PB_Ascii )
EndIf
EndProcedure
Procedure drucken_bon(belegnr.s,zahlungsart.s,zahlbetrag.d)
bon_pos = 0
Define drucker.s, martop.a, marbot.a, titel.s, text1.s, text2.s, text3.s, text4.s, text5.s
Define zeichensatz.s = "ESC R 2" ; Deutsch
Define trennstrich.s = "ESC ! 4" ; 0 Pica, 1 Elite, 4 Condensed, 8 Emphasized, 16 Double Strike, 128 Underline
Define knu.s, beldat.s, beltyp.s, bonjob.s, bonid.l
Define netto.d, brutto.d, mwst.d
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
; BON-Drucker Einstellungen einlesen
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
dbDO( #db_open, #DB_CORE )
; ***
If DBAC(#DB_CORE)
If DatabaseQuery(DBAC(#DB_CORE), "SELECT * FROM einstellungen ORDER BY id")
While NextDatabaseRow(DBAC(#DB_CORE))
wert$ = Trim(GetDatabaseString(DBAC(#DB_CORE), 3))
; ***
Select GetDatabaseString(DBAC(#DB_CORE), 1)
Case "bondrucker"
Select GetDatabaseString(DBAC(#DB_CORE), 2)
Case "drucker" : drucker = " /SEL'" + Trim(wert$) + "' "
Case "margintop" : martop = Val(wert$)
Case "marginbot" : marbot = Val(wert$)
Case "titel" : titel = wert$
Case "text1" : text1 = wert$
Case "text2" : text2 = wert$
Case "text3" : text3 = wert$
Case "text4" : text4 = wert$
Case "text5" : text5 = wert$
EndSelect
EndSelect
Wend
FinishDatabaseQuery(DBAC(#DB_CORE))
EndIf
EndIf
; ***
dbDO( #db_quit, #DB_CORE )
dbDO( #db_open, #DB_BELE )
; ***
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
; Rechnungskopfdaten einlesen
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
If IsDatabase(DBAC(#DB_BELE))
If DatabaseQuery(DBAC(#DB_BELE), "SELECT * FROM rechnungen WHERE belegnr = " + q(belegnr) + " LIMIT 1")
While NextDatabaseRow(DBAC(#DB_BELE))
knu = Trim(GetDatabaseString(DBAC(#DB_BELE),1))
beldat = FormatDate( "%dd.%mm.%yyyy", Val(GetDatabaseString(DBAC(#DB_BELE),4)) )
; ***
Select Trim(GetDatabaseString(DBAC(#DB_BELE),2))
Case "rech" : beltyp = "QUITTUNG"
Case "gut2" : beltyp = "GUTSCHEIN"
Case "gut1" : beltyp = "GUTSCHRIFT"
Default
beltyp = ""
EndSelect
; ***
netto = ValD(ReplaceString(GetDatabaseString(DBAC(#DB_BELE),11),",","."))
mwst = ValD(ReplaceString(GetDatabaseString(DBAC(#DB_BELE),10),",","."))
brutto = ValD(ReplaceString(GetDatabaseString(DBAC(#DB_BELE),12),",","."))
Wend
; ***
FinishDatabaseQuery(DBAC(#DB_BELE))
EndIf
EndIf
; ***
dbDO( #db_quit, #DB_BELE )
dbDO( #db_open, #DB_CUSP )
; ***
If beltyp = ""
infobox( #infobox_error, "Abbruch", "Der Bondrucker kann nur Rechnungen quittieren, Gutscheine und Gutschrifte ausdrucken. Andere Belegarten können nur auf normalem Drucker ausgedruckt werden!" )
EndIf
; ***
If knu = "" : ProcedureReturn 0 : EndIf
If Trim(beldat) = "" : ProcedureReturn 0 : EndIf
; ***
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
; Kundendaten einlesen
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
If IsDatabase(DBAC(#DB_CUSP))
If DatabaseQuery(DBAC(#DB_CUSP), "SELECT * FROM kunden WHERE kdnr = " + q(knu) + " LIMIT 1")
While NextDatabaseRow(DBAC(#DB_CUSP))
firma1$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),3))
firma2$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),4))
firma3$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),5))
; ***
kfname$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),7))
ksname$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),8))
; ***
kadres$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),9))
kpostl$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),10))
kregio$ = Trim(GetDatabaseString(DBAC(#DB_CUSP),8))
Wend
; ***
FinishDatabaseQuery(DBAC(#DB_CUSP))
EndIf
EndIf
; ***
dbDO( #db_quit, #DB_CUSP )
; ***
dbDO( #db_open, #DB_CORE )
; ***
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
; Firmendaten einlesen
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
If IsDatabase(DBAC(#DB_CORE))
If DatabaseQuery(DBAC(#DB_CORE), "SELECT * FROM einstellungen WHERE kennung = " + q("setup") + " ORDER BY id")
While NextDatabaseRow(DBAC(#DB_CORE))
Select LCase(Trim(GetDatabaseString(DBAC(#DB_CORE),2)))
Case "firma"
mfirma$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "strasse"
mstras$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "plz"
mpostl$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "ort"
mregio$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "steuernummer"
msteuer.s = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "usidnr"
mumstr$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "hre"
mhandl$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "vorname"
mvornm$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "nachname"
mnachn$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
EndSelect
Wend
; ***
FinishDatabaseQuery(DBAC(#DB_CORE))
EndIf
EndIf
; ***
If IsDatabase(DBAC(#DB_CORE))
If DatabaseQuery(DBAC(#DB_CORE), "SELECT * FROM einstellungen WHERE kennung = " + q("kontakt") + " ORDER BY id")
While NextDatabaseRow(DBAC(#DB_CORE))
Select LCase(Trim(GetDatabaseString(DBAC(#DB_CORE),2)))
Case "telefon1"
mtelef$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "fax1"
mtefax$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "mobil"
mmobil$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "email"
memail$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
Case "webseite"
mwebsi$ = Trim(GetDatabaseString(DBAC(#DB_CORE),3))
EndSelect
Wend
; ***
FinishDatabaseQuery(DBAC(#DB_CORE))
EndIf
EndIf
; ***
dbDO( #db_quit, #DB_CORE )
; ***
dbDO( #db_open, #DB_BELE )
; ***
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
; Druckauftrag vorbereiten (Bon erstellen)
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
bonjob = "C:\temp\bonjob.bin"
; ***
If FileSize( bonjob ) > 0
DeleteFile( bonjob )
EndIf
; ***
bonid = CreateFile( #PB_Any, bonjob )
; ***
If bonid
bon_datei( bonid, zeichensatz )
; ***
For m = 0 To martop
bon_datei( bonid, " " )
Next
; ***
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_verdana, beltyp, #schrift_zentriert ) )
bon_datei( bonid, "" )
bon_datei( bonid, bon_text( #schrift_gross, #schrift_impact, titel, #schrift_zentriert ) )
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, mfirma$, #schrift_zentriert ) )
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, mstras$, #schrift_zentriert ) )
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, mpostl$ + " " + mregio$, #schrift_zentriert ) )
bon_datei( bonid, "" )
; ***
If Trim(mtelef$)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, "Tel: " + Trim(mtelef$), #schrift_zentriert ) )
EndIf
; ***
If Trim(memail$)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, "E-Mail: " + Trim(memail$), #schrift_zentriert ) )
EndIf
; ***
If Trim(msteuer)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, "St.-Nr.: " + Trim(msteuer), #schrift_zentriert ) )
EndIf
; ***
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, "Kundennummer: " + knu ) )
; ***
If firma1$
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, firma1$ ) )
; ***
If firma2$
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, firma2$ ) )
EndIf
; ***
If firma3$
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, firma3$ ) )
EndIf
ElseIf kfname$
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, kfname$ + " " + ksname$ ) )
Else
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, "Ladenkunde" ) )
EndIf
; ***
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, "Beleg Nr.: " + belegnr ) )
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial, "Datum: " + FormatDate( "%dd.%mm.%yyyy", Date() ) + " " + FormatDate( "%hh:%ii:%ss", Date() ) ) )
; ***
bon_datei( bonid, trennstrich )
; ***
dbDO( #db_open, #DB_BELE )
; ***
If IsDatabase(DBAC(#DB_BELE))
If DatabaseQuery(DBAC(#DB_BELE), "SELECT * FROM beleg WHERE belegnr = " + q(belegnr) + " ORDER BY id")
While NextDatabaseRow(DBAC(#DB_BELE))
bon_pos + 1
; ***
bon_datei( bonid, bon_tab_text( #schrift_mitte, #schrift_arial,
Trim(GetDatabaseString(DBAC(#DB_BELE),6)),
bon_abstand(bon_pos), Trim(GetDatabaseString(DBAC(#DB_BELE),4)) ) )
; ***
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_arial,
Trim(GetDatabaseString(DBAC(#DB_BELE),3)) + " " +
Trim(GetDatabaseString(DBAC(#DB_BELE),5)) + " " +
Trim(GetDatabaseString(DBAC(#DB_BELE),8)) ) )
Wend
; ***
FinishDatabaseQuery(DBAC(#DB_BELE))
EndIf
EndIf
; ***
dbDO( #db_quit, #DB_BELE )
; ***
bon_datei( bonid, " " )
bon_datei( bonid, bon_opp_text( #schrift_mitte, #schrift_arial, "Gesamtbetrag:", ReplaceString(StrD(brutto,2),".",",") + " EUR" ) )
bon_datei( bonid, trennstrich )
; ***
bon_datei( bonid, bon_opp_text( #schrift_mitte, #schrift_arial, "/" + ReplaceString(StrD(brutto,2),".",",") + " " + zahlungsart, ReplaceString(StrD(zahlbetrag,2),".",",") + " EUR" ) )
bon_datei( bonid, bon_opp_text( #schrift_mitte, #schrift_arial, "zurück/Rest", ReplaceString(StrD(zahlbetrag - brutto,2),".",",") + " EUR" ) )
bon_datei( bonid, bon_opp_text( #schrift_mitte, #schrift_arial, "Betrag Netto", ReplaceString(StrD(netto,2),".",",") + " EUR " ) )
bon_datei( bonid, bon_opp_text( #schrift_mitte, #schrift_arial, "19% MwSt enthalten", ReplaceString(StrD(mwst,2),".",",") + " EUR " ) )
; ***
bon_datei( bonid, " " )
; ***
If Trim(text1)
bon_datei( bonid, bon_text( #schrift_gross, #schrift_courier_new, Trim(text1), #schrift_zentriert ) )
EndIf
; ***
If Trim(text2)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, Trim(text2), #schrift_zentriert ) )
EndIf
; ***
If Trim(text3)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, Trim(text3), #schrift_zentriert ) )
EndIf
; ***
If Trim(text4)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, Trim(text4), #schrift_zentriert ) )
EndIf
; ***
If Trim(text5)
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, Trim(text5), #schrift_zentriert ) )
EndIf
; ***
For m = 0 To marbot
bon_datei( bonid, " " )
Next
; ***
CloseFile(bonid)
EndIf
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
; Druckauftrag an den Drucker senden
; ------------------------------------------------------------------------------------------------ ;
; ------------------------------------------------------------------------------------------------ ;
RunProgram( myPath + "thdpartymo\DOSPrinter.exe", drucker + bonjob, "" )
EndProcedure
Re: bondrucker epson tm-t88v
Ich hab deinen Code nur kurz überflogen, aber schreibst du tatsächlich "ESC" als String in die Datei?
Du musst das ESC Zeichen Chr(27) schreiben.
Du musst das ESC Zeichen Chr(27) schreiben.
Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Re: bondrucker epson tm-t88v
nein, ESC wird konvertiert
Re: bondrucker epson tm-t88v
Dann erstell doch am besten eine kleine Beispieldruckdatei, dann kann ich dir sagen, ob die in Ordnung ist.
Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Re: bondrucker epson tm-t88v
abgespeckt und überarbeitet. scheint jetzt zu laufen, aber die schriftgröße etc kann ich nicht setzen.
Code: Alles auswählen
Enumeration
#schrift_klein
#schrift_mitte
#schrift_gross
; ***
#schrift_kursiv_1
#schrift_kursiv_2
; ***
#schrift_fett_1
#schrift_fett_2
; ***
#schrift_courier_new
#schrift_lucida_console
#schrift_arial
#schrift_impact
#schrift_verdana
#schrift_tahoma
EndEnumeration
Global bon_bandbreite.w = 44 * 6
Global cpi10.w = 13, cpi12.w = 16, cpi15.w = 21
Procedure.s bon_text( schriftg.a, schriftt.a, textstrom.s )
Dim schrift.s(13)
; Schriftgrößen
schrift(0) = Chr(27) + Chr(80) ; P 10 cpi
schrift(1) = Chr(27) + Chr(77) ; M 12 cpi
schrift(2) = Chr(27) + Chr(103); g 15 cpi
schrift(3) = Chr(27) + Chr(4) ; 4 Kursiv -> Select
schrift(4) = Chr(27) + Chr(5) ; 5 Kursiv -> Cancel
schrift(5) = Chr(27) + Chr(69) ; E Fett -> Select
schrift(6) = Chr(27) + Chr(70) ; F Fett -> Cancel
; Schriftarten
schrift(7) = Chr(27) + Chr(107) + Chr(0) ; k Courier New
schrift(8) = Chr(27) + Chr(107) + Chr(1) ; k Lucida Console
schrift(9) = Chr(27) + Chr(107) + Chr(5) ; k Arial
schrift(10) = Chr(27) + Chr(107) + Chr(6) ; k Impact
schrift(11) = Chr(27) + Chr(107) + Chr(15); k Verdana
schrift(12) = Chr(27) + Chr(107) + Chr(16); k Tahoma
Define t.s = "", text.s = textstrom
t + schrift(schriftg) + #CRLF$ +
schrift(schriftt) + #CRLF$ +
text
ProcedureReturn t
EndProcedure
Procedure bon_datei( dateiNummer.l, strom.s )
WriteStringN( dateiNummer, strom, #PB_Ascii )
EndProcedure
Procedure drucken_bon()
Define bonjob.s = ""
; Werden unter bon_datei() konvertiert
Define zeichensatz.s = Chr(27) + Chr(82) + Chr(2) ; "ESC R 2" ; Deutsch
Define trennstrich.s = Chr(27) + Chr(33) + Chr(4) ; "ESC ! 4" ; 0 Pica, 1 Elite, 4 Condensed, 8 Emphasized, 16 Double Strike, 128 Underline
bonjob = "C:\temp\bonjob.bin"
; ***
If FileSize( bonjob ) > 0
DeleteFile( bonjob )
EndIf
; ***
bonid = CreateFile( #PB_Any, bonjob )
; ***
If bonid
bon_datei( bonid, zeichensatz )
; ***
bon_datei( bonid, bon_text( #schrift_mitte, #schrift_verdana, "1000" ) )
; ***
bon_datei( bonid, trennstrich )
; ***
bon_datei( bonid, "" )
bon_datei( bonid, bon_text( #schrift_gross, #schrift_impact, "HALLO BON" ) )
bon_datei( bonid, bon_text( #schrift_klein, #schrift_courier_new, "Funkt jetzt?" ) )
; ***
CloseFile(bonid)
EndIf
EndProcedure
drucken_bon()
Re: bondrucker epson tm-t88v
Hi,
ich würde den Epson ja lieber direkt ansteuern, ohne so eine "Krücke" wie das dosprint.exe. Wenn der per USB angeschlossen ist, könntest Du den VirtualCom-Port-Treiber von Epson benutzen, und aus dem USB eine virtuelle RS232 machen. Alternativ hat der TM88V ja meist eh noch eine zweite Schnittstelle drin, falls das eine RS232 oder Ethernet ist, könnte man die auch von Purebasic wunderbar direkt ansteuern.
Dann baust Du dir den gesamten Bon binär mit Poke's in einem reservierten Speicherbereich zusammen und schicktst den Speicherblock anschließend an die passende Schnittstelle. Das ganze hätte den Vorteil, daß Du auch noch direkt Statusabfragen mit einbauen kannst (Bonrolle vorhanden und nicht am Ende etc.), bzw. Du es auch merkst, falls der Drucker keine Daten mehr verarbeiten kann (bei RS232 per RTS/CTS oder DSR/DTR Handshake, bzw. bei Ethernet nimmt er dann keine Pakete mehr an).
Gruß, Hoerbie
ich würde den Epson ja lieber direkt ansteuern, ohne so eine "Krücke" wie das dosprint.exe. Wenn der per USB angeschlossen ist, könntest Du den VirtualCom-Port-Treiber von Epson benutzen, und aus dem USB eine virtuelle RS232 machen. Alternativ hat der TM88V ja meist eh noch eine zweite Schnittstelle drin, falls das eine RS232 oder Ethernet ist, könnte man die auch von Purebasic wunderbar direkt ansteuern.
Dann baust Du dir den gesamten Bon binär mit Poke's in einem reservierten Speicherbereich zusammen und schicktst den Speicherblock anschließend an die passende Schnittstelle. Das ganze hätte den Vorteil, daß Du auch noch direkt Statusabfragen mit einbauen kannst (Bonrolle vorhanden und nicht am Ende etc.), bzw. Du es auch merkst, falls der Drucker keine Daten mehr verarbeiten kann (bei RS232 per RTS/CTS oder DSR/DTR Handshake, bzw. bei Ethernet nimmt er dann keine Pakete mehr an).
Gruß, Hoerbie