#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:
198
utile/Teste/facturare_unificat/probe_s6_3_surse.prg
Normal file
198
utile/Teste/facturare_unificat/probe_s6_3_surse.prg
Normal file
@@ -0,0 +1,198 @@
|
||||
* 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
|
||||
Reference in New Issue
Block a user