Import eFactura in lot: borderou cu ce lipseste, coada de contabilizare, alegerea contului

Borderoul tine per factura ce mai are de completat si daca are articole de gestiune
(camp gest, coloana si filtru), coada contabilizeaza in serie facturile bifate si
incheie cu un rezumat, iar contul de furnizor/client se alege din planul de conturi.
Cheia normalizata de articol, rezolvarea automata a partenerului si anularea in bloc
intra tot aici. Pozitia in lista se pastreaza peste reaplicarea filtrului.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Aroafxp4z8bmM5oVECZRXY
This commit is contained in:
2026-09-09 21:35:07 +03:00
parent 8e022d332e
commit 940bb39701
48 changed files with 10602 additions and 519 deletions

View File

@@ -127,6 +127,11 @@ Cand un bug apare "de azi", compara cu clasa veche fara sa atingi SVN:
- **`SET PROCEDURE TO x.prg`**: in `.exe` se rezolva din modulele compilate (orice `.prg` din
`.pjx`), din IDE doar prin `SET PATH`. O cale lipsa din `SET PATH` se vede deci doar necompilat,
iar in `Try` trece tacut.
- **`INKEY(0, ...)` nu e un poll, e asteptare NELIMITATA a unei taste.** Pentru "a apasat
utilizatorul ESC?" fara sa blochezi, foloseste timeout mic (`INKEY(0.01, 'H')`). Cat timp
`INKEY(0)` asteapta, timerele VFP nu se declanseaza, deci un dialog/o bucla blocata asa nu poate
fi deblocata din interiorul procesului - in rulare headless arata ca un proces viu care nu mai
scrie in log.
## 7. Capcane la SCRIEREA scriptului de test
@@ -166,3 +171,10 @@ Cand un bug apare "de azi", compara cu clasa veche fara sa atingi SVN:
folosesti efectiv: `TYPE('loO.Objects.Count') = 'N'` e `'U'` daca lantul punctat nu exista,
deci e si suficient, si independent de litera de tip. Aceeasi prudenta la `TYPE('loO.Value')`
(tipul variaza cu continutul) si `TYPE('loO.Visible')`.
- **Optiunile citite ca globali (`gn<NUME>`/`gc<NUME>`) nu se reimprospateaza din `scrie_optiune()`.**
`scrie_optiune()` + `actualizeaza_optiuni()` scriu tabela `OPTIUNI` si cache-ul `crsOptiuni` (de unde
citeste `citeste_optiune()`), dar globalii sunt creati o singura data, la login/schimbare de firma
(`oinit_optiuni.prg`, `actualizeaza_optiuni_program`/`optiuni_firma`). Un test care schimba o optiune
si apoi apeleaza cod care citeste globalul masoara valoarea veche, fara niciun semn de eroare.
Verifica intai pe ce cale citeste codul testat; daca e globalul, seteaza-l direct in test (si
restaureaza-l la final), nu prin `scrie_optiune()`.