Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git, nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de cercetare pe care se sprijina modificarile din cod. O stergere acolo era definitiva. Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele fisierelor de test la care se refereau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
16 KiB
S8 — Creare documente lipsa (aviz, factura din aviz, factura din contract) pe fluxul REAL
OPRESTE-TE — SARCINA E INCHISA, 10.08.2026 ora ~12:35
NU relua depanarea crash-ului
frm_alte_datesi NU mai rulacreeaza_documente_s8.prg. Scopul acestui raport — sa EXISTE cele trei documente — e deja atins pe alta cale: Marius le-a emis manual din aplicatie, prin fluxul real (ceea ce satisface regula „niciodataINSERTdirect" mai bine decat orice harness).
Tip sursa id_vanzarecodid_facttotaluri aviz (tip 22) 1052 1140908 8009677 271.17 / 56.94 / 328.11 factura din aviz (tip 4) 1054 1140910 8009679 252.07 / 52.93 / 305.00 factura din contract (tip 2) 1055 1140911 8009680 200.00 / 42.00 / 242.00 Verificate prin
sqlplusde orchestrator: toatedata_act = 10.08.2026,sters = 0, cu linii, noteACTsi rulaje. Impreuna cu1048(lista de preturi), matricea S8 e completa pe toate patru tipurile de sursa.Fiecare rulare a harness-ului strica date. Rularea de la 12:28:31 a creat
1056si1057— documente malformate: totaluri0/0/0,RULgol, si acelasi numarSSS/14alocat la toti trei pasii (log liniile 12, 23, 29), deci cu numar duplicat. Ele nu se folosesc in matrice si urmeaza sa fie sterse prin aplicatie. Nu mai adauga altele.Ce a mai ramas din S8 nu e automatizarea, ci matricea: cele patru documente (
1048 / 1052 / 1054 / 1055) editate fiecare de doua ori — o data din ROAFACTURARE, o data din registrul jurnal ROACONT — cu verificarile dinplan_06_editare_factura.md:282-291. Starea la zi e indocs\progres.md, sectiunea „S8 — DOCUMENTELE EXISTA".De pastrat din investigatia de mai jos, indiferent de sarcina: pe masina ruleaza mai multi agenti cu procese
vfp9.execoncurente — progresul unei rulari se citeste DOAR din log, niciodata printasklist/Get-Process/PID (PID-ul intors deStart-Processpoate fi un launcher care iese imediat).
Status istoric: PREDARE (Regula zero) — NEFINALIZAT la momentul scrierii. Niciun document creat de
harness la acea ora. Investigatia de cod de mai jos ramane valida si citata cu fisier:linie, utila
daca automatizarea se reia candva — dar nu e nevoie de ea pentru S8.
Continua rec_s8_creare_variante_plan.md (plan) si
rec_s8_inventar.md (de ce lipsesc). Scop strict: crearea celor 3 documente prin fluxul real de
emitere (ofacturare.prg::factureaza -> do_scrie_factura -> PACK_FACTURARE), zero INSERT direct,
zero editare de cod productie. Editarea propriu-zisa (matricea S8) NU intra in scopul acestei runde.
Plan de executie (din rec_s8_creare_variante_plan.md)
- AVIZ (
tnTip=22) din lista de preturi. - FACTURA DIN AVIZ (
tnTip=4), sursa = avizul de la pasul 1. - FACTURA DIN CONTRACT (
tnTip=2), peid_ctr=235(NUid_ctr=222).
Interzis: INSERT/UPDATE direct pe documente, editare cod productie, commit, alta schema decat
MARIUSM_AUTO, atingerea id_vanzare 1048/1049/1050, input real (keybd_event/SendInput).
Progres
- Citit
frm_date_aviz.inainte_de_do_termin(garda,ofacturare.vc2:7277-7352) siInit(7354-7600) - Citit
frm_date_factura.inainte_de_do_termin(ofacturare.vc2:9455-9561) - Citit
oDateFactura.Init/initializeaza_setari_document(ofacturare_comun.prg:223-359) - Citit
oGeneratorNumere.creeaza_cursor_serii/aloca_numar/verifica_numar(oserii_numere.prg:128-234) - Citit
do_scrie_facturaintegral (ofacturare.vc2:14197-14554) sifrm_facturare_articole.inainte_de_do_termin(14806-14974) - Citit
frm_alte_date.inainte_de_do_termin/Init(ferestre_cere_date.vc2:3044-3200) - Citit precedentele:
test_pret_cu_tva_nivel2.prg,test_s5_al_doilea_intrare.prg,test_init_env_auto.prg - Gasit al treilea modal neanticipat de plan:
Do Form verificare(ofacturare.vc2:14404, indo_scrie_factura) - rezolvat cu stub-ul EXISTENTCOMUN\utile\Teste\achizitie_import\stub_verificare\verificare.sc2(Init->gnButon=1+RETURN .F.), pus PRIMUL inSET PATH - Verificat in Oracle:
id_fdoce AUTO-DERIVAT deoDateFactura.Init(actualizeaza_document()), nu trebuie setat manual;dataireg/dataact/datascad/zi_cursla fel - Verificat contract
id_ctr=235: 4 randuriCTR_SCADENTAR, toate cuID_ACTNULL (nefacturate) - document real, neconsumat, nu fabricat - Verificat delegat
id_part=256("DELEGAT"), client463=RAJA, client598=ABSOLUT SRL - toti valizi inNOM_PARTENERI - Scris harness
creeaza_documente_s8.prg(COMUN\utile\Teste\editare_factura\creeaza_documente_s8.prg) - Rulat pas 1 (AVIZ) + verificare Oracle
- Rulat pas 2 (FACTURA DIN AVIZ) + verificare Oracle
- Rulat pas 3 (FACTURA DIN CONTRACT) + verificare Oracle
- Verificare finala: zero vfp9.exe, zero tranzactii deschise
Design harness (creeaza_documente_s8.prg)
Reproduce corpul lui Procedure factureaza (ofacturare.prg:81-560) per tnTip, cu conexiune
Oracle REALA (goConn.Connect('CENTRAL','MARIUSM_AUTO','ROMFASTSOFT'), spre deosebire de
test_pret_cu_tva_nivel2.prg care avea goExecutor mock). Doua inlocuiri, ambele DOAR de
conducere UI:
- Dialogul modal de antet (
frm_date_aviz/frm_date_factura) -> setare directapoDate.id_client,poDate.listaid,poDate.id_delegat;poDate.nract/serie_actdinpoGeneratorNumere.creeaza_cursor_serii()+aloca_numar()REAL (acelasi apel facut de controlulclb_serie_actdin dialog,serii_numere.vc2:114-136). - Al doilea modal,
frm_alte_date- condus cu driveruldriverAlteDate8(Timer pe_SCREEN, cauta clasaFRM_ALTE_DATE, apeleaza.do_termin()direct).
Al treilea modal (Do Form verificare) evitat prin stub existent in SET PATH, nu prin driver.
Ordine reala: do_adauga_tot() -> do_calculeaza_totaluri() -> do_termin() ->
inainte_de_do_termin() -> do_scrie_factura() -> PACK_FACTURARE (neatins). Rezultatul
(id_vanzare) vine din poDate.nid_vanzare, populat de parametrul OUT al procedurii PL/SQL reale.
Note pe parcurs
Iteratii de depanare headless (log: creeaza_documente_s8_log.txt, langa .prg):
- Bug structural:
PROCEDURE S8Log/S8Errerau plasate INAINTE deTRYin fisier -> VFP "cade" (fall-through) in corpul lor la executia liniara, inainte sa apuce sa intre inTRY. Corectat: mutate DUPAQUIT, ca in toate precedentele (test_pret_cu_tva_nivel2.prg,test_s5_al_doilea_intrare.prgau aceeasi conventie - procedurile dupaQUIT). - Variabila lipsa
gcSettingsFile/goApi- cerute deget_ora()(apelat dinoDateFactura.Init). Adaugate dintest_init_env_auto.prg:209-230. - Data curs EUR lipsa:
cursor_preturi/cursor_contractcad cu eroarea Oracle reala "Nu este setat cursul din data de 10/08/2026 pentru EURO!" - verificat in Oracle, nu exista curs EUR pentru 10.08.2026 inMARIUSM_AUTO(ultimul: 07.08.2026 = 5.29, tot in luna curenta). Productia trateaza asta cu un dialog editabil (vizualizeaza_curs); headless am setatpoDate.zi_curs = {^2026-08-07}(camp distinct dedataact/dataireg- nu schimba data documentului, doar ziua de curs folosita pt. articolele in valuta din lista de preturi/contract). - Bug propriu: cleanup-ul cursoarelor
jtva_coloane/jtva_coloane_templipsea pe caile de iesire timpurie (eroare cursor / Reccount=0) dinCreeazaDocument- factorizat inS8CurataJtva, apelat pe toate caile. - Variabile globale lipsa
gnFactSeturi/gnCoefKFact/gnListareAvizBonFiscal, cerute defrm_facturare_articole.inainte_de_do_termin. Adaugate (gnFactSeturi=0, ramurile respective raman inactive pt. documentele noastre). - In curs: dupa
do_adauga_tot()(Reccount(crsfactura)=1, AVIZ tip=22), driveruldriverAlteDate8detecteazaFRM_ALTE_DATEsi apeleaza.do_termin()- logul se opreste imediat dupa acel apel, fara eroare prinsa deTRY/CATCHdin driver si fara linia urmatoare dinCreeazaDocument. De investigat daca e blocaj real sau doar Oracle lent pe primul apel PL/SQL din acel punct (pack_facturare.scrie_factura2/etc). ATENTIE constatata in aceasta runda: masina ruleaza MAI MULTI agenti in paralel, fiecare cu propriile procesevfp9.exe- PID-ul raportat deStart-Processin PowerShell corespunde unui proces-lansator care iese rapid (WaitForExitintoarceTruedesi scriptul REAL continua intr-un procesvfp9.execopil cu alt PID) -tasklist/Get-Process vfp9NU se poate folosi ca sa identifice procesul propriu fara ambiguitate cand alti agenti au procese vfp9 concurente. Verificarea de progres se face DOAR prin continutul logului, niciodata prin PID/Responding.Stop-Processpevfp9e evitat cu exceptia cazurilor cu dovada tare (PID exact, pornit chiar de comanda curenta).
Confirmat prin doua rulari succesive (ultima: pornita 11:50:29, monitor extern a asteptat inca
~120s, TIMEOUT, log neschimbat): blocajul e reproductibil, nu tranzitoriu — se opreste mereu
imediat dupa linia driverAlteDate8: FRM_ALTE_DATE detectat, apas do_termin(), fara nicio linie
ulterioara (nici succes, nici CATCH din TRY al driverului, nici ON ERROR de la nivelul
programului principal).
HANDOFF (Regula zero) — STARE LA OPRIRE
NIMIC PERICULOS: verificat, nu presupus.
| Ce | Cum s-a verificat | Rezultat |
|---|---|---|
| Documente create in Oracle | select ... from vanzari where trunc(data_act)=trunc(sysdate) and id_part in (463,598) prin sqlplus |
zero randuri — nu s-a scris niciun document, nici partial |
| Tranzactii Oracle deschise | v$transaction join v$session pentru MARIUSM_AUTO prin sqlplus |
zero |
Sesiuni Oracle active pe MARIUSM_AUTO |
v$session where username='MARIUSM_AUTO' |
doar plsqldev.exe/sqlplus.exe (ale mele, de verificare) — niciun vfp9.exe conectat |
Procese vfp9.exe ramase |
Get-Process -Name vfp9 |
niciunul (procesul harness-ului s-a terminat/crash-uit fara sa ramana agatat) |
| Fisiere editate fara write-back | harness-ul e .prg text simplu (nu .vc2/.sc2), scris direct — nu exista pas de conversie binar |
N/A |
Date de test consumate — posibil, de verificat prima data in sesiunea urmatoare: rularea a
apucat sa apeleze poGeneratorNumere.aloca_numar(6, NULL) REAL pentru AVIZ (nIdTipDoc=6,
serie SSS, numar alocat 12 — vezi log linia 12), INAINTE de crash. Daca
pack_serii_numere.aloca_numar face commit intern (nu e in tranzactia manuala deschisa abia mai
tarziu de do_scrie_articole/do_deschide_tranzactie), numarul 12 din seria SSS (tip doc 6 =
AVIZ) ar putea fi ars fara sa existe niciun document care sa-l foloseasca. De verificat cu
sqlplus inainte de a relua (interogare pe cursorul de serii / tabela care tine paPlaje-ul in
Oracle, echivalentul NOM_SERII_NUMERE/NOM_SERII_NUMERE_PLAJE sau similar — nu identificat inca
numele exact al tabelei) — daca da, following runda trebuie doar sa noteze faptul (nu e o problema
de corectitudine, seria oricum sare numere cand un document e anulat, e comportament normal de
productie), nu sa incerce sa-l "recupereze".
Ce e facut:
- Harness complet scris:
D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\creeaza_documente_s8.prg(singurul fisier nou, cf. restrictiilor din briefing). - Mediu real (Oracle
MARIUSM_AUTO, clase/proceduri ROAFACTURARE) se initializeaza corect si ajunge pana in mijlocul fluxului de scriere pentru PRIMUL document (AVIZ, tip=22):crsarticolepopulat real (1 rand),crsfacturapopulat real prindo_adauga_tot(),frm_alte_datedetectat corect de driver. - Toate cele 6 probleme de mai sus (
Note pe parcurs) sunt REZOLVATE si verificate ca depasite (log-ul avanseaza pana la linia 16 de fiecare data, deterministic).
Ce NU e facut / blocajul curent:
driverAlteDate8.ExecutaapeleazaloForm.do_termin()peFRM_ALTE_DATE(gasit prin_SCREEN.Forms, din Timer) si procesul nu mai avanseaza deloc dupa acel apel — fara eroare prinsa (nici deTRY/CATCHdin driver, nici deON ERRORglobal), ceea ce sugereaza un crash dur al motorului VFP (access violation sau similar), nu o eroare VFP normala. Ipoteza cea mai probabila: apelarea.do_termin()DIRECT pe un formular aflat inca in interiorul propriului.Show(1)(modal, apelat sincron dinfrm_facturare_articole.inainte_de_do_termin,ofacturare.vc2:14935), din interiorul unui callback deTimerlegat pe_SCREEN, e mai fragil pentrufrm_alte_datedecat a fost pentrufrm_articol_facturain precedentultest_pret_cu_tva_nivel2.prg(acolo a functionat cu acelasi tipar exact). Posibile cauze de investigat, in ordinea propusa:frm_alte_datear putea avea unRelease/Hideindo_terminsau in gard-ul lui (ferestre_cere_date.vc2:3044-3103, deja citit) care intra in conflict cu contextul de apel din Timer — de comparat linie cu linie cu_frmbase.do_termin(neexaminat inca in aceasta runda) ca sa se inteleaga EXACT ce facedo_termingeneric (posibilThis.Hide()+Thisform.Release()pe unThisformcare in acel moment NU mai e valid din perspectiva stivei de apel Timer).- Incearca sa gaseasca un buton real (
but_termin1sau similar) in interiorul luifrm_alte_datesi sa apeleze.Click()pe el in loc de.do_termin()direct — mai aproape de ce ar face un operator, posibil mai stabil (nu s-a gasit inca numele exact al butonului in aceasta runda —grep but_terminpe clasa n-a dat rezultate in intervalul cautat, de reluat cuvfp_symbols.ps1 -Class frm_alte_datepentru lista completa de metode/controale). - Verifica daca boxarea
TRY/CATCHdindriverAlteDate8.Executachiar prinde un access violation (de regula NU — un AV omoara procesul indiferent deTRYVFP) — daca da, solutia nu e mai multTRY, ci evitarea completa a apelului direct de metoda pe un formular modal activ; alternativa:PostMessagecatre handle-ul ferestrei cu un mesaj de „Enter”/„buton implicit” (permis explicit de reguli, spre deosebire deSendInput), ca sa se comporte ca un click real fara reintrare in stiva VFP. - Ruleaza harness-ul o data cu
_SCREEN.Visible=.T.FARA driver deloc, doar ca sa se vada dacafrm_alte_dateapare normal pe ecran si daca poate fi inchis manual din log (confirma ca restul lantului pana acolo e sanatos) — util ca test de izolare, nu ca solutie finala (fara input real ramane interzis).
Comanda de reluare (sterge .fxp vechi intai):
$fxp = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\creeaza_documente_s8.fxp"
if (Test-Path $fxp) { Remove-Item $fxp -Force }
$log = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\creeaza_documente_s8_log.txt"
if (Test-Path $log) { Remove-Item $log -Force }
Start-Process 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -ArgumentList '-A','-T','"D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\creeaza_documente_s8.prg"'
ATENTIE: Start-Process ... -PassThru; $p.WaitForExit(...) NU e de incredere pe aceasta masina
(vezi nota 6 de mai sus) — verifica progresul prin Get-Content pe log, in bucla cu sleep
(Monitor/Bash, nu PowerShell Start-Sleep lung), niciodata prin PID/Responding. Nu folosi
Stop-Process -Name vfp9 — alti agenti pot avea procese vfp9.exe proprii concurente pe aceasta
masina; omoara DOAR PID-uri pentru care exista dovada tare (pornite chiar de comanda curenta, deloc
ambiguu).
Fisiere atinse: doar creeaza_documente_s8.prg (nou) si acest raport. Zero cod de productie.
Zero commit. Scripturile .sql de verificare sunt in scratchpad, exploratorii, nu fac parte din
livrare.