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:
@@ -535,22 +535,21 @@ TRY
|
||||
DO ArLog WITH 'INFO verificare2: cmesajsync gol -> nota SINCRONIZATA'
|
||||
ENDIF
|
||||
|
||||
*-- runda4c (spargere doar factura principala): dupa sincronizeaza(), doar documentul
|
||||
*-- principal (primul B/S din introdc, aici nract=100/RAJA) trebuie spart in randuri S (cont
|
||||
*-- 212); documentele 102 (TRANS OIL MOTO) si 103 (BIROUL VAMAL) trebuie sa ramana B/T
|
||||
*-- neatinse (regula de domeniu: articolele apartin doar facturii principale).
|
||||
LOCAL llDoc100Spart, llDoc102Nesparte, llDoc103Nesparte
|
||||
*-- lSpargeSecundare implicit .T. si documentele 102/103 sunt participante (lIntern=.F.,
|
||||
*-- id_jtva_coloana nenul): dupa sincronizeaza() se sparg TOATE documentele B/S in randuri S
|
||||
*-- pe conturile articolelor (aici doar 212), nu doar documentul principal (100/RAJA).
|
||||
LOCAL llDoc100Spart, llDoc102Spart, llDoc103Spart
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 100 AND tip_rand == 'S'
|
||||
llDoc100Spart = FOUND()
|
||||
LOCATE FOR nract = 102 AND tip_rand == 'B'
|
||||
llDoc102Nesparte = FOUND()
|
||||
LOCATE FOR nract = 103 AND tip_rand == 'B'
|
||||
llDoc103Nesparte = FOUND()
|
||||
IF llDoc100Spart AND llDoc102Nesparte AND llDoc103Nesparte
|
||||
DO ArLog WITH 'PASS verificare3 (runda4c spargere doar principala): doc 100/RAJA spart (rand S gasit), doc 102/103 raman B/T nesparte'
|
||||
LOCATE FOR nract = 102 AND tip_rand == 'S'
|
||||
llDoc102Spart = FOUND()
|
||||
LOCATE FOR nract = 103 AND tip_rand == 'S'
|
||||
llDoc103Spart = FOUND()
|
||||
IF llDoc100Spart AND llDoc102Spart AND llDoc103Spart
|
||||
DO ArLog WITH 'PASS verificare3 (lSpargeSecundare implicit): doc 100/102/103 toate sparte (rand S gasit pe fiecare)'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare3 (runda4c spargere doar principala): doc100Spart=' + TRANSFORM(llDoc100Spart) + ' (astept .T.) doc102Nesparte=' + TRANSFORM(llDoc102Nesparte) + ' (astept .T.) doc103Nesparte=' + TRANSFORM(llDoc103Nesparte) + ' (astept .T.)'
|
||||
DO ArLog WITH 'FAIL verificare3 (lSpargeSecundare implicit): doc100Spart=' + TRANSFORM(llDoc100Spart) + ' (astept .T.) doc102Spart=' + TRANSFORM(llDoc102Spart) + ' (astept .T.) doc103Spart=' + TRANSFORM(llDoc103Spart) + ' (astept .T.)'
|
||||
ENDIF
|
||||
|
||||
*========================= PAS 2: dupa sincronizeaza() =========================
|
||||
@@ -691,8 +690,8 @@ PROCEDURE CreeazaIntrodc
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
|
||||
Reference in New Issue
Block a user