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:
@@ -108,6 +108,26 @@ Cand un bug apare "de azi", compara cu clasa veche fara a atinge SVN:
|
||||
programului ruleaza, doar linia aceea lipseste din `.fxp` si da eroare 16 cand se ajunge la
|
||||
ea. De aceea SQL-ul lung se scrie cu `TEXT TO <var> [TEXTMERGE] NOSHOW ... ENDTEXT` sau
|
||||
concatenat. Verificare: `awk 'length($0) > 260 {print NR": "length($0)}' fisier.prg`.
|
||||
- **Linie de COD (nu doar literal string) prea lunga intr-o metoda de clasa `.vc2` poate
|
||||
arunca eroarea 11 ("Function argument value, type, or count is invalid") pe PRIMA
|
||||
instructiune a metodei, nu pe linia vinovata** - simptom complet derutant. Se exclude prin
|
||||
diagnostic: aceeasi expresie merge normal la nivel de program, in alta clasa, intr-o
|
||||
subclasa cu metoda noua, si pe instanta virgina - deci nu tine de tipul datelor, de context
|
||||
sau de clasa parinte. Reper practic: linii preexistente >200 caractere intr-o clasa mare
|
||||
functioneaza pana la ~250; pragul real e in jur de 255, ca la literalii de string. Remediu:
|
||||
sparge expresia in pasi cu variabile locale. Verificare (comparat intre fisierul curent si
|
||||
un backup anterior):
|
||||
```powershell
|
||||
$l=[IO.File]::ReadAllLines($p,[Text.Encoding]::GetEncoding(28591))
|
||||
for($i=0;$i -lt $l.Length;$i++){ if($l[$i].Length -gt 200){ "{0}: len={1}" -f ($i+1), $l[$i].Length } }
|
||||
```
|
||||
- **Un UDF care citeste campul curent (`Nvl(camp,0)=1` sau similar) nu e de incredere intr-o
|
||||
clauza de filtrare** (`SELECT ... WHERE`, `LOCATE FOR`, `SCAN FOR`, `DELETE FOR`) - pointerul
|
||||
nu e garantat pe randul evaluat la fiecare apel, deci filtrul devine practic o valoare
|
||||
constanta (fie nu se declanseaza niciodata, fie loveste tot). Simptome vazute: o comasare de
|
||||
randuri care nu se mai producea deloc; un test agatat. Remediu: in clauze de filtrare
|
||||
foloseste expresia INLINE pe camp (`Nvl(camp,0) <> 1`); pastreaza helper-ul doar in cod
|
||||
procedural (`If`, `Replace` pe randul curent), unde pointerul e garantat pozitionat.
|
||||
|
||||
## 7. Capcane la SCRIEREA scriptului de test
|
||||
|
||||
|
||||
Reference in New Issue
Block a user