Achizitie din import: valuta pe documente secundare (DVI)
Rundele 1-7: golire campuri valuta la debifare in_valuta (cu suma_doc_val), recalcul din curs pe tot documentul (cu refacere suma_doc/suma_doc_val), spargere document principal in valuta (suma_val doar pe randuri in valuta), TVA repartizat din baza in valuta pe import, iar la recalculeaza()/procente per rand sumele in valuta ale documentelor participante aflate in alta valuta decat a principalei se convertesc prin lei (suma/curs principal), nu se mai aduna direct la baza in valuta (100 USD nu mai devine 100 EUR). Teste UI: test_valuta_dvi_usd (scenariu mixt EUR+USD, 8/8 PASS), test_debifare_invaluta (64/64 PASS), test_repro_valuta_dblclick, mock_caut_valuta; regresie test_scenariu_dvi_complet PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KXsyJZBek1e9RvyLAQkoCx
This commit is contained in:
@@ -11225,11 +11225,11 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
Sum suma For Inlist(tip_rand,'B','S') And !Inlist(scd,'4426','4428') And !Empty(id_jtva_coloana) To lnBazaLei
|
||||
Sum suma For tip_rand = 'T' And !Empty(id_jtva_coloana) To lnTvaLei
|
||||
Endif
|
||||
Sum suma_val For Inlist(tip_rand,'B','S') And !Inlist(scd,'4426','4428') And !Empty(id_jtva_coloana) And in_valuta = 1 And participa_valuta To lnBazaVal
|
||||
Sum Round(suma/This.oact.Curs, gnPval) For Inlist(tip_rand,'B','S') And !Inlist(scd,'4426','4428') And !Empty(id_jtva_coloana) And in_valuta = 0 And participa_valuta To lnBazaVal2
|
||||
Sum suma_val For Inlist(tip_rand,'B','S') And !Inlist(scd,'4426','4428') And !Empty(id_jtva_coloana) And in_valuta = 1 And Nvl(id_valuta,0) = Nvl(This.oact.id_valuta,0) And participa_valuta To lnBazaVal
|
||||
Sum Round(suma/This.oact.Curs, gnPval) For Inlist(tip_rand,'B','S') And !Inlist(scd,'4426','4428') And !Empty(id_jtva_coloana) And (in_valuta = 0 Or Nvl(id_valuta,0) <> Nvl(This.oact.id_valuta,0)) And participa_valuta To lnBazaVal2
|
||||
lnBazaVal = lnBazaVal + lnBazaVal2
|
||||
Sum suma_val For tip_rand = 'T' And !Empty(id_jtva_coloana) And in_valuta = 1 And participa_valuta To lnTvaVal
|
||||
Sum Round(suma/This.oact.Curs, gnPval) For tip_rand = 'T' And !Empty(id_jtva_coloana) And in_valuta = 0 And participa_valuta To lnTvaVal2
|
||||
Sum suma_val For tip_rand = 'T' And !Empty(id_jtva_coloana) And in_valuta = 1 And Nvl(id_valuta,0) = Nvl(This.oact.id_valuta,0) And participa_valuta To lnTvaVal
|
||||
Sum Round(suma/This.oact.Curs, gnPval) For tip_rand = 'T' And !Empty(id_jtva_coloana) And (in_valuta = 0 Or Nvl(id_valuta,0) <> Nvl(This.oact.id_valuta,0)) And participa_valuta To lnTvaVal2
|
||||
lnTvaVal = lnTvaVal + lnTvaVal2
|
||||
|
||||
*!* baza documentului principal (nr_doc minim dintre B/S), pentru procent_val, procent_lei (intern) si procentele pe rand
|
||||
@@ -11710,7 +11710,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
Replace explicatia5 With Iif(in_valuta = 1 Or participa_valuta, '100.00', '')
|
||||
Else
|
||||
Replace explicatia4 With Iif(This.nbazaprincipala_lei <> 0, Allt(Str(suma/This.nbazaprincipala_lei*100,6,2)), '')
|
||||
lnValRandProc = Iif(in_valuta = 1, suma_val, Round(suma/This.oact.Curs, gnPval))
|
||||
lnValRandProc = Iif(in_valuta = 1 And Nvl(id_valuta,0) = Nvl(This.oact.id_valuta,0), suma_val, Round(suma/This.oact.Curs, gnPval))
|
||||
Replace explicatia5 With Iif(This.nbazaprincipala_val <> 0, Allt(Str(lnValRandProc/This.nbazaprincipala_val*100,6,2)), '')
|
||||
Endif
|
||||
Endscan
|
||||
@@ -11889,7 +11889,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
If This.lIntern
|
||||
Thisform.creeaza_rand_s(tcDocKey, cont, baza_lei, 0, loBaza, acont)
|
||||
Else
|
||||
Thisform.creeaza_rand_s(tcDocKey, cont, Round(baza_val*lnCurs,gnPc), baza_val, loBaza, acont)
|
||||
Thisform.creeaza_rand_s(tcDocKey, cont, Round(baza_val*lnCurs,gnPc), Iif(loBaza.in_valuta = 1, baza_val, 0), loBaza, acont)
|
||||
Endif
|
||||
Select crsGrupCont
|
||||
Endscan
|
||||
@@ -12053,6 +12053,9 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
scc With crsGrupCota.scc, ascc With crsGrupCota.ascc, ;
|
||||
suma_val With Round(crsGrupCota.baza_val * lnCotaCrt / 100, gnPval)
|
||||
Replace suma With Round(suma_val * lnCurs, gnPc)
|
||||
If !llValuta
|
||||
Replace suma_val With 0
|
||||
Endif
|
||||
Endif
|
||||
If lnIdJtvaCrt <> lnIdJtvaOrig
|
||||
Select jtva_coloane2
|
||||
@@ -12080,9 +12083,13 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
Select Sum(baza_lei) As tot_lei, Sum(baza_val) As tot_val, Count(*) As nr_grup ;
|
||||
From crsGrupCota Where cota_tva == lnCotaCrt Into Cursor crsBazaCota NOFILTER
|
||||
If crsBazaCota.nr_grup > 1
|
||||
If This.lIntern
|
||||
If This.lIntern Or !llValuta
|
||||
Select Sum(suma) As s From introdc Where doc_key == tcDocKey And tip_rand == 'T' And ptva == lnCotaCrt And mod_manual <> 1 Into Cursor crsSumTCota NOFILTER
|
||||
lnRestLei = Round(crsBazaCota.tot_lei * lnCotaCrt / 100, gnPc) - Round(Nvl(crsSumTCota.s,0), gnPc)
|
||||
If This.lIntern
|
||||
lnRestLei = Round(crsBazaCota.tot_lei * lnCotaCrt / 100, gnPc) - Round(Nvl(crsSumTCota.s,0), gnPc)
|
||||
Else
|
||||
lnRestLei = Round(Round(crsBazaCota.tot_val * lnCotaCrt / 100, gnPval) * lnCurs, gnPc) - Round(Nvl(crsSumTCota.s,0), gnPc)
|
||||
Endif
|
||||
Use In crsSumTCota
|
||||
If lnRestLei <> 0
|
||||
lnMaxAbs = -1
|
||||
@@ -12447,22 +12454,61 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
*!* cursul editat se scrie explicit (ca la cSumaVal.Valid - dupa amessagebox grid-ul
|
||||
*!* nu-l mai scria in camp) si se copiaza pe randul de TVA pereche; apoi ofer
|
||||
*!* recalcularea sumei in lei din suma in valuta, ca la modificarea sumei in valuta
|
||||
Local lnSumaDinVal, lnRaspuns
|
||||
*!* 24.07.2026 claude - recalcularea din curs se aplica pe toate randurile documentului si reface totalurile suma_doc/suma_doc_val
|
||||
Local lnSumaDinVal, lnRaspuns, lcDocKeyC, lnRecC, lnCntS, lnSLei, lnSVal
|
||||
If This.Value # 0
|
||||
Select introdc
|
||||
Replace curs With This.Value
|
||||
Thisform.copiaza_valoare([curs])
|
||||
If in_valuta = 1 And suma_val # 0
|
||||
lnSumaDinVal = Round(suma_val * This.Value, gnPC)
|
||||
If in_valuta = 1 And !Empty(Nvl(introdc.doc_key,''))
|
||||
lcDocKeyC = introdc.doc_key
|
||||
lnRecC = Recno('introdc')
|
||||
lnRaspuns = 6
|
||||
If suma <> 0 And suma <> lnSumaDinVal
|
||||
lnRaspuns = amessagebox("Suma in lei difera de suma in valuta transformata in lei!" + CHR(13) + CHR(10) + ;
|
||||
"Doriti recalcularea sumei in lei?",4+32,"Diferente sume")
|
||||
Locate For doc_key == lcDocKeyC And in_valuta = 1 And suma_val # 0 And suma <> 0 And suma <> Round(suma_val * This.Value, gnPC)
|
||||
If Found()
|
||||
lnRaspuns = amessagebox("Suma in lei difera de suma in valuta transformata in lei!" + Chr(13) + Chr(10) + ;
|
||||
"Doriti recalcularea sumelor in lei pe document?",4+32,"Diferente sume")
|
||||
Endif
|
||||
If lnRaspuns = 6
|
||||
Replace suma With lnSumaDinVal
|
||||
Scan For doc_key == lcDocKeyC And in_valuta = 1 And suma_val # 0
|
||||
Replace suma With Round(suma_val * This.Value, gnPC)
|
||||
Endscan
|
||||
Calculate Cnt(), Sum(suma), Sum(suma_val) For doc_key == lcDocKeyC And tip_rand == 'S' To lnCntS, lnSLei, lnSVal
|
||||
If lnCntS = 0
|
||||
Locate For doc_key == lcDocKeyC And tip_rand == 'B'
|
||||
If Found()
|
||||
lnCntS = -1
|
||||
lnSLei = suma
|
||||
lnSVal = suma_val
|
||||
Endif
|
||||
Else
|
||||
Locate For doc_key == lcDocKeyC
|
||||
Endif
|
||||
If lnCntS <> 0
|
||||
Replace suma_doc With lnSLei, suma_doc_val With lnSVal
|
||||
Thisform.copiaza_valoare([suma_doc])
|
||||
Thisform.copiaza_valoare([suma_doc_val])
|
||||
Endif
|
||||
Endif
|
||||
Try
|
||||
Go lnRecC In introdc
|
||||
Catch
|
||||
Go Top In introdc
|
||||
Endtry
|
||||
Thisform.do_executa
|
||||
Else
|
||||
If in_valuta = 1 And suma_val # 0
|
||||
lnSumaDinVal = Round(suma_val * This.Value, gnPC)
|
||||
lnRaspuns = 6
|
||||
If suma <> 0 And suma <> lnSumaDinVal
|
||||
lnRaspuns = amessagebox("Suma in lei difera de suma in valuta transformata in lei!" + Chr(13) + Chr(10) + ;
|
||||
"Doriti recalcularea sumei in lei?",4+32,"Diferente sume")
|
||||
Endif
|
||||
If lnRaspuns = 6
|
||||
Replace suma With lnSumaDinVal
|
||||
Endif
|
||||
Thisform.do_executa
|
||||
Endif
|
||||
Endif
|
||||
Endif
|
||||
ENDPROC
|
||||
@@ -12516,7 +12562,21 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Grid1.cInValuta.Check1.Valid
|
||||
*!* 24.07.2026 claude - la debifare se sterg valuta, suma in valuta si cursul pe liniile documentului
|
||||
Select introdc
|
||||
Replace in_valuta With This.Value
|
||||
Thisform.copiaza_valoare([in_valuta])
|
||||
If This.Value = 0
|
||||
Replace id_valuta With 0, nume_val With '', curs With 0, suma_val With 0, suma_doc_val With 0
|
||||
Thisform.copiaza_valoare([id_valuta])
|
||||
Thisform.copiaza_valoare([nume_val])
|
||||
Thisform.copiaza_valoare([curs])
|
||||
Thisform.copiaza_valoare([suma_val])
|
||||
Thisform.copiaza_valoare([suma_doc_val])
|
||||
Endif
|
||||
thisform.do_executa
|
||||
Thisform.lSyncPending = .T.
|
||||
Thisform.tmrSync.Interval = 1
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Grid1.cNract.Text1.Valid
|
||||
@@ -12664,6 +12724,8 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
|
||||
PROCEDURE Grid1.cParticipaValuta.Check1.Valid
|
||||
thisform.do_executa
|
||||
Thisform.lSyncPending = .T.
|
||||
Thisform.tmrSync.Interval = 1
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Grid1.cScc.Text1.GotFocus
|
||||
@@ -12888,6 +12950,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
|
||||
Replace id_valuta With loCauta.id_valuta, nume_val With Alltrim(loCauta.nume_val)
|
||||
Thisform.copiaza_valoare([id_valuta])
|
||||
Thisform.copiaza_valoare([nume_val])
|
||||
This.Value = introdc.nume_val
|
||||
Thisform.grid1.Refresh()
|
||||
Endif
|
||||
ENDPROC
|
||||
|
||||
Reference in New Issue
Block a user