Seite 1 von 2

bondrucker epson tm-t88v

Verfasst: 14.12.2015 15:24
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

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 15:39
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

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 15:53
von NeoChris
Gross und Kleinschreibung wäre auch nicht schlecht! Es liest sich besser. :)

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 15:58
von NicTheQuick
Hast du den Beispieldateien, die man dosprint.exe übergeben kann?

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 16:26
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


Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 17:27
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.

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 18:01
von 5mware
nein, ESC wird konvertiert

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 18:06
von mhs
Dann erstell doch am besten eine kleine Beispieldruckdatei, dann kann ich dir sagen, ob die in Ordnung ist.

Re: bondrucker epson tm-t88v

Verfasst: 14.12.2015 18:45
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()

Re: bondrucker epson tm-t88v

Verfasst: 15.12.2015 11:29
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