* test_incarca_cursoare.prg * Verifica IncarcaCursoareModificareNota (COMUN\programe\ofacturare_editare.prg) pe date reale: * cod=1140888 - nota cu rulaje (non-regresie) * cod=1140885 - nota FARA randuri in rul (productie/manopera, fara miscare de stoc) * si pozitionarea in actactan din do_editare_factura (ofacturare_comun.vc2), pe cursoare sintetice. * Nu atinge Oracle in scriere - doar SELECT-uri prin goExecutor. QUIT la final. SET SAFETY OFF SET TALK OFF LOCAL lcLog lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_incarca_cursoare_log.txt' STRTOFILE('start' + CHR(13) + CHR(10), lcLog) PUBLIC gcErrLog gcErrLog = lcLog ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1) QUIT ENDIF SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE STRTOFILE('gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), lcLog, 1) DO verifica_cod WITH 1140888, 'A (regresie, cu rulaje)', lcLog DO verifica_cod WITH 1140885, 'B (fara randuri in rul)', lcLog DO verifica_pozitionare_actactan WITH 9999995, 'a) nota normala, un singur id_fact pe toate randurile', lcLog, 5000, 5000, 25010, 100, .T. DO verifica_pozitionare_actactan WITH 9999996, 'b) prim rand INCASARE cu id_fact-1, Locate il sare', lcLog, 5000, 5000, 25010, 200, .T. DO verifica_pozitionare_actactan WITH 9999997, 'c) nota fara randul cu id_fact cerut, cade pe Go Top', lcLog, 9999, 7000, 25011, 50, .F. DO verifica_pozitionare_actactan WITH 9999998, 'd) lnIdFact=0 (aviz/transfer), direct Go Top', lcLog, 0, 8000, 25012, 10, .F. STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1) QUIT * reproduce mecanica pozitionarii din do_editare_factura (ofacturare_comun.vc2): cauta in actactan * randul cu id_fact = lnIdFact (cel citit din crsfacturi/VANZARI.ID_FACT); daca nu-l gaseste (sau * lnIdFact e 0 - avize, transferuri), cade pe Go Top si preia id_fact de acolo. lnIdSet si * lnIdFactD se citesc mereu de pe randul gasit (Locate sau Go Top). PROCEDURE verifica_pozitionare_actactan LPARAMETERS tnCod, tcEticheta, tcLog, tnIdFactIntrare, tnIdFactAsteptat, tnIdSetAsteptat, tnIdFactDAsteptat, tlGasitAsteptat LOCAL lnIdFact, lnIdSet, lnIdFactD, llGasitRand, llOk CREATE CURSOR actactan (id_fact N(9), id_factd N(9), id_set N(9)) DO CASE CASE tnCod = 9999995 && a) nota normala: toate randurile cu acelasi id_fact INSERT INTO actactan VALUES (5000, 100, 25010) INSERT INTO actactan VALUES (5000, 101, 25010) CASE tnCod = 9999996 && b) prim rand INCASARE, id_fact = id_fact-ul facturii - 1 INSERT INTO actactan VALUES (4999, 0, 25010) INSERT INTO actactan VALUES (5000, 200, 25010) CASE tnCod = 9999997 && c) nota nu contine id_fact-ul cerut (document vechi) INSERT INTO actactan VALUES (7000, 50, 25011) CASE tnCod = 9999998 && d) aviz/transfer, fara id_fact la intrare INSERT INTO actactan VALUES (8000, 10, 25012) ENDCASE lnIdFact = tnIdFactIntrare SELECT actactan llGasitRand = .F. IF lnIdFact > 0 LOCATE FOR NVL(id_fact, 0) = lnIdFact llGasitRand = FOUND() ENDIF IF !llGasitRand GO TOP lnIdFact = id_fact ENDIF lnIdSet = id_set lnIdFactD = id_factd USE IN actactan llOk = (lnIdFact == tnIdFactAsteptat AND lnIdSet == tnIdSetAsteptat AND ; lnIdFactD == tnIdFactDAsteptat AND llGasitRand == tlGasitAsteptat) STRTOFILE('--- pozitionare actactan, cod=' + TRANSFORM(tnCod) + ' [' + tcEticheta + '] ---' + CHR(13) + CHR(10) + ; ' gasit rand = ' + TRANSFORM(llGasitRand) + ' (asteptat ' + TRANSFORM(tlGasitAsteptat) + ')' + CHR(13) + CHR(10) + ; ' id_fact = ' + TRANSFORM(lnIdFact) + ' (asteptat ' + TRANSFORM(tnIdFactAsteptat) + ')' + CHR(13) + CHR(10) + ; ' id_set = ' + TRANSFORM(lnIdSet) + ' (asteptat ' + TRANSFORM(tnIdSetAsteptat) + ')' + CHR(13) + CHR(10) + ; ' id_factd = ' + TRANSFORM(lnIdFactD) + ' (asteptat ' + TRANSFORM(tnIdFactDAsteptat) + ')' + CHR(13) + CHR(10) + ; ' ' + IIF(llOk, 'OK', 'FAIL') + CHR(13) + CHR(10), tcLog, 1) ENDPROC PROCEDURE verifica_cod LPARAMETERS tnCod, tcEticheta, tcLog LOCAL llOk, lcMsg, lnIdSetDistinct llOk = IncarcaCursoareModificareNota(tnCod, gnAn, gnLuna, .F.) lnIdSetDistinct = -1 IF Used('actactan') AND Reccount('actactan') > 0 SELECT Distinct id_set FROM actactan INTO CURSOR csr_idset_verif_test lnIdSetDistinct = Reccount('csr_idset_verif_test') USE IN csr_idset_verif_test ENDIF lcMsg = '--- cod=' + TRANSFORM(tnCod) + ' [' + tcEticheta + '] ---' + CHR(13) + CHR(10) + ; ' IncarcaCursoareModificareNota => ' + TRANSFORM(llOk) + CHR(13) + CHR(10) + ; ' Reccount(actactan) = ' + TRANSFORM(IIF(Used('actactan'), Reccount('actactan'), -1)) + CHR(13) + CHR(10) + ; ' Reccount(tact) = ' + TRANSFORM(IIF(Used('tact'), Reccount('tact'), -1)) + CHR(13) + CHR(10) + ; ' id_set distincte in actactan = ' + TRANSFORM(lnIdSetDistinct) + CHR(13) + CHR(10) + ; ' Used(trul) = ' + TRANSFORM(Used('trul')) + ' Reccount(trul) = ' + TRANSFORM(IIF(Used('trul'), Reccount('trul'), -1)) + CHR(13) + CHR(10) + ; ' Used(trul_obinv) = ' + TRANSFORM(Used('trul_obinv')) + ' Reccount(trul_obinv) = ' + TRANSFORM(IIF(Used('trul_obinv'), Reccount('trul_obinv'), -1)) + CHR(13) + CHR(10) STRTOFILE(lcMsg, tcLog, 1) IF Used('actactan') USE IN actactan ENDIF IF Used('tact') USE IN tact ENDIF IF Used('rul_temp') USE IN rul_temp ENDIF IF Used('trul') USE IN trul ENDIF IF Used('rul_temp_obinv') USE IN rul_temp_obinv ENDIF IF Used('trul_obinv') USE IN trul_obinv ENDIF ENDPROC PROCEDURE test_error_handler LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1) ENDPROC