#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:
2026-09-09 21:38:25 +03:00
parent d1d0d7c37f
commit 8e022d332e
259 changed files with 57305 additions and 1576 deletions

View File

@@ -125,6 +125,8 @@ TRY
*----- PROCEDURI (mock amessagebox PRIMUL) -----
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
*-- CdocGasesteIdVanzare: dovada de scriere pe jonctiunea serie_act + nract
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\lib_comparatie_documente.prg" ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
@@ -406,7 +408,10 @@ FUNCTION CreeazaDocument
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, pnTotalDiscountAvize
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat
LOCAL lcSerieAlocata, lnNractAlocat
lnIdVanzareRezultat = 0
lcSerieAlocata = ''
lnNractAlocat = 0
pnTotalDiscountAvize = 0
update_jtva_coloane([JV], [jtva_coloane_temp])
@@ -460,6 +465,8 @@ FUNCTION CreeazaDocument
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
gnIdUtil = -3
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
lnNractAlocat = poDate.nract
DO S8Log WITH ' numar alocat: serie_act=[' + TRANSFORM(NVL(poDate.serie_act,[])) + '] nract=' + TRANSFORM(poDate.nract)
IF poDate.tva_incasare = 0
@@ -513,8 +520,13 @@ FUNCTION CreeazaDocument
*-- crsarticole vine cu Buffering optimistic pe rand (3) - REPLACE fara TABLEUPDATE() ramane
*-- in bufferul local si e pierdut la urmatoarea citire/mutare de recno (verificat empiric:
*-- REPLACE arata cantitate=1 imediat, dar orice citire ulterioara arata iar 0).
*-- Lista de preturi a articolului e in EURO (tip_valuta=1), iar do_scrie_articole
*-- trimite pe ramura aceea vpretftva, derivat din pret_val - fortand doar pret,
*-- documentul iesea cu VANZARI_DETALII.PRET=0. Se forteaza perechea, coerent cu cursul.
SELECT (lcCursor)
REPLACE ALL cantitate WITH 1
REPLACE ALL cantitate WITH 1, ;
pret_val WITH IIF(tip_valuta = 1, 100, 0), ;
pret WITH IIF(tip_valuta = 1, ROUND(100 * IIF(NVL(curs, 0) = 0, 1, curs) / IIF(NVL(multiplicator, 0) = 0, 1, multiplicator), gnPPretV), 100)
=TABLEUPDATE(.T., .T., lcCursor)
GO TOP
DO S8Log WITH ' dupa fix cantitate: ' + lcCursor + '.cantitate=' + TRANSFORM(cantitate)
@@ -580,11 +592,14 @@ FUNCTION CreeazaDocument
ENDDO
DO S8Log WITH ' do_termin() -> ' + TRANSFORM(lnScris) + ' (frm_alte_date tratat=' + TRANSFORM(glDlgTratat8) + ') poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
IF lnScris
lnIdVanzareRezultat = NVL(poDate.nid_vanzare, 0)
ELSE
*-- do_termin() intoarce mereu .T. (_frm_base.vc2:363, DoDefault fara RETURN) si nid_vanzare
*-- ramane santinela la esec: singura dovada e randul din VANZARI, pe serie_act + nract.
lnIdVanzareRezultat = CdocGasesteIdVanzare(lcSerieAlocata, lnNractAlocat)
IF lnIdVanzareRezultat < 0
lnIdVanzareRezultat = 0
ENDIF
DO S8Log WITH ' verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ;
' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
IF TYPE('goFrm8') = 'O' AND !ISNULL(goFrm8)
goFrm8.Release()