Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
317 lines
12 KiB
Plaintext
317 lines
12 KiB
Plaintext
* 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
|