Files
comun/utile/Teste/facturare_unificat/probe_s6_3_surse.prg
Marius Mutu 8e022d332e #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
2026-09-09 21:38:25 +03:00

199 lines
8.0 KiB
Plaintext

* probe_s6_3_surse.prg - alege sursele pentru S6-3 (paritate v1/v2 pe AVIZ tip 4 si RETUR tip 8)
* din MARIUSM_AUTO. Nu emite nimic, nu aloca numere: doar SELECT + apelurile de cursor pe care le
* face incarca_cursor_articole (pack_facturare.cursor_avize si pack_facturare.cursor_retur).
* Sunt necesare DOUA surse distincte per tip: prima emitere consuma sursa (avizul se marcheaza
* facturat, cantitatea de retur se epuizeaza), deci v1 si v2 nu pot pleca din acelasi document.
* Clientii cu 'CLIENT' in nume se exclud: valideaza_antet le deschide dialogul "in loc de BON FISCAL".
* Rulare: vfp9.exe -A -T probe_s6_3_surse.prg
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcLog
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_s6_3_surse.log"
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
*-- poDate + pnTotalDiscountAvize la nivelul programului principal: cursor_avize primeste
*-- ?@pnTotalDiscountAvize prin referinta, iar oExecute il rezolva din stiva apelantului.
PRIVATE poDate, pnTotalDiscountAvize
poDate = NULL
pnTotalDiscountAvize = 0
ON ERROR DO PsLog WITH 'ON ERROR ' + TRANSFORM(ERROR()) + ' [' + PROGRAM() + ':' + TRANSFORM(LINENO()) + '] ' + MESSAGE()
ON SHUTDOWN QUIT
TRY
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\achizitie_import\stub_verificare"
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
DO PsLog WITH 'EROARE: conectare Oracle esuata'
QUIT
ENDIF
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
IF !actualizeaza_optiuni_program()
DO PsLog WITH 'EROARE: actualizeaza_optiuni_program()'
QUIT
ENDIF
gnScadereStoc = 0
gnFactSeturi = 0
gnIdSucursala = 167
goExecutor.oExecuta([begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;])
gnIdUtil = 8
goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;])
DO PsLog WITH 'ENV OK gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + gcS + ' gnAn=' + TRANSFORM(gnAn) + ;
' gnLuna=' + TRANSFORM(gnLuna) + ' gl406=' + TRANSFORM(TYPE('gl406') = 'L' AND gl406)
DO PsLog WITH 'gcCondSucursala=[' + TRANSFORM(gcCondSucursala) + ']'
poDate = CREATEOBJECT('empty')
ADDPROPERTY(poDate, 'listaid', '')
ADDPROPERTY(poDate, 'in_valuta', 0)
DO PsLog WITH CHR(13) + CHR(10) + '===== AVIZE NEFACTURATE (sursa tip 4) ====='
DO SondaAvize
DO PsLog WITH CHR(13) + CHR(10) + '===== FACTURI RETURNABILE (sursa tip 8, lei) ====='
DO SondaRetur
DO PsLog WITH CHR(13) + CHR(10) + 'END ' + TTOC(DATETIME())
CATCH TO loExc
DO PsLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' ' + loExc.Message + ;
' Proc=' + loExc.Procedure + ':' + TRANSFORM(loExc.LineNo)
ENDTRY
QUIT
*==================================================================================
* Avizele nefacturate, grupate pe client - filtrul e cel din caut_avize
* (oproceduri_facturare.prg:2038): tip in (21,22,26,42), facturat = 0, plus gcCondSucursala.
PROCEDURE SondaAvize
LOCAL lnQ, lcLista, lnI, lnLinii, lnNeg, lnGest, lnClienti
lnQ = goExecutor.oExecute([select a.id_part, p.nume, count(*) as nr ] + ;
[from vanzari a, nom_parteneri p ] + ;
[where a.id_part = p.id_part and a.sters = 0 and a.tip in (21,22,26,42) and a.facturat = 0 ] + ;
STRTRAN(gcCondSucursala, [id_sucursala], [a.id_sucursala]) + ;
[ and upper(p.nume) not like '%CLIENT%' group by a.id_part, p.nume order by 3 desc], 'crsAvClienti')
IF lnQ < 0 OR !USED('crsAvClienti')
DO PsLog WITH 'EROARE lista clienti cu avize: ' + TRANSFORM(goExecutor.oPrelucrareEroare())
RETURN
ENDIF
lnClienti = RECCOUNT('crsAvClienti')
DO PsLog WITH 'clienti cu avize nefacturate (fara CLIENT in nume) = ' + TRANSFORM(lnClienti)
IF lnClienti = 0
RETURN
ENDIF
lnI = 0
SELECT crsAvClienti
SCAN WHILE lnI < 12
lnI = lnI + 1
LOCAL lnIdPart, lcNume
lnIdPart = crsAvClienti.id_part
lcNume = ALLTRIM(NVL(crsAvClienti.nume, ''))
*-- lista de id_vanzare exact ca in do_cauta_avize (ofacturare_antet.prg:73-77)
DO Inchide WITH 'crsAvDoc'
IF goExecutor.oExecute([select a.id_vanzare, a.serie_act, a.numar_act, a.tip ] + ;
[from vanzari a where a.sters = 0 and a.tip in (21,22,26,42) and a.facturat = 0 ] + ;
STRTRAN(gcCondSucursala, [id_sucursala], [a.id_sucursala]) + ;
[ and a.id_part = ] + TRANSFORM(lnIdPart) + [ order by a.id_vanzare], 'crsAvDoc') < 0
DO PsLog WITH ' client ' + TRANSFORM(lnIdPart) + ': EROARE avize'
SELECT crsAvClienti
LOOP
ENDIF
lcLista = cursor2lista('crsAvDoc', 'id_vanzare', ',')
poDate.listaid = lcLista
pnTotalDiscountAvize = 0
DO Inchide WITH 'crsartav'
lnQ = goExecutor.oExecute([{call ] + gcS + [.pack_facturare.cursor_avize(?poDate.listaid,?gnIdUtil,?@pnTotalDiscountAvize)}], 'crsartav')
lnLinii = IIF(lnQ >= 0 AND USED('crsartav'), RECCOUNT('crsartav'), -1)
lnNeg = 0
lnGest = 0
IF lnLinii > 0
SELECT crsartav
COUNT FOR cantitate < 0 TO lnNeg
COUNT FOR NVL(gestionabil, 0) = 1 TO lnGest
ENDIF
DO PsLog WITH ' client ' + TRANSFORM(lnIdPart) + ' [' + lcNume + '] avize=' + ;
TRANSFORM(RECCOUNT('crsAvDoc')) + ' listaid=[' + lcLista + '] -> cursor_avize linii=' + ;
TRANSFORM(lnLinii) + ' negative=' + TRANSFORM(lnNeg) + ' gestionabile=' + TRANSFORM(lnGest) + ;
' discountAvize=' + TRANSFORM(pnTotalDiscountAvize)
DO Inchide WITH 'crsartav'
DO Inchide WITH 'crsAvDoc'
SELECT crsAvClienti
ENDSCAN
DO Inchide WITH 'crsAvClienti'
ENDPROC
*==================================================================================
* Facturile din care se poate face retur - filtrul e cel din caut_facturi_multiple_client
* (oproceduri_facturare.prg:2110): fact_vfacturi, tip in (...), in_valuta = 0.
PROCEDURE SondaRetur
LOCAL lnQ, lnI, lnLinii, lnNeg, lnGest, lnTotal
lnQ = goExecutor.oExecute([select f.id_vanzare, f.id_part, p.nume, f.serie_act, f.numar_act, f.tip ] + ;
[from fact_vfacturi f, nom_parteneri p ] + ;
[where f.id_part = p.id_part and f.sters = 0 and f.tip in (1,2,3,4,5,6,10,-1,-2,-3,-4,-11) ] + ;
[and f.in_valuta = 0 ] + STRTRAN(gcCondSucursala, [id_sucursala], [f.id_sucursala]) + ;
[ and upper(p.nume) not like '%CLIENT%' order by f.id_vanzare desc], 'crsRetLista')
IF lnQ < 0 OR !USED('crsRetLista')
DO PsLog WITH 'EROARE lista facturi returnabile: ' + TRANSFORM(goExecutor.oPrelucrareEroare())
RETURN
ENDIF
lnTotal = RECCOUNT('crsRetLista')
DO PsLog WITH 'facturi returnabile in lei (fara CLIENT in nume) = ' + TRANSFORM(lnTotal)
IF lnTotal = 0
RETURN
ENDIF
lnI = 0
SELECT crsRetLista
SCAN WHILE lnI < 20
lnI = lnI + 1
LOCAL lnIdVz, lnIdPart2, lcNume2, lcSerie2, lnNr2
lnIdVz = crsRetLista.id_vanzare
lnIdPart2 = crsRetLista.id_part
lcNume2 = ALLTRIM(NVL(crsRetLista.nume, ''))
lcSerie2 = ALLTRIM(NVL(crsRetLista.serie_act, ''))
lnNr2 = NVL(crsRetLista.numar_act, 0)
poDate.listaid = ALLTRIM(TRANSFORM(lnIdVz))
poDate.in_valuta = 0
DO Inchide WITH 'crsartret'
lnQ = goExecutor.oExecute([{call ] + gcS + [.pack_facturare.cursor_retur(?poDate.in_valuta,?poDate.listaid,?gnIdUtil)}], 'crsartret')
lnLinii = IIF(lnQ >= 0 AND USED('crsartret'), RECCOUNT('crsartret'), -1)
lnNeg = 0
lnGest = 0
IF lnLinii > 0
SELECT crsartret
COUNT FOR cantitate < 0 TO lnNeg
COUNT FOR NVL(gestionabil, 0) = 1 TO lnGest
ENDIF
DO PsLog WITH ' factura ' + TRANSFORM(lnIdVz) + ' (' + lcSerie2 + ' ' + TRANSFORM(lnNr2) + ') client ' + ;
TRANSFORM(lnIdPart2) + ' [' + lcNume2 + '] -> cursor_retur linii=' + TRANSFORM(lnLinii) + ;
' negative=' + TRANSFORM(lnNeg) + ' gestionabile=' + TRANSFORM(lnGest)
DO Inchide WITH 'crsartret'
SELECT crsRetLista
ENDSCAN
DO Inchide WITH 'crsRetLista'
ENDPROC
*==================================================================================
PROCEDURE Inchide
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
ENDPROC
PROCEDURE PsLog
LPARAMETERS tcMsg
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
ENDPROC