Achizitie import: facturi prin dialog "Adauga factura", valuta/curs per document

- ointroduceri.prg: introdc porneste gol (perechea-sablon ramane in introdc_sablon);
  coloana nume_val adaugata in cursor.
- import_adauga_factura (dialog nou in ointroduceri.vcx): antet factura, suma/valuta/curs
  (propus), explicatie TVA, radio furnizor/DVI/fara cu memorie DVI, validari; debifarea
  "Suma in valuta in contabilitate" ascunde valuta+cursul si trimite curs 0/fara valuta;
  bifele TabStop=.F.
- import_nota: culori per document + coloana Doc; coloane reordonate, cele avansate
  permanent vizibile (checkbox "Coloane avansate" eliminat); coloane noi Valuta si Curs,
  editabile (cautare valuta, propagare pe randul TVA pereche, recalcul sume lei la
  schimbarea cursului); buton "Urmator" + indicator de pas.
- inainte_de_do_termin: id_valuta/curs/nume_val per rand in actactan - fiecare factura
  ajunge in registrul jurnal cu valuta si cursul ei, nu ale facturii principale.
- docs/flux-editare-vfp-text.md: fluxul comun de editare text->bin per runda.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 13:13:19 +03:00
parent de2813cf43
commit 72e820c939
4 changed files with 43 additions and 3 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,33 @@
# Flux editare .vcx/.scx pe text (comun proiectelor VFP)
Cache-ul text per proiect (`vcx2txt.ps1`) e sursa de editare; write-back in binar cu
`txt2vcx.ps1`, fara VFP IDE. Detalii complete: `D:\ROA\UTIL\foxbin2prg\CLAUDE.md`.
Parametrii per proiect (pjx, CacheRoot, exe): in `docs\` proiectului.
## Pasii unei runde
0. Refresh cache (obligatoriu dupa orice sesiune IDE — staleness pe mtime):
`vcx2txt.ps1 -Project <pjx> -ProjectRoot <root> -CacheRoot <cache> -Types vcx,scx`
1. Baseline: `Copy-Item <f>.vc2 <f>.vc2.pre_runda<N>.bak` (in cache; la runde succesive
necomise, diff-ul fata de HEAD ar amesteca rundele).
2. Editare byte-safe: PowerShell `[IO.File]::ReadAllText/WriteAllText(..., GetEncoding(1252))`;
NU tool-ul Edit/Write (UTF-8 strica diacriticele). Continut nou ASCII, TAB-uri ca in jur,
fara reflow (format position-sensitive, proprietati alfabetizate). Valabil si pentru `.prg`.
3. Patch review: `git diff --no-index <bak> <editat> > docs/diff_runda<N>_<subiect>.patch`
(exit 1 = normal). Commit doar dupa confirmare pe patch + test in IDE.
4. Preconditie write-back: niciun proces vfp9/<exe proiect> (tin lock pe binar); nu se omoara.
5. Write-back: `txt2vcx.ps1 -TextFile <vc2> -ProjectRoot <root> -CacheRoot <cache>`
(+ `-AllowComun` cu aprobare explicita pentru tinte COMUN — afecteaza toate aplicatiile ROA).
Succes = fidelity-check trecut: binar cu mtime nou; `vcx2txt.ps1` ulterior il vede la zi.
6. Backup-urile `.pre_runda*.bak` si patch-urile se sterg la curatenia de dupa commit.
## Capcane
- `.mnx`/`.frx` raman read-only (GENMENU in IDE / round-trip fragil).
- Linii complet goale in metode pica fidelity doar pe whitespace; fix: preia `verify\*.vc2`
din staging peste cache si reia write-back-ul.
- Metoda noua de clasa cere `*m: nume` in `*<DefinedPropArrayMethod>`; fara ea, prima salvare
din IDE o arunca tacut, iar refresh-ul urmator absoarbe pierderea in cache (si in .bak-uri).
Override-urile de metode de baza (Init, Show, hook-uri) nu au nevoie de `*m:`.
- Subagentii delegati primesc regulile 2-5 in prompt si raporteaza unicitatea sirurilor
inlocuite + rezultatul fidelity-check-ului.

View File

@@ -1464,7 +1464,6 @@ Procedure achizitie_import
If Used('introdc')
Use In introdc
Endif
SET STEP ON
lcSql = [select id_note, explicatie as explicatia, scd, ascd, scc, ascc, cu_tva, id_set, ordine, in_valuta, id_jtva_coloana, ptva, explicatie_tva, tipjurnal,taxcode,paymentcode from vnote_contabile ] + ;
[where id_set = ?pnIdSet]
lcCursor = [cnote_contabile]
@@ -1555,12 +1554,19 @@ SET STEP ON
00000000000000.0000 As suma, 00000000000000.0000 As SUMA_val, 00000000000000 As id_partd, 00000000000000 As id_partc, Space(100) As partd, Space(100) As partc, ;
00000000000000 As id_fact, 00000000000000 As id_factd, 00000000000000 As id_factc, 00000000000000 As pereched, 00000000000000 As perechec, ;
00000000000000 As nract, Space(10) As serie_Act,Space(50) As explicatia4, Space(50) As explicatia5, .T. As participa_valuta, ;
poAct.id_valuta As id_valuta, poAct.Curs As Curs, poAct.dataact as dataact, poAct.fdoc as fdoc, poAct.id_fdoc as id_fdoc, 0 as se_scrie, poAct.tva_incasare as tva_incasare ;
poAct.id_valuta As id_valuta, poAct.Curs As Curs, poAct.nume_val As nume_val, poAct.dataact as dataact, poAct.fdoc as fdoc, poAct.id_fdoc as id_fdoc, 0 as se_scrie, poAct.tva_incasare as tva_incasare, ;
16777215 As doc_color, Space(10) As doc_label ;
FROM cnote_contabile N ;
WHERE N.id_set = poAct.id_set ;
INTO Cursor introdc Readwrite Order By ordine
*!* 22.05.2008 ^
*!* Directia A (11.07.2026): introdc porneste GOL; perechea-sablon (primele 2 linii,
*!* baza + TVA) se pastreaza in introdc_sablon ca sursa de clonare pentru "Adauga factura".
Select * From introdc Where Recno('introdc') <= 2 Into Cursor introdc_sablon Readwrite
Select introdc
Zap
Use In (SELECT('cnote_contabile'))
If !Used('saft_taxtable')
@@ -1594,8 +1600,8 @@ SET STEP ON
ORDER By 1
gnZvama = 0
gnButon = 1
SELECT introdc
obj = Createobject('IMPORT_nota', tlIntern)
obj.oact = poAct
obj.Show()
@@ -1608,6 +1614,7 @@ SET STEP ON
ENDIF
Use In (SELECT('introdc'))
Use In (SELECT('introdc_sablon'))
Use In (SELECT('cote_tva'))
Use In (SELECT('actactan'))
Use In (SELECT('rul_temp'))