#6 editare factura emisa: articolele nu se mai editeaza pe facturi trimise in eFactura
Cand documentul e deja trimis in eFactura, pagina de articole ramane vizibila, dar needitabila: cantitate, pret, pret achizitie, flagul pret cu TVA, discountul de antet, plus adaugarea si stergerea de linii. Alegerea e "vizibil, dar blocat", nu "pagina ascunsa" - contabilul trebuie sa vada ce contine factura trimisa. - omodificari.vc2: flag lArticoleReadOnly calculat in frm_modific2024.Show, impins peste .When-urile de celula, peste Enabled si peste garda din Click-ul butoanelor, si peste txtDiscountArt.ReadOnly. Eticheta lblArticoleReadOnly explica motivul. - ofacturare_editare.prg: id_fact adus pe tvanz, in IncarcaVanzareNota si in CreeazaCursorTvanzGol. EsteInEFactura interogheaza anaf_efactura dupa id_fact, nu dupa id_vanzare - fara asta garda nu s-ar fi declansat niciodata pe date reale. - teste: test_efactura_readonly (headless, garda in ambele sensuri), test_ui_efactura_readonly (formular vizibil - coloanele gridului nu se materializeaza sub -A -T), test_s7_rotunjire, si test_s8_matrice_surse pentru matricea S8 pe tipuri de sursa. S8 rulat pe cate un document din fiecare tip de sursa (lista de preturi, contract, aviz, factura din aviz), fiecare editat din ambele puncte de intrare: notele vechi raman STERS=1, id_fact nu se schimba, totalurile si liniile raman coerente. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
766
utile/Teste/editare_factura/test_s8_matrice_surse.prg
Normal file
766
utile/Teste/editare_factura/test_s8_matrice_surse.prg
Normal file
@@ -0,0 +1,766 @@
|
||||
* test_s8_matrice_surse.prg
|
||||
* Test pe fluxul real al editarii unei facturi emise, pe cate un document din fiecare tip de sursa
|
||||
* (lista de preturi/comanda, aviz, factura din aviz, factura din contract), fiecare editat de doua
|
||||
* ori: o data pornit ca din ROAFACTURARE (frm_facturi.do_editare_factura, ofacturare_comun.vc2:
|
||||
* 3742-3837), o data ca din registrul jurnal ROACONT (afisjurcom.do_modifica, comun.vc2:2222-2569).
|
||||
* Harnessul reproduce ambele lanturi identic cu test_s5_scriere_reala.prg si
|
||||
* test_s5_al_doilea_intrare.prg (aceleasi helpere MyDeschide/InchideTranzactie, acelasi ocolire a
|
||||
* UI-ului cu buton=1 fortat), dar FARA nicio editare de linii - S5/S7 acopera deja modificarile de
|
||||
* continut; aici se verifica doar ca reeditarea (fara nimic schimbat) trece corect prin ambele
|
||||
* puncte de intrare, pe fiecare tip de document sursa.
|
||||
*
|
||||
* Ce verifica dupa fiecare editare (VerificaDupaEditare): nota veche (vact_tot, cod dinainte) are
|
||||
* STERS=1, nota noua (cod nou) exista si e activa cu acelasi id_fact, VANZARI.id_fact ramane
|
||||
* neschimbat, VANZARI/VANZARI_DETALII raman sincronizate (numar de linii active si totalurile
|
||||
* denormalizate identice cu inainte de editare, fara_tva+tva=cu_tva), rulajele sunt refacute
|
||||
* (Reccount(trul)>0 pe nota noua) si totalurile de control ACT/RUL (ActualizeazaVerdictActRul,
|
||||
* omodificari.vc2) raman concordante fata de inainte de editare - CalculeazaTotaluriS4b instantiaza
|
||||
* frm_modific2024 exact ca test_verdict_act_rul.prg, fara UI. Suplimentar: gcMockUltimMesaj
|
||||
* (mock_amessagebox.prg) trebuie sa ramana gol dupa lantul de scriere - dovada ca verifica_stoc
|
||||
* (oscrie_in_fisiere.prg:92-106, apelata doar cand tnScrie_Sterge=2 And !tlModificare) nu s-a
|
||||
* declansat, pentru ca ambele lanturi trec tlModificare=.T. la OSCRIE_IN_FISIERE.
|
||||
*
|
||||
* Matricea completa (4 documente, cate unul din fiecare tip de sursa) e definita in gaMatriceS8, dar
|
||||
* NUMAI id_vanzare=1048 e activ in gaCazuriActive - celelalte trei se consuma ireversibil (cod se
|
||||
* realoca, note vechi raman sterse) si se ruleaza separat, dupa ce felia asta trece. Cazurile
|
||||
* neactive sunt doar loghate, fara niciun acces la Oracle. Codul e parametrizat pe id_vanzare -
|
||||
* activarea unui caz nou inseamna doar adaugarea lui in gaCazuriActive.
|
||||
*
|
||||
* Documentele de test se editeaza exclusiv prin fluxul aplicatiei (OSCRIE_IN_FISIERE,
|
||||
* finalizeaza_modificare_nota, ScrieArticoleFacturaEditate) - interogarile SQL sunt doar de citire.
|
||||
* QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_matrice_surse_log.txt'
|
||||
STRTOFILE('start ' + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog)
|
||||
|
||||
PUBLIC gcErrLog, gcTestLog, gnPass, gnFail
|
||||
gcErrLog = lcLog
|
||||
gcTestLog = lcLog
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
*-- mock amessagebox incarcat PRIMUL, inaintea lantului real (la nume duplicat castiga primul gasit)
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnVerifMock
|
||||
lnVerifMock = amessagebox('verificare mock', 4+32, 'test')
|
||||
STRTOFILE('verificare mock amessagebox = ' + TRANSFORM(lnVerifMock) + ;
|
||||
IIF(lnVerifMock = 6, ' (OK, mock activ)', ' (ATENTIE: amessagebox real, risc de blocaj)') + CHR(13) + CHR(10), lcLog, 1)
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\oscrie_in_fisiere.prg ADDITIVE
|
||||
*-- garda de referinte din do_editare_factura sta in odocumente.prg, care nu e in mediul de test
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\odocumente.prg ADDITIVE
|
||||
|
||||
*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) -
|
||||
*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa (necesar pt. frm_modific2024)
|
||||
RELEASE CLASSLIB omodificari
|
||||
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
||||
|
||||
IF TYPE('gnPC') <> 'N'
|
||||
PUBLIC gnPC
|
||||
gnPC = 2
|
||||
ENDIF
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
*-- rezultatul CalculeazaTotaluriS4b, populat la fiecare apel (PUBLIC - citit imediat de apelant)
|
||||
PUBLIC gnS4bAct, gnS4bRul, gcS4bVerdict, gnS4bRulReccount, glS4bOk
|
||||
gnS4bAct = 0
|
||||
gnS4bRul = 0
|
||||
gcS4bVerdict = ''
|
||||
gnS4bRulReccount = -1
|
||||
glS4bOk = .F.
|
||||
|
||||
*-- matricea completa S8 (extensibila) - un singur document activ in aceasta rulare
|
||||
LOCAL ARRAY gaMatriceS8(4,2)
|
||||
gaMatriceS8(1,1) = 1048
|
||||
gaMatriceS8(1,2) = 'lista de preturi (tip 1)'
|
||||
gaMatriceS8(2,1) = 1052
|
||||
gaMatriceS8(2,2) = 'aviz (tip 22)'
|
||||
gaMatriceS8(3,1) = 1054
|
||||
gaMatriceS8(3,2) = 'factura din aviz (tip 4)'
|
||||
gaMatriceS8(4,1) = 1055
|
||||
gaMatriceS8(4,2) = 'factura din contract (tip 2)'
|
||||
|
||||
*-- toate cele 4 documente din matrice au fost deja editate si verificate (rec_s8_matrice.md);
|
||||
*-- 0 = niciun caz activ implicit, ca o rulare accidentala sa nu consume alte documente
|
||||
LOCAL ARRAY gaCazuriActive(1)
|
||||
gaCazuriActive(1) = 0
|
||||
|
||||
LOCAL lnI
|
||||
FOR lnI = 1 TO ALEN(gaMatriceS8, 1)
|
||||
IF ASCAN(gaCazuriActive, gaMatriceS8(lnI, 1)) = 0
|
||||
STRTOFILE(CHR(13) + CHR(10) + '========== SARIT (nu se consuma inca in aceasta rulare): id_vanzare=' + ;
|
||||
TRANSFORM(gaMatriceS8(lnI, 1)) + ' [' + gaMatriceS8(lnI, 2) + ']' + CHR(13) + CHR(10), lcLog, 1)
|
||||
ELSE
|
||||
DO VerificaDocumentMatriceS8 WITH gaMatriceS8(lnI, 1), gaMatriceS8(lnI, 2), lcLog
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
STRTOFILE(CHR(13) + CHR(10) + 'REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), lcLog, 1)
|
||||
STRTOFILE('done ' + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + ' [' + m.tcValoare + ']' + CHR(13) + CHR(10), gcTestLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' [' + m.tcValoare + ']' + CHR(13) + CHR(10), gcTestLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- executa SELECT-ul prin goExecutor si intoarce codul de succes; cursorul vechi se inchide intai
|
||||
PROCEDURE ExecSel
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
LOCAL lnQ
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
lnQ = goExecutor.oExecute(tcSql, tcCursor)
|
||||
RETURN lnQ
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- reproduce _frm_base.vc2:252-265 (do_deschide_tranzactie), fara sa instantieze niciun formular
|
||||
PROCEDURE MyDeschideTranzactie
|
||||
LOCAL llReturn, lnSuccesLocal
|
||||
IF TYPE('goExecutor') = 'O'
|
||||
goExecutor.oExecuta([select * from dual])
|
||||
ENDIF
|
||||
lnSuccesLocal = SQLSetprop(gnHandle, "Transactions", 2)
|
||||
llReturn = IIF(lnSuccesLocal < 0, .F., .T.)
|
||||
RETURN llReturn
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- reproduce _frm_base.vc2:279-302 (do_inchide_tranzactie), fara sa instantieze niciun formular
|
||||
PROCEDURE MyInchideTranzactie
|
||||
LPARAMETERS tnTip
|
||||
LOCAL llReturn, lnSuccesLocal
|
||||
IF tnTip = 1
|
||||
lnSuccesLocal = SQLCOMMIT(gnHandle)
|
||||
ELSE
|
||||
lnSuccesLocal = SQLROLLBACK(gnHandle)
|
||||
ENDIF
|
||||
IF lnSuccesLocal < 0
|
||||
llReturn = .F.
|
||||
ELSE
|
||||
lnSuccesLocal = SQLSetprop(gnHandle, "Transactions", 1)
|
||||
llReturn = IIF(lnSuccesLocal < 0, .F., .T.)
|
||||
ENDIF
|
||||
RETURN llReturn
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- totalurile de control S4b (Total ACT, Total RUL, verdict) pe nota (cod,an,luna), calculate exact
|
||||
*-- ca test_verdict_act_rul.prg: incarca cursoarele notei, instantiaza frm_modific2024 fara UI (doar
|
||||
*-- ca sa ruleze ActualizeazaVerdictActRul), citeste proprietatile si elibereaza tot. Rezultatul se
|
||||
*-- intoarce in gnS4bAct/gnS4bRul/gcS4bVerdict/gnS4bRulReccount/glS4bOk (citite imediat de apelant)
|
||||
PROCEDURE CalculeazaTotaluriS4b
|
||||
LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog
|
||||
|
||||
LOCAL llOk, lnIdSet, loForm
|
||||
glS4bOk = .F.
|
||||
gnS4bAct = 0
|
||||
gnS4bRul = 0
|
||||
gcS4bVerdict = ''
|
||||
gnS4bRulReccount = -1
|
||||
|
||||
llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.)
|
||||
IF !llOk OR !USED('tact') OR RECCOUNT('tact') = 0
|
||||
STRTOFILE(' [' + tcEticheta + '] CalculeazaTotaluriS4b: IncarcaCursoareModificareNota a esuat pentru cod=' + TRANSFORM(tnCod) + CHR(13) + CHR(10), tcLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT a.*, IIF(NVL(id_jtva_coloana, 0) = 0, 0, 1) AS cu_Tva FROM tact a INTO CURSOR tact READWRITE
|
||||
GO TOP IN tact
|
||||
lnIdSet = tact.id_set
|
||||
|
||||
IF !USED('crsJtvaTemp')
|
||||
update_jtva_coloane("", "crsJtvaTemp", 6)
|
||||
ENDIF
|
||||
|
||||
SELECT tact
|
||||
loForm = CREATEOBJECT([frm_modific2024], lnIdSet)
|
||||
loForm.WindowType = 0
|
||||
loForm.Show()
|
||||
|
||||
gnS4bAct = loForm.nTotalActRon
|
||||
gnS4bRul = loForm.nTotalRulRon
|
||||
gcS4bVerdict = loForm.pgfArticole.PAGE3.lblVerdictArt.Caption
|
||||
gnS4bRulReccount = IIF(USED('trul'), RECCOUNT('trul'), -1)
|
||||
glS4bOk = .T.
|
||||
|
||||
loForm.Release()
|
||||
|
||||
STRTOFILE(' [' + tcEticheta + '] S4b cod=' + TRANSFORM(tnCod) + ': ACT=' + TRANSFORM(gnS4bAct) + ' RUL=' + TRANSFORM(gnS4bRul) + ;
|
||||
' verdict=[' + m.gcS4bVerdict + '] Reccount(trul)=' + TRANSFORM(gnS4bRulReccount) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
IF USED('tact')
|
||||
USE IN tact
|
||||
ENDIF
|
||||
IF USED('rul_temp')
|
||||
USE IN rul_temp
|
||||
ENDIF
|
||||
IF USED('trul')
|
||||
USE IN trul
|
||||
ENDIF
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN rul_temp_obinv
|
||||
ENDIF
|
||||
IF USED('trul_obinv')
|
||||
USE IN trul_obinv
|
||||
ENDIF
|
||||
IF USED('tvanz')
|
||||
USE IN tvanz
|
||||
ENDIF
|
||||
IF USED('tvd')
|
||||
USE IN tvd
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- verificarile comune de dupa un commit reusit (ambele puncte de intrare le folosesc identic):
|
||||
*-- stare VANZARI dupa, nota veche/noua din vact_tot, totalurile de control S4b dupa editare
|
||||
PROCEDURE VerificaDupaEditare
|
||||
LPARAMETERS tnIdVanzare, tcEtapa, tnCodInainte, tnIdFactInainte, tnTotFtvaInainte, tnTotTvaInainte, ;
|
||||
tnTotCtvaInainte, tnNrActiveInainte, tnActBaseline, tnRulBaseline, tnAn, tnLuna, tcLog
|
||||
|
||||
LOCAL lcSql, lnQ, lnCodDupa, lnIdFactDupa, lnStersDupa, lnTotFtvaDupa, lnTotTvaDupa, lnTotCtvaDupa, lnNrActiveDupa
|
||||
LOCAL lnStersNotaVeche, lnStersNotaNoua, lnIdFactNotaNoua
|
||||
|
||||
lcSql = [select cod, nvl(sters,0) as sters, id_fact, total_fara_tva, total_tva, total_cu_tva from vanzari where id_vanzare = ] + TRANSFORM(tnIdVanzare)
|
||||
lnQ = ExecSel(lcSql, 'v_va1')
|
||||
IF lnQ <= 0 OR RECCOUNT('v_va1') <> 1
|
||||
DO asserteaza WITH tcEtapa + ': VANZARI citit dupa commit', .F., 'lnQ=' + TRANSFORM(lnQ)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_va1
|
||||
lnCodDupa = cod
|
||||
lnIdFactDupa = id_fact
|
||||
lnStersDupa = sters
|
||||
lnTotFtvaDupa = total_fara_tva
|
||||
lnTotTvaDupa = total_tva
|
||||
lnTotCtvaDupa = total_cu_tva
|
||||
USE IN v_va1
|
||||
|
||||
lcSql = [select count(*) as nr from vanzari_detalii where id_vanzare = ] + TRANSFORM(tnIdVanzare) + [ and sters = 0]
|
||||
lnQ = ExecSel(lcSql, 'v_va_cnt1')
|
||||
lnNrActiveDupa = IIF(lnQ > 0, v_va_cnt1.nr, -1)
|
||||
USE IN v_va_cnt1
|
||||
|
||||
STRTOFILE(' VANZARI dupa: cod=' + TRANSFORM(lnCodDupa) + ' (era ' + TRANSFORM(tnCodInainte) + ') id_fact=' + TRANSFORM(lnIdFactDupa) + ;
|
||||
' sters=' + TRANSFORM(lnStersDupa) + ' ftva=' + TRANSFORM(lnTotFtvaDupa) + ' tva=' + TRANSFORM(lnTotTvaDupa) + ;
|
||||
' ctva=' + TRANSFORM(lnTotCtvaDupa) + ' linii active=' + TRANSFORM(lnNrActiveDupa) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
DO asserteaza WITH tcEtapa + ': VANZARI.COD s-a realocat la salvare, documentul ramane activ', ;
|
||||
lnCodDupa <> tnCodInainte AND lnStersDupa = 0, TRANSFORM(tnCodInainte) + ' -> ' + TRANSFORM(lnCodDupa)
|
||||
DO asserteaza WITH tcEtapa + ': id_fact ramane neschimbat', lnIdFactDupa = tnIdFactInainte, TRANSFORM(tnIdFactInainte) + ' -> ' + TRANSFORM(lnIdFactDupa)
|
||||
DO asserteaza WITH tcEtapa + ': numarul de linii active ramane neschimbat (reeditare fara modificari)', ;
|
||||
lnNrActiveDupa = tnNrActiveInainte, 'dupa=' + TRANSFORM(lnNrActiveDupa) + ' inainte=' + TRANSFORM(tnNrActiveInainte)
|
||||
DO asserteaza WITH tcEtapa + ': totalurile din VANZARI sunt coerente (fara_tva+tva=cu_tva)', ;
|
||||
ABS((lnTotFtvaDupa + lnTotTvaDupa) - lnTotCtvaDupa) < 0.01, TRANSFORM(lnTotFtvaDupa) + ' + ' + TRANSFORM(lnTotTvaDupa) + ' = ' + TRANSFORM(lnTotCtvaDupa)
|
||||
DO asserteaza WITH tcEtapa + ': totalurile denormalizate raman egale cu cele dinainte (reeditare fara modificari)', ;
|
||||
ABS(lnTotFtvaDupa - tnTotFtvaInainte) < 0.01 AND ABS(lnTotTvaDupa - tnTotTvaInainte) < 0.01 AND ABS(lnTotCtvaDupa - tnTotCtvaInainte) < 0.01, ;
|
||||
'ftva=' + TRANSFORM(lnTotFtvaDupa) + ' tva=' + TRANSFORM(lnTotTvaDupa) + ' ctva=' + TRANSFORM(lnTotCtvaDupa)
|
||||
|
||||
*-- nota veche/nota noua, exact ca gridul registrului jurnal (vact_tot)
|
||||
lcSql = [select nvl(sters,0) as sters from vact_tot where cod = ] + TRANSFORM(tnCodInainte) + [ and rownum = 1]
|
||||
lnQ = ExecSel(lcSql, 'v_va_nv')
|
||||
lnStersNotaVeche = IIF(lnQ > 0 AND RECCOUNT('v_va_nv') = 1, v_va_nv.sters, -1)
|
||||
USE IN v_va_nv
|
||||
DO asserteaza WITH tcEtapa + ': nota veche (cod=' + TRANSFORM(tnCodInainte) + ') are STERS=1', lnStersNotaVeche = 1, 'sters=' + TRANSFORM(lnStersNotaVeche)
|
||||
|
||||
lcSql = [select nvl(sters,0) as sters, id_fact from vact_tot where cod = ] + TRANSFORM(lnCodDupa) + [ and rownum = 1]
|
||||
lnQ = ExecSel(lcSql, 'v_va_nn')
|
||||
lnStersNotaNoua = IIF(lnQ > 0 AND RECCOUNT('v_va_nn') = 1, v_va_nn.sters, -1)
|
||||
lnIdFactNotaNoua = IIF(lnQ > 0 AND RECCOUNT('v_va_nn') = 1, v_va_nn.id_fact, -1)
|
||||
USE IN v_va_nn
|
||||
DO asserteaza WITH tcEtapa + ': nota noua (cod=' + TRANSFORM(lnCodDupa) + ') exista si e activa (STERS=0)', lnStersNotaNoua = 0, 'sters=' + TRANSFORM(lnStersNotaNoua)
|
||||
DO asserteaza WITH tcEtapa + ': nota noua pastreaza acelasi id_fact', lnIdFactNotaNoua = tnIdFactInainte, TRANSFORM(lnIdFactNotaNoua) + ' vs ' + TRANSFORM(tnIdFactInainte)
|
||||
|
||||
*-- rulajele refacute + totalurile de control S4b concordante fata de dinainte de editare
|
||||
DO CalculeazaTotaluriS4b WITH lnCodDupa, tnAn, tnLuna, tcEtapa + ' [dupa]', tcLog
|
||||
DO asserteaza WITH tcEtapa + ': totalurile de control S4b calculabile pe nota noua', glS4bOk, TRANSFORM(glS4bOk)
|
||||
DO asserteaza WITH tcEtapa + ': rulajele au fost refacute pe nota noua (Reccount(trul)>0)', gnS4bRulReccount > 0, TRANSFORM(gnS4bRulReccount)
|
||||
DO asserteaza WITH tcEtapa + ': Total ACT ramane concordant fata de inainte de editare (fara modificari de linii)', ;
|
||||
ABS(gnS4bAct - tnActBaseline) < 0.01, TRANSFORM(tnActBaseline) + ' -> ' + TRANSFORM(gnS4bAct)
|
||||
DO asserteaza WITH tcEtapa + ': Total RUL ramane concordant fata de inainte de editare (fara modificari de linii)', ;
|
||||
ABS(gnS4bRul - tnRulBaseline) < 0.01, TRANSFORM(tnRulBaseline) + ' -> ' + TRANSFORM(gnS4bRul)
|
||||
|
||||
STRTOFILE(' REZUMAT ' + tcEtapa + ': cod ' + TRANSFORM(tnCodInainte) + ' -> ' + TRANSFORM(lnCodDupa) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- primul punct de intrare: ofacturare_comun.vc2:3742-3837 (do_editare_factura, apelat din
|
||||
*-- frm_facturi), reprodus fara UI si fara nicio editare de linii
|
||||
PROCEDURE EditeazaDinRoafacturare
|
||||
LPARAMETERS tnIdVanzare, tcSursa, tcLog
|
||||
|
||||
PRIVATE pnAn, pnLuna, lnCod, lnIdFact
|
||||
LOCAL lcEtapa, lcSql, lnQ, lnSters, llEProforma, lnIdSet, lnIdFactD, lnSucces, llBlocatReferinte
|
||||
LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte
|
||||
LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk, llGasitRand
|
||||
|
||||
lcEtapa = tcSursa + ' / intrare ROAFACTURARE (do_editare_factura)'
|
||||
STRTOFILE(CHR(13) + CHR(10) + '========== ' + lcEtapa + ', id_vanzare=' + TRANSFORM(tnIdVanzare) + ' ==========' + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
*-- 1) starea documentului inainte (VANZARI.COD se realoca la fiecare salvare)
|
||||
lcSql = [select cod, nvl(sters,0) as sters, id_fact, eproforma, total_fara_tva, total_tva, total_cu_tva, ] + ;
|
||||
[extract(year from data_act) as anact, extract(month from data_act) as lunaact ] + ;
|
||||
[from vanzari where id_vanzare = ] + TRANSFORM(tnIdVanzare)
|
||||
lnQ = ExecSel(lcSql, 'v_ra0')
|
||||
IF lnQ <= 0 OR RECCOUNT('v_ra0') <> 1
|
||||
DO asserteaza WITH lcEtapa + ': VANZARI citit inainte', .F., 'lnQ=' + TRANSFORM(lnQ)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_ra0
|
||||
lnCod = cod
|
||||
lnCodInainte = cod
|
||||
lnIdFact = id_fact
|
||||
lnIdFactInainte = id_fact
|
||||
llEProforma = (NVL(eproforma, 0) = 1)
|
||||
pnAn = anact
|
||||
pnLuna = lunaact
|
||||
lnSters = sters
|
||||
lnTotFtvaInainte = total_fara_tva
|
||||
lnTotTvaInainte = total_tva
|
||||
lnTotCtvaInainte = total_cu_tva
|
||||
USE IN v_ra0
|
||||
|
||||
STRTOFILE(' VANZARI inainte: cod=' + TRANSFORM(lnCodInainte) + ' id_fact=' + TRANSFORM(lnIdFactInainte) + ' sters=' + TRANSFORM(lnSters) + ;
|
||||
' an/luna=' + TRANSFORM(pnAn) + '/' + TRANSFORM(pnLuna) + ' ftva=' + TRANSFORM(lnTotFtvaInainte) + ' tva=' + TRANSFORM(lnTotTvaInainte) + ;
|
||||
' ctva=' + TRANSFORM(lnTotCtvaInainte) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
*-- 2) garzile din do_editare_factura, fara UI
|
||||
DO asserteaza WITH lcEtapa + ': document editabil (nesters, neproforma)', lnSters <> 1 AND !llEProforma, 'sters=' + TRANSFORM(lnSters) + ' eproforma=' + TRANSFORM(llEProforma)
|
||||
IF lnSters = 1 OR llEProforma
|
||||
RETURN
|
||||
ENDIF
|
||||
DO asserteaza WITH lcEtapa + ': document din luna curenta', (pnAn * 12) + pnLuna = (gnAn * 12) + gnLuna, TRANSFORM(pnAn) + '/' + TRANSFORM(pnLuna) + ' vs curent ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna)
|
||||
IF (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
|
||||
RETURN
|
||||
ENDIF
|
||||
llBlocatReferinte = ReferinteDocumenteNota(pnAn, pnLuna, lnCod) OR EsteInEFactura(lnIdFact)
|
||||
DO asserteaza WITH lcEtapa + ': document fara referinte / netrimis in eFactura', !llBlocatReferinte, TRANSFORM(llBlocatReferinte)
|
||||
IF llBlocatReferinte
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*-- 3) instantaneul liniilor + totalurile de control S4b, INAINTE de editare (baseline concordanta)
|
||||
lcSql = [select count(*) as nr from vanzari_detalii where id_vanzare = ] + TRANSFORM(tnIdVanzare) + [ and sters = 0]
|
||||
lnQ = ExecSel(lcSql, 'v_ra_cnt0')
|
||||
lnNrActiveInainte = IIF(lnQ > 0, v_ra_cnt0.nr, -1)
|
||||
USE IN v_ra_cnt0
|
||||
|
||||
DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog
|
||||
lnActBaseline = gnS4bAct
|
||||
lnRulBaseline = gnS4bRul
|
||||
llS4bBaselineOk = glS4bOk
|
||||
DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk)
|
||||
|
||||
*-- 4) cursoarele notei + tvanz/tvd, exact ca do_editare_factura
|
||||
IF !IncarcaCursoareModificareNota(lnCod, pnAn, pnLuna, .F.)
|
||||
DO asserteaza WITH lcEtapa + ': IncarcaCursoareModificareNota', .F., 'a esuat'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO asserteaza WITH lcEtapa + ': nota are randuri (actactan)', RECCOUNT('actactan') > 0, TRANSFORM(RECCOUNT('actactan'))
|
||||
IF RECCOUNT('actactan') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT actactan
|
||||
llGasitRand = .F.
|
||||
IF lnIdFact > 0
|
||||
LOCATE FOR NVL(id_fact, 0) = lnIdFact
|
||||
llGasitRand = FOUND()
|
||||
ENDIF
|
||||
IF !llGasitRand
|
||||
GO TOP
|
||||
lnIdFact = id_fact
|
||||
ENDIF
|
||||
lnIdSet = id_set
|
||||
lnIdFactD = NVL(id_factd, 0)
|
||||
|
||||
SELECT a.*, IIF(NVL(id_jtva_coloana, 0) = 0, 0, 1) AS cu_Tva FROM tact a INTO CURSOR tact READWRITE
|
||||
|
||||
IF !IncarcaVanzareDinNota('tact')
|
||||
DO asserteaza WITH lcEtapa + ': IncarcaVanzareDinNota', .F., 'nu a gasit randul din VANZARI'
|
||||
RETURN
|
||||
ENDIF
|
||||
IncarcaArticoleFactura(tnIdVanzare, 'tvd')
|
||||
DO asserteaza WITH lcEtapa + ': tvd incarcat cu liniile active reale', ;
|
||||
USED('tvd') AND RECCOUNT('tvd') = lnNrActiveInainte, 'Reccount=' + IIF(USED('tvd'), TRANSFORM(RECCOUNT('tvd')), '-') + ' asteptat=' + TRANSFORM(lnNrActiveInainte)
|
||||
|
||||
*-- 5) fara nicio modificare de articole - buton=1 fortat direct (inainte_de_do_termin NU se executa)
|
||||
buton = 1
|
||||
|
||||
*-- 6) ramura buton=1 (ofacturare_comun.vc2:3799-3837), copiata identic; tlModificare=.T. la
|
||||
*-- OSCRIE_IN_FISIERE - verifica_stoc (oscrie_in_fisiere.prg:92) nu se declanseaza pe aceasta ramura
|
||||
gcMockUltimMesaj = ''
|
||||
lnSucces = 0
|
||||
TRY
|
||||
IF MyDeschideTranzactie()
|
||||
SELECT actactan
|
||||
lnSucces = OSCRIE_IN_FISIERE(2, .T., .T.)
|
||||
STRTOFILE(' OSCRIE_IN_FISIERE(2,...) => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
IF lnSucces > 0
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
SELECT tact
|
||||
REPLACE id_jtva_coloana WITH NULL, proc_tva WITH 0 FOR cu_Tva = 0
|
||||
SELECT * FROM tact INTO CURSOR actactan READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0
|
||||
IF USED('rul_temp')
|
||||
USE IN rul_temp
|
||||
ENDIF
|
||||
SELECT * FROM trul INTO CURSOR RUL_TEMP READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN rul_temp_obinv
|
||||
ENDIF
|
||||
SELECT * FROM trul_obinv INTO CURSOR RUL_TEMP_OBINV READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0
|
||||
lnSucces = OSCRIE_IN_FISIERE(0, .T., .T.)
|
||||
STRTOFILE(' OSCRIE_IN_FISIERE(0,...) => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
IF lnSucces > 0
|
||||
lcSql = [begin pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,Null,] + ALLTRIM(STR(lnIdSet)) + [,] + ;
|
||||
ALLTRIM(STR(lnCod)) + [,] + ALLTRIM(STR(lnIdFact)) + [,] + ALLTRIM(STR(lnIdFactD)) + [,?gnIdUtil); end;]
|
||||
lnSucces = IIF(goExecutor.oExecuta(lcSql), 1, -1)
|
||||
STRTOFILE(' finalizeaza_modificare_nota => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
IF lnSucces > 0 AND "OFACTURARE_EDITARE" $ UPPER(SET("Procedure")) AND USED('tvanz') AND RECCOUNT('tvanz') = 1
|
||||
lnSucces = IIF(ScrieArticoleFacturaEditate(tvanz.id_vanzare), 1, -1)
|
||||
STRTOFILE(' ScrieArticoleFacturaEditate => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' ATENTIE: blocul ScrieArticoleFacturaEditate NU s-a executat' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
IF MyInchideTranzactie(IIF(lnSucces < 0, 2, 1))
|
||||
STRTOFILE(' tranzactie inchisa cu ' + IIF(lnSucces < 0, 'ROLLBACK', 'COMMIT') + CHR(13) + CHR(10), tcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' FAIL la inchiderea tranzactiei' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
ELSE
|
||||
STRTOFILE(' FAIL: deschiderea tranzactiei a esuat' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
CATCH TO loExc
|
||||
STRTOFILE(' EXCEPTIE in lantul de scriere: ' + TRANSFORM(loExc.ErrorNo) + ' [' + loExc.Message + '] ' + ;
|
||||
loExc.Procedure + ':' + TRANSFORM(loExc.LineNo) + ' -> ROLLBACK' + CHR(13) + CHR(10), tcLog, 1)
|
||||
lnSucces = -99
|
||||
MyInchideTranzactie(2)
|
||||
ENDTRY
|
||||
|
||||
DO asserteaza WITH lcEtapa + ': lantul de scriere a mers pana la capat (COMMIT)', lnSucces > 0, 'lnSucces=' + TRANSFORM(lnSucces)
|
||||
DO asserteaza WITH lcEtapa + ': verificarile de stoc de la emitere NU s-au declansat (niciun mesaj afisat)', EMPTY(gcMockUltimMesaj), '[' + gcMockUltimMesaj + ']'
|
||||
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
IF USED('tact')
|
||||
USE IN tact
|
||||
ENDIF
|
||||
IF USED('rul_temp')
|
||||
USE IN rul_temp
|
||||
ENDIF
|
||||
IF USED('trul')
|
||||
USE IN trul
|
||||
ENDIF
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN rul_temp_obinv
|
||||
ENDIF
|
||||
IF USED('trul_obinv')
|
||||
USE IN trul_obinv
|
||||
ENDIF
|
||||
IF USED('tvd')
|
||||
USE IN tvd
|
||||
ENDIF
|
||||
IF USED('tvanz')
|
||||
USE IN tvanz
|
||||
ENDIF
|
||||
|
||||
IF lnSucces <= 0
|
||||
STRTOFILE(' scrierea nu s-a produs - fara verificari dupa' + CHR(13) + CHR(10), tcLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*-- 7) verificarile de dupa commit, comune ambelor puncte de intrare
|
||||
DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ;
|
||||
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- al doilea punct de intrare: comun.vc2:2222-2569 (afisjurcom.do_modifica, registrul jurnal
|
||||
*-- ROACONT), reprodus fara UI si fara nicio editare de linii - identic cu
|
||||
*-- test_s5_al_doilea_intrare.prg, cu adaugarea verificarilor de dupa commit (VerificaDupaEditare)
|
||||
PROCEDURE EditeazaDinRegistruJurnal
|
||||
LPARAMETERS tnIdVanzare, tcSursa, tcLog
|
||||
|
||||
PRIVATE pnAn, pnLuna, lnCod, lnIdFact, lnIdfactd, lnIdSet, pdDataOra
|
||||
LOCAL lcEtapa, lcSql, lnQ, lnSters, llSters, llGestInvantar, llRul, lnSucces, llBlocExecutat, llGasitTvanz
|
||||
LOCAL lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, lnTotCtvaInainte, lnNrActiveInainte
|
||||
LOCAL lnActBaseline, lnRulBaseline, llS4bBaselineOk
|
||||
llBlocExecutat = .F.
|
||||
|
||||
lcEtapa = tcSursa + ' / intrare registru jurnal ROACONT (afisjurcom.do_modifica)'
|
||||
STRTOFILE(CHR(13) + CHR(10) + '========== ' + lcEtapa + ', id_vanzare=' + TRANSFORM(tnIdVanzare) + ' ==========' + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
*-- 1) starea documentului inainte (cod-ul curent, dupa eventuala editare anterioara)
|
||||
lcSql = [select cod, nvl(sters,0) as sters, id_fact, total_fara_tva, total_tva, total_cu_tva, ] + ;
|
||||
[extract(year from data_act) as anact, extract(month from data_act) as lunaact ] + ;
|
||||
[from vanzari where id_vanzare = ] + TRANSFORM(tnIdVanzare)
|
||||
lnQ = ExecSel(lcSql, 'v_rj0')
|
||||
IF lnQ <= 0 OR RECCOUNT('v_rj0') <> 1
|
||||
DO asserteaza WITH lcEtapa + ': VANZARI citit inainte', .F., 'lnQ=' + TRANSFORM(lnQ)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_rj0
|
||||
lnCod = cod
|
||||
lnCodInainte = cod
|
||||
lnIdFactInainte = id_fact
|
||||
lnTotFtvaInainte = total_fara_tva
|
||||
lnTotTvaInainte = total_tva
|
||||
lnTotCtvaInainte = total_cu_tva
|
||||
USE IN v_rj0
|
||||
|
||||
lcSql = [select count(*) as nr from vanzari_detalii where id_vanzare = ] + TRANSFORM(tnIdVanzare) + [ and sters = 0]
|
||||
lnQ = ExecSel(lcSql, 'v_rj_cnt0')
|
||||
lnNrActiveInainte = IIF(lnQ > 0, v_rj_cnt0.nr, -1)
|
||||
USE IN v_rj_cnt0
|
||||
|
||||
STRTOFILE(' VANZARI inainte: cod=' + TRANSFORM(lnCodInainte) + ' id_fact=' + TRANSFORM(lnIdFactInainte) + ;
|
||||
' ftva=' + TRANSFORM(lnTotFtvaInainte) + ' tva=' + TRANSFORM(lnTotTvaInainte) + ' ctva=' + TRANSFORM(lnTotCtvaInainte) + ;
|
||||
' linii active=' + TRANSFORM(lnNrActiveInainte) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
*-- 2) "Select actjur" (comun.vc2:2253-2263) - un rand din vact_tot, exact ca gridul registrului jurnal
|
||||
lcSql = [select cod, an, luna, id_set, sters, id_fact, id_factd, dataora from vact_tot ] + ;
|
||||
[where cod = ] + TRANSFORM(lnCod) + [ and rownum = 1]
|
||||
lnQ = ExecSel(lcSql, 'actjur')
|
||||
IF lnQ <= 0 OR RECCOUNT('actjur') <> 1
|
||||
DO asserteaza WITH lcEtapa + ': actjur (randul din registrul jurnal) gasit pentru cod=' + TRANSFORM(lnCod), .F., 'lnQ=' + TRANSFORM(lnQ)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT actjur
|
||||
pnAn = an
|
||||
pnLuna = luna
|
||||
lnIdSet = id_set
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
lnIdfactd = id_factd
|
||||
pdDataOra = NULL
|
||||
USE IN actjur
|
||||
STRTOFILE(' actjur: cod=' + TRANSFORM(lnCod) + ' an/luna=' + TRANSFORM(pnAn) + '/' + TRANSFORM(pnLuna) + ;
|
||||
' id_set=' + TRANSFORM(lnIdSet) + ' sters=' + TRANSFORM(lnSters) + ' id_fact=' + TRANSFORM(lnIdFact) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
*-- 3) garzile din do_modifica (comun.vc2:2265-2290), fara UI
|
||||
DO asserteaza WITH lcEtapa + ': nota din luna curenta', (pnAn * 12) + pnLuna = (gnAn * 12) + gnLuna, TRANSFORM(pnAn) + '/' + TRANSFORM(pnLuna)
|
||||
IF (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
|
||||
RETURN
|
||||
ENDIF
|
||||
DO asserteaza WITH lcEtapa + ': id_set NU e in intervalul ROAPRODUCTIE (30000-30009)', !BETWEEN(lnIdSet, 30000, 30009), TRANSFORM(lnIdSet)
|
||||
IF BETWEEN(lnIdSet, 30000, 30009)
|
||||
RETURN
|
||||
ENDIF
|
||||
llSters = (lnSters = 1)
|
||||
DO asserteaza WITH lcEtapa + ': nota nu e deja stearsa', !llSters, TRANSFORM(lnSters)
|
||||
llGestInvantar = (lnIdSet = 90101)
|
||||
DO asserteaza WITH lcEtapa + ': nu e nota de inventariere', !llGestInvantar, TRANSFORM(lnIdSet)
|
||||
IF llGestInvantar
|
||||
pdDataOra = actjur.dataora
|
||||
ENDIF
|
||||
|
||||
*-- 4) totalurile de control S4b, INAINTE de editare (baseline concordanta)
|
||||
DO CalculeazaTotaluriS4b WITH lnCod, pnAn, pnLuna, lcEtapa + ' [inainte]', tcLog
|
||||
lnActBaseline = gnS4bAct
|
||||
lnRulBaseline = gnS4bRul
|
||||
llS4bBaselineOk = glS4bOk
|
||||
DO asserteaza WITH lcEtapa + ': totalurile de control S4b (ACT/RUL) calculabile inainte de editare', llS4bBaselineOk, TRANSFORM(llS4bBaselineOk)
|
||||
|
||||
*-- 5) cursoarele notei (actactan/tact/trul/trul_obinv)
|
||||
IF !IncarcaCursoareModificareNota(lnCod, pnAn, pnLuna, .F.)
|
||||
DO asserteaza WITH lcEtapa + ': IncarcaCursoareModificareNota', .F., 'a esuat'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO asserteaza WITH lcEtapa + ': nota are randuri (actactan)', RECCOUNT('actactan') > 0, TRANSFORM(RECCOUNT('actactan'))
|
||||
IF RECCOUNT('actactan') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT a.*, IIF(NVL(id_jtva_coloana, 0) = 0, 0, 1) AS cu_Tva FROM tact a INTO CURSOR tact READWRITE
|
||||
|
||||
*-- 6) PregatesteArticoleFacturaEditare('tact') - calea specifica acestui punct de intrare,
|
||||
*-- populeaza tvanz SI crsArticoleFactura
|
||||
IF USED('tvanz')
|
||||
USE IN tvanz
|
||||
ENDIF
|
||||
IF USED('crsArticoleFactura')
|
||||
USE IN crsArticoleFactura
|
||||
ENDIF
|
||||
llGasitTvanz = PregatesteArticoleFacturaEditare('tact')
|
||||
DO asserteaza WITH lcEtapa + ': PregatesteArticoleFacturaEditare gaseste documentul in VANZARI', llGasitTvanz, TRANSFORM(llGasitTvanz)
|
||||
DO asserteaza WITH lcEtapa + ': garda Used(tvanz) And Reccount(tvanz)=1 satisfacuta', ;
|
||||
USED('tvanz') AND RECCOUNT('tvanz') = 1, 'Used=' + TRANSFORM(USED('tvanz')) + ' Reccount=' + IIF(USED('tvanz'), TRANSFORM(RECCOUNT('tvanz')), '-')
|
||||
|
||||
IF USED('tvd')
|
||||
USE IN tvd
|
||||
ENDIF
|
||||
IncarcaArticoleFactura(tnIdVanzare, 'tvd')
|
||||
DO asserteaza WITH lcEtapa + ': tvd incarcat cu liniile active reale', ;
|
||||
USED('tvd') AND RECCOUNT('tvd') = lnNrActiveInainte, 'Reccount=' + IIF(USED('tvd'), TRANSFORM(RECCOUNT('tvd')), '-') + ' asteptat=' + TRANSFORM(lnNrActiveInainte)
|
||||
|
||||
*-- 7) fara nicio modificare de articole; ramura buton=1 (comun.vc2:2447-2493), llRul=.T.
|
||||
*-- neconditionat (:2449); tlModificare=.T. la OSCRIE_IN_FISIERE - verifica_stoc nu se declanseaza
|
||||
llRul = .T.
|
||||
gcMockUltimMesaj = ''
|
||||
lnSucces = 0
|
||||
TRY
|
||||
IF MyDeschideTranzactie()
|
||||
SELECT actactan
|
||||
IF !llSters
|
||||
lnSucces = OSCRIE_IN_FISIERE(2, .T., llRul)
|
||||
ELSE
|
||||
lnSucces = 1
|
||||
ENDIF
|
||||
STRTOFILE(' OSCRIE_IN_FISIERE(2,...) => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
IF lnSucces > 0
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
SELECT tact
|
||||
IF gnAn >= IIF(TYPE('gnAnFormNou') = 'U', 2007, gnAnFormNou)
|
||||
REPLACE id_jtva_coloana WITH NULL, proc_tva WITH 0 FOR cu_Tva = 0
|
||||
ENDIF
|
||||
SELECT * FROM tact INTO CURSOR actactan READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0
|
||||
IF llRul
|
||||
IF USED('rul_temp')
|
||||
USE IN RUL_TEMP
|
||||
ENDIF
|
||||
SELECT * FROM trul INTO CURSOR RUL_TEMP READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN RUL_TEMP_OBINV
|
||||
ENDIF
|
||||
SELECT * FROM trul_obinv INTO CURSOR RUL_TEMP_OBINV READWRITE
|
||||
REPLACE ALL id_util WITH gnIdUtil, sters WITH 0
|
||||
ENDIF
|
||||
lnSucces = OSCRIE_IN_FISIERE(0, .T., llRul)
|
||||
STRTOFILE(' OSCRIE_IN_FISIERE(0,...) => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
|
||||
IF lnSucces > 0
|
||||
lcSql = [begin pack_contafin.finalizeaza_modificare_nota(?pnLuna,?pnAn,?pdDataOra,] + ALLTRIM(STR(lnIdSet)) + [,] + ;
|
||||
ALLTRIM(STR(lnCod)) + [,] + ALLTRIM(STR(lnIdFact)) + [,] + ALLTRIM(STR(lnIdfactd)) + [,?gnIdUtil); end;]
|
||||
lnSucces = IIF(goExecutor.oExecuta(lcSql), 1, -1)
|
||||
STRTOFILE(' finalizeaza_modificare_nota => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
|
||||
IF lnSucces > 0 AND "OFACTURARE_EDITARE" $ UPPER(SET("Procedure")) AND USED('tvanz') AND RECCOUNT('tvanz') = 1
|
||||
llBlocExecutat = .T.
|
||||
lnSucces = IIF(ScrieArticoleFacturaEditate(tvanz.id_vanzare, 'tvd', 'tvanz'), 1, -1)
|
||||
STRTOFILE(' ScrieArticoleFacturaEditate => ' + TRANSFORM(lnSucces) + CHR(13) + CHR(10), tcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' ATENTIE: blocul ScrieArticoleFacturaEditate NU s-a executat' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
|
||||
IF MyInchideTranzactie(IIF(lnSucces < 0, 2, 1))
|
||||
STRTOFILE(' tranzactie inchisa cu ' + IIF(lnSucces < 0, 'ROLLBACK', 'COMMIT') + CHR(13) + CHR(10), tcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' FAIL la inchiderea tranzactiei' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
ELSE
|
||||
STRTOFILE(' FAIL: deschiderea tranzactiei a esuat' + CHR(13) + CHR(10), tcLog, 1)
|
||||
ENDIF
|
||||
CATCH TO loExc
|
||||
STRTOFILE(' EXCEPTIE in lantul de scriere: ' + TRANSFORM(loExc.ErrorNo) + ' [' + loExc.Message + '] ' + ;
|
||||
loExc.Procedure + ':' + TRANSFORM(loExc.LineNo) + ' -> ROLLBACK' + CHR(13) + CHR(10), tcLog, 1)
|
||||
lnSucces = -99
|
||||
MyInchideTranzactie(2)
|
||||
ENDTRY
|
||||
|
||||
DO asserteaza WITH lcEtapa + ': blocul ScrieArticoleFacturaEditate s-a executat pe aceasta cale (garda satisfacuta)', llBlocExecutat, TRANSFORM(llBlocExecutat)
|
||||
DO asserteaza WITH lcEtapa + ': lantul complet a reusit (COMMIT)', lnSucces > 0, 'lnSucces=' + TRANSFORM(lnSucces)
|
||||
DO asserteaza WITH lcEtapa + ': verificarile de stoc de la emitere NU s-au declansat (niciun mesaj afisat)', EMPTY(gcMockUltimMesaj), '[' + gcMockUltimMesaj + ']'
|
||||
|
||||
IF USED('actactan')
|
||||
USE IN actactan
|
||||
ENDIF
|
||||
IF USED('tact')
|
||||
USE IN tact
|
||||
ENDIF
|
||||
IF USED('rul_temp')
|
||||
USE IN rul_temp
|
||||
ENDIF
|
||||
IF USED('trul')
|
||||
USE IN trul
|
||||
ENDIF
|
||||
IF USED('rul_temp_obinv')
|
||||
USE IN rul_temp_obinv
|
||||
ENDIF
|
||||
IF USED('trul_obinv')
|
||||
USE IN trul_obinv
|
||||
ENDIF
|
||||
IF USED('crsArticoleFactura')
|
||||
USE IN crsArticoleFactura
|
||||
ENDIF
|
||||
IF USED('tvd')
|
||||
USE IN tvd
|
||||
ENDIF
|
||||
IF USED('tvanz')
|
||||
USE IN tvanz
|
||||
ENDIF
|
||||
|
||||
IF lnSucces <= 0
|
||||
STRTOFILE(' scrierea nu s-a produs - fara verificari dupa' + CHR(13) + CHR(10), tcLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*-- 8) verificarile de dupa commit, comune ambelor puncte de intrare
|
||||
DO VerificaDupaEditare WITH tnIdVanzare, lcEtapa, lnCodInainte, lnIdFactInainte, lnTotFtvaInainte, lnTotTvaInainte, ;
|
||||
lnTotCtvaInainte, lnNrActiveInainte, lnActBaseline, lnRulBaseline, pnAn, pnLuna, tcLog
|
||||
ENDPROC
|
||||
|
||||
|
||||
*-- orchestreaza cele doua editari (ROAFACTURARE, apoi registrul jurnal ROACONT) pe acelasi document,
|
||||
*-- identificat exclusiv prin id_vanzare (VANZARI.COD se realoca la fiecare salvare, deci a doua
|
||||
*-- editare porneste automat de pe cod-ul lasat de prima)
|
||||
PROCEDURE VerificaDocumentMatriceS8
|
||||
LPARAMETERS tnIdVanzare, tcSursa, tcLog
|
||||
|
||||
STRTOFILE(CHR(13) + CHR(10) + '###### document id_vanzare=' + TRANSFORM(tnIdVanzare) + ' [' + tcSursa + '] ######' + CHR(13) + CHR(10), tcLog, 1)
|
||||
|
||||
DO EditeazaDinRoafacturare WITH tnIdVanzare, tcSursa, tcLog
|
||||
DO EditeazaDinRegistruJurnal WITH tnIdVanzare, tcSursa, tcLog
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
Reference in New Issue
Block a user