bondrucker epson tm-t88v

Für allgemeine Fragen zur Programmierung mit PureBasic.
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

bondrucker epson tm-t88v

Beitrag von 5mware »

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
Benutzeravatar
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

Beitrag von ts-soft »

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
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.
Bild
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: bondrucker epson tm-t88v

Beitrag von NeoChris »

Gross und Kleinschreibung wäre auch nicht schlecht! Es liest sich besser. :)
Benutzeravatar
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

Beitrag von NicTheQuick »

Hast du den Beispieldateien, die man dosprint.exe übergeben kann?
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

Re: bondrucker epson tm-t88v

Beitrag von 5mware »

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

Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: bondrucker epson tm-t88v

Beitrag von mhs »

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.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

Re: bondrucker epson tm-t88v

Beitrag von 5mware »

nein, ESC wird konvertiert
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: bondrucker epson tm-t88v

Beitrag von mhs »

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
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

Re: bondrucker epson tm-t88v

Beitrag von 5mware »

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()
hoerbie
Beiträge: 37
Registriert: 06.12.2013 13:53

Re: bondrucker epson tm-t88v

Beitrag von hoerbie »

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
Antworten