diff --git a/clase/anaf_efactura.vc2 b/clase/anaf_efactura.vc2 index bb2921c..99b04cc 100644 --- a/clase/anaf_efactura.vc2 +++ b/clase/anaf_efactura.vc2 @@ -12067,18 +12067,31 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" ENDPROC PROCEDURE actualizeazacontoare - LOCAL loCoada, loContor + Thisform.LockScreen = .T. + LOCAL loCoada, loContor, lcFiltruVechi, lnRecnoVechi SELECT crsFacturi + *!* filtrul se scoate doar cat se numara si se pune inapoi ca atare: o bifa nu schimba apartenenta la filtru, deci nu e nevoie de reconstruirea lui + lcFiltruVechi = Filter() + lnRecnoVechi = Recno('crsFacturi') SET FILTER TO loCoada = Createobject('CoadaContabilizareEF') loContor = loCoada.ContorBifate('crsFacturi') - Thisform.AplicaFiltruDeCompletat() + SELECT crsFacturi + If !Empty(m.lcFiltruVechi) + SET FILTER TO &lcFiltruVechi + Endif + Try + Go m.lnRecnoVechi + Catch + Go Top + Endtry This.lblContorBifate.Caption = Alltrim(Str(loContor.nGata)) + ' din ' + Alltrim(Str(loContor.nTotal)) + ' gata de import - ' + Alltrim(Str(loContor.nBifate)) + ' bifate - ' + Alltrim(Transform(loContor.nSuma, '999,999,999.99')) + ' lei' + IIF(loContor.nIndividual > 0, ' - ' + Alltrim(Str(loContor.nIndividual)) + ' se importa doar individual', '') This.chkDeCompletat.Caption = ALLTRIM(IIF(EMPTY(NVL(This.chkDeCompletat.Tag,'')), This.chkDeCompletat.Caption, This.chkDeCompletat.Tag)) + IIF((loContor.nTotal - loContor.nGata) > 0, ' (' + ALLTRIM(STR(loContor.nTotal - loContor.nGata)) + ')', '') This.chkCuGestiune.Caption = ALLTRIM(IIF(EMPTY(NVL(This.chkCuGestiune.Tag,'')), This.chkCuGestiune.Caption, This.chkCuGestiune.Tag)) + IIF(loContor.nGestiune > 0, ' (' + ALLTRIM(STR(loContor.nGestiune)) + ')', '') This.Cmd_executa1.Caption = Iif(loContor.nImport > 1, '\ 0, '\ 0 REPLACE ales WITH 1 ENDIF ENDIF @@ -15300,6 +15313,7 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" LPARAMETERS nColIndex If Inlist(This.RowColChange, 1, 3) + Thisform.LockScreen = .T. Local lnIdVechi, lnRecnoNou lnIdVechi = 0 If Used('crsDetaliiFacturi') @@ -15324,12 +15338,18 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" Thisform.CompleteazaFactura() && cap factura Thisform.actualizeaza_grid2() Thisform.CompleteazaDetaliiFactura() && detalii factura + Thisform.LockScreen = .F. Endif ENDPROC PROCEDURE grdFacturi.cAles._checkbox1.InteractiveChange IF Used('crsFacturi') And !Eof('crsFacturi') + *!* bifa e permisa doar pe randuri eligibile sau deja importate (anulare in lot) + IF This.Value = 1 And Nvl(crsFacturi.eligibil_lot,1) = 0 And Nvl(crsFacturi.id_fact,0) = 0 + This.Value = 0 + RETURN + ENDIF REPLACE ales WITH IIF(This.Value=1,1,0) IN crsFacturi ENDIF Thisform.ActualizeazaContoare() @@ -15340,35 +15360,6 @@ DEFINE CLASS frm_import_efactura AS _frmbase OF "_frm_base.vcx" This.ToolTipText = IIF(EMPTY(NVL(crsFacturi.motiv_lot,'')), '', ALLTRIM(crsFacturi.motiv_lot)) ENDPROC - PROCEDURE grdFacturi.cAles._checkbox1.When - RETURN (NVL(crsFacturi.eligibil_lot,1) # 0) - ENDPROC - - PROCEDURE grdFacturi.MouseMove - Lparameters nButton, nShift, nXCoord, nYCoord - Local lnWhere, lnRelRow, lnRelCol, lnRecnoSalvat, lnDelta, lcTip - - This.GridHitTest(m.nXCoord, m.nYCoord, @lnWhere, @lnRelRow, @lnRelCol) - lcTip = '' - If m.lnWhere = 3 And Used('crsFacturi') - lnRecnoSalvat = Recno('crsFacturi') - lnDelta = m.lnRelRow - This.ActiveRow - Try - Select crsFacturi - Skip m.lnDelta - If !Bof() And !Eof() - lcTip = Alltrim(Nvl(motiv_lot,'')) - Endif - Catch - Endtry - Try - Go m.lnRecnoSalvat In crsFacturi - Catch - Endtry - Endif - This.ToolTipText = m.lcTip - ENDPROC - PROCEDURE Lb_titlu_alb_b121.RightClick This.Parent.chkTest.Visible = .T. ENDPROC diff --git a/docs/README.md b/docs/README.md index 4ac4164..df3fc73 100644 --- a/docs/README.md +++ b/docs/README.md @@ -46,6 +46,7 @@ atingi zona X, citeste fisierul Y"). Restul se deschid doar la declansator. | `sold-neexigibil-reportat-jc2007-jv2007.md` | interogari pe sold TVA neexigibil | | `view-uri-efactura.md` | view-urile `ANAF_VEFACTURA_*` si potrivirea eFacturilor cu registrul de TVA | | `machete-note-xrequest-explicatii.md` | schimbi ce campuri cere o operatie la introducere (`XREQUEST`/`XITEMS`/`XNOTE`); explicatie, explicatia4, explicatia5 | +| `incasari-plati-valuta-diferita.md` | incasare/plata in alta valuta decat a facturii (seturile 10600-10603); ce se pune la valute si cursuri | | `email-thunderbird.md` | citirea mailurilor de pe conturile romfast | `onboarding\` — proceduri rulate o singura data per proiect (inrolare in fluxul git-text, diff --git a/docs/incasari-plati-valuta-diferita.md b/docs/incasari-plati-valuta-diferita.md new file mode 100644 index 0000000..ee437d5 --- /dev/null +++ b/docs/incasari-plati-valuta-diferita.md @@ -0,0 +1,40 @@ +# Incasare/plata intr-o valuta diferita de cea a facturii + +Cazul: factura emisa in EUR, clientul vireaza GBP. Meniu: Trezorerie > "3. Banca in valuta" > +Incasari > "Incasari clienti valuta diferita 411" (`Meniuri\banca3.mn2:53`) -> `lans(10600)`. +Seturile 10600-10603 acopera banca valuta/lei x incasare/plata (`COMUN\programe\pmenu.prg:11-15`). +Macheta nu e o forma fixa: e generata din Oracle (`XREQUEST`/`XITEMS`) prin `actbaza2007` +(`COMUN\clase\baza.vc2:3352`) - vezi `machete-note-xrequest-explicatii.md`. + +## Ce se completeaza (leul e pivot: ambele cursuri sunt fata de RON) + +| Camp `poAct` | Ce e | In exemplu | +|---|---|---| +| `id_valuta` / `nume_val` | valuta **facturii** | EUR | +| `id_valuta2` / `nume_val2` | valuta in care se **incaseaza efectiv** | GBP | +| `suma_3` | cursul valutei facturii | curs EUR/RON al zilei | +| `suma_22` | suma incasata, in valuta de incasare | suma din extras, in GBP | +| `suma_32` | cursul valutei de incasare | curs GBP/RON al zilei | +| `suma_22a` | **calculat**: suma convertita in valuta facturii | echivalent EUR | + +`suma_2` (itemul 11) e superseded: daca setul contine itemul 81 (`suma_22`), itemul 11 nu mai +apare si `poAct.suma_2` nu exista. Initializarile: `COMUN\programe\pmenu.prg:376-387`. + +## Invariante + +- Lista de facturi e filtrata `i.id_valuta IN (poAct.id_valuta, poAct.id_valuta2)` + (`COMUN\clase\baza.vc2:10552`), deci **primul camp trebuie sa fie valuta facturii**, altfel + factura nu apare. +- Soldul afisat in formularul de alegere e **mereu in valuta facturii** (coloanele `*VAL*` din + `vireg_parteneri`, `baza.vc2:10593`). Nu se converteste vizual in valuta incasata - nu se + compara cu suma din extras. +- Conversia trece prin lei: `suma_22 = (suma_2 * suma_3) / suma_32` + (`COMUN\clase\baza.vc2:10855-10862`, `Case '.SUMA_32'$M`). Ce nu acopera `suma_22a` din soldul + facturii ramane sold sau iese ca diferenta de curs - soldul nu se "ajusteaza", raportul + cursurilor decide. + +## Nelamurit + +Textul exact al etichetelor vazute de utilizator e in `XITEMS.LABEL_ITEM` (Oracle), nu in codul +VFP; semantica de mai sus e din cod. Daca macheta nu cere un curs pentru valuta facturii, +verifica itemii setului 10600 in `XREQUEST`.