Page 1 of 1

Actionarea unei case de marcat de la mai multe statii

Posted: 22 Oct 2015, 18:18
by tibor.kiss
Tema: Actionarea unei case de marcat de la doua (sau mai multe) statii.
Mediu: LINUX-WP
Statia cu legatura fizica la casa de marcat: STATION=00
Statia secundara: STATION=01

Exemplul trateaza problema in cazul unei case da marcat cu driver DATPRINT, dar principiul poate fi folosit si la alte drivere. Presupunem driverul instalat pe statia 00, in C:\DATPRINT, folder in care se depune si imaginea bonului.

Logica functionarii
Validarea TBON se modifica, permitand validarea de la ambele statii:

Code: Select all

    #DACA ! (GETENV("STATION")=="00" .OR. GETENV("STATION")=="01") .and. !(xF_Jrn="MVR")
        # h_MesErr("Aici nu se poate valida !",0)
        #ABANDON
Validarea depune imaginea bonului (fisierul CASHFILE.INP) in folderul temporar al statiei in cauza (U:\RW\TMP):

Code: Select all

        # h_MEMOWRIT(h_AddPath("CASHFILE.INP",h_FilePathes[fil_tmp]),xF_8)
Validarea construieste fisierul ECR.CMD si-l depune in folderul de spooler al statiei (S:\RW\SPOOL):

Code: Select all

        # h_MEMOWRIT(h_AddPath("ECR.CMD", h_FilePathes[fil_scat]), "[RUN]"+CHR(13)+CHR(10)+ "MODE=/MAX"+CHR(13)+CHR(10)+ "DIRECTORY=C:\HSTART"+CHR(13)+CHR(10)+ "EXE=PRNBON.BAT"+CHR(13)+CHR(10)+ "PARAMETERS="+CHR(13)+CHR(10))
Spoolerul hWTools interpreteaza aceasta comanda si lanseaza fisierul PRNBON.BAT din C:\HSTART al statiei. Fisierul PRNBON.BAT este diferit pe cele doua statii.

Continutul fisierului C:\HSTART\PRNBON.BAT pe statia 00:

Code: Select all

        echo off
        copy u:\rw\tmp\cashfile.inp c:\datprint\cashfil0.inp > nul
        del u:\rw\tmp\cashfile.inp > nul
        cd c:\datprint > nul
        datprint.exe 4800 COM1 cashfil0.inp
Deci pe statia 00 este o procedura standard, cu o mica modificare: fisierul depus pentru datprint se numeste cashfil0.inp, pentru a evita suprascrierea lui cu un fisier venit in acelasi moment de la statia 01.

Continutul fisierului C:\HSTART\PRNBON.BAT pe statia 01:

Code: Select all

        echo off
        copy u:\rw\tmp\cashfile.inp s:\rw\ecr\bon\ > nul
        del u:\rw\tmp\cashfile.inp > nul
        copy ecrstart.cmd s:\rw\ecr\ >nul
Pentru statia 01 situatia este mai complicata, deoarece trebuie sa lanseze un executabil (datprint.exe) pe statia 00. Conform batchului de mai sus imaginea bonului se copiaza pe S: (vazut si de statia 00), si pentru lansarea executabilului se mai copiaza un fisier (ecrstart.cmd) pe S:. Acest fisier se gaseste in C:\HSTART al statiei 01, si arata astfel:

Continutul fisierului C:\HSTART\ECRSTART.CMD pe statia 01:

Code: Select all

        [RUN]
        MODE=/MAX
        DIRECTORY=C:\HSTART
        EXE=PRNBON1.BAT
        PARAMETERS=
Dupa cum se vede, este un fisier de comanda pentru hWTools, si care acum a ajuns in S:\RW\ECR. Cum va afla hWTools de pe statia 00 ca are de executat un fisier de comanda? Simplu: hWTools de pe statia 00 se lanseaza cu optiunea "multispooler", astfel:

Code: Select all

         start hwtools.exe @hwtools.scr /S /P:HIGH
unde fisierul hwtools.scr, aflat in C:\HSTART contine dou randuri:

Code: Select all

         U:\RW\SPOOL\*.*
         S:\RW\ECR\*.CMD
(Observatie: fisierul START.BAT, din care se lanseaza hWTools in mod standard, se suprascrie la fiecare lansare a hSTART.EXE. Pentru corectia liniei de comanda a lansarii hWTools, trebuie editat un script din hSTART\START.)

Deci pe statia 00 se lanseaza din C:\HSTART batchul prnbon1.bat. Continutul lui este:

Code: Select all

        echo off
        copy s:\rw\ecr\bon\cashfile.inp c:\datprint\cashfil1.inp > nul
        del s:\rw\ecr\bon\cashfile.inp > nul
        cd c:\datprint > nul
        datprint.exe 4800 COM1 cashfil1.inp
Si astfel se emite bonul fiscal pe statia 00, bon fiscal validat de statia 01.

In implementarea acestei solutii am primit ajutor de la colegii Tókos Lajos, Illyés Mózes, Sántha Lóránt si Zsigmond László, carora le multumesc si pe aceasta cale.