* 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