[ 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
[ Zidar @ 04.10.2005. 13:39 ] @
Hvala Zelki na odlicnom postu. ceo teks posta sam prebacio u Bazu znanja.