* probe_s12_sucursala.prg * Masoara starea de sesiune Oracle care intra in predicatul de stoc al lui * pack_facturare.descarca_gestiune (PACK_FACTURARE BODY:7329-7341): nid_sucursala, nan, nluna. * O variabila de pachet PL/SQL traieste per sesiune, deci se citeste pe ACELASI gnHandle pe care * ruleaza fluxul, printr-un bloc anonim care intoarce valorile in textul unui * raise_application_error (fara DML, fara DDL). * * tnIdV - documentul reemis (631 sau 580) * tnForceAn - perioada activa fortata (ca in test_s9_8_flux: 2014 1) * tnForceLuna * tnSuc - daca <> 0, forteaza gnIdSucursala inainte de do_scrie_factura (experimentul * decisiv: daca FACT-008 dispare, esecul era artefact de harness). ATENTIE: pe * valoarea corecta fluxul SCRIE in Oracle. LPARAMETERS tnIdV, tnForceAn, tnForceLuna, tnSuc SET SAFETY OFF SET TALK OFF PUBLIC gcErrLog, gnPass, gnFail PUBLIC poDate, poSnapshotEditare IF VARTYPE(tnIdV) = 'C' tnIdV = VAL(tnIdV) ENDIF IF EMPTY(tnIdV) tnIdV = 631 ENDIF IF VARTYPE(tnSuc) = 'C' tnSuc = VAL(tnSuc) ENDIF IF EMPTY(tnSuc) tnSuc = 0 ENDIF gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_sucursala_log_' + ; STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt' STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc=' + TRANSFORM(tnIdV) + ; ' suc_fortata=' + TRANSFORM(tnSuc) + CHR(13) + CHR(10), gcErrLog) ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', VAL(TRANSFORM(tnForceAn)), VAL(TRANSFORM(tnForceLuna)) IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDIF gnIdUtil = 8 SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE LOCAL lcProcExistent lcProcExistent = SET("PROCEDURE") SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent LOCAL lcPathVechi, lcPathNou lcPathVechi = SET("PATH") lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi SET PATH TO &lcPathNou PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip gnMockRaspuns = 7 gcMockUltimMesaj = '' gnMockUltimTip = 0 gnPass = 0 gnFail = 0 DO Masoara WITH tnIdV, tnSuc STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1) QUIT *============================================================================================== PROCEDURE Masoara LPARAMETERS tnIdV, tnSuc LOCAL loForm, lnDiscRon, lnDiscVal, lnRuta, llRez, lnIdVMaxInainte, lnNr, lnIdVNou STRTOFILE('--- STAREA VFP DUPA INIT ---' + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE(' gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE(' gnIdFirma = ' + TRANSFORM(gnIdFirma) + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE(' gnIdSucursala: tip=' + VARTYPE(gnIdSucursala) + ' isnull=' + TRANSFORM(ISNULL(gnIdSucursala)) + ; ' valoare=' + TRANSFORM(NVL(gnIdSucursala, -777)) + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE(' gcCondSucursala = <' + TRANSFORM(gcCondSucursala) + '>' + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE(' goFirma.id_firma = ' + TRANSFORM(NVL(goFirma.Id_Firma, -777)) + ; ' goFirma.id_mama = ' + TRANSFORM(NVL(goFirma.id_mama, -777)) + ; ' goFirma.firma = ' + TRANSFORM(NVL(goFirma.firma, '')) + CHR(13) + CHR(10), gcErrLog, 1) *!* ce intoarce interogarea de firma din harness, in ordinea reala a randurilor IF USED('c_fsuc') USE IN c_fsuc ENDIF IF goExecutor.oExecuta("select id_firma, firma, id_mama from syn_v_nom_firme where schema = ?gcS", 'c_fsuc') STRTOFILE('--- syn_v_nom_firme pentru schema (ordinea reala) ---' + CHR(13) + CHR(10), gcErrLog, 1) SELECT c_fsuc SCAN STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': id_firma=' + TRANSFORM(id_firma) + ; ' id_mama=' + TRANSFORM(NVL(id_mama, -777)) + ' firma=' + ALLTRIM(NVL(firma, '')) + CHR(13) + CHR(10), gcErrLog, 1) ENDSCAN USE IN c_fsuc ENDIF *!* id_sucursala al documentului tintit STRTOFILE(' VANZARI.id_sucursala doc ' + TRANSFORM(tnIdV) + ' = ' + ; TRANSFORM(Val1("select nvl(id_sucursala,-777) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV))) + ; CHR(13) + CHR(10), gcErrLog, 1) DO CitestePachet WITH 'INAINTE de flux' IF tnSuc <> 0 gnIdSucursala = tnSuc STRTOFILE('*** gnIdSucursala FORTAT la ' + TRANSFORM(gnIdSucursala) + CHR(13) + CHR(10), gcErrLog, 1) ENDIF lnIdVMaxInainte = Val1("select nvl(max(id_vanzare),0) as v from vanzari") lnDiscRon = 0 lnDiscVal = 0 poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal) IF VARTYPE(poDate) <> 'O' STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1) RETURN ENDIF STRTOFILE(' poDate.dataireg = ' + TRANSFORM(poDate.dataireg) + ; ' poDate.dataact = ' + TRANSFORM(poDate.dataact) + ; ' poDate.tip = ' + TRANSFORM(poDate.Tip) + CHR(13) + CHR(10), gcErrLog, 1) IncarcaLiniiFacturaEditare(poDate, tnIdV) IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0 STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1) RETURN ENDIF update_jtva_coloane("JV", "jtva_coloane_temp") update_saft_taxtable() IF USED('jtva_coloane') USE IN jtva_coloane ENDIF IF poDate.tva_incasare = 0 SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane ELSE SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane ENDIF loForm = CREATEOBJECT('frm_facturare_articole2') loForm.ndiscfactron = lnDiscRon loForm.ndiscfactval = lnDiscVal loForm.do_calculeaza_totaluri() poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ; tnIdV, Val1("select nvl(id_fact,0) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV)), ; Val1("select nvl(cod,0) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV)), gnAn, gnLuna) IF VARTYPE(poSnapshotEditare) <> 'O' STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1) RETURN ENDIF SELECT crsfactura GO TOP REPLACE cantitate WITH cantitate + 1 IN crsfactura loForm.do_calculeaza_totaluri() lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura') STRTOFILE(' ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1) llRez = loForm.do_scrie_factura() STRTOFILE(' do_scrie_factura() = ' + TRANSFORM(llRez) + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE(' ultimul mesaj prin mock: <' + gcMockUltimMesaj + '>' + CHR(13) + CHR(10), gcErrLog, 1) DO CitestePachet WITH 'DUPA do_scrie_factura' lnNr = Val1("select count(*) as v from vanzari where sters = 0 and id_vanzare > " + TRANSFORM(lnIdVMaxInainte)) lnIdVNou = Val1("select nvl(max(id_vanzare),0) as v from vanzari where sters = 0 and id_vanzare > " + TRANSFORM(lnIdVMaxInainte)) STRTOFILE(' documente noi nesterse dupa apel = ' + TRANSFORM(lnNr) + ' id_vanzare nou = ' + TRANSFORM(lnIdVNou) + CHR(13) + CHR(10), gcErrLog, 1) DO ReplayPredicat WITH tnIdV RELEASE loForm ENDPROC *============================================================================================== * ReplayPredicat: rejoaca ramura ELSE "din STOC" a lui descarca_gestiune (BODY:7328-7345) in * ACEEASI sesiune, cu valorile reale trimise pentru prima linie a documentului, de doua ori: * (a) cu pack_facturare.nid_sucursala asa cum e in sesiune, (b) cu 167 pus literal in locul ei. * Singura diferenta intre cele doua rulari e sucursala. Doar SELECT, in bloc PL/SQL (variabilele * de pachet nu se pot referi din SQL pur); rezultatul vine in textul unei erori. *============================================================================================== PROCEDURE ReplayPredicat LPARAMETERS tnIdV LOCAL lcArt, lcGest, lcPret, lcPretd, lcValutad, lcPretv, lcCante, lcUnde DO CASE CASE tnIdV = 631 lcArt = '315554536' lcGest = '19' lcPret = '100' lcPretd = '0' lcValutad = '0' lcPretv = '200' lcCante = '4' CASE tnIdV = 580 lcArt = '315554536' lcGest = '4' lcPret = '100' lcPretd = '0' lcValutad = '3' lcPretv = '120.97' lcCante = '2' OTHERWISE STRTOFILE(' ReplayPredicat: document necunoscut, sarit' + CHR(13) + CHR(10), gcErrLog, 1) RETURN ENDCASE lcUnde = " from stoc a where " + lcCante + " <> 0 and nvl(a.id_sucursala,-99) = @SUC@" + ; " and a.id_articol = " + lcArt + ; " and a.id_gestiune = " + lcGest + ; " and nvl(a.cont,'XXXX') = '371'" + ; " and a.pret = " + lcPret + ; " and a.pretd = " + lcPretd + ; " and nvl(a.id_valuta,0) = decode(" + lcValutad + ", -99, 0, nvl(" + lcValutad + ",0))" + ; " and a.pretv = " + lcPretv + ; " and nvl(a.serie,'+_') = nvl(null,'+_')" + ; " and a.luna = pack_facturare.nluna and a.an = pack_facturare.nan" + ; " and a.cants + a.cant > a.cante" + ; " and nvl(a.id_part_rez,0) = 0 and nvl(a.id_lucrare_rez,0) = 0" DO NumaraLoturi WITH 'REPLAY sucursala = cea din sesiune', ; STRTRAN(lcUnde, '@SUC@', 'nvl(pack_facturare.nid_sucursala,-99)') DO NumaraLoturi WITH 'REPLAY sucursala = 167 (literal)', ; STRTRAN(lcUnde, '@SUC@', 'nvl(167,-99)') ENDPROC PROCEDURE NumaraLoturi LPARAMETERS tcEticheta, tcUnde LOCAL lcSql, lnR, laErr, lcVechi lcVechi = SQLGETPROP(gnHandle, 'DispWarnings') SQLSETPROP(gnHandle, 'DispWarnings', .F.) lcSql = "declare n number; begin select count(*) into n" + tcUnde + ; "; raise_application_error(-20998, 'REPLAY n=<'||n||'>'); end;" DIMENSION laErr[1] lnR = SQLEXEC(gnHandle, lcSql) IF lnR < 0 AERROR(laErr) STRTOFILE(' [' + tcEticheta + '] ' + STRTRAN(STRTRAN(TRANSFORM(laErr[1,3]), CHR(13), ' '), CHR(10), ' ') + CHR(13) + CHR(10), gcErrLog, 1) ELSE STRTOFILE(' [' + tcEticheta + '] NEASTEPTAT: fara eroare (r=' + TRANSFORM(lnR) + ')' + CHR(13) + CHR(10), gcErrLog, 1) ENDIF SQLSETPROP(gnHandle, 'DispWarnings', lcVechi) ENDPROC *============================================================================================== * CitestePachet: citeste variabilele publice de pachet pe ACELASI handle, printr-un bloc anonim * care le intoarce in textul erorii (nu scrie nimic). SQLEXEC nu declanseaza ON ERROR. *============================================================================================== PROCEDURE CitestePachet LPARAMETERS tcMoment LOCAL lcSql, lnR, laErr, lcVechi lcVechi = SQLGETPROP(gnHandle, 'DispWarnings') SQLSETPROP(gnHandle, 'DispWarnings', .F.) lcSql = "begin raise_application_error(-20999, 'PKVAR nid_sucursala=<'" + ; "||nvl(to_char(pack_facturare.nid_sucursala),'NULL')||'> nan=<'" + ; "||nvl(to_char(pack_facturare.nan),'NULL')||'> nluna=<'" + ; "||nvl(to_char(pack_facturare.nluna),'NULL')||'>'); end;" DIMENSION laErr[1] lnR = SQLEXEC(gnHandle, lcSql) IF lnR < 0 AERROR(laErr) STRTOFILE(' [' + tcMoment + '] ' + STRTRAN(STRTRAN(TRANSFORM(laErr[1,3]), CHR(13), ' '), CHR(10), ' ') + CHR(13) + CHR(10), gcErrLog, 1) ELSE STRTOFILE(' [' + tcMoment + '] NEASTEPTAT: blocul nu a intors eroare (r=' + TRANSFORM(lnR) + ')' + CHR(13) + CHR(10), gcErrLog, 1) ENDIF SQLSETPROP(gnHandle, 'DispWarnings', lcVechi) ENDPROC *============================================================================================== FUNCTION Val1 LPARAMETERS tcSql LOCAL lnV lnV = -1 IF USED('c_val1') USE IN c_val1 ENDIF IF goExecutor.oExecuta(tcSql, 'c_val1') SELECT c_val1 IF RECCOUNT('c_val1') >= 1 GO TOP lnV = NVL(v, -1) ENDIF USE IN c_val1 ENDIF RETURN lnV ENDFUNC *============================================================================================== PROCEDURE probe_error_handler LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1) IF TYPE('gnHandle') = 'N' AND gnHandle > 0 SQLROLLBACK(gnHandle) SQLSetProp(gnHandle, 'Transactions', 1) ENDIF STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDPROC