#13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
This commit is contained in:
@@ -50,8 +50,34 @@
|
||||
`clase\anaf_efactura.vcx`. Motivul e de intretinere: un `.prg` se editeaza direct si diff-ul lui
|
||||
se citeste in git, pe cand codul pus ca metoda in binar trece prin FoxBin2Prg si write-back si
|
||||
se urmareste greu.
|
||||
**Scara ponytail** (plugin activ implicit pe `full`, injectat si in subagenti; `ultra` nu se
|
||||
foloseste pe cod legacy partajat): opreste-te la prima treapta care tine - 1) trebuie sa existe?
|
||||
2) exista deja (`inventar-comun.md`, `COMUN\programe`, `COMUN\clase`) -> refolosesti; 3) o
|
||||
functie VFP nativa o face; 4) se rezolva pe Oracle (view, constrangere, pachet) in loc de cod
|
||||
client; 5) o linie; 6) abia apoi minimul care merge. Scurteaza SOLUTIA, nu cititul - intai
|
||||
urmaresti fluxul real atins. Nu se simplifica niciodata: garzile pe NULL, validarile, tratarea
|
||||
erorilor, drepturile de acces, ce s-a cerut explicit.
|
||||
Abateri obligatorii fata de plugin: (a) **fara comentarii `ponytail:`** in cod (regula 2) -
|
||||
scurtatura deliberata si limita ei se noteaza in `docs\progres.md`, deci `/ponytail-debt` nu
|
||||
are ce culege aici; (b) proba unei logici noi e un script headless (regulile 4 si 8), nu
|
||||
`test_*.py`; (c) handoff-urile, rapoartele din `docs\` si patch-urile sunt output cerut
|
||||
explicit - regula "cod intai, maxim trei randuri" nu li se aplica; (d) `/ponytail-review` pe
|
||||
diff-ul rundei inainte de commit e util, dar `delete:`/`yagni:` sunt IPOTEZE, nu constatari: in
|
||||
`COMUN` apelantii sunt in toate produsele, deci cauti in tot `D:\ROA` inainte sa stergi, iar o
|
||||
garda fara caz in datele de test nu e garda moarta (regula 6); `/ponytail-audit` pe tot
|
||||
arborele nu se ruleaza aici.
|
||||
4. Testare headless (fara IDE): `vfp9.exe -A -T "<script.prg>" <param>` din PowerShell.
|
||||
Mediu, sabloane, capcane, depanare: `depanare_testare_vfp.md`.
|
||||
Rularile intermediare acopera doar familiile de teste atinse de modificarea curenta; suita
|
||||
completa, inclusiv testele de garda pe zonele vecine, se ruleaza doar la rularea finala —
|
||||
garzile exista fiindca schimbarile cad de regula in cod partajat (`COMUN`), vizibil in toate
|
||||
produsele, dar costul lor nu se plateste la fiecare rulare intermediara. Ideal, doar testele
|
||||
atinse direct (de regula 3-10), nu toata familia.
|
||||
Un test normal dureaza 1-5s — ce umfla o rulare nu e testarea, ci asteptarea unui test atarnat.
|
||||
La rulari intermediare: timeout **90s**/test (ce trece de atat e atarnat, nu lent) si pauza
|
||||
**0,5s** intre teste, nu implicitul de 12 minute / 3s, rezervat rularii finale unde chiar
|
||||
conteaza sa distingi "atarnat" de "lent". Tinta: o rulare intermediara sta in secunde-minute,
|
||||
nu ore — daca depaseste, lista e prea larga sau timeout-ul prea mare.
|
||||
5. Editare .vcx/.scx pe text (cache, cp1250 byte-safe, fidelity-check): `flux-editare-vfp-text.md`.
|
||||
Cautare in binare: `cautare_vcx_vct.md`. Versiunile `.??2` sunt instantanee, pot fi mai vechi
|
||||
decat binarul — verifica mtime inainte de concluzii; continutul real e in `.PJX`.
|
||||
@@ -61,12 +87,14 @@
|
||||
tokens/subagent), nu unul singur cu context acumulat; handoff compact pe disc. Verificarea a
|
||||
ce se intoarce si modelul de lucru (backlog de story-uri mici): `orchestrare-subagenti.md`.
|
||||
7. Conventii obligatorii, de citit cand atingi zona respectiva:
|
||||
- editezi `.vc2`/`.sc2` sau `.prg` cu diacritice (ex. `programe\ocautare.prg`) -> fisierele
|
||||
sunt **cp1250** desi antetul FoxBin2Prg declara `CPID="1252"`; Edit/Write corup TOT fisierul
|
||||
(nu doar linia atinsa) la fiecare scriere - scrie continut nou strict ASCII. Cens obligatoriu
|
||||
- editezi `.vc2`/`.sc2` sau `.prg` cu diacritice (ex. `programe\ocautare.prg`, unde `s`-urile cu
|
||||
virgula din `masina`/`si contul`/`transa` sunt octetul `0xBA`) -> fisierele sunt **cp1250**
|
||||
desi antetul FoxBin2Prg declara `CPID="1252"`; Edit/Write corup TOT fisierul (nu doar linia
|
||||
atinsa), ireversibil, la fiecare scriere - scrie continut nou strict ASCII. Cens obligatoriu
|
||||
**inainte SI dupa** fiecare editare (la stricare CRESTE, nu scade):
|
||||
`od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq -c`. Tabel
|
||||
de octeti si reparare -> `conventie_encoding_cp1252.md`;
|
||||
`od -An -tx1 <fisier> | tr ' ' '\n' | grep -v '^$' | awk '$1>"7f"' | sort | uniq -c`. Tabelul
|
||||
complet de octeti, sensul censului la stricare si procedura de recuperare din git/svn ->
|
||||
`conventie_encoding_cp1252.md`;
|
||||
- adaugi o PROPRIETATE sau o METODA noua intr-o clasa `.vc2`/`.sc2` -> `flux-editare-vfp-text.md`,
|
||||
sectiunea "Membri noi de clasa": fara intrarea `*p:`/`*m:` in `*<DefinedPropArrayMethod>`
|
||||
membrul trece fidelity-check-ul, dar VFP nu-l vede si prima salvare din IDE il sterge tacut;
|
||||
@@ -80,6 +108,8 @@
|
||||
- te conectezi la Oracle pe dev/test, alegi schema sau rulezi un script de pachet ->
|
||||
`conventie_mediu_oracle.md`;
|
||||
- garzi pe valori NULL din Oracle -> `conventie_null_vfp.md`;
|
||||
- procedura PL/SQL cu `SELECT ... INTO` chemata din VFP (linii pierdute tacut) ->
|
||||
`capcana_sqlexec_no_data_found.md`;
|
||||
- export date din Oracle -> `oracle_export.md`;
|
||||
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> `depanare-pack-update.md`;
|
||||
- modifici schema Oracle (tabele/view-uri/pachete) -> `scripturi-migrare-db.md`.
|
||||
|
||||
Reference in New Issue
Block a user