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
199 lines
8.0 KiB
Plaintext
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
|