[ raspudic @ 04.10.2005. 13:29 ] @
Svima nama koji se bavimo programiranjem je jasno da dolaskom Windows orjentisanih programa dolazi do "tihe" sahrane matričnih štampača. Kome ipak nije jasno neka oštampa neki izvještaj iz, recimo, Access-a i poredi brzinu štampanja izvještaja slične dužine iz nekog DOS programa (recimo Clipper-a). Posto su matrični štampači jako rasprostranjeni u poslovima vezanim za knjigovodstvo nije tek tako preći na lasere. Problem pogotovo dolazi do izražaja kod referata koji zbog obimnosti podataka moraju da koriste A3 papir (recimo neke liste u Osnovnim sredstvima). Tu nije lako preći na A3 laser koji je i dalje dosta skup a takođe i toneri za njega. Zbog toga sam prešao na "DOS" stampanje iz Access-a ali sam naišao na problem kod prelaska na novu stranicu (Form Feed). Koristeći zvaničnu ESC sekvencu za prelaz na novu stranu tj. Chr(12) nalazio sam na problem da zavisno od situacije nekada nedostaje jedan do dva reda a nekada doda red više. Kao posljedica toga je pogrešno štampanje višestraničnih dokumenata i pogrešan rad Tear Off-a (izvuče stranicu više). Printer je hardverski dobro podesen jer njegovo dugme Form Feed i Tear Off rade normalno. Koristim "beskonačni" papir i probao sam na LQ-1170 i LX 300 sa identicnim rezultatima Logiku greške nisam uspio da dokučim. Poslije dosta muke napustio sam Chr(12) i problem riješio na sljedeći način: Otvori se željeni recordset pa onda sljedi Public inicijal as String Public red As Integer Public Ima_zag As Boolean Public i As Integer ' za For Next ' 12" dužina strane, normalno rastojanje redova i normalni font ' moglo bi i bez ovog reda ako je štampač hardverski dobro podešen ali ' je ovako sigurnije inicijal = Chr(27) + "C" + Chr(0) + Chr(12) + Chr(27) + Chr(1) + Chr(27) + "P" Open "lpt1:" For Output As #1 red = 1 Print #1, inicijal NoviRed ' pogledati šta radi ova funkcija Print #1, "Ime firme, naslovi itd" NoviRed ZagInv Ima_zag = True rst.MoveFirst Do While Not rst.EOF NoviRed Print #1, "štampati potrebne kolone iz otvorenog recordset-a" rst.MoveNext Loop Ima_zag = False NoviRed Print #1, ' ovo je prazan red ali i njega treba prebrojati NoviRed Print #1, "tekst koji ide ispod do loop petlje" For i = 1 To 72 - red ' ovo glumi FF pošto Chr(12) FF dodaje bez veze red Print #1, ' prazni redovi , ovako treba a ne Chr(10) + Chr(13) Next Close #1 Private Sub ZagInv() ' primjer zaglavlja Print #1, "---------------------------------------------------------------------------------------" red = red + 1 Print #1, "Inv.broj Naziv osnovnog sredstva Količina" red = red + 1 Print #1, "----------------------------------------------------------------------------------------" End Sub Private Sub NoviRed() If red = 66 For i = 1 To 72 - red ' ovo glumi FF pošto Chr(12) FF dodaje bez veze red Print #1, ' novi red Next red = 2 ' ZAŠTO 2 A NE 1, PITANJE JE SAD??? ALI OVAKO RADI! If Ima_zag Then ' zaglavlje se dodaje ne na svakom 66 redu već samo ' gdje treba (može postojati duži ili kraći tekst ispod ' do loop petlje i tu ne treba zaglavlje. ZagInv Else red = 1 ' treba za redove ispod Do Loop petlje End If Else red = red + 1 End If End Sub Važi i za A4 i A3 a i Form Feed radi baš kako treba. Pozdrav Željko |