achizitie import: TVA DVI cu valuta proprie, discount financiar, cote multiple

- TVA-ul de pe DVI poate avea valuta si curs proprii, diferite de ale facturii
  (rand "protejat": rand_dvi/valuta_proprie pe introdc, sparge_tva_protejat).
- Discount financiar pe factura: rand tip_rand='G' (401 = 767), TVA calculat pe
  baza diminuata, marfa si preturile articolelor pe valoarea integrala.
- Factura multi-cota: randurile S, G si T se sparg pe cotele articolelor, cu
  explicatia TVA din familia coloanei si alinierea T -> S.
- Teste noi in utile/Teste/achizitie_import (discount, DVI, cote, e2e).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8
This commit is contained in:
2026-08-01 09:32:35 +03:00
parent 704e25e190
commit 832fea4913
62 changed files with 12071 additions and 575 deletions

View File

@@ -80,6 +80,13 @@
*!* In xsets s-a modificat 21% de la 01.08.2025
*!* 28.07.2026
*!* marius.mutu
*!* achizitie_import - blocul de TVA din DVI poate avea valuta si curs proprii, diferite de ale
*!* facturii (inclusiv fara valuta), iar factura poate avea discount financiar; cursorul introdc
*!* primeste coloanele rand_dvi si valuta_proprie.
#Define CRLF Chr(13) + Chr(10)
********* INCEPUT: lans_Nir_Bon ***********
@@ -1557,8 +1564,8 @@ Procedure achizitie_import
poAct.id_valuta As id_valuta, poAct.Curs As Curs, poAct.nume_val As nume_val, poAct.dataact as dataact, poAct.fdoc as fdoc, poAct.id_fdoc as id_fdoc, 0 as se_scrie, poAct.tva_incasare as tva_incasare, ;
16777215 As doc_color, Space(10) As doc_label, ;
'B' As tip_rand, Space(80) As doc_key, 00000000 As nr_doc, ;
00000000000000.0000 As suma_doc, 00000000000000.0000 As suma_doc_val, 0 As mod_manual, ;
Space(20) As scd_orig, Space(20) As ascd_orig ;
00000000000000.0000 As suma_doc, 00000000000000.0000 As suma_doc_val, 0 As mod_manual, 0 As expl_manual, ;
Space(20) As scd_orig, Space(20) As ascd_orig, 0 As rand_dvi, 0 As valuta_proprie ;
FROM cnote_contabile N ;
WHERE N.id_set = poAct.id_set ;
INTO Cursor introdc Readwrite Order By ordine
@@ -1615,7 +1622,7 @@ Procedure achizitie_import
*!* 16.07.2026 claude - F1: index unic de sortare pe introdc, o singura data, inainte de Show
*!* (niciodata re-INDEX ulterior sub grid - vezi docs/propuneri_import_unificat.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='T','3', tip_rand='D','4', '5') + Padr(Nvl(scd,''),10) TAG ord_doc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
SELECT introdc