Programul personalizat de comunicatie cu Casa "casamarc.prg"

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

Detaliile ajutatoare pentru crearea fisierului  "casamarc.prg"

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_tichet
* ELTRADE
ON ERROR
try
    mkdir
'c:\temp\copie\'
catch
ENDTRY
try
    mkdir
'c:\temp\copie\nelistate'
catch
ENDTRY

xfis='C:\temp\cashfile.bon' && bonul ce va fi generat
xlog='C:\temp\copie\log.txt' && logul de erori al bonului
IF FILE(xfis)
    DELETE FILE (xfis)
ENDIF
xrep='C:\temp\cashfile.rep'
IF FILE(xrep)
    DELETE FILE (xrep)
ENDIF

multipl=100 && multiplu necesar denominare
nrz=2 && zecimale rotunjire
*********************** de aici pina la penultimul rind nu se modifica
m.total=0
crlf=
CHR(13)+CHR(10)
*casamarcat.p_rabat=0
xcrt=1
sele casamarc
GO top
SCAN
    cota_casa=icase(cota_tva=24,0,cota_tva=9,1,cota_tva=5,2,cota_tva=0,4 ,0)
   
*xplu=SUBSTR(ALLTRIM(plu), 1, 9) && limitez codul la o dimensiune de 14 caractere, daca e ma lung bonul nu se emite
   
xplu=STR(Xcrt,10) && daca in loc de PLU pun crtul
   
XSIR=[%]+ALLTRIM(xplu)+[^]+SUBSTR(ALLTRIM([ ]+casamarc.den_m),1,22)
    XSIR=XSIR+[^]+
ALLTRIM(STR(casamarc.pret_mag*multipl,9,0))+[^]
    XSIR=XSIR+
ALLTRIM(STR(casamarc.cant*1000,9,0))
    XSIR=XSIR+[^]+
str(m.cota_casa,1)+[^]+crlf && depart;grupa
   
xcrt=xcrt+1
   
STRTOFILE(xsir,xfis,.T.)
   
*IF casamarc.p_rabat<>0 && are rabat
    * XSIR=[#P-]+ALLTRIM(STR(casamarc.p_rabat*multipl,5,0))+crlf
    * xcrt=xcrt+1
    * STRTOFILE(xsir,xfis,.T.)
    *endi
endscan
 

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