Configuram aplicatia astfel:
- in nomenclatorul Case de marcat, mergem la casa stabilita
pentru statia pe care lucram ( o gasim la: Configurari / Casa de marcat /
Casa de marcat)
- alegem valoarea "casamarc.prg" la optiunea:
Tip casa
In directorul de baza al aplicatiei (unde se afla w5.exe sau verificati scurtatura de lansare) trebuie copiem fisierul "casamarc.prg" primit de la furnizor sau facut prin mijloace proprii
Casamarc.prg este un program cu sintaxa VisualFoxPro.
Poate fi creat sau
modificat cu Notepad
Primeste valori de la aplicatia principala prin intermediul urmatoriilor parametrii:
-
p_text -
text continand codul fiscal al clientului ce
trebuie sa apara pe bonul fiscal
- p_bondisco - % de rabat global
- p_cash,p_cec,p_card,p_tichet -valoarea
inacasata pe categorii : cash, cec, card, tichet
si prin intermediul unui fisier de tip DBF avand aliasul
casamarc
care contine articolele ce vor apare pe bon
Campurile sunt urmatoarele:
cant
- cantitatea
pret_mag - pretul de vanzare cu TVA
den_m - denumriea articolului
cota_tva -
procentul cotei de TVA:24,9,5,0
"casamarc.prg" trebuie sa returneze un text de eroare in cazul in care la validare sau in timpul executiei apar erori , sau nimic (nu null) in cazul in care nu sunt probleme
Un exemplu de fisier casmarc :
PARAMETERS
p_text,p_bondisco,p_cash,p_cec,p_card,p_tichetxfis='C:\temp\cashfile.bon'
&& bonul ce va fi generatmultipl=100
&& multiplu necesar denominare
IF p_card<>0
&& cod 3=card
xsir=[#E3]+ALLTRIM(STR(p_card
,10,2))+crlf &&
STRTOFILE(xsir,xfis,.T.)
endi
IF p_tichet<>0
&& cod 4=tichet
xsir=[#E4]+ALLTRIM(STR(p_tichet,10,2))+crlf
&&
STRTOFILE(xsir,xfis,.T.)
endi
IF p_cash<>0
&&
xsir=[#E1]+ALLTRIM(STR(p_cash
,10,2))+crlf && PLATA
cu numerar 0 ; suma o las necompletata =toata
STRTOFILE(xsir,xfis,.T.)
ENDIF
IF p_cec<>0
&&
xsir=[#E2]+ALLTRIM(STR(p_cec
,10,2))+crlf && PLATA
cu cec 0 ; suma o las necompletata =toata
STRTOFILE(xsir,xfis,.T.)
ENDIF
info=':www.wmicro.ro'
STRTOFILE(SUBSTR(info,1,16)+crlf
,xfis,.T.)
nume = dmy(date())+str(hour(datetime()))+"-"+alltrim(str(minute(datetime())))+'-'+alltrim(str(sec(datetime())))+'.bon'
copy file &xfis
to
'C:\temp\copie\' + nume
*MODIFY comm (nume)
&& pentru testare
*RETURN ''
&&
pentru testare
&& verificare de inchidere -------------------------------
n=1
DO whil FILE(xfis)
n=n+1
WAIT WINDOW
'Se tipareste bonul...'+alltrim(str(n,10))
TIMEOUT
1
if
n=5
exit
endif
enddo
if !FILE(xrep)
lcExeName = "ECRPrinterDriver.exe"
IF
IsExeRunning(lcExeName)=.T.
copy file
&xfis
to
'C:\temp\copie\nelistate\' + nume
text
= nume + " ----- nelistat Eroare de conexiune"
STRTOFILE(SUBSTR(text,1)+crlf
,xlog,.T.)
WAIT
"Eroare de conexiune. Bonul nu se poate tipari!"
window TIMEOUT
3
ELSE
copy file &xfis
to
'C:\temp\copie\nelistate\' + nume
text
= nume + " ----- nelistat Driverul este oprit"
STRTOFILE(SUBSTR(text,1)+crlf
,xlog,.T.)
WAIT
"Driverul este oprit. Bonul nu se poate tipari!"
window TIMEOUT
3
RETURN
'eroare driver'
ENDIF
endif
if file(xrep)
text
= nume + " ----- listat"
STRTOFILE(SUBSTR(text,1)+crlf
,xlog,.T.)
WAIT
" Bonul a fost tiparit!"
window TIMEOUT
1
*DELETE FILE (xrep)
RETURN
''
&& e ok
endif
FUNCTION IsExeRunning(tcName,
tlTerminate)
LOCAL loLocator, loWMI, loProcesses,
loProcess, llIsRunning
loLocator =
CREATEOBJECT('WBEMScripting.SWBEMLocator')
loWMI = loLocator.ConnectServer()
loWMI.Security_.ImpersonationLevel = 3
&& Impersonate
loProcesses = loWMI.ExecQuery([SELECT * FROM Win32_Process WHERE Name = '] +
tcName + ['])
llIsRunning = .F.
IF loProcesses.Count
> 0
FOR EACH
loProcess
in
loProcesses
llIsRunning = .T.
IF
tlTerminate
loProcess.Terminate(0)
ENDIF
ENDFOR
ENDIF
RETURN llIsRunning