#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:
@@ -27,7 +27,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcTestLog)
|
||||
ON ERROR DO ErrBench WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLogB WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -28,7 +28,7 @@ gcUltimaEroareSQL = ''
|
||||
ON ERROR DO ErrDeCe WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog5 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -68,7 +68,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErr200 WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLog200 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -50,7 +50,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErrRTVAI WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLogRTVAI WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -33,7 +33,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErrMargine WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLogMargine WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -28,7 +28,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErrTvainc WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLogTvainc WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -40,7 +40,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcTestLog)
|
||||
ON ERROR DO VpaErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WriteTestLog WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -29,7 +29,7 @@ gcUltimaEroareSQL = ''
|
||||
ON ERROR DO ErrRand WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog4 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -26,7 +26,7 @@ STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcTestLog)
|
||||
ON ERROR DO ErrCompl WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
DO WrLog3 WITH 'mediu OK'
|
||||
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ gnMockRaspuns = 6
|
||||
ON ERROR DO ErrP1000 WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog2 WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
@@ -45,7 +45,7 @@ gnMockRaspuns = 6
|
||||
ON ERROR DO ErrTimp WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
DO WrLog WITH 'EROARE: conectare Oracle esuata - GATA'
|
||||
QUIT
|
||||
|
||||
100
utile/Teste/editare_factura/assert_id_part_rez.prg
Normal file
100
utile/Teste/editare_factura/assert_id_part_rez.prg
Normal file
@@ -0,0 +1,100 @@
|
||||
* assert_id_part_rez.prg
|
||||
* Verificarea pe date vii ceruta inainte de reparatia 3.3 (id_part_rez / id_lucrare_rez la editare).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* A. coloanele exista in VANZARI_DETALII?
|
||||
lcSql = "select column_name, data_type, nullable from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_DETALII' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ','ID_VANZARE','ID_VANZARE_DET','STERS') order by column_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) VANZARI_DETALII coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsA'), RECCOUNT('crsA'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA')
|
||||
SELECT crsA
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADR(ALLTRIM(column_name), 18) + ' ' + PADR(ALLTRIM(data_type), 10) + ' null=' + ALLTRIM(NVL(nullable,'?')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* B. exista randuri cu valori nenule?
|
||||
lcSql = "select count(*) as tot, count(id_part_rez) as cu_part, count(id_lucrare_rez) as cu_lucr from vanzari_detalii where sters = 0"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsB')
|
||||
STRTOFILE('B) numaratoare rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsB') AND RECCOUNT('crsB') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsB.tot) + ' cu id_part_rez=' + TRANSFORM(crsB.cu_part) + ' cu id_lucrare_rez=' + TRANSFORM(crsB.cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsB
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* C. documentele cu valori nenule (top 20)
|
||||
lcSql = "select id_vanzare, count(*) as nr, count(id_part_rez) as cu_part, count(id_lucrare_rez) as cu_lucr from vanzari_detalii where sters = 0 and (id_part_rez is not null or id_lucrare_rez is not null) group by id_vanzare order by id_vanzare desc"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsC')
|
||||
STRTOFILE('C) documente cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsC'), RECCOUNT('crsC'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsC')
|
||||
SELECT crsC
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' linii=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsC
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* D. VVANZARI_ARTICOLE chiar nu le expune?
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VVANZARI_ARTICOLE' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ') order by column_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('D) VVANZARI_ARTICOLE expune? rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsD'), RECCOUNT('crsD'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* E. ce face Oracle cu valoarea (BODY 4110-4165)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 4100 and 4165 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsE')
|
||||
STRTOFILE('E) BODY 4100-4165 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsE'), RECCOUNT('crsE'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsE')
|
||||
SELECT crsE
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsE
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* F. orice consumator al coloanelor in PL/SQL (unde conteaza 0 vs NULL)
|
||||
lcSql = "select name, type, line, text from user_source where (lower(text) like '%id_part_rez%' or lower(text) like '%id_lucrare_rez%') order by name, type, line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsF')
|
||||
STRTOFILE('F) consumatori PL/SQL rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsF'), RECCOUNT('crsF'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsF')
|
||||
SELECT crsF
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADR(ALLTRIM(name), 22) + ' ' + PADR(ALLTRIM(type), 14) + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsF
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
100
utile/Teste/editare_factura/assert_id_part_rez2.prg
Normal file
100
utile/Teste/editare_factura/assert_id_part_rez2.prg
Normal file
@@ -0,0 +1,100 @@
|
||||
* assert_id_part_rez2.prg
|
||||
* Unde traiesc de fapt ID_PART_REZ / ID_LUCRARE_REZ: VANZARI_DETALII nu le are (proba 1).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez2_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* G. toate obiectele MARIUSM_AUTO care au coloanele
|
||||
lcSql = "select t.table_name, o.object_type, count(*) as nr from all_tab_columns t, all_objects o where t.owner = 'MARIUSM_AUTO' and o.owner = t.owner and o.object_name = t.table_name and t.column_name in ('ID_PART_REZ','ID_LUCRARE_REZ') group by t.table_name, o.object_type order by t.table_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsG')
|
||||
STRTOFILE('G) obiecte cu coloanele rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsG'), RECCOUNT('crsG'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsG')
|
||||
SELECT crsG
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADR(ALLTRIM(table_name), 32) + ' ' + PADR(ALLTRIM(object_type), 12) + ' col=' + TRANSFORM(nr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsG
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* H. cate randuri RUL au valori nenule, si pe ce documente
|
||||
lcSql = "select count(*) as tot, count(id_part_rez) as cu_part, count(id_lucrare_rez) as cu_lucr from rul where sters = 0"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsH')
|
||||
STRTOFILE('H) RUL rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsH') AND RECCOUNT('crsH') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsH.tot) + ' cu id_part_rez=' + TRANSFORM(crsH.cu_part) + ' cu id_lucrare_rez=' + TRANSFORM(crsH.cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsH
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* I. documente de vanzare cu rezervare pe RUL
|
||||
lcSql = "select v.id_vanzare, v.tip, count(*) as nr, count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null) group by v.id_vanzare, v.tip order by v.id_vanzare desc"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsI')
|
||||
STRTOFILE('I) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsI'), RECCOUNT('crsI'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsI')
|
||||
SELECT crsI
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(NVL(tip,-1)) + ' linii=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsI
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* J. de unde citeste PACK_FACTURARE coloanele (BODY 3190-3270)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 3190 and 3270 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsJ')
|
||||
STRTOFILE('J) BODY 3190-3270 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsJ'), RECCOUNT('crsJ'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsJ')
|
||||
SELECT crsJ
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsJ
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* K. ce coloane are VANZARI_DETALII, integral (ca sa nu ramana dubiu)
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_DETALII' order by column_id"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsK')
|
||||
STRTOFILE('K) VANZARI_DETALII toate coloanele rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsK'), RECCOUNT('crsK'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsK')
|
||||
SELECT crsK
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsK
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* L. ce coloane are VANZARI_DETALII_TEMP
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_DETALII_TEMP' order by column_id"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsL')
|
||||
STRTOFILE('L) VANZARI_DETALII_TEMP coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsL'), RECCOUNT('crsL'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsL')
|
||||
SELECT crsL
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsL
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
86
utile/Teste/editare_factura/assert_id_part_rez3.prg
Normal file
86
utile/Teste/editare_factura/assert_id_part_rez3.prg
Normal file
@@ -0,0 +1,86 @@
|
||||
* assert_id_part_rez3.prg
|
||||
* Unde persista legatura de rezervare, daca VANZARI_DETALII nu are coloanele (proba 2).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez3_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* M. coloanele RUL
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'RUL' order by column_id"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsM')
|
||||
STRTOFILE('M) RUL coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsM'), RECCOUNT('crsM'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsM')
|
||||
SELECT crsM
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsM
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* N. documente de vanzare cu rezervare pe RUL (fara v.tip)
|
||||
lcSql = "select v.id_vanzare as idv, count(*) as nr, count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null) group by v.id_vanzare order by v.id_vanzare desc"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsN')
|
||||
STRTOFILE('N) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsN'), RECCOUNT('crsN'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsN')
|
||||
SELECT crsN
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri_rul=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* O. unde scrie PACK_FACTURARE in VANZARI_DETALII (mutarea din TEMP)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and lower(text) like '%vanzari_detalii%' order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsO')
|
||||
STRTOFILE('O) referinte VANZARI_DETALII in BODY rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsO'), RECCOUNT('crsO'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsO')
|
||||
SELECT crsO
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsO
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* P. cum se calculeaza CUSTODIE (BODY 4166-4200)
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 4166 and 4200 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsP')
|
||||
STRTOFILE('P) BODY 4166-4200 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsP'), RECCOUNT('crsP'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsP')
|
||||
SELECT crsP
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsP
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* Q. sursa view-ului VVANZARI_ARTICOLE (ca sa se vada de unde vine, si ce se poate adauga fara sa se atinga)
|
||||
lcSql = "select count(*) as nr from all_views where owner = 'MARIUSM_AUTO' and view_name = 'VVANZARI_ARTICOLE'"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsQ')
|
||||
STRTOFILE('Q) VVANZARI_ARTICOLE e view? rc=' + TRANSFORM(lnS) + ' nr=' + TRANSFORM(IIF(USED('crsQ') AND RECCOUNT('crsQ')>0, crsQ.nr, -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsQ')
|
||||
USE IN crsQ
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
74
utile/Teste/editare_factura/assert_id_part_rez4.prg
Normal file
74
utile/Teste/editare_factura/assert_id_part_rez4.prg
Normal file
@@ -0,0 +1,74 @@
|
||||
* assert_id_part_rez4.prg
|
||||
* Documentele de vanzare care au legatura de rezervare pe RUL (candidati pentru proba pe date reale).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez4_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, v.id_firma as idf, count(*) as nr, ] + ;
|
||||
[count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and (r.id_part_rez is not null or r.id_lucrare_rez is not null) ] + ;
|
||||
[group by v.id_vanzare, v.id_firma order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsN')
|
||||
STRTOFILE('N) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsN'), RECCOUNT('crsN'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsN')
|
||||
SELECT crsN
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' id_firma=' + TRANSFORM(NVL(idf,-1)) + ' randuri_rul=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* distributia pe tipuri de rulaj a randurilor cu rezervare
|
||||
lcSql = [select r.id_tip_rulaj as tipr, count(*) as nr from rul r ] + ;
|
||||
[where r.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null) ] + ;
|
||||
[group by r.id_tip_rulaj order by r.id_tip_rulaj]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsO')
|
||||
STRTOFILE('O) distributie id_tip_rulaj rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsO'), RECCOUNT('crsO'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsO')
|
||||
SELECT crsO
|
||||
SCAN
|
||||
STRTOFILE(' id_tip_rulaj=' + TRANSFORM(NVL(tipr,-1)) + ' randuri=' + TRANSFORM(nr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsO
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* constrangeri pe RUL.ID_PART_REZ / ID_LUCRARE_REZ (0 vs NULL)
|
||||
lcSql = [select c.constraint_name as cnume, c.constraint_type as ctip, cc.column_name as ccol ] + ;
|
||||
[from all_constraints c, all_cons_columns cc ] + ;
|
||||
[where c.owner = 'MARIUSM_AUTO' and c.constraint_name = cc.constraint_name ] + ;
|
||||
[and c.owner = cc.owner and cc.table_name = 'RUL' ] + ;
|
||||
[and cc.column_name in ('ID_PART_REZ','ID_LUCRARE_REZ')]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsP')
|
||||
STRTOFILE('P) constrangeri RUL rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsP'), RECCOUNT('crsP'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsP')
|
||||
SELECT crsP
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(NVL(cnume,'')) + ' tip=' + ALLTRIM(NVL(ctip,'')) + ' col=' + ALLTRIM(NVL(ccol,'')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsP
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
55
utile/Teste/editare_factura/assert_id_part_rez5.prg
Normal file
55
utile/Teste/editare_factura/assert_id_part_rez5.prg
Normal file
@@ -0,0 +1,55 @@
|
||||
* assert_id_part_rez5.prg
|
||||
* Candidatii pentru proba pe date reale + coloanele VANZARI.
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez5_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'VANZARI' order by column_id]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsV')
|
||||
STRTOFILE('V) VANZARI coloane rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsV'), RECCOUNT('crsV'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsV')
|
||||
SELECT crsV
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsV
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, count(*) as nr, ] + ;
|
||||
[count(r.id_part_rez) as cu_part, count(r.id_lucrare_rez) as cu_lucr ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and (r.id_part_rez is not null or r.id_lucrare_rez is not null) ] + ;
|
||||
[group by v.id_vanzare order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsN')
|
||||
STRTOFILE('N) documente vanzare cu rezervare rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsN'), RECCOUNT('crsN'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsN')
|
||||
SELECT crsN
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri_rul=' + TRANSFORM(nr) + ' cu_part=' + TRANSFORM(cu_part) + ' cu_lucr=' + TRANSFORM(cu_lucr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
78
utile/Teste/editare_factura/assert_id_part_rez6.prg
Normal file
78
utile/Teste/editare_factura/assert_id_part_rez6.prg
Normal file
@@ -0,0 +1,78 @@
|
||||
* assert_id_part_rez6.prg
|
||||
* Exista o cheie directa intre randul RUL si linia de document (id_vanzare_det)?
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez6_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql, lcDoc
|
||||
lcDoc = '540'
|
||||
|
||||
*!* randurile RUL ale documentului
|
||||
lcSql = [select r.id_rul as idrul, r.id_fact as idfact, r.id_articol as idart, r.id_gestiune as idgest, ] + ;
|
||||
[r.cont as ccont, r.pret as npret, r.cante as ncante, r.pretv as npretv, ] + ;
|
||||
[r.id_tip_rulaj as tipr, r.id_part_rez as ipr, r.id_lucrare_rez as ilr, r.serie as cserie ] + ;
|
||||
[from rul r, vanzari v where r.cod = v.cod and v.id_vanzare = ] + lcDoc + ;
|
||||
[ and r.sters = 0 order by r.id_tip_rulaj desc, r.id_rul]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsR')
|
||||
STRTOFILE('R) RUL doc ' + lcDoc + ' rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsR'), RECCOUNT('crsR'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsR')
|
||||
SELECT crsR
|
||||
SCAN
|
||||
STRTOFILE(' id_rul=' + TRANSFORM(idrul) + ' id_fact=' + IIF(ISNULL(idfact),'NULL',TRANSFORM(idfact)) + ;
|
||||
' art=' + TRANSFORM(NVL(idart,-1)) + ' gest=' + TRANSFORM(NVL(idgest,-1)) + ;
|
||||
' cont=[' + ALLTRIM(NVL(ccont,'')) + '] pret=' + TRANSFORM(NVL(npret,0)) + ;
|
||||
' cante=' + TRANSFORM(NVL(ncante,0)) + ' pretv=' + TRANSFORM(NVL(npretv,0)) + ;
|
||||
' tipr=' + TRANSFORM(NVL(tipr,-1)) + ' serie=[' + ALLTRIM(NVL(cserie,'')) + ']' + ;
|
||||
' id_part_rez=' + IIF(ISNULL(ipr),'NULL',TRANSFORM(ipr)) + ;
|
||||
' id_lucrare_rez=' + IIF(ISNULL(ilr),'NULL',TRANSFORM(ilr)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsR
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* liniile documentului
|
||||
lcSql = [select d.id_vanzare_det as idvd, d.id_articol as idart, d.id_gestiune as idgest, ] + ;
|
||||
[d.cont as ccont, d.pret_achizitie as npa, d.cantitate as ncant, d.serie as cserie ] + ;
|
||||
[from vanzari_detalii d where d.id_vanzare = ] + lcDoc + [ and d.sters = 0 order by d.id_vanzare_det]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('S) VANZARI_DETALII doc ' + lcDoc + ' rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsD'), RECCOUNT('crsD'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(idvd) + ' art=' + TRANSFORM(NVL(idart,-1)) + ;
|
||||
' gest=' + TRANSFORM(NVL(idgest,-1)) + ' cont=[' + ALLTRIM(NVL(ccont,'')) + ']' + ;
|
||||
' pret_achiz=' + TRANSFORM(NVL(npa,0)) + ' cant=' + TRANSFORM(NVL(ncant,0)) + ;
|
||||
' serie=[' + ALLTRIM(NVL(cserie,'')) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* cate randuri RUL au id_fact care exista in vanzari_detalii (potrivire directa)
|
||||
lcSql = [select count(*) as tot, count(r.id_fact) as cu_fact ] + ;
|
||||
[from rul r where r.sters = 0 and (r.id_part_rez is not null or r.id_lucrare_rez is not null)]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsT')
|
||||
STRTOFILE('T) RUL cu rezervare: id_fact completat rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsT') AND RECCOUNT('crsT') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsT.tot) + ' cu_id_fact=' + TRANSFORM(crsT.cu_fact) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsT
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
78
utile/Teste/editare_factura/assert_id_part_rez7.prg
Normal file
78
utile/Teste/editare_factura/assert_id_part_rez7.prg
Normal file
@@ -0,0 +1,78 @@
|
||||
* assert_id_part_rez7.prg
|
||||
* Cate randuri au valori NENULE SI NENULE-DE-ZERO; ce documente. Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez7_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select count(*) as tot, ] + ;
|
||||
[sum(case when r.id_part_rez is not null and r.id_part_rez <> 0 then 1 else 0 end) as part_nz, ] + ;
|
||||
[sum(case when r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0 then 1 else 0 end) as lucr_nz, ] + ;
|
||||
[sum(case when r.id_part_rez = 0 then 1 else 0 end) as part_z ] + ;
|
||||
[from rul r where r.sters = 0]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) RUL rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA') AND RECCOUNT('crsA') > 0
|
||||
STRTOFILE(' total=' + TRANSFORM(crsA.tot) + ' part<>0=' + TRANSFORM(NVL(crsA.part_nz,0)) + ;
|
||||
' lucr<>0=' + TRANSFORM(NVL(crsA.lucr_nz,0)) + ' part=0=' + TRANSFORM(NVL(crsA.part_z,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, count(*) as nr, ] + ;
|
||||
[sum(case when r.id_part_rez is not null and r.id_part_rez <> 0 then 1 else 0 end) as part_nz, ] + ;
|
||||
[sum(case when r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0 then 1 else 0 end) as lucr_nz ] + ;
|
||||
[from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and ((r.id_part_rez is not null and r.id_part_rez <> 0) or (r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0)) ] + ;
|
||||
[group by v.id_vanzare order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsB')
|
||||
STRTOFILE('B) documente cu rezervare reala rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsB'), RECCOUNT('crsB'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsB')
|
||||
SELECT crsB
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri_rul=' + TRANSFORM(nr) + ;
|
||||
' part<>0=' + TRANSFORM(NVL(part_nz,0)) + ' lucr<>0=' + TRANSFORM(NVL(lucr_nz,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsB
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* valorile efective, cu documentul si linia
|
||||
lcSql = [select v.id_vanzare as idv, r.id_rul as idrul, r.id_articol as idart, r.id_gestiune as idgest, ] + ;
|
||||
[r.cont as ccont, r.pret as npret, r.cante as ncante, r.id_tip_rulaj as tipr, ] + ;
|
||||
[r.id_part_rez as ipr, r.id_lucrare_rez as ilr ] + ;
|
||||
[from rul r, vanzari v where r.cod = v.cod and r.sters = 0 and v.sters = 0 ] + ;
|
||||
[and ((r.id_part_rez is not null and r.id_part_rez <> 0) or (r.id_lucrare_rez is not null and r.id_lucrare_rez <> 0)) ] + ;
|
||||
[order by v.id_vanzare desc, r.id_rul]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsC')
|
||||
STRTOFILE('C) randurile cu rezervare reala rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsC'), RECCOUNT('crsC'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsC')
|
||||
SELECT crsC
|
||||
SCAN
|
||||
STRTOFILE(' doc=' + TRANSFORM(idv) + ' id_rul=' + TRANSFORM(idrul) + ' art=' + TRANSFORM(NVL(idart,-1)) + ;
|
||||
' gest=' + TRANSFORM(NVL(idgest,-1)) + ' cont=[' + ALLTRIM(NVL(ccont,'')) + ']' + ;
|
||||
' pret=' + TRANSFORM(NVL(npret,0)) + ' cante=' + TRANSFORM(NVL(ncante,0)) + ' tipr=' + TRANSFORM(NVL(tipr,-1)) + ;
|
||||
' id_part_rez=' + IIF(ISNULL(ipr),'NULL',TRANSFORM(ipr)) + ;
|
||||
' id_lucrare_rez=' + IIF(ISNULL(ilr),'NULL',TRANSFORM(ilr)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsC
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
43
utile/Teste/editare_factura/assert_id_part_rez8.prg
Normal file
43
utile/Teste/editare_factura/assert_id_part_rez8.prg
Normal file
@@ -0,0 +1,43 @@
|
||||
* assert_id_part_rez8.prg
|
||||
* Alegerea unui document de control cu id_part_rez = 0 SI linii gestionabile (in_stoc <> 0).
|
||||
* Doar SELECT pe MARIUSM_AUTO.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_id_part_rez8_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
lcSql = [select v.id_vanzare as idv, count(*) as nr, ] + ;
|
||||
[sum(case when nvl(n.in_stoc,0) <> 0 then 1 else 0 end) as gest ] + ;
|
||||
[from rul r, vanzari v, nom_articole n ] + ;
|
||||
[where r.cod = v.cod and r.sters = 0 and v.sters = 0 and n.id_articol = r.id_articol ] + ;
|
||||
[and r.id_part_rez = 0 and r.cante <> 0 ] + ;
|
||||
[group by v.id_vanzare having sum(case when nvl(n.in_stoc,0) <> 0 then 1 else 0 end) > 0 ] + ;
|
||||
[order by v.id_vanzare desc]
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) docuri cu id_part_rez=0 si articole in stoc rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsA'), RECCOUNT('crsA'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA')
|
||||
SELECT crsA
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(idv) + ' randuri=' + TRANSFORM(nr) + ' gestionabile=' + TRANSFORM(NVL(gest,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
68
utile/Teste/editare_factura/assert_pretval_apelanti.prg
Normal file
68
utile/Teste/editare_factura/assert_pretval_apelanti.prg
Normal file
@@ -0,0 +1,68 @@
|
||||
* assert_pretval_apelanti.prg
|
||||
* Asertiune ceruta inainte de reparatia vpretctva/vdiscountctva (docs\propunere_comparatie_coloane_crsfactura.md:310):
|
||||
* toti apelantii lui prelucreaza_facturacrs trebuie sa aiba pret_val si discount_unitar_val in cursorul sursa.
|
||||
* Doar SELECT pe MARIUSM_AUTO. Sursele statice (Create Cursor / SELECT ... As pret_val) se verifica in raport.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS, lcSql
|
||||
|
||||
*!* A. crsdetalii (ofacturare_stoc.prg:578 "select * from fact_vfacturi_detalii")
|
||||
lcSql = "select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'FACT_VFACTURI_DETALII' and column_name in ('PRET_VAL','DISCOUNT_UNITAR_VAL') order by column_name"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsA')
|
||||
STRTOFILE('A) FACT_VFACTURI_DETALII rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsA'), RECCOUNT('crsA'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsA')
|
||||
SELECT crsA
|
||||
SCAN
|
||||
STRTOFILE(' ' + ALLTRIM(column_name) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsA
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* B. antetele procedurilor care produc ref cursoarele celorlalti apelanti Oracle
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' " + ;
|
||||
"and (lower(text) like '%procedure citeste_vanzari_seturi%' or lower(text) like '%procedure citeste_proforme_seturi%' " + ;
|
||||
"or lower(text) like '%procedure finalizeaza_scriere_verificare%') order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsB')
|
||||
STRTOFILE('B) antete proceduri rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsB'), RECCOUNT('crsB'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsB')
|
||||
SELECT crsB
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsB
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* C. toate liniile din corpul pachetului care numesc pret_val / discount_unitar_val
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' " + ;
|
||||
"and (lower(text) like '%pret_val%' or lower(text) like '%discount_unitar_val%') order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsC')
|
||||
STRTOFILE('C) linii cu pret_val/discount_unitar_val rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsC'), RECCOUNT('crsC'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsC')
|
||||
SELECT crsC
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsC
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
42
utile/Teste/editare_factura/assert_pretval_apelanti2.prg
Normal file
42
utile/Teste/editare_factura/assert_pretval_apelanti2.prg
Normal file
@@ -0,0 +1,42 @@
|
||||
* assert_pretval_apelanti2.prg -- delimitarea procedurilor din PACK_FACTURARE intre 14200 si 15900
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti2_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
LOCAL lnS, lcSql
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' " + ;
|
||||
"and line between 14200 and 15900 and regexp_like(text, '^\s*(procedure|function)\s', 'i') order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsH')
|
||||
STRTOFILE('antete 14200..15900 rc=' + TRANSFORM(lnS) + ' n=' + TRANSFORM(IIF(USED('crsH'), RECCOUNT('crsH'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsH')
|
||||
SELECT crsH
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsH
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 15100 and 15200 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('corp 15100..15200 rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(' ' + PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
30
utile/Teste/editare_factura/assert_pretval_apelanti3.prg
Normal file
30
utile/Teste/editare_factura/assert_pretval_apelanti3.prg
Normal file
@@ -0,0 +1,30 @@
|
||||
* assert_pretval_apelanti3.prg -- corpul finalizeaza_scriere_verificare (14238..14340)
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti3_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
LOCAL lnS, lcSql
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 14238 and 14340 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
30
utile/Teste/editare_factura/assert_pretval_apelanti4.prg
Normal file
30
utile/Teste/editare_factura/assert_pretval_apelanti4.prg
Normal file
@@ -0,0 +1,30 @@
|
||||
* assert_pretval_apelanti3.prg -- corpul finalizeaza_scriere_verificare (14238..14340)
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\assert_pretval_apelanti4_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
LOCAL lnS, lcSql
|
||||
lcSql = "select line, text from user_source where name = 'PACK_FACTURARE' and type = 'PACKAGE BODY' and line between 14183 and 14238 order by line"
|
||||
lnS = goExecutor.oExecute(lcSql, 'crsD')
|
||||
STRTOFILE('rc=' + TRANSFORM(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE(PADL(TRANSFORM(line), 6) + ' | ' + ALLTRIM(STRTRAN(STRTRAN(NVL(text,''), CHR(13), ''), CHR(10), '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsD
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
60
utile/Teste/editare_factura/check_cols.prg
Normal file
60
utile/Teste/editare_factura/check_cols.prg
Normal file
@@ -0,0 +1,60 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_cols_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select column_name from user_tab_columns where table_name='VPLAJE_NUMERE' order by column_id", 'crsCol1')
|
||||
STRTOFILE('VPLAJE_NUMERE cols: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsCol1')
|
||||
SELECT crsCol1
|
||||
SCAN
|
||||
STRTOFILE(column_name + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS2
|
||||
lnS2 = goExecutor.oExecute("select column_name, data_type from user_tab_columns where table_name in ('FACT_VFACTURI') and column_name in ('INCASAT','NR_INCASARE','INCASATCARD','INCASATTICHETE','TIP_INCASARE','SERIE_CHIT') order by column_name", 'crsCol2')
|
||||
STRTOFILE('FACT_VFACTURI incasare cols: ' + Transform(lnS2) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsCol2')
|
||||
SELECT crsCol2
|
||||
SCAN
|
||||
STRTOFILE(column_name + ' ' + data_type + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS3
|
||||
lnS3 = goExecutor.oExecute("select column_name, data_type from user_tab_columns where table_name = 'VANZARI' and column_name in ('INCASAT','NR_INCASARE','INCASATCARD','INCASATTICHETE','TIP_INCASARE','SERIE_CHIT','ID_CASA') order by column_name", 'crsCol3')
|
||||
STRTOFILE('VANZARI incasare cols: ' + Transform(lnS3) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsCol3')
|
||||
SELECT crsCol3
|
||||
SCAN
|
||||
STRTOFILE(column_name + ' ' + data_type + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS4
|
||||
lnS4 = goExecutor.oExecute("select id_vanzare, incasat, nr_incasare from fact_vfacturi where id_vanzare=1071", 'crsDoc')
|
||||
STRTOFILE('doc 1071: ' + Transform(lnS4) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsDoc')
|
||||
SELECT crsDoc
|
||||
STRTOFILE('incasat=' + Transform(incasat) + ' nr_incasare=' + Transform(Nvl(nr_incasare,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
50
utile/Teste/editare_factura/check_doc1071_incasare.prg
Normal file
50
utile/Teste/editare_factura/check_doc1071_incasare.prg
Normal file
@@ -0,0 +1,50 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_doc1071_incasare_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select id_vanzare, incasat, nr_incasare, serie_chit, tip_incasare, cod, numar_act from fact_vfacturi where id_vanzare=1071", 'crsD')
|
||||
STRTOFILE('doc1071: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsD')
|
||||
SELECT crsD
|
||||
STRTOFILE('incasat=' + Transform(incasat) + ' nr_incasare=' + Transform(Nvl(nr_incasare,-1)) + ;
|
||||
' serie_chit=[' + Transform(Nvl(serie_chit,'?')) + '] tip_incasare=' + Transform(Nvl(tip_incasare,-1)) + ;
|
||||
' cod=' + Transform(cod) + ' numar_act=' + Transform(numar_act) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS2
|
||||
lnS2 = goExecutor.oExecute("select scd, scc, id_fdoc, serie_act, nract, suma, sters, perechec from act where cod=(select cod from fact_vfacturi where id_vanzare=1071) and perechec=(select numar_act from fact_vfacturi where id_vanzare=1071) and substr(scd,1,1)='5' and scc<>'418'", 'crsAct')
|
||||
STRTOFILE('act rows: ' + Transform(lnS2) + ' reccount=' + Transform(Iif(Used('crsAct'),Reccount('crsAct'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsAct')
|
||||
SELECT crsAct
|
||||
SCAN
|
||||
STRTOFILE('scd=' + scd + ' scc=' + scc + ' id_fdoc=' + Transform(Nvl(id_fdoc,-1)) + ' serie_act=' + Transform(Nvl(serie_act,'?')) + ;
|
||||
' nract=' + Transform(Nvl(nract,0)) + ' suma=' + Transform(Nvl(suma,0)) + ' sters=' + Transform(sters) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS3
|
||||
lnS3 = goExecutor.oExecute("select PACK_SESIUNE.getoptiunefirma(USER,'ID_FDOC_CHITANTA') as chit, PACK_SESIUNE.getoptiunefirma(USER,'ID_FDOC_BONFISCAL') as bon, PACK_SESIUNE.getoptiunefirma(USER,'ID_FDOC_CARD') as card from dual", 'crsOpt')
|
||||
STRTOFILE('optiuni fdoc: ' + Transform(lnS3) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsOpt')
|
||||
SELECT crsOpt
|
||||
STRTOFILE('ID_FDOC_CHITANTA=' + Transform(chit) + ' ID_FDOC_BONFISCAL=' + Transform(bon) + ' ID_FDOC_CARD=' + Transform(card) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
29
utile/Teste/editare_factura/check_tip_incasare_distrib.prg
Normal file
29
utile/Teste/editare_factura/check_tip_incasare_distrib.prg
Normal file
@@ -0,0 +1,29 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_tip_incasare_distrib_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select tip_incasare, count(*) as nr from fact_vfacturi where incasat<>0 and sters=0 group by tip_incasare order by tip_incasare", 'crsD')
|
||||
STRTOFILE('distrib: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsD')
|
||||
SELECT crsD
|
||||
SCAN
|
||||
STRTOFILE('tip_incasare=' + Transform(Nvl(tip_incasare,-1)) + ' nr=' + Transform(nr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
27
utile/Teste/editare_factura/check_vartype_semantics.prg
Normal file
27
utile/Teste/editare_factura/check_vartype_semantics.prg
Normal file
@@ -0,0 +1,27 @@
|
||||
* check_vartype_semantics.prg
|
||||
* Verifica empiric daca Vartype(varNedeclarata) arunca eroare sau intoarce 'U',
|
||||
* fara Oracle, fara conectare - doar semantica limbajului VFP.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_vartype_semantics_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
LOCAL lcRezultat
|
||||
lcRezultat = 'NEATINS'
|
||||
lcRezultat = Vartype(poNedeclaratXyz)
|
||||
STRTOFILE('Vartype(poNedeclaratXyz) = [' + Transform(lcRezultat) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lcRezultat2
|
||||
lcRezultat2 = 'NEATINS'
|
||||
lcRezultat2 = Type('poNedeclaratXyz')
|
||||
STRTOFILE('Type(''poNedeclaratXyz'') = [' + Transform(lcRezultat2) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
38
utile/Teste/editare_factura/check_view_def.prg
Normal file
38
utile/Teste/editare_factura/check_view_def.prg
Normal file
@@ -0,0 +1,38 @@
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\check_view_def_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnS
|
||||
lnS = goExecutor.oExecute("select text from user_views where view_name='FACT_VFACTURI'", 'crsV')
|
||||
STRTOFILE('view text: ' + Transform(lnS) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsV')
|
||||
SELECT crsV
|
||||
STRTOFILE(Text + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnS2
|
||||
lnS2 = goExecutor.oExecute("select table_name from user_tables where table_name in ('VANZARI','VANZARI_DETALII','VANZARI_INCASARI','VANZARI_CORESP')", 'crsT')
|
||||
STRTOFILE('tabele: ' + Transform(lnS2) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Used('crsT')
|
||||
SELECT crsT
|
||||
SCAN
|
||||
STRTOFILE(table_name + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
@@ -125,6 +125,8 @@ TRY
|
||||
|
||||
*----- PROCEDURI (mock amessagebox PRIMUL) -----
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
*-- CdocGasesteIdVanzare: dovada de scriere pe jonctiunea serie_act + nract
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\lib_comparatie_documente.prg" ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
@@ -406,7 +408,10 @@ FUNCTION CreeazaDocument
|
||||
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, pnTotalDiscountAvize
|
||||
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat
|
||||
LOCAL lcSerieAlocata, lnNractAlocat
|
||||
lnIdVanzareRezultat = 0
|
||||
lcSerieAlocata = ''
|
||||
lnNractAlocat = 0
|
||||
pnTotalDiscountAvize = 0
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
@@ -460,6 +465,8 @@ FUNCTION CreeazaDocument
|
||||
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
||||
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
|
||||
gnIdUtil = -3
|
||||
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
|
||||
lnNractAlocat = poDate.nract
|
||||
DO S8Log WITH ' numar alocat: serie_act=[' + TRANSFORM(NVL(poDate.serie_act,[])) + '] nract=' + TRANSFORM(poDate.nract)
|
||||
|
||||
IF poDate.tva_incasare = 0
|
||||
@@ -513,8 +520,13 @@ FUNCTION CreeazaDocument
|
||||
*-- crsarticole vine cu Buffering optimistic pe rand (3) - REPLACE fara TABLEUPDATE() ramane
|
||||
*-- in bufferul local si e pierdut la urmatoarea citire/mutare de recno (verificat empiric:
|
||||
*-- REPLACE arata cantitate=1 imediat, dar orice citire ulterioara arata iar 0).
|
||||
*-- Lista de preturi a articolului e in EURO (tip_valuta=1), iar do_scrie_articole
|
||||
*-- trimite pe ramura aceea vpretftva, derivat din pret_val - fortand doar pret,
|
||||
*-- documentul iesea cu VANZARI_DETALII.PRET=0. Se forteaza perechea, coerent cu cursul.
|
||||
SELECT (lcCursor)
|
||||
REPLACE ALL cantitate WITH 1
|
||||
REPLACE ALL cantitate WITH 1, ;
|
||||
pret_val WITH IIF(tip_valuta = 1, 100, 0), ;
|
||||
pret WITH IIF(tip_valuta = 1, ROUND(100 * IIF(NVL(curs, 0) = 0, 1, curs) / IIF(NVL(multiplicator, 0) = 0, 1, multiplicator), gnPPretV), 100)
|
||||
=TABLEUPDATE(.T., .T., lcCursor)
|
||||
GO TOP
|
||||
DO S8Log WITH ' dupa fix cantitate: ' + lcCursor + '.cantitate=' + TRANSFORM(cantitate)
|
||||
@@ -580,11 +592,14 @@ FUNCTION CreeazaDocument
|
||||
ENDDO
|
||||
DO S8Log WITH ' do_termin() -> ' + TRANSFORM(lnScris) + ' (frm_alte_date tratat=' + TRANSFORM(glDlgTratat8) + ') poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
|
||||
|
||||
IF lnScris
|
||||
lnIdVanzareRezultat = NVL(poDate.nid_vanzare, 0)
|
||||
ELSE
|
||||
*-- do_termin() intoarce mereu .T. (_frm_base.vc2:363, DoDefault fara RETURN) si nid_vanzare
|
||||
*-- ramane santinela la esec: singura dovada e randul din VANZARI, pe serie_act + nract.
|
||||
lnIdVanzareRezultat = CdocGasesteIdVanzare(lcSerieAlocata, lnNractAlocat)
|
||||
IF lnIdVanzareRezultat < 0
|
||||
lnIdVanzareRezultat = 0
|
||||
ENDIF
|
||||
DO S8Log WITH ' verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ;
|
||||
' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
|
||||
|
||||
IF TYPE('goFrm8') = 'O' AND !ISNULL(goFrm8)
|
||||
goFrm8.Release()
|
||||
|
||||
57
utile/Teste/editare_factura/curata_s11_borderou.prg
Normal file
57
utile/Teste/editare_factura/curata_s11_borderou.prg
Normal file
@@ -0,0 +1,57 @@
|
||||
* curata_s11_borderou.prg - sterge fizic borderourile semanate de proba S11 (rularile 2 si 4 ale
|
||||
* lui test_s9_4_regenerare.prg le lasa in urma; rularile 3 si 5 se curata singure).
|
||||
* Parametru: lista de id-uri FACT_BORDEROU, separate prin virgula. Borderourile dinainte de proba
|
||||
* (id <= 19 pe MARIUSM_AUTO la 04.09.2026) NU se ating.
|
||||
LPARAMETERS tcListaId
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\curata_s11_borderou_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' lista=' + TRANSFORM(tcListaId) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
LOCAL lcLista
|
||||
lcLista = CHRTRAN(ALLTRIM(TRANSFORM(tcListaId)), ' ', '')
|
||||
IF EMPTY(lcLista) OR !ISDIGIT(LEFT(lcLista, 1))
|
||||
STRTOFILE('EROARE: se cere o lista de id-uri numerice, ex: DO curata_s11_borderou WITH "20,21"' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnDet, lnAnt
|
||||
lnDet = -1
|
||||
lnAnt = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou_detalii where id_borderou in (] + lcLista + [)], @lnDet)
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou where id in (] + lcLista + [)], @lnAnt)
|
||||
STRTOFILE('inainte: ' + TRANSFORM(lnAnt) + ' borderouri, ' + TRANSFORM(lnDet) + ' randuri de detaliu' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF goExecutor.oExecuta([delete from ] + gcs + [.fact_borderou_detalii where id_borderou in (] + lcLista + [)]) AND ;
|
||||
goExecutor.oExecuta([delete from ] + gcs + [.fact_borderou where id in (] + lcLista + [)])
|
||||
goExecutor.oExecuta([COMMIT])
|
||||
ELSE
|
||||
STRTOFILE('ESEC la stergere: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oExecuta([ROLLBACK])
|
||||
ENDIF
|
||||
|
||||
lnDet = -1
|
||||
lnAnt = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou_detalii where id_borderou in (] + lcLista + [)], @lnDet)
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou where id in (] + lcLista + [)], @lnAnt)
|
||||
STRTOFILE('dupa: ' + TRANSFORM(lnAnt) + ' borderouri, ' + TRANSFORM(lnDet) + ' randuri de detaliu' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lnDet = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.fact_borderou_detalii], @lnDet)
|
||||
STRTOFILE('total ramas in FACT_BORDEROU_DETALII: ' + TRANSFORM(lnDet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
40
utile/Teste/editare_factura/curata_s9_5_atasamente.prg
Normal file
40
utile/Teste/editare_factura/curata_s9_5_atasamente.prg
Normal file
@@ -0,0 +1,40 @@
|
||||
* curata_s9_5_atasamente.prg - sterge fizic atasamentele semanate de probele S9-5 si S11 pe
|
||||
* documentele atinse (S9-5: 1073 controlul negativ, 1074 rularea verde; S11: 1127 rularea verde,
|
||||
* 1128 controlul negativ, 1076/1111/1129 rulari care nu au consumat documentul).
|
||||
* Randurile legate prin COD (cele 20 mostenite) NU se ating.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\curata_s9_5_atasamente_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnNr
|
||||
lnNr = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.atasamente_vanzari where id_vanzare in (1073,1074,1076,1111,1127,1128,1129)], @lnNr)
|
||||
STRTOFILE('inainte: ' + TRANSFORM(lnNr) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF goExecutor.oExecuta([delete from ] + gcs + [.atasamente_vanzari where id_vanzare in (1073,1074,1076,1111,1127,1128,1129)])
|
||||
goExecutor.oExecuta([COMMIT])
|
||||
ENDIF
|
||||
|
||||
lnNr = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.atasamente_vanzari where id_vanzare in (1073,1074,1076,1111,1127,1128,1129)], @lnNr)
|
||||
STRTOFILE('dupa: ' + TRANSFORM(lnNr) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lnNr = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from ] + gcs + [.atasamente_vanzari], @lnNr)
|
||||
STRTOFILE('total ramas in tabela: ' + TRANSFORM(lnNr) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
@@ -4,6 +4,11 @@
|
||||
* (pack_contafin.finalizeaza_modificare_nota -> pack_facturare.actualizeaza_vanzari), deci orice
|
||||
* ancorare pe cod moare tacut; ID_VANZARE ramane, dar nici el nu e cunoscut dinainte.
|
||||
*
|
||||
* *!* 06.09.2026
|
||||
* *!* marius.mutu
|
||||
* *!* Cazurile care aleg documente cu articole reale exclud notele cu un rand activ pe un cont
|
||||
* *!* care cere simbol analitic si nu il are; altfel verificare_note_contabile respinge salvarea.
|
||||
*
|
||||
* DescoperaCazTest(<nume caz>, <alias destinatie>) -> .T. daca a gasit un document, lasand in alias
|
||||
* un singur rand cu cod, an, luna, id_vanzare, tip, nlin (plus nract/serie_act/dataact/nract_fara
|
||||
* pentru cazul de coliziune). Pe .F. aliasul ramane cu 0 randuri.
|
||||
@@ -26,7 +31,7 @@
|
||||
FUNCTION DescoperaCazTest
|
||||
LPARAMETERS tcCaz, tcAlias
|
||||
|
||||
LOCAL lcAlias, lcNlin, lcPrim, lcJoinP, lcTriplete, lcJoinT, lcOrb, lcNractFara, lcSql, lnSucces
|
||||
LOCAL lcAlias, lcNlin, lcPrim, lcJoinP, lcTriplete, lcJoinT, lcOrb, lcNractFara, lcFiltruAnalitic, lcSql, lnSucces
|
||||
|
||||
lcAlias = IIF(Type('tcAlias') = 'C' AND !Empty(m.tcAlias), m.tcAlias, 'crscaz')
|
||||
|
||||
@@ -59,15 +64,21 @@ FUNCTION DescoperaCazTest
|
||||
[(select 1 from vanzari w where w.cod=y.cod and nvl(w.numar_act,-1)=nvl(y.nract,-1) ] + ;
|
||||
[and nvl(w.serie_act,' ')=nvl(y.serie_act,' ') and trunc(w.data_act)=trunc(y.dataact) and w.sters=0))]
|
||||
|
||||
*!* verificare_note_contabile respinge salvarea unei note cu cont ce cere analitic si nu il are
|
||||
lcFiltruAnalitic = [not exists (select 1 from vact_tot x where x.cod=p.cod and x.an=p.an and x.luna=p.luna ] + ;
|
||||
[and x.sters=0 and nvl(x.suma,0)<>0 and ( ] + ;
|
||||
[(x.ascd is null and exists (select 1 from vplcont_analitic pa where pa.cont=x.scd and pa.an=?gnAn and pa.inactiv=0)) ] + ;
|
||||
[or (x.ascc is null and exists (select 1 from vplcont_analitic pa where pa.cont=x.scc and pa.an=?gnAn and pa.inactiv=0)) ))]
|
||||
|
||||
DO CASE
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'FACTURA_ARTICOLE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip = 1 and ] + m.lcNlin + [ > 0 ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip = 1 and ] + m.lcNlin + [ > 0 and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'NEFACTURA_ARTICOLE'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip <> 1 and ] + m.lcNlin + [ > 0 ] + ;
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where v.tip <> 1 and ] + m.lcNlin + [ > 0 and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'FARA_RULAJE'
|
||||
@@ -75,11 +86,12 @@ FUNCTION DescoperaCazTest
|
||||
m.lcPrim + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 ] + ;
|
||||
[and not exists (select 1 from vrul_tot r where r.cod=p.cod and r.an=p.an and r.luna=p.luna and r.sters=0) ] + ;
|
||||
[and not exists (select 1 from vrul_obinv_tot r where r.cod=p.cod and r.an=p.an and r.luna=p.luna and r.sters=0) ] + ;
|
||||
[and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'PRIM_RAND_ORB'
|
||||
lcSql = [select * from (select v.id_vanzare, p.cod, p.an, p.luna, v.tip, ] + m.lcNlin + [ nlin from ] + ;
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ ] + ;
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'COLIZIUNE_COD'
|
||||
@@ -91,6 +103,7 @@ FUNCTION DescoperaCazTest
|
||||
m.lcTriplete + [ ] + m.lcJoinP + [ where ] + m.lcNlin + [ > 0 and ] + m.lcOrb + [ ] + ;
|
||||
[and (select count(distinct v2.id_vanzare) from vanzari v2 where v2.cod=p.cod and v2.sters=0) >= 2 ] + ;
|
||||
[and ] + Strtran(m.lcNractFara, [<COL>], [nract]) + [ is not null ] + ;
|
||||
[and ] + m.lcFiltruAnalitic + [ ] + ;
|
||||
[order by v.id_vanzare desc) where rownum = 1]
|
||||
|
||||
CASE Upper(Alltrim(m.tcCaz)) == 'NOTA_FARA_VANZARI'
|
||||
|
||||
454
utile/Teste/editare_factura/emite_document_stoc_s93.prg
Normal file
454
utile/Teste/editare_factura/emite_document_stoc_s93.prg
Normal file
@@ -0,0 +1,454 @@
|
||||
* emite_document_stoc_s93.prg
|
||||
* Reumple rezervorul lui test_s9_3_stergere.prg (candidat eligibil: STERS=0, in luna activa,
|
||||
* fara referinte/urmasi, cu randuri REALE in vact_tot SI vrul_tot). Emite UN document REAL
|
||||
* in MARIUSM_AUTO@ROA_CENTRAL prin fluxul de productie (docs\raport_datoria4_stergere.md).
|
||||
*
|
||||
* Baza: COMUN\utile\Teste\facturare_unificat\test_s3b_emitere_reala.prg (tnTip=22, AVIZ din lista
|
||||
* de preturi, client RAJA id_part=463, forma veche frm_facturare_articole, tip_incasare=1) -
|
||||
* singura combinatie confirmata ca scrie in VANZARI in acest mediu. DOUA modificari fata de acel
|
||||
* fisier, ambele necesare ca sa apara randuri in RUL (nu doar in ACT):
|
||||
*
|
||||
* 1) NU se mai reseteaza gnIdUtil la -3 inainte de cursor_preturi (acolo ramane doar pentru
|
||||
* alocarea numarului). Cu gnIdUtil=8 lista de preturi FACT_VPRETURI_UTILIZATOR intoarce
|
||||
* articole GESTIONABILE cu stoc real (verificat read-only); cu -3 intoarce un singur articol
|
||||
* negestionabil, cantitate 0 - de-asta suita S3b/creeaza_documente_s8 nu producea niciodata
|
||||
* randuri vrul_tot (docs\raport_s13b_fixturi.md §6.1).
|
||||
* 2) V_FILTRU_COD = '11.00003' (id_articol=315554536, ACOPERIRE FAR VOLVO FH12) restrange
|
||||
* cursor_preturi la UN singur articol gestionabil cu stoc mare (>11000 bucati la data
|
||||
* scrierii acestui fisier), ca sa nu intre in document toata lista de preturi a utilizatorului 8.
|
||||
*
|
||||
* Rulare: vfp9.exe -A -T "D:\ROA\...\emite_document_stoc_s93.prg" (headless, cateva secunde)
|
||||
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\emite_document_stoc_s93.log
|
||||
* Rezultat: STRTOFILE cu 'id_vanzare=<n>' la succes, sau 'ESEC' - vezi raportul pentru numerele arse.
|
||||
|
||||
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, gnPass, gnFail
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out")
|
||||
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out"
|
||||
ENDIF
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\emite_document_stoc_s93.log"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLog)
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
ON ERROR DO EmiteErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
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 EmiteLog WITH 'EROARE: conectare Oracle esuata'
|
||||
DO EmiteFinal
|
||||
ENDIF
|
||||
DO EmiteLog WITH 'test_init_env_auto_roafacturare OK, gnHandle=' + TRANSFORM(gnHandle)
|
||||
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
||||
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
||||
SET CLASSLIB TO gridextras.vcx ADDITIVE
|
||||
SET CLASSLIB TO _cb_base.vcx ADDITIVE
|
||||
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\lib_comparatie_documente.prg" ADDITIVE
|
||||
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO EmiteLog WITH 'EROARE: actualizeaza_optiuni_program()'
|
||||
DO EmiteFinal
|
||||
ENDIF
|
||||
*-- gnScadereStoc=1 (nu 0, spre deosebire de test_s3b_emitere_reala.prg): cu 0, do_adauga_articol
|
||||
*-- ocoleste mereu do_alege_stoc (ofacturare.vc2:13021), deci ID_GESTIUNE ramane null pe linie si
|
||||
*-- nu apare niciun rand in vrul_tot, indiferent de cantitate/stoc. Cu 1 si UN singur candidat de
|
||||
*-- gestiune (Reccount(crsgestarticol)=1) + tlImplicit=.T., do_alege_stoc(ofacturare.vc2:13478)
|
||||
*-- alege automat gestiunea, FARA sa arate modalul (frm_articol_gest_factura.inainte_de_do_termin
|
||||
*-- se autoconfirma cand nu exista nicio eroare de validare).
|
||||
gnScadereStoc = 1
|
||||
gnModTotFact = 0
|
||||
gnFactSeturi = 0
|
||||
gnListareAvizBonFiscal = 0
|
||||
gnid_part_casa = 0
|
||||
gnIdSucursala = 167
|
||||
goExecutor.oExecuta([begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;])
|
||||
DO EmiteLog WITH 'optiuni OK gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala)
|
||||
|
||||
PUBLIC goDriverAD, glDlgTratatAD, gnTipIncasareCerut, gnNrIncasareCapturat, gcClaseVazute
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = 1
|
||||
gnNrIncasareCapturat = 0
|
||||
gcClaseVazute = ';'
|
||||
goDriverAD = CREATEOBJECT('driverAlteDateEmite')
|
||||
_SCREEN.AddObject('tmrDrvEmite', 'Timer')
|
||||
_SCREEN.tmrDrvEmite.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrDrvEmite, 'Timer', goDriverAD, 'Executa')
|
||||
_SCREEN.tmrDrvEmite.Enabled = .T.
|
||||
|
||||
*-- driverGestArticol: acelasi timer, un al doilea BINDEVENT - conduce modalul per-linie
|
||||
*-- FRM_ARTICOL_GEST_FACTURA (do_alege_stoc, ofacturare.vc2:13518/13526/13540)
|
||||
PUBLIC goDriverGest, glDlgTratatGest, goUltimulFormGest
|
||||
glDlgTratatGest = .F.
|
||||
goUltimulFormGest = .NULL.
|
||||
goDriverGest = CREATEOBJECT('driverGestArticol')
|
||||
BINDEVENT(_SCREEN.tmrDrvEmite, 'Timer', goDriverGest, 'Executa')
|
||||
|
||||
_SCREEN.Caption = 'emite_document_stoc_s93 - reumplere pool S9-3'
|
||||
|
||||
LOCAL lnIdVz
|
||||
lnIdVz = CreeazaDocumentStoc()
|
||||
_SCREEN.tmrDrvEmite.Enabled = .F.
|
||||
|
||||
DO Assert WITH lnIdVz > 0, 'documentul exista in VANZARI (jonctiune serie_act+nract), e=' + TRANSFORM(lnIdVz)
|
||||
IF lnIdVz > 0
|
||||
DO EmiteLog WITH 'id_vanzare=' + TRANSFORM(lnIdVz)
|
||||
ELSE
|
||||
DO EmiteLog WITH 'ESEC'
|
||||
ENDIF
|
||||
|
||||
DO EmiteFinal
|
||||
|
||||
CATCH TO loExc
|
||||
DO EmiteLog WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO EmiteFinal
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE EmiteLog
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13)+CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE EmiteErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO EmiteLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE EmiteFinal
|
||||
DO EmiteLog WITH CHR(13)+CHR(10) + 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail)
|
||||
DO EmiteLog WITH 'END ' + TTOC(DATETIME())
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Assert
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO EmiteLog WITH 'PASS: ' + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO EmiteLog WITH 'FAIL: ' + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
* CreeazaDocumentStoc: emite un document REAL (tnTip=22, cursor_preturi filtrat pe UN articol
|
||||
* gestionabil cu stoc), tip_incasare=1 (Fara incasare), forma veche. Intoarce id_vanzare (>0
|
||||
* succes) sau 0.
|
||||
FUNCTION CreeazaDocumentStoc
|
||||
*-- lcFiltruCod PRIVATE, nu LOCAL: goExecutor.oExecute leaga parametrii dupa numele
|
||||
*-- variabilei (ca poDate.* mai jos), deci trebuie vizibila din metoda apelata, nu doar aici.
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, lcFiltruCod
|
||||
LOCAL lnIdSet, lcSqlCursor, lcCursor, lnSucces, lnIdVanzareRezultat, tnTip, tnIdClient, tnIdDelegat
|
||||
LOCAL lcSerieAlocata, lnNractAlocat
|
||||
lnIdVanzareRezultat = 0
|
||||
lcSerieAlocata = ''
|
||||
lnNractAlocat = 0
|
||||
gnNrIncasareCapturat = 0
|
||||
tnTip = 22
|
||||
tnIdClient = 463
|
||||
tnIdDelegat = 256
|
||||
*-- 4294507796 / MOTOREDUCTOR 20SEC: UN singur lot in gestiunea 1 (Reccount(crsgestarticol)=1,
|
||||
*-- verificat read-only) - conditia lui do_alege_stoc pentru autoselectie fara modal.
|
||||
lcFiltruCod = '0V2549'
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
|
||||
lnIdSet = 25900
|
||||
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip)
|
||||
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
||||
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
||||
poDate.nIdTipDoc = 6 && AVIZ - plaja globala
|
||||
|
||||
gnIdUtil = 8
|
||||
poGeneratorNumere.ResetNumere()
|
||||
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
||||
|
||||
poDate.id_client = tnIdClient
|
||||
poDate.id_delegat = tnIdDelegat
|
||||
poDate.zi_curs = {^2026-08-10}
|
||||
*-- gestiune reala (nu NULL): fara ea cursor_preturi arata articolul gestionabil dar
|
||||
*-- scrierea documentului nu are de unde sa scada stocul - primul document emis (id_vanzare=1474)
|
||||
*-- a iesit cu 0 randuri in vrul_tot desi articolul era gestionabil, cu stoc.
|
||||
poDate.id_gestiune_init = 1
|
||||
|
||||
IF poDate.rezultat_serii = 3
|
||||
poDate.serie_act = poGeneratorNumere.getSerieCursor(poDate.nIdTipDoc)
|
||||
ENDIF
|
||||
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
||||
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
|
||||
*-- gnIdUtil ramane 8 (NU -3, spre deosebire de test_s3b_emitere_reala.prg): cu -3
|
||||
*-- cursor_preturi intoarce un singur articol negestionabil, cantitate 0 - fara asta
|
||||
*-- documentul nu ar avea nicio sansa de rand in RUL.
|
||||
lcSerieAlocata = ALLTRIM(TRANSFORM(NVL(poDate.serie_act, [])))
|
||||
lnNractAlocat = poDate.nract
|
||||
DO EmiteLog WITH 'poDate.nract=' + TRANSFORM(poDate.nract) + ' serie_act=[' + TRANSFORM(NVL(poDate.serie_act,[])) + ']'
|
||||
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC'$UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC'$UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ;
|
||||
[?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala,?lcFiltruCod)}]
|
||||
|
||||
lcCursor = [crsarticole]
|
||||
lnSucces = goExecutor.oExecute(lcSqlCursor, lcCursor)
|
||||
IF lnSucces < 0
|
||||
DO EmiteLog WITH 'EROARE cursor articole: ' + goExecutor.oPrelucrareEroare()
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO CurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
IF RECCOUNT(lcCursor) = 0
|
||||
DO EmiteLog WITH 'Nu exista articole (Reccount=0) - abandon document'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO CurataJtva
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN 0
|
||||
ENDIF
|
||||
DO EmiteLog WITH 'crsarticole Reccount=' + TRANSFORM(RECCOUNT(lcCursor))
|
||||
|
||||
SELECT (lcCursor)
|
||||
REPLACE ALL cantitate WITH 1, ;
|
||||
pret_val WITH IIF(tip_valuta = 1, 100, 0), ;
|
||||
pret WITH IIF(tip_valuta = 1, ROUND(100 * IIF(NVL(curs, 0) = 0, 1, curs) / IIF(NVL(multiplicator, 0) = 0, 1, multiplicator), gnPPretV), 100)
|
||||
=TABLEUPDATE(.T., .T., lcCursor)
|
||||
GO TOP
|
||||
|
||||
creeaza_facturacrs([crsfactura])
|
||||
|
||||
IF poDate.in_valuta = 1
|
||||
SELECT DISTINCT Curs, nume_val, id_valuta, multiplicator FROM (lcCursor) WITH (Buffering = .T.) WHERE tip_valuta = 1 ORDER BY nume_val INTO CURSOR crscursuri
|
||||
SELECT crscursuri
|
||||
poDate.Curs = Curs
|
||||
poDate.multiplicator = multiplicator
|
||||
ELSE
|
||||
citeste_cursuri_zi(poDate.zi_curs)
|
||||
IF RECCOUNT('crscursuri') = 0
|
||||
USE IN crscursuri
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
IF TYPE(lcCursor + '.nume_lista_preturi') <> 'U'
|
||||
CREATE CURSOR crspolitici (id_pol N(20), nume_lista_preturi c(100))
|
||||
SELECT crspolitici
|
||||
INSERT INTO crspolitici(id_pol, nume_lista_preturi) VALUES (-9999, '<TOATE>')
|
||||
INSERT INTO crspolitici(id_pol, nume_lista_preturi) ;
|
||||
SELECT DISTINCT id_pol, nume_lista_preturi FROM (lcCursor) ORDER BY nume_lista_preturi
|
||||
ENDIF
|
||||
|
||||
PUBLIC goFrmEmite
|
||||
goFrmEmite = CREATEOBJECT('frm_facturare_articole')
|
||||
goFrmEmite.WindowType = 0
|
||||
goFrmEmite.Show()
|
||||
DOEVENTS FORCE
|
||||
DO EmiteLog WITH 'formular afisat modeless (VECHI frm_facturare_articole)'
|
||||
|
||||
glDlgTratatGest = .F.
|
||||
goFrmEmite.do_adauga_tot()
|
||||
DOEVENTS FORCE
|
||||
DO EmiteLog WITH 'do_adauga_tot() -> Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ;
|
||||
' glDlgTratatGest=' + TRANSFORM(glDlgTratatGest)
|
||||
|
||||
*-- do_initializeaza_articol zeroeste cantitatea la adaugare (ca la tip 1, ofacturare.vc2:13890) -
|
||||
*-- se scrie explicit dupa adaugare, ca in test_s6_1_lista_preturi.prg (SeteazaCantitati):
|
||||
*-- fara asta VANZARI_DETALII.CANTITATE ramane 0 si nu apare niciun rand in vrul_tot.
|
||||
LOCAL loArtCant
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
REPLACE cantitate WITH 1
|
||||
SCATTER NAME loArtCant MEMO
|
||||
loArtCant = calculeaza_totaluri(loArtCant)
|
||||
GATHER NAME loArtCant MEMO
|
||||
ENDSCAN
|
||||
DO EmiteLog WITH 'cantitate setata explicit pe crsfactura'
|
||||
|
||||
goFrmEmite.do_calculeaza_totaluri()
|
||||
DOEVENTS FORCE
|
||||
|
||||
LOCAL lnScris
|
||||
glDlgTratatAD = .F.
|
||||
gnTipIncasareCerut = 1
|
||||
lnScris = goFrmEmite.do_termin()
|
||||
LOCAL lnWait
|
||||
lnWait = 0
|
||||
DO WHILE !glDlgTratatAD AND lnWait < 10
|
||||
DOEVENTS FORCE
|
||||
lnWait = lnWait + 1
|
||||
ENDDO
|
||||
DO EmiteLog WITH 'do_termin() -> ' + TRANSFORM(lnScris) + ' poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare,0))
|
||||
|
||||
lnIdVanzareRezultat = CdocGasesteIdVanzare(lcSerieAlocata, lnNractAlocat)
|
||||
IF lnIdVanzareRezultat < 0
|
||||
lnIdVanzareRezultat = 0
|
||||
ENDIF
|
||||
DO EmiteLog WITH 'verificare in VANZARI pe ' + lcSerieAlocata + ' ' + TRANSFORM(lnNractAlocat) + ' -> id_vanzare=' + TRANSFORM(lnIdVanzareRezultat)
|
||||
|
||||
IF TYPE('goFrmEmite') = 'O' AND !ISNULL(goFrmEmite)
|
||||
goFrmEmite.Release()
|
||||
ENDIF
|
||||
goFrmEmite = NULL
|
||||
|
||||
IF USED('crspolitici')
|
||||
USE IN crspolitici
|
||||
ENDIF
|
||||
IF USED('crscursuri')
|
||||
USE IN crscursuri
|
||||
ENDIF
|
||||
IF USED('crsfactura')
|
||||
USE IN crsfactura
|
||||
ENDIF
|
||||
IF USED('crsarticole')
|
||||
USE IN crsarticole
|
||||
ENDIF
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF USED('jtva_coloane_temp')
|
||||
USE IN jtva_coloane_temp
|
||||
ENDIF
|
||||
|
||||
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
||||
RETURN lnIdVanzareRezultat
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE CurataJtva
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF USED('jtva_coloane_temp')
|
||||
USE IN jtva_coloane_temp
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
*-- driverAlteDateEmite: identic cu driverAlteDateAD din test_s3b_emitere_reala.prg - cauta
|
||||
* FRM_ALTE_DATE prin _SCREEN.Forms si ii seteaza opt_incasat.Value INAINTE de do_termin().
|
||||
DEFINE CLASS driverAlteDateEmite AS Custom
|
||||
PROCEDURE Executa
|
||||
LOCAL lnI, loForm, llGasit, loMsgForm
|
||||
llGasit = .F.
|
||||
loMsgForm = NULL
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
LOCAL lcClasa
|
||||
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
||||
IF lcClasa == 'FRM_ALTE_DATE'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
IF 'MESSAGEBOX_FORM' $ lcClasa
|
||||
loMsgForm = _SCREEN.Forms(lnI)
|
||||
ENDIF
|
||||
IF !(lcClasa $ gcClaseVazute)
|
||||
gcClaseVazute = gcClaseVazute + lcClasa + ';'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !ISNULL(loMsgForm)
|
||||
TRY
|
||||
DO CASE
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
||||
loMsgForm.cmgBotones.cmdYes.Click()
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
||||
loMsgForm.cmgBotones.cmdOk.Click()
|
||||
ENDCASE
|
||||
CATCH TO loExcMsg
|
||||
DO EmiteLog WITH '[diag timer] messagebox_form: CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
||||
ENDTRY
|
||||
ENDIF
|
||||
IF glDlgTratatAD OR !llGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
TRY
|
||||
loForm.opt_incasat.Value = gnTipIncasareCerut
|
||||
gnNrIncasareCapturat = poDate.nr_incasare
|
||||
loForm.do_termin()
|
||||
glDlgTratatAD = .T.
|
||||
CATCH TO loExcDrv
|
||||
DO EmiteLog WITH 'driverAlteDateEmite: CATCH ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ' Message=' + loExcDrv.Message + ;
|
||||
' Procedure=' + loExcDrv.Procedure + ' LineNo=' + TRANSFORM(loExcDrv.LineNo)
|
||||
glDlgTratatAD = .T.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
*==================================================================================
|
||||
*-- driverGestArticol: acelasi mecanism (poll _SCREEN.Forms + apel direct do_termin(), fara input
|
||||
* real) ca driverAlteDateAD/driverAlteDateEmite, dar pentru FRM_ARTICOL_GEST_FACTURA - modalul
|
||||
* per-linie al lui do_alege_stoc (ofacturare.vc2:13518/13526/13540), aratat neconditionat cand
|
||||
* inainte_de_do_termin() esueaza pe randul curent din crsgestarticol (chiar si pe ramura cu un
|
||||
* singur lot + tlImplicit, ofacturare.vc2:13495-13524, pentru ca poArticol.cantitate a fost deja
|
||||
* zeroit de do_initializeaza_articol - ofacturare.vc2:13922, tip 22 fara opt_facturare 1/2).
|
||||
* Copiaza pe poArticol campurile randului curent din crsgestarticol (ce ar face si navigarea in
|
||||
* grid_gestiuni.AfterRowColChange, ofacturare.vc2:4227-4239) plus o cantitate nenula, apoi cheama
|
||||
* do_termin() direct pe formular.
|
||||
*-- do_adauga_tot() SCANeaza crsarticole (aici 2 randuri, acelasi articol pe doua liste de preturi
|
||||
* ale utilizatorului 8) si cheama do_alege_stoc() o data PE RAND - modalul poate aparea de mai multe
|
||||
* ori, secvential, in aceeasi rulare. De-asta flagul de "tratat" nu e global (ca la frm_alte_date,
|
||||
* aratat o singura data): retine INSTANTA de formular deja tratata (goUltimulFormGest) - o instanta
|
||||
* noua (formular urmator) tot se trateaza, aceeasi instanta nu se retrateaza daca timer-ul mai apuca
|
||||
* un tick inainte sa se inchida.
|
||||
DEFINE CLASS driverGestArticol AS Custom
|
||||
PROCEDURE Executa
|
||||
LOCAL lnI, loForm, llGasit
|
||||
llGasit = .F.
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
LOCAL lcClasa
|
||||
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
||||
IF lcClasa == 'FRM_ARTICOL_GEST_FACTURA'
|
||||
loForm = _SCREEN.Forms(lnI)
|
||||
llGasit = .T.
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !llGasit OR loForm = goUltimulFormGest
|
||||
RETURN
|
||||
ENDIF
|
||||
TRY
|
||||
SELECT crsgestarticol
|
||||
GO TOP
|
||||
poArticol.cantitate = 1
|
||||
poArticol.pret_achizitie = Pret
|
||||
poArticol.lot = NVL(lot, [])
|
||||
poArticol.serie = NVL(serie, [])
|
||||
poArticol.id_gestiune = id_gestiune
|
||||
poArticol.Cont = ALLTRIM(Cont)
|
||||
poArticol.id_lucrare_rez = id_lucrare_rez
|
||||
poArticol.id_part_rez = id_part_rez
|
||||
poArticol.pretv_orig = pretv
|
||||
poArticol.id_valuta_d = NVL(id_valuta, 0)
|
||||
poArticol.pretd = pretd
|
||||
DO EmiteLog WITH ' driverGestArticol: id_gestiune=' + TRANSFORM(poArticol.id_gestiune) + ;
|
||||
' pret_achizitie=' + TRANSFORM(poArticol.pret_achizitie) + ' cantitate=' + TRANSFORM(poArticol.cantitate)
|
||||
loForm.do_termin()
|
||||
glDlgTratatGest = .T.
|
||||
goUltimulFormGest = loForm
|
||||
CATCH TO loExcDrv
|
||||
DO EmiteLog WITH 'driverGestArticol: CATCH ErrorNo=' + TRANSFORM(loExcDrv.ErrorNo) + ' Message=' + loExcDrv.Message + ;
|
||||
' Procedure=' + loExcDrv.Procedure + ' LineNo=' + TRANSFORM(loExcDrv.LineNo)
|
||||
glDlgTratatGest = .T.
|
||||
goUltimulFormGest = loForm
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
49
utile/Teste/editare_factura/find_defect5_doc.prg
Normal file
49
utile/Teste/editare_factura/find_defect5_doc.prg
Normal file
@@ -0,0 +1,49 @@
|
||||
* find_defect5_doc.prg
|
||||
* Cautare read-only: document real cu incasat<>0, tip 1-4, ne-proforma, in luna curenta,
|
||||
* care trece garzile din do_editare_unificata (nesters, fara referinte/urmasi/eFactura).
|
||||
* Nu scrie nimic. Scris pentru dovada defectului 5 (docs\raport_s8_defect5_incasat.md).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\find_defect5_doc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSelect, lnSucces
|
||||
lcSelect = [select id_vanzare, tip, eproforma, sters, incasat, data_act, nr_incasare, id_fact from fact_vfacturi ] + ;
|
||||
[where incasat <> 0 and tip between 1 and 4 and eproforma = 0 and sters = 0 ] + ;
|
||||
[and extract(year from data_act) = ] + TRANSFORM(gnAn) + [ and extract(month from data_act) = ] + TRANSFORM(gnLuna) + [ ] + ;
|
||||
[order by id_vanzare]
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSelect, 'crsCandidati')
|
||||
STRTOFILE('oExecute: ' + TRANSFORM(lnSucces) + ' eroare: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces >= 0 AND USED('crsCandidati')
|
||||
STRTOFILE('candidati gasiti: ' + TRANSFORM(RECCOUNT('crsCandidati')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsCandidati
|
||||
SCAN
|
||||
STRTOFILE('id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' incasat=' + TRANSFORM(incasat) + ;
|
||||
' data_act=' + TRANSFORM(data_act) + ' nr_incasare=' + TRANSFORM(nr_incasare) + ' id_fact=' + TRANSFORM(NVL(id_fact,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ELSE
|
||||
STRTOFILE('interogare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
61
utile/Teste/editare_factura/find_tipincasare23_doc.prg
Normal file
61
utile/Teste/editare_factura/find_tipincasare23_doc.prg
Normal file
@@ -0,0 +1,61 @@
|
||||
* find_tipincasare23_doc.prg
|
||||
* Cautare read-only: document real cu tip_incasare in (2,3), incasat<>0, tip 1-4, ne-proforma,
|
||||
* nesters, ca sa probeze maparea D4 (bon fiscal / card) alaturi de documentul 1071 (chitanta).
|
||||
* Nu scrie nimic.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\find_tipincasare23_doc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSelect, lnSucces
|
||||
lcSelect = [select id_vanzare, tip, eproforma, sters, incasat, nr_incasare, tip_incasare, serie_chit, data_act, id_fact from fact_vfacturi ] + ;
|
||||
[where incasat <> 0 and tip between 1 and 4 and eproforma = 0 and sters = 0 and tip_incasare in (2,3) ] + ;
|
||||
[order by tip_incasare, id_vanzare]
|
||||
|
||||
lnSucces = goExecutor.oExecute(lcSelect, 'crsCandidati')
|
||||
STRTOFILE('oExecute: ' + TRANSFORM(lnSucces) + ' eroare: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
IF lnSucces >= 0 AND USED('crsCandidati')
|
||||
STRTOFILE('candidati gasiti: ' + TRANSFORM(RECCOUNT('crsCandidati')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsCandidati
|
||||
SCAN
|
||||
STRTOFILE('id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' incasat=' + TRANSFORM(incasat) + ;
|
||||
' nr_incasare=' + TRANSFORM(nr_incasare) + ' tip_incasare=' + TRANSFORM(tip_incasare) + ;
|
||||
' serie_chit=[' + TRANSFORM(NVL(serie_chit,'')) + ']' + ;
|
||||
' data_act=' + TRANSFORM(data_act) + ' id_fact=' + TRANSFORM(NVL(id_fact,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
ELSE
|
||||
STRTOFILE('interogare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
*!* verifica si luna documentului 1071, util pentru decizia rutei de proba (do_editare_unificata cere luna curenta)
|
||||
IF Used('crs1071')
|
||||
Use In crs1071
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_vanzare, data_act, sters, eproforma, tip, id_fact from fact_vfacturi where id_vanzare = 1071], 'crs1071')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces >= 0 AND USED('crs1071') AND RECCOUNT('crs1071') = 1
|
||||
STRTOFILE('1071: data_act=' + TRANSFORM(crs1071.data_act) + ' sters=' + TRANSFORM(crs1071.sters) + ' eproforma=' + TRANSFORM(crs1071.eproforma) + ' tip=' + TRANSFORM(crs1071.tip) + ' id_fact=' + TRANSFORM(NVL(crs1071.id_fact,0)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
STRTOFILE('gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
57
utile/Teste/editare_factura/mock_incarca_linii_prefix.prg
Normal file
57
utile/Teste/editare_factura/mock_incarca_linii_prefix.prg
Normal file
@@ -0,0 +1,57 @@
|
||||
* mock_incarca_linii_prefix.prg
|
||||
* Control negativ pentru FACT-008: versiunea DINAINTE de reparatie a lui
|
||||
* IncarcaLiniiFacturaEditare (fara Cont in crsarticole_editare / REPLACE si fara re-derivarea lui
|
||||
* pretv_orig din RUL). Se incarca INAINTEA lui ofacturare_editare.prg in SET PROCEDURE, deci
|
||||
* castiga la nume duplicat. Nu atinge niciun fisier de productie.
|
||||
FUNCTION IncarcaLiniiFacturaEditare
|
||||
LPARAMETERS toDate, tnIdVanzare
|
||||
|
||||
LOCAL llInValuta, lnCursDoc, lnMultDoc, lnIdTemp, lnGestionabil
|
||||
|
||||
llInValuta = (toDate.in_valuta = 1)
|
||||
lnCursDoc = Nvl(toDate.Curs,1)
|
||||
lnMultDoc = Nvl(toDate.multiplicator,1)
|
||||
|
||||
IncarcaArticoleFactura(m.tnIdVanzare, 'crsarticole_doc')
|
||||
|
||||
IF Used('crsarticole_editare')
|
||||
Use In crsarticole_editare
|
||||
ENDIF
|
||||
SELECT id_vanzare_det, id_articol, explicatie, Nvl(denumire,[]) As denumire, lot, serie, codmat, id_jtva_coloana, taxcode, ;
|
||||
pret_achizitie, cantitate, proc_tvav, pret_cu_tva, id_vanzare_set, id_gestiune, id_ctr, id_valuta, nume_val, in_stoc, ;
|
||||
id_pol, pretd, id_valutad, ;
|
||||
Nvl(curs, m.lnCursDoc) As curs, Nvl(multiplicator, m.lnMultDoc) As multiplicator, ;
|
||||
Iif(m.llInValuta, Round(pret * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), pret) As pret, ;
|
||||
Iif(m.llInValuta, pret, 0) As pret_val, ;
|
||||
Iif(m.llInValuta, Round(discount_unitar * Nvl(curs, m.lnCursDoc) / Nvl(multiplicator, m.lnMultDoc), gnPPretV), discount_unitar) As discount_unitar, ;
|
||||
Iif(m.llInValuta, discount_unitar, 0) As discount_unitar_val, ;
|
||||
Iif(m.llInValuta,1,0) As tip_valuta, ;
|
||||
Cast(.Null. As N(10)) As id_jtva_coloana_ex, Space(50) As codmatf, Space(50) As codbare, Space(10) As um, Space(50) As numar_contract ;
|
||||
FROM crsarticole_doc INTO CURSOR crsarticole_editare READWRITE
|
||||
|
||||
creeaza_facturacrs('crsfactura')
|
||||
prelucreaza_facturacrs('crsarticole_editare','crsfactura',0,0,0)
|
||||
|
||||
*!* gestionabil vine din nomenclatorul curent, nu din id_gestiune; id_gestiune, Cont, id_pol/
|
||||
*!* pretd/id_valuta_d si vvaldiminuatctva (total in valuta cu tva, cf. oproceduri_facturare.prg:2282)
|
||||
*!* nu sunt in lista de insert a lui prelucreaza_facturacrs
|
||||
SELECT crsarticole_editare
|
||||
SCAN
|
||||
lnIdTemp = id_vanzare_det
|
||||
lnGestionabil = Iif(Nvl(in_stoc,0) <> 0, 1, 0)
|
||||
SELECT crsfactura
|
||||
REPLACE gestionabil WITH m.lnGestionabil, ;
|
||||
id_gestiune WITH Nvl(crsarticole_editare.id_gestiune, -1000), ;
|
||||
id_pol WITH crsarticole_editare.id_pol, ;
|
||||
pretd WITH crsarticole_editare.pretd, ;
|
||||
id_valuta_d WITH crsarticole_editare.id_valutad, ;
|
||||
vvaldiminuatctva WITH vvaldiminuatftva + vvaldiminuattva ;
|
||||
FOR id_temp = m.lnIdTemp
|
||||
SELECT crsarticole_editare
|
||||
ENDSCAN
|
||||
|
||||
Use In crsarticole_doc
|
||||
Use In crsarticole_editare
|
||||
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
147
utile/Teste/editare_factura/probe_defect5.prg
Normal file
147
utile/Teste/editare_factura/probe_defect5.prg
Normal file
@@ -0,0 +1,147 @@
|
||||
* probe_defect5.prg
|
||||
* Proba unica, ne-permanenta: deschide pe traseul real (frm_facturi.do_editare_unificata) un
|
||||
* document cu incasat<>0, tip 1-4, ne-proforma (id_vanzare=1071, gasit prin find_defect5_doc.prg)
|
||||
* si logheaza daca apare eroare VFP sau daca formularul se deschide normal. Nu scrie in Oracle.
|
||||
* Foloseste acelasi mecanism ca test_s8_pas7_cablare.prg (driverS8p7), copiat aici temporar.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_defect5_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goDriverS8p7
|
||||
goDriverS8p7 = Createobject('driverS8p7')
|
||||
_SCREEN.AddObject('tmrS8p7', 'Timer')
|
||||
_SCREEN.tmrS8p7.Interval = 150
|
||||
Bindevent(_SCREEN.tmrS8p7, 'Timer', goDriverS8p7, 'Executa')
|
||||
_SCREEN.tmrS8p7.Enabled = .T.
|
||||
|
||||
Private poFacturi
|
||||
poFacturi = Null
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare = 1071]
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
IF !Used('crsfacturi') OR Reccount('crsfacturi') <> 1
|
||||
STRTOFILE('EROARE: crsfacturi nu are 1071' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('crsfacturi OK, incasat=' + Transform(crsfacturi.incasat) + ' tip=' + Transform(crsfacturi.tip) + ' eproforma=' + Transform(crsfacturi.eproforma) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
Select crsfacturi
|
||||
Local loFrm
|
||||
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
|
||||
STRTOFILE('Newobject(frm_facturi): ' + Vartype(m.loFrm) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = 1071
|
||||
STRTOFILE('Locate 1071: Found=' + Transform(Found()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goDriverS8p7.Reseteaza()
|
||||
STRTOFILE('inainte de do_editare_unificata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
loFrm.do_editare_unificata()
|
||||
STRTOFILE('dupa do_editare_unificata, mesaj amessagebox=[' + gcMockUltimMesaj + '] driver.lGasit=' + Transform(goDriverS8p7.lGasit) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
_SCREEN.tmrS8p7.Enabled = .F.
|
||||
Try
|
||||
_SCREEN.RemoveObject('tmrS8p7')
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
Try
|
||||
loFrm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
DEFINE CLASS driverS8p7 AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
TRY
|
||||
LOCAL lnI, loFrm2
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcS8p7
|
||||
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
233
utile/Teste/editare_factura/probe_defect5_latent.prg
Normal file
233
utile/Teste/editare_factura/probe_defect5_latent.prg
Normal file
@@ -0,0 +1,233 @@
|
||||
* probe_defect5_latent.prg
|
||||
* I1 din mandatul defect5b: simuleaza reparatia golului de incarcare (poDate.incasat nepopulat,
|
||||
* docs\raport_s8_defect5_incasat.md) FARA sa atinga codul de productie. Repeta pas-cu-pas corpul
|
||||
* real al frm_facturi.do_editare_unificata (ofacturare_comun.vc2:3890-3975), cu poDate.incasat
|
||||
* fortat la valoarea reala din baza dupa IncarcaAntetFacturaEditare si inainte de Createobject/Show,
|
||||
* ca sa arate ce s-ar intampla daca golul de incarcare ar fi reparat. Nu scrie in Oracle (doar
|
||||
* SELECT prin gencursor/goExecutor), nu modifica niciun .vc2/.vcx.
|
||||
* Document: id_vanzare=1071 (tip=1, incasat=119, eproforma=0, sters=0), gasit de
|
||||
* find_defect5_doc.prg. Driver de inchidere modal: acelasi driverS8p7 din test_s8_pas7_cablare.prg.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_defect5_latent_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PUBLIC goDriverS8p7
|
||||
goDriverS8p7 = Createobject('driverS8p7')
|
||||
_SCREEN.AddObject('tmrS8p7', 'Timer')
|
||||
_SCREEN.tmrS8p7.Interval = 150
|
||||
Bindevent(_SCREEN.tmrS8p7, 'Timer', goDriverS8p7, 'Executa')
|
||||
_SCREEN.tmrS8p7.Enabled = .T.
|
||||
|
||||
*!* --- G2: instantaneu vplaje_numere INAINTE ---
|
||||
LOCAL lnSuccesG2a
|
||||
lnSuccesG2a = goExecutor.oExecute('select * from vplaje_numere order by 1', 'crsplaje_inainte')
|
||||
STRTOFILE('vplaje_numere INAINTE: oExecute=' + Transform(lnSuccesG2a) + ' randuri=' + ;
|
||||
Transform(Iif(Used('crsplaje_inainte'), Reccount('crsplaje_inainte'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
LOCAL lnIdVanzare
|
||||
lnIdVanzare = 1071
|
||||
|
||||
*!* --- replica exacta a corpului do_editare_unificata (ofacturare_comun.vc2:3890-3975) ---
|
||||
Local lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
|
||||
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP, poDate
|
||||
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP
|
||||
|
||||
LOCAL lnSuccesSel
|
||||
lnSuccesSel = goExecutor.oExecute('select id_vanzare,cod,data_act,sters,id_fact,eproforma,tip,incasat from fact_vfacturi where id_vanzare=' + Transform(lnIdVanzare), 'crsUnic')
|
||||
IF lnSuccesSel < 0 OR !Used('crsUnic') OR Reccount('crsUnic') <> 1
|
||||
STRTOFILE('EROARE: documentul 1071 nu a putut fi reincarcat pentru replica' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
SELECT crsUnic
|
||||
lnIdVanzareP = id_vanzare
|
||||
lnCod = cod
|
||||
pnAn = Year(data_act)
|
||||
pnLuna = Month(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
LOCAL lnIncasatReal
|
||||
lnIncasatReal = incasat
|
||||
|
||||
STRTOFILE('replica: id_vanzare=' + Transform(lnIdVanzareP) + ' tip=' + Transform(lnTipDoc) + ;
|
||||
' eproforma=' + Transform(llEProforma) + ' sters=' + Transform(lnSters) + ' incasat_real=' + Transform(lnIncasatReal) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF lnSters = 1
|
||||
STRTOFILE('OPRIT: document sters' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF llEProforma
|
||||
STRTOFILE('OPRIT: proforma' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF Inlist(lnTipDoc, 44, 45, 46, 51)
|
||||
STRTOFILE('OPRIT: tip in afara perimetrului' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
|
||||
STRTOFILE('OPRIT: nu e in luna curenta de lucru' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF ReferinteDocumenteNota(pnAn, pnLuna, lnCod)
|
||||
STRTOFILE('OPRIT: are referinte (incasari/plati)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF EsteInEFactura(lnIdFact)
|
||||
STRTOFILE('OPRIT: e in eFactura' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
IF DocumentAreUrmasi(lnIdVanzareP)
|
||||
STRTOFILE('OPRIT: are urmasi' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdVanzareP, @pnDiscountRon, @pnDiscountValuta)
|
||||
IF Vartype(poDate) <> 'O'
|
||||
STRTOFILE('OPRIT: IncarcaAntetFacturaEditare a esuat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('poDate.incasat INAINTE de fortare (asa cum e azi, defect infirmat/latent) = ' + Transform(poDate.incasat) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* FORTARE - simuleaza reparatia golului de incarcare, fara sa atinga IncarcaAntetFacturaEditare
|
||||
poDate.incasat = lnIncasatReal
|
||||
|
||||
STRTOFILE('poDate.incasat DUPA fortare (simuleaza reparatia) = ' + Transform(poDate.incasat) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdVanzareP)
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF Used('jtva_coloane')
|
||||
Use In jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ELSE
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('inainte de Createobject(frm_facturare_articole2)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goDriverS8p7.Reseteaza()
|
||||
loForm = Createobject('frm_facturare_articole2')
|
||||
|
||||
STRTOFILE('Createobject terminat (Init a rulat deja aici, inclusiv blocul incasat<>0 daca poDate.incasat<>0)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loForm.ndiscfactron = pnDiscountRon
|
||||
loForm.ndiscfactval = pnDiscountValuta
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
STRTOFILE('inainte de Show()' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
loForm.Show()
|
||||
STRTOFILE('dupa Show(), mesaj amessagebox=[' + gcMockUltimMesaj + '] driver.lGasit=' + Transform(goDriverS8p7.lGasit) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
_SCREEN.tmrS8p7.Enabled = .F.
|
||||
Try
|
||||
_SCREEN.RemoveObject('tmrS8p7')
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
Try
|
||||
loForm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
*!* --- G2: instantaneu vplaje_numere DUPA ---
|
||||
LOCAL lnSuccesG2b
|
||||
lnSuccesG2b = goExecutor.oExecute('select * from vplaje_numere order by 1', 'crsplaje_dupa')
|
||||
STRTOFILE('vplaje_numere DUPA: oExecute=' + Transform(lnSuccesG2b) + ' randuri=' + ;
|
||||
Transform(Iif(Used('crsplaje_dupa'), Reccount('crsplaje_dupa'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
goExecutor.oReset()
|
||||
|
||||
IF Used('crsplaje_inainte') AND Used('crsplaje_dupa')
|
||||
LOCAL lnDiferente, lnIdPlajaC, lnUrmvalInainte, lnUrmvalDupa
|
||||
lnDiferente = 0
|
||||
SELECT crsplaje_inainte
|
||||
SCAN
|
||||
lnIdPlajaC = id_plaja
|
||||
lnUrmvalInainte = urmval
|
||||
SELECT crsplaje_dupa
|
||||
LOCATE FOR id_plaja = lnIdPlajaC
|
||||
IF FOUND()
|
||||
lnUrmvalDupa = urmval
|
||||
IF lnUrmvalInainte <> lnUrmvalDupa
|
||||
lnDiferente = lnDiferente + 1
|
||||
STRTOFILE('DIFERENTA vplaje_numere: id_plaja=' + Transform(lnIdPlajaC) + ;
|
||||
' urmval_inainte=' + Transform(lnUrmvalInainte) + ' urmval_dupa=' + Transform(lnUrmvalDupa) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ELSE
|
||||
lnDiferente = lnDiferente + 1
|
||||
STRTOFILE('LIPSA in dupa: id_plaja=' + Transform(lnIdPlajaC) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
SELECT crsplaje_inainte
|
||||
ENDSCAN
|
||||
STRTOFILE('G2 vplaje_numere: total diferente urmval=' + Transform(lnDiferente) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
DEFINE CLASS driverS8p7 AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
TRY
|
||||
LOCAL lnI, loFrm2
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcS8p7
|
||||
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
403
utile/Teste/editare_factura/probe_fact005_avize.prg
Normal file
403
utile/Teste/editare_factura/probe_fact005_avize.prg
Normal file
@@ -0,0 +1,403 @@
|
||||
* probe_fact005_avize.prg
|
||||
* Diagnostic pentru "Nu exista articole in lista de vanzare! (FACT-005)" pe documentul 1119
|
||||
* (AVIZ-B, rularea 2 din test_s9_8_flux.prg, firma 167). Repeta EXACT scenariul rularii 2, dar cu
|
||||
* goExecutor inlocuit de o subclasa care logheaza fiecare statement, masoara starea reala in
|
||||
* Oracle in punctele-cheie (dupa stergere, inainte de scrie_factura_avize) si BLOCHEAZA apelul
|
||||
* scrie_factura_avize - deci nu se scrie nimic si nu se consuma niciun numar.
|
||||
*
|
||||
* Masoara, in ordine, in ACEEASI tranzactie:
|
||||
* - inainte: FACTURAT pe avizul sursa 684, randurile VANZARI_CORESP, VANZARI_CANTITATI
|
||||
* - dupa StergeDocumentFacturare (detectat prin primul initializeaza_date_factura): aceleasi
|
||||
* - inainte de scrie_factura_avize: count(*) pe VANZARI_DETALII_TEMP + listaid + ramas avize
|
||||
* La final: ROLLBACK.
|
||||
|
||||
*!* tnIdFirma: firma pe care intra harness-ul. 167 = firma documentului 1119 (corect);
|
||||
*!* 0 = fara firma, exact cum a rulat sweep-ul S12 din 04.09 01:23 (cade pe firma implicita 110)
|
||||
*!* tnControlNegativ = 1: goleste CONT-ul in apelurile adauga_articol_factura (ca inainte de
|
||||
*!* reparatia FACT-008), ca sa se vada daca reapare FACT-005
|
||||
*!* tnFaraInfasurare = 1: apelul se trimite EXACT cum il trimite productia, fara EXCEPTION WHEN
|
||||
*!* OTHERS - se vede codul real intors de SQLExec, deci daca eroarea e tacuta sau zgomotoasa
|
||||
LPARAMETERS tnIdFirma, tnControlNegativ, tnFaraInfasurare
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, poDate, poSnapshotEditare, gnNrAdaugaArt, pcErrF005, gnControlNegativ, gnFaraInfasurare
|
||||
pcErrF005 = SPACE(400)
|
||||
gnControlNegativ = VAL(TRANSFORM(tnControlNegativ))
|
||||
gnFaraInfasurare = VAL(TRANSFORM(tnFaraInfasurare))
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_fact005_avize_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=F005-AVIZ doc=1119 aviz=684 firma_ceruta=' + ;
|
||||
TRANSFORM(VAL(TRANSFORM(tnIdFirma))) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8, VAL(TRANSFORM(tnIdFirma))
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnNrAdaugaArt = 0
|
||||
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + ;
|
||||
' gnIdFirma=' + TRANSFORM(gnIdFirma) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO Probeaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Probeaza
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
||||
lnIdV = 1119
|
||||
|
||||
DO StareAvize WITH 'INAINTE'
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE('poDate.tip=' + TRANSFORM(poDate.tip) + ' poDate.listaid=[' + TRANSFORM(NVL(poDate.listaid,'<NULL>')) + ;
|
||||
'] poDate.cListaSursaAvize=[' + TRANSFORM(NVL(poDate.cListaSursaAvize,'<NULL>')) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE('crsfactura: ' + TRANSFORM(RECCOUNT('crsfactura')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': id_temp=' + TRANSFORM(NVL(crsfactura.id_temp,-1)) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(crsfactura.id_articol,-1)) + ;
|
||||
' id_gestiune=' + TRANSFORM(NVL(crsfactura.id_gestiune,-1)) + ;
|
||||
' cantitate=' + TRANSFORM(crsfactura.cantitate) + ;
|
||||
' opt_facturare=' + TRANSFORM(NVL(crsfactura.opt_facturare,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
GO TOP IN crsfactura
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('SpyFrm005')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
||||
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyF005')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
|
||||
STRTOFILE('--- INCEPE do_scrie_factura ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goExecutor = loReal
|
||||
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' adauga_articol_factura: ' + TRANSFORM(gnNrAdaugaArt) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO StareAvize WITH 'DUPA ROLLBACK'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* StareAvize: starea legaturii aviz->factura, citita prin conexiunea curenta (deci vede si ce e
|
||||
* nescris-inca-necomis in tranzactia proprie).
|
||||
*==============================================================================================
|
||||
PROCEDURE StareAvize
|
||||
LPARAMETERS tcEticheta
|
||||
STRTOFILE(tcEticheta + ' | vanzari.1119 sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 1119])) + ;
|
||||
' id_fact=' + TRANSFORM(Val1([select nvl(id_fact,-9) as v from vanzari where id_vanzare = 1119])) + ;
|
||||
' | aviz 684 facturat=' + TRANSFORM(Val1([select nvl(facturat,-9) as v from vanzari where id_vanzare = 684])) + ;
|
||||
' sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 684])) + ;
|
||||
' | coresp(fact=1119,sters=0)=' + TRANSFORM(Val1([select count(*) as v from vanzari_coresp where id_vanzare_fact = 1119 and sters = 0])) + ;
|
||||
' coresp(fact=1119,total)=' + TRANSFORM(Val1([select count(*) as v from vanzari_coresp where id_vanzare_fact = 1119])) + ;
|
||||
' | cantitati vii pe det 1119=' + TRANSFORM(Val1([select count(*) as v from vanzari_cantitati where sters = 0 and id_vanzare_det in (select id_vanzare_det from vanzari_detalii where id_vanzare = 1119)])) + ;
|
||||
' | ramas_avize_lista(684)=' + TRANSFORM(Val1([select pack_facturare.exista_ramas_avize_lista('684') as v from dual])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* ListeazaTemp: continutul VANZARI_DETALII_TEMP in tranzactia curenta (tabela temporara pe
|
||||
* tranzactie - se vede doar din aceasta sesiune).
|
||||
*==============================================================================================
|
||||
PROCEDURE ListeazaTemp
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnR
|
||||
IF USED('v_tmp95')
|
||||
USE IN v_tmp95
|
||||
ENDIF
|
||||
lnR = SQLExec(gnHandle, [select id_temp, id_articol, id_gestiune, cantitate, pret, proc_tvav, in_stoc from vanzari_detalii_temp order by id_temp], 'v_tmp95')
|
||||
IF lnR < 0 OR !USED('v_tmp95')
|
||||
STRTOFILE(tcEticheta + ': EROARE la citirea VANZARI_DETALII_TEMP' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE(tcEticheta + ': VANZARI_DETALII_TEMP are ' + TRANSFORM(RECCOUNT('v_tmp95')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT v_tmp95
|
||||
SCAN
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(NVL(v_tmp95.id_temp,-1)) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(v_tmp95.id_articol,-1)) + ;
|
||||
' id_gestiune=' + TRANSFORM(NVL(v_tmp95.id_gestiune,-1)) + ;
|
||||
' cantitate=' + TRANSFORM(NVL(v_tmp95.cantitate,-1)) + ;
|
||||
' pret=' + TRANSFORM(NVL(v_tmp95.pret,-1)) + ;
|
||||
' proc_tvav=' + TRANSFORM(NVL(v_tmp95.proc_tvav,-1)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(v_tmp95.in_stoc,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_tmp95
|
||||
ENDPROC
|
||||
|
||||
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet, lnR
|
||||
lnRet = -1
|
||||
IF USED('v_val96')
|
||||
USE IN v_val96
|
||||
ENDIF
|
||||
lnR = SQLExec(gnHandle, tcSql, 'v_val96')
|
||||
IF lnR >= 0 AND USED('v_val96')
|
||||
SELECT v_val96
|
||||
IF RECCOUNT('v_val96') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val96.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val96
|
||||
ENDIF
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyFrm005: subclasa a formularului real, cu o singura schimbare - do_inchide_tranzactie face
|
||||
* MEREU ROLLBACK, niciodata COMMIT. Restul fluxului ruleaza neatins, deci nimic nu se scrie.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyFrm005 AS frm_facturare_articole2 OF "D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vcx"
|
||||
PROCEDURE do_inchide_tranzactie
|
||||
LPARAMETERS tnTip
|
||||
STRTOFILE(' [SpyFrm005] do_inchide_tranzactie(' + TRANSFORM(tnTip) + ') -> fortat ROLLBACK' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
*!* documentul reemis se masoara AICI - dupa acest apel nu mai exista nimic
|
||||
LOCAL lnIdVNou
|
||||
lnIdVNou = Val1([select nvl(max(id_vanzare),0) as v from vanzari])
|
||||
STRTOFILE('DOCUMENT REEMIS (inainte de rollback) id_vanzare=' + TRANSFORM(lnIdVNou) + ;
|
||||
' linii vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = ] + TRANSFORM(lnIdVNou) + [ and sters = 0])) + ;
|
||||
' (originalul 1119 are 4)' + ;
|
||||
' id_fact=' + TRANSFORM(Val1([select nvl(id_fact,-9) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdVNou))) + ;
|
||||
' tip=' + TRANSFORM(Val1([select nvl(tip,-9) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdVNou))) + ;
|
||||
' coresp(fact=nou,tip=1,sters=0)=' + TRANSFORM(Val1([select count(*) as v from vanzari_coresp where id_vanzare_fact = ] + TRANSFORM(lnIdVNou) + [ and tip = 1 and sters = 0])) + ;
|
||||
' total_cu_tva=' + TRANSFORM(Val1([select nvl(total_cu_tva,-9) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdVNou))) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN DODEFAULT(2)
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyF005: subclasa a lui oexecutor. Logheaza fiecare statement, masoara starea in punctele-cheie
|
||||
* si BLOCHEAZA scrie_factura_avize (RETURN -1) - deci nu se scrie nimic.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyF005 AS oexecutor
|
||||
nIdx = 0
|
||||
nVazutInit = 0
|
||||
nUrmaTemp = 0
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc
|
||||
THIS.nIdx = THIS.nIdx + 1
|
||||
lnI = THIS.nIdx
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
||||
|
||||
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
||||
' len=' + TRANSFORM(LEN(lcS)) + CHR(13) + CHR(10) + ;
|
||||
' SQL=[' + LEFT(lcS, 1400) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* apelul se ruleaza infasurat intr-un EXCEPTION WHEN OTHERS care intoarce sqlcode/sqlerrm
|
||||
*!* prin bind OUT - acelasi apel, aceleasi argumente, dar cu eroarea vizibila
|
||||
IF 'adauga_articol_factura' $ lcS
|
||||
gnNrAdaugaArt = gnNrAdaugaArt + 1
|
||||
LOCAL lcInner, lnB, lcNou
|
||||
IF gnControlNegativ = 1
|
||||
lcS = STRTRAN(lcS, [,'371',], [,'',])
|
||||
STRTOFILE(' [control negativ] CONT golit in apel' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
lcInner = SUBSTR(lcS, 7)
|
||||
lnB = RAT('end;', lcInner)
|
||||
IF lnB > 1
|
||||
lcInner = LEFT(lcInner, lnB - 1)
|
||||
ENDIF
|
||||
pcErrF005 = SPACE(400)
|
||||
IF gnFaraInfasurare = 1
|
||||
LOCAL ARRAY laErr[1]
|
||||
lnRet = SQLExec(gnHandle, lcS)
|
||||
pcErrF005 = IIF(lnRet < 0 AND AERROR(laErr) > 0, TRANSFORM(laErr[1,3]), 'OK')
|
||||
STRTOFILE(' -> [neinfasurat] ret=' + TRANSFORM(lnRet) + ' err=[' + ALLTRIM(TRANSFORM(pcErrF005)) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO ListeazaTemp WITH ' dupa acest adauga_articol_factura'
|
||||
RETURN lnRet
|
||||
ENDIF
|
||||
LOCAL lcQ
|
||||
lcQ = CHR(39)
|
||||
lcNou = [begin begin ] + lcInner + [ ?@pcErrF005 := ] + lcQ + [OK] + lcQ + [; exception when others then ] + ;
|
||||
[?@pcErrF005 := to_char(sqlcode) || ] + lcQ + [ ] + lcQ + [ || substr(sqlerrm,1,300); end; end;]
|
||||
lnRet = SQLExec(gnHandle, lcNou)
|
||||
STRTOFILE(' -> [infasurat] ret=' + TRANSFORM(lnRet) + ' pcErrF005=[' + ALLTRIM(TRANSFORM(pcErrF005)) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO ListeazaTemp WITH ' dupa acest adauga_articol_factura'
|
||||
RETURN IIF(lnRet < 0, -1, 1)
|
||||
ENDIF
|
||||
|
||||
*!* primul initializeaza_date_factura vine imediat DUPA StergeDocumentFacturare
|
||||
IF 'initializeaza_date_factura' $ lcS AND THIS.nVazutInit = 0
|
||||
THIS.nVazutInit = 1
|
||||
DO StareAvize WITH 'DUPA STERGERE (inainte de initializeaza_date_factura)'
|
||||
ENDIF
|
||||
|
||||
IF 'scrie_factura_avize' $ lcS
|
||||
STRTOFILE(' *** punct de masura: inainte de scrie_factura_avize ***' + CHR(13) + CHR(10) + ;
|
||||
' vanzari_detalii_temp = ' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii_temp])) + ' randuri' + CHR(13) + CHR(10) + ;
|
||||
' act_temp = ' + TRANSFORM(Val1([select count(*) as v from act_temp])) + ' randuri' + CHR(13) + CHR(10) + ;
|
||||
' poDate.listaid = [' + TRANSFORM(NVL(poDate.listaid,'<NULL>')) + ']' + CHR(13) + CHR(10) + ;
|
||||
' clistaid Oracle = [' + TRANSFORM(Sir1([select nvl(pack_facturare.clistaid,'<NULL>') as v from dual])) + ']' + CHR(13) + CHR(10) + ;
|
||||
' ntip Oracle = ' + TRANSFORM(Val1([select nvl(pack_facturare.ntip,-9) as v from dual])) + CHR(13) + CHR(10) + ;
|
||||
' nid_sucursala Oracle = ' + TRANSFORM(Val1([select nvl(pack_facturare.nid_sucursala,-9) as v from dual])) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO ListeazaTemp WITH ' inainte de scrie_factura_avize'
|
||||
DO StareAvize WITH 'INAINTE DE scrie_factura_avize'
|
||||
|
||||
*!* acelasi apel, dar cu REF CURSOR-ul si OUT-ul in variabile PL/SQL locale si cu
|
||||
*!* EXCEPTION WHEN OTHERS care intoarce sqlcode/sqlerrm - apoi se intoarce mereu -1,
|
||||
*!* deci fluxul cade pe ramura de eroare (ROLLBACK) chiar daca apelul ar fi reusit
|
||||
LOCAL lcQ2, lnP1, lcArg, lcBloc
|
||||
lcQ2 = CHR(39)
|
||||
lnP1 = AT('(', lcS)
|
||||
lcArg = SUBSTR(lcS, lnP1 + 1, RAT(')', lcS) - lnP1 - 1)
|
||||
lcArg = STRTRAN(lcArg, '?@poDate.nid_vanzare', 'v')
|
||||
pcErrF005 = SPACE(400)
|
||||
THIS.nUrmaTemp = 2
|
||||
ENDIF
|
||||
|
||||
lnRet = -1
|
||||
TRY
|
||||
DO CASE
|
||||
CASE lnPc <= 1
|
||||
lnRet = DODEFAULT(m.tcSql)
|
||||
CASE lnPc = 2
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
||||
CASE lnPc = 3
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
||||
CASE lnPc = 4
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
||||
CASE lnPc = 5
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
||||
CASE lnPc = 6
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
||||
CASE lnPc = 7
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
||||
OTHERWISE
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
||||
ENDCASE
|
||||
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF THIS.nUrmaTemp > 0
|
||||
THIS.nUrmaTemp = 0
|
||||
DO ListeazaTemp WITH ' dupa acest statement'
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
||||
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyF005: ' + TRANSFORM(loEx.Message)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
FUNCTION oPrelucrareEroare
|
||||
RETURN 'SpyF005: ' + TRANSFORM(THIS.cEroare)
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
|
||||
|
||||
FUNCTION Sir1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lcRet, lnR
|
||||
lcRet = '<eroare>'
|
||||
IF USED('v_sir96')
|
||||
USE IN v_sir96
|
||||
ENDIF
|
||||
lnR = SQLExec(gnHandle, tcSql, 'v_sir96')
|
||||
IF lnR >= 0 AND USED('v_sir96')
|
||||
SELECT v_sir96
|
||||
IF RECCOUNT('v_sir96') > 0
|
||||
GO TOP
|
||||
lcRet = ALLTRIM(TRANSFORM(NVL(v_sir96.v, '<NULL>')))
|
||||
ENDIF
|
||||
USE IN v_sir96
|
||||
ENDIF
|
||||
RETURN lcRet
|
||||
ENDFUNC
|
||||
39
utile/Teste/editare_factura/probe_incarca_antet.prg
Normal file
39
utile/Teste/editare_factura/probe_incarca_antet.prg
Normal file
@@ -0,0 +1,39 @@
|
||||
* probe_incarca_antet.prg - apeleaza direct IncarcaAntetFacturaEditare (fara do_editare_unificata,
|
||||
* fara Createobject pe forma) pe cele 4 documente vechi, sa vada daca poDate se construieste OK.
|
||||
* Read-only. Diagnostic pentru docs\triaj_s8_regresie_28fail.md.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_incarca_antet_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
PROCEDURE Proba
|
||||
LPARAMETERS tnId
|
||||
LOCAL loDate, pnA, pnB
|
||||
loDate = IncarcaAntetFacturaEditare(tnId, @pnA, @pnB)
|
||||
STRTOFILE(Transform(tnId) + ': Vartype=' + Vartype(loDate) + ' oExecutor.cEroare=[' + Nvl(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF Vartype(loDate) == 'O'
|
||||
STRTOFILE(Transform(tnId) + ': tip=' + Transform(loDate.tip) + ' incasat=' + Transform(loDate.incasat) + ' lEditare=' + Transform(loDate.lEditare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
DO Proba WITH 1113
|
||||
DO Proba WITH 1055
|
||||
DO Proba WITH 1048
|
||||
DO Proba WITH 1130
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
50
utile/Teste/editare_factura/probe_s11_borderou_schema.prg
Normal file
50
utile/Teste/editare_factura/probe_s11_borderou_schema.prg
Normal file
@@ -0,0 +1,50 @@
|
||||
* probe_s11_borderou_schema.prg - read-only: semnaturile PACK_FACT_BORDEROU + structurile
|
||||
* FACT_BORDEROU / FACT_BORDEROU_DETALII / FACT_VBORDEROU_DETALII
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_borderou_schema_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Dump WITH [select line, text from user_source where name = 'PACK_FACT_BORDEROU' and type = 'PACKAGE' order by line], 'SPEC PACK_FACT_BORDEROU'
|
||||
DO Dump WITH [select column_name, data_type, data_length, nullable, column_id from user_tab_columns where table_name = 'FACT_BORDEROU' order by column_id], 'COLOANE FACT_BORDEROU'
|
||||
DO Dump WITH [select column_name, data_type, data_length, nullable, column_id from user_tab_columns where table_name = 'FACT_BORDEROU_DETALII' order by column_id], 'COLOANE FACT_BORDEROU_DETALII'
|
||||
DO Dump WITH [select column_name, data_type, data_length, column_id from user_tab_columns where table_name = 'FACT_VBORDEROU_DETALII' order by column_id], 'COLOANE FACT_VBORDEROU_DETALII'
|
||||
DO Dump WITH [select id, id_borderou, id_vanzare from ] + gcs + [.fact_borderou_detalii order by id], 'CONTINUT FACT_BORDEROU_DETALII'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Dump
|
||||
LPARAMETERS tcSql, tcTitlu
|
||||
LOCAL lnI, lcLinie
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + m.tcTitlu + ' ===' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dump')
|
||||
USE IN v_dump
|
||||
ENDIF
|
||||
IF !goExecutor.oExecuta(m.tcSql, 'v_dump')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dump
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dump')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_dump')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(STRTRAN(STRTRAN(lcLinie, CHR(13), ''), CHR(10), '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dump
|
||||
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
|
||||
53
utile/Teste/editare_factura/probe_s11_borderou_view.prg
Normal file
53
utile/Teste/editare_factura/probe_s11_borderou_view.prg
Normal file
@@ -0,0 +1,53 @@
|
||||
* probe_s11_borderou_view.prg - read-only: coloanele de total din VANZARI + definitia
|
||||
* FACT_VBORDEROU_DETALII prin dbms_metadata (CLOB, nu LONG - LONG agata ODBC-ul)
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_borderou_view_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Dump WITH [select column_name, data_type from user_tab_columns where table_name = 'VANZARI' ] + ;
|
||||
[and (column_name like '%TOTAL%' or column_name like '%VAL%') order by column_id], 'COLOANE TOTAL/VAL in VANZARI'
|
||||
|
||||
DO Dump WITH [select rn, substr(d, 1 + (rn-1)*180, 180) as bucata from ] + ;
|
||||
[(select dbms_metadata.get_ddl('VIEW','FACT_VBORDEROU_DETALII') d from dual), ] + ;
|
||||
[(select level rn from dual connect by level <= 60) ] + ;
|
||||
[where 1 + (rn-1)*180 <= length(d) order by rn], 'DDL FACT_VBORDEROU_DETALII'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Dump
|
||||
LPARAMETERS tcSql, tcTitlu
|
||||
LOCAL lnI, lcLinie
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + m.tcTitlu + ' ===' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dump')
|
||||
USE IN v_dump
|
||||
ENDIF
|
||||
IF !goExecutor.oExecuta(m.tcSql, 'v_dump')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dump
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dump')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_dump')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(STRTRAN(STRTRAN(lcLinie, CHR(13), ''), CHR(10), ' '), gcErrLog, 1)
|
||||
STRTOFILE(CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dump
|
||||
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
|
||||
52
utile/Teste/editare_factura/probe_s11_candidati.prg
Normal file
52
utile/Teste/editare_factura/probe_s11_candidati.prg
Normal file
@@ -0,0 +1,52 @@
|
||||
* probe_s11_candidati.prg - read-only: candidatii eligibili pentru rularea 2, cu totalul si
|
||||
* numarul de linii, ca sa se vada care sunt reziduuri degenerate (total 0).
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_candidati_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSql, lnI, lcLinie
|
||||
lcSql = [select v.id_vanzare, v.cod, v.tip, v.id_fact, v.total_cu_tva, v.serie_act, v.numar_act, ] + ;
|
||||
[(select count(*) from vanzari_detalii d where d.sters = 0 and d.id_vanzare = v.id_vanzare) as linii, ] + ;
|
||||
[(select nvl(min(d.id_articol),0) from vanzari_detalii d where d.sters = 0 and d.id_vanzare = v.id_vanzare) as art_min ] + ;
|
||||
[from vanzari v where v.sters = 0 ] + ;
|
||||
[ and extract(year from v.data_act) = ] + TRANSFORM(gnAn) + ;
|
||||
[ and extract(month from v.data_act) = ] + TRANSFORM(gnLuna) + ;
|
||||
[ and nvl(v.eproforma,0) = 0 ] + ;
|
||||
[ and v.id_vanzare not in (1047,1048,1055,1113,1130) ] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
|
||||
[ and v.tip not in (4,3,21,25,28,42,47,44,45,46,51) ] + ;
|
||||
[ and exists (select 1 from vanzari_detalii d where d.sters = 0 and d.id_vanzare = v.id_vanzare and nvl(d.cantitate,0) > 0) ] + ;
|
||||
[ order by v.id_vanzare]
|
||||
|
||||
IF !goExecutor.oExecuta(lcSql, 'v_c')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
STRTOFILE('id_vanzare | cod | tip | id_fact | total_cu_tva | serie | numar | linii | art_min' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT v_c
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_c')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_c')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(lcLinie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_c
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
52
utile/Teste/editare_factura/probe_s11_stare_dupa.prg
Normal file
52
utile/Teste/editare_factura/probe_s11_stare_dupa.prg
Normal file
@@ -0,0 +1,52 @@
|
||||
* probe_s11_stare_dupa.prg - read-only: starea lasata de rularile probei S11 (documente atinse,
|
||||
* atasamente semanate, borderouri semanate), inainte de curatenie.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s11_stare_dupa_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Dump WITH [select id_vanzare, sters, serie_act, numar_act, total_cu_tva, id_fact from vanzari ] + ;
|
||||
[where id_vanzare in (1076,1111,1127,1128,1129,1169,1170) order by id_vanzare], 'DOCUMENTE ATINSE'
|
||||
DO Dump WITH [select id_vanzare, sters, count(*) as nr from ] + gcs + [.atasamente_vanzari ] + ;
|
||||
[where id_vanzare in (1076,1111,1127,1128,1129,1169,1170) group by id_vanzare, sters order by 1,2], 'ATASAMENTE SEMANATE'
|
||||
DO Dump WITH [select id, id_part, sters, trimis from ] + gcs + [.fact_borderou where id >= 20 order by id], 'BORDEROURI SEMANATE'
|
||||
DO Dump WITH [select id, id_borderou, id_vanzare from ] + gcs + [.fact_borderou_detalii where id_borderou >= 20 order by id], 'DETALII BORDEROU SEMANATE'
|
||||
DO Dump WITH [select max(numar_act) as ultim_sss from vanzari where serie_act = 'SSS'], 'ULTIMUL NUMAR SSS'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Dump
|
||||
LPARAMETERS tcSql, tcTitlu
|
||||
LOCAL lnI, lcLinie
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + m.tcTitlu + ' ===' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dump')
|
||||
USE IN v_dump
|
||||
ENDIF
|
||||
IF !goExecutor.oExecuta(m.tcSql, 'v_dump')
|
||||
STRTOFILE('ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dump
|
||||
SCAN
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dump')
|
||||
lcLinie = lcLinie + IIF(lnI > 1, ' | ', '') + ALLTRIM(TRANSFORM(NVL(EVALUATE(FIELD(lnI, 'v_dump')), '')))
|
||||
ENDFOR
|
||||
STRTOFILE(lcLinie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dump
|
||||
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
|
||||
278
utile/Teste/editare_factura/probe_s12_gestiune.prg
Normal file
278
utile/Teste/editare_factura/probe_s12_gestiune.prg
Normal file
@@ -0,0 +1,278 @@
|
||||
* probe_s12_gestiune.prg
|
||||
* Proba care APARA reparatia FACT-007 (docs\propunere_fact007_gestiune.md, aplicata in
|
||||
* ofacturare_editare.prg): verifica ca id_gestiune ajunge de la VANZARI_DETALII pana la
|
||||
* argumentul V_ID_GESTIUNE al apelului pack_facturare.adauga_articol_factura, cu NULL in sursa
|
||||
* mapat la -1000. Cade daca reparatia dispare sau daca e inlocuita cu o alta valoare (ex. 0).
|
||||
* NIMIC nu se scrie in Oracle: citirile sunt reale, dar do_scrie_articole() ruleaza cu goExecutor
|
||||
* mockat (tipar identic cu test_s11_izolare_camp_1472.prg).
|
||||
*
|
||||
* Pasul 1: sursa reala (VVANZARI_ARTICOLE prin IncarcaArticoleFactura) - construieste harta
|
||||
* id_temp -> gestiune asteptata (NULL -> -1000).
|
||||
* Pasul 2: crsfactura dupa IncarcaLiniiFacturaEditare - compara linie cu linie cu harta.
|
||||
* Pasul 3: SQL-ul generat de do_scrie_articole, argumentul 6 (V_ID_GESTIUNE) per apel, comparat
|
||||
* cu harta.
|
||||
* Pasul 4: rerulare pe acelasi crsfactura - verifica idempotenta rezultatului.
|
||||
LPARAMETERS tnIdV
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 631
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_gestiune_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc = ' + TRANSFORM(tnIdV) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcGestiuniSql
|
||||
gcGestiuniSql = ''
|
||||
|
||||
DO Diagnostic WITH tnIdV
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Diagnostic
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lnDiscRon, lnDiscVal, lnRanduri, lnCorecte, lcAsteptatGestiuni, lnGestAsteptata
|
||||
|
||||
*!* PASUL 1: sursa reala, inainte de orice prelucrare; construieste harta id_temp -> gestiune asteptata
|
||||
IncarcaArticoleFactura(tnIdV, 'crs_src_probe')
|
||||
IF USED('crs_gest_expect')
|
||||
USE IN crs_gest_expect
|
||||
ENDIF
|
||||
CREATE CURSOR crs_gest_expect (id_temp N(10), gest_exp N(10))
|
||||
INDEX ON id_temp TAG id_temp
|
||||
|
||||
STRTOFILE('--- PAS 1: sursa VVANZARI_ARTICOLE (crs_src_probe) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
LOCAL lnIdTempSrc, lnGestExpSrc
|
||||
SELECT crs_src_probe
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnIdTempSrc = id_vanzare_det
|
||||
lnGestExpSrc = NVL(id_gestiune,-1000)
|
||||
INSERT INTO crs_gest_expect (id_temp, gest_exp) VALUES (lnIdTempSrc, lnGestExpSrc)
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P1 sursa contine cel putin o linie', RECCOUNT('crs_src_probe') > 0, TRANSFORM(RECCOUNT('crs_src_probe'))
|
||||
|
||||
*!* PASUL 2: incarcarea de editare
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH 'P2 antetul documentului ' + TRANSFORM(tnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO asserteaza WITH 'P2 liniile s-au incarcat in crsfactura', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PAS 2: crsfactura dupa IncarcaLiniiFacturaEditare ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRanduri = 0
|
||||
lnCorecte = 0
|
||||
lcAsteptatGestiuni = ''
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
lnRanduri = lnRanduri + 1
|
||||
lnGestAsteptata = GestiuneAsteptata(id_temp)
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(id_temp) + ;
|
||||
' id_articol=' + IIF(ISNULL(id_articol), 'NULL', TRANSFORM(id_articol)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' gestionabil=' + TRANSFORM(gestionabil) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF NVL(id_gestiune,-9999999) = lnGestAsteptata
|
||||
lnCorecte = lnCorecte + 1
|
||||
ENDIF
|
||||
lcAsteptatGestiuni = lcAsteptatGestiuni + ALLTRIM(STR(lnGestAsteptata)) + ';'
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P2 liniile din crsfactura poarta gestiunea din sursa (NULL -> -1000)', ;
|
||||
lnCorecte = lnRanduri AND lnRanduri > 0, TRANSFORM(lnCorecte) + '/' + TRANSFORM(lnRanduri)
|
||||
|
||||
*!* normalizare locala: fara virgule in sirurile din SQL, ca argumentul 6 sa fie extractibil
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'probe-s12', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
*!* PASUL 3: ce ajunge in SQL, cu mock (nimic nu se executa in Oracle)
|
||||
DO RuleazaCuMock WITH 'PAS3'
|
||||
DO asserteaza WITH 'P3 argumentul 6 (V_ID_GESTIUNE) e gestiunea sursei pe fiecare apel', ;
|
||||
gcGestiuniSql == lcAsteptatGestiuni, gcGestiuniSql + ' <> ' + lcAsteptatGestiuni
|
||||
|
||||
*!* PASUL 4: idempotenta - a doua rulare pe acelasi crsfactura trebuie sa dea acelasi rezultat
|
||||
GO TOP IN crsfactura
|
||||
DO RuleazaCuMock WITH 'PAS4-idempotenta'
|
||||
DO asserteaza WITH 'P4 a doua rulare da acelasi argument 6 (idempotenta)', ;
|
||||
gcGestiuniSql == lcAsteptatGestiuni, gcGestiuniSql + ' <> ' + lcAsteptatGestiuni
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: do_scrie_articole() cu goExecutor mockat; strange argumentul 6 al fiecarui apel
|
||||
* pack_facturare.adauga_articol_factura in gcGestiuniSql, separat prin ';'.
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS12Gest')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcGestiuniSql = loMock.cGestiuni
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ;
|
||||
' apeluri_articol=' + TRANSFORM(loMock.nApeluriArticol) + ;
|
||||
' argumente_6=[' + gcGestiuniSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- ultimul SQL de articol ---' + CHR(13) + CHR(10) + ;
|
||||
TRANSFORM(loMock.cSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE GestiuneAsteptata
|
||||
LPARAMETERS tnIdTemp
|
||||
LOCAL lnRet, lnSelPrev
|
||||
|
||||
lnSelPrev = SELECT()
|
||||
SELECT crs_gest_expect
|
||||
IF SEEK(m.tnIdTemp)
|
||||
lnRet = gest_exp
|
||||
ELSE
|
||||
lnRet = -9999999
|
||||
ENDIF
|
||||
SELECT (lnSelPrev)
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS12Gest AS Custom
|
||||
cGestiuni = ''
|
||||
cSqlUltim = ''
|
||||
nApeluri = 0
|
||||
nApeluriArticol = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
LOCAL lcSql, lnPoz, lcRest
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcSql) <> 'C'
|
||||
RETURN 1
|
||||
ENDIF
|
||||
lcSql = m.tcSql
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
DO WHILE lnPoz > 0
|
||||
THIS.nApeluriArticol = THIS.nApeluriArticol + 1
|
||||
lcRest = SUBSTR(lcSql, lnPoz + LEN('adauga_articol_factura('))
|
||||
THIS.cGestiuni = THIS.cGestiuni + ALLTRIM(GETWORDNUM(lcRest, 6, ',')) + ';'
|
||||
THIS.cSqlUltim = m.tcSql
|
||||
lcSql = lcRest
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
ENDDO
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS12Gest: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
297
utile/Teste/editare_factura/probe_s12_stoc.prg
Normal file
297
utile/Teste/editare_factura/probe_s12_stoc.prg
Normal file
@@ -0,0 +1,297 @@
|
||||
* probe_s12_stoc.prg
|
||||
* Proba de izolare pentru FACT-008 ("Articolul ... nu mai e in stoc!"): verifica daca pretv_orig
|
||||
* (pretul de vanzare din STOC ales la emiterea initiala) supravietuieste traseului de reemitere.
|
||||
* pack_facturare.descarca_gestiune cauta randul de stoc cu A.PRETV = V_PRETV_ALES, iar
|
||||
* V_PRETV_ALES vine din VANZARI_DETALII_TEMP.PRETV_ORIG, adica din argumentul 22 al apelului
|
||||
* pack_facturare.adauga_articol_factura, adica din crsfactura.pretv_orig.
|
||||
* Asertiunile sunt scrise in sensul CORECT: pretv_orig = STOC.PRETV al lotului, adica nenul
|
||||
* doar pe gestiunile la pret de vanzare (NOM_GESTIUNI.NR_PAG in 6/7) si 0 in rest.
|
||||
* NIMIC nu se scrie in Oracle: citirile sunt reale, do_scrie_articole() ruleaza cu goExecutor
|
||||
* mockat (tipar identic cu probe_s12_gestiune.prg / test_s11_izolare_camp_1472.prg).
|
||||
*
|
||||
* Pasul 1: sursa reala (VVANZARI_ARTICOLE prin IncarcaArticoleFactura).
|
||||
* Pasul 2: crsfactura dupa IncarcaLiniiFacturaEditare - pretv_orig per linie.
|
||||
* Pasul 3: SQL-ul generat de do_scrie_articole, argumentul 22 (V_PRETV_ORIG) per apel.
|
||||
LPARAMETERS tnIdV
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 1188
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_stoc_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc = ' + TRANSFORM(tnIdV) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcPretvSql, gcContSql
|
||||
gcPretvSql = ''
|
||||
gcContSql = ''
|
||||
|
||||
DO Diagnostic WITH tnIdV
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Diagnostic
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lnDiscRon, lnDiscVal, lnGestionabile, lnCuPretv, lnArg, lnArgNenule, lnArgTotal
|
||||
LOCAL lnAsteptatNenule, lcGestPV
|
||||
LOCAL lnCuCont, lnSrcCuCont, lnCtTotal, lnCtNenule
|
||||
|
||||
IncarcaArticoleFactura(tnIdV, 'crs_src_probe')
|
||||
STRTOFILE('--- PAS 1: sursa VVANZARI_ARTICOLE (crs_src_probe) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crs_src_probe
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + ;
|
||||
' cont=[' + NVL(cont,'') + ']' + ;
|
||||
' pret_achizitie=' + TRANSFORM(NVL(pret_achizitie,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
SELECT COUNT(*) AS n FROM crs_src_probe WHERE !EMPTY(NVL(cont,'')) INTO CURSOR crs_cnt_cont
|
||||
lnSrcCuCont = crs_cnt_cont.n
|
||||
USE IN crs_cnt_cont
|
||||
DO asserteaza WITH 'P1 sursa contine cel putin o linie', RECCOUNT('crs_src_probe') > 0, TRANSFORM(RECCOUNT('crs_src_probe'))
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH 'P2 antetul documentului ' + TRANSFORM(tnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO asserteaza WITH 'P2 liniile s-au incarcat in crsfactura', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PAS 2: crsfactura dupa IncarcaLiniiFacturaEditare ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
*!* pe gestiunile la pret de achizitie STOC.PRETV e 0, deci si pretv_orig trebuie sa fie 0
|
||||
lcGestPV = ','
|
||||
IF goExecutor.oExecuta('select id_gestiune from nom_gestiuni where nr_pag in (6,7)', 'crs_gest_pv')
|
||||
SELECT crs_gest_pv
|
||||
SCAN
|
||||
lcGestPV = lcGestPV + ALLTRIM(STR(crs_gest_pv.id_gestiune)) + ','
|
||||
ENDSCAN
|
||||
USE IN crs_gest_pv
|
||||
ENDIF
|
||||
DO asserteaza WITH 'P2 lista gestiunilor la pret de vanzare s-a incarcat', LEN(lcGestPV) > 1, lcGestPV
|
||||
|
||||
lnGestionabile = 0
|
||||
lnCuPretv = 0
|
||||
lnAsteptatNenule = 0
|
||||
lnCuCont = 0
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(id_temp) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' gestionabil=' + TRANSFORM(gestionabil) + ;
|
||||
' pret_achizitie=' + TRANSFORM(pret_achizitie) + ;
|
||||
' cont=[' + Cont + ']' + ;
|
||||
' pretv_orig=' + TRANSFORM(pretv_orig) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF !EMPTY(Cont)
|
||||
lnCuCont = lnCuCont + 1
|
||||
ENDIF
|
||||
IF gestionabil = 1
|
||||
lnGestionabile = lnGestionabile + 1
|
||||
IF ',' + ALLTRIM(STR(NVL(id_gestiune, -1))) + ',' $ lcGestPV
|
||||
lnAsteptatNenule = lnAsteptatNenule + 1
|
||||
ENDIF
|
||||
IF pretv_orig <> 0
|
||||
lnCuPretv = lnCuPretv + 1
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P2 documentul are cel putin o linie gestionabila', lnGestionabile > 0, TRANSFORM(lnGestionabile)
|
||||
DO asserteaza WITH 'P2 crsfactura.pretv_orig e nenul exact pe liniile de pe gestiuni la pret de vanzare', ;
|
||||
lnCuPretv = lnAsteptatNenule AND lnGestionabile > 0, ;
|
||||
TRANSFORM(lnCuPretv) + ' nenule fata de ' + TRANSFORM(lnAsteptatNenule) + ' asteptate din ' + TRANSFORM(lnGestionabile) + ' gestionabile'
|
||||
DO asserteaza WITH 'P2 crsfactura.Cont e completat pe toate liniile care au CONT in sursa', ;
|
||||
lnCuCont = lnSrcCuCont AND lnSrcCuCont > 0, TRANSFORM(lnCuCont) + '/' + TRANSFORM(lnSrcCuCont)
|
||||
|
||||
*!* normalizare locala: fara virgule in sirurile din SQL, ca argumentul 22 sa fie extractibil
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'probe-s12', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
DO RuleazaCuMock WITH 'PAS3'
|
||||
|
||||
lnArgTotal = 0
|
||||
lnArgNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcPretvSql, ';')
|
||||
lnArgTotal = lnArgTotal + 1
|
||||
IF VAL(GETWORDNUM(gcPretvSql, lnArg, ';')) <> 0
|
||||
lnArgNenule = lnArgNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 22 (V_PRETV_ORIG) reia pretv_orig din crsfactura', ;
|
||||
lnArgTotal > 0 AND lnArgNenule = lnCuPretv, gcPretvSql
|
||||
|
||||
lnCtTotal = 0
|
||||
lnCtNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcContSql, ';')
|
||||
lnCtTotal = lnCtTotal + 1
|
||||
IF !EMPTY(STRTRAN(GETWORDNUM(gcContSql, lnArg, ';'), CHR(39), ''))
|
||||
lnCtNenule = lnCtNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 16 (V_CONT) e nevid pe fiecare apel de articol', ;
|
||||
lnCtTotal > 0 AND lnCtNenule = lnCtTotal, gcContSql
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: do_scrie_articole() cu goExecutor mockat; strange argumentul 22 al fiecarui apel
|
||||
* pack_facturare.adauga_articol_factura in gcPretvSql, separat prin ';'.
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS12Stoc')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcPretvSql = loMock.cPretv
|
||||
gcContSql = loMock.cCont
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ;
|
||||
' apeluri_articol=' + TRANSFORM(loMock.nApeluriArticol) + ;
|
||||
' argumente_22=[' + gcPretvSql + ']' + ;
|
||||
' argumente_16=[' + gcContSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- ultimul SQL de articol ---' + CHR(13) + CHR(10) + ;
|
||||
TRANSFORM(loMock.cSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS12Stoc AS Custom
|
||||
cPretv = ''
|
||||
cCont = ''
|
||||
cSqlUltim = ''
|
||||
nApeluri = 0
|
||||
nApeluriArticol = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
LOCAL lcSql, lnPoz, lcRest
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcSql) <> 'C'
|
||||
RETURN 1
|
||||
ENDIF
|
||||
lcSql = m.tcSql
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
DO WHILE lnPoz > 0
|
||||
THIS.nApeluriArticol = THIS.nApeluriArticol + 1
|
||||
lcRest = SUBSTR(lcSql, lnPoz + LEN('adauga_articol_factura('))
|
||||
THIS.cPretv = THIS.cPretv + ALLTRIM(GETWORDNUM(lcRest, 22, ',')) + ';'
|
||||
THIS.cCont = THIS.cCont + ALLTRIM(GETWORDNUM(lcRest, 16, ',')) + ';'
|
||||
THIS.cSqlUltim = m.tcSql
|
||||
lcSql = lcRest
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
ENDDO
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS12Stoc: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
282
utile/Teste/editare_factura/probe_s12_stoc_ctrlneg.prg
Normal file
282
utile/Teste/editare_factura/probe_s12_stoc_ctrlneg.prg
Normal file
@@ -0,0 +1,282 @@
|
||||
* probe_s12_stoc.prg
|
||||
* Proba de izolare pentru FACT-008 ("Articolul ... nu mai e in stoc!"): verifica daca pretv_orig
|
||||
* (pretul de vanzare din STOC ales la emiterea initiala) supravietuieste traseului de reemitere.
|
||||
* pack_facturare.descarca_gestiune cauta randul de stoc cu A.PRETV = V_PRETV_ALES, iar
|
||||
* V_PRETV_ALES vine din VANZARI_DETALII_TEMP.PRETV_ORIG, adica din argumentul 22 al apelului
|
||||
* pack_facturare.adauga_articol_factura, adica din crsfactura.pretv_orig.
|
||||
* Asertiunile sunt scrise in sensul CORECT (pretv_orig <> 0 pe liniile gestionabile), deci ele
|
||||
* PICA atat timp cat defectul exista si TREC dupa reparatie.
|
||||
* NIMIC nu se scrie in Oracle: citirile sunt reale, do_scrie_articole() ruleaza cu goExecutor
|
||||
* mockat (tipar identic cu probe_s12_gestiune.prg / test_s11_izolare_camp_1472.prg).
|
||||
*
|
||||
* Pasul 1: sursa reala (VVANZARI_ARTICOLE prin IncarcaArticoleFactura).
|
||||
* Pasul 2: crsfactura dupa IncarcaLiniiFacturaEditare - pretv_orig per linie.
|
||||
* Pasul 3: SQL-ul generat de do_scrie_articole, argumentul 22 (V_PRETV_ORIG) per apel.
|
||||
LPARAMETERS tnIdV
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 631
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_stoc_ctrlneg_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc = ' + TRANSFORM(tnIdV) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\mock_incarca_linii_prefix.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcPretvSql, gcContSql
|
||||
gcPretvSql = ''
|
||||
gcContSql = ''
|
||||
|
||||
DO Diagnostic WITH tnIdV
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Diagnostic
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lnDiscRon, lnDiscVal, lnGestionabile, lnCuPretv, lnArg, lnArgNenule, lnArgTotal
|
||||
LOCAL lnCuCont, lnSrcCuCont, lnCtTotal, lnCtNenule
|
||||
|
||||
IncarcaArticoleFactura(tnIdV, 'crs_src_probe')
|
||||
STRTOFILE('--- PAS 1: sursa VVANZARI_ARTICOLE (crs_src_probe) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crs_src_probe
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare_det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_articol=' + TRANSFORM(NVL(id_articol,-1)) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' in_stoc=' + TRANSFORM(NVL(in_stoc,-1)) + ;
|
||||
' cont=[' + NVL(cont,'') + ']' + ;
|
||||
' pret_achizitie=' + TRANSFORM(NVL(pret_achizitie,-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
SELECT COUNT(*) AS n FROM crs_src_probe WHERE !EMPTY(NVL(cont,'')) INTO CURSOR crs_cnt_cont
|
||||
lnSrcCuCont = crs_cnt_cont.n
|
||||
USE IN crs_cnt_cont
|
||||
DO asserteaza WITH 'P1 sursa contine cel putin o linie', RECCOUNT('crs_src_probe') > 0, TRANSFORM(RECCOUNT('crs_src_probe'))
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH 'P2 antetul documentului ' + TRANSFORM(tnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO asserteaza WITH 'P2 liniile s-au incarcat in crsfactura', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- PAS 2: crsfactura dupa IncarcaLiniiFacturaEditare ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnGestionabile = 0
|
||||
lnCuPretv = 0
|
||||
lnCuCont = 0
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(id_temp) + ;
|
||||
' id_gestiune=' + IIF(ISNULL(id_gestiune), 'NULL', TRANSFORM(id_gestiune)) + ;
|
||||
' gestionabil=' + TRANSFORM(gestionabil) + ;
|
||||
' pret_achizitie=' + TRANSFORM(pret_achizitie) + ;
|
||||
' cont=[' + Cont + ']' + ;
|
||||
' pretv_orig=' + TRANSFORM(pretv_orig) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF !EMPTY(Cont)
|
||||
lnCuCont = lnCuCont + 1
|
||||
ENDIF
|
||||
IF gestionabil = 1
|
||||
lnGestionabile = lnGestionabile + 1
|
||||
IF pretv_orig <> 0
|
||||
lnCuPretv = lnCuPretv + 1
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO asserteaza WITH 'P2 documentul are cel putin o linie gestionabila', lnGestionabile > 0, TRANSFORM(lnGestionabile)
|
||||
DO asserteaza WITH 'P2 crsfactura.pretv_orig e nenul pe liniile gestionabile', ;
|
||||
lnCuPretv = lnGestionabile AND lnGestionabile > 0, TRANSFORM(lnCuPretv) + '/' + TRANSFORM(lnGestionabile)
|
||||
DO asserteaza WITH 'P2 crsfactura.Cont e completat pe toate liniile care au CONT in sursa', ;
|
||||
lnCuCont = lnSrcCuCont AND lnSrcCuCont > 0, TRANSFORM(lnCuCont) + '/' + TRANSFORM(lnSrcCuCont)
|
||||
|
||||
*!* normalizare locala: fara virgule in sirurile din SQL, ca argumentul 22 sa fie extractibil
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'probe-s12', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
DO RuleazaCuMock WITH 'PAS3'
|
||||
|
||||
lnArgTotal = 0
|
||||
lnArgNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcPretvSql, ';')
|
||||
lnArgTotal = lnArgTotal + 1
|
||||
IF VAL(GETWORDNUM(gcPretvSql, lnArg, ';')) <> 0
|
||||
lnArgNenule = lnArgNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 22 (V_PRETV_ORIG) e nenul pe fiecare apel de articol', ;
|
||||
lnArgTotal > 0 AND lnArgNenule = lnArgTotal, gcPretvSql
|
||||
|
||||
lnCtTotal = 0
|
||||
lnCtNenule = 0
|
||||
FOR lnArg = 1 TO GETWORDCOUNT(gcContSql, ';')
|
||||
lnCtTotal = lnCtTotal + 1
|
||||
IF !EMPTY(STRTRAN(GETWORDNUM(gcContSql, lnArg, ';'), CHR(39), ''))
|
||||
lnCtNenule = lnCtNenule + 1
|
||||
ENDIF
|
||||
ENDFOR
|
||||
DO asserteaza WITH 'P3 argumentul 16 (V_CONT) e nevid pe fiecare apel de articol', ;
|
||||
lnCtTotal > 0 AND lnCtNenule = lnCtTotal, gcContSql
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: do_scrie_articole() cu goExecutor mockat; strange argumentul 22 al fiecarui apel
|
||||
* pack_facturare.adauga_articol_factura in gcPretvSql, separat prin ';'.
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS12Stoc')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcPretvSql = loMock.cPretv
|
||||
gcContSql = loMock.cCont
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ;
|
||||
' apeluri_articol=' + TRANSFORM(loMock.nApeluriArticol) + ;
|
||||
' argumente_22=[' + gcPretvSql + ']' + ;
|
||||
' argumente_16=[' + gcContSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- ultimul SQL de articol ---' + CHR(13) + CHR(10) + ;
|
||||
TRANSFORM(loMock.cSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS12Stoc AS Custom
|
||||
cPretv = ''
|
||||
cCont = ''
|
||||
cSqlUltim = ''
|
||||
nApeluri = 0
|
||||
nApeluriArticol = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
LOCAL lcSql, lnPoz, lcRest
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcSql) <> 'C'
|
||||
RETURN 1
|
||||
ENDIF
|
||||
lcSql = m.tcSql
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
DO WHILE lnPoz > 0
|
||||
THIS.nApeluriArticol = THIS.nApeluriArticol + 1
|
||||
lcRest = SUBSTR(lcSql, lnPoz + LEN('adauga_articol_factura('))
|
||||
THIS.cPretv = THIS.cPretv + ALLTRIM(GETWORDNUM(lcRest, 22, ',')) + ';'
|
||||
THIS.cCont = THIS.cCont + ALLTRIM(GETWORDNUM(lcRest, 16, ',')) + ';'
|
||||
THIS.cSqlUltim = m.tcSql
|
||||
lcSql = lcRest
|
||||
lnPoz = AT('adauga_articol_factura(', lcSql)
|
||||
ENDDO
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS12Stoc: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
316
utile/Teste/editare_factura/probe_s12_sucursala.prg
Normal file
316
utile/Teste/editare_factura/probe_s12_sucursala.prg
Normal file
@@ -0,0 +1,316 @@
|
||||
* probe_s12_sucursala.prg
|
||||
* Masoara starea de sesiune Oracle care intra in predicatul de stoc al lui
|
||||
* pack_facturare.descarca_gestiune (PACK_FACTURARE BODY:7329-7341): nid_sucursala, nan, nluna.
|
||||
* O variabila de pachet PL/SQL traieste per sesiune, deci se citeste pe ACELASI gnHandle pe care
|
||||
* ruleaza fluxul, printr-un bloc anonim care intoarce valorile in textul unui
|
||||
* raise_application_error (fara DML, fara DDL).
|
||||
*
|
||||
* tnIdV - documentul reemis (631 sau 580)
|
||||
* tnForceAn - perioada activa fortata (ca in test_s9_8_flux: 2014 1)
|
||||
* tnForceLuna
|
||||
* tnSuc - daca <> 0, forteaza gnIdSucursala inainte de do_scrie_factura (experimentul
|
||||
* decisiv: daca FACT-008 dispare, esecul era artefact de harness). ATENTIE: pe
|
||||
* valoarea corecta fluxul SCRIE in Oracle.
|
||||
LPARAMETERS tnIdV, tnForceAn, tnForceLuna, tnSuc
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate, poSnapshotEditare
|
||||
|
||||
IF VARTYPE(tnIdV) = 'C'
|
||||
tnIdV = VAL(tnIdV)
|
||||
ENDIF
|
||||
IF EMPTY(tnIdV)
|
||||
tnIdV = 631
|
||||
ENDIF
|
||||
IF VARTYPE(tnSuc) = 'C'
|
||||
tnSuc = VAL(tnSuc)
|
||||
ENDIF
|
||||
IF EMPTY(tnSuc)
|
||||
tnSuc = 0
|
||||
ENDIF
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s12_sucursala_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' doc=' + TRANSFORM(tnIdV) + ;
|
||||
' suc_fortata=' + TRANSFORM(tnSuc) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO probe_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', VAL(TRANSFORM(tnForceAn)), VAL(TRANSFORM(tnForceLuna))
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
DO Masoara WITH tnIdV, tnSuc
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Masoara
|
||||
LPARAMETERS tnIdV, tnSuc
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnRuta, llRez, lnIdVMaxInainte, lnNr, lnIdVNou
|
||||
|
||||
STRTOFILE('--- STAREA VFP DUPA INIT ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gnIdFirma = ' + TRANSFORM(gnIdFirma) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gnIdSucursala: tip=' + VARTYPE(gnIdSucursala) + ' isnull=' + TRANSFORM(ISNULL(gnIdSucursala)) + ;
|
||||
' valoare=' + TRANSFORM(NVL(gnIdSucursala, -777)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gcCondSucursala = <' + TRANSFORM(gcCondSucursala) + '>' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' goFirma.id_firma = ' + TRANSFORM(NVL(goFirma.Id_Firma, -777)) + ;
|
||||
' goFirma.id_mama = ' + TRANSFORM(NVL(goFirma.id_mama, -777)) + ;
|
||||
' goFirma.firma = ' + TRANSFORM(NVL(goFirma.firma, '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* ce intoarce interogarea de firma din harness, in ordinea reala a randurilor
|
||||
IF USED('c_fsuc')
|
||||
USE IN c_fsuc
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta("select id_firma, firma, id_mama from syn_v_nom_firme where schema = ?gcS", 'c_fsuc')
|
||||
STRTOFILE('--- syn_v_nom_firme pentru schema (ordinea reala) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT c_fsuc
|
||||
SCAN
|
||||
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': id_firma=' + TRANSFORM(id_firma) + ;
|
||||
' id_mama=' + TRANSFORM(NVL(id_mama, -777)) + ' firma=' + ALLTRIM(NVL(firma, '')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN c_fsuc
|
||||
ENDIF
|
||||
|
||||
*!* id_sucursala al documentului tintit
|
||||
STRTOFILE(' VANZARI.id_sucursala doc ' + TRANSFORM(tnIdV) + ' = ' + ;
|
||||
TRANSFORM(Val1("select nvl(id_sucursala,-777) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV))) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO CitestePachet WITH 'INAINTE de flux'
|
||||
|
||||
IF tnSuc <> 0
|
||||
gnIdSucursala = tnSuc
|
||||
STRTOFILE('*** gnIdSucursala FORTAT la ' + TRANSFORM(gnIdSucursala) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
lnIdVMaxInainte = Val1("select nvl(max(id_vanzare),0) as v from vanzari")
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
STRTOFILE(' poDate.dataireg = ' + TRANSFORM(poDate.dataireg) + ;
|
||||
' poDate.dataact = ' + TRANSFORM(poDate.dataact) + ;
|
||||
' poDate.tip = ' + TRANSFORM(poDate.Tip) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
update_jtva_coloane("JV", "jtva_coloane_temp")
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
tnIdV, Val1("select nvl(id_fact,0) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV)), ;
|
||||
Val1("select nvl(cod,0) as v from vanzari where id_vanzare = " + TRANSFORM(tnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE(' ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE(' do_scrie_factura() = ' + TRANSFORM(llRez) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' ultimul mesaj prin mock: <' + gcMockUltimMesaj + '>' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO CitestePachet WITH 'DUPA do_scrie_factura'
|
||||
|
||||
lnNr = Val1("select count(*) as v from vanzari where sters = 0 and id_vanzare > " + TRANSFORM(lnIdVMaxInainte))
|
||||
lnIdVNou = Val1("select nvl(max(id_vanzare),0) as v from vanzari where sters = 0 and id_vanzare > " + TRANSFORM(lnIdVMaxInainte))
|
||||
STRTOFILE(' documente noi nesterse dupa apel = ' + TRANSFORM(lnNr) + ' id_vanzare nou = ' + TRANSFORM(lnIdVNou) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO ReplayPredicat WITH tnIdV
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* ReplayPredicat: rejoaca ramura ELSE "din STOC" a lui descarca_gestiune (BODY:7328-7345) in
|
||||
* ACEEASI sesiune, cu valorile reale trimise pentru prima linie a documentului, de doua ori:
|
||||
* (a) cu pack_facturare.nid_sucursala asa cum e in sesiune, (b) cu 167 pus literal in locul ei.
|
||||
* Singura diferenta intre cele doua rulari e sucursala. Doar SELECT, in bloc PL/SQL (variabilele
|
||||
* de pachet nu se pot referi din SQL pur); rezultatul vine in textul unei erori.
|
||||
*==============================================================================================
|
||||
PROCEDURE ReplayPredicat
|
||||
LPARAMETERS tnIdV
|
||||
LOCAL lcArt, lcGest, lcPret, lcPretd, lcValutad, lcPretv, lcCante, lcUnde
|
||||
|
||||
DO CASE
|
||||
CASE tnIdV = 631
|
||||
lcArt = '315554536'
|
||||
lcGest = '19'
|
||||
lcPret = '100'
|
||||
lcPretd = '0'
|
||||
lcValutad = '0'
|
||||
lcPretv = '200'
|
||||
lcCante = '4'
|
||||
CASE tnIdV = 580
|
||||
lcArt = '315554536'
|
||||
lcGest = '4'
|
||||
lcPret = '100'
|
||||
lcPretd = '0'
|
||||
lcValutad = '3'
|
||||
lcPretv = '120.97'
|
||||
lcCante = '2'
|
||||
OTHERWISE
|
||||
STRTOFILE(' ReplayPredicat: document necunoscut, sarit' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDCASE
|
||||
|
||||
lcUnde = " from stoc a where " + lcCante + " <> 0 and nvl(a.id_sucursala,-99) = @SUC@" + ;
|
||||
" and a.id_articol = " + lcArt + ;
|
||||
" and a.id_gestiune = " + lcGest + ;
|
||||
" and nvl(a.cont,'XXXX') = '371'" + ;
|
||||
" and a.pret = " + lcPret + ;
|
||||
" and a.pretd = " + lcPretd + ;
|
||||
" and nvl(a.id_valuta,0) = decode(" + lcValutad + ", -99, 0, nvl(" + lcValutad + ",0))" + ;
|
||||
" and a.pretv = " + lcPretv + ;
|
||||
" and nvl(a.serie,'+_') = nvl(null,'+_')" + ;
|
||||
" and a.luna = pack_facturare.nluna and a.an = pack_facturare.nan" + ;
|
||||
" and a.cants + a.cant > a.cante" + ;
|
||||
" and nvl(a.id_part_rez,0) = 0 and nvl(a.id_lucrare_rez,0) = 0"
|
||||
|
||||
DO NumaraLoturi WITH 'REPLAY sucursala = cea din sesiune', ;
|
||||
STRTRAN(lcUnde, '@SUC@', 'nvl(pack_facturare.nid_sucursala,-99)')
|
||||
DO NumaraLoturi WITH 'REPLAY sucursala = 167 (literal)', ;
|
||||
STRTRAN(lcUnde, '@SUC@', 'nvl(167,-99)')
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE NumaraLoturi
|
||||
LPARAMETERS tcEticheta, tcUnde
|
||||
LOCAL lcSql, lnR, laErr, lcVechi
|
||||
lcVechi = SQLGETPROP(gnHandle, 'DispWarnings')
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', .F.)
|
||||
|
||||
lcSql = "declare n number; begin select count(*) into n" + tcUnde + ;
|
||||
"; raise_application_error(-20998, 'REPLAY n=<'||n||'>'); end;"
|
||||
|
||||
DIMENSION laErr[1]
|
||||
lnR = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnR < 0
|
||||
AERROR(laErr)
|
||||
STRTOFILE(' [' + tcEticheta + '] ' + STRTRAN(STRTRAN(TRANSFORM(laErr[1,3]), CHR(13), ' '), CHR(10), ' ') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' [' + tcEticheta + '] NEASTEPTAT: fara eroare (r=' + TRANSFORM(lnR) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', lcVechi)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CitestePachet: citeste variabilele publice de pachet pe ACELASI handle, printr-un bloc anonim
|
||||
* care le intoarce in textul erorii (nu scrie nimic). SQLEXEC nu declanseaza ON ERROR.
|
||||
*==============================================================================================
|
||||
PROCEDURE CitestePachet
|
||||
LPARAMETERS tcMoment
|
||||
LOCAL lcSql, lnR, laErr, lcVechi
|
||||
lcVechi = SQLGETPROP(gnHandle, 'DispWarnings')
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', .F.)
|
||||
|
||||
lcSql = "begin raise_application_error(-20999, 'PKVAR nid_sucursala=<'" + ;
|
||||
"||nvl(to_char(pack_facturare.nid_sucursala),'NULL')||'> nan=<'" + ;
|
||||
"||nvl(to_char(pack_facturare.nan),'NULL')||'> nluna=<'" + ;
|
||||
"||nvl(to_char(pack_facturare.nluna),'NULL')||'>'); end;"
|
||||
|
||||
DIMENSION laErr[1]
|
||||
lnR = SQLEXEC(gnHandle, lcSql)
|
||||
IF lnR < 0
|
||||
AERROR(laErr)
|
||||
STRTOFILE(' [' + tcMoment + '] ' + STRTRAN(STRTRAN(TRANSFORM(laErr[1,3]), CHR(13), ' '), CHR(10), ' ') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' [' + tcMoment + '] NEASTEPTAT: blocul nu a intors eroare (r=' + TRANSFORM(lnR) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
SQLSETPROP(gnHandle, 'DispWarnings', lcVechi)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnV
|
||||
lnV = -1
|
||||
IF USED('c_val1')
|
||||
USE IN c_val1
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'c_val1')
|
||||
SELECT c_val1
|
||||
IF RECCOUNT('c_val1') >= 1
|
||||
GO TOP
|
||||
lnV = NVL(v, -1)
|
||||
ENDIF
|
||||
USE IN c_val1
|
||||
ENDIF
|
||||
RETURN lnV
|
||||
ENDFUNC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE probe_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
99
utile/Teste/editare_factura/probe_s13_callshape.prg
Normal file
99
utile/Teste/editare_factura/probe_s13_callshape.prg
Normal file
@@ -0,0 +1,99 @@
|
||||
* probe_s13_callshape.prg
|
||||
* Forma apelului care cade: {call proc(...argumente..., ?@obiect.proprietate)} unde procedura are
|
||||
* si un ultim parametru OUT REF CURSOR nedat in apel (legat automat de driver ca result set).
|
||||
* Reproducem forma pe pack_facturare.cursor_avize (V_LISTAID IN, V_ID_UTIL IN, V_DISCOUNT OUT
|
||||
* NUMBER, V_CURSOR OUT REF CURSOR) - aceeasi forma ca scrie_factura2, dar procedura NU scrie nimic
|
||||
* (initializeaza_facturare seteaza doar variabile de pachet; cursorul se deschide pe lista goala).
|
||||
*
|
||||
* Trei variante, ca sa izolam ce declanseaza VFP 1872:
|
||||
* 1) ?@ legat de o variabila PUBLIC simpla
|
||||
* 2) ?@ legat de o proprietate de obiect (exact ca ?@poDate.nid_vanzare)
|
||||
* 3) acelasi cursor, dar chemat fara {call} (control)
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, pnDisc, poX
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_callshape_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-CALLSHAPE' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
pnDisc = 0
|
||||
poX = CREATEOBJECT('Empty')
|
||||
ADDPROPERTY(poX, 'nid_vanzare', 0)
|
||||
|
||||
DO Incearca WITH '1. {call cursor_avize(...,?@pnDisc)} - variabila PUBLIC', [{call pack_facturare.cursor_avize('',8,?@pnDisc)}], 'c_1'
|
||||
DO Incearca WITH '2. {call cursor_avize(...,?@poX.nid_vanzare)} - proprietate de obiect', [{call pack_facturare.cursor_avize('',8,?@poX.nid_vanzare)}], 'c_2'
|
||||
DO Incearca WITH '3. {call cursor_verificare} - fara parametru OUT scalar (control)', [{call pack_facturare.cursor_verificare}], 'c_3'
|
||||
|
||||
*!* CONTROLUL care conteaza: aceeasi procedura (are OUT REF CURSOR), dar cu un argument care
|
||||
*!* face Oracle sa arunce INAINTE de OPEN-ul cursorului. Daca VFP raporteaza 1872 in loc de
|
||||
*!* eroarea Oracle, atunci "Too many columns." e MASCA unei erori Oracle, nu un defect de coloane.
|
||||
DO Incearca WITH '4. {call cursor_avize} cu lista invalida - Oracle arunca inainte de OPEN', [{call pack_facturare.cursor_avize('abc',8,?@pnDisc)}], 'c_4'
|
||||
DO Incearca WITH '5. {call cursor_avize} cu id_util inexistent', [{call pack_facturare.cursor_avize('',-987654,?@pnDisc)}], 'c_5'
|
||||
DO Incearca WITH '6. begin ... end; care arunca (fara REF CURSOR) - control', [begin raise_application_error(-20000,'proba s13'); end;], 'c_6'
|
||||
DO Incearca WITH '7. {call} pe procedura inexistenta', [{call pack_facturare.procedura_inexistenta_s13(1)}], 'c_7'
|
||||
|
||||
*!* Argumentul 11 al lui scrie_factura2 e o EXPRESIE cu virgula in ea:
|
||||
*!* to_date('20090518121908','YYYYMMDDHH24MISS'). Driverul ODBC construieste blocul anonim din
|
||||
*!* lista de argumente (vezi testul 7: foloseste DBMS_DESCRIBE), deci virgula dinauntru poate fi
|
||||
*!* citita ca separator si numarul de argumente iese gresit.
|
||||
DO Incearca WITH '8. {call cursor_avize} cu expresie ce contine virgula ca argument', [{call pack_facturare.cursor_avize(to_char(sysdate,'YYYYMMDD'),8,?@pnDisc)}], 'c_8'
|
||||
DO Incearca WITH '9. {call cursor_avize} cu NULL ca argument text', [{call pack_facturare.cursor_avize(NULL,8,?@pnDisc)}], 'c_9'
|
||||
DO Incearca WITH '10. {call cursor_avize} cu to_date(...) ca argument', [{call pack_facturare.cursor_avize(to_char(to_date('20090518','YYYYMMDD'),'DD'),8,?@pnDisc)}], 'c_10'
|
||||
|
||||
*!* Statement-ul EXACT care cade in flux, dar intr-o sesiune curata: VANZARI_DETALII_TEMP (tabela
|
||||
*!* temporara de sesiune) e goala, deci procedura arunca FACT-004 la linia 4974 INAINTE sa deschida
|
||||
*!* REF CURSOR-ul si inainte de orice scriere reala. Daca VFP raporteaza eroarea Oracle -> 1872
|
||||
*!* apare doar pe drumul de succes. Daca raporteaza tot 1872 -> e defect de descriere, nu de date.
|
||||
DO Incearca WITH '11. statement-ul REAL al doc 360, sesiune curata (temp goale)', ;
|
||||
[{call pack_facturare.scrie_factura2(300.00,57.00,0.00,'',0,NULL,NULL,NULL,NULL,0,to_date('20090518121908','YYYYMMDDHH24MISS'),NULL,'',1,0,?@poX.nid_vanzare)}], 'c_11'
|
||||
|
||||
STRTOFILE('pnDisc dupa apel = ' + TRANSFORM(pnDisc) + ' poX.nid_vanzare = ' + TRANSFORM(poX.nid_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF, lcAlte, lnJ
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ' SQL=[' + tcSql + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet >= 0
|
||||
FOR lnJ = 0 TO 3
|
||||
lcAlte = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
||||
IF USED(lcAlte)
|
||||
lnF = AFIELDS(laF, lcAlte)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' cursor [' + lcAlte + ']: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + ;
|
||||
TRANSFORM(lnLatime) + ' octeti, ' + TRANSFORM(RECCOUNT(lcAlte)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (lcAlte)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ELSE
|
||||
IF AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
27
utile/Teste/editare_factura/probe_s13_errtext.prg
Normal file
27
utile/Teste/editare_factura/probe_s13_errtext.prg
Normal file
@@ -0,0 +1,27 @@
|
||||
* probe_s13_errtext.prg
|
||||
* Ce numar de eroare VFP are textul "Too many columns." - masurat, nu ghicit.
|
||||
* Comanda ERROR n genereaza eroarea VFP cu numarul n; TRY/CATCH ii citeste textul.
|
||||
* Nu atinge Oracle, nu atinge nimic pe disc in afara propriului log.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog, lnI, loEx, lcMsg
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_errtext_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-ERRTEXT' + CHR(13) + CHR(10), lcLog)
|
||||
|
||||
FOR lnI = 1 TO 2500
|
||||
lcMsg = ''
|
||||
TRY
|
||||
ERROR lnI
|
||||
CATCH TO loEx
|
||||
lcMsg = loEx.Message
|
||||
ENDTRY
|
||||
IF 'COLUMN' $ UPPER(lcMsg) OR 'TOO MANY' $ UPPER(lcMsg)
|
||||
STRTOFILE(TRANSFORM(lnI) + ' -> [' + lcMsg + ']' + CHR(13) + CHR(10), lcLog, 1)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
33
utile/Teste/editare_factura/probe_s13_errtext2.prg
Normal file
33
utile/Teste/editare_factura/probe_s13_errtext2.prg
Normal file
@@ -0,0 +1,33 @@
|
||||
* probe_s13_errtext2.prg
|
||||
* Continuarea sweep-ului de numere de eroare VFP (prima rulare s-a oprit in jurul lui 224).
|
||||
* Scrie un heartbeat cu numarul curent, ca sa se vada exact unde moare.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
LOCAL lcLog, lcBeat, lnI, loEx, lcMsg, lcBuf
|
||||
lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_errtext2_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
lcBeat = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_errtext2_beat.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-ERRTEXT2' + CHR(13) + CHR(10), lcLog)
|
||||
|
||||
lcBuf = ''
|
||||
FOR lnI = 224 TO 2500
|
||||
STRTOFILE(TRANSFORM(lnI), lcBeat)
|
||||
lcMsg = ''
|
||||
TRY
|
||||
ERROR lnI
|
||||
CATCH TO loEx
|
||||
lcMsg = loEx.Message
|
||||
ENDTRY
|
||||
IF 'COLUMN' $ UPPER(lcMsg) OR 'TOO MANY' $ UPPER(lcMsg)
|
||||
lcBuf = lcBuf + TRANSFORM(lnI) + ' -> [' + lcMsg + ']' + CHR(13) + CHR(10)
|
||||
ENDIF
|
||||
IF MOD(lnI, 100) = 0
|
||||
STRTOFILE('... ajuns la ' + TRANSFORM(lnI) + CHR(13) + CHR(10) + lcBuf, lcLog, 1)
|
||||
lcBuf = ''
|
||||
ENDIF
|
||||
ENDFOR
|
||||
|
||||
STRTOFILE(lcBuf + 'end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
1
utile/Teste/editare_factura/probe_s13_errtext2_beat.txt
Normal file
1
utile/Teste/editare_factura/probe_s13_errtext2_beat.txt
Normal file
@@ -0,0 +1 @@
|
||||
1116
|
||||
91
utile/Teste/editare_factura/probe_s13_poison.prg
Normal file
91
utile/Teste/editare_factura/probe_s13_poison.prg
Normal file
@@ -0,0 +1,91 @@
|
||||
* probe_s13_poison.prg
|
||||
* In flux, statement-ul care cade ({call scrie_factura2 ... REF CURSOR OUT}) vine imediat dupa doua
|
||||
* statemente cu 52 de parametri legati fiecare (INSERT INTO ACT_TEMP ... 52 x "?"), din mecanismul
|
||||
* de stergere/regenerare S9. Aceeasi procedura, chemata din bloc anonim cu REF CURSOR-ul intr-o
|
||||
* variabila locala PL/SQL, se executa fara probleme - deci esecul e strict la materializarea
|
||||
* result set-ului in VFP.
|
||||
*
|
||||
* Ipoteza probata aici: un statement cu multi parametri legati executat inainte strica descrierea
|
||||
* result set-ului pentru urmatorul apel cu REF CURSOR OUT. Totul read-only (select din dual +
|
||||
* proceduri care doar deschid cursoare).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, p1
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_poison_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-POISON' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
p1 = 1
|
||||
|
||||
DO Incearca WITH 'T1 baseline: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t1'
|
||||
DO Incearca WITH 'T2 statement cu 52 parametri legati', CuParametri(52), 'c_t2'
|
||||
DO Incearca WITH 'T3 dupa 52 parametri: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t3'
|
||||
DO Incearca WITH 'T4 dupa 52 parametri: select normal', [select * from vact where 1 = 2], 'c_t4'
|
||||
DO Incearca WITH 'T5 din nou: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t5'
|
||||
DO Incearca WITH 'T6 statement cu 5 parametri legati', CuParametri(5), 'c_t6'
|
||||
DO Incearca WITH 'T7 dupa 5 parametri: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t7'
|
||||
|
||||
*!* in flux, conexiunea e in tranzactie MANUALA (Transactions = 2) si a facut deja DML
|
||||
STRTOFILE('--- trec pe tranzactie manuala (Transactions = 2) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SQLSetProp(gnHandle, 'Transactions', 2)
|
||||
DO Incearca WITH 'T8 in tranzactie manuala: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t8'
|
||||
DO Incearca WITH 'T9 DML pe tabela temporara de sesiune', [insert into act_temp (id_act, luna, an, sters) values (?p1, 4, 2009, 0)], 'c_t9'
|
||||
DO Incearca WITH 'T10 dupa DML, in tranzactie: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t10'
|
||||
DO Incearca WITH 'T11 dupa DML, in tranzactie: select normal', [select * from vact where 1 = 2], 'c_t11'
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
STRTOFILE('--- rollback facut, inapoi pe Transactions = 1 ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO Incearca WITH 'T12 dupa rollback: {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_t12'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
FUNCTION CuParametri
|
||||
LPARAMETERS tnN
|
||||
LOCAL lcS, lnI
|
||||
lcS = 'select 1 as v from dual where '
|
||||
FOR lnI = 1 TO tnN
|
||||
lcS = lcS + '?p1 is not null and '
|
||||
ENDFOR
|
||||
RETURN lcS + '1 = 1'
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
IF lnRet >= 0 AND USED(tcCursor)
|
||||
lnF = AFIELDS(laF, tcCursor)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(tcEticheta + ' -> ret=' + TRANSFORM(lnRet) + ' ' + TRANSFORM(lnF) + ' coloane, latime ' + ;
|
||||
TRANSFORM(lnLatime) + ', ' + TRANSFORM(RECCOUNT(tcCursor)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (tcCursor)
|
||||
ELSE
|
||||
STRTOFILE(tcEticheta + ' -> ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet < 0 AND AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(tcEticheta + ' -> EXCEPTIE ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' [' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
86
utile/Teste/editare_factura/probe_s13_refcursor.prg
Normal file
86
utile/Teste/editare_factura/probe_s13_refcursor.prg
Normal file
@@ -0,0 +1,86 @@
|
||||
* probe_s13_refcursor.prg
|
||||
* Ce anume nu poate materializa VFP la statement-ul {call pack_facturare.scrie_factura2(...)}:
|
||||
* rezultatul lui este REF CURSOR-ul OUT V_CURSOR_VERIFICARE (parametrul 17, nedat in apel, legat
|
||||
* automat de driverul ODBC ca result set). Doua ramuri posibile in pachet (liniile 4877/4881,
|
||||
* 5113/5126 din PACKAGE BODY):
|
||||
* a) pack_facturare.cursor_verificare(...) - SELECT cu ~75 coloane si 17 JOIN-uri pe ACT_TEMP
|
||||
* b) SELECT * FROM ACT_TEMP WHERE 1 = 2 - doar coloanele lui ACT_TEMP
|
||||
* Probam ambele forme direct prin SQLExec, in aceeasi sesiune, FARA nicio scriere:
|
||||
* cursor_verificare are un singur parametru, OUT REF CURSOR, deci nu modifica nimic.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_refcursor_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-REFCURSOR' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Incearca WITH 'A. select direct din ACT_TEMP', [select * from act_temp where 1 = 2], 'c_a'
|
||||
DO Incearca WITH 'B. {call} cu REF CURSOR OUT (cursor_verificare)', [{call pack_facturare.cursor_verificare}], 'c_b'
|
||||
DO Incearca WITH 'C. select cu 300 de coloane din dual', ConstruiesteSelectLarg(300), 'c_c'
|
||||
DO Incearca WITH 'D. select cu 254 de coloane din dual', ConstruiesteSelectLarg(254), 'c_d'
|
||||
DO Incearca WITH 'E. select cu 255 de coloane din dual', ConstruiesteSelectLarg(255), 'c_e'
|
||||
DO Incearca WITH 'F. select cu 256 de coloane din dual', ConstruiesteSelectLarg(256), 'c_f'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
FUNCTION ConstruiesteSelectLarg
|
||||
LPARAMETERS tnN
|
||||
LOCAL lcS, lnI
|
||||
lcS = 'select '
|
||||
FOR lnI = 1 TO tnN
|
||||
lcS = lcS + IIF(lnI > 1, ',', '') + '1 as c' + TRANSFORM(lnI)
|
||||
ENDFOR
|
||||
RETURN lcS + ' from dual'
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ;
|
||||
' SQL(len=' + TRANSFORM(LEN(tcSql)) + ')=[' + LEFT(tcSql, 400) + IIF(LEN(tcSql) > 400, '...', '') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lnRet = -999
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet < 0
|
||||
IF AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ELSE
|
||||
IF USED(tcCursor)
|
||||
lnF = AFIELDS(laF, tcCursor)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' cursor creat: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + TRANSFORM(lnLatime) + ' octeti, ' + ;
|
||||
TRANSFORM(RECCOUNT(tcCursor)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (tcCursor)
|
||||
ELSE
|
||||
STRTOFILE(' (niciun cursor creat)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
407
utile/Teste/editare_factura/probe_s13_toomanycolumns.prg
Normal file
407
utile/Teste/editare_factura/probe_s13_toomanycolumns.prg
Normal file
@@ -0,0 +1,407 @@
|
||||
* probe_s13_toomanycolumns.prg
|
||||
* Diagnostic pentru "Too many columns." pe documentul 360 (CONTRACT-B, rularea 6 din
|
||||
* test_s9_8_flux.prg, perioada fortata 2009/4). Repeta EXACT scenariul rularii 6, dar cu
|
||||
* goExecutor inlocuit de o SUBCLASA a lui oexecutor care logheaza fiecare statement inainte de
|
||||
* executie si prinde exceptia exact la statement-ul care cade (numar de eroare + mesaj + procedura
|
||||
* + linie), apoi intoarce -1 in loc sa o propage - ca fluxul sa cada pe ramura normala de eroare
|
||||
* (do_inchide_tranzactie(2) = ROLLBACK), nu pe CATCH-ul din do_scrie_factura.
|
||||
*
|
||||
* Nu modifica niciun fisier de productie. Nu face COMMIT. La final verifica cascada de 6 randuri
|
||||
* a documentului 360 (VANZARI, VANZARI_DETALII, DOCUMENTE, ACT x2, CTR_RATE_FACTURI).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate, poSnapshotEditare, goFormReemitere
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_toomanycolumns_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-TMC doc=360 perioada=2009/4' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO Probeaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Probeaza
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
||||
lnIdV = 360
|
||||
|
||||
DO bat WITH 'intrat in Probeaza'
|
||||
DO StareCascada WITH 'INAINTE'
|
||||
DO bat WITH 'dupa StareCascada INAINTE'
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO DescrieCursorFactura
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
||||
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyS13')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
|
||||
STRTOFILE('--- INCEPE do_scrie_factura, statementele urmeaza in ordine ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goExecutor = loReal
|
||||
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' esecuri: ' + TRANSFORM(loSpy.nEsecuri) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO StareCascada WITH 'DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* DescrieCursorFactura: structura si continutul crsfactura (campurile NULL + opt_facturare, care
|
||||
* decide branch-ul adauga_rata_factura vs adauga_articol_factura).
|
||||
*==============================================================================================
|
||||
PROCEDURE DescrieCursorFactura
|
||||
LOCAL laF[1], lnF, lnI, lcNule
|
||||
lnF = AFIELDS(laF, 'crsfactura')
|
||||
STRTOFILE('--- crsfactura: ' + TRANSFORM(RECCOUNT('crsfactura')) + ' randuri, ' + TRANSFORM(lnF) + ' campuri ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
lcNule = ''
|
||||
FOR lnI = 1 TO lnF
|
||||
IF ISNULL(EVALUATE('crsfactura.' + laF[lnI,1]))
|
||||
lcNule = lcNule + laF[lnI,1] + ' '
|
||||
ENDIF
|
||||
ENDFOR
|
||||
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': opt_facturare=' + TRANSFORM(crsfactura.opt_facturare) + ;
|
||||
' id_rata=' + TRANSFORM(NVL(crsfactura.id_rata,-1)) + ' denumire=[' + TRANSFORM(NVL(crsfactura.denumire,'<NULL>')) + ']' + ;
|
||||
' NULL pe -> ' + IIF(EMPTY(lcNule), '(niciun camp)', lcNule) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
GO TOP IN crsfactura
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE StareCascada
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnIdFact
|
||||
lnIdFact = Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = 360])
|
||||
STRTOFILE(tcEticheta + ' GLOBAL: max_id_vanzare=' + TRANSFORM(Val1([select nvl(max(id_vanzare),0) as v from vanzari])) + ;
|
||||
' count_vanzari=' + TRANSFORM(Val1([select count(*) as v from vanzari])) + ;
|
||||
' max_numar_act_SSS=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where serie_act = 'SSS'])) + ;
|
||||
' max_numar_act_serie360=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where nvl(serie_act,'@') = (select nvl(serie_act,'@') from vanzari where id_vanzare = 360)])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcEticheta + ' CASCADA 360: vanzari.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 360])) + ;
|
||||
' id_fact=' + TRANSFORM(lnIdFact) + ;
|
||||
' vanzari_detalii_vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = 360 and sters = 0])) + ;
|
||||
' documente.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from documente where id_doc = ] + TRANSFORM(lnIdFact))) + ;
|
||||
' act_vii=' + TRANSFORM(Val1([select count(*) as v from act where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
' ctr_rate_facturi_vii=' + TRANSFORM(Val1([select count(*) as v from ctr_rate_facturi where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
*==============================================================================================
|
||||
* MasoaraResultSets: ruleaza statement-ul care cade cu BatchMode = .F., ca sa vada result set-urile
|
||||
* unul cate unul (cate coloane are fiecare), si logheaza integral AERROR() daca tot cade.
|
||||
*==============================================================================================
|
||||
PROCEDURE MasoaraResultSets
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
LOCAL lnR, lnM, lnPas, loEx, laE[1], lnI, lnJ, lcN, laF[1], lnF, lnLat
|
||||
|
||||
STRTOFILE(' *** masurare separata, BatchMode=.F. ***' + CHR(13) + CHR(10) + ;
|
||||
' BatchMode initial = ' + TRANSFORM(SQLGetProp(gnHandle, 'BatchMode')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* diagnostice in ACEEASI stare de sesiune, inainte de statement-ul care cade
|
||||
PUBLIC pnDummyS13
|
||||
pnDummyS13 = 0
|
||||
LOCAL laM[1], lnM2
|
||||
lnM2 = AMEMBERS(laM, poDate, 0)
|
||||
STRTOFILE(' poDate: ' + TRANSFORM(lnM2) + ' membri, TYPE(poDate.nid_vanzare)=' + TYPE('poDate.nid_vanzare') + ;
|
||||
' valoare=' + TRANSFORM(poDate.nid_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO Diag WITH 'D1 {call cursor_avize} cu ?@poDate.nid_vanzare', [{call pack_facturare.cursor_avize('',8,?@poDate.nid_vanzare)}], 'c_dg1'
|
||||
DO Diag WITH 'D2 {call cursor_avize} cu ?@pnDummyS13 (PUBLIC)', [{call pack_facturare.cursor_avize('',8,?@pnDummyS13)}], 'c_dg2'
|
||||
DO Diag WITH 'D3 select * from vact where 1 = 2', [select * from vact where 1 = 2], 'c_dg3'
|
||||
DO Diag WITH 'D4 {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_dg4'
|
||||
|
||||
STRTOFILE(' USED(crsact) inainte de apel = ' + TRANSFORM(USED('crsact')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH 'crsact', 'inainte de apel'
|
||||
|
||||
*!* Acelasi apel, aceeasi stare de sesiune, dar prin bloc anonim cu REF CURSOR-ul intr-o
|
||||
*!* variabila LOCALA PL/SQL - deci nu se mai intoarce niciun result set catre VFP. Daca asa
|
||||
*!* trece, atunci esecul e strict la materializarea REF CURSOR-ului, nu la executia procedurii.
|
||||
LOCAL lcArg, lnP1, lcBloc
|
||||
lnP1 = AT('(', tcSql)
|
||||
lcArg = SUBSTR(tcSql, lnP1 + 1, RAT(')', tcSql) - lnP1 - 1)
|
||||
lcArg = STRTRAN(lcArg, '?@poDate.nid_vanzare', '?@pnDummyS13')
|
||||
lcBloc = 'begin declare c pack_facturare.cursor_facturare; begin pack_facturare.scrie_factura2(' + ;
|
||||
lcArg + ',c); end; end;'
|
||||
DO Diag WITH 'D5 acelasi apel, REF CURSOR in variabila locala PL/SQL', lcBloc, 'c_real'
|
||||
STRTOFILE(' pnDummyS13 dupa D5 = ' + TRANSFORM(pnDummyS13) + ' ISNULL=' + TRANSFORM(ISNULL(pnDummyS13)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
*!* ce ramura a luat scrie_factura2 la linia 5112: verifica_note_contabile(1) > 0 -> cursor_verificare
|
||||
DO Diag WITH 'D6 verifica_note_contabile(1) dupa D5', [select pack_contafin.verifica_note_contabile(1) as v from dual], 'c_ver'
|
||||
IF USED('c_ver')
|
||||
USE IN c_ver
|
||||
ENDIF
|
||||
IF SQLExec(gnHandle, [select pack_contafin.verifica_note_contabile(1) as v from dual], 'c_ver') >= 0 AND USED('c_ver')
|
||||
SELECT c_ver
|
||||
GO TOP
|
||||
STRTOFILE(' verifica_note_contabile(1) = ' + TRANSFORM(NVL(c_ver.v, -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN c_ver
|
||||
ENDIF
|
||||
DO Diag WITH 'D7 {call cursor_verificare} dupa D5', [{call pack_facturare.cursor_verificare}], 'c_dg7'
|
||||
|
||||
SQLSetProp(gnHandle, 'BatchMode', .F.)
|
||||
lnPas = 0
|
||||
TRY
|
||||
lnR = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' SQLExec ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH tcCursor, 'dupa SQLExec'
|
||||
DO WHILE lnPas < 10
|
||||
lnPas = lnPas + 1
|
||||
lnM = SQLMoreResults(gnHandle, tcCursor)
|
||||
STRTOFILE(' SQLMoreResults #' + TRANSFORM(lnPas) + ' ret=' + TRANSFORM(lnM) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH tcCursor, 'dupa SQLMoreResults #' + TRANSFORM(lnPas)
|
||||
IF lnM <> 1
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE la masurare (pas ' + TRANSFORM(lnPas) + '): ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnI = AERROR(laE)
|
||||
IF lnI > 0
|
||||
FOR lnJ = 1 TO ALEN(laE, 2)
|
||||
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDFOR
|
||||
ENDIF
|
||||
DO LogCursoare WITH tcCursor, 'dupa exceptie'
|
||||
ENDTRY
|
||||
SQLSetProp(gnHandle, 'BatchMode', .T.)
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Diag
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnR, loEx
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
TRY
|
||||
lnR = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ' + tcEticheta + ' -> ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO LogCursoare WITH tcCursor, tcEticheta
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' ' + tcEticheta + ' -> EXCEPTIE ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' [' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE LogCursoare
|
||||
LPARAMETERS tcCursor, tcMoment
|
||||
LOCAL lnJ, lcN, laF[1], lnF, lnI, lnLat
|
||||
FOR lnJ = 0 TO 4
|
||||
lcN = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
||||
IF USED(lcN)
|
||||
lnF = AFIELDS(laF, lcN)
|
||||
lnLat = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLat = lnLat + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' [' + tcMoment + '] cursor ' + lcN + ': ' + TRANSFORM(lnF) + ' coloane, latime ' + ;
|
||||
TRANSFORM(lnLat) + ', ' + TRANSFORM(RECCOUNT(lcN)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE bat
|
||||
LPARAMETERS tcPas
|
||||
STRTOFILE('BAT ' + TTOC(DATETIME()) + ' ' + m.tcPas + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet
|
||||
lnRet = -1
|
||||
DO bat WITH 'Val1 intra: ' + m.tcSql
|
||||
IF USED('v_val97')
|
||||
USE IN v_val97
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_val97')
|
||||
SELECT v_val97
|
||||
IF RECCOUNT('v_val97') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val97.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val97
|
||||
ENDIF
|
||||
DO bat WITH 'Val1 iese: ' + TRANSFORM(lnRet)
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyS13: subclasa a lui oexecutor. Logheaza fiecare statement INAINTE de executie, il executa
|
||||
* prin DODEFAULT (comportament identic cu al clasei de baza, acelasi PCOUNT), si daca SQLExec
|
||||
* arunca o exceptie o logheaza integral (ErrorNo/Message/Procedure/LineNo) si intoarce -1 in loc
|
||||
* sa o propage - fluxul cade atunci pe ramura normala de eroare, care face ROLLBACK.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyS13 AS oexecutor
|
||||
nIdx = 0
|
||||
nEsecuri = 0
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc
|
||||
THIS.nIdx = THIS.nIdx + 1
|
||||
lnI = THIS.nIdx
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
||||
|
||||
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
||||
' vartype=' + VARTYPE(m.tcSql) + ' len=' + TRANSFORM(LEN(lcS)) + ;
|
||||
' semne_intrebare=' + TRANSFORM(OCCURS('?', lcS)) + CHR(13) + CHR(10) + ;
|
||||
' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF 'scrie_factura2' $ lcS
|
||||
DO MasoaraResultSets WITH lcS, lcC
|
||||
THIS.nEsecuri = THIS.nEsecuri + 1
|
||||
THIS.cEroare = 'SpyS13: statement masurat separat, nu se mai executa'
|
||||
RETURN -1
|
||||
ENDIF
|
||||
|
||||
lnRet = -1
|
||||
TRY
|
||||
DO CASE
|
||||
CASE lnPc <= 1
|
||||
lnRet = DODEFAULT(m.tcSql)
|
||||
CASE lnPc = 2
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
||||
CASE lnPc = 3
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
||||
CASE lnPc = 4
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
||||
CASE lnPc = 5
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
||||
CASE lnPc = 6
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
||||
CASE lnPc = 7
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
||||
OTHERWISE
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
||||
ENDCASE
|
||||
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
CATCH TO loEx
|
||||
THIS.nEsecuri = THIS.nEsecuri + 1
|
||||
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
||||
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + ']' + ;
|
||||
' Details=[' + TRANSFORM(loEx.Details) + ']' + ;
|
||||
' Procedure=' + TRANSFORM(loEx.Procedure) + ;
|
||||
' LineNo=' + TRANSFORM(loEx.Lineno) + ;
|
||||
' LineContents=[' + TRANSFORM(loEx.LineContents) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyS13: ' + TRANSFORM(loEx.Message)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
FUNCTION oPrelucrareEroare
|
||||
RETURN 'SpyS13: ' + TRANSFORM(THIS.cEroare)
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
58
utile/Teste/editare_factura/probe_s13_vact.prg
Normal file
58
utile/Teste/editare_factura/probe_s13_vact.prg
Normal file
@@ -0,0 +1,58 @@
|
||||
* probe_s13_vact.prg
|
||||
* Ramura de succes a lui pack_facturare.scrie_factura2 (PACKAGE BODY, liniile 5126-5127) deschide
|
||||
* REF CURSOR-ul OUT pe [select * from VACT where 1 = 2]. Verificam daca VFP poate materializa acel
|
||||
* result set - si daca nu, cate coloane vede de fapt. Doar SELECT-uri, nicio scriere.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_vact_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-VACT' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Incearca WITH 'A. select * from vact where 1 = 2', [select * from vact where 1 = 2], 'c_a'
|
||||
DO Incearca WITH 'B. select * from vact_tot where 1 = 2', [select * from vact_tot where 1 = 2], 'c_b'
|
||||
DO Incearca WITH 'C. select * from vact (fara filtru, primul rand)', [select * from vact where rownum <= 1], 'c_c'
|
||||
DO Incearca WITH 'D. select * from fact_vfacturi where 1 = 2', [select * from fact_vfacturi where 1 = 2], 'c_d'
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE Incearca
|
||||
LPARAMETERS tcEticheta, tcSql, tcCursor
|
||||
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
||||
|
||||
IF USED(tcCursor)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
TRY
|
||||
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
||||
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnRet >= 0 AND USED(tcCursor)
|
||||
lnF = AFIELDS(laF, tcCursor)
|
||||
lnLatime = 0
|
||||
FOR lnI = 1 TO lnF
|
||||
lnLatime = lnLatime + laF[lnI, 3]
|
||||
ENDFOR
|
||||
STRTOFILE(' cursor creat: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + TRANSFORM(lnLatime) + ' octeti' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN (tcCursor)
|
||||
ENDIF
|
||||
IF lnRet < 0 AND AERROR(laE) > 0
|
||||
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
301
utile/Teste/editare_factura/probe_s13b_batchmode_direct.prg
Normal file
301
utile/Teste/editare_factura/probe_s13b_batchmode_direct.prg
Normal file
@@ -0,0 +1,301 @@
|
||||
* probe_s13b_batchmode_direct.prg
|
||||
* Ultima verificare ceruta de docs/diagnostic_contract_too_many_columns.md (sectiunea Necunoscut):
|
||||
* statement-ul #15 ({call pack_facturare.scrie_factura2(...)}, ofacturare.vc2:20307-20328) executat
|
||||
* DIRECT dupa statement-ul #14, cu BatchMode ramas .T. (neschimbat) si FARA diagnosticele D1-D7
|
||||
* intercalate - spre deosebire de probe_s13_toomanycolumns.prg, care la #15 devia intai prin
|
||||
* MasoaraResultSets (D1-D7, apoi comuta pe BatchMode=.F.).
|
||||
*
|
||||
* Nu modifica niciun fisier de productie. Nu face COMMIT. La final verifica cascada documentului
|
||||
* 360 (VANZARI, VANZARI_DETALII, DOCUMENTE, ACT x2, CTR_RATE_FACTURI).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
PUBLIC poDate, poSnapshotEditare, goFormReemitere
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13b_batchmode_direct_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13B-DIRECT doc=360 perioada=2009/4' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO Probeaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Probeaza
|
||||
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
||||
lnIdV = 360
|
||||
|
||||
DO StareCascada WITH 'INAINTE'
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
||||
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
||||
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
loReal = goExecutor
|
||||
loSpy = CREATEOBJECT('SpyS13Direct')
|
||||
loSpy.nHandle = gnHandle
|
||||
goExecutor = loSpy
|
||||
|
||||
STRTOFILE('BatchMode inainte de do_scrie_factura = ' + TRANSFORM(SQLGetProp(gnHandle, 'BatchMode')) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('--- INCEPE do_scrie_factura, statementele urmeaza in ordine ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
llRez = loForm.do_scrie_factura()
|
||||
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
goExecutor = loReal
|
||||
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' #15 interceptat=' + TRANSFORM(loSpy.lInterceptat15) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO StareCascada WITH 'DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE StareCascada
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnIdFact
|
||||
lnIdFact = Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = 360])
|
||||
STRTOFILE(tcEticheta + ' GLOBAL: max_id_vanzare=' + TRANSFORM(Val1([select nvl(max(id_vanzare),0) as v from vanzari])) + ;
|
||||
' count_vanzari=' + TRANSFORM(Val1([select count(*) as v from vanzari])) + ;
|
||||
' max_numar_act_SSS=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where serie_act = 'SSS'])) + ;
|
||||
' max_numar_act_serie360=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where nvl(serie_act,'@') = (select nvl(serie_act,'@') from vanzari where id_vanzare = 360)])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcEticheta + ' CASCADA 360: vanzari.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 360])) + ;
|
||||
' id_fact=' + TRANSFORM(lnIdFact) + ;
|
||||
' vanzari_detalii_vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = 360 and sters = 0])) + ;
|
||||
' documente.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from documente where id_doc = ] + TRANSFORM(lnIdFact))) + ;
|
||||
' act_vii=' + TRANSFORM(Val1([select count(*) as v from act where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
' ctr_rate_facturi_vii=' + TRANSFORM(Val1([select count(*) as v from ctr_rate_facturi where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
||||
CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* LogCursoareCumulativ: la BatchMode=.T., un singur SQLExec pe un statement cu mai multe result
|
||||
* set-uri le materializeaza direct in tcCursor, tcCursor1, tcCursor2, ... (fara SQLMoreResults).
|
||||
* Numara coloanele PE FIECARE si intoarce totalul cumulat - ipoteza de testat e ca VFP insumeaza
|
||||
* coloanele tuturor cursoarelor batch-ului, nu doar pe ale celui mai lat.
|
||||
*==============================================================================================
|
||||
FUNCTION LogCursoareCumulativ
|
||||
LPARAMETERS tcCursor, tcMoment
|
||||
LOCAL lnJ, lcN, laF[1], lnF, lnTotalCampuri
|
||||
lnTotalCampuri = 0
|
||||
FOR lnJ = 0 TO 8
|
||||
lcN = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
||||
IF USED(lcN)
|
||||
lnF = AFIELDS(laF, lcN)
|
||||
lnTotalCampuri = lnTotalCampuri + lnF
|
||||
STRTOFILE(' [' + tcMoment + '] cursor ' + lcN + ': ' + TRANSFORM(lnF) + ' coloane, ' + ;
|
||||
TRANSFORM(RECCOUNT(lcN)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
STRTOFILE(' [' + tcMoment + '] TOTAL CUMULAT coloane (toate sub-cursoarele batch-ului) = ' + ;
|
||||
TRANSFORM(lnTotalCampuri) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN lnTotalCampuri
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE bat
|
||||
LPARAMETERS tcPas
|
||||
STRTOFILE('BAT ' + TTOC(DATETIME()) + ' ' + m.tcPas + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet
|
||||
lnRet = -1
|
||||
IF USED('v_val97b')
|
||||
USE IN v_val97b
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_val97b')
|
||||
SELECT v_val97b
|
||||
IF RECCOUNT('v_val97b') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val97b.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val97b
|
||||
ENDIF
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* SpyS13Direct: subclasa a lui oexecutor, identica cu SpyS13 (probe_s13_toomanycolumns.prg) pentru
|
||||
* toate statementele - DODEFAULT, acelasi PCOUNT. Diferenta e DOAR la statement-ul #15
|
||||
* (continut = 'scrie_factura2'): aici NU devia prin diagnostice (D1-D7) si NU schimba BatchMode -
|
||||
* face SQLExec() direct, cu BatchMode ramas asa cum e (implicit .T.), si prinde exceptia integral.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS SpyS13Direct AS oexecutor
|
||||
nIdx = 0
|
||||
lInterceptat15 = .F.
|
||||
|
||||
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
||||
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc, lnR, laE[1], lnJ, lnTotalCol
|
||||
THIS.nIdx = THIS.nIdx + 1
|
||||
lnI = THIS.nIdx
|
||||
lnPc = PCOUNT()
|
||||
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
||||
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
||||
|
||||
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
||||
' BatchMode=' + TRANSFORM(SQLGetProp(THIS.nHandle, 'BatchMode')) + CHR(13) + CHR(10) + ;
|
||||
' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF 'scrie_factura2' $ lcS
|
||||
THIS.lInterceptat15 = .T.
|
||||
STRTOFILE(' *** statement #15: SQLExec DIRECT, fara D1-D7, BatchMode neschimbat ***' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED(lcC)
|
||||
USE IN (lcC)
|
||||
ENDIF
|
||||
TRY
|
||||
lnR = SQLExec(THIS.nHandle, m.tcSql, m.tcCursor)
|
||||
STRTOFILE(' SQLExec ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnR < 0
|
||||
STRTOFILE(' ret<0 FARA exceptie VFP - eroare SQL normala, nu 1872.' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF AERROR(laE) > 0
|
||||
FOR lnJ = 1 TO ALEN(laE, 2)
|
||||
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDFOR
|
||||
ENDIF
|
||||
ENDIF
|
||||
lnTotalCol = LogCursoareCumulativ(lcC, 'dupa SQLExec #15 direct')
|
||||
STRTOFILE(' NU s-a reprodus 1872 - statement #15 a reusit direct (fara eroare 1872).' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' S-A REPRODUS: EXCEPTIE la statement #15 direct: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
||||
' Message=[' + TRANSFORM(loEx.Message) + '] Procedure=' + TRANSFORM(loEx.Procedure) + ;
|
||||
' LineNo=' + TRANSFORM(loEx.Lineno) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF AERROR(laE) > 0
|
||||
FOR lnJ = 1 TO ALEN(laE, 2)
|
||||
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDFOR
|
||||
ENDIF
|
||||
ENDTRY
|
||||
THIS.cEroare = 'SpyS13Direct: statement #15 masurat direct'
|
||||
RETURN -1
|
||||
ENDIF
|
||||
|
||||
lnRet = -1
|
||||
TRY
|
||||
DO CASE
|
||||
CASE lnPc <= 1
|
||||
lnRet = DODEFAULT(m.tcSql)
|
||||
CASE lnPc = 2
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
||||
CASE lnPc = 3
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
||||
CASE lnPc = 4
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
||||
CASE lnPc = 5
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
||||
CASE lnPc = 6
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
||||
CASE lnPc = 7
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
||||
OTHERWISE
|
||||
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
||||
ENDCASE
|
||||
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
CATCH TO loEx
|
||||
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
||||
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lnRet = -1
|
||||
THIS.cEroare = 'SpyS13Direct: ' + TRANSFORM(loEx.Message)
|
||||
ENDTRY
|
||||
|
||||
RETURN lnRet
|
||||
ENDPROC
|
||||
|
||||
FUNCTION oPrelucrareEroare
|
||||
RETURN 'SpyS13Direct: ' + TRANSFORM(THIS.cEroare)
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
123
utile/Teste/editare_factura/probe_s8p8_candidati.prg
Normal file
123
utile/Teste/editare_factura/probe_s8p8_candidati.prg
Normal file
@@ -0,0 +1,123 @@
|
||||
* probe_s8p8_candidati.prg
|
||||
* READ-ONLY. Cauta in MARIUSM_AUTO candidati pentru test_s8_editare_incarcare.prg (pasul 8):
|
||||
* A) document FARA delegat (id_delegat null/0), tip intre 1 si 4, luna curenta (gnAn/gnLuna)
|
||||
* B) document de tip AVIZ SUBUNITATI (23) sau AVIZ RETUR SUBUNITATI (41) - singurele doua tipuri
|
||||
* pe care Ct_clb_politici_preturi ramane prezent la editare (verificat pe cod, ofacturare.vc2
|
||||
* ~21580-21660), luna curenta
|
||||
* Foloseste fact_vfacturi (acelasi view ca IncarcaAntetFacturaEditare), an/luna derivate din data_act.
|
||||
* Nu scrie nimic - doar SELECT.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s8p8_candidati_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO ErrH WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('gnAn/gnLuna=' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lnSucces
|
||||
|
||||
*!* --- A: document fara delegat, tip 1-4, luna curenta, nesters, ne-eproforma ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, nvl(id_delegat,0) id_delegat, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip between 1 and 4 and sters=0 and nvl(eproforma,0)=0 and nvl(id_delegat,0)=0] + ;
|
||||
[ and extract(year from data_act)*12+extract(month from data_act) = ] + TRANSFORM(gnAn*12+gnLuna) + ;
|
||||
[ order by id_vanzare desc], 'v_faradeleg')
|
||||
STRTOFILE('A) fara delegat: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_faradeleg'),RECCOUNT('v_faradeleg'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_faradeleg')
|
||||
SELECT v_faradeleg
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' sters=' + TRANSFORM(sters) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_faradeleg
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- B: aviz subunitati (23) / retur subunitati (41), luna curenta, nesters, ne-eproforma ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, nvl(id_delegat,0) id_delegat, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip in (23,41) and sters=0 and nvl(eproforma,0)=0] + ;
|
||||
[ and extract(year from data_act)*12+extract(month from data_act) = ] + TRANSFORM(gnAn*12+gnLuna) + ;
|
||||
[ order by id_vanzare desc], 'v_aviz')
|
||||
STRTOFILE('B) aviz 23/41 luna curenta: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_aviz'),RECCOUNT('v_aviz'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_aviz')
|
||||
SELECT v_aviz
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_aviz
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- B2: acelasi, fara restrictia de luna, ca sa vedem daca exista DELOC in schema ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip in (23,41) and sters=0 and nvl(eproforma,0)=0 order by id_vanzare desc], 'v_aviz_all')
|
||||
STRTOFILE('B2) aviz 23/41 ORICE luna: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_aviz_all'),RECCOUNT('v_aviz_all'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_aviz_all')
|
||||
SELECT v_aviz_all
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_aviz_all
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- B3: orice tip de aviz posibil (21,22,23,24,25,26,28,30,41,42,47), orice luna - ca sa stim daca
|
||||
*!* exista MACAR ceva aviz in schema, chiar daca nu pe 23/41 ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip in (21,22,23,24,25,26,28,30,41,42,47) and sters=0 and nvl(eproforma,0)=0 order by id_vanzare desc], 'v_aviz_larg')
|
||||
STRTOFILE('B3) orice tip aviz, orice luna: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_aviz_larg'),RECCOUNT('v_aviz_larg'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_aviz_larg')
|
||||
SELECT v_aviz_larg
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_aviz_larg
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- C: sanitate - documentele 1113/1055/1048/1130/1071/1072 folosite deja, ce data au ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, data_act from fact_vfacturi where id_vanzare in (1113,1055,1048,1130,1071,1072) order by id_vanzare], 'v_ref')
|
||||
STRTOFILE('C) documente existente in suita (referinta data_act): lnSucces=' + TRANSFORM(lnSucces) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_ref')
|
||||
SELECT v_ref
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_ref
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* --- D: fara delegat, ORICE tip valid (exclus 44,45,46,51 - garda do_editare_unificata), luna curenta ---
|
||||
lnSucces = goExecutor.oExecute(;
|
||||
[select id_vanzare, tip, nvl(id_delegat,0) id_delegat, sters, eproforma, data_act from fact_vfacturi] + ;
|
||||
[ where tip not in (44,45,46,51) and sters=0 and nvl(eproforma,0)=0 and nvl(id_delegat,0)=0] + ;
|
||||
[ and extract(year from data_act)*12+extract(month from data_act) = ] + TRANSFORM(gnAn*12+gnLuna) + ;
|
||||
[ order by id_vanzare desc], 'v_faradeleg2')
|
||||
STRTOFILE('D) fara delegat, orice tip valid, luna curenta: lnSucces=' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_faradeleg2'),RECCOUNT('v_faradeleg2'),-1)) + ' eroare=' + goExecutor.cEroare + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
IF USED('v_faradeleg2')
|
||||
SELECT v_faradeleg2
|
||||
SCAN
|
||||
STRTOFILE(' id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' data_act=' + TTOC(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_faradeleg2
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE ErrH
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
82
utile/Teste/editare_factura/probe_s8p8_garzi.prg
Normal file
82
utile/Teste/editare_factura/probe_s8p8_garzi.prg
Normal file
@@ -0,0 +1,82 @@
|
||||
* probe_s8p8_garzi.prg
|
||||
* READ-ONLY. Verifica, pentru candidatii gasiti de probe_s8p8_candidati.prg, garzile REALE ale
|
||||
* do_editare_unificata (ofacturare_comun.vc2:3890+), enumerate in docs\raport_s8_driver_determinist.md
|
||||
* X3: nesters, ne-eproforma, tip valid (not in 44,45,46,51), luna documentului = luna curenta
|
||||
* (gnAn/gnLuna), ReferinteDocumenteNota, EsteInEFactura, DocumentAreUrmasi, IncarcaAntetFacturaEditare.
|
||||
* Nu scrie in Oracle - doar SELECT + apeluri read-only la functiile de garda.
|
||||
* Candidati verificati: 1047 (fara delegat, tip=-12), 953 (aviz tip=23, mai 2022 - istoric).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s8p8_garzi_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO ErrH WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
STRTOFILE('gnAn/gnLuna=' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO VerificaGarzi WITH 1047, 'fara delegat, tip=-12 DEVIZE AUTO'
|
||||
DO VerificaGarzi WITH 953, 'aviz tip=23, istoric mai 2022'
|
||||
DO VerificaGarzi WITH 1110, 'aviz tip=22, august 2026 (Ct_clb_politici_preturi scos oricum)'
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE VerificaGarzi
|
||||
LPARAMETERS tnIdVanzare, tcEticheta
|
||||
LOCAL lnSucces, lnSters, llEProforma, lnTipDoc, pnAn, pnLuna, lnCod, lnIdFact
|
||||
STRTOFILE(CHR(13)+CHR(10) + '=== ' + TRANSFORM(tnIdVanzare) + ' [' + tcEticheta + '] ===' + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
IF USED('crsGarzi')
|
||||
USE IN crsGarzi
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute('select id_vanzare,cod,data_act,sters,id_fact,eproforma,tip from fact_vfacturi where id_vanzare=' + TRANSFORM(m.tnIdVanzare), 'crsGarzi')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces < 0 OR !USED('crsGarzi') OR RECCOUNT('crsGarzi') <> 1
|
||||
STRTOFILE(' NU S-A GASIT documentul (lnSucces=' + TRANSFORM(lnSucces) + ')' + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT crsGarzi
|
||||
lnCod = cod
|
||||
pnAn = YEAR(data_act)
|
||||
pnLuna = MONTH(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
USE IN crsGarzi
|
||||
|
||||
STRTOFILE(' sters=' + TRANSFORM(lnSters) + ' eproforma=' + TRANSFORM(llEProforma) + ' tip=' + TRANSFORM(lnTipDoc) + ' an/luna=' + TRANSFORM(pnAn) + '/' + TRANSFORM(pnLuna) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate2 nesters: ' + TRANSFORM(lnSters = 0) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate5 ne-eproforma: ' + TRANSFORM(!llEProforma) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate6 tip valid (not in 44,45,46,51): ' + TRANSFORM(!INLIST(lnTipDoc,44,45,46,51)) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' gate7 luna curenta (' + TRANSFORM(pnAn*12+pnLuna) + '=' + TRANSFORM(gnAn*12+gnLuna) + '): ' + TRANSFORM((pnAn*12+pnLuna) == (gnAn*12+gnLuna)) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llRef, llEFact, llUrm
|
||||
llRef = ReferinteDocumenteNota(pnAn, pnLuna, lnCod)
|
||||
STRTOFILE(' gate8 fara referinte (!ReferinteDocumenteNota): ' + TRANSFORM(!llRef) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
llEFact = EsteInEFactura(lnIdFact)
|
||||
STRTOFILE(' gate9 nu e in eFactura: ' + TRANSFORM(!llEFact) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
llUrm = DocumentAreUrmasi(m.tnIdVanzare)
|
||||
STRTOFILE(' gate10 fara urmasi: ' + TRANSFORM(!llUrm) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL poDateT, lnDiscR, lnDiscV
|
||||
poDateT = IncarcaAntetFacturaEditare(m.tnIdVanzare, @lnDiscR, @lnDiscV)
|
||||
STRTOFILE(' gate11 IncarcaAntetFacturaEditare reuseste: ' + TRANSFORM(VARTYPE(poDateT) == 'O') + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL llToateTrec
|
||||
llToateTrec = (lnSters=0) AND !llEProforma AND !INLIST(lnTipDoc,44,45,46,51) AND ((pnAn*12+pnLuna)==(gnAn*12+gnLuna)) ;
|
||||
AND !llRef AND !llEFact AND !llUrm AND (VARTYPE(poDateT) == 'O')
|
||||
STRTOFILE(' ==> TOATE GARZILE TREC (ar trebui sa se deschida): ' + TRANSFORM(llToateTrec) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ErrH
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
33
utile/Teste/editare_factura/probe_s9_4_coldoc.prg
Normal file
33
utile/Teste/editare_factura/probe_s9_4_coldoc.prg
Normal file
@@ -0,0 +1,33 @@
|
||||
* probe_s9_4_coldoc.prg - READ-ONLY: coloanele tabelei DOCUMENTE.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_coldoc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lnOk, lcL, lnI
|
||||
IF goExecutor.oExecuta([select column_name, data_type from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'DOCUMENTE' order by column_id], 'v_c')
|
||||
SELECT v_c
|
||||
STRTOFILE('DOCUMENTE are ' + TRANSFORM(RECCOUNT('v_c')) + ' coloane:' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
lcL = ''
|
||||
SCAN
|
||||
lcL = lcL + ALLTRIM(column_name) + '(' + ALLTRIM(data_type) + ') '
|
||||
ENDSCAN
|
||||
STRTOFILE(lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN v_c
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
43
utile/Teste/editare_factura/probe_s9_4_coloane.prg
Normal file
43
utile/Teste/editare_factura/probe_s9_4_coloane.prg
Normal file
@@ -0,0 +1,43 @@
|
||||
* probe_s9_4_coloane.prg - READ-ONLY: coloanele tabelelor pe care le interogheaza test_s9_4.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_coloane_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Col WITH 'RUL'
|
||||
DO Col WITH 'VANZARI_DETALII'
|
||||
DO Col WITH 'VANZARI_CORESP'
|
||||
DO Col WITH 'VANZARI'
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Col
|
||||
LPARAMETERS tcTabela
|
||||
LOCAL lcL
|
||||
IF USED('v_c')
|
||||
USE IN v_c
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select column_name from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = '] + tcTabela + [' order by column_id], 'v_c')
|
||||
SELECT v_c
|
||||
lcL = ''
|
||||
SCAN
|
||||
lcL = lcL + ALLTRIM(column_name) + ' '
|
||||
ENDSCAN
|
||||
STRTOFILE('=== ' + tcTabela + ' (' + TRANSFORM(RECCOUNT('v_c')) + '): ' + lcL + CHR(13) + CHR(10) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
USE IN v_c
|
||||
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
|
||||
66
utile/Teste/editare_factura/probe_s9_4_documente.prg
Normal file
66
utile/Teste/editare_factura/probe_s9_4_documente.prg
Normal file
@@ -0,0 +1,66 @@
|
||||
* probe_s9_4_documente.prg - READ-ONLY: de ce atarna "select count(*) from documente where id_fact = ?"
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_documente_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE conectare' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* sesiuni blocante inainte de orice altceva
|
||||
DO Lista WITH 'sesiuni care blocheaza', ;
|
||||
[select s.sid, s.status, s.osuser, s.machine, s.last_call_et, s.blocking_session, s.event ] + ;
|
||||
[from v$session s where s.username = 'MARIUSM_AUTO' order by s.sid]
|
||||
|
||||
DO Lista WITH 'lacate pe obiecte', ;
|
||||
[select l.session_id, o.object_name, l.locked_mode from v$locked_object l, all_objects o ] + ;
|
||||
[where l.object_id = o.object_id]
|
||||
|
||||
DO Lista WITH 'cate randuri are DOCUMENTE (cu timeout implicit)', [select count(*) as nr from documente]
|
||||
|
||||
DO Lista WITH 'indecsi pe DOCUMENTE', ;
|
||||
[select index_name, column_name, column_position from all_ind_columns ] + ;
|
||||
[where table_name = 'DOCUMENTE' and table_owner = 'MARIUSM_AUTO' order by index_name, column_position]
|
||||
|
||||
DO Lista WITH 'DOCUMENTE - ce fel de obiect e', ;
|
||||
[select owner, object_type from all_objects where object_name = 'DOCUMENTE']
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL, ltT
|
||||
ltT = DATETIME()
|
||||
STRTOFILE('--> pornesc: ' + tcTitlu + ' ' + TTOC(ltT) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_dg')
|
||||
USE IN v_dg
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_dg')
|
||||
IF !lnOk
|
||||
STRTOFILE(' EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_dg
|
||||
STRTOFILE(' ' + TRANSFORM(RECCOUNT('v_dg')) + ' randuri in ' + ;
|
||||
TRANSFORM(DATETIME() - ltT) + ' sec' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 15
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_dg')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_dg')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_dg')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_dg
|
||||
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
|
||||
62
utile/Teste/editare_factura/probe_s9_4_fdoc.prg
Normal file
62
utile/Teste/editare_factura/probe_s9_4_fdoc.prg
Normal file
@@ -0,0 +1,62 @@
|
||||
* probe_s9_4_fdoc.prg - READ-ONLY: id_fdoc e uniform pe randurile vact_tot ale unui document?
|
||||
* Extractia din StergeDocumentFacturare ia primul rand (GO top, order by id_act), nu max().
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_fdoc_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
*!* randurile documentului vechi 1071 (cod 1141096), in ordinea pe care o vede actactan
|
||||
DO Lista WITH 'vact_tot cod 1141096 (doc vechi 1071), order by id_act - primul rand e cel citit', ;
|
||||
[select id_act, id_fdoc, id_set, dataireg from ] + gcs + [.vact_tot ] + ;
|
||||
[where an = 2026 and luna = 8 and cod = 1141096 order by id_act]
|
||||
|
||||
DO Lista WITH 'vact_tot pentru documentul nou 1138', ;
|
||||
[select a.id_act, a.id_fdoc, a.dataireg from ] + gcs + [.vact_tot a, vanzari v ] + ;
|
||||
[where v.id_vanzare = 1138 and a.cod = v.cod and a.sters = 0 order by a.id_act]
|
||||
|
||||
*!* cat de des e id_fdoc neuniform in interiorul unui document
|
||||
DO Lista WITH 'documente cu id_fdoc NEUNIFORM pe perioada activa', ;
|
||||
[select count(*) as documente_neuniforme from (] + ;
|
||||
[select cod from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8 ] + ;
|
||||
[group by cod having count(distinct id_fdoc) > 1)]
|
||||
|
||||
DO Lista WITH 'total documente distincte in vact_tot pe perioada activa', ;
|
||||
[select count(distinct cod) as total from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_q')
|
||||
USE IN v_q
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_q')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_q
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_q')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 20
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_q')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_q')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_q')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_q
|
||||
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
|
||||
70
utile/Teste/editare_factura/probe_s9_4_fidelitate.prg
Normal file
70
utile/Teste/editare_factura/probe_s9_4_fidelitate.prg
Normal file
@@ -0,0 +1,70 @@
|
||||
* probe_s9_4_fidelitate.prg - READ-ONLY: ID_FDOC si DATAIREG sunt ajungibile din cursorul pe care
|
||||
* piciorul de stergere il citeste deja (actactan = select * from vact_tot)? Si ce valori au?
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_fidelitate_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* 1. coloanele view-ului din care se umple actactan
|
||||
DO Lista WITH 'coloane VACT_TOT care ne intereseaza', ;
|
||||
[select column_name, data_type from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'VACT_TOT' and column_name in ('ID_FDOC','DATAIREG','ID_SET','ID_FACT','ID_FACTD','COD','AN','LUNA') ] + ;
|
||||
[order by column_name]
|
||||
|
||||
*!* 2. exista ID_FDOC pe VANZARI? (alta sursa posibila pentru valoarea documentului vechi)
|
||||
DO Lista WITH 'cate randuri vact_tot au id_fdoc nenul, pe perioada activa', ;
|
||||
[select count(*) as total, sum(case when id_fdoc is null then 1 else 0 end) as nule, ] + ;
|
||||
[sum(case when id_fdoc is not null then 1 else 0 end) as nenule ] + ;
|
||||
[from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8]
|
||||
|
||||
*!* 3. valorile reale pentru documentele de test (exact ce ar citi actactan)
|
||||
DO Lista WITH 'vact_tot pentru codurile de test (1141095=doc 1070, 1140912=doc 1056)', ;
|
||||
[select cod, id_set, id_fdoc, id_fact, dataireg from ] + gcs + [.vact_tot ] + ;
|
||||
[where sters = 0 and an = 2026 and luna = 8 and cod in (1141095, 1140912) order by cod, id_act]
|
||||
|
||||
*!* 4. cate randuri din vact_tot au dataireg diferita de data_act a documentului
|
||||
DO Lista WITH 'dataireg vs data_act pe perioada activa (cate difera)', ;
|
||||
[select count(*) as total, ] + ;
|
||||
[sum(case when trunc(a.dataireg) = trunc(v.data_act) then 1 else 0 end) as egale, ] + ;
|
||||
[sum(case when trunc(a.dataireg) <> trunc(v.data_act) then 1 else 0 end) as diferite ] + ;
|
||||
[from ] + gcs + [.vact_tot a, vanzari v ] + ;
|
||||
[where a.sters = 0 and a.an = 2026 and a.luna = 8 and v.sters = 0 and v.cod = a.cod]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_f')
|
||||
USE IN v_f
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_f')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_f
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_f')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 20
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_f')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_f')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_f')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_f
|
||||
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
|
||||
67
utile/Teste/editare_factura/probe_s9_4_hang.prg
Normal file
67
utile/Teste/editare_factura/probe_s9_4_hang.prg
Normal file
@@ -0,0 +1,67 @@
|
||||
* probe_s9_4_hang.prg - READ-ONLY: reproduce secventa INAINTE din Rularea2 pe documentul 1056.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_hang_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE conectare' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
|
||||
LOCAL lnIdV, lnIdFact, lcSerie, lnNumar, lnDoc, lnOk
|
||||
lnIdV = 1056
|
||||
|
||||
DO U WITH 'antet prin oExecuta'
|
||||
IF goExecutor.oExecuta([select id_fact, serie_act, numar_act from vanzari where id_vanzare = ] + TRANSFORM(lnIdV), 'v_a')
|
||||
SELECT v_a
|
||||
GO TOP
|
||||
lnIdFact = NVL(id_fact, 0)
|
||||
lcSerie = ALLTRIM(NVL(serie_act, ''))
|
||||
lnNumar = NVL(numar_act, 0)
|
||||
USE IN v_a
|
||||
ENDIF
|
||||
DO U WITH 'id_fact=[' + TRANSFORM(lnIdFact) + '] tip=' + VARTYPE(lnIdFact) + ;
|
||||
' serie=[' + TRANSFORM(lcSerie) + '] numar=' + TRANSFORM(lnNumar)
|
||||
|
||||
DO U WITH 'SQL construit: ' + [select count(*) as nr from documente where id_fact = ] + TRANSFORM(lnIdFact)
|
||||
|
||||
DO U WITH 'varianta A: oExecuta pe documente'
|
||||
lnOk = goExecutor.oExecuta([select count(*) as nr from documente where id_fact = ] + TRANSFORM(lnIdFact), 'v_d')
|
||||
DO U WITH ' oExecuta a intors ' + TRANSFORM(lnOk) + ' eroare=[' + TRANSFORM(goExecutor.cEroare) + ']'
|
||||
IF USED('v_d')
|
||||
SELECT v_d
|
||||
GO TOP
|
||||
DO U WITH ' nr = ' + TRANSFORM(nr)
|
||||
USE IN v_d
|
||||
ENDIF
|
||||
|
||||
DO U WITH 'varianta B: oSelecteaza2Value pe documente (suspectul)'
|
||||
lnDoc = -1
|
||||
goExecutor.oSelecteaza2Value([select count(*) as nr from documente where id_fact = ] + TRANSFORM(lnIdFact), @lnDoc)
|
||||
DO U WITH ' lnDoc = ' + TRANSFORM(lnDoc)
|
||||
|
||||
DO U WITH 'ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']'
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE U
|
||||
LPARAMETERS tcT
|
||||
STRTOFILE(TTOC(DATETIME()) + ' ' + m.tcT + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
59
utile/Teste/editare_factura/probe_s9_4_nota.prg
Normal file
59
utile/Teste/editare_factura/probe_s9_4_nota.prg
Normal file
@@ -0,0 +1,59 @@
|
||||
* probe_s9_4_nota.prg - READ-ONLY: s-a creat o nota contabila NOUA la regenerarea doc 1070 -> 1137?
|
||||
* ID_SET e comun pe perioada, deci identitatea notei e ID_DOC (PK-ul din DOCUMENTE).
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_nota_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
DO Lista WITH 'DOCUMENTE pentru SSS/594 (nota veche + nota noua)', ;
|
||||
[select id_doc, id_set, sters, nract, serie_act, dataact, dataireg from documente ] + ;
|
||||
[where nract = 594 and serie_act = 'SSS' order by id_doc]
|
||||
|
||||
DO Lista WITH 'cate valori distincte de ID_SET exista pe perioada activa', ;
|
||||
[select count(distinct id_set) as seturi, count(*) as randuri from ] + gcs + [.vact_tot ] + ;
|
||||
[where sters = 0 and an = 2026 and luna = 8]
|
||||
|
||||
DO Lista WITH 'documentul nou 1137 - id_fdoc si dataireg reale scrise', ;
|
||||
[select a.cod, a.id_fdoc, a.dataireg, v.data_act from ] + gcs + [.vact_tot a, vanzari v ] + ;
|
||||
[where v.id_vanzare = 1137 and a.cod = v.cod and a.sters = 0]
|
||||
|
||||
DO Lista WITH 'documentul vechi 1070 - stare finala', ;
|
||||
[select id_vanzare, cod, sters, id_fact from vanzari where id_vanzare in (1070, 1137) order by id_vanzare]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_n')
|
||||
USE IN v_n
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_n')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_n
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_n')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN WHILE RECNO() <= 20
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_n')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_n')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_n')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_n
|
||||
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
|
||||
87
utile/Teste/editare_factura/probe_s9_4_nuluri.prg
Normal file
87
utile/Teste/editare_factura/probe_s9_4_nuluri.prg
Normal file
@@ -0,0 +1,87 @@
|
||||
* probe_s9_4_nuluri.prg - READ-ONLY: ce proprietati ale lui poDate raman NULL pe calea de editare
|
||||
* si care dintre ele pica in expresia de construire a SQL-ului din do_scrie_articole.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog, poDate
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_nuluri_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
LOCAL lnR, lnV
|
||||
poDate = IncarcaAntetFacturaEditare(1070, @lnR, @lnV)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
STRTOFILE('nu s-a incarcat antetul' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
*!* exact proprietatile folosite in expresia SQL din do_scrie_articole
|
||||
DO P WITH 'dataireg'
|
||||
DO P WITH 'id_fdoc'
|
||||
DO P WITH 'dataact'
|
||||
DO P WITH 'datascad'
|
||||
DO P WITH 'serie_act'
|
||||
DO P WITH 'nract'
|
||||
DO P WITH 'id_client'
|
||||
DO P WITH 'id_lucrare'
|
||||
DO P WITH 'id_sectie'
|
||||
DO P WITH 'id_venchelt'
|
||||
DO P WITH 'id_responsabil'
|
||||
DO P WITH 'explicatia4'
|
||||
DO P WITH 'listaid'
|
||||
DO P WITH 'descriere'
|
||||
DO P WITH 'tip'
|
||||
DO P WITH 'id_set'
|
||||
DO P WITH 'zi_curs'
|
||||
DO P WITH 'id_valuta'
|
||||
DO P WITH 'in_valuta'
|
||||
DO P WITH 'tva_incasare'
|
||||
|
||||
*!* care apel concret pica: Alltrim(Str(x)) pe fiecare proprietate numerica suspecta
|
||||
DO T WITH 'id_fdoc'
|
||||
DO T WITH 'id_valuta'
|
||||
DO T WITH 'id_lucrare'
|
||||
DO T WITH 'id_sectie'
|
||||
DO T WITH 'id_set'
|
||||
DO T WITH 'tva_incasare'
|
||||
DO T WITH 'in_valuta'
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE P
|
||||
LPARAMETERS tcProp
|
||||
LOCAL lcT, lcV
|
||||
lcT = TYPE('poDate.' + tcProp)
|
||||
lcV = '?'
|
||||
IF ISNULL(EVALUATE('poDate.' + tcProp))
|
||||
lcV = '.NULL.'
|
||||
ELSE
|
||||
lcV = TRANSFORM(EVALUATE('poDate.' + tcProp))
|
||||
ENDIF
|
||||
STRTOFILE(PADR(tcProp, 18) + ' TYPE=' + lcT + ' valoare=' + lcV + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE T
|
||||
LPARAMETERS tcProp
|
||||
LOCAL lcRez
|
||||
lcRez = '<<< A PICAT >>>'
|
||||
TRY
|
||||
lcRez = '[' + Alltrim(Str(EVALUATE('poDate.' + tcProp))) + ']'
|
||||
CATCH TO loE
|
||||
lcRez = '<<< EROARE ' + TRANSFORM(loE.ErrorNo) + ': ' + loE.Message + ' >>>'
|
||||
ENDTRY
|
||||
STRTOFILE('Alltrim(Str(poDate.' + PADR(tcProp, 16) + ')) -> ' + lcRez + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
54
utile/Teste/editare_factura/probe_s9_4_parameters.prg
Normal file
54
utile/Teste/editare_factura/probe_s9_4_parameters.prg
Normal file
@@ -0,0 +1,54 @@
|
||||
* probe_s9_4_parameters.prg
|
||||
* READ-ONLY, fara Oracle: PARAMETERS() vs PCOUNT() vs VARTYPE() intr-o functie cu parametri
|
||||
* optionali, dupa ce s-a executat un apel imbricat. Decide garda din hunk C (S9-4).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_parameters_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
LOCAL lnOut, llR
|
||||
lnOut = 0
|
||||
|
||||
*!* cazul 1: apelant care TRANSMITE al 6-lea parametru prin referinta
|
||||
llR = Tinta(1, 2, 3, 4, 5, @lnOut)
|
||||
STRTOFILE('CU al 6-lea param: lnOut dupa apel = ' + TRANSFORM(lnOut) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* cazul 2: apelant care NU il transmite
|
||||
llR = Tinta(1, 2, 3, 4, 5)
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
FUNCTION Tinta
|
||||
LPARAMETERS t1, t2, t3, t4, t5, t6
|
||||
LOCAL lnDummy
|
||||
|
||||
STRTOFILE('--- apel Tinta ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(' INAINTE de apel imbricat: PARAMETERS()=' + TRANSFORM(PARAMETERS()) + ;
|
||||
' PCOUNT()=' + TRANSFORM(PCOUNT()) + ' VARTYPE(m.t6)=' + VARTYPE(m.t6) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* apel imbricat cu 2 parametri - exact situatia din StergeDocumentFacturare (goExecutor, OSCRIE_IN_FISIERE)
|
||||
lnDummy = Imbricat(10, 20)
|
||||
|
||||
STRTOFILE(' DUPA apel imbricat cu 2 param: PARAMETERS()=' + TRANSFORM(PARAMETERS()) + ;
|
||||
' PCOUNT()=' + TRANSFORM(PCOUNT()) + ' VARTYPE(m.t6)=' + VARTYPE(m.t6) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
IF VARTYPE(m.t6) = 'N'
|
||||
t6 = 4242
|
||||
STRTOFILE(' garda VARTYPE: a scris in t6' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' garda VARTYPE: NU a scris in t6' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
|
||||
FUNCTION Imbricat
|
||||
LPARAMETERS a, b
|
||||
RETURN a + b
|
||||
ENDFUNC
|
||||
141
utile/Teste/editare_factura/probe_s9_4_recensamant.prg
Normal file
141
utile/Teste/editare_factura/probe_s9_4_recensamant.prg
Normal file
@@ -0,0 +1,141 @@
|
||||
* probe_s9_4_recensamant.prg
|
||||
* READ-ONLY: recensamant de candidati eligibili pe paliere + disponibilitatea DATA_IREG.
|
||||
* Nu scrie nimic in Oracle.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_recensamant_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
DO Ruleaza
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE Ruleaza
|
||||
LOCAL lcExclusi, lcPer, lcSql, lnOk
|
||||
lcExclusi = [1047,1048,1055,1113,1130]
|
||||
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + ;
|
||||
' gcs=' + gcs + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lcPer = [ and extract(year from v.data_act) = ] + TRANSFORM(gnAn) + ;
|
||||
[ and extract(month from v.data_act) = ] + TRANSFORM(gnLuna)
|
||||
|
||||
*!* --- palier 3 (cel mai larg): STERS=0 in perioada activa, fara niciun filtru de continut ---
|
||||
DO Listeaza WITH 'P3a toate nesterse in perioada activa', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + [ order by v.id_vanzare]
|
||||
|
||||
DO Listeaza WITH 'P3b + randuri reale in vact_tot', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
DO Listeaza WITH 'P3c + vact_tot SI vrul_tot', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vrul_tot r where r.sters = 0 and r.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and r.luna = ] + TRANSFORM(gnLuna) + [ and r.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
*!* --- paliere 1 si 2: peste P3c / P3b se aplica in VFP filtrul referinte + urmasi ---
|
||||
DO Filtreaza WITH 'PALIER 1 (strict S9-3: vact+vrul, fara referinte/urmasi)', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and v.id_vanzare not in (] + lcExclusi + [)] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) ] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vrul_tot r where r.sters = 0 and r.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and r.luna = ] + TRANSFORM(gnLuna) + [ and r.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
DO Filtreaza WITH 'PALIER 2 (fara cerinta vrul_tot)', ;
|
||||
[select v.id_vanzare, v.cod, v.tip from vanzari v where v.sters = 0] + lcPer + ;
|
||||
[ and v.id_vanzare not in (] + lcExclusi + [)] + ;
|
||||
[ and exists (select 1 from ] + gcs + [.vact_tot a where a.sters = 0 and a.an = ] + TRANSFORM(gnAn) + ;
|
||||
[ and a.luna = ] + TRANSFORM(gnLuna) + [ and a.cod = v.cod) order by v.id_vanzare]
|
||||
|
||||
*!* --- DATA_IREG: exista pe VANZARI / pe view-ul folosit de IncarcaAntetFacturaEditare? ---
|
||||
DO Listeaza WITH 'COLOANE %IREG% in all_tab_columns', ;
|
||||
[select owner, table_name, column_name, data_type from all_tab_columns ] + ;
|
||||
[where column_name like '%IREG%' and table_name in ('VANZARI','FACT_VFACTURI','VACT_TOT') ] + ;
|
||||
[order by owner, table_name, column_name]
|
||||
|
||||
DO Listeaza WITH 'toate coloanele FACT_VFACTURI cu DATA in nume', ;
|
||||
[select owner, table_name, column_name from all_tab_columns ] + ;
|
||||
[where table_name = 'FACT_VFACTURI' and column_name like 'DATA%' order by owner, column_name]
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Listeaza
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcLinie
|
||||
IF USED('v_rec')
|
||||
USE IN v_rec
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_rec')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_rec
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_rec')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
GO TOP
|
||||
SCAN WHILE RECNO() <= 12
|
||||
lcLinie = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_rec')
|
||||
lcLinie = lcLinie + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_rec')))) + ' | '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcLinie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_rec
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Filtreaza
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnNr, lcLista, lnIdV, lnCod, lnTip
|
||||
IF USED('v_rec2')
|
||||
USE IN v_rec2
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_rec2')
|
||||
IF !lnOk
|
||||
STRTOFILE('=== ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
lnNr = 0
|
||||
lcLista = ''
|
||||
SELECT v_rec2
|
||||
SCAN
|
||||
lnIdV = id_vanzare
|
||||
lnCod = cod
|
||||
lnTip = tip
|
||||
IF !ReferinteDocumenteNota(gnAn, gnLuna, lnCod) AND !DocumentAreUrmasi(lnIdV)
|
||||
lnNr = lnNr + 1
|
||||
IF lnNr <= 8
|
||||
lcLista = lcLista + TRANSFORM(lnIdV) + '/' + TRANSFORM(lnCod) + '/tip=' + TRANSFORM(lnTip) + ' '
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
USE IN v_rec2
|
||||
STRTOFILE('=== ' + tcTitlu + ': ' + TRANSFORM(lnNr) + ' eligibili' + CHR(13) + CHR(10) + ;
|
||||
' ' + lcLista + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
51
utile/Teste/editare_factura/probe_s9_4_stare.prg
Normal file
51
utile/Teste/editare_factura/probe_s9_4_stare.prg
Normal file
@@ -0,0 +1,51 @@
|
||||
* probe_s9_4_stare.prg - READ-ONLY: starea documentului 1051 si a eventualelor documente noi.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_4_stare_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE conectare' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
DO Lista WITH 'doc 1051', [select id_vanzare, cod, tip, sters, id_fact, serie_act, numar_act, dataoras from vanzari where id_vanzare = 1051]
|
||||
DO Lista WITH 'orice vanzare cu id_vanzare > 1140 (documente noi)', [select id_vanzare, cod, tip, sters, id_fact, numar_act from vanzari where id_vanzare > 1140 order by id_vanzare]
|
||||
DO Lista WITH 'ultimele 8 vanzari dupa id', [select * from (select id_vanzare, cod, tip, sters, id_fact, numar_act, dataoras from vanzari order by id_vanzare desc) where rownum <= 8]
|
||||
DO Lista WITH 'rul nesters pe cod 1140907', [select count(*) as nr from rul where sters = 0 and an = 2026 and luna = 8 and cod = 1140907]
|
||||
DO Lista WITH 'vact_tot nesters pe cod 1140907', [select count(*) as nr from ] + gcs + [.vact_tot where sters = 0 and an = 2026 and luna = 8 and cod = 1140907]
|
||||
|
||||
STRTOFILE('end' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Lista
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lnOk, lnI, lcL
|
||||
IF USED('v_st')
|
||||
USE IN v_st
|
||||
ENDIF
|
||||
lnOk = goExecutor.oExecuta(tcSql, 'v_st')
|
||||
IF !lnOk
|
||||
STRTOFILE('--- ' + tcTitlu + ': EROARE ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT v_st
|
||||
STRTOFILE('--- ' + tcTitlu + ': ' + TRANSFORM(RECCOUNT('v_st')) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SCAN
|
||||
lcL = ''
|
||||
FOR lnI = 1 TO FCOUNT('v_st')
|
||||
lcL = lcL + ALLTRIM(FIELD(lnI, 'v_st')) + '=' + ALLTRIM(TRANSFORM(EVALUATE(FIELD(lnI, 'v_st')))) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE(' ' + lcL + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_st
|
||||
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
|
||||
78
utile/Teste/editare_factura/probe_s9_5_atasamente.prg
Normal file
78
utile/Teste/editare_factura/probe_s9_5_atasamente.prg
Normal file
@@ -0,0 +1,78 @@
|
||||
* probe_s9_5_atasamente.prg - READ-ONLY: structura ATASAMENTE_VANZARI, sursa view-ului
|
||||
* VATASAMENTE_VANZARI, orice referinta din PL/SQL, si populatia din perioada activa.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_5_atasamente_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
IF EMPTY(lcProcExistent)
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg"
|
||||
ELSE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
ENDIF
|
||||
|
||||
DO Sectiune WITH 'F. constrangeri pe ATASAMENTE_VANZARI', ;
|
||||
[select c.constraint_name || ' ' || c.constraint_type as l ] + ;
|
||||
[from all_constraints c where c.owner = 'MARIUSM_AUTO' and c.table_name = 'ATASAMENTE_VANZARI']
|
||||
|
||||
DO Sectiune WITH 'G. populatia: total randuri / distincte id_vanzare', ;
|
||||
[select 'total=' || count(*) || ' documente=' || count(distinct id_vanzare) as l from MARIUSM_AUTO.atasamente_vanzari]
|
||||
|
||||
DO Sectiune WITH 'H. atasamente pe documentele perioadei active (top 20)', ;
|
||||
[select 'id_vanzare=' || a.id_vanzare || ' nr=' || count(*) as l ] + ;
|
||||
[from MARIUSM_AUTO.atasamente_vanzari a join MARIUSM_AUTO.vanzari v on v.id_vanzare = a.id_vanzare ] + ;
|
||||
[where extract(year from v.data_act) = 2026 and extract(month from v.data_act) = 8 ] + ;
|
||||
[group by a.id_vanzare order by a.id_vanzare]
|
||||
|
||||
DO Sectiune WITH 'I. atasamente pe documentele produse de S9-4 (1137,1138,1139) si sursele lor', ;
|
||||
[select 'id_vanzare=' || id_vanzare || ' nr=' || count(*) as l from MARIUSM_AUTO.atasamente_vanzari ] + ;
|
||||
[where id_vanzare in (1070,1071,1072,1137,1138,1139,1051) group by id_vanzare order by id_vanzare]
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Sectiune
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lcOut, lnN
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + tcTitlu + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_s')
|
||||
USE IN v_s
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_s')
|
||||
SELECT v_s
|
||||
lnN = RECCOUNT('v_s')
|
||||
IF lnN = 0
|
||||
STRTOFILE(' (zero randuri)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
lcOut = ''
|
||||
SCAN
|
||||
lcOut = lcOut + ' ' + ALLTRIM(NVL(v_s.l, '<null>')) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
STRTOFILE(lcOut, gcErrLog, 1)
|
||||
ENDIF
|
||||
USE IN v_s
|
||||
ELSE
|
||||
STRTOFILE(' ESEC interogare: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
73
utile/Teste/editare_factura/probe_s9_5_plsql.prg
Normal file
73
utile/Teste/editare_factura/probe_s9_5_plsql.prg
Normal file
@@ -0,0 +1,73 @@
|
||||
* probe_s9_5_plsql.prg - READ-ONLY: sursa PL/SQL din jurul referintelor la ATASAMENTE_VANZARI.
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_5_plsql_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
DO Sursa WITH 'PACK_CONTAFIN', 8250, 8345
|
||||
DO Sursa WITH 'PACK_FACTURARE', 12800, 12885
|
||||
|
||||
DO Randuri WITH 'populatia ATASAMENTE_VANZARI, pe coloane cheie', ;
|
||||
[select 'id_at_vanz=' || id_at_vanz || ' id_vanzare=' || nvl(to_char(id_vanzare),'NULL') || ] + ;
|
||||
[' cod=' || nvl(to_char(cod),'NULL') || ' tip=' || nvl(to_char(tip),'NULL') || ' sters=' || sters || ] + ;
|
||||
[' lung=' || nvl(to_char(dbms_lob.getlength(document)),'NULL') as l ] + ;
|
||||
[from MARIUSM_AUTO.atasamente_vanzari order by id_at_vanz]
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
PROCEDURE Sursa
|
||||
LPARAMETERS tcNume, tnDe, tnPana
|
||||
LOCAL lcOut
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + tcNume + ' ' + TRANSFORM(tnDe) + '-' + TRANSFORM(tnPana) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_s')
|
||||
USE IN v_s
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select line, rtrim(text) as t from all_source where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and name = '] + tcNume + [' and type = 'PACKAGE BODY' and line between ] + ;
|
||||
TRANSFORM(tnDe) + [ and ] + TRANSFORM(tnPana) + [ order by line], 'v_s')
|
||||
lcOut = ''
|
||||
SELECT v_s
|
||||
SCAN
|
||||
lcOut = lcOut + PADL(TRANSFORM(v_s.line), 6) + ': ' + CHRTRAN(ALLTRIM(NVL(v_s.t, '')), CHR(10) + CHR(13), '') + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
STRTOFILE(lcOut, gcErrLog, 1)
|
||||
USE IN v_s
|
||||
ELSE
|
||||
STRTOFILE(' ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Randuri
|
||||
LPARAMETERS tcTitlu, tcSql
|
||||
LOCAL lcOut
|
||||
STRTOFILE(CHR(13) + CHR(10) + '=== ' + tcTitlu + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_r')
|
||||
USE IN v_r
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_r')
|
||||
lcOut = ''
|
||||
SELECT v_r
|
||||
SCAN
|
||||
lcOut = lcOut + ' ' + ALLTRIM(NVL(v_r.l, '<null>')) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
STRTOFILE(IIF(EMPTY(lcOut), ' (zero randuri)' + CHR(13) + CHR(10), lcOut), gcErrLog, 1)
|
||||
USE IN v_r
|
||||
ELSE
|
||||
STRTOFILE(' ESEC: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
58
utile/Teste/editare_factura/probe_s9_aviz.prg
Normal file
58
utile/Teste/editare_factura/probe_s9_aviz.prg
Normal file
@@ -0,0 +1,58 @@
|
||||
* probe_s9_aviz.prg
|
||||
* Repeta doar cautarea candidatului aviz din probe_s9_candidati.prg, cu diagnostic de eroare Oracle
|
||||
* (coloana gresita suspectata: id_vanzare_sursa in loc de id_vanzare_aviz pe VANZARI_CORESP).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_aviz_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
LOCAL lcSql, lnSucces
|
||||
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod from vanzari v where v.sters=0 and v.tip=4 ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_vanzare in (select id_vanzare_fact from vanzari_coresp where tip=1 and sters=0) ] + ;
|
||||
[and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_aviz')
|
||||
STRTOFILE('aviz(fara luna): ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_aviz'),RECCOUNT('v_cand_aviz'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnSucces < 0
|
||||
STRTOFILE('eroare: ' + goExecutor.oPrelucrareEroare() + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
IF USED('v_cand_aviz')
|
||||
SELECT v_cand_aviz
|
||||
SCAN
|
||||
STRTOFILE(' aviz cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_aviz
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* fara restrictia de luna curenta, doar sa vedem daca exista vreun aviz cu sursa in tot arhivul
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod, v.data_act from vanzari v where v.sters=0 and v.tip=4 ] + ;
|
||||
[and v.eproforma=0 and v.id_vanzare in (select id_vanzare_fact from vanzari_coresp where tip=1 and sters=0) ] + ;
|
||||
[and rownum <= 10 order by v.data_act desc]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_aviz2')
|
||||
STRTOFILE('aviz(orice data): ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_aviz2'),RECCOUNT('v_cand_aviz2'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF lnSucces < 0
|
||||
STRTOFILE('eroare: ' + goExecutor.oPrelucrareEroare() + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
IF USED('v_cand_aviz2')
|
||||
SELECT v_cand_aviz2
|
||||
SCAN
|
||||
STRTOFILE(' aviz cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + ' data_act=' + TRANSFORM(data_act) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_aviz2
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
88
utile/Teste/editare_factura/probe_s9_candidati.prg
Normal file
88
utile/Teste/editare_factura/probe_s9_candidati.prg
Normal file
@@ -0,0 +1,88 @@
|
||||
* probe_s9_candidati.prg
|
||||
* Cauta, read-only, cate un document editabil de fiecare familie pentru testul S9-1/S9-2:
|
||||
* aviz (tip=4, cu avize sursa reale), comanda (tip in 3,21,25,28,42,47, cu id_comanda), contract
|
||||
* (tip in 2,6,26,52, cu id_ctr), ELSE (fara comanda/ctr/aviz sursa). Luna curenta, sters=0,
|
||||
* fara urmasi, fara eproforma, fara efactura.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s9_candidati_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
STRTOFILE('gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lcSql, lnSucces
|
||||
|
||||
*!* aviz cu avize sursa reale (VANZARI_CORESP TIP=1)
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod from vanzari v where v.sters=0 and v.tip=4 ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_vanzare in (select id_vanzare_fact from vanzari_coresp where tip=1 and sters=0) ] + ;
|
||||
[and not exists (select 1 from vanzari_coresp c where c.id_vanzare_sursa=v.id_vanzare and c.sters=0) ] + ;
|
||||
[and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_aviz')
|
||||
STRTOFILE('aviz: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_aviz'),RECCOUNT('v_cand_aviz'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_aviz')
|
||||
SELECT v_cand_aviz
|
||||
SCAN
|
||||
STRTOFILE(' aviz cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_aviz
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* comanda, cu id_comanda populat
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod, v.id_comanda from vanzari v where v.sters=0 and v.tip in (3,21,25,28,42,47) ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_comanda is not null and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_cmd')
|
||||
STRTOFILE('comanda: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_cmd'),RECCOUNT('v_cand_cmd'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_cmd')
|
||||
SELECT v_cand_cmd
|
||||
SCAN
|
||||
STRTOFILE(' comanda cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + ' id_comanda=' + TRANSFORM(id_comanda) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_cmd
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* contract, cu id_ctr populat
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod, v.id_ctr from vanzari v where v.sters=0 and v.tip in (2,6,26,52) ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_ctr is not null and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_ctr')
|
||||
STRTOFILE('contract: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_ctr'),RECCOUNT('v_cand_ctr'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_ctr')
|
||||
SELECT v_cand_ctr
|
||||
SCAN
|
||||
STRTOFILE(' contract cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + ' id_ctr=' + TRANSFORM(id_ctr) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_ctr
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
*!* ELSE: tip fara comanda/ctr, fara aviz sursa (asteptam listaid = '')
|
||||
lcSql = [select v.id_vanzare, v.tip, v.cod from vanzari v where v.sters=0 and v.tip not in (3,21,25,28,42,47,4,2,6,26,52,44,45,46,51) ] + ;
|
||||
[and extract(year from v.data_act)=] + TRANSFORM(gnAn) + [ and extract(month from v.data_act)=] + TRANSFORM(gnLuna) + ;
|
||||
[ and v.eproforma=0 and v.id_comanda is null and v.id_ctr is null and rownum <= 5]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'v_cand_else')
|
||||
STRTOFILE('else: ' + TRANSFORM(lnSucces) + ' reccount=' + TRANSFORM(IIF(USED('v_cand_else'),RECCOUNT('v_cand_else'),-1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
IF USED('v_cand_else')
|
||||
SELECT v_cand_else
|
||||
SCAN
|
||||
STRTOFILE(' else cand: id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' cod=' + TRANSFORM(cod) + CHR(13)+CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN v_cand_else
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
183
utile/Teste/editare_factura/probe_trace_editare.prg
Normal file
183
utile/Teste/editare_factura/probe_trace_editare.prg
Normal file
@@ -0,0 +1,183 @@
|
||||
* probe_trace_editare.prg - trace pas cu pas a do_editare_unificata (replica, read-only in afara de
|
||||
* obiectele in memorie) pe documentele 1055 (PASS) si 1113 (FAIL), ca sa gaseasca unde diverg.
|
||||
* Diagnostic pentru docs\triaj_s8_regresie_28fail.md. Nu scrie in Oracle.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_trace_editare_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
|
||||
PROCEDURE Traseaza(tcDoc, tcMsg)
|
||||
STRTOFILE(tcDoc + ': ' + tcMsg + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
*!* driver minimal: gaseste FRM_FACTURARE_ARTICOLE2 in _SCREEN.Forms si il elibereaza, ca sa nu
|
||||
*!* blocheze la infinit modalul din proba (acelasi tipar ca driverS8p7 din test_s8_pas7_cablare.prg)
|
||||
DEFINE CLASS driverTrace AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
ENDPROC
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
LOCAL lnI, loFrm2
|
||||
TRY
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
STRTOFILE('driverTrace: gasit form, WindowType=' + Transform(loFrm2.WindowType) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcTrace
|
||||
STRTOFILE('driverTrace EROARE ' + Transform(loExcTrace.ErrorNo) + ' ' + loExcTrace.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PUBLIC goDriverTrace
|
||||
goDriverTrace = Createobject('driverTrace')
|
||||
_SCREEN.AddObject('tmrTrace', 'Timer')
|
||||
_SCREEN.tmrTrace.Interval = 150
|
||||
Bindevent(_SCREEN.tmrTrace, 'Timer', goDriverTrace, 'Executa')
|
||||
_SCREEN.tmrTrace.Enabled = .T.
|
||||
|
||||
PROCEDURE VerificaTrace
|
||||
LPARAMETERS tnIdVanzare
|
||||
LOCAL lcDoc, lnSucces, lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcDoc = Transform(tnIdVanzare)
|
||||
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare = ] + lcDoc
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
DO Traseaza WITH lcDoc, 'crsfacturi Reccount=' + Transform(Reccount('crsfacturi'))
|
||||
|
||||
LOCAL lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
|
||||
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare, poDate
|
||||
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzare
|
||||
Select crsfacturi
|
||||
lnIdVanzare = id_vanzare
|
||||
lnCod = cod
|
||||
pnAn = Year(data_act)
|
||||
pnLuna = Month(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
DO Traseaza WITH lcDoc, 'garzi: sters=' + Transform(lnSters) + ' eproforma=' + Transform(llEProforma) + ' tip=' + Transform(lnTipDoc) + ;
|
||||
' luna_ok=' + Transform((pnAn*12+pnLuna)==(gnAn*12+gnLuna)) + ' referinte=' + Transform(ReferinteDocumenteNota(pnAn,pnLuna,lnCod)) + ;
|
||||
' efactura=' + Transform(EsteInEFactura(lnIdFact)) + ' urmasi=' + Transform(DocumentAreUrmasi(lnIdVanzare))
|
||||
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdVanzare, @pnDiscountRon, @pnDiscountValuta)
|
||||
DO Traseaza WITH lcDoc, 'IncarcaAntetFacturaEditare Vartype=' + Vartype(poDate)
|
||||
IF Vartype(poDate) <> 'O'
|
||||
DO Traseaza WITH lcDoc, 'ABANDON: poDate nu e obiect'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO Traseaza WITH lcDoc, 'poDate.tip=' + Transform(poDate.tip) + ' poDate.incasat=' + Transform(poDate.incasat) + ' poDate.lEditare=' + Transform(poDate.lEditare) + ' poDate.ntip_incasare=' + Transform(poDate.ntip_incasare)
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdVanzare)
|
||||
DO Traseaza WITH lcDoc, 'IncarcaLiniiFacturaEditare terminat'
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF Used('jtva_coloane')
|
||||
Use In jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ELSE
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ENDIF
|
||||
DO Traseaza WITH lcDoc, 'jtva_coloane pregatit'
|
||||
|
||||
loForm = Createobject('frm_facturare_articole2')
|
||||
DO Traseaza WITH lcDoc, 'Createobject Vartype=' + Vartype(loForm)
|
||||
IF Vartype(loForm) <> 'O'
|
||||
DO Traseaza WITH lcDoc, 'ABANDON: loForm nu e obiect'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO Traseaza WITH lcDoc, 'loForm.WindowType=' + Transform(loForm.WindowType) + ' Visible=' + Transform(loForm.Visible)
|
||||
loForm.ndiscfactron = pnDiscountRon
|
||||
loForm.ndiscfactval = pnDiscountValuta
|
||||
loForm.do_calculeaza_totaluri()
|
||||
DO Traseaza WITH lcDoc, 'do_calculeaza_totaluri terminat, ntotalron=' + Transform(loForm.ntotalron)
|
||||
|
||||
DO Traseaza WITH lcDoc, 'inainte de Show(), FormCount=' + Transform(_SCREEN.FormCount)
|
||||
goDriverTrace.Reseteaza()
|
||||
loForm.Show()
|
||||
DO Traseaza WITH lcDoc, 'DUPA Show() - a revenit, lGasit=' + Transform(goDriverTrace.lGasit) + ' gcMockUltimMesaj=[' + gcMockUltimMesaj + ']'
|
||||
TRY
|
||||
loForm.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
|
||||
DO VerificaTrace WITH 1055
|
||||
DO VerificaTrace WITH 1113
|
||||
|
||||
_SCREEN.tmrTrace.Enabled = .F.
|
||||
TRY
|
||||
_SCREEN.RemoveObject('tmrTrace')
|
||||
CATCH
|
||||
ENDTRY
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
42
utile/Teste/editare_factura/probe_triaj_incasare.prg
Normal file
42
utile/Teste/editare_factura/probe_triaj_incasare.prg
Normal file
@@ -0,0 +1,42 @@
|
||||
* probe_triaj_incasare.prg - diagnostic read-only, triaj regresie 28 FAIL (docs\triaj_s8_regresie_28fail.md)
|
||||
* Interogheaza campurile relevante pentru bugul din actualizeaza_tipincasare / seteaza_mod_incasare
|
||||
* pe cele 4 documente vechi (1113,1055,1048,1130) + cele 2 noi (1071,1072), sa gaseasca ce le diferentiaza.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_triaj_incasare_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
LOCAL lnSucces, lcSql
|
||||
lcSql = [select id_vanzare, tip, eproforma, sters, in_valuta, incasat, tip_incasare, ] + ;
|
||||
[nr_incasare, serie_chit from fact_vfacturi where id_vanzare in (1113,1055,1048,1130,1071,1072) order by id_vanzare]
|
||||
lnSucces = goExecutor.oExecute(lcSql, 'crsProbe')
|
||||
goExecutor.oReset()
|
||||
IF lnSucces < 0
|
||||
STRTOFILE('EROARE query: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SELECT crsProbe
|
||||
SCAN
|
||||
STRTOFILE(TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip) + ' eproforma=' + TRANSFORM(eproforma) + ;
|
||||
' sters=' + TRANSFORM(sters) + ' in_valuta=' + TRANSFORM(in_valuta) + ' incasat=' + TRANSFORM(Nvl(incasat,-1)) + ;
|
||||
' tip_incasare=' + TRANSFORM(Nvl(tip_incasare,-1)) + ;
|
||||
' nr_incasare=' + TRANSFORM(Nvl(nr_incasare,-1)) + ;
|
||||
' serie_chit=[' + TRANSFORM(Nvl(serie_chit,'')) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDSCAN
|
||||
USE IN crsProbe
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
54
utile/Teste/editare_factura/s9_6_snapshot_dupa.txt
Normal file
54
utile/Teste/editare_factura/s9_6_snapshot_dupa.txt
Normal file
@@ -0,0 +1,54 @@
|
||||
===== B1: randuri DOCUMENTE scrise prin ramura NOT MATCHED, DUPA aplicare (8010204..8010208) =====
|
||||
===== comparate cu randurile scrise prin INSERT-ul vechi, INAINTE de aplicare (8010196..8010203) =====
|
||||
|
||||
ID_DOC DATAORA ID_UTIL STERS DATAORAS ID_UTILS TVA_INCASARE SERIE_ACT NRACT DATAACT ID_PART ID_CTR CONT ACON ID_VALUTA ID_SUCURSALA IP_ANI IP_LUNAI IP_SOLDI ID_SET DATAIREG TIP_SAFT
|
||||
---------- ------------------- ---------- ---------- ------------------- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ---- ---- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ----------
|
||||
8010196 03.09.2026 06:37:00 8 0 0 0 SSS 594 26.08.2026 25021 26.08.2026
|
||||
8010197 03.09.2026 06:40:14 8 0 0 0 SSS 44 26.08.2026 25021 26.08.2026
|
||||
8010198 03.09.2026 06:40:14 8 0 0 0 SSS 595 26.08.2026 25021 26.08.2026
|
||||
8010199 03.09.2026 06:41:53 8 0 0 0 SSS 596 26.08.2026 25021 26.08.2026
|
||||
8010200 03.09.2026 06:41:53 8 0 0 0 66 26.08.2026 25021 26.08.2026
|
||||
8010201 03.09.2026 07:18:04 8 0 0 0 SSS 600 26.08.2026 25021 26.08.2026
|
||||
8010202 03.09.2026 07:23:29 8 0 0 0 SSS 45 26.08.2026 25021 26.08.2026
|
||||
8010203 03.09.2026 07:23:29 8 0 0 0 SSS 601 26.08.2026 25021 26.08.2026
|
||||
8010204 03.09.2026 08:37:25 8 1 03.09.2026 08:41:30 8 0 SSS 602 26.08.2026 25021 26.08.2026
|
||||
8010205 03.09.2026 08:37:25 8 1 03.09.2026 08:41:11 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8010206 03.09.2026 08:41:11 8 1 03.09.2026 08:41:30 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8010207 03.09.2026 08:41:30 8 1 03.09.2026 08:41:46 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8010208 03.09.2026 08:41:46 8 1 03.09.2026 08:41:47 8 0 67 26.08.2026 25021 26.08.2026
|
||||
8017983 03.09.2026 08:41:30 8 0 03.09.2026 08:41:47 8 0 SSS 602 26.08.2026 25021 26.08.2026
|
||||
|
||||
14 rows selected.
|
||||
|
||||
===== coloane care difera intre lotul INAINTE si lotul DUPA (asteptat: niciuna, in afara de id_doc/dataora/nract) =====
|
||||
|
||||
COLOANA VALORI_DISTINCTE
|
||||
-------- ----------------
|
||||
ID_UTIL 1
|
||||
STERS 1
|
||||
ID_UTILS 2
|
||||
ID_SET 1
|
||||
DATAIREG 1
|
||||
|
||||
5 rows selected.
|
||||
|
||||
===== totaluri DOCUMENTE dupa toate probele =====
|
||||
|
||||
TOTAL STERS1 STERS0 MAX_ID_DOC
|
||||
---------- ---------- ---------- ----------
|
||||
37564 370 37194 8017983
|
||||
|
||||
1 row selected.
|
||||
|
||||
===== igiena: id_doc duplicat (trebuie gol) =====
|
||||
|
||||
no rows selected
|
||||
|
||||
===== marcaj VERSIUNE =====
|
||||
|
||||
SCRIPT_FINAL TIP_SCRIPT DATA_SCRIP SEQ_SCRIPT
|
||||
---------------------------------------------------------------------------------------------------- -------------------------------------------------- ---------- ----------
|
||||
wip13_2026_09_03_01_COMUN_PACK_CONTAFIN.sql COMUN_PACK_CONTAFIN 03.09.2026 1
|
||||
|
||||
1 row selected.
|
||||
|
||||
38
utile/Teste/editare_factura/s9_6_snapshot_inainte.txt
Normal file
38
utile/Teste/editare_factura/s9_6_snapshot_inainte.txt
Normal file
@@ -0,0 +1,38 @@
|
||||
===== SNAPSHOT DOCUMENTE, INAINTE DE APLICAREA S9-6 =====
|
||||
|
||||
MOMENTUL
|
||||
-------------------
|
||||
03.09.2026 08:28:34
|
||||
|
||||
1 row selected.
|
||||
|
||||
===== totaluri =====
|
||||
|
||||
TOTAL STERS1 STERS0 MAX_ID_DOC
|
||||
---------- ---------- ---------- ----------
|
||||
37557 363 37194 8010203
|
||||
|
||||
1 row selected.
|
||||
|
||||
===== ultimele 15 randuri scrise (dataora desc) =====
|
||||
|
||||
ID_DOC DATAORA ID_UTIL STERS DATAORAS ID_UTILS TVA_INCASARE SERIE_ACT NRACT DATAACT ID_PART ID_CTR CONT ACON ID_VALUTA ID_SUCURSALA IP_ANI IP_LUNAI IP_SOLDI ID_SET DATAIREG TIP_SAFT
|
||||
---------- -------------------- ---------- ---------- -------------------- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ---- ---- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ----------
|
||||
8010203 03.09.2026 07:23:29 8 0 0 0 SSS 601 26.08.2026 25021 26.08.2026
|
||||
8010202 03.09.2026 07:23:29 8 0 0 0 SSS 45 26.08.2026 25021 26.08.2026
|
||||
8010201 03.09.2026 07:18:04 8 0 0 0 SSS 600 26.08.2026 25021 26.08.2026
|
||||
8010200 03.09.2026 06:41:53 8 0 0 0 66 26.08.2026 25021 26.08.2026
|
||||
8010199 03.09.2026 06:41:53 8 0 0 0 SSS 596 26.08.2026 25021 26.08.2026
|
||||
8010198 03.09.2026 06:40:14 8 0 0 0 SSS 595 26.08.2026 25021 26.08.2026
|
||||
8010197 03.09.2026 06:40:14 8 0 0 0 SSS 44 26.08.2026 25021 26.08.2026
|
||||
8010196 03.09.2026 06:37:00 8 0 0 0 SSS 594 26.08.2026 25021 26.08.2026
|
||||
8010181 02.09.2026 06:43:33 8 0 0 1 SSS 691 31.08.2026 25000 31.08.2026
|
||||
8010180 02.09.2026 06:43:30 8 0 0 1 SSS 690 31.08.2026 25000 31.08.2026
|
||||
8010179 02.09.2026 06:09:51 8 0 0 1 SSS 689 31.08.2026 25000 31.08.2026
|
||||
8010178 02.09.2026 06:09:48 8 0 0 1 SSS 688 31.08.2026 25000 31.08.2026
|
||||
8010177 02.09.2026 05:50:46 8 0 0 1 SSS 687 31.08.2026 25000 31.08.2026
|
||||
8010176 02.09.2026 05:50:43 8 0 0 1 SSS 686 31.08.2026 25000 31.08.2026
|
||||
8010175 01.09.2026 21:58:18 8 0 0 1 SSS 684 31.08.2026 25000 31.08.2026
|
||||
|
||||
15 rows selected.
|
||||
|
||||
61
utile/Teste/editare_factura/s9_7_snapshot_dupa.txt
Normal file
61
utile/Teste/editare_factura/s9_7_snapshot_dupa.txt
Normal file
@@ -0,0 +1,61 @@
|
||||
===== SNAPSHOT DOCUMENTE, DUPA S9-7 (rularea 1, control negativ A) =====
|
||||
|
||||
MOMENTUL
|
||||
-------------------
|
||||
03.09.2026 10:25:18
|
||||
===== totaluri =====
|
||||
|
||||
TOTAL STERS1 STERS0 MAX_ID_DOC
|
||||
---------- ---------- ---------- ----------
|
||||
37566 372 37194 8017983
|
||||
===== ultimele 15 randuri scrise (dataora_raw desc) =====
|
||||
|
||||
ID_DOC DATAORA_FMT ID_UTIL STERS DATAORAS_FMT ID_UTILS TVA_INCASARE SERIE_ACT NRACT DATAACT_FM ID_PART ID_CTR CONT ACON ID_VALUTA ID_SUCURSALA IP_ANI IP_LUNAI IP_SOLDI ID_SET DATAIREG_F
|
||||
---------- ------------------- ---------- ---------- ------------------- ---------- ------------ ---------- ---------- ---------- ---------- ---------- ---- ---- ---------- ------------ ---------- ---------- ---------- ---------- ----------
|
||||
TIP_SAFT DATAORA_R
|
||||
---------- ---------
|
||||
8010211 03.09.2026 10:21:30 8 0 0 0 SSS 608 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010210 03.09.2026 10:16:52 8 0 0 0 SSS 604 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010209 03.09.2026 08:41:47 8 0 0 0 67 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010208 03.09.2026 08:41:46 8 1 03.09.2026 08:41:47 8 0 67 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8017983 03.09.2026 08:41:30 8 0 03.09.2026 08:41:47 8 0 SSS 602 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010207 03.09.2026 08:41:30 8 1 03.09.2026 08:41:46 8 0 67 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010206 03.09.2026 08:41:11 8 1 03.09.2026 08:41:30 8 0 67 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010204 03.09.2026 08:37:25 8 1 03.09.2026 08:41:30 8 0 SSS 602 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010205 03.09.2026 08:37:25 8 1 03.09.2026 08:41:11 8 0 67 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010202 03.09.2026 07:23:29 8 0 0 0 SSS 45 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010203 03.09.2026 07:23:29 8 0 0 0 SSS 601 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010201 03.09.2026 07:18:04 8 0 0 0 SSS 600 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010199 03.09.2026 06:41:53 8 0 0 0 SSS 596 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010200 03.09.2026 06:41:53 8 0 0 0 66 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
8010197 03.09.2026 06:40:14 8 0 0 0 SSS 44 26.08.2026 25021 26.08.2026
|
||||
03-SEP-26
|
||||
|
||||
233
utile/Teste/editare_factura/test_id_part_rez.prg
Normal file
233
utile/Teste/editare_factura/test_id_part_rez.prg
Normal file
@@ -0,0 +1,233 @@
|
||||
* test_id_part_rez.prg
|
||||
* Proba tintita pentru reparatia sectiunii 3.3 din docs\propunere_comparatie_coloane_crsfactura.md:
|
||||
* id_part_rez / id_lucrare_rez trebuie sa fie refacute la editare din rulajul original (RUL), nu sa
|
||||
* ramana NULL. Sursa propusa in document (VANZARI_DETALII) NU are aceste coloane - se probeaza si
|
||||
* asta, plus faptul ca VVANZARI_ARTICOLE nu le expune, deci valoarea gasita in crsfactura nu poate
|
||||
* veni din alta parte. Nimic nu se scrie in Oracle: doar SELECT si incarcarea in cursoare.
|
||||
*
|
||||
* Caz 1 (doc 872, rezervare reala): RUL are un rand cu id_part_rez = 742 si id_lucrare_rez NULL.
|
||||
* Caz 2 (doc 951, rezervare absenta scrisa ca 0): randul RUL are 0 pe ambele; 0 trebuie pastrat ca 0,
|
||||
* nu convertit in NULL si nici NULL convertit in 0.
|
||||
* Caz 3 (premisele): VANZARI_DETALII fara coloane, VVANZARI_ARTICOLE fara coloane, RUL cu ambele.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_id_part_rez_log.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
DO Premise
|
||||
DO CazDocument WITH 872, 742, .T.
|
||||
DO CazDocument WITH 951, 0, .F.
|
||||
|
||||
STRTOFILE(CHR(13) + CHR(10) + 'REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* Premise: nici tabela propusa in document, nici view-ul sursa nu au coloanele; RUL le are.
|
||||
*==============================================================================================
|
||||
PROCEDURE Premise
|
||||
LOCAL lcSql
|
||||
STRTOFILE(CHR(13) + CHR(10) + '--- PREMISE ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
lcSql = [select count(*) as nr from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'VANZARI_DETALII' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ')]
|
||||
DO AssertaSql WITH 'VANZARI_DETALII NU are coloanele (varianta (a) din propunere e imposibila)', lcSql, 0
|
||||
|
||||
lcSql = [select count(*) as nr from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'VVANZARI_ARTICOLE' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ')]
|
||||
DO AssertaSql WITH 'VVANZARI_ARTICOLE NU expune coloanele', lcSql, 0
|
||||
|
||||
lcSql = [select count(*) as nr from all_tab_columns where owner = 'MARIUSM_AUTO' ] + ;
|
||||
[and table_name = 'RUL' and column_name in ('ID_PART_REZ','ID_LUCRARE_REZ')]
|
||||
DO AssertaSql WITH 'RUL are ambele coloane (singura sursa la editare)', lcSql, 2
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CazDocument: incarca documentul si compara crsfactura cu RUL, rand cu rand.
|
||||
* tnIdV - id_vanzare
|
||||
* tnPartAstept - valoarea id_part_rez asteptata pe cel putin o linie
|
||||
* tlLucrNull - .T. daca id_lucrare_rez din RUL e NULL pe acea linie
|
||||
*==============================================================================================
|
||||
PROCEDURE CazDocument
|
||||
LPARAMETERS tnIdV, tnPartAstept, tlLucrNull
|
||||
LOCAL lcSql, lnDiscRon, lnDiscVal, lnPotriviri, lnPart, lnLucr, lnNule, lnStrict, lcPref
|
||||
|
||||
lcPref = 'D' + TRANSFORM(tnIdV) + ' '
|
||||
STRTOFILE(CHR(13) + CHR(10) + '--- CAZ document ' + TRANSFORM(tnIdV) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* sursa independenta: randurile RUL ale documentului, exact ca in productie
|
||||
IF USED('crs_rul_astept')
|
||||
USE IN crs_rul_astept
|
||||
ENDIF
|
||||
lcSql = [select r.id_articol, r.id_gestiune, Nvl(r.cont,' ') as cont, r.pret, ] + ;
|
||||
[Nvl(r.serie,' ') as serie, r.cante as cantitate, r.pretv, r.id_tip_rulaj, ] + ;
|
||||
[r.id_part_rez, r.id_lucrare_rez ] + ;
|
||||
[from rul r, vanzari v ] + ;
|
||||
[where v.id_vanzare = ] + ALLTRIM(STR(tnIdV)) + ;
|
||||
[ and r.cod = v.cod and r.sters = 0 and r.cante <> 0 ] + ;
|
||||
[order by r.id_tip_rulaj desc, r.id_rul]
|
||||
IF !goExecutor.oExecuta(lcSql, 'crs_rul_astept')
|
||||
DO Asserta WITH lcPref + 'randurile RUL s-au citit', .F., 'oExecuta a esuat'
|
||||
RETURN
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
DO Asserta WITH lcPref + 'documentul are randuri RUL', RECCOUNT('crs_rul_astept') > 0, TRANSFORM(RECCOUNT('crs_rul_astept'))
|
||||
|
||||
*!* incarcarea reala
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO Asserta WITH lcPref + 'antetul s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdV)
|
||||
DO Asserta WITH lcPref + 'crsfactura are linii', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* comparatia rand cu rand, pe aceeasi cheie ca productia
|
||||
lnPotriviri = 0
|
||||
lnPart = 0
|
||||
lnLucr = 0
|
||||
lnNule = 0
|
||||
lnStrict = 0
|
||||
SELECT crsfactura
|
||||
SCAN FOR gestionabil = 1
|
||||
SELECT crs_rul_astept
|
||||
LOCATE FOR id_articol = crsfactura.id_articol AND id_gestiune = crsfactura.id_gestiune ;
|
||||
AND ALLTRIM(cont) == ALLTRIM(crsfactura.Cont) AND pret = crsfactura.pret_achizitie ;
|
||||
AND ALLTRIM(serie) == ALLTRIM(NVL(crsfactura.serie,[])) AND cantitate = crsfactura.cantitate
|
||||
IF FOUND()
|
||||
lnPotriviri = lnPotriviri + 1
|
||||
*!* pretv_orig populat din acelasi rand = dovada ca potrivirea chiar a avut loc
|
||||
IF crsfactura.pretv_orig = NVL(crs_rul_astept.pretv, -987654)
|
||||
lnStrict = lnStrict + 1
|
||||
ENDIF
|
||||
IF ISNULL(crs_rul_astept.id_part_rez) = ISNULL(crsfactura.id_part_rez) ;
|
||||
AND NVL(crs_rul_astept.id_part_rez, -1) = NVL(crsfactura.id_part_rez, -1)
|
||||
lnPart = lnPart + 1
|
||||
ENDIF
|
||||
IF ISNULL(crs_rul_astept.id_lucrare_rez) = ISNULL(crsfactura.id_lucrare_rez) ;
|
||||
AND NVL(crs_rul_astept.id_lucrare_rez, -1) = NVL(crsfactura.id_lucrare_rez, -1)
|
||||
lnLucr = lnLucr + 1
|
||||
ENDIF
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(crsfactura.id_temp) + ;
|
||||
' art=' + TRANSFORM(NVL(crsfactura.id_articol,-1)) + ;
|
||||
' cant=' + TRANSFORM(crsfactura.cantitate) + ;
|
||||
' pretv_orig=' + TRANSFORM(crsfactura.pretv_orig) + ;
|
||||
' id_part_rez=' + IIF(ISNULL(crsfactura.id_part_rez), 'NULL', TRANSFORM(crsfactura.id_part_rez)) + ;
|
||||
' id_lucrare_rez=' + IIF(ISNULL(crsfactura.id_lucrare_rez), 'NULL', TRANSFORM(crsfactura.id_lucrare_rez)) + ;
|
||||
' potrivit=da' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
*!* fara potrivire in RUL nu exista sursa: valoarea trebuie sa ramana NULL
|
||||
IF ISNULL(crsfactura.id_part_rez) AND ISNULL(crsfactura.id_lucrare_rez)
|
||||
lnNule = lnNule + 1
|
||||
ENDIF
|
||||
STRTOFILE(' id_temp=' + TRANSFORM(crsfactura.id_temp) + ;
|
||||
' art=' + TRANSFORM(NVL(crsfactura.id_articol,-1)) + ;
|
||||
' cant=' + TRANSFORM(crsfactura.cantitate) + ;
|
||||
' id_part_rez=' + IIF(ISNULL(crsfactura.id_part_rez), 'NULL', TRANSFORM(crsfactura.id_part_rez)) + ;
|
||||
' id_lucrare_rez=' + IIF(ISNULL(crsfactura.id_lucrare_rez), 'NULL', TRANSFORM(crsfactura.id_lucrare_rez)) + ;
|
||||
' potrivit=nu' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
SELECT crsfactura
|
||||
ENDSCAN
|
||||
|
||||
DO Asserta WITH lcPref + 'exista cel putin o linie potrivita in RUL (proba nu e vida)', ;
|
||||
lnPotriviri > 0, TRANSFORM(lnPotriviri)
|
||||
DO Asserta WITH lcPref + 'pretv_orig e cel din RUL pe toate liniile potrivite', ;
|
||||
lnStrict = lnPotriviri AND lnPotriviri > 0, TRANSFORM(lnStrict) + '/' + TRANSFORM(lnPotriviri)
|
||||
DO Asserta WITH lcPref + 'id_part_rez identic cu RUL pe toate liniile potrivite (NULL ramane NULL)', ;
|
||||
lnPart = lnPotriviri AND lnPotriviri > 0, TRANSFORM(lnPart) + '/' + TRANSFORM(lnPotriviri)
|
||||
DO Asserta WITH lcPref + 'id_lucrare_rez identic cu RUL pe toate liniile potrivite (NULL ramane NULL)', ;
|
||||
lnLucr = lnPotriviri AND lnPotriviri > 0, TRANSFORM(lnLucr) + '/' + TRANSFORM(lnPotriviri)
|
||||
|
||||
*!* valoarea concreta asteptata pe document, ca sa nu treaca o comparatie NULL = NULL
|
||||
SELECT crsfactura
|
||||
LOCATE FOR gestionabil = 1 AND !ISNULL(id_part_rez) AND id_part_rez = tnPartAstept
|
||||
DO Asserta WITH lcPref + 'exista o linie cu id_part_rez = ' + TRANSFORM(tnPartAstept), ;
|
||||
FOUND(), IIF(FOUND(), 'gasita', 'lipseste')
|
||||
IF FOUND()
|
||||
IF tlLucrNull
|
||||
DO Asserta WITH lcPref + 'pe acea linie id_lucrare_rez a ramas NULL', ;
|
||||
ISNULL(crsfactura.id_lucrare_rez), IIF(ISNULL(crsfactura.id_lucrare_rez), 'NULL', TRANSFORM(crsfactura.id_lucrare_rez))
|
||||
ELSE
|
||||
DO Asserta WITH lcPref + 'pe acea linie id_lucrare_rez nu e NULL', ;
|
||||
!ISNULL(crsfactura.id_lucrare_rez), IIF(ISNULL(crsfactura.id_lucrare_rez), 'NULL', TRANSFORM(crsfactura.id_lucrare_rez))
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
STRTOFILE(' (linii fara potrivire RUL, ramase NULL pe ambele: ' + TRANSFORM(lnNule) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
USE IN crs_rul_astept
|
||||
IF USED('crsfactura')
|
||||
USE IN crsfactura
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE AssertaSql
|
||||
LPARAMETERS tcNume, tcSql, tnAsteptat
|
||||
LOCAL lnGasit
|
||||
lnGasit = -1
|
||||
IF goExecutor.oExecuta(tcSql, 'crs_assert_sql')
|
||||
lnGasit = NVL(crs_assert_sql.nr, -1)
|
||||
USE IN crs_assert_sql
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
DO Asserta WITH tcNume, lnGasit = tnAsteptat, TRANSFORM(lnGasit) + ' (asteptat ' + TRANSFORM(tnAsteptat) + ')'
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE Asserta
|
||||
LPARAMETERS tcNume, tlConditie, tcDetaliu
|
||||
IF tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE(' OK ' + tcNume + ' [' + tcDetaliu + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE(' FAIL ' + tcNume + ' [' + tcDetaliu + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
STRTOFILE('EROARE #' + TRANSFORM(tnErr) + ': ' + tcMsg + ' in ' + tcProg + ' linia ' + TRANSFORM(tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
334
utile/Teste/editare_factura/test_s10_cablare_vfp.prg
Normal file
334
utile/Teste/editare_factura/test_s10_cablare_vfp.prg
Normal file
@@ -0,0 +1,334 @@
|
||||
* test_s10_cablare_vfp.prg
|
||||
* Proba de cablare S10 (docs\raport_s10_cablare_vfp.md) - LIMITA semnalata explicit in
|
||||
* docs\propunere_s10_proc_tvav.md §11.0: test_s10_proc_tvav.prg dovedeste ca pachetul Oracle
|
||||
* (CASE-ul din PACK_FACTURARE.adauga_articol_factura) respecta flag-ul/parametrul nou, dar apeleaza
|
||||
* pack_facturare DIRECT - nu dovedeste ca frm_facturare_articole2.do_scrie_articole (ofacturare.vc2,
|
||||
* diff-ul din propunere §8) chiar APRINDE pack_facturare.nregenerare_editare si chiar TRIMITE al
|
||||
* 28-lea argument. Aceasta proba umple exact acel gol.
|
||||
*
|
||||
* Metoda: mock pe goExecutor care CAPTUREAZA lcSql-ul trimis prin oExecute()/oExecuta(), FARA sa
|
||||
* execute nimic in Oracle (tiparul S4e-5, verificare pe sirul SQL construit, nu pe rezultatul
|
||||
* Oracle). Documentul se incarca REAL (IncarcaAntetFacturaEditare + IncarcaLiniiFacturaEditare,
|
||||
* tiparul test_s9_8_flux.prg) - CITIRE, cu goExecutor REAL, inainte de orice mock; abia dupa
|
||||
* incarcare se inlocuieste goExecutor cu mock-ul, inainte de a chema loForm.do_scrie_articole().
|
||||
* Rezultat: ZERO scriere reala, nici in Oracle, nici in VANZARI_DETALII_TEMP - captura e strict pe
|
||||
* text, nu pe efect.
|
||||
*
|
||||
* Parametru tnCaz:
|
||||
* 1 = flag=0 (plRegenerareEditare NEDECLARAT - RELEASE explicit inainte, ca sa fie sigur Type()='U',
|
||||
* exact starea unei prime emiteri, fara nicio regenerare in curs). Asterturi:
|
||||
* - lcSql contine "pack_facturare.nregenerare_editare := 0"
|
||||
* - fiecare apel adauga_articol_factura din text are 28 argumente (parametrul nou se trimite
|
||||
* oricum, necondiționat - Oracle il ignora fara flag, cf. §11.0/§7.3 din propunere)
|
||||
* 2 = flag=1 (plRegenerareEditare = .T., PRIVATE, cu poSnapshotEditare minimal construit ca sa
|
||||
* treaca garda din StergeDocumentFacturare - an/luna = perioada activa, id_fact=0 ca sa sara
|
||||
* peste ForteazaIdFactReemitere). Asterturi:
|
||||
* - lcSql contine "pack_facturare.nregenerare_editare := 1"
|
||||
* - fiecare apel adauga_articol_factura din text are 28 argumente
|
||||
* - ORDINEA: "initializeaza_date_factura" apare INAINTEA lui "nregenerare_editare := 1" in
|
||||
* acelasi sir - daca ordinea ar fi inversa, reset-ul din initializeaza_date_factura (aplicat
|
||||
* pe Oracle, verificat la runtime in docs\raport_s10_aplicare_oracle.md §4.1) ar sterge
|
||||
* flag-ul tacit, exact defectul pe care insertia din propunere §8.1 il evita prin ancorare
|
||||
* DUPA capatul apelului la initializeaza_date_factura.
|
||||
*
|
||||
* Document folosit: 630 (CONTRACT-A din test_s9_8_flux.prg rularea 5 - driver deja validat pe el).
|
||||
* Cursorul crsfactura e curatat local (explicatie/serie/lot golite, opt_facturare fortat la 0 pe
|
||||
* toate randurile) DOAR in memorie, ca sa garanteze ca (a) textul capturat n-are ")" accidental
|
||||
* intr-un camp text si (b) toate randurile cad pe branch-ul adauga_articol_factura, nu pe
|
||||
* adauga_rata_factura (poArt.opt_facturare in (1,2)) - fara asta proba n-ar mai testa ce trebuie.
|
||||
* Documentul real din baza NU e atins - toate modificarile sunt pe cursorul local incarcat in RAM.
|
||||
*
|
||||
* Tranzactia: do_scrie_articole() (ofacturare.vc2:19842) deschide Transactions=2 pe gnHandle
|
||||
* (conexiunea REALA - SQLSetprop, nu goExecutor) si NU o inchide pe ramura de succes (o lasa
|
||||
* deschisa pentru do_scrie_factura, care nu se apeleaza aici) - ROLLBACK explicit dupa fiecare caz,
|
||||
* direct pe gnHandle, indiferent de rezultat.
|
||||
LPARAMETERS tnCaz
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s10_cablare_vfp_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' caz=' + TRANSFORM(tnCaz) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
LOCAL lnCaz
|
||||
lnCaz = VAL(TRANSFORM(tnCaz))
|
||||
DO CASE
|
||||
CASE lnCaz = 1
|
||||
DO CazFlag WITH .F.
|
||||
CASE lnCaz = 2
|
||||
DO CazFlag WITH .T.
|
||||
OTHERWISE
|
||||
STRTOFILE('EROARE: tnCaz trebuie sa fie 1 (flag=0) / 2 (flag=1)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDCASE
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CazFlag: incarca REAL doc 630, curata local crsfactura, apeleaza loForm.do_scrie_articole() cu
|
||||
* goExecutor MOCKAT (nicio scriere reala), verifica textul capturat.
|
||||
*==============================================================================================
|
||||
PROCEDURE CazFlag
|
||||
LPARAMETERS tlFlagPornit
|
||||
LOCAL loForm, loMock, loExecutorReal, lnIdV, lcPrefix
|
||||
lnIdV = 630
|
||||
lcPrefix = IIF(m.tlFlagPornit, 'FLAG1', 'FLAG0')
|
||||
|
||||
DO asserteaza WITH 'PRECONDITIE documentul ' + TRANSFORM(lnIdV) + ' e viu (STERS=0)', ;
|
||||
Val1([select count(*) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV) + [ and sters = 0]) = 1, ;
|
||||
TRANSFORM(Val1([select count(*) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV) + [ and sters = 0]))
|
||||
|
||||
LOCAL lnDiscRon, lnDiscVal
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH lcPrefix + '-0a antetul documentului ' + TRANSFORM(lnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
DO asserteaza WITH lcPrefix + '-0b liniile documentului ' + TRANSFORM(lnIdV) + ' s-au incarcat', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* curatare LOCALA (doar cursorul din RAM): (a) fara ")" accidental in text, (b) toate randurile
|
||||
*!* pe branch-ul adauga_articol_factura, (c) fara NULL pe niciun camp NUMERIC folosit NEprotejat
|
||||
*!* (fara Nvl()/Iif(Isnull())) in constructia lcSql din do_scrie_articole (ofacturare.vc2:19978-
|
||||
*!* 20001) - un NULL real pe orice document istoric prabuseste tot sirul concatenat la NULL
|
||||
*!* (VFP propaga NULL prin "+"), descoperit la runtime: PCOUNT()=1 dar VARTYPE(tcSql)='X' (NULL)
|
||||
SELECT crsfactura
|
||||
REPLACE ALL ;
|
||||
id_temp WITH NVL(id_temp,0), id_articol WITH NVL(id_articol,0), ;
|
||||
pret_achizitie WITH NVL(pret_achizitie,0), cu_tva WITH NVL(cu_tva,0), tip_valuta WITH NVL(tip_valuta,0), ;
|
||||
pretftva WITH NVL(pretftva,0), vpretftva WITH NVL(vpretftva,0), ;
|
||||
pretctva WITH NVL(pretctva,0), vpretctva WITH NVL(vpretctva,0), ;
|
||||
id_valuta WITH NVL(id_valuta,0), gestionabil WITH NVL(gestionabil,0), cantitate WITH NVL(cantitate,0), ;
|
||||
discountftva WITH NVL(discountftva,0), vdiscountftva WITH NVL(vdiscountftva,0), ;
|
||||
discountctva WITH NVL(discountctva,0), vdiscountctva WITH NVL(vdiscountctva,0), ;
|
||||
Curs WITH NVL(Curs,1), multiplicator WITH NVL(multiplicator,1), id_jtva_coloana WITH NVL(id_jtva_coloana,0), ;
|
||||
pretv_orig WITH NVL(pretv_orig,0), ;
|
||||
explicatie WITH 'test-s10-cablare', serie WITH '', lot WITH '', opt_facturare WITH 0 ;
|
||||
IN crsfactura
|
||||
*!* REPLACE ALL lasa pointerul pe EOF - Scan (folosit de do_scrie_articole) porneste de la
|
||||
*!* POZITIA CURENTA, nu de la Top - fara acest GO TOP, bucla de articole rula 0 iteratii
|
||||
GO TOP IN crsfactura
|
||||
LOCAL lnRandurAsteptate
|
||||
lnRandurAsteptate = RECCOUNT('crsfactura')
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF m.tlFlagPornit
|
||||
PRIVATE plRegenerareEditare
|
||||
PUBLIC poSnapshotEditare
|
||||
plRegenerareEditare = .T.
|
||||
poSnapshotEditare = CREATEOBJECT('Empty')
|
||||
AddProperty(poSnapshotEditare, 'id_vanzare', m.lnIdV)
|
||||
AddProperty(poSnapshotEditare, 'cod', 1)
|
||||
AddProperty(poSnapshotEditare, 'an', gnAn)
|
||||
AddProperty(poSnapshotEditare, 'luna', gnLuna)
|
||||
AddProperty(poSnapshotEditare, 'id_fact', 0)
|
||||
ELSE
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*!* dupa acest punct: NICIO citire/scriere reala in Oracle - totul trece prin mock
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS10Cablare')
|
||||
goExecutor = loMock
|
||||
|
||||
LOCAL llReturn
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
*!* ROLLBACK explicit pe conexiunea REALA - do_scrie_articole nu inchide tranzactia pe succes
|
||||
*!* (o lasa deschisa pentru do_scrie_factura, care nu se apeleaza aici)
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
DO asserteaza WITH lcPrefix + '-1 do_scrie_articole() a intors .T. (nicio eroare in constructia sirului)', llReturn, TRANSFORM(llReturn)
|
||||
STRTOFILE(lcPrefix + ' apeluri capturate de mock: ' + TRANSFORM(loMock.nApeluri) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(lcPrefix + ' --- lcSql capturat ---' + CHR(13) + CHR(10) + loMock.cSqlCapturat + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
LOCAL lcAsteptat
|
||||
lcAsteptat = 'pack_facturare.nregenerare_editare := ' + IIF(m.tlFlagPornit, '1', '0') + ';'
|
||||
DO asserteaza WITH lcPrefix + '-2 lcSql contine [' + lcAsteptat + ']', ;
|
||||
lcAsteptat $ loMock.cSqlCapturat, IIF(lcAsteptat $ loMock.cSqlCapturat, 'gasit', 'LIPSA')
|
||||
|
||||
IF m.tlFlagPornit
|
||||
LOCAL lnPozInit, lnPozFlag
|
||||
lnPozInit = AT('initializeaza_date_factura', loMock.cSqlCapturat)
|
||||
lnPozFlag = AT('nregenerare_editare := 1', loMock.cSqlCapturat)
|
||||
DO asserteaza WITH lcPrefix + '-3 ORDINE: initializeaza_date_factura (pozitia ' + TRANSFORM(lnPozInit) + ;
|
||||
') apare INAINTEA nregenerare_editare := 1 (pozitia ' + TRANSFORM(lnPozFlag) + ')', ;
|
||||
lnPozInit > 0 AND lnPozFlag > 0 AND lnPozInit < lnPozFlag, ;
|
||||
TRANSFORM(lnPozInit) + ' vs ' + TRANSFORM(lnPozFlag)
|
||||
ENDIF
|
||||
|
||||
*!* AT() cu al treilea parametru (nr. de ordine al aparitiei) - gaseste direct a n-a aparitie,
|
||||
*!* fara iterare manuala pe substring-uri
|
||||
LOCAL lnNrApeluriAdauga, lnN, lnPozGasit, lnPozInceputArg, lnPozSfarsitRel, lcSegmentArg, lnVirgule
|
||||
lnNrApeluriAdauga = 0
|
||||
lnN = 0
|
||||
DO WHILE .T.
|
||||
lnN = lnN + 1
|
||||
lnPozGasit = AT('adauga_articol_factura(', loMock.cSqlCapturat, lnN)
|
||||
IF lnPozGasit = 0
|
||||
EXIT
|
||||
ENDIF
|
||||
lnNrApeluriAdauga = lnNrApeluriAdauga + 1
|
||||
lnPozInceputArg = lnPozGasit + LEN('adauga_articol_factura(')
|
||||
lnPozSfarsitRel = AT(');', SUBSTR(loMock.cSqlCapturat, lnPozInceputArg))
|
||||
lcSegmentArg = SUBSTR(loMock.cSqlCapturat, lnPozInceputArg, lnPozSfarsitRel - 1)
|
||||
lnVirgule = OCCURS(',', lcSegmentArg)
|
||||
DO asserteaza WITH lcPrefix + '-4.' + TRANSFORM(lnNrApeluriAdauga) + ' apelul #' + TRANSFORM(lnNrApeluriAdauga) + ;
|
||||
' la adauga_articol_factura are 28 argumente (27 virgule)', lnVirgule = 27, TRANSFORM(lnVirgule) + ' virgule -> ' + TRANSFORM(lnVirgule + 1) + ' argumente'
|
||||
ENDDO
|
||||
DO asserteaza WITH lcPrefix + '-5 numarul de apeluri adauga_articol_factura = numarul de randuri din crsfactura (' + TRANSFORM(lnRandurAsteptate) + ')', ;
|
||||
lnNrApeluriAdauga = lnRandurAsteptate, TRANSFORM(lnNrApeluriAdauga) + ' vs ' + TRANSFORM(lnRandurAsteptate)
|
||||
|
||||
IF m.tlFlagPornit
|
||||
IF TYPE('poSnapshotEditare') <> 'U'
|
||||
RELEASE poSnapshotEditare
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet
|
||||
lnRet = -1
|
||||
IF USED('v_val10c')
|
||||
USE IN v_val10c
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_val10c')
|
||||
SELECT v_val10c
|
||||
IF RECCOUNT('v_val10c') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val10c.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val10c
|
||||
ELSE
|
||||
STRTOFILE('EROARE Val1: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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)
|
||||
*!* daca a ramas o tranzactie manuala deschisa dupa o eroare in mijlocul CazFlag, o inchidem
|
||||
*!* aici - nu lasam conexiunea agatata pe Transactions=2
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* MockGoExecutorS10Cablare: captureaza fiecare lcSql trimis prin oExecute()/oExecuta(), fara sa
|
||||
* execute NIMIC in Oracle. oExecuta cu alias de cursor creeaza un cursor GOL (0 randuri) cu acel
|
||||
* nume - StergeDocumentFacturare (ofacturare_rutare_scriere.prg:344) citeste doar Reccount() pe
|
||||
* cursoarele intoarse, niciodata continutul lor, deci 0 randuri il duce corect pe ramura
|
||||
* "sterge_factura" (fara nota contabila de reversat) - ramura simpla, un singur oExecuta in plus,
|
||||
* tot mockat.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS10Cablare AS Custom
|
||||
cSqlCapturat = ''
|
||||
nApeluri = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
LOCAL lcDiagCrs
|
||||
IF USED('crsfactura')
|
||||
lcDiagCrs = ' [DIAG crsfactura: RECNO=' + TRANSFORM(RECNO('crsfactura')) + ' RECCOUNT=' + TRANSFORM(RECCOUNT('crsfactura')) + ' EOF=' + TRANSFORM(EOF('crsfactura')) + ' ALIAS()=' + ALIAS() + ']'
|
||||
ELSE
|
||||
lcDiagCrs = ' [DIAG crsfactura: NEUSED]'
|
||||
ENDIF
|
||||
THIS.cSqlCapturat = THIS.cSqlCapturat + '>>>APEL ' + TRANSFORM(THIS.nApeluri) + ' (oExecute) VARTYPE(tcSql)=' + VARTYPE(m.tcSql) + lcDiagCrs + CHR(13) + CHR(10) + TRANSFORM(m.tcSql) + CHR(13) + CHR(10)
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
THIS.cSqlCapturat = THIS.cSqlCapturat + '>>>APEL ' + TRANSFORM(THIS.nApeluri) + ' (oExecuta)' + CHR(13) + CHR(10) + TRANSFORM(m.tcSql) + CHR(13) + CHR(10)
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS10Cablare: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
421
utile/Teste/editare_factura/test_s10_proc_tvav.prg
Normal file
421
utile/Teste/editare_factura/test_s10_proc_tvav.prg
Normal file
@@ -0,0 +1,421 @@
|
||||
* test_s10_proc_tvav.prg
|
||||
* Control negativ S10 (docs\propunere_s10_proc_tvav.md §10), PE COD NEMODIFICAT: dovedeste ca
|
||||
* PACK_FACTURARE.adauga_articol_factura re-deriva PROC_TVAV, silentios, pe ramura contract SI pe
|
||||
* ramura ELSE - inainte de a scrie diff-ul din runda 2.
|
||||
*
|
||||
* PROIECTARE REVIZUITA (fata de prima incercare din aceasta sesiune): apel DIRECT la
|
||||
* pack_facturare.adauga_articol_factura, cu parametrii exact ca linia reala 1604 (doc 1055), nu
|
||||
* prin tot lantul do_scrie_factura()/scrie_factura2 - acela a picat cu o eroare Oracle NELEGATA de
|
||||
* S10 ("SQL statement parameter is required for non-prepared SQLEXEC() calls", pe scrie_factura2
|
||||
* pentru documente CONTRACT reale - vezi §11 din propunere). Apelul direct testeaza EXACT
|
||||
* mecanismul in discutie (CASE-ul din adauga_articol_factura), scrie doar in
|
||||
* VANZARI_DETALII_TEMP (niciodata in VANZARI/VANZARI_DETALII/DOCUMENTE - zero risc, zero SSS ars,
|
||||
* nimic de reparat la un document real) si e complet reversibil.
|
||||
*
|
||||
* EXTINDERE (aplicare Oracle, dupa scrierea diff-ului din §7 - vezi docs\raport_s10_aplicare_oracle.md):
|
||||
* cazurile 3 si 4 folosesc parametrul nou V_PROC_TVAV_TEMP (pozitia 28) si flag-ul de pachet
|
||||
* pack_facturare.nregenerare_editare, ca sa dovedeasca proba ceruta de decizia 3: cu flag=1 si
|
||||
* V_PROC_TVAV_TEMP trimis, cota scrisa trebuie sa fie cea SALVATA, nu cea derivata. Cazurile 1/2
|
||||
* raman NESCHIMBATE LA COD (apel cu 27 argumente, flag-ul niciodata atins) - proba de "neschimbat"
|
||||
* e ca produc EXACT ACELASI TIPAR de PASS/FAIL dupa diff ca inainte (CTR-2/ELSE-2 continua sa PICE,
|
||||
* adica tot re-deriva - flag-ul implicit 0 inseamna "override-ul nu se aplica", nu "comportament
|
||||
* corect"), nu ca ar incepe sa treaca.
|
||||
*
|
||||
* Parametru tnCaz:
|
||||
* 1 = CONTRACT - parametrii liniei reale 1604 (doc 1055: id_articol 4294507173, id_pol 41,
|
||||
* pret 101.13, id_valuta 3, id_jtva_coloana 37, proc_tvav SALVAT 1.21), trimisi la
|
||||
* adauga_articol_factura (27 argumente, flag neatins - ramane 0) cu V_ID_CTR = 61
|
||||
* (CONTRACTE.OPT_FACTURARE NULL -> branch-ul principal, nu portita NO_DATA_FOUND). Setup:
|
||||
* CRM_POLITICI_PRET_ART (id_pol_art 1593, acelasi articol/politica ca linia reala, azi
|
||||
* PROC_TVAV NULL) -> 1.09; CTR_ARTICOLE nou care leaga contractul 61 de politica 1593
|
||||
* (pret_unitar=0, ca sa nu amestece si divergenta de PRET - izolat strict pe PROC_TVAV).
|
||||
* INAINTE si DUPA diff: TREBUIE sa PICE la fel (CTR-2), tot re-deriva - flag=0 nu schimba
|
||||
* nimic pentru apelantii de azi.
|
||||
* 2 = ELSE - parametrii liniei reale 481 (doc 287: id_jtva_coloana 1 "RO19B", proc_tvav
|
||||
* SALVAT 1.19), trimisi cu pack_facturare.ntip := 1 (tip simplu, nu comanda/aviz/restaurant/
|
||||
* contract - cade pe ELSE). Setup: JTVA_COLOANE.COTA_TVA (id 1) 19 -> 9 (simuleaza o
|
||||
* schimbare legala de cota intre emiterea documentului si o eventuala regenerare). INAINTE si
|
||||
* DUPA diff: TREBUIE sa PICE la fel (ELSE-2).
|
||||
* 3 = CONTRACT + FLAG - acelasi setup ca 1, dar apel cu 28 argumente:
|
||||
* pack_facturare.nregenerare_editare := 1 inainte de apel, V_PROC_TVAV_TEMP = cota salvata
|
||||
* (1.21). Cere pachetul deja recompilat cu diff-ul din §7 (altfel pica cu "wrong number of
|
||||
* arguments"). TREBUIE sa TREACA: cota scrisa = cea salvata, nu cea noua din politica.
|
||||
* 4 = ELSE + FLAG - acelasi setup ca 2, apel cu 28 argumente, flag=1, V_PROC_TVAV_TEMP = cota
|
||||
* salvata (1.19). TREBUIE sa TREACA: cota scrisa = cea salvata, nu cea noua din JTVA_COLOANE.
|
||||
*
|
||||
* Cazurile 1/2: asertul central e "PROC_TVAV in TEMP = cel salvat pe linia reala" - PICA mereu (si
|
||||
* inainte, si dupa diff, cat timp flag-ul ramane 0): Oracle re-deriva din politica/JTVA_COLOANE
|
||||
* curente, nu primeste si nu respecta o valoare salvata pe calea normala (fara flag). Asertul de
|
||||
* control CTR-3/ELSE-3 (valoarea noua chiar a ajuns in TEMP) confirma ca testul masoara ceva real
|
||||
* si inainte, si dupa - proba ca diff-ul n-a schimbat comportamentul implicit. Setup-ul de schema e
|
||||
* revertit necondiționat la finalul fiecarui caz. Cazurile 3/4 reseteaza flag-ul la 0 imediat dupa
|
||||
* citirea rezultatului, in ACELASI bloc/sesiune, ca sa nu ramana agatat pentru vreun apel urmator
|
||||
* din aceeasi conexiune.
|
||||
LPARAMETERS tnCaz
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s10_proc_tvav_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' caz=' + TRANSFORM(tnCaz) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
LOCAL lnCaz
|
||||
lnCaz = VAL(TRANSFORM(tnCaz))
|
||||
DO CASE
|
||||
CASE lnCaz = 1
|
||||
DO CazContract
|
||||
CASE lnCaz = 2
|
||||
DO CazElse
|
||||
CASE lnCaz = 3
|
||||
DO CazContractFlag
|
||||
CASE lnCaz = 4
|
||||
DO CazElseFlag
|
||||
OTHERWISE
|
||||
STRTOFILE('EROARE: tnCaz trebuie sa fie 1 (CONTRACT) / 2 (ELSE) / 3 (CONTRACT+FLAG) / 4 (ELSE+FLAG)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDCASE
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CazContract: parametrii liniei reale 1604 (doc 1055), trimisi cu V_ID_CTR=61 (OPT_FACTURARE
|
||||
* NULL - branch-ul principal, nu NO_DATA_FOUND).
|
||||
*==============================================================================================
|
||||
PROCEDURE CazContract
|
||||
LOCAL lnIdPolArt, lnIdCtr, lnProcTvavVechi, lnIdCtrArtNou, lnProcTvavSalvat, lnProcTvavTemp
|
||||
LOCAL llOk
|
||||
|
||||
lnIdPolArt = 1593
|
||||
lnIdCtr = 61
|
||||
|
||||
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 1604])
|
||||
DO asserteaza WITH 'PRECONDITIE linia reala 1604 are proc_tvav salvat = 1.21', lnProcTvavSalvat = 1.21, TRANSFORM(lnProcTvavSalvat)
|
||||
|
||||
lnProcTvavVechi = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(lnIdPolArt))
|
||||
STRTOFILE('SETUP inainte: crm_politici_pret_art.proc_tvav (id_pol_art=' + TRANSFORM(lnIdPolArt) + ') = ' + TRANSFORM(lnProcTvavVechi) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO asserteaza WITH 'PRECONDITIE contractul 61 are OPT_FACTURARE care cade pe branch-ul principal (NVL(...,3)=3)', ;
|
||||
Val1([select nvl(opt_facturare,3) as v from contracte where id_ctr = ] + TRANSFORM(lnIdCtr)) = 3, ;
|
||||
TRANSFORM(Val1([select nvl(opt_facturare,3) as v from contracte where id_ctr = ] + TRANSFORM(lnIdCtr)))
|
||||
|
||||
llOk = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = 1.09 where id_pol_art = ] + TRANSFORM(lnIdPolArt))
|
||||
DO asserteaza WITH 'SETUP update politica reusit', llOk, TRANSFORM(llOk)
|
||||
IF !llOk
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
lnIdCtrArtNou = Val1([select seq_ctr_articole.nextval as v from dual])
|
||||
llOk = goExecutor.oExecuta([insert into ctr_articole (id_ctr_art, id_ctr, id_pol_art, pret_unitar) values (] + ;
|
||||
TRANSFORM(lnIdCtrArtNou) + [, ] + TRANSFORM(lnIdCtr) + [, ] + TRANSFORM(lnIdPolArt) + [, 0)])
|
||||
DO asserteaza WITH 'SETUP insert ctr_articole reusit (id_ctr_art=' + TRANSFORM(lnIdCtrArtNou) + ')', llOk, TRANSFORM(llOk)
|
||||
IF !llOk
|
||||
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, -1
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* apel DIRECT, 27 argumente, ca la ofacturare.vc2:19977-19999 - flag NEATINS (implicit 0 pe
|
||||
*!* pachet, sau ce a ramas de la un caz anterior din aceeasi sesiune - de aceea CazContractFlag/
|
||||
*!* CazElseFlag reseteaza flag-ul la 0 imediat dupa citire). CITIREA rezultatului trebuie sa fie
|
||||
*!* in ACELASI apel/tranzactie: VANZARI_DETALII_TEMP e GLOBAL TEMPORARY TABLE cu
|
||||
*!* DURATION=SYS$TRANSACTION (verificat pe USER_TABLES) - randul dispare la primul COMMIT, iar
|
||||
*!* goExecutor face auto-commit dupa fiecare oExecuta separat (Transactions <> 2, nicio
|
||||
*!* tranzactie manuala deschisa aici). Un al doilea apel SELECT separat vedea mereu 0 randuri.
|
||||
*!* Solutia: SELECT ... INTO ?@pnRezultatCtr (bind OUT, PRIVATE - vezi tiparul ?@poDate.nid_vanzare
|
||||
*!* din ofacturare.vc2) IN ACELASI bloc PL/SQL, inainte de commit-ul acelui apel.
|
||||
PRIVATE pnRezultatCtr
|
||||
pnRezultatCtr = -999
|
||||
LOCAL lcSqlApel
|
||||
lcSqlApel = [begin pack_facturare.ntip := 2; pack_facturare.adauga_articol_factura(] + ;
|
||||
[999001, 4294507173, '', '', 41, NULL, 0, NULL, NULL, ] + ;
|
||||
[101.13, 3, 0, 1, 1, 0, 'XXXX', 1, 1, 37, NULL, NULL, 101.13, NULL, ] + TRANSFORM(lnIdCtr) + [, 8, NULL, NULL); ] + ;
|
||||
[select proc_tvav into ?@pnRezultatCtr from vanzari_detalii_temp where id_temp = 999001; end;]
|
||||
*!* oExecute (spre deosebire de oExecuta) intoarce direct codul numeric (lnSucces < 0 = eroare)
|
||||
LOCAL lnSuccesApel
|
||||
lnSuccesApel = goExecutor.oExecute(lcSqlApel)
|
||||
llOk = (lnSuccesApel >= 0)
|
||||
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'CTR-1 apelul la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel)
|
||||
|
||||
IF llOk
|
||||
lnProcTvavTemp = NVL(pnRezultatCtr, -1)
|
||||
STRTOFILE('CTR proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
|
||||
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', politica_noua=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* ASERTUL CENTRAL - flag ramane 0 (neatins) - TREBUIE sa PICE la fel INAINTE si DUPA diff
|
||||
*!* (dovada ca diff-ul nu schimba comportamentul implicit pentru apelantii de azi)
|
||||
DO asserteaza WITH 'CTR-2 PROC_TVAV = cel salvat pe document (decizia 3, flag implicit 0 - trebuie sa PICE, neschimbat fata de azi)', ;
|
||||
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
|
||||
DO asserteaza WITH 'CTR-3 (control ca testul masoara ceva) cota noua a politicii chiar a ajuns in TEMP', ;
|
||||
lnProcTvavTemp = 1.09, TRANSFORM(lnProcTvavTemp)
|
||||
ENDIF
|
||||
|
||||
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, lnIdCtrArtNou
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE CazContractRevert
|
||||
LPARAMETERS tnIdPolArt, tnProcTvavVechi, tnIdCtrArtNou
|
||||
LOCAL llOk1, llOk2
|
||||
|
||||
llOk2 = .T.
|
||||
IF tnIdCtrArtNou <> -1
|
||||
llOk2 = goExecutor.oExecuta([delete from ctr_articole where id_ctr_art = ] + TRANSFORM(tnIdCtrArtNou))
|
||||
ENDIF
|
||||
llOk1 = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = ] + ;
|
||||
IIF(ISNULL(tnProcTvavVechi) OR tnProcTvavVechi = -1, [NULL], TRANSFORM(tnProcTvavVechi)) + [ where id_pol_art = ] + TRANSFORM(tnIdPolArt))
|
||||
STRTOFILE('REVERT: delete ctr_articole=' + TRANSFORM(llOk2) + ' update politica=' + TRANSFORM(llOk1) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'CTR-9 revert setup (politica + ctr_articole) reusit', llOk1 AND llOk2, TRANSFORM(llOk1) + '/' + TRANSFORM(llOk2)
|
||||
|
||||
LOCAL lnVerif
|
||||
lnVerif = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(tnIdPolArt))
|
||||
STRTOFILE('REVERT verificat: proc_tvav acum = ' + TRANSFORM(lnVerif) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CazElse: parametrii liniei reale 481 (doc 287), trimisi cu pack_facturare.ntip := 1 (cade pe
|
||||
* ELSE - nu e in nicio lista comanda/aviz/restaurant/contract).
|
||||
*==============================================================================================
|
||||
PROCEDURE CazElse
|
||||
LOCAL lnCotaVeche, lnProcTvavSalvat, lnProcTvavTemp, llOk
|
||||
|
||||
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 481])
|
||||
DO asserteaza WITH 'PRECONDITIE linia reala 481 are proc_tvav salvat = 1.19', lnProcTvavSalvat = 1.19, TRANSFORM(lnProcTvavSalvat)
|
||||
|
||||
lnCotaVeche = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1])
|
||||
STRTOFILE('SETUP inainte: jtva_coloane.cota_tva (id=1) = ' + TRANSFORM(lnCotaVeche) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'PRECONDITIE cota_tva porneste de la 19', lnCotaVeche = 19, TRANSFORM(lnCotaVeche)
|
||||
|
||||
llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = 9 where id_jtva_coloana = 1])
|
||||
DO asserteaza WITH 'SETUP update jtva_coloane reusit', llOk, TRANSFORM(llOk)
|
||||
IF !llOk
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* apel DIRECT, 27 argumente (V_ID_JTVA_COLOANA=1, restul dupa vanzari_detalii), ntip=1
|
||||
*!* (tip simplu -> ELSE); V_ID_ARTICOL 691698485 ca in linia reala - flag NEATINS. Citire in
|
||||
*!* ACELASI apel/tranzactie - vezi comentariul din CazContract (VANZARI_DETALII_TEMP e GTT
|
||||
*!* DURATION=SYS$TRANSACTION, disparea la commit-ul automat al urmatorului oExecuta separat)
|
||||
PRIVATE pnRezultatElse
|
||||
pnRezultatElse = -999
|
||||
LOCAL lcSqlApel2, lnSuccesApel2
|
||||
lcSqlApel2 = [begin pack_facturare.ntip := 1; pack_facturare.adauga_articol_factura(] + ;
|
||||
[999002, 691698485, '', '', NULL, NULL, 0, NULL, NULL, ] + ;
|
||||
[100, 1, 0, 1, 1, 0, 'XXXX', 1, 1, 1, NULL, NULL, 100, NULL, NULL, 8, NULL, NULL); ] + ;
|
||||
[select proc_tvav into ?@pnRezultatElse from vanzari_detalii_temp where id_temp = 999002; end;]
|
||||
lnSuccesApel2 = goExecutor.oExecute(lcSqlApel2)
|
||||
llOk = (lnSuccesApel2 >= 0)
|
||||
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'ELSE-1 apelul la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel2)
|
||||
|
||||
IF llOk
|
||||
lnProcTvavTemp = NVL(pnRezultatElse, -1)
|
||||
STRTOFILE('ELSE proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
|
||||
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', cota_noua_asteptata=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO asserteaza WITH 'ELSE-2 PROC_TVAV = cel salvat pe document (decizia 3, flag implicit 0 - trebuie sa PICE, neschimbat fata de azi)', ;
|
||||
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
|
||||
DO asserteaza WITH 'ELSE-3 (control ca testul masoara ceva) cota noua din JTVA_COLOANE chiar a ajuns in TEMP', ;
|
||||
lnProcTvavTemp = 1.09, TRANSFORM(lnProcTvavTemp)
|
||||
ENDIF
|
||||
|
||||
DO CazElseRevert WITH lnCotaVeche
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE CazElseRevert
|
||||
LPARAMETERS tnCotaVeche
|
||||
LOCAL llOk
|
||||
|
||||
llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = ] + TRANSFORM(tnCotaVeche) + [ where id_jtva_coloana = 1])
|
||||
STRTOFILE('REVERT: update jtva_coloane=' + TRANSFORM(llOk) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'ELSE-9 revert setup (jtva_coloane) reusit', llOk, TRANSFORM(llOk)
|
||||
|
||||
LOCAL lnVerif
|
||||
lnVerif = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1])
|
||||
STRTOFILE('REVERT verificat: cota_tva acum = ' + TRANSFORM(lnVerif) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CazContractFlag: acelasi setup ca CazContract, dar apel cu 28 argumente - flag=1,
|
||||
* V_PROC_TVAV_TEMP = cota salvata (1.21). Cere parametrul nou pe pachet (dupa diff-ul din §7).
|
||||
*==============================================================================================
|
||||
PROCEDURE CazContractFlag
|
||||
LOCAL lnIdPolArt, lnIdCtr, lnProcTvavVechi, lnIdCtrArtNou, lnProcTvavSalvat, lnProcTvavTemp
|
||||
LOCAL llOk
|
||||
|
||||
lnIdPolArt = 1593
|
||||
lnIdCtr = 61
|
||||
|
||||
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 1604])
|
||||
DO asserteaza WITH 'PRECONDITIE linia reala 1604 are proc_tvav salvat = 1.21', lnProcTvavSalvat = 1.21, TRANSFORM(lnProcTvavSalvat)
|
||||
|
||||
lnProcTvavVechi = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(lnIdPolArt))
|
||||
STRTOFILE('SETUP inainte: crm_politici_pret_art.proc_tvav (id_pol_art=' + TRANSFORM(lnIdPolArt) + ') = ' + TRANSFORM(lnProcTvavVechi) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
llOk = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = 1.09 where id_pol_art = ] + TRANSFORM(lnIdPolArt))
|
||||
DO asserteaza WITH 'SETUP update politica reusit', llOk, TRANSFORM(llOk)
|
||||
IF !llOk
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
lnIdCtrArtNou = Val1([select seq_ctr_articole.nextval as v from dual])
|
||||
llOk = goExecutor.oExecuta([insert into ctr_articole (id_ctr_art, id_ctr, id_pol_art, pret_unitar) values (] + ;
|
||||
TRANSFORM(lnIdCtrArtNou) + [, ] + TRANSFORM(lnIdCtr) + [, ] + TRANSFORM(lnIdPolArt) + [, 0)])
|
||||
DO asserteaza WITH 'SETUP insert ctr_articole reusit (id_ctr_art=' + TRANSFORM(lnIdCtrArtNou) + ')', llOk, TRANSFORM(llOk)
|
||||
IF !llOk
|
||||
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, -1
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* apel cu 28 argumente: flag pornit inainte de apel, V_PROC_TVAV_TEMP = cota salvata pe
|
||||
*!* document. Flag resetat la 0 IN ACELASI bloc, dupa citirea rezultatului, ca sa nu ramana
|
||||
*!* agatat pentru vreun apel urmator din aceeasi sesiune (goExecutor.oExecute e o singura
|
||||
*!* conexiune reutilizata pe tot testul).
|
||||
PRIVATE pnRezultatCtrFlag
|
||||
pnRezultatCtrFlag = -999
|
||||
LOCAL lcSqlApel
|
||||
lcSqlApel = [begin pack_facturare.nregenerare_editare := 1; pack_facturare.ntip := 2; ] + ;
|
||||
[pack_facturare.adauga_articol_factura(] + ;
|
||||
[999003, 4294507173, '', '', 41, NULL, 0, NULL, NULL, ] + ;
|
||||
[101.13, 3, 0, 1, 1, 0, 'XXXX', 1, 1, 37, NULL, NULL, 101.13, NULL, ] + TRANSFORM(lnIdCtr) + [, 8, NULL, NULL, ] + ;
|
||||
ALLTRIM(STR(lnProcTvavSalvat,18,4)) + [); ] + ;
|
||||
[select proc_tvav into ?@pnRezultatCtrFlag from vanzari_detalii_temp where id_temp = 999003; ] + ;
|
||||
[pack_facturare.nregenerare_editare := 0; end;]
|
||||
LOCAL lnSuccesApel
|
||||
lnSuccesApel = goExecutor.oExecute(lcSqlApel)
|
||||
llOk = (lnSuccesApel >= 0)
|
||||
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'CTRF-1 apelul (28 arg, flag=1) la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel)
|
||||
|
||||
IF llOk
|
||||
lnProcTvavTemp = NVL(pnRezultatCtrFlag, -1)
|
||||
STRTOFILE('CTRF proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
|
||||
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', politica_noua=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
*!* ASERTUL CENTRAL - cu flag=1 SI V_PROC_TVAV_TEMP trimis, TREBUIE sa TREACA: cota
|
||||
*!* pastrata = cea salvata, nu cea noua din politica
|
||||
DO asserteaza WITH 'CTRF-2 PROC_TVAV = cel salvat pe document (decizia 3, flag=1 - pastrat)', ;
|
||||
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
|
||||
DO asserteaza WITH 'CTRF-3 (control) cota pastrata NU e cea noua a politicii (1.09)', ;
|
||||
lnProcTvavTemp <> 1.09, TRANSFORM(lnProcTvavTemp)
|
||||
ENDIF
|
||||
|
||||
DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, lnIdCtrArtNou
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* CazElseFlag: acelasi setup ca CazElse, dar apel cu 28 argumente - flag=1, V_PROC_TVAV_TEMP =
|
||||
* cota salvata (1.19).
|
||||
*==============================================================================================
|
||||
PROCEDURE CazElseFlag
|
||||
LOCAL lnCotaVeche, lnProcTvavSalvat, lnProcTvavTemp, llOk
|
||||
|
||||
lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 481])
|
||||
DO asserteaza WITH 'PRECONDITIE linia reala 481 are proc_tvav salvat = 1.19', lnProcTvavSalvat = 1.19, TRANSFORM(lnProcTvavSalvat)
|
||||
|
||||
lnCotaVeche = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1])
|
||||
STRTOFILE('SETUP inainte: jtva_coloane.cota_tva (id=1) = ' + TRANSFORM(lnCotaVeche) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'PRECONDITIE cota_tva porneste de la 19', lnCotaVeche = 19, TRANSFORM(lnCotaVeche)
|
||||
|
||||
llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = 9 where id_jtva_coloana = 1])
|
||||
DO asserteaza WITH 'SETUP update jtva_coloane reusit', llOk, TRANSFORM(llOk)
|
||||
IF !llOk
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
PRIVATE pnRezultatElseFlag
|
||||
pnRezultatElseFlag = -999
|
||||
LOCAL lcSqlApel2, lnSuccesApel2
|
||||
lcSqlApel2 = [begin pack_facturare.nregenerare_editare := 1; pack_facturare.ntip := 1; ] + ;
|
||||
[pack_facturare.adauga_articol_factura(] + ;
|
||||
[999004, 691698485, '', '', NULL, NULL, 0, NULL, NULL, ] + ;
|
||||
[100, 1, 0, 1, 1, 0, 'XXXX', 1, 1, 1, NULL, NULL, 100, NULL, NULL, 8, NULL, NULL, ] + ;
|
||||
ALLTRIM(STR(lnProcTvavSalvat,18,4)) + [); ] + ;
|
||||
[select proc_tvav into ?@pnRezultatElseFlag from vanzari_detalii_temp where id_temp = 999004; ] + ;
|
||||
[pack_facturare.nregenerare_editare := 0; end;]
|
||||
lnSuccesApel2 = goExecutor.oExecute(lcSqlApel2)
|
||||
llOk = (lnSuccesApel2 >= 0)
|
||||
STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'ELSEF-1 apelul (28 arg, flag=1) la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel2)
|
||||
|
||||
IF llOk
|
||||
lnProcTvavTemp = NVL(pnRezultatElseFlag, -1)
|
||||
STRTOFILE('ELSEF proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ;
|
||||
' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', cota_noua_asteptata=1.09)' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
DO asserteaza WITH 'ELSEF-2 PROC_TVAV = cel salvat pe document (decizia 3, flag=1 - pastrat)', ;
|
||||
lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp)
|
||||
DO asserteaza WITH 'ELSEF-3 (control) cota pastrata NU e cea noua din JTVA_COLOANE (1.09)', ;
|
||||
lnProcTvavTemp <> 1.09, TRANSFORM(lnProcTvavTemp)
|
||||
ENDIF
|
||||
|
||||
DO CazElseRevert WITH lnCotaVeche
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
FUNCTION Val1
|
||||
LPARAMETERS tcSql
|
||||
LOCAL lnRet
|
||||
lnRet = -1
|
||||
IF USED('v_val10')
|
||||
USE IN v_val10
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta(tcSql, 'v_val10')
|
||||
SELECT v_val10
|
||||
IF RECCOUNT('v_val10') > 0
|
||||
GO TOP
|
||||
lnRet = NVL(v_val10.v, -1)
|
||||
ENDIF
|
||||
USE IN v_val10
|
||||
ELSE
|
||||
STRTOFILE('EROARE Val1: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
RETURN lnRet
|
||||
ENDFUNC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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)
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
259
utile/Teste/editare_factura/test_s11_izolare_camp_1472.prg
Normal file
259
utile/Teste/editare_factura/test_s11_izolare_camp_1472.prg
Normal file
@@ -0,0 +1,259 @@
|
||||
* test_s11_izolare_camp_1472.prg
|
||||
* Proba S11 (docs\raport_s11_cauza_1472_camp.md): izoleaza EXACT campul/campurile NULL din poArt
|
||||
* care duc lcSql la NULL in frm_facturare_articole2.do_scrie_articole (ofacturare.vc2:19977-20001).
|
||||
* Tipar identic cu test_s10_cablare_vfp.prg (mock pe goExecutor, NIMIC scris in Oracle): doc 630
|
||||
* incarcat REAL (IncarcaAntetFacturaEditare + IncarcaLiniiFacturaEditare, citire, goExecutor real),
|
||||
* apoi goExecutor inlocuit cu mock INAINTE de do_scrie_articole(). Fara curatare/REPLACE ALL pe
|
||||
* crsfactura la Pasul 1 - vrem NULL-urile REALE, nu ascunse.
|
||||
*
|
||||
* Pasul 1: enumera (AFIELDS) toate campurile din crsfactura, logheaza VARTYPE/ISNULL pe fiecare,
|
||||
* pe fiecare rand.
|
||||
* Pasul 2: apeleaza do_scrie_articole() cu mock, capteaza lcSql brut per apel, verifica VARTYPE.
|
||||
* Pasul 3 (cauzalitate, sens 1): pe cursorul curatat DOAR pe campul/campurile gasite NULL la pasul 1
|
||||
* SI nepazite in cod (candidatii: id_articol, id_jtva_coloana - singurele doua campuri din
|
||||
* lista nepazita 19978-20000 care sunt si NULL-capabile in structura crsfactura, cf.
|
||||
* creeaza_facturacrs, ofacturare_comun.prg:1801-1811), reruleaza - asteptam VARTYPE='C'.
|
||||
* Pasul 4 (cauzalitate, sens 2): reintroduce NULL pe UN SINGUR camp cauzal, reruleaza - asteptam
|
||||
* VARTYPE='X' din nou.
|
||||
LPARAMETERS tnCaz
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s11_izolare_camp_1472_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcSqlUltim, gcVartypeUltim
|
||||
gcSqlUltim = ''
|
||||
gcVartypeUltim = ''
|
||||
|
||||
DO Izoleaza
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE Izoleaza
|
||||
LOCAL lnIdV
|
||||
lnIdV = 630
|
||||
|
||||
LOCAL lnDiscRon, lnDiscVal
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH '0a antetul documentului ' + TRANSFORM(lnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
DO asserteaza WITH '0b liniile documentului ' + TRANSFORM(lnIdV) + ' s-au incarcat', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* curatare LOCALA (doar in RAM) doar pe ce trebuie ca sa nu strice testul de baza:
|
||||
*!* fara ")" accidental in text, toate randurile pe branch-ul adauga_articol_factura
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'test-s11-izolare', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
*!* PASUL 1: enumerare EFECTIVA (AFIELDS), nu lista ghicita - toate campurile, toate randurile
|
||||
LOCAL laFields[1], lnFields, lnI, lnRand
|
||||
lnFields = AFIELDS(laFields, 'crsfactura')
|
||||
STRTOFILE('--- PASUL 1: campuri NULL in crsfactura, pe fiecare rand (' + TRANSFORM(RECCOUNT('crsfactura')) + ' randuri) ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
SELECT crsfactura
|
||||
SCAN
|
||||
lnRand = RECNO('crsfactura')
|
||||
LOCAL lcNuleRand
|
||||
lcNuleRand = ''
|
||||
FOR lnI = 1 TO lnFields
|
||||
IF ISNULL(EVALUATE('crsfactura.' + laFields[lnI,1]))
|
||||
lcNuleRand = lcNuleRand + laFields[lnI,1] + '(' + laFields[lnI,2] + ') '
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF EMPTY(lcNuleRand)
|
||||
STRTOFILE(' rand ' + TRANSFORM(lnRand) + ': niciun camp NULL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE(' rand ' + TRANSFORM(lnRand) + ': NULL pe -> ' + lcNuleRand + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
GO TOP IN crsfactura
|
||||
|
||||
*!* PASUL 2: rulare BRUTA (fara nicio curatare pe campuri numerice) - reproduce defectul
|
||||
DO RuleazaCuMock WITH 'PAS2-brut'
|
||||
DO asserteaza WITH 'PAS2 lcSql BRUT (fara curatare) e NULL (VARTYPE X) - reproduce defectul', gcVartypeUltim = 'X', gcVartypeUltim
|
||||
|
||||
*!* PASUL 3: cauzalitate sens 1 - NVL DOAR pe candidatii NULL-capabili si nepaziti in cod
|
||||
*!* (id_articol: ofacturare.vc2:19979; id_jtva_coloana: ofacturare.vc2:19994) - singurii doi
|
||||
*!* campuri din lista nepazita 19978-20000 care sunt NULL-capabili in structura crsfactura
|
||||
*!* (ofacturare_comun.prg:1801-1811 - restul candidatilor nepaziti in SQL nu sunt marcati NULL
|
||||
*!* in CREATE CURSOR, deci nu pot ajunge NULL pe acest traseu, indiferent de sursa Oracle).
|
||||
SELECT crsfactura
|
||||
REPLACE ALL id_articol WITH NVL(id_articol,0), id_jtva_coloana WITH NVL(id_jtva_coloana,0) IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
DO RuleazaCuMock WITH 'PAS3-curat-id_articol-id_jtva_coloana'
|
||||
DO asserteaza WITH 'PAS3 dupa NVL DOAR pe id_articol+id_jtva_coloana, lcSql devine text (VARTYPE C)', gcVartypeUltim = 'C', gcVartypeUltim
|
||||
|
||||
*!* PASUL 4: cauzalitate sens 2 - reintroduce NULL pe UN SINGUR camp (id_articol) pe primul rand
|
||||
SELECT crsfactura
|
||||
GO TOP IN crsfactura
|
||||
REPLACE id_articol WITH .NULL. IN crsfactura
|
||||
DO RuleazaCuMock WITH 'PAS4-regresie-doar-id_articol-null'
|
||||
DO asserteaza WITH 'PAS4 cu id_articol NULL pe un rand (restul curat), lcSql redevine NULL (VARTYPE X)', gcVartypeUltim = 'X', gcVartypeUltim
|
||||
|
||||
*!* PASUL 5: control - NULL DOAR pe id_jtva_coloana (id_articol curat), separat de id_articol
|
||||
SELECT crsfactura
|
||||
GO TOP IN crsfactura
|
||||
REPLACE ALL id_articol WITH NVL(id_articol,0) IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
REPLACE id_jtva_coloana WITH .NULL. IN crsfactura
|
||||
DO RuleazaCuMock WITH 'PAS5-regresie-doar-id_jtva_coloana-null'
|
||||
DO asserteaza WITH 'PAS5 cu id_jtva_coloana NULL pe un rand (restul curat), lcSql redevine NULL (VARTYPE X)', gcVartypeUltim = 'X', gcVartypeUltim
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: apeleaza do_scrie_articole() cu goExecutor mockat, intoarce lcSql-ul (sau
|
||||
* diagnosticul VARTYPE) al APELULUI cu PCOUNT()=1 (adauga_articol_factura din Scan), plus
|
||||
* rollback pe conexiunea REALA dupa fiecare rulare (tranzactia ramane deschisa pe succes).
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS11Izolare')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcSqlUltim = loMock.cSqlArticolCapturat
|
||||
gcVartypeUltim = loMock.cVartypeArticol
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ' VARTYPE(tcSql pe apelul articol)=' + gcVartypeUltim + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- lcSql capturat (apelul articol) ---' + CHR(13) + CHR(10) + TRANSFORM(gcSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* MockGoExecutorS11Izolare: captureaza, pe FIECARE apel oExecute, PCOUNT()/VARTYPE(tcSql); retine
|
||||
* separat apelul cu PCOUNT()=1 (semnatura do_scrie_articole pentru adauga_articol_factura, spre
|
||||
* deosebire de apelul antetului care are 0 parametri suplimentari observabili din tcSql insusi -
|
||||
* de fapt toate apelurile din do_scrie_articole trec 1 parametru; distingem prin continut: apelul
|
||||
* articolului contine 'adauga_articol_factura' SAU e chiar cel NULL de pe randul cu bug-ul cautat -
|
||||
* pastram DOAR ultimul apel (cel mai relevant, cel din Scan) pentru comparatie inainte/dupa.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS11Izolare AS Custom
|
||||
cSqlArticolCapturat = ''
|
||||
cVartypeArticol = ''
|
||||
nApeluri = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
LOCAL lcVartype
|
||||
lcVartype = VARTYPE(m.tcSql)
|
||||
*!* pastram ultimul apel care contine (in forma text) sau ar putea contine (NULL) linia de
|
||||
*!* articol - primele doua apeluri din do_scrie_articole sunt garantat antetul (nu contin
|
||||
*!* 'adauga_articol_factura'); din al treilea apel incolo, retinem fiecare, ultimul castiga
|
||||
IF THIS.nApeluri >= 3
|
||||
THIS.cSqlArticolCapturat = TRANSFORM(m.tcSql)
|
||||
THIS.cVartypeArticol = m.lcVartype
|
||||
ENDIF
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS11Izolare: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
225
utile/Teste/editare_factura/test_s11_reparatie_1472.prg
Normal file
225
utile/Teste/editare_factura/test_s11_reparatie_1472.prg
Normal file
@@ -0,0 +1,225 @@
|
||||
* test_s11_reparatie_1472.prg
|
||||
* Proba reparatiei S11 (docs\raport_s11_reparatie_1472.md): confirma ca garda Nvl(...,[NULL])
|
||||
* aplicata pe poArt.id_articol (ofacturare.vc2:19979) si poArt.id_jtva_coloana (ofacturare.vc2:19994,
|
||||
* in frm_facturare_articole2.do_scrie_articole) repara EROAREA 1472 pe documentul 630, fara sa
|
||||
* schimbe lcSql-ul pe randuri fara NULL pe aceste doua campuri (neregresie).
|
||||
*
|
||||
* Tipar identic cu test_s11_izolare_camp_1472.prg: mock pe goExecutor, NIMIC scris in Oracle,
|
||||
* document 630 incarcat REAL (IncarcaAntetFacturaEditare + IncarcaLiniiFacturaEditare), goExecutor
|
||||
* inlocuit cu mock DOAR dupa incarcare, inaintea do_scrie_articole().
|
||||
*
|
||||
* PAS1 (regresia care conta): doc 630 BRUT (id_articol ramane NULL, ca in Oracle) - inainte de
|
||||
* reparatie VARTYPE(lcSql)='X' (control negativ, citat din
|
||||
* docs\raport_s11_cauza_1472_camp.md §4 PAS2-brut, nu s-a rerulat). Asteptam acum VARTYPE='C'.
|
||||
* PAS2 (neregresie, comparatie caracter-cu-caracter): acelasi scenariu ca PAS3 din
|
||||
* test_s11_izolare_camp_1472.prg (id_articol/id_jtva_coloana normalizate cu NVL(...,0), ca sa
|
||||
* nu mai fie NULL) - garda noua e un no-op pe valori ne-NULL, deci lcSql trebuie sa fie
|
||||
* IDENTIC, caracter cu caracter, cu sirul deja capturat inainte de reparatie
|
||||
* (docs\raport_s11_cauza_1472_camp.md §4 PAS3, citat mai jos ca literal).
|
||||
LPARAMETERS tnCaz
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog, gnPass, gnFail
|
||||
PUBLIC poDate
|
||||
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s11_reparatie_1472_log_' + ;
|
||||
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
||||
STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
LOCAL lcPathVechi, lcPathNou
|
||||
lcPathVechi = SET("PATH")
|
||||
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
||||
SET PATH TO &lcPathNou
|
||||
|
||||
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||
gnMockRaspuns = 7
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
PUBLIC gcSqlUltim, gcVartypeUltim
|
||||
gcSqlUltim = ''
|
||||
gcVartypeUltim = ''
|
||||
|
||||
DO ProbaReparatie
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
PROCEDURE ProbaReparatie
|
||||
LOCAL lnIdV
|
||||
lnIdV = 630
|
||||
|
||||
LOCAL lnDiscRon, lnDiscVal
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
||||
DO asserteaza WITH '0a antetul documentului ' + TRANSFORM(lnIdV) + ' s-a incarcat', VARTYPE(poDate) = 'O', VARTYPE(poDate)
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
||||
DO asserteaza WITH '0b liniile documentului ' + TRANSFORM(lnIdV) + ' s-au incarcat', ;
|
||||
USED('crsfactura') AND RECCOUNT('crsfactura') > 0, TRANSFORM(IIF(USED('crsfactura'), RECCOUNT('crsfactura'), -1))
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* curatare LOCALA (doar in RAM), identica cu test_s11_izolare_camp_1472.prg
|
||||
SELECT crsfactura
|
||||
REPLACE ALL explicatie WITH 'test-s11-izolare', serie WITH '', lot WITH '', opt_facturare WITH 0 IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
|
||||
*!* PAS1: doc 630 BRUT (id_articol ramane NULL) - proba REGRESIEI CARE CONTA
|
||||
DO RuleazaCuMock WITH 'PAS1-brut-postfix'
|
||||
DO asserteaza WITH 'PAS1 lcSql BRUT (id_articol NULL, ca in Oracle) e text valid dupa reparatie (VARTYPE C)', gcVartypeUltim = 'C', gcVartypeUltim
|
||||
IF gcVartypeUltim = 'C'
|
||||
DO asserteaza WITH 'PAS1 lcSql contine apelul adauga_articol_factura', 'pack_facturare.adauga_articol_factura(' $ gcSqlUltim, gcSqlUltim
|
||||
ENDIF
|
||||
|
||||
*!* PAS2: neregresie - acelasi scenariu ca PAS3 din test_s11_izolare_camp_1472.prg (id_articol,
|
||||
*!* id_jtva_coloana normalizate cu NVL(...,0)); garda e no-op pe valori ne-NULL, deci lcSql
|
||||
*!* trebuie sa fie IDENTIC caracter-cu-caracter cu sirul capturat INAINTE de reparatie
|
||||
*!* (docs\raport_s11_cauza_1472_camp.md §4 PAS3, citat literal, nu recalculat).
|
||||
SELECT crsfactura
|
||||
GO TOP IN crsfactura
|
||||
REPLACE ALL id_articol WITH NVL(id_articol,0), id_jtva_coloana WITH NVL(id_jtva_coloana,0) IN crsfactura
|
||||
GO TOP IN crsfactura
|
||||
DO RuleazaCuMock WITH 'PAS2-neregresie-normalizat'
|
||||
|
||||
LOCAL lcAsteptatDinRaportInainteDeReparatie
|
||||
lcAsteptatDinRaportInainteDeReparatie = "begin pack_facturare.adauga_articol_factura(905,0,'','test-s11-izolare',NULL,0,0.0000,NULL,NULL,100.00,0,0,0,1.000,0.00,'',0.000000,1,0,0,0,0.0000,0,134,8,NULL,'',1.1900); end;"
|
||||
|
||||
DO asserteaza WITH 'PAS2 lcSql (dupa reparatie, valori ne-NULL) e IDENTIC caracter-cu-caracter cu sirul din raportul dinainte de reparatie', ;
|
||||
ALLTRIM(gcSqlUltim) == ALLTRIM(lcAsteptatDinRaportInainteDeReparatie), 'CAPTURAT: ' + TRANSFORM(gcSqlUltim)
|
||||
|
||||
STRTOFILE('PAS2 --- sirul asteptat (din raport, dinainte de reparatie) ---' + CHR(13) + CHR(10) + lcAsteptatDinRaportInainteDeReparatie + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('PAS2 --- sirul capturat (dupa reparatie) ---' + CHR(13) + CHR(10) + TRANSFORM(gcSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* RuleazaCuMock: apeleaza do_scrie_articole() cu goExecutor mockat, intoarce lcSql-ul (sau
|
||||
* diagnosticul VARTYPE) al APELULUI cu PCOUNT()=1 (adauga_articol_factura din Scan), plus
|
||||
* rollback pe conexiunea REALA dupa fiecare rulare (tranzactia ramane deschisa pe succes).
|
||||
*==============================================================================================
|
||||
PROCEDURE RuleazaCuMock
|
||||
LPARAMETERS tcPrefix
|
||||
LOCAL loForm, loMock, loExecutorReal, llReturn
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
|
||||
IF TYPE('plRegenerareEditare') <> 'U'
|
||||
RELEASE plRegenerareEditare
|
||||
ENDIF
|
||||
|
||||
loExecutorReal = goExecutor
|
||||
loMock = CREATEOBJECT('MockGoExecutorS11Reparatie')
|
||||
goExecutor = loMock
|
||||
|
||||
llReturn = loForm.do_scrie_articole()
|
||||
|
||||
goExecutor = loExecutorReal
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
|
||||
gcSqlUltim = loMock.cSqlArticolCapturat
|
||||
gcVartypeUltim = loMock.cVartypeArticol
|
||||
|
||||
STRTOFILE(tcPrefix + ' do_scrie_articole()=' + TRANSFORM(llReturn) + ' VARTYPE(tcSql pe apelul articol)=' + gcVartypeUltim + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE(tcPrefix + ' --- lcSql capturat (apelul articol) ---' + CHR(13) + CHR(10) + TRANSFORM(gcSqlUltim) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
RELEASE loForm
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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)
|
||||
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
||||
SQLROLLBACK(gnHandle)
|
||||
SQLSetProp(gnHandle, 'Transactions', 1)
|
||||
ENDIF
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
|
||||
*==============================================================================================
|
||||
* MockGoExecutorS11Reparatie: identic cu MockGoExecutorS11Izolare (test_s11_izolare_camp_1472.prg),
|
||||
* clasa distincta doar ca sa nu se coliziona cu cea din fisierul de izolare pe acelasi SET PROCEDURE.
|
||||
*==============================================================================================
|
||||
DEFINE CLASS MockGoExecutorS11Reparatie AS Custom
|
||||
cSqlArticolCapturat = ''
|
||||
cVartypeArticol = ''
|
||||
nApeluri = 0
|
||||
cEroare = ''
|
||||
|
||||
FUNCTION oExecute(tcSql)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
LOCAL lcVartype
|
||||
lcVartype = VARTYPE(m.tcSql)
|
||||
IF THIS.nApeluri >= 3
|
||||
THIS.cSqlArticolCapturat = TRANSFORM(m.tcSql)
|
||||
THIS.cVartypeArticol = m.lcVartype
|
||||
ENDIF
|
||||
RETURN 1
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oExecuta(tcSql, tcCursor)
|
||||
THIS.nApeluri = THIS.nApeluri + 1
|
||||
IF VARTYPE(m.tcCursor) = 'C' AND !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (xdummy I)
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDFUNC
|
||||
|
||||
FUNCTION oPrelucrareEroare()
|
||||
RETURN 'MockGoExecutorS11Reparatie: ' + THIS.cEroare
|
||||
ENDFUNC
|
||||
ENDDEFINE
|
||||
106
utile/Teste/editare_factura/test_s14_grid_coloane_modif.prg
Normal file
106
utile/Teste/editare_factura/test_s14_grid_coloane_modif.prg
Normal file
@@ -0,0 +1,106 @@
|
||||
* test_s14_grid_coloane_modif.prg
|
||||
* Verifica headless coloanele noi de audit-modificare (id_utilm/utilm/dataoram) in cursorul
|
||||
* crsfacturi construit exact ca oproceduri_facturare.vizualizare_facturi (S14, decizia 65).
|
||||
* Nu deschide niciun formular - doar gencursor + afisare(), citire pe structura si valori.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s14_grid_coloane_modif_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
PUBLIC gnPass, gnFail
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
Private poFacturi
|
||||
poFacturi = Null
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
*!* --- exact lcSchema/lcSelect din oproceduri_facturare.prg:340-362, dupa S14 ---
|
||||
LOCAL lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),id_utilm I,utilm c(30),dataoram t,delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,id_utilm,utilm,dataoram,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [rownum <= 10 and sters = 0]
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
DO asserteaza WITH 'crsfacturi incarcat (rownum>0)', Used('crsfacturi') AND Reccount('crsfacturi') > 0, IIF(Used('crsfacturi'), TRANSFORM(Reccount('crsfacturi')), 'crsfacturi lipsa')
|
||||
|
||||
IF Used('crsfacturi')
|
||||
Select crsfacturi
|
||||
DO asserteaza WITH 'camp id_utilm exista, tip N', Type('crsfacturi.id_utilm') = 'N', Type('crsfacturi.id_utilm')
|
||||
DO asserteaza WITH 'camp utilm exista, tip C', Type('crsfacturi.utilm') = 'C', Type('crsfacturi.utilm')
|
||||
DO asserteaza WITH 'camp dataoram exista, tip T', Type('crsfacturi.dataoram') = 'T', Type('crsfacturi.dataoram')
|
||||
|
||||
LOCAL lnConIdUtilm
|
||||
lnConIdUtilm = 0
|
||||
Select crsfacturi
|
||||
Scan
|
||||
IF !Isnull(id_utilm) AND id_utilm != 0
|
||||
lnConIdUtilm = m.lnConIdUtilm + 1
|
||||
ENDIF
|
||||
Endscan
|
||||
IF m.lnConIdUtilm = 0
|
||||
STRTOFILE('ATENTIE: zero randuri cu id_utilm completat in esantion (rownum<=10) - absenta din date, nu dovada de defect' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
STRTOFILE('gasit ' + TRANSFORM(m.lnConIdUtilm) + ' rand(uri) cu id_utilm completat' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcEticheta, tlConditie, tcDetaliu
|
||||
IF m.tlConditie
|
||||
gnPass = m.gnPass + 1
|
||||
STRTOFILE('PASS: ' + m.tcEticheta + ' (' + Transform(m.tcDetaliu) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = m.gnFail + 1
|
||||
STRTOFILE('FAIL: ' + m.tcEticheta + ' (' + Transform(m.tcDetaliu) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||
STRTOFILE('EROARE ' + TRANSFORM(m.tnError) + ': ' + m.tcMessage + ' in ' + m.tcProgram + ' linia ' + TRANSFORM(m.tnLine) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDPROC
|
||||
786
utile/Teste/editare_factura/test_s14_neregresie_emitere_noua.prg
Normal file
786
utile/Teste/editare_factura/test_s14_neregresie_emitere_noua.prg
Normal file
@@ -0,0 +1,786 @@
|
||||
* test_s14_neregresie_emitere_noua.prg
|
||||
* VIZIBIL (grid): proba de neregresie S14 pe calea de EMITERE NOUA (nu editare).
|
||||
* Secventa: D0 = emitere noua (v1, frm_facturare_articole, tip 1) -> reemitere HEADLESS a lui D0
|
||||
* (v2, frm_facturare_articole2.do_scrie_factura() apelat direct, ca in test_s9_4_regenerare.prg
|
||||
* Rularea2) -> D2 = a doua emitere noua (v1, ACELASI proces VFP, fara restart). D1 = documentul
|
||||
* nascut din reemiterea lui D0.
|
||||
*
|
||||
* Risc verificat: pack_facturare.nid_util_fortat/ddataora_fortata sunt variabile de sesiune
|
||||
* Oracle (PACK_FACTURARE), nu VFP - fortate la reemiterea D0->D1 si curatate simetric in
|
||||
* do_scrie_factura (ofacturare.vc2, v2). Daca CurataAuditCreareFortat ar lipsi sau ar fi ocolita,
|
||||
* D2 (scris prin v1, care NU are deloc cod S14 - do_scrie_articole/do_scrie_factura proprii, alta
|
||||
* zona a fisierului) ar mosteni tacut ID_UTIL/DATAORA fortate de reemiterea anterioara, fiindca
|
||||
* INSERT-ul din scrie_in_vanzari e comun ambelor forme.
|
||||
*
|
||||
* Variabilele de pachet nu sunt selectabile direct din SQL (stare PL/SQL, nu date de tabel) -
|
||||
* verificarea lor "sunt NULL la final" se face prin efectul observabil: DATAORA lui D2 trebuie sa
|
||||
* fie proaspata (acum), nu cea transportata la D1 (data crearii lui D0, cu minute in urma).
|
||||
*
|
||||
* v1 (D0, D2): traseul si ocolirea din test_s6_1_lista_preturi.prg (incarca_cursor_articole +
|
||||
* do_adauga_articol(.T.) direct, apoi but_termin1.Click() - FRM_ALTE_DATE condus de driver+timer,
|
||||
* tehnica identica, copiata din acel fisier).
|
||||
* v2 (D1): traseul din test_s9_4_regenerare.prg Rularea2 (IncarcaAntetFacturaEditare +
|
||||
* IncarcaLiniiFacturaEditare + CreeazaSnapshotEditare, o cantitate modificata forteaza ruta 1 =
|
||||
* regenerare, do_scrie_factura() apelat direct - fara Show(), fara buton, fara modal).
|
||||
*
|
||||
* Rulare: powershell -ExecutionPolicy Bypass -File test_s14_neregresie_emitere_noua.ps1 (timeout >= 400s)
|
||||
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\test_s14_neregresie_emitere_noua.log
|
||||
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8 (inainte de creeaza_cursor_serii); gnIdSucursala = 167;
|
||||
* gnScadereStoc = 0; gnFactSeturi = 0; SET PATH catre gridextras si stub_verificare.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
SET NOTIFY OFF
|
||||
SET DELETED ON
|
||||
SET EXACT ON
|
||||
SET CENTURY ON
|
||||
SET DATE DMY
|
||||
SET DECIMALS TO 4
|
||||
SET NULLDISPLAY TO ''
|
||||
CLOSE DATABASES
|
||||
|
||||
PUBLIC gcLog, gnPass, gnFail, gnErr, gcCaz, gcMock, gcNumere
|
||||
PUBLIC gcMockApeluri, gnMockRaspuns, gcMockDuplicat
|
||||
PUBLIC goDriverS14P4, gcClaseVazute, gcSyncDir, gcUILog, gnCantitateAleasa
|
||||
PUBLIC gcUltimaSerie, gnUltimulNract
|
||||
|
||||
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out\test_s14_neregresie_emitere_noua.log"
|
||||
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out")
|
||||
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\out"
|
||||
ENDIF
|
||||
gcUILog = gcLog
|
||||
gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\uisync_s14p4\"
|
||||
IF !DIRECTORY(gcSyncDir)
|
||||
MD (gcSyncDir)
|
||||
ENDIF
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
gnErr = 0
|
||||
gcCaz = ""
|
||||
gcMockApeluri = ""
|
||||
gnMockRaspuns = 6
|
||||
gcMockDuplicat = ""
|
||||
gcClaseVazute = ";"
|
||||
gcNumere = ""
|
||||
gnCantitateAleasa = 2
|
||||
gcMock = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\mock_validare_antet.prg"
|
||||
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO HarnessInit
|
||||
|
||||
*-- poDate & co. se declara SI se initializeaza la nivelul programului principal: metodele din .vcx
|
||||
*-- le vad numai daca variabila exista deja pe stiva de sub ele (capcana platita la S8).
|
||||
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest, poSnapshotEditare
|
||||
poDate = NULL
|
||||
poGeneratorNumere = NULL
|
||||
poDateGestiuneDest = NULL
|
||||
poSnapshotEditare = NULL
|
||||
|
||||
ON ERROR DO S14P4Err WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
*-- stub_verificare PRIMUL: "Do Form verificare" (ofacturare.vc2:14404 / :20126) rezolva la stub
|
||||
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 S14P4Log WITH 'EROARE: conectare Oracle esuata'
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
||||
DO S14P4Log WITH 'ENV OK gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + gcS
|
||||
|
||||
SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE
|
||||
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE
|
||||
SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg" ADDITIVE
|
||||
SET PROCEDURE TO (gcMock) ADDITIVE
|
||||
|
||||
IF !actualizeaza_optiuni_program()
|
||||
DO S14P4Log WITH 'EROARE: actualizeaza_optiuni_program()'
|
||||
DO S14P4Final
|
||||
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 S14P4Log WITH 'optiuni OK gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ' gnFactSeturi=' + TRANSFORM(gnFactSeturi) + ;
|
||||
' gnIdSucursala=' + TRANSFORM(gnIdSucursala) + ' gnIdUtil=' + TRANSFORM(gnIdUtil) + ;
|
||||
' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna)
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
|
||||
IF !USED('saft_tip_facturi')
|
||||
CREATE CURSOR saft_tip_facturi (cod N(3) NULL, tip_saftname C(200) NULL)
|
||||
INSERT INTO saft_tip_facturi (cod, tip_saftname) VALUES (NULL, '')
|
||||
INDEX ON cod TAG cod
|
||||
ENDIF
|
||||
|
||||
PUBLIC gdZiCurs
|
||||
gdZiCurs = DataCursValid()
|
||||
DO S14P4Log WITH ' zi_curs folosita pentru toate documentele: ' + DTOC(gdZiCurs)
|
||||
|
||||
*-- driver + timer: FRM_ALTE_DATE (v1, .Show(1) neconditionat la inainte_de_do_termin) si
|
||||
*-- formele modale MESSAGEBOX_FORM nu trec prin functia amessagebox - mock-ul nu le acopera.
|
||||
*-- Tehnica validata la S5c/S6-1/S6-5.
|
||||
goDriverS14P4 = CREATEOBJECT('driverS14P4')
|
||||
_SCREEN.AddObject('tmrS14P4', 'Timer')
|
||||
_SCREEN.tmrS14P4.Interval = 200
|
||||
BINDEVENT(_SCREEN.tmrS14P4, 'Timer', goDriverS14P4, 'Executa')
|
||||
_SCREEN.tmrS14P4.Enabled = .T.
|
||||
|
||||
DO HarnessStep WITH 0, 'env gata', 8
|
||||
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + '===== ALEGEREA A DOUA ARTICOLE (comune D0 si D2) ====='
|
||||
IF !AlegeArticole()
|
||||
DO Assert WITH .F., 'alegerea celor doua articole a esuat - vezi log'
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
|
||||
LOCAL lnIdV0, lnIdV1, lnIdV2, lcSer0, lnNr0, lcSer2, lnNr2
|
||||
LOCAL lnIdUtil0, ldDataora0, lnIdUtilm0, ldDataoram0, llUtilmNul0, llDataoramNul0
|
||||
LOCAL lnIdUtil1, ldDataora1, lnIdUtilm1, ldDataoram1, llUtilmNul1, llDataoramNul1
|
||||
LOCAL lnIdUtil2, ldDataora2, lnIdUtilm2, ldDataoram2, llUtilmNul2, llDataoramNul2
|
||||
STORE 0 TO lnIdV0, lnIdV1, lnIdV2, lnNr0, lnNr2
|
||||
STORE '' TO lcSer0, lcSer2
|
||||
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + '===== D0: EMITERE NOUA (v1, frm_facturare_articole) ====='
|
||||
lnIdV0 = EmiteDocNou()
|
||||
lcSer0 = gcUltimaSerie
|
||||
lnNr0 = gnUltimulNract
|
||||
DO Assert WITH lnIdV0 > 0, 'D0 s-a scris (baza pentru reemitere), id_vanzare=' + TRANSFORM(lnIdV0)
|
||||
IF lnIdV0 <= 0
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
IF !CitesteAuditVanzare(lnIdV0, @lnIdUtil0, @ldDataora0, @lnIdUtilm0, @ldDataoram0, @llUtilmNul0, @llDataoramNul0)
|
||||
DO Assert WITH .F., 'D0: citirea auditului (ID_UTIL/DATAORA) a esuat'
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
DO S14P4Log WITH ' D0 id_vanzare=' + TRANSFORM(lnIdV0) + ' serie=' + lcSer0 + ' nr=' + TRANSFORM(lnNr0) + ;
|
||||
' id_util=' + TRANSFORM(lnIdUtil0) + ' dataora=' + TTOC(ldDataora0) + ;
|
||||
' id_utilm_null=' + TRANSFORM(llUtilmNul0) + ' dataoram_null=' + TRANSFORM(llDataoramNul0)
|
||||
DO Assert WITH llUtilmNul0 AND llDataoramNul0, 'D0 (document nou, fara editare): ID_UTILM/DATAORAM NULL'
|
||||
DO HarnessStep WITH 1, 'D0 emis', 8
|
||||
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + '===== D1: REEMITERE HEADLESS a lui D0 (v2, do_scrie_factura direct) ====='
|
||||
lnIdV1 = ReemiteDocument(lnIdV0)
|
||||
DO Assert WITH lnIdV1 > 0, 'D1 s-a scris (reemiterea lui D0), id_vanzare=' + TRANSFORM(lnIdV1)
|
||||
IF lnIdV1 <= 0
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
IF !CitesteAuditVanzare(lnIdV1, @lnIdUtil1, @ldDataora1, @lnIdUtilm1, @ldDataoram1, @llUtilmNul1, @llDataoramNul1)
|
||||
DO Assert WITH .F., 'D1: citirea auditului (ID_UTIL/DATAORA) a esuat'
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
DO S14P4Log WITH ' D1 id_vanzare=' + TRANSFORM(lnIdV1) + ' id_util=' + TRANSFORM(lnIdUtil1) + ' dataora=' + TTOC(ldDataora1) + ;
|
||||
' id_utilm=' + TRANSFORM(lnIdUtilm1) + ' dataoram=' + TTOC(ldDataoram1)
|
||||
gcCaz = '[D1 reemitere - context, mecanismul S14 e deja probat in raport_s14_vfp_transport.md] '
|
||||
DO Assert WITH lnIdUtil1 = lnIdUtil0, 'D1 pastreaza ID_UTIL-ul creatiei lui D0, e=' + TRANSFORM(lnIdUtil1) + ' vs ' + TRANSFORM(lnIdUtil0)
|
||||
DO Assert WITH TTOC(ldDataora1) == TTOC(ldDataora0), 'D1 pastreaza DATAORA creatiei lui D0, e=[' + TTOC(ldDataora1) + '] vs [' + TTOC(ldDataora0) + ']'
|
||||
DO Assert WITH !llUtilmNul1 AND !llDataoramNul1, 'D1 are perechea de modificare completata (ID_UTILM/DATAORAM)'
|
||||
gcCaz = ''
|
||||
DO HarnessStep WITH 2, 'D1 reemis', 8
|
||||
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + '===== D2: A DOUA EMITERE NOUA (v1), IN ACEEASI SESIUNE, IMEDIAT DUPA REEMITERE ====='
|
||||
lnIdV2 = EmiteDocNou()
|
||||
lcSer2 = gcUltimaSerie
|
||||
lnNr2 = gnUltimulNract
|
||||
DO Assert WITH lnIdV2 > 0, 'D2 s-a scris (emitere noua dupa reemitere), id_vanzare=' + TRANSFORM(lnIdV2)
|
||||
IF lnIdV2 <= 0
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
IF !CitesteAuditVanzare(lnIdV2, @lnIdUtil2, @ldDataora2, @lnIdUtilm2, @ldDataoram2, @llUtilmNul2, @llDataoramNul2)
|
||||
DO Assert WITH .F., 'D2: citirea auditului (ID_UTIL/DATAORA) a esuat'
|
||||
DO S14P4Final
|
||||
ENDIF
|
||||
DO S14P4Log WITH ' D2 id_vanzare=' + TRANSFORM(lnIdV2) + ' serie=' + lcSer2 + ' nr=' + TRANSFORM(lnNr2) + ;
|
||||
' id_util=' + TRANSFORM(lnIdUtil2) + ' dataora=' + TTOC(ldDataora2) + ;
|
||||
' id_utilm_null=' + TRANSFORM(llUtilmNul2) + ' dataoram_null=' + TRANSFORM(llDataoramNul2)
|
||||
|
||||
*-- discriminatorul de "acum" foloseste DOAR timpul Oracle (ldDataoram1, SYSDATE la reemitere,
|
||||
*-- cateva secunde inaintea lui D2) - un DATETIME() din VFP ar compara cu ceasul clientului,
|
||||
*-- care poate fi decalat fata de serverul Oracle (masurat: ~3 ore, nu e o scurgere reala)
|
||||
gcCaz = '[S14-P4 NEREGRESIE emitere noua dupa reemitere] '
|
||||
DO Assert WITH lnIdUtil2 = gnIdUtil, 'S14-P4-1 D2.ID_UTIL = utilizatorul curent (' + TRANSFORM(gnIdUtil) + '), e=' + TRANSFORM(lnIdUtil2)
|
||||
DO Assert WITH ldDataora2 >= ldDataoram1, ;
|
||||
'S14-P4-2a D2.DATAORA e ulterioara momentului reemiterii (SYSDATE Oracle, nu ceasul clientului), D2=[' + TTOC(ldDataora2) + '] >= reemitere=[' + TTOC(ldDataoram1) + ']'
|
||||
DO Assert WITH TTOC(ldDataora2) <> TTOC(ldDataora0), ;
|
||||
'S14-P4-2b D2.DATAORA NU e transportata de la D0/D1 (fortarea nu a scapat pe calea v1), D2=[' + TTOC(ldDataora2) + '] D0/D1=[' + TTOC(ldDataora0) + ']'
|
||||
DO Assert WITH llUtilmNul2, 'S14-P4-3 D2.ID_UTILM = NULL (nu e reemitere)'
|
||||
DO Assert WITH llDataoramNul2, 'S14-P4-4 D2.DATAORAM = NULL (nu e reemitere)'
|
||||
gcCaz = ''
|
||||
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + '===== SECVENTA reemitere -> emitere noua: ' + ;
|
||||
IIF(lnIdUtil2 = gnIdUtil AND TTOC(ldDataora2) <> TTOC(ldDataora0) AND llUtilmNul2 AND llDataoramNul2, 'PASS', 'FAIL') + ' ====='
|
||||
DO HarnessStep WITH 3, 'D2 emis si verificat', 8
|
||||
|
||||
DO S14P4Final
|
||||
|
||||
CATCH TO loExc
|
||||
DO S14P4Log WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ;
|
||||
' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO S14P4Final
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
* Alegerea celor doua articole comune D0/D2: sonda cu incarca_cursor_articole (traseul real de pe
|
||||
* v1), apoi TOP 2 negestionabile cu pret>0 si cota prezenta in jtva_coloane. Rezultat: crsAleseS14P4.
|
||||
FUNCTION AlegeArticole
|
||||
LOCAL loRez, lcStrategie
|
||||
poDate = CREATEOBJECT("oDateFactura", 25000, 1)
|
||||
poDate.id_client = 463
|
||||
poDate.id_delegat = 256
|
||||
poDate.zi_curs = gdZiCurs
|
||||
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
||||
|
||||
loRez = incarca_cursor_articole(1, .F., poGeneratorNumere)
|
||||
DO Assert WITH (loRez.nSucces >= 0) AND loRez.lArticole, 'sonda: incarca_cursor_articole(1) a adus articole'
|
||||
IF !USED('crsarticole') OR RECCOUNT('crsarticole') = 0
|
||||
DO Goleste
|
||||
RETURN .F.
|
||||
ENDIF
|
||||
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
DO Inchide WITH 'crsCandS14P4'
|
||||
SELECT TOP 30 a.* FROM crsarticole a INNER JOIN jtva_coloane j ;
|
||||
ON ROUND((j.cota_tva + 100) / 100, 2) = ROUND(NVL(a.proc_tvav,0), 2) ;
|
||||
WHERE NVL(a.gestionabil,0) = 0 AND NVL(a.pret,0) > 0 ;
|
||||
ORDER BY a.id_articol INTO CURSOR crsCandS14P4 READWRITE
|
||||
lcStrategie = 'negestionabile cu cota in jtva_coloane'
|
||||
IF RECCOUNT('crsCandS14P4') < 2
|
||||
DO Inchide WITH 'crsCandS14P4'
|
||||
SELECT TOP 30 a.* FROM crsarticole a INNER JOIN jtva_coloane j ;
|
||||
ON ROUND((j.cota_tva + 100) / 100, 2) = ROUND(NVL(a.proc_tvav,0), 2) ;
|
||||
WHERE NVL(a.pret,0) > 0 ;
|
||||
ORDER BY a.id_articol INTO CURSOR crsCandS14P4 READWRITE
|
||||
lcStrategie = 'orice cu cota in jtva_coloane (gestionabile incluse)'
|
||||
ENDIF
|
||||
IF RECCOUNT('crsCandS14P4') < 2
|
||||
DO Inchide WITH 'crsCandS14P4'
|
||||
SELECT TOP 30 * FROM crsarticole ORDER BY id_articol INTO CURSOR crsCandS14P4 READWRITE
|
||||
lcStrategie = 'primele din lista (nicio potrivire de cota)'
|
||||
ENDIF
|
||||
|
||||
DO Inchide WITH 'crsAleseS14P4'
|
||||
SELECT * FROM crsCandS14P4 WHERE .F. INTO CURSOR crsAleseS14P4 READWRITE
|
||||
LOCAL lnUltimulId, loRowS14P4
|
||||
lnUltimulId = -1
|
||||
SELECT crsCandS14P4
|
||||
SCAN
|
||||
IF id_articol <> lnUltimulId
|
||||
SCATTER MEMO NAME loRowS14P4
|
||||
INSERT INTO crsAleseS14P4 FROM NAME loRowS14P4
|
||||
lnUltimulId = id_articol
|
||||
ENDIF
|
||||
IF RECCOUNT('crsAleseS14P4') >= 2
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDSCAN
|
||||
DO Inchide WITH 'crsCandS14P4'
|
||||
DO Assert WITH RECCOUNT('crsAleseS14P4') = 2, 'doua articole DISTINCTE alese, e=' + TRANSFORM(RECCOUNT('crsAleseS14P4'))
|
||||
DO S14P4Log WITH ' strategie: ' + lcStrategie
|
||||
SELECT crsAleseS14P4
|
||||
SCAN
|
||||
DO S14P4Log WITH ' ales: id_articol=' + TRANSFORM(id_articol) + ' [' + ALLTRIM(TRANSFORM(denumire)) + ;
|
||||
'] pret=' + TRANSFORM(pret) + ' proc_tvav=' + TRANSFORM(proc_tvav) + ' gestionabil=' + TRANSFORM(NVL(gestionabil,0))
|
||||
ENDSCAN
|
||||
|
||||
DO Inchide WITH 'crsarticole'
|
||||
DO Goleste
|
||||
RETURN (RECCOUNT('crsAleseS14P4') = 2)
|
||||
ENDFUNC
|
||||
|
||||
*==================================================================================
|
||||
* Emitere noua reala prin v1 (frm_facturare_articole), tip 1 - traseul si ocolirea din
|
||||
* test_s6_1_lista_preturi.prg (EmiteV1): incarca_cursor_articole() inainte de formular, candidatii
|
||||
* restransi la crsAleseS14P4, do_adauga_articol(.T.) direct, but_termin1.Click() (FRM_ALTE_DATE
|
||||
* condus de driver+timer).
|
||||
FUNCTION EmiteDocNou
|
||||
LOCAL lnIdVz, lcSerie, lnNract, oform, loRez, lnI, lnFact
|
||||
lnIdVz = 0
|
||||
lcSerie = ''
|
||||
lnNract = 0
|
||||
gcUltimaSerie = ''
|
||||
gnUltimulNract = 0
|
||||
gcCaz = '[emitere-noua] '
|
||||
|
||||
DO CuratieCrs
|
||||
poDate = CREATEOBJECT("oDateFactura", 25000, 1)
|
||||
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
||||
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
||||
poDate.nIdTipDoc = 5
|
||||
poDate.id_client = 463
|
||||
poDate.id_delegat = 256
|
||||
poDate.zi_curs = gdZiCurs
|
||||
|
||||
poGeneratorNumere.ResetNumere()
|
||||
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
||||
DO Assert WITH poDate.rezultat_serii = 3, 'rezultat_serii=3 (o singura plaja, fara dialog), e=' + TRANSFORM(poDate.rezultat_serii)
|
||||
IF poDate.rezultat_serii <> 3
|
||||
DO Goleste
|
||||
RETURN 0
|
||||
ENDIF
|
||||
poDate.serie_act = poGeneratorNumere.getSerieCursor(poDate.nIdTipDoc)
|
||||
poDate.nract = poGeneratorNumere.aloca_numar(poDate.nIdTipDoc, NULL)
|
||||
poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract)
|
||||
DO S14P4Log WITH ' nIdTipDoc=' + TRANSFORM(poDate.nIdTipDoc) + ' serie_act=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ;
|
||||
' nract=' + TRANSFORM(poDate.nract)
|
||||
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loRez = incarca_cursor_articole(1, .F., poGeneratorNumere)
|
||||
DO Assert WITH (loRez.nSucces >= 0) AND loRez.lArticole, 'incarca_cursor_articole a adus articole'
|
||||
IF !((loRez.nSucces >= 0) AND loRez.lArticole)
|
||||
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ' nract=' + TRANSFORM(poDate.nract) + ' (fara articole);'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO Goleste
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
USE IN crsarticole
|
||||
SELECT * FROM crsAleseS14P4 INTO CURSOR crsarticole READWRITE
|
||||
DO Assert WITH RECCOUNT('crsarticole') = 2, 'cele doua articole alese gasite in crsarticole, e=' + TRANSFORM(RECCOUNT('crsarticole'))
|
||||
|
||||
oform = CREATEOBJECT('frm_facturare_articole')
|
||||
IF VARTYPE(oform) <> 'O'
|
||||
DO Assert WITH .F., 'Createobject frm_facturare_articole'
|
||||
DO Goleste
|
||||
RETURN 0
|
||||
ENDIF
|
||||
oform.WindowType = 0
|
||||
oform.Show()
|
||||
DOEVENTS FORCE
|
||||
|
||||
SET PROCEDURE TO (gcMock) ADDITIVE
|
||||
gcMockApeluri = ''
|
||||
DO Assert WITH LOWER(ALLTRIM(oform.but_urmator1.cAction)) == 'do_urmator', 'butonul Adauga duce la do_urmator'
|
||||
DO Assert WITH oform.but_urmator1.Visible, 'butonul Adauga e VIZIBIL pentru tip 1'
|
||||
|
||||
FOR lnI = 1 TO RECCOUNT('crsarticole')
|
||||
SELECT crsarticole
|
||||
GO lnI
|
||||
oform.do_adauga_articol(.T.)
|
||||
ENDFOR
|
||||
DOEVENTS FORCE
|
||||
|
||||
lnFact = IIF(USED('crsfactura'), RECCOUNT('crsfactura'), 0)
|
||||
DO Assert WITH lnFact = 2, 'crsfactura are exact 2 linii dupa adaugare, e=' + TRANSFORM(lnFact)
|
||||
IF lnFact = 0
|
||||
gcNumere = gcNumere + 'DEZALOCAT serie=' + ALLTRIM(TRANSFORM(poDate.serie_act)) + ' nract=' + TRANSFORM(poDate.nract) + ' (fara linii);'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
DO Elibereaza WITH oform
|
||||
DO Goleste
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
DO SeteazaCantitati WITH 'crsfactura'
|
||||
|
||||
oform.do_calculeaza_totaluri()
|
||||
DOEVENTS FORCE
|
||||
|
||||
lcSerie = ALLTRIM(TRANSFORM(poDate.serie_act))
|
||||
lnNract = poDate.nract
|
||||
|
||||
SET PROCEDURE TO (gcMock) ADDITIVE
|
||||
gcMockApeluri = ''
|
||||
DO S14P4Log WITH ' [pas] but_termin1.Click'
|
||||
oform.but_termin1.Click()
|
||||
DOEVENTS FORCE
|
||||
DO S14P4Log WITH ' but_termin1.Click() -> poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare, 0))
|
||||
DO S14P4Log WITH ' apeluri amessagebox = [' + STRTRAN(ALLTRIM(gcMockApeluri), CHR(13) + CHR(10), ' | ') + ']'
|
||||
|
||||
lnIdVz = NVL(poDate.nid_vanzare, 0)
|
||||
DO Assert WITH lnIdVz > 0, 'documentul exista (poDate.nid_vanzare, parametru OUT), e=' + TRANSFORM(lnIdVz)
|
||||
|
||||
IF lnIdVz > 0
|
||||
gcNumere = gcNumere + 'SCRIS serie=' + lcSerie + ' nract=' + TRANSFORM(lnNract) + ' id_vanzare=' + TRANSFORM(lnIdVz) + ';'
|
||||
ELSE
|
||||
gcNumere = gcNumere + 'DEZALOCAT serie=' + lcSerie + ' nract=' + TRANSFORM(lnNract) + ' (nescris);'
|
||||
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
||||
lcSerie = ''
|
||||
lnNract = 0
|
||||
ENDIF
|
||||
|
||||
DO Elibereaza WITH oform
|
||||
DO Goleste
|
||||
gcUltimaSerie = lcSerie
|
||||
gnUltimulNract = lnNract
|
||||
RETURN lnIdVz
|
||||
ENDFUNC
|
||||
|
||||
*==================================================================================
|
||||
* Reemiterea headless a unui document existent prin v2 (frm_facturare_articole2), traseul din
|
||||
* test_s9_4_regenerare.prg Rularea2: incarca antet+linii, modifica o cantitate (forteaza ruta 1 =
|
||||
* regenerare), do_scrie_factura() apelat direct - fara Show(), fara buton, fara modal.
|
||||
FUNCTION ReemiteDocument
|
||||
LPARAMETERS tnIdVechi
|
||||
LOCAL lnCod, lnAn, lnLuna, lnIdFactVechi, lnDiscRon, lnDiscVal, loForm, llRez, lnIdVNou, lnRuta
|
||||
|
||||
gcCaz = '[reemitere] '
|
||||
lnCod = 0
|
||||
lnAn = 0
|
||||
lnLuna = 0
|
||||
lnIdFactVechi = 0
|
||||
IF USED('crsAntetS14P4')
|
||||
USE IN crsAntetS14P4
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select cod, id_fact, extract(year from data_act) an, extract(month from data_act) luna ] + ;
|
||||
[from vanzari where id_vanzare = ] + TRANSFORM(NVL(tnIdVechi,0)), 'crsAntetS14P4')
|
||||
IF RECCOUNT('crsAntetS14P4') > 0
|
||||
SELECT crsAntetS14P4
|
||||
GO TOP
|
||||
lnCod = NVL(cod, 0)
|
||||
lnIdFactVechi = NVL(id_fact, 0)
|
||||
lnAn = NVL(an, 0)
|
||||
lnLuna = NVL(luna, 0)
|
||||
ENDIF
|
||||
USE IN crsAntetS14P4
|
||||
ENDIF
|
||||
DO Assert WITH lnCod > 0 AND lnAn > 0 AND lnLuna > 0, 'antetul lui D0 s-a citit (cod/an/luna), cod=' + TRANSFORM(lnCod)
|
||||
IF lnCod <= 0
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
lnDiscRon = 0
|
||||
lnDiscVal = 0
|
||||
poDate = IncarcaAntetFacturaEditare(tnIdVechi, @lnDiscRon, @lnDiscVal)
|
||||
DO Assert WITH VARTYPE(poDate) = 'O', 'antetul lui D0 s-a incarcat pentru editare'
|
||||
IF VARTYPE(poDate) <> 'O'
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, tnIdVechi)
|
||||
DO Assert WITH USED('crsfactura') AND RECCOUNT('crsfactura') > 0, 'liniile lui D0 s-au incarcat in crsfactura'
|
||||
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
IF USED('jtva_coloane')
|
||||
USE IN jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_ex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ELSE
|
||||
SELECT * FROM jtva_coloane_temp WHERE ISNULL(id_jtva_neex) AND !'RORTC' $ UPPER(coloana_jv) INTO CURSOR jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = CREATEOBJECT('frm_facturare_articole2')
|
||||
DO Assert WITH VARTYPE(loForm) = 'O', 'Createobject frm_facturare_articole2 (fara Show)'
|
||||
IF VARTYPE(loForm) <> 'O'
|
||||
RETURN 0
|
||||
ENDIF
|
||||
loForm.ndiscfactron = lnDiscRon
|
||||
loForm.ndiscfactval = lnDiscVal
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, tnIdVechi, lnIdFactVechi, lnCod, lnAn, lnLuna)
|
||||
DO Assert WITH VARTYPE(poSnapshotEditare) = 'O', 'instantaneul de editare s-a creat'
|
||||
IF VARTYPE(poSnapshotEditare) <> 'O'
|
||||
TRY
|
||||
loForm.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
*-- modificare de cantitate: singura schimbare care forteaza ruta 1 (regenerare)
|
||||
SELECT crsfactura
|
||||
GO TOP
|
||||
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
||||
DO Assert WITH lnRuta = 1, 'ruta aleasa pentru modificarea de cantitate este 1 (regenerare), e=' + TRANSFORM(lnRuta)
|
||||
IF lnRuta <> 1
|
||||
TRY
|
||||
loForm.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
llRez = loForm.do_scrie_factura()
|
||||
DO Assert WITH llRez, 'do_scrie_factura() a intors .T. pentru reemitere'
|
||||
|
||||
lnIdVNou = 0
|
||||
IF llRez
|
||||
lnIdVNou = NVL(poDate.nid_vanzare, 0)
|
||||
ENDIF
|
||||
DO Assert WITH lnIdVNou > 0, 'poDate.nid_vanzare (OUT) a iesit cu id-ul documentului nou, e=' + TRANSFORM(lnIdVNou)
|
||||
|
||||
TRY
|
||||
loForm.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
DO Inchide WITH 'crsfactura'
|
||||
DO Inchide WITH 'crsarticole_doc'
|
||||
DO Inchide WITH 'crsarticole_editare'
|
||||
DO Inchide WITH 'snap_linii_editare'
|
||||
DO Inchide WITH 'jtva_coloane'
|
||||
poSnapshotEditare = NULL
|
||||
DO Goleste
|
||||
gcCaz = ''
|
||||
RETURN lnIdVNou
|
||||
ENDFUNC
|
||||
|
||||
*==================================================================================
|
||||
* Citeste ID_UTIL/DATAORA/ID_UTILM/DATAORAM pentru un id_vanzare, plus flag-uri NULL distincte
|
||||
* (0/{} nu s-ar distinge de o valoare reala lipsa).
|
||||
FUNCTION CitesteAuditVanzare
|
||||
LPARAMETERS tnIdVanzare, tnIdUtil, tdDataora, tnIdUtilm, tdDataoram, tlUtilmNul, tlDataoramNul
|
||||
tnIdUtil = 0
|
||||
tdDataora = {}
|
||||
tnIdUtilm = 0
|
||||
tdDataoram = {}
|
||||
tlUtilmNul = .F.
|
||||
tlDataoramNul = .F.
|
||||
LOCAL llOk
|
||||
llOk = .F.
|
||||
IF USED('crsAuditS14P4')
|
||||
USE IN crsAuditS14P4
|
||||
ENDIF
|
||||
IF goExecutor.oExecuta([select id_util, dataora, id_utilm, dataoram, ] + ;
|
||||
[case when id_utilm is null then 1 else 0 end as utilmnul, ] + ;
|
||||
[case when dataoram is null then 1 else 0 end as dataoramnul ] + ;
|
||||
[from vanzari where id_vanzare = ] + TRANSFORM(NVL(tnIdVanzare,0)), 'crsAuditS14P4')
|
||||
IF RECCOUNT('crsAuditS14P4') > 0
|
||||
SELECT crsAuditS14P4
|
||||
GO TOP
|
||||
tnIdUtil = NVL(id_util, 0)
|
||||
tdDataora = NVL(dataora, {})
|
||||
tnIdUtilm = NVL(id_utilm, 0)
|
||||
tdDataoram = NVL(dataoram, {})
|
||||
tlUtilmNul = (utilmnul = 1)
|
||||
tlDataoramNul = (dataoramnul = 1)
|
||||
llOk = (tnIdUtil > 0)
|
||||
ENDIF
|
||||
USE IN crsAuditS14P4
|
||||
ENDIF
|
||||
RETURN llOk
|
||||
ENDFUNC
|
||||
|
||||
*==================================================================================
|
||||
* Seteaza cantitatea (zeroita de do_initializeaza_articol pentru tip 1) pe toate liniile din
|
||||
* crsfactura si recalculeaza linia, ca la S5c/S6-1.
|
||||
PROCEDURE SeteazaCantitati
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL loArt
|
||||
SELECT (tcAlias)
|
||||
SCAN
|
||||
REPLACE cantitate WITH gnCantitateAleasa
|
||||
SCATTER NAME loArt MEMO
|
||||
loArt = calculeaza_totaluri(loArt)
|
||||
GATHER NAME loArt MEMO
|
||||
ENDSCAN
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Elibereaza
|
||||
LPARAMETERS toForm
|
||||
IF TYPE('toForm') = 'O' AND !ISNULL(toForm)
|
||||
TRY
|
||||
toForm.Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDIF
|
||||
DO CuratieCrs
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Goleste
|
||||
poDate = NULL
|
||||
poGeneratorNumere = NULL
|
||||
poDateGestiuneDest = NULL
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CuratieCrs
|
||||
DO Inchide WITH 'crsarticole'
|
||||
DO Inchide WITH 'crsarticoleSel'
|
||||
DO Inchide WITH 'crsfactura'
|
||||
DO Inchide WITH 'crscursuri'
|
||||
DO Inchide WITH 'crspolitici'
|
||||
DO Inchide WITH 'crsCtrTemp'
|
||||
DO Inchide WITH 'jtva_coloane'
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Inchide
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
* ultima zi din luna deschisa acoperita de VCURS pentru EURO - cursor_preturi refuza o zi fara curs
|
||||
FUNCTION DataCursValid
|
||||
LOCAL ldRez, lcSql, lnQ, lcUltima
|
||||
ldRez = DATE(gnAn, gnLuna, 1)
|
||||
lcUltima = TRANSFORM(gnAn) + PADL(TRANSFORM(gnLuna), 2, '0') + '01'
|
||||
IF USED('crscurszi')
|
||||
USE IN crscurszi
|
||||
ENDIF
|
||||
lcSql = [select to_char(max(data),'YYYYMMDD') as d from vcurs ] + ;
|
||||
[where upper(nume_val) = 'EURO' and data <= last_day(to_date('] + lcUltima + [','YYYYMMDD'))]
|
||||
lnQ = goExecutor.oExecute(lcSql, 'crscurszi')
|
||||
IF lnQ >= 0 AND USED('crscurszi') AND RECCOUNT('crscurszi') > 0
|
||||
GO TOP IN crscurszi
|
||||
IF !ISNULL(crscurszi.d) AND LEN(ALLTRIM(crscurszi.d)) = 8
|
||||
ldRez = CTOD(SUBSTR(crscurszi.d,7,2) + '/' + SUBSTR(crscurszi.d,5,2) + '/' + SUBSTR(crscurszi.d,1,4))
|
||||
ENDIF
|
||||
ELSE
|
||||
DO S14P4Log WITH ' DataCursValid ESEC: ' + goExecutor.oPrelucrareEroare()
|
||||
ENDIF
|
||||
IF USED('crscurszi')
|
||||
USE IN crscurszi
|
||||
ENDIF
|
||||
RETURN ldRez
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE Assert
|
||||
LPARAMETERS tlCond, tcMsg
|
||||
IF tlCond
|
||||
gnPass = gnPass + 1
|
||||
DO S14P4Log WITH 'PASS: ' + gcCaz + tcMsg
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
DO S14P4Log WITH 'FAIL: ' + gcCaz + tcMsg
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S14P4Log
|
||||
LPARAMETERS tcMsg
|
||||
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S14P4Err
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
gnErr = gnErr + 1
|
||||
DO S14P4Log WITH 'ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE S14P4Final
|
||||
LOCAL lnI
|
||||
IF TYPE('_SCREEN.tmrS14P4') = 'O'
|
||||
_SCREEN.tmrS14P4.Enabled = .F.
|
||||
TRY
|
||||
_SCREEN.RemoveObject('tmrS14P4')
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDIF
|
||||
*-- formele ramase deschise arunca "Unhandled Structured Exception" la QUIT (rulare atarnata),
|
||||
*-- deci se inchid explicit inainte
|
||||
FOR lnI = _SCREEN.FormCount TO 1 STEP -1
|
||||
TRY
|
||||
_SCREEN.Forms(lnI).Release()
|
||||
CATCH
|
||||
ENDTRY
|
||||
ENDFOR
|
||||
*-- registrul numerelor SSS direct din baza: singura sursa care spune care numar e SCRIS si
|
||||
*-- care e ARS (alocat si nescris)
|
||||
TRY
|
||||
IF TYPE('goExecutor') = 'O' AND goExecutor.oExecute([select numar_act, id_vanzare, tip from vanzari ] + ;
|
||||
[where sters = 0 and serie_act = 'SSS' and numar_act between 640 and 750 order by numar_act], 'crsNrSSS') >= 0
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + 'REGISTRU SSS in VANZARI (640-750):'
|
||||
SELECT crsNrSSS
|
||||
SCAN
|
||||
DO S14P4Log WITH ' SSS ' + TRANSFORM(numar_act) + ' -> id_vanzare=' + TRANSFORM(id_vanzare) + ' tip=' + TRANSFORM(tip)
|
||||
ENDSCAN
|
||||
USE IN crsNrSSS
|
||||
ENDIF
|
||||
CATCH
|
||||
ENDTRY
|
||||
DO S14P4Log WITH CHR(13) + CHR(10) + 'NUMERE: ' + gcNumere
|
||||
DO S14P4Log WITH 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail) + ' err=' + TRANSFORM(gnErr)
|
||||
DO S14P4Log WITH 'END ' + TTOC(DATETIME())
|
||||
DO HarnessDone WITH 'done'
|
||||
QUIT
|
||||
ENDPROC
|
||||
|
||||
*==================================================================================
|
||||
* driverS14P4: apasa automat pe formele modale care nu trec prin functia amessagebox -
|
||||
* MESSAGEBOX_FORM (cmdYes/cmdOk) si FRM_ALTE_DATE de pe v1 (do_termin, NU Release).
|
||||
DEFINE CLASS driverS14P4 AS Custom
|
||||
nUltimAlteDate = 0
|
||||
lBusy = .F.
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
IF TYPE('_SCREEN.tmrS14P4') = 'O'
|
||||
_SCREEN.tmrS14P4.Enabled = .F.
|
||||
ENDIF
|
||||
TRY
|
||||
LOCAL lnI, loMsgForm, loAlteDate, lcClasa
|
||||
loMsgForm = NULL
|
||||
loAlteDate = NULL
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
lcClasa = UPPER(_SCREEN.Forms(lnI).Class)
|
||||
IF 'MESSAGEBOX_FORM' $ lcClasa
|
||||
loMsgForm = _SCREEN.Forms(lnI)
|
||||
ENDIF
|
||||
IF lcClasa == 'FRM_ALTE_DATE'
|
||||
loAlteDate = _SCREEN.Forms(lnI)
|
||||
ENDIF
|
||||
IF !(lcClasa $ gcClaseVazute)
|
||||
gcClaseVazute = gcClaseVazute + lcClasa + ';'
|
||||
DO S14P4Log WITH ' [diag timer] forma noua: ' + lcClasa + ' Caption=[' + TRANSFORM(_SCREEN.Forms(lnI).Caption) + ']'
|
||||
ENDIF
|
||||
ENDFOR
|
||||
IF !ISNULL(loMsgForm)
|
||||
TRY
|
||||
LOCAL lcTextMsg
|
||||
lcTextMsg = ''
|
||||
TRY
|
||||
lcTextMsg = ALLTRIM(TRANSFORM(loMsgForm.edtMensaje.Value))
|
||||
CATCH
|
||||
ENDTRY
|
||||
DO S14P4Log WITH ' [driver msg] mesaj=[' + STRTRAN(lcTextMsg, CHR(13) + CHR(10), ' ') + ']'
|
||||
DO CASE
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
||||
DO S14P4Log WITH ' [driver msg] apas cmgBotones.cmdYes'
|
||||
loMsgForm.cmgBotones.cmdYes.Click()
|
||||
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
||||
DO S14P4Log WITH ' [driver msg] apas cmgBotones.cmdOk'
|
||||
loMsgForm.cmgBotones.cmdOk.Click()
|
||||
ENDCASE
|
||||
CATCH TO loExcMsg
|
||||
DO S14P4Log WITH ' [driver msg] CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
||||
ENDTRY
|
||||
ELSE
|
||||
IF !ISNULL(loAlteDate) AND (SECONDS() - This.nUltimAlteDate > 1)
|
||||
This.nUltimAlteDate = SECONDS()
|
||||
TRY
|
||||
DO S14P4Log WITH ' [driver alte_date] apas do_termin() pe FRM_ALTE_DATE (id_delegat=' + ;
|
||||
TRANSFORM(NVL(poDate.id_delegat, 0)) + ')'
|
||||
loAlteDate.do_termin()
|
||||
CATCH TO loExcAD
|
||||
DO S14P4Log WITH ' [driver alte_date] CATCH ' + TRANSFORM(loExcAD.ErrorNo) + ' ' + loExcAD.Message
|
||||
ENDTRY
|
||||
ENDIF
|
||||
ENDIF
|
||||
CATCH TO loExcTop
|
||||
DO S14P4Log WITH ' [driver] CATCH TOP-LEVEL ' + TRANSFORM(loExcTop.ErrorNo) + ' ' + loExcTop.Message
|
||||
FINALLY
|
||||
IF TYPE('_SCREEN.tmrS14P4') = 'O'
|
||||
_SCREEN.tmrS14P4.Enabled = .T.
|
||||
ENDIF
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -0,0 +1,16 @@
|
||||
# test_s14_neregresie_emitere_noua.ps1 - wrapper peste harness-ul generic (vfp_ui_harness.ps1) pentru
|
||||
# test_s14_neregresie_emitere_noua.prg (S14, proba 4: neregresie pe calea de emitere noua).
|
||||
# Rulare VIZIBILA (vfp9 -A, fereastra impinsa off-screen de harness), NU -A -T: sub -A -T
|
||||
# coloanele de grid nu se materializeaza si FRM_ALTE_DATE (Show(1)) ar bloca rularea.
|
||||
# Rulare: powershell -ExecutionPolicy Bypass -File test_s14_neregresie_emitere_noua.ps1 (timeout >= 400s)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$Teste = $PSScriptRoot
|
||||
Get-ChildItem -Path $Teste -Filter '*.FXP' -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue
|
||||
Get-ChildItem -Path $Teste -Filter '*.fxp' -ErrorAction SilentlyContinue | Remove-Item -Force -ErrorAction SilentlyContinue
|
||||
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
|
||||
-TestPrg (Join-Path $Teste 'test_s14_neregresie_emitere_noua.prg') `
|
||||
-Steps @('env_gata','d0_emis','d1_reemis','d2_emis_si_verificat') `
|
||||
-StepTimeoutSec 150 `
|
||||
-ReadyTimeoutSec 180 `
|
||||
-SyncDir (Join-Path $Teste 'uisync_s14p4') `
|
||||
-ShotsDir (Join-Path $Teste 'screenshots_s14p4')
|
||||
@@ -55,7 +55,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
@@ -49,7 +49,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
*-- mock amessagebox incarcat PRIMUL, inaintea lantului real (la nume duplicat castiga primul gasit)
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
@@ -60,7 +60,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
@@ -47,7 +47,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
*-- mock amessagebox incarcat PRIMUL, inaintea lantului real (la nume duplicat castiga primul gasit)
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
@@ -43,7 +43,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
*!* fisierul cautat PRIMUL, deci trebuie deschis inaintea lantului din test_init_env_auto
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
@@ -34,7 +34,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
130
utile/Teste/editare_factura/test_s7_urmasi.prg
Normal file
130
utile/Teste/editare_factura/test_s7_urmasi.prg
Normal file
@@ -0,0 +1,130 @@
|
||||
* test_s7_urmasi.prg
|
||||
* Verifica DocumentAreUrmasi (ofacturare_editare.prg), functie noua S7: interogare read-only
|
||||
* pe VANZARI_CORESP, aceeasi conditie citita de pack_facturare.sterge_factura, dar mai devreme.
|
||||
* Documente reale, gasite prin interogare (nu inventate): un aviz cu factura emisa din el
|
||||
* (id_vanzare_aviz dintr-un rand TIP=1), un aviz fara nicio corespondenta, si o factura cu
|
||||
* retur emis pe ea (id_vanzare_aviz dintr-un rand TIP=3). Nu scrie in Oracle - doar SELECT.
|
||||
* Verifica de asemenea ca Createobject('frm_facturi') compileaza clasa dupa adaugarea metodei
|
||||
* noi do_editare_unificata (fara Show() - doar proba de compilare/instantiere).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s7_urmasi_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
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', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul -
|
||||
*!* mock-ul se pune in fata listei existente, altfel amessagebox() real blocheaza headless
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
*!* --- control direct pe DocumentAreUrmasi, fara formular ---
|
||||
*!* id_vanzare=664: aviz cu factura emisa din el (vanzari_coresp.tip=1) -> are urmasi
|
||||
DO asserteaza WITH 'DocumentAreUrmasi(664) = .T. (aviz cu factura emisa)', DocumentAreUrmasi(664), TRANSFORM(DocumentAreUrmasi(664))
|
||||
|
||||
*!* id_vanzare=1061: aviz fara nicio corespondenta in vanzari_coresp -> fara urmasi
|
||||
DO asserteaza WITH 'DocumentAreUrmasi(1061) = .F. (aviz fara corespondenta)', !DocumentAreUrmasi(1061), TRANSFORM(DocumentAreUrmasi(1061))
|
||||
|
||||
*!* id_vanzare=622: factura cu retur emis pe ea (vanzari_coresp.tip=3) -> are urmasi
|
||||
DO asserteaza WITH 'DocumentAreUrmasi(622) = .T. (factura cu retur emis)', DocumentAreUrmasi(622), TRANSFORM(DocumentAreUrmasi(622))
|
||||
|
||||
DO asserteaza WITH 'DocumentAreUrmasi(0) = .F. (id inexistent)', !DocumentAreUrmasi(0), TRANSFORM(DocumentAreUrmasi(0))
|
||||
|
||||
*!* --- proba de traseu real: crsfacturi construit exact ca in oproceduri_facturare.vizualizare_facturi,
|
||||
*!* filtrat pe cele 3 documente reale de mai sus (nu pe luna curenta - ele pot fi din alta luna) ---
|
||||
Private poFacturi
|
||||
poFacturi = Null
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare in (664, 622, 1061)]
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
DO asserteaza WITH 'crsfacturi incarcat cu cele 3 documente reale (rownum=3)', Used('crsfacturi') AND Reccount('crsfacturi') = 3, IIF(Used('crsfacturi'), TRANSFORM(Reccount('crsfacturi')), 'crsfacturi lipsa')
|
||||
|
||||
LOCAL loFrm
|
||||
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
|
||||
DO asserteaza WITH 'Newobject(frm_facturi) reuseste dupa adaugarea metodei noi, cu crsfacturi real deschis', Vartype(m.loFrm) == 'O', Vartype(m.loFrm)
|
||||
IF Vartype(m.loFrm) == 'O'
|
||||
DO asserteaza WITH 'frm_facturi.ClassLibrary e fisierul editat (nu alt produs)', Upper(loFrm.ClassLibrary) == Upper('D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx'), loFrm.ClassLibrary
|
||||
DO asserteaza WITH 'metoda noua do_editare_unificata exista pe obiect (PEMSTATUS)', Pemstatus(m.loFrm, 'do_editare_unificata', 5), ''
|
||||
|
||||
*!* id_vanzare=664: aviz cu urmasi -> proba ca traseul complet (garzile) ruleaza fara eroare VFP
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = 664
|
||||
IF Found()
|
||||
loFrm.do_editare_unificata()
|
||||
STRTOFILE('do_editare_unificata(664): lactiv3=' + Transform(loFrm.lactiv3) + ' mesaj mock=[' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
DO asserteaza WITH 'do_editare_unificata(664) ruleaza fara eroare VFP necaptata (mock a primit un mesaj sau lactiv3=.F.)', !Empty(gcMockUltimMesaj) OR !loFrm.lactiv3, gcMockUltimMesaj
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
540
utile/Teste/editare_factura/test_s8_base_triaj.prg
Normal file
540
utile/Teste/editare_factura/test_s8_base_triaj.prg
Normal file
@@ -0,0 +1,540 @@
|
||||
* test_s8_pas7_cablare.prg
|
||||
* Verifica pasul 7 din docs\propunere_s8_incarcare.md §6: cablarea celei de-a treia optiuni de
|
||||
* meniu si corpul real al lui frm_facturi.do_editare_unificata (COMUN\clase\ofacturare_comun.vc2).
|
||||
* Traseul REAL: Newobject('frm_facturi') + .do_editare_unificata() (nu Createobject direct pe
|
||||
* frm_facturare_articole2 - asta ar proba doar codul formularului, nu rutarea).
|
||||
* Documente reale, in luna curenta a calendarului (gnAn/gnLuna), care trec toate garzile
|
||||
* (nesters, ne-eproforma, tip valid, fara referinte, fara urmasi, ne-eFactura), gasite prin
|
||||
* interogare read-only pe MARIUSM_AUTO:
|
||||
* 1113 - sursa COMANDA (tip=3, id_comanda=2479)
|
||||
* 1055 - sursa CONTRACT (tip=2, id_ctr=234)
|
||||
* 1048 - factura SIMPLA, lista de preturi (tip=1, fara comanda/ctr)
|
||||
* 1130 - VALUTA (tip=5, in_valuta=1)
|
||||
* Nu scrie in Oracle - doar SELECT; verifica ca formularul deschis nici el nu scrie
|
||||
* (G8: dataoras/id_utils neschimbate pe VANZARI/VANZARI_DETALII).
|
||||
*
|
||||
* frm_facturare_articole2 (ofacturare.vc2:15894) nu suprascrie WindowType, iar _frm_base il
|
||||
* seteaza pe 1 = modal - .Show() blocheaza pana la inchiderea ferestrei, headless nu are cine
|
||||
* sa o inchida in mod normal. Solutie: driverS8p7 (Custom, BINDEVENT pe un Timer de pe _SCREEN,
|
||||
* acelasi tipar ca driverMsgS8 din test_s8_cablare_incarcare.prg) - un modal inca pompeaza
|
||||
* mesaje Windows, deci timerul tot mai ruleaza in interiorul lui .Show(); cand gaseste forma
|
||||
* deschisa ii citeste prezenta/eticheta lui Ct_clb_altele (din colectia Objects, nu PEMSTATUS -
|
||||
* RemoveObject scoate din Objects dar PEMSTATUS ramane .T., vezi memoria pemstatus-dupa-
|
||||
* removeobject) si o elibereaza, ceea ce incheie .Show() si intoarce controlul in
|
||||
* do_editare_unificata, apoi in acest test. Nu modifica NIMIC in codul de productie.
|
||||
*
|
||||
* Extindere S8 (blocarea grupurilor B si C la editare, docs\raport_s8_grup_bc.md): driverS8p7
|
||||
* citeste in plus, din Objects, starea needitabila a controalelor clb_fdoc.cboFdoc, Ct_clb_altele,
|
||||
* Ct_clb_nume_client, Ct_clb_valuta, Clb_zi_curs, ct_contabilitate.Ct_clb_gestiune_init,
|
||||
* Ct_clb_politici_preturi, but_incarca_articole, but_cursuri, ct_incasare, chk_incasare - fiecare
|
||||
* verificat doar daca e prezent (unele sunt scoase de Init in functie de tip/gnScadereStoc,
|
||||
* independent de lEditare). Proba de neregresie pe document nou (VerificaDocumentNou) NU trece
|
||||
* prin factureaza()/poGeneratorNumere (interzis, arde numere) - construieste poDate manual cu
|
||||
* Createobject('oDateFactura',0,0) (Init nu ruleaza, ramane pe defaults, lEditare=.F. ca la orice
|
||||
* document nou) si instantiaza formularul direct cu Newobject, FARA .Show() (Init ruleaza oricum
|
||||
* la construire; fara Show() nu exista blocaj modal, deci nu e nevoie de driver aici).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_base_triaj_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul -
|
||||
*!* mock-ul se pune in fata listei existente, altfel amessagebox() real blocheaza headless
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
*!* --- driver care inchide fereastra modala frm_facturare_articole2, vezi antetul fisierului ---
|
||||
PUBLIC goDriverS8p7
|
||||
goDriverS8p7 = Createobject('driverS8p7')
|
||||
_SCREEN.AddObject('tmrS8p7', 'Timer')
|
||||
_SCREEN.tmrS8p7.Interval = 150
|
||||
Bindevent(_SCREEN.tmrS8p7, 'Timer', goDriverS8p7, 'Executa')
|
||||
_SCREEN.tmrS8p7.Enabled = .T.
|
||||
|
||||
*!* --- verificare statica: corpul do_editare_unificata nu contine nicio referinta la alocarea
|
||||
*!* de numere (factureaza/poGeneratorNumere/creeaza_cursor_serii) ---
|
||||
LOCAL lcSrc, lcTail, lnStart, lnEnd, lcMetoda
|
||||
lcSrc = FILETOSTR('D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vc2')
|
||||
lnStart = AT('PROCEDURE do_editare_unificata' + CHR(13) + CHR(10), lcSrc)
|
||||
DO asserteaza WITH 'static: metoda do_editare_unificata gasita in sursa', lnStart > 0, TRANSFORM(lnStart)
|
||||
IF lnStart > 0
|
||||
lcTail = SUBSTR(lcSrc, lnStart)
|
||||
lnEnd = AT('ENDPROC', lcTail)
|
||||
lcMetoda = UPPER(SUBSTR(lcTail, 1, lnEnd + 6))
|
||||
DO asserteaza WITH 'static G2: fara FACTUREAZA( in do_editare_unificata', 'FACTUREAZA(' $ lcMetoda = .F., ''
|
||||
DO asserteaza WITH 'static G2: fara POGENERATORNUMERE in do_editare_unificata', 'POGENERATORNUMERE' $ lcMetoda = .F., ''
|
||||
DO asserteaza WITH 'static G2: fara CREEAZA_CURSOR_SERII in do_editare_unificata', 'CREEAZA_CURSOR_SERII' $ lcMetoda = .F., ''
|
||||
ENDIF
|
||||
|
||||
*!* --- crsfacturi, exact ca in oproceduri_facturare.vizualizare_facturi, pe cele 4 documente ---
|
||||
Private poFacturi
|
||||
poFacturi = Null
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare in (1113, 1055, 1048, 1130)]
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
DO asserteaza WITH 'crsfacturi incarcat cu cele 4 documente reale (rownum=4)', Used('crsfacturi') AND Reccount('crsfacturi') = 4, IIF(Used('crsfacturi'), TRANSFORM(Reccount('crsfacturi')), 'crsfacturi lipsa')
|
||||
|
||||
*!* Ct_clb_altele (infirmare §3.2, vezi raport): document CU sursa -> prezent, etichetat din
|
||||
*!* poDate.tip; factura SIMPLA -> absent, identic cu introducerea unei facturi noi (G10).
|
||||
DO VerificaEditare WITH 1113, 'sursa comanda', .T., 'Nr. comanda'
|
||||
DO VerificaEditare WITH 1055, 'sursa contract', .T., 'Nr. contract'
|
||||
DO VerificaEditare WITH 1048, 'factura simpla', .F., ''
|
||||
DO VerificaEditare WITH 1130, 'valuta', .F., ''
|
||||
|
||||
_SCREEN.tmrS8p7.Enabled = .F.
|
||||
Try
|
||||
_SCREEN.RemoveObject('tmrS8p7')
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
*!* --- S8 grupurile B/C: neregresie pe document NOU (docs\raport_s8_grup_bc.md) ---
|
||||
DO VerificaDocumentNou
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE VerificaEditare
|
||||
LPARAMETERS tnIdVanzare, tcEticheta, tlCtClbAsteptat, tcCtClbEtichetaAsteptata
|
||||
|
||||
LOCAL lcPrefix, lnSucces, loFrm, lnI, llGasitForm
|
||||
LOCAL lcSnapPlajeA, lcSnapPlajeB, lcSnapDetA, lcSnapDetB
|
||||
LOCAL ltDataorasVanzareA, lnIdUtilsVanzareA
|
||||
lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']'
|
||||
gcMockUltimMesaj = ''
|
||||
|
||||
*!* --- G2: snapshot generator de numere, INAINTE ---
|
||||
IF Used('v_plaje_a')
|
||||
Use In v_plaje_a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_a')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeA = CursorToSnapshot('v_plaje_a')
|
||||
Use In v_plaje_a
|
||||
|
||||
*!* --- G8: snapshot dataoras/id_utils, INAINTE ---
|
||||
IF Used('v_g8a')
|
||||
Use In v_g8a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select dataoras, id_utils from vanzari where id_vanzare = ] + Transform(m.tnIdVanzare), 'v_g8a')
|
||||
goExecutor.oReset()
|
||||
DO asserteaza WITH lcPrefix + ': martor G8 antet Oracle a reusit', lnSucces >= 0 AND Used('v_g8a') AND Reccount('v_g8a') = 1, Transform(lnSucces)
|
||||
ltDataorasVanzareA = v_g8a.dataoras
|
||||
lnIdUtilsVanzareA = Nvl(v_g8a.id_utils, 0)
|
||||
Use In v_g8a
|
||||
|
||||
IF Used('v_g8d_a')
|
||||
Use In v_g8d_a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_vanzare_det, dataoras, id_utils from vanzari_detalii where id_vanzare = ] + Transform(m.tnIdVanzare) + [ order by id_vanzare_det], 'v_g8d_a')
|
||||
goExecutor.oReset()
|
||||
lcSnapDetA = CursorToSnapshot('v_g8d_a')
|
||||
Use In v_g8d_a
|
||||
|
||||
*!* --- codul testat: traseul real, prin frm_facturi.do_editare_unificata ---
|
||||
*!* Init-ul clasei presupune crsfacturi ca zona curenta (la fel ca in test_s7_urmasi.prg) -
|
||||
*!* interogarile martor de mai sus au schimbat zona curenta intre timp, se restaureaza aici
|
||||
Select crsfacturi
|
||||
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
|
||||
DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', Vartype(m.loFrm) == 'O', Vartype(m.loFrm)
|
||||
IF Vartype(m.loFrm) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = m.tnIdVanzare
|
||||
DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', Found(), Transform(Found())
|
||||
IF !Found()
|
||||
loFrm.Release()
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* --- driverS8p7 gaseste si inchide formularul unificat (FARA but_termin1.Click()), vezi
|
||||
*!* antetul fisierului; .do_editare_unificata() nu revine decat dupa ce fereastra s-a inchis ---
|
||||
goDriverS8p7.Reseteaza()
|
||||
loFrm.do_editare_unificata()
|
||||
|
||||
DO asserteaza WITH lcPrefix + ': formularul unificat s-a deschis (traseul direct, fara factureaza())', goDriverS8p7.lGasit, Transform(goDriverS8p7.lGasit)
|
||||
|
||||
*!* --- Ct_clb_altele: prezenta citita din colectia Objects a formularului, cat timp era deschis
|
||||
*!* (infirmarea §3.2 - vezi raport) ---
|
||||
DO asserteaza WITH lcPrefix + ': Ct_clb_altele prezenta = ' + Iif(m.tlCtClbAsteptat, 'prezent', 'absent'), ;
|
||||
goDriverS8p7.lCtClbPrezent == m.tlCtClbAsteptat, Transform(goDriverS8p7.lCtClbPrezent)
|
||||
IF m.tlCtClbAsteptat
|
||||
DO asserteaza WITH lcPrefix + ': Ct_clb_altele eticheta = [' + m.tcCtClbEtichetaAsteptata + ']', ;
|
||||
Upper(goDriverS8p7.cCtClbEticheta) == Upper(m.tcCtClbEtichetaAsteptata), goDriverS8p7.cCtClbEticheta
|
||||
ENDIF
|
||||
*!* --- grupul B si C (S8, decizia 25): needitabile la editare, verificate doar cand controlul
|
||||
*!* mai exista (unele sunt scoase de Init dupa tip/gnScadereStoc, independent de lEditare) ---
|
||||
DO VerificaBlocajGrupBC WITH m.lcPrefix
|
||||
|
||||
*!* --- G5: totalul afisat de do_calculeaza_totaluri (chemat inainte de Show, in do_editare_unificata)
|
||||
*!* ramane egal cu totalul deja scris in VANZARI - prinde o reevaluare tacita a cursului/preturilor ---
|
||||
Select crsfacturi
|
||||
IF Nvl(crsfacturi.in_valuta, 0) = 1
|
||||
DO asserteaza WITH lcPrefix + ' G5: total afisat (valuta) = VANZARI.totval', ;
|
||||
Round(goDriverS8p7.nTotalVal, 2) == Round(Nvl(crsfacturi.totval, 0), 2), Transform(goDriverS8p7.nTotalVal) + ' vs ' + Transform(crsfacturi.totval)
|
||||
ELSE
|
||||
DO asserteaza WITH lcPrefix + ' G5: total afisat (lei) = VANZARI.total_cu_tva', ;
|
||||
Round(goDriverS8p7.nTotalRon, 2) == Round(Nvl(crsfacturi.total_cu_tva, 0), 2), Transform(goDriverS8p7.nTotalRon) + ' vs ' + Transform(crsfacturi.total_cu_tva)
|
||||
ENDIF
|
||||
|
||||
loFrm.Release()
|
||||
|
||||
*!* --- G9: niciun dialog modal la deschidere ---
|
||||
DO asserteaza WITH lcPrefix + ' G9: niciun amessagebox la deschidere', Empty(gcMockUltimMesaj), gcMockUltimMesaj
|
||||
|
||||
*!* --- G2: snapshot generator de numere, DUPA - identic caracter cu caracter ---
|
||||
IF Used('v_plaje_b')
|
||||
Use In v_plaje_b
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_b')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeB = CursorToSnapshot('v_plaje_b')
|
||||
Use In v_plaje_b
|
||||
DO asserteaza WITH lcPrefix + ' G2: vplaje_numere identic inainte/dupa (niciun numar alocat)', m.lcSnapPlajeA == m.lcSnapPlajeB, ''
|
||||
|
||||
*!* --- G8: dataoras/id_utils neschimbate pe VANZARI si VANZARI_DETALII ---
|
||||
IF Used('v_g8a2')
|
||||
Use In v_g8a2
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select dataoras, id_utils from vanzari where id_vanzare = ] + Transform(m.tnIdVanzare), 'v_g8a2')
|
||||
goExecutor.oReset()
|
||||
*!* Nvl pe TTOC: dataoras e NULL pe documentele de test - NULL == NULL da .NULL. in VFP (nu .T.),
|
||||
*!* fals negativ fara el
|
||||
DO asserteaza WITH lcPrefix + ' G8: VANZARI.dataoras neschimbat', ;
|
||||
Nvl(Ttoc(v_g8a2.dataoras), 'NULL') == Nvl(Ttoc(m.ltDataorasVanzareA), 'NULL'), Nvl(Ttoc(v_g8a2.dataoras), 'NULL')
|
||||
DO asserteaza WITH lcPrefix + ' G8: VANZARI.id_utils neschimbat', Nvl(v_g8a2.id_utils, 0) == m.lnIdUtilsVanzareA, Transform(Nvl(v_g8a2.id_utils, 0))
|
||||
Use In v_g8a2
|
||||
|
||||
IF Used('v_g8d_b')
|
||||
Use In v_g8d_b
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_vanzare_det, dataoras, id_utils from vanzari_detalii where id_vanzare = ] + Transform(m.tnIdVanzare) + [ order by id_vanzare_det], 'v_g8d_b')
|
||||
goExecutor.oReset()
|
||||
lcSnapDetB = CursorToSnapshot('v_g8d_b')
|
||||
Use In v_g8d_b
|
||||
DO asserteaza WITH lcPrefix + ' G8: VANZARI_DETALII dataoras/id_utils identice (nicio scriere)', m.lcSnapDetA == m.lcSnapDetB, ''
|
||||
|
||||
*!* --- G11 partial: fara nicio scriere pe VANZARI_DETALII (G8), nu s-a putut genera nicio miscare
|
||||
*!* de stoc noua pe acest document; nu masoara direct un tabel de stoc - proba indirecta, partiala ---
|
||||
DO asserteaza WITH lcPrefix + ' G11 partial (derivat din G8): nicio scriere pe VANZARI_DETALII => stoc agregat neschimbat pe acest document', m.lcSnapDetA == m.lcSnapDetB, ''
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* S8 - blocarea grupurilor B si C la editare (docs\raport_s8_grup_bc.md). Citeste starea deja
|
||||
*!* capturata de goDriverS8p7 (formularul e inchis pana aici) si asearta doar cand controlul e
|
||||
*!* prezent - unele sunt scoase de Init dupa tip/gnScadereStoc, independent de lEditare.
|
||||
PROCEDURE VerificaBlocajGrupBC
|
||||
LPARAMETERS tcPrefix
|
||||
|
||||
IF goDriverS8p7.lCtClbPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_altele (sursa) needitabil', !goDriverS8p7.lCtClbAlteleActiv, Transform(goDriverS8p7.lCtClbAlteleActiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH tcPrefix + ' grupB: clb_fdoc.cboFdoc (tip document) needitabil', ;
|
||||
goDriverS8p7.lClbFdocPrezent AND !goDriverS8p7.lClbFdocActiv, Transform(goDriverS8p7.lClbFdocActiv)
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_nume_client (client) needitabil', ;
|
||||
goDriverS8p7.lCtClbNumeClientPrezent AND !goDriverS8p7.lCtClbNumeClientActiv, Transform(goDriverS8p7.lCtClbNumeClientActiv)
|
||||
IF goDriverS8p7.lCtClbValutaPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_valuta needitabil', !goDriverS8p7.lCtClbValutaActiv, Transform(goDriverS8p7.lCtClbValutaActiv)
|
||||
ENDIF
|
||||
IF goDriverS8p7.lClbZiCursPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Clb_zi_curs needitabil', !goDriverS8p7.lClbZiCursActiv, Transform(goDriverS8p7.lClbZiCursActiv)
|
||||
ENDIF
|
||||
IF goDriverS8p7.lCtClbGestiuneInitPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_gestiune_init (gestiune sursa) needitabil', !goDriverS8p7.lCtClbGestiuneInitActiv, Transform(goDriverS8p7.lCtClbGestiuneInitActiv)
|
||||
ENDIF
|
||||
IF goDriverS8p7.lCtClbPolPreturiPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_politici_preturi needitabil', !goDriverS8p7.lCtClbPolPreturiActiv, Transform(goDriverS8p7.lCtClbPolPreturiActiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH tcPrefix + ' grupB: but_incarca_articole needitabil (G2: evita poGeneratorNumere.verifica_numar)', ;
|
||||
goDriverS8p7.lButIncarcaArticolePrezent AND !goDriverS8p7.lButIncarcaArticoleActiv, Transform(goDriverS8p7.lButIncarcaArticoleActiv)
|
||||
DO asserteaza WITH tcPrefix + ' grupB: but_cursuri needitabil', ;
|
||||
goDriverS8p7.lButCursuriPrezent AND !goDriverS8p7.lButCursuriActiv, Transform(goDriverS8p7.lButCursuriActiv)
|
||||
IF goDriverS8p7.lCtIncasarePrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupC: ct_incasare needitabil', !goDriverS8p7.lCtIncasareActiv, Transform(goDriverS8p7.lCtIncasareActiv)
|
||||
DO asserteaza WITH tcPrefix + ' grupC: chk_incasare needitabil', goDriverS8p7.lChkIncasarePrezent AND !goDriverS8p7.lChkIncasareActiv, Transform(goDriverS8p7.lChkIncasareActiv)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* S8 - neregresie: pe document NOU, grupurile B/C raman editabile (docs\raport_s8_grup_bc.md).
|
||||
*!* NU trece prin factureaza()/poGeneratorNumere (interzis - arde numere din plaje reale). poDate
|
||||
*!* construit manual cu Createobject('oDateFactura',0,0): Init-ul clasei NU ruleaza (tnIdSet=0),
|
||||
*!* deci ramane pe defaults din PropValue - inclusiv lEditare=.F., exact ca la orice document nou
|
||||
*!* (vezi si test_s8_pas3_garda_alte_date.prg, acelasi tipar). tip=3 (comanda) e ales ca sa
|
||||
*!* pastreze Ct_clb_altele si Ct_clb_nume_client prezente (paralel cu documentul 1113 de mai sus);
|
||||
*!* nu are cursul din zi (citeste_cursuri_zi nu se cheama pentru tip=3), deci fara SELECT Oracle.
|
||||
*!* Instantiat direct cu Newobject, FARA .Show() - Init ruleaza oricum la construire, iar fara
|
||||
*!* Show() nu exista blocajul modal (WindowType=1 conteaza doar cand se cheama .Show()), deci nu e
|
||||
*!* nevoie de driverS8p7 aici.
|
||||
PROCEDURE VerificaDocumentNou
|
||||
PRIVATE poDate
|
||||
LOCAL loForm
|
||||
|
||||
poDate = Createobject('oDateFactura', 0, 0)
|
||||
poDate.tip = 3
|
||||
poDate.id_client = 0
|
||||
poDate.incasat = 0
|
||||
|
||||
loForm = Newobject('frm_facturare_articole2', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vcx')
|
||||
DO asserteaza WITH 'document nou: Newobject(frm_facturare_articole2) reuseste (fara Show, fara factureaza)', Vartype(m.loForm) == 'O', Vartype(m.loForm)
|
||||
IF Vartype(m.loForm) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO asserteaza WITH 'document nou: poDate.lEditare = .F. (stare naturala, nesetata de nimeni)', !poDate.lEditare, Transform(poDate.lEditare)
|
||||
|
||||
IF loForm.do_exista_obiect('Ct_clb_altele')
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_altele ramane editabil', loForm.Ct_clb_altele.lactiv, Transform(loForm.Ct_clb_altele.lactiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH 'document nou grupB: clb_fdoc.cboFdoc ramane editabil', loForm.clb_fdoc.cboFdoc.Enabled, Transform(loForm.clb_fdoc.cboFdoc.Enabled)
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_nume_client ramane editabil', loForm.Ct_clb_nume_client.lactiv, Transform(loForm.Ct_clb_nume_client.lactiv)
|
||||
IF loForm.do_exista_obiect('Ct_clb_valuta')
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_valuta ramane editabil', loForm.Ct_clb_valuta.lactiv, Transform(loForm.Ct_clb_valuta.lactiv)
|
||||
ENDIF
|
||||
IF loForm.do_exista_obiect('Clb_zi_curs')
|
||||
DO asserteaza WITH 'document nou grupB: Clb_zi_curs ramane editabil', !loForm.Clb_zi_curs.text_simplu1.ReadOnly, Transform(loForm.Clb_zi_curs.text_simplu1.ReadOnly)
|
||||
ENDIF
|
||||
IF loForm.do_exista_obiect('Ct_clb_gestiune_init', loForm.ct_contabilitate)
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_gestiune_init ramane editabil', loForm.ct_contabilitate.Ct_clb_gestiune_init.lactiv, Transform(loForm.ct_contabilitate.Ct_clb_gestiune_init.lactiv)
|
||||
ENDIF
|
||||
IF loForm.do_exista_obiect('Ct_clb_politici_preturi')
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_politici_preturi ramane editabil', loForm.Ct_clb_politici_preturi.lactiv, Transform(loForm.Ct_clb_politici_preturi.lactiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH 'document nou grupB: but_incarca_articole ramane editabil', loForm.but_incarca_articole.Enabled, Transform(loForm.but_incarca_articole.Enabled)
|
||||
DO asserteaza WITH 'document nou grupB: but_cursuri ramane editabil', loForm.but_cursuri.Enabled, Transform(loForm.but_cursuri.Enabled)
|
||||
IF loForm.do_exista_obiect('ct_incasare')
|
||||
DO asserteaza WITH 'document nou grupC: ct_incasare ramane editabil', loForm.ct_incasare.Enabled, Transform(loForm.ct_incasare.Enabled)
|
||||
DO asserteaza WITH 'document nou grupC: chk_incasare ramane editabil', loForm.chk_incasare.Enabled, Transform(loForm.chk_incasare.Enabled)
|
||||
ENDIF
|
||||
|
||||
loForm.Release()
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE CursorToSnapshot
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcResult, lnI
|
||||
lcResult = ''
|
||||
SELECT (m.tcAlias)
|
||||
SCAN
|
||||
FOR lnI = 1 TO FCOUNT()
|
||||
lcResult = lcResult + Transform(Evaluate(Field(m.lnI))) + '|'
|
||||
ENDFOR
|
||||
lcResult = lcResult + Chr(10)
|
||||
ENDSCAN
|
||||
RETURN m.lcResult
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + Transform(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
|
||||
|
||||
*!* driverS8p7: gaseste FRM_FACTURARE_ARTICOLE2 in _SCREEN.Forms in timp ce .Show() e blocat pe
|
||||
*!* modal (un modal tot pompeaza mesaje Windows, deci timerul de pe _SCREEN tot ruleaza - acelasi
|
||||
*!* tipar ca driverMsgS8 din test_s8_cablare_incarcare.prg, folosit acolo pentru MESSAGEBOX_FORM).
|
||||
*!* Citeste Ct_clb_altele din Objects (nu PEMSTATUS - RemoveObject scoate din Objects, PEMSTATUS
|
||||
*!* ramane .T.) inainte sa elibereze forma, ceea ce incheie .Show() si reda controlul apelantului.
|
||||
DEFINE CLASS driverS8p7 AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
lCtClbPrezent = .F.
|
||||
lCtClbAlteleActiv = .F.
|
||||
cCtClbEticheta = ''
|
||||
nTotalRon = 0
|
||||
nTotalVal = 0
|
||||
|
||||
*!* grupul B si C (S8, docs\raport_s8_grup_bc.md) - Prezent = mai exista in Objects (nu a fost
|
||||
*!* scos de Init dupa tip/gnScadereStoc), Activ = NU e blocat (Enabled / lactiv / !ReadOnly, dupa
|
||||
*!* mecanismul folosit de fiecare control)
|
||||
lClbFdocPrezent = .F.
|
||||
lClbFdocActiv = .F.
|
||||
lCtClbNumeClientPrezent = .F.
|
||||
lCtClbNumeClientActiv = .F.
|
||||
lCtClbValutaPrezent = .F.
|
||||
lCtClbValutaActiv = .F.
|
||||
lClbZiCursPrezent = .F.
|
||||
lClbZiCursActiv = .F.
|
||||
lCtClbGestiuneInitPrezent = .F.
|
||||
lCtClbGestiuneInitActiv = .F.
|
||||
lCtClbPolPreturiPrezent = .F.
|
||||
lCtClbPolPreturiActiv = .F.
|
||||
lButIncarcaArticolePrezent = .F.
|
||||
lButIncarcaArticoleActiv = .F.
|
||||
lButCursuriPrezent = .F.
|
||||
lButCursuriActiv = .F.
|
||||
lCtIncasarePrezent = .F.
|
||||
lCtIncasareActiv = .F.
|
||||
lChkIncasarePrezent = .F.
|
||||
lChkIncasareActiv = .F.
|
||||
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
This.lCtClbPrezent = .F.
|
||||
This.lCtClbAlteleActiv = .F.
|
||||
This.cCtClbEticheta = ''
|
||||
This.nTotalRon = 0
|
||||
This.nTotalVal = 0
|
||||
This.lClbFdocPrezent = .F.
|
||||
This.lClbFdocActiv = .F.
|
||||
This.lCtClbNumeClientPrezent = .F.
|
||||
This.lCtClbNumeClientActiv = .F.
|
||||
This.lCtClbValutaPrezent = .F.
|
||||
This.lCtClbValutaActiv = .F.
|
||||
This.lClbZiCursPrezent = .F.
|
||||
This.lClbZiCursActiv = .F.
|
||||
This.lCtClbGestiuneInitPrezent = .F.
|
||||
This.lCtClbGestiuneInitActiv = .F.
|
||||
This.lCtClbPolPreturiPrezent = .F.
|
||||
This.lCtClbPolPreturiActiv = .F.
|
||||
This.lButIncarcaArticolePrezent = .F.
|
||||
This.lButIncarcaArticoleActiv = .F.
|
||||
This.lButCursuriPrezent = .F.
|
||||
This.lButCursuriActiv = .F.
|
||||
This.lCtIncasarePrezent = .F.
|
||||
This.lCtIncasareActiv = .F.
|
||||
This.lChkIncasarePrezent = .F.
|
||||
This.lChkIncasareActiv = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
TRY
|
||||
LOCAL lnI, lnJ, lnJ2, loFrm2, loObj, loObj2
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
This.nTotalRon = Nvl(loFrm2.ntotalron, 0)
|
||||
This.nTotalVal = Nvl(loFrm2.ntotalval, 0)
|
||||
FOR lnJ = 1 TO loFrm2.Objects.Count
|
||||
loObj = loFrm2.Objects(m.lnJ)
|
||||
DO CASE
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_ALTELE'
|
||||
This.lCtClbPrezent = .T.
|
||||
This.lCtClbAlteleActiv = loObj.lactiv
|
||||
This.cCtClbEticheta = Alltrim(loObj.clb_tx_cautare.lb_SIMPLU1.Caption)
|
||||
CASE Upper(loObj.Name) == 'CLB_FDOC'
|
||||
This.lClbFdocPrezent = .T.
|
||||
This.lClbFdocActiv = loObj.cboFdoc.Enabled
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_NUME_CLIENT'
|
||||
This.lCtClbNumeClientPrezent = .T.
|
||||
This.lCtClbNumeClientActiv = loObj.lactiv
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_VALUTA'
|
||||
This.lCtClbValutaPrezent = .T.
|
||||
This.lCtClbValutaActiv = loObj.lactiv
|
||||
CASE Upper(loObj.Name) == 'CLB_ZI_CURS'
|
||||
This.lClbZiCursPrezent = .T.
|
||||
This.lClbZiCursActiv = !loObj.text_simplu1.ReadOnly
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_POLITICI_PRETURI'
|
||||
This.lCtClbPolPreturiPrezent = .T.
|
||||
This.lCtClbPolPreturiActiv = loObj.lactiv
|
||||
CASE Upper(loObj.Name) == 'BUT_INCARCA_ARTICOLE'
|
||||
This.lButIncarcaArticolePrezent = .T.
|
||||
This.lButIncarcaArticoleActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'BUT_CURSURI'
|
||||
This.lButCursuriPrezent = .T.
|
||||
This.lButCursuriActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'CT_INCASARE'
|
||||
This.lCtIncasarePrezent = .T.
|
||||
This.lCtIncasareActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'CHK_INCASARE'
|
||||
This.lChkIncasarePrezent = .T.
|
||||
This.lChkIncasareActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'CT_CONTABILITATE'
|
||||
FOR lnJ2 = 1 TO loObj.Objects.Count
|
||||
loObj2 = loObj.Objects(m.lnJ2)
|
||||
IF Upper(loObj2.Name) == 'CT_CLB_GESTIUNE_INIT'
|
||||
This.lCtClbGestiuneInitPrezent = .T.
|
||||
This.lCtClbGestiuneInitActiv = loObj2.lactiv
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDCASE
|
||||
ENDFOR
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcS8p7
|
||||
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
922
utile/Teste/editare_factura/test_s8_editare_incarcare.prg
Normal file
922
utile/Teste/editare_factura/test_s8_editare_incarcare.prg
Normal file
@@ -0,0 +1,922 @@
|
||||
* test_s8_editare_incarcare.prg
|
||||
* Suita COMPLETA a pasului 8 (docs\propunere_s8_incarcare.md §5.1): G1-G11 intr-o singura rulare,
|
||||
* traseul REAL Newobject('frm_facturi') + .do_editare_unificata() (nu Createobject direct pe
|
||||
* frm_facturare_articole2 - proba doar codul, nu rutarea, cf. handoff §4.0a).
|
||||
*
|
||||
* NU inlocuieste test_s8_pas7_cablare.prg (ramane pe loc, neatins) - o completeaza cu:
|
||||
* - un al treilea tip de sursa (1047, DEVIZE AUTO, fara delegat)
|
||||
* - un document AVIZ pozitiv (1110, tip=22) si unul NEGATIV/istoric (953, tip=23, respins de garda
|
||||
* "luna curenta") - Ct_clb_politici_preturi ramane totusi neexercitat, vezi raportul (motivat mai jos)
|
||||
* - G3/G4/G4b (linii) verificate si pe traseul COMPLET, nu doar pe IncarcaLiniiFacturaEditare izolat
|
||||
* - R1: curatenie de aliasuri + jurnal AUSED() intre cazuri (lectia din triaj_s8_regresie_28fail.md)
|
||||
* - R2: diagnostic care distinge, cand formularul NU se deschide, intre iesire CU mesaj de garda,
|
||||
* iesire silentioasa CONFIRMATA prin IncarcaAntetFacturaEditare (ofacturare_editare.prg:83-86) si
|
||||
* iesire silentioasa NEEXPLICATA de acea cale (candidat: cursa driverului/Timer)
|
||||
*
|
||||
* Documente reale, gasite prin interogare read-only pe MARIUSM_AUTO (probe_s8p8_candidati.prg,
|
||||
* probe_s8p8_garzi.prg - pastrate ca dovada in acest director):
|
||||
* 1113 - sursa COMANDA (tip=3) [reluat din pas7, stabil 133/0 x3]
|
||||
* 1055 - sursa CONTRACT (tip=2) [reluat din pas7]
|
||||
* 1048 - factura SIMPLA, lista de preturi (tip=1) [reluat din pas7]
|
||||
* 1130 - VALUTA (tip=5) [reluat din pas7]
|
||||
* 1047 - DEVIZE AUTO (tip=-12), FARA DELEGAT (id_delegat=0/NULL) - singurul document din toata
|
||||
* schema care trece toate garzile do_editare_unificata SI nu are delegat (interogarea D din
|
||||
* probe_s8p8_candidati_log.txt: 0 rezultate pe tip 1-4 fara delegat, 1 rezultat pe orice tip
|
||||
* valid - exact acesta). Deja folosit, izolat, in test_s8_pas6_linii.prg.
|
||||
* 1110 - AVIZ DIN LISTA DE PRETURI (tip=22), luna curenta, toate garzile trec (probe_s8p8_garzi).
|
||||
* CORECTAT fata de prima trecere a acestei suite (vezi docs\raport_s8_pas8_suita.md §2/§10):
|
||||
* la editare, IncarcaAntetFacturaEditare (ofacturare_editare.prg:94) seteaza intotdeauna
|
||||
* nIdTipDoc = nIdTipDocFactura pentru documente ne-proforma, deci llAviz = (poDate.nIdTipDoc
|
||||
* = poDate.nIdTipDocAvizExpeditie) e mereu .F. la editare, indiferent de poDate.tip - ramura
|
||||
* "aviz" a Do Case-ului din Init (ofacturare.vc2 ~21030) nu se activeaza NICIODATA la editare.
|
||||
* Toate documentele editate, aviz sau nu, trec prin ramura "factura" (~21148+), care scoate
|
||||
* Ct_clb_politici_preturi NECONDITIONAT pentru orice tip. Deci controlul lipseste la editare
|
||||
* pe toate tipurile, nu doar pe 22 - exercita restul traseului de aviz (G1-G9,G11).
|
||||
* 953 - AVIZ SUBUNITATI (tip=23), mai 2022 (istoric) - caz NEGATIV. Premiza initiala ("tip 23/41
|
||||
* pastreaza Ct_clb_politici_preturi la editare") s-a dovedit FALSA (vezi 1110 mai sus - acea
|
||||
* ramura nu se activeaza deloc la editare). Documentul ramane util ca proba a garzii "luna
|
||||
* curenta": probe_s8p8_garzi_log.txt arata ca 953 cade pe ea (documentul e din mai 2022,
|
||||
* sesiunea de test ruleaza in luna contabila curenta august 2026) - respins CU mesaj, nu
|
||||
* silentios, fara sa deschida formularul si fara sa consume niciun numar (G2).
|
||||
*
|
||||
* Nu scrie in Oracle - doar SELECT; verifica ca formularul deschis nici el nu scrie (G8).
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_editare_incarcare_log.txt'
|
||||
STRTOFILE('start ' + Transform(Datetime()) + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
gnIdUtil = 8
|
||||
|
||||
*!* gnScadereStoc: neinitializat de test_init_env_auto_roafacturare.prg. Documentele tip 1-5 nu-l
|
||||
*!* citesc (cad in ramura OTHERWISE a Do Case-ului din Init, care nu-l testeaza), dar 1110 (tip=22)
|
||||
*!* intra pe ramura "CASE gnScadereStoc=0 AND poDate.tip=22" - fara variabila declarata, VFP arunca
|
||||
*!* "Variable GNSCADERESTOC is not found". Precedent: creeaza_documente_s8.prg (acelasi director)
|
||||
*!* seteaza explicit gnScadereStoc=0 ca parte a mediului de test, nu a codului de productie.
|
||||
PUBLIC gnScadereStoc
|
||||
gnScadereStoc = 0
|
||||
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
|
||||
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul -
|
||||
*!* mock-ul se pune in fata listei existente, altfel amessagebox() real blocheaza headless
|
||||
LOCAL lcProcExistent
|
||||
lcProcExistent = SET("PROCEDURE")
|
||||
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
||||
|
||||
PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
|
||||
gcMockUltimMesaj = ''
|
||||
gnMockUltimTip = 0
|
||||
gnMockRaspuns = 6
|
||||
gnPass = 0
|
||||
gnFail = 0
|
||||
|
||||
*!* --- driver care inchide fereastra modala frm_facturare_articole2 (acelasi tipar validat in
|
||||
*!* test_s8_pas7_cablare.prg / driverS8p7 - Timer legat de _SCREEN prin Bindevent, viu in interiorul
|
||||
*!* Show()-ului modal, care citeste formularul din colectia Objects si il elibereaza) ---
|
||||
PUBLIC goDriverS8p7
|
||||
goDriverS8p7 = Createobject('driverS8p7')
|
||||
_SCREEN.AddObject('tmrS8p8', 'Timer')
|
||||
_SCREEN.tmrS8p8.Interval = 150
|
||||
Bindevent(_SCREEN.tmrS8p8, 'Timer', goDriverS8p7, 'Executa')
|
||||
_SCREEN.tmrS8p8.Enabled = .T.
|
||||
|
||||
*!* --- verificare statica G2: corpul do_editare_unificata nu contine nicio referinta la alocarea
|
||||
*!* de numere (factureaza/poGeneratorNumere/creeaza_cursor_serii) ---
|
||||
LOCAL lcSrc, lcTail, lnStart, lnEnd, lcMetoda
|
||||
lcSrc = FILETOSTR('D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vc2')
|
||||
lnStart = AT('PROCEDURE do_editare_unificata' + CHR(13) + CHR(10), lcSrc)
|
||||
DO asserteaza WITH 'static: metoda do_editare_unificata gasita in sursa', lnStart > 0, TRANSFORM(lnStart)
|
||||
IF lnStart > 0
|
||||
lcTail = SUBSTR(lcSrc, lnStart)
|
||||
lnEnd = AT('ENDPROC', lcTail)
|
||||
lcMetoda = UPPER(SUBSTR(lcTail, 1, lnEnd + 6))
|
||||
DO asserteaza WITH 'static G2: fara FACTUREAZA( in do_editare_unificata', 'FACTUREAZA(' $ lcMetoda = .F., ''
|
||||
DO asserteaza WITH 'static G2: fara POGENERATORNUMERE in do_editare_unificata', 'POGENERATORNUMERE' $ lcMetoda = .F., ''
|
||||
DO asserteaza WITH 'static G2: fara CREEAZA_CURSOR_SERII in do_editare_unificata', 'CREEAZA_CURSOR_SERII' $ lcMetoda = .F., ''
|
||||
ENDIF
|
||||
|
||||
*!* --- crsfacturi, exact ca in oproceduri_facturare.vizualizare_facturi, pe toate documentele de test ---
|
||||
Private poFacturi
|
||||
poFacturi = Null
|
||||
IF Used('crsfacturi')
|
||||
Use In crsfacturi
|
||||
ENDIF
|
||||
|
||||
LOCAL lcSchema, lcSelect, lcOrder, lcFiltru
|
||||
lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ;
|
||||
['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ;
|
||||
['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ;
|
||||
['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ;
|
||||
['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ;
|
||||
['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ;
|
||||
['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ;
|
||||
['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ;
|
||||
['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ;
|
||||
['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+;
|
||||
['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)']
|
||||
|
||||
lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ;
|
||||
['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ;
|
||||
['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ;
|
||||
['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ;
|
||||
['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ;
|
||||
['valuta,id_valuta,valval,tvaval,totval,'+] + ;
|
||||
['id_delegat,id_agent,id_masina,valoarea,'+] + ;
|
||||
['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ;
|
||||
['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ;
|
||||
['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+;
|
||||
['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where ']
|
||||
|
||||
lcOrder = [data_act,numar_act]
|
||||
lcFiltru = [id_vanzare in (1113, 1055, 1048, 1130, 1047, 1110, 953)]
|
||||
gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., [])
|
||||
poFacturi.ca_baza1.afisare()
|
||||
|
||||
DO asserteaza WITH 'crsfacturi incarcat cu cele 7 documente reale (rownum=7)', Used('crsfacturi') AND Reccount('crsfacturi') = 7, IIF(Used('crsfacturi'), TRANSFORM(Reccount('crsfacturi')), 'crsfacturi lipsa')
|
||||
|
||||
*!* =====================================================================================
|
||||
*!* Cazurile POZITIVE - documentul trebuie sa se deschida (G1-G9, G11, plus G3/G4/G4b pe linii)
|
||||
*!* Ct_clb_altele (infirmare §3.2 din propunerea S8): document CU sursa comanda/contract -> prezent,
|
||||
*!* etichetat; factura simpla/valuta/aviz(tip22)/devize(tip-12) editate (nu copiate) -> absent, G10.
|
||||
*!* =====================================================================================
|
||||
DO VerificaEditare WITH 1113, 'sursa comanda', .T., 'Nr. comanda', .T.
|
||||
DO VerificaEditare WITH 1055, 'sursa contract', .T., 'Nr. contract', .T.
|
||||
DO VerificaEditare WITH 1048, 'factura simpla', .F., '', .T.
|
||||
DO VerificaEditare WITH 1130, 'valuta', .F., '', .T.
|
||||
*!* 1047/1110: nici tip=-12 (DEVIZE AUTO), nici tip=22 (aviz lista preturi) nu se incadreaza in
|
||||
*!* Inlist(poDate.tip,1,5,10,48,49) - unicul grup pe care Init il scoate la editare (llCopiere=.F.)
|
||||
*!* in ramura "factura" (llAviz e mereu .F. la editare, cf. IncarcaAntetFacturaEditare:94, care
|
||||
*!* seteaza mereu nIdTipDocFactura pentru documente ne-proforma - ramura de aviz din Do Case NU se
|
||||
*!* activeaza niciodata la editare, indiferent de poDate.tip). Deci Ct_clb_altele RAMANE prezent,
|
||||
*!* dar FARA eticheta schimbata (niciun Case din Do Case-ul "gnScadereStoc=0" nu acopera 22/-12) -
|
||||
*!* verificat pe rulare (test_s8_p8_candidati/garzi + prima trecere a acestei suite). Nu se
|
||||
*!* verifica eticheta exacta (ramane design-time, neschimbata de do_schimba_explicatia).
|
||||
DO VerificaEditare WITH 1047, 'DEVIZE AUTO, fara delegat', .T., '', .T.
|
||||
DO VerificaEditare WITH 1110, 'aviz din lista de preturi (tip=22)', .T., '', .F.
|
||||
|
||||
*!* =====================================================================================
|
||||
*!* Cazul NEGATIV - 953, aviz istoric (tip=23), respins de garda "luna curenta"
|
||||
*!* =====================================================================================
|
||||
DO VerificaEditareRespinsa WITH 953, 'aviz istoric tip=23, respins - luna curenta', 'luna curenta'
|
||||
|
||||
*!* --- S8 incasarea la editare (D1/D3/D4) - foloseste Show() real, deci trebuie sa ruleze inainte
|
||||
*!* de teardown-ul lui tmrS8p8 de mai jos. 1071: tip_incasare=11 (chitanta) -> mod 2.
|
||||
*!* 1072: tip_incasare=2 (bon fiscal) -> mod 3, cazul in care hardcodarea veche "mod 2" ar fi mintit.
|
||||
DO VerificaIncasareLaEditare WITH 1071, 'chitanta, tip_incasare=11', 119, 44, 11, 2
|
||||
DO VerificaIncasareLaEditare WITH 1072, 'bon fiscal, tip_incasare=2', 119, 66, 2, 3
|
||||
|
||||
_SCREEN.tmrS8p8.Enabled = .F.
|
||||
Try
|
||||
_SCREEN.RemoveObject('tmrS8p8')
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
*!* --- S8 grupurile B/C: neregresie pe document NOU ---
|
||||
DO VerificaDocumentNou
|
||||
|
||||
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('end ' + Transform(Datetime()) + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
|
||||
QUIT
|
||||
|
||||
|
||||
*!* =====================================================================================
|
||||
*!* R1: curatenie intre cazuri - inchide aliasurile care raman deschise dupa
|
||||
*!* IncarcaLiniiFacturaEditare/do_calculeaza_totaluri/Init-ul formularului (gasite la X2,
|
||||
*!* docs\raport_s8_driver_determinist.md): CRSGESTIUNI, JTVA_COLOANE(_TEMP), SAFT_TAXTABLE,
|
||||
*!* CRSCURSURI. Nu produc FAIL azi (X2: Select crsfacturi/crsfactura restaureaza mereu zona
|
||||
*!* corecta), dar cresc numarul de work area-uri intre cazuri - se inchid explicit aici ca sa nu
|
||||
*!* se acumuleze pe 8 cazuri (limita VFP de work areas e departe, dar igiena conteaza pe R1).
|
||||
*!* =====================================================================================
|
||||
PROCEDURE CurataAliasuriReziduale
|
||||
LOCAL laAlias(1), lnI, lcA
|
||||
laAlias(1) = 'CRSGESTIUNI'
|
||||
DIMENSION laAlias(9)
|
||||
laAlias(2) = 'JTVA_COLOANE'
|
||||
laAlias(3) = 'JTVA_COLOANE_TEMP'
|
||||
laAlias(4) = 'SAFT_TAXTABLE'
|
||||
laAlias(5) = 'CRSCURSURI'
|
||||
laAlias(6) = 'CRSARTICOLE_DOC'
|
||||
laAlias(7) = 'CRSARTICOLE_EDITARE'
|
||||
laAlias(8) = 'V_ANTET_EDITARE'
|
||||
laAlias(9) = 'CRSFACTURA'
|
||||
FOR lnI = 1 TO ALEN(laAlias)
|
||||
lcA = laAlias(lnI)
|
||||
IF Used(m.lcA)
|
||||
Use In (m.lcA)
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* R1: jurnal AUSED() - numarul de work area-uri deschise, ca sa se vada ca starea de start e
|
||||
*!* aceeasi la fiecare caz (semnalul de scurgere din triaj: 16 -> 16 -> 17 -> 17, in crestere)
|
||||
PROCEDURE LogAUsed
|
||||
LPARAMETERS tcEticheta
|
||||
LOCAL lnN, laAliasuri(1), lnI, lcLista
|
||||
lnN = AUSED(laAliasuri)
|
||||
lcLista = ''
|
||||
FOR lnI = 1 TO m.lnN
|
||||
lcLista = lcLista + laAliasuri(m.lnI,1) + ' '
|
||||
ENDFOR
|
||||
STRTOFILE('AUSED ' + m.tcEticheta + ' = ' + TRANSFORM(m.lnN) + ' [' + m.lcLista + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE VerificaEditare
|
||||
LPARAMETERS tnIdVanzare, tcEticheta, tlCtClbAsteptat, tcCtClbEtichetaAsteptata, tlVerificaLinii
|
||||
|
||||
LOCAL lcPrefix, lnSucces, loFrm, lnI, llGasitForm
|
||||
LOCAL lcSnapPlajeA, lcSnapPlajeB, lcSnapDetA, lcSnapDetB
|
||||
LOCAL ltDataorasVanzareA, lnIdUtilsVanzareA
|
||||
lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']'
|
||||
gcMockUltimMesaj = ''
|
||||
|
||||
*!* --- R1: curatenie + jurnal AUSED INAINTE de caz ---
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' INAINTE'
|
||||
|
||||
*!* --- G2: snapshot generator de numere, INAINTE ---
|
||||
IF Used('v_plaje_a')
|
||||
Use In v_plaje_a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_a')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeA = CursorToSnapshot('v_plaje_a')
|
||||
Use In v_plaje_a
|
||||
|
||||
*!* --- G8: snapshot dataoras/id_utils, INAINTE ---
|
||||
IF Used('v_g8a')
|
||||
Use In v_g8a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select dataoras, id_utils from vanzari where id_vanzare = ] + Transform(m.tnIdVanzare), 'v_g8a')
|
||||
goExecutor.oReset()
|
||||
DO asserteaza WITH lcPrefix + ': martor G8 antet Oracle a reusit', lnSucces >= 0 AND Used('v_g8a') AND Reccount('v_g8a') = 1, Transform(lnSucces)
|
||||
ltDataorasVanzareA = v_g8a.dataoras
|
||||
lnIdUtilsVanzareA = Nvl(v_g8a.id_utils, 0)
|
||||
Use In v_g8a
|
||||
|
||||
IF Used('v_g8d_a')
|
||||
Use In v_g8d_a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_vanzare_det, dataoras, id_utils from vanzari_detalii where id_vanzare = ] + Transform(m.tnIdVanzare) + [ order by id_vanzare_det], 'v_g8d_a')
|
||||
goExecutor.oReset()
|
||||
lcSnapDetA = CursorToSnapshot('v_g8d_a')
|
||||
Use In v_g8d_a
|
||||
|
||||
*!* --- martor G3/G4/G4b: interogare INDEPENDENTA pe VANZARI_DETALII+NOM_ARTICOLE, INAINTE de
|
||||
*!* codul testat (acelasi tipar ca test_s8_pas6_linii.prg, dar aici pe traseul COMPLET) ---
|
||||
LOCAL lnMartorLinii
|
||||
lnMartorLinii = 0
|
||||
IF m.tlVerificaLinii
|
||||
IF Used('v_g4pre')
|
||||
Use In v_g4pre
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select count(*) as nr from vanzari_detalii where id_vanzare = ] + Transform(m.tnIdVanzare) + [ and sters = 0], 'v_g4pre')
|
||||
goExecutor.oReset()
|
||||
DO asserteaza WITH lcPrefix + ': martor G3 Oracle a reusit', lnSucces >= 0 AND Used('v_g4pre'), Transform(lnSucces)
|
||||
lnMartorLinii = Nvl(v_g4pre.nr, 0)
|
||||
Use In v_g4pre
|
||||
|
||||
IF Used('v_g4')
|
||||
Use In v_g4
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select vd.id_vanzare_det, vd.cantitate, vd.taxcode, vd.lot, vd.serie, ] + ;
|
||||
[na.in_stoc from vanzari_detalii vd left join nom_articole na on na.id_articol = vd.id_articol ] + ;
|
||||
[where vd.id_vanzare = ] + Transform(m.tnIdVanzare) + [ and vd.sters = 0 order by vd.id_vanzare_det], 'v_g4')
|
||||
goExecutor.oReset()
|
||||
DO asserteaza WITH lcPrefix + ': martor G4/G4b Oracle a reusit', lnSucces >= 0 AND Used('v_g4'), Transform(lnSucces)
|
||||
ENDIF
|
||||
|
||||
*!* --- R2 diagnostic PRE: IncarcaAntetFacturaEditare, apel direct izolat - baseline. Daca
|
||||
*!* traseul complet de mai jos nu deschide formularul, aceasta valoare arata daca poarta
|
||||
*!* silentioasa (cale 11, ofacturare_editare.prg:83-86) era deja activa INAINTE de orice
|
||||
*!* interferenta a traseului complet (frm_facturi/driver) ---
|
||||
LOCAL poDateDiagPre, lnDiscRPre, lnDiscVPre
|
||||
poDateDiagPre = IncarcaAntetFacturaEditare(m.tnIdVanzare, @lnDiscRPre, @lnDiscVPre)
|
||||
DO asserteaza WITH lcPrefix + ': diagnostic - IncarcaAntetFacturaEditare (apel direct, izolat) reuseste', Vartype(poDateDiagPre) == 'O', Vartype(poDateDiagPre)
|
||||
IF Used('v_antet_editare')
|
||||
Use In v_antet_editare
|
||||
ENDIF
|
||||
|
||||
*!* --- G1/G6/G7: poDateDiagPre e chiar obiectul pe care do_editare_unificata il va construi mai
|
||||
*!* jos (aceeasi functie, acelasi id_vanzare, fara nicio scriere intre timp) - comparat cu randul
|
||||
*!* deja incarcat in crsfacturi (acelasi SELECT ca fact_vfacturi, martor independent) ---
|
||||
IF Vartype(poDateDiagPre) == 'O'
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = m.tnIdVanzare
|
||||
IF Found()
|
||||
DO asserteaza WITH lcPrefix + ' G1: serie_act = VANZARI', Alltrim(Nvl(poDateDiagPre.serie_act,'')) == Alltrim(Nvl(crsfacturi.serie_act,'')), poDateDiagPre.serie_act
|
||||
DO asserteaza WITH lcPrefix + ' G1: nract = VANZARI', poDateDiagPre.nract == Nvl(crsfacturi.numar_act,0), Transform(poDateDiagPre.nract)
|
||||
DO asserteaza WITH lcPrefix + ' G1: dataact = VANZARI', poDateDiagPre.dataact == crsfacturi.data_act, Dtoc(poDateDiagPre.dataact)
|
||||
DO asserteaza WITH lcPrefix + ' G1: datascad = VANZARI (sau ambele NULL)', Iif(Isnull(crsfacturi.data_scad), Isnull(poDateDiagPre.datascad), poDateDiagPre.datascad == crsfacturi.data_scad), Transform(poDateDiagPre.datascad)
|
||||
DO asserteaza WITH lcPrefix + ' G6: discount_evidentiat = VANZARI', poDateDiagPre.discount_evidentiat == Nvl(crsfacturi.discount_evidentiat,0), Transform(poDateDiagPre.discount_evidentiat)
|
||||
IF poDateDiagPre.in_valuta = 0
|
||||
DO asserteaza WITH lcPrefix + ' G6: discount (lei) = VANZARI', Round(lnDiscRPre,2) == Round(Nvl(crsfacturi.discount,0),2), Transform(lnDiscRPre)
|
||||
ENDIF
|
||||
DO asserteaza WITH lcPrefix + ' G7: id_delegat = VANZARI (sau ambele NULL - cazul "fara delegat")', ;
|
||||
Iif(Isnull(crsfacturi.id_delegat), Isnull(poDateDiagPre.id_delegat), Nvl(poDateDiagPre.id_delegat,0) == Nvl(crsfacturi.id_delegat,0)), Transform(Nvl(poDateDiagPre.id_delegat,-1))
|
||||
DO asserteaza WITH lcPrefix + ' G7: nume_delegat = VANZARI', Alltrim(Nvl(poDateDiagPre.nume_delegat,'')) == Alltrim(Nvl(crsfacturi.delegat,'')), poDateDiagPre.nume_delegat
|
||||
DO asserteaza WITH lcPrefix + ' G7: adresa_facturare = VANZARI', Alltrim(Nvl(poDateDiagPre.adresa_facturare,'')) == Alltrim(Nvl(crsfacturi.adresa_facturare,'')), poDateDiagPre.adresa_facturare
|
||||
DO asserteaza WITH lcPrefix + ' G7: listare_detaliata = VANZARI', poDateDiagPre.nListareDetaliata == Nvl(crsfacturi.listare_detaliata,0), Transform(poDateDiagPre.nListareDetaliata)
|
||||
DO asserteaza WITH lcPrefix + ' G7: efactura = VANZARI', poDateDiagPre.eFactura == Nvl(crsfacturi.efactura,0), Transform(poDateDiagPre.eFactura)
|
||||
DO asserteaza WITH lcPrefix + ' G7: id_ruta = VANZARI (sau ambele NULL)', Iif(Isnull(crsfacturi.id_ruta), Isnull(poDateDiagPre.id_ruta), poDateDiagPre.id_ruta == crsfacturi.id_ruta), Transform(poDateDiagPre.id_ruta)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
*!* --- codul testat: traseul real, prin frm_facturi.do_editare_unificata ---
|
||||
*!* Init-ul clasei presupune crsfacturi ca zona curenta (la fel ca in test_s7_urmasi.prg) -
|
||||
*!* interogarile martor de mai sus au schimbat zona curenta intre timp, se restaureaza aici
|
||||
Select crsfacturi
|
||||
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
|
||||
DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', Vartype(m.loFrm) == 'O', Vartype(m.loFrm)
|
||||
IF Vartype(m.loFrm) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = m.tnIdVanzare
|
||||
DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', Found(), Transform(Found())
|
||||
IF !Found()
|
||||
loFrm.Release()
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
*!* --- driverS8p7 gaseste si inchide formularul unificat (FARA but_termin1.Click()) ---
|
||||
goDriverS8p7.Reseteaza()
|
||||
loFrm.do_editare_unificata()
|
||||
|
||||
IF !goDriverS8p7.lGasit
|
||||
*!* --- R2: iesirea a esuat - distinge CU MESAJ (garda explicita) de SILENTIOASA, si in acest
|
||||
*!* caz distinge daca poarta 11 (IncarcaAntetFacturaEditare->NULL) e cauza confirmata ---
|
||||
DO asserteaza WITH lcPrefix + ': formularul unificat s-a deschis (traseul direct, fara factureaza())', .F., 'NU s-a deschis'
|
||||
IF !Empty(gcMockUltimMesaj)
|
||||
DO asserteaza WITH lcPrefix + ' diagnostic: iesire CU MESAJ de garda (nu silentioasa) - mesaj=[' + gcMockUltimMesaj + ']', .F., gcMockUltimMesaj
|
||||
ELSE
|
||||
LOCAL poDateDiagPost, lnDiscRPost, lnDiscVPost
|
||||
poDateDiagPost = IncarcaAntetFacturaEditare(m.tnIdVanzare, @lnDiscRPost, @lnDiscVPost)
|
||||
IF Vartype(poDateDiagPost) <> 'O'
|
||||
DO asserteaza WITH lcPrefix + ' diagnostic: iesire silentioasa CONFIRMATA - cale 11 (ofacturare_editare.prg:83-86), IncarcaAntetFacturaEditare revine .NULL. si la apel direct chiar acum', .F., 'confirmat cale 11'
|
||||
ELSE
|
||||
DO asserteaza WITH lcPrefix + ' diagnostic: iesire silentioasa NEEXPLICATA de cale 11 (IncarcaAntetFacturaEditare reuseste izolat chiar acum) - candidat: cale 3 (glLunaInchisa) sau cursa driverului/Timer', .F., 'neexplicat, nu e cale 11'
|
||||
ENDIF
|
||||
IF Used('v_antet_editare')
|
||||
Use In v_antet_editare
|
||||
ENDIF
|
||||
ENDIF
|
||||
Try
|
||||
loFrm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' DUPA (esec deschidere)'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO asserteaza WITH lcPrefix + ': formularul unificat s-a deschis (traseul direct, fara factureaza())', goDriverS8p7.lGasit, Transform(goDriverS8p7.lGasit)
|
||||
|
||||
*!* --- Ct_clb_altele: prezenta citita din colectia Objects a formularului, cat timp era deschis ---
|
||||
DO asserteaza WITH lcPrefix + ': Ct_clb_altele prezenta = ' + Iif(m.tlCtClbAsteptat, 'prezent', 'absent'), ;
|
||||
goDriverS8p7.lCtClbPrezent == m.tlCtClbAsteptat, Transform(goDriverS8p7.lCtClbPrezent)
|
||||
IF m.tlCtClbAsteptat AND !Empty(m.tcCtClbEtichetaAsteptata)
|
||||
DO asserteaza WITH lcPrefix + ': Ct_clb_altele eticheta = [' + m.tcCtClbEtichetaAsteptata + ']', ;
|
||||
Upper(goDriverS8p7.cCtClbEticheta) == Upper(m.tcCtClbEtichetaAsteptata), goDriverS8p7.cCtClbEticheta
|
||||
ENDIF
|
||||
*!* --- grupul B si C (S8, decizia 25): needitabile la editare ---
|
||||
DO VerificaBlocajGrupBC WITH m.lcPrefix
|
||||
|
||||
*!* --- G5: totalul afisat = totalul deja scris in VANZARI ---
|
||||
Select crsfacturi
|
||||
IF Nvl(crsfacturi.in_valuta, 0) = 1
|
||||
DO asserteaza WITH lcPrefix + ' G5: total afisat (valuta) = VANZARI.totval', ;
|
||||
Round(goDriverS8p7.nTotalVal, 2) == Round(Nvl(crsfacturi.totval, 0), 2), Transform(goDriverS8p7.nTotalVal) + ' vs ' + Transform(crsfacturi.totval)
|
||||
ELSE
|
||||
DO asserteaza WITH lcPrefix + ' G5: total afisat (lei) = VANZARI.total_cu_tva', ;
|
||||
Round(goDriverS8p7.nTotalRon, 2) == Round(Nvl(crsfacturi.total_cu_tva, 0), 2), Transform(goDriverS8p7.nTotalRon) + ' vs ' + Transform(crsfacturi.total_cu_tva)
|
||||
ENDIF
|
||||
|
||||
*!* --- G3/G4/G4b: crsfactura ramane deschis dupa ce driverul a eliberat formularul (nu e
|
||||
*!* proprietate a obiectului, e o zona de lucru globala populata inaintea Createobject) ---
|
||||
IF m.tlVerificaLinii
|
||||
DO asserteaza WITH lcPrefix + ' G3: crsfactura a ramas deschis dupa inchiderea formularului', Used('crsfactura'), Transform(Used('crsfactura'))
|
||||
IF Used('crsfactura') AND Used('v_g4')
|
||||
DO asserteaza WITH lcPrefix + ' G3: Reccount(crsfactura)=' + Transform(Reccount('crsfactura')) + ' = martor(' + Transform(m.lnMartorLinii) + ')', ;
|
||||
Reccount('crsfactura') == m.lnMartorLinii, Transform(Reccount('crsfactura'))
|
||||
|
||||
LOCAL lnDetTemp, llGasitLinie
|
||||
Select v_g4
|
||||
Scan
|
||||
lnDetTemp = v_g4.id_vanzare_det
|
||||
Select crsfactura
|
||||
Locate For id_temp = m.lnDetTemp
|
||||
llGasitLinie = Found()
|
||||
DO asserteaza WITH lcPrefix + ' det=' + Transform(m.lnDetTemp) + ': gasit in crsfactura', m.llGasitLinie, Transform(m.llGasitLinie)
|
||||
IF m.llGasitLinie
|
||||
DO asserteaza WITH lcPrefix + ' det=' + Transform(m.lnDetTemp) + ' G4: cantitate', Round(crsfactura.cantitate,4) == Round(v_g4.cantitate,4), Transform(crsfactura.cantitate)
|
||||
DO asserteaza WITH lcPrefix + ' det=' + Transform(m.lnDetTemp) + ' G4: taxcode', Nvl(crsfactura.taxcode,0) == Nvl(v_g4.taxcode,0), Transform(Nvl(crsfactura.taxcode,0))
|
||||
DO asserteaza WITH lcPrefix + ' det=' + Transform(m.lnDetTemp) + ' G4b: gestionabil = in_stoc curent(' + Transform(Nvl(v_g4.in_stoc,0)) + ')', ;
|
||||
crsfactura.gestionabil == Iif(Nvl(v_g4.in_stoc,0) <> 0, 1, 0), Transform(crsfactura.gestionabil)
|
||||
ENDIF
|
||||
Select v_g4
|
||||
Endscan
|
||||
ENDIF
|
||||
IF Used('v_g4')
|
||||
Use In v_g4
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
loFrm.Release()
|
||||
|
||||
*!* --- G9: niciun dialog modal la deschidere ---
|
||||
DO asserteaza WITH lcPrefix + ' G9: niciun amessagebox la deschidere', Empty(gcMockUltimMesaj), gcMockUltimMesaj
|
||||
|
||||
*!* --- G2: snapshot generator de numere, DUPA - identic caracter cu caracter ---
|
||||
IF Used('v_plaje_b')
|
||||
Use In v_plaje_b
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_b')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeB = CursorToSnapshot('v_plaje_b')
|
||||
Use In v_plaje_b
|
||||
DO asserteaza WITH lcPrefix + ' G2: vplaje_numere identic inainte/dupa (niciun numar alocat)', m.lcSnapPlajeA == m.lcSnapPlajeB, ''
|
||||
|
||||
*!* --- G8: dataoras/id_utils neschimbate pe VANZARI si VANZARI_DETALII ---
|
||||
IF Used('v_g8a2')
|
||||
Use In v_g8a2
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select dataoras, id_utils from vanzari where id_vanzare = ] + Transform(m.tnIdVanzare), 'v_g8a2')
|
||||
goExecutor.oReset()
|
||||
DO asserteaza WITH lcPrefix + ' G8: VANZARI.dataoras neschimbat', ;
|
||||
Nvl(Ttoc(v_g8a2.dataoras), 'NULL') == Nvl(Ttoc(m.ltDataorasVanzareA), 'NULL'), Nvl(Ttoc(v_g8a2.dataoras), 'NULL')
|
||||
DO asserteaza WITH lcPrefix + ' G8: VANZARI.id_utils neschimbat', Nvl(v_g8a2.id_utils, 0) == m.lnIdUtilsVanzareA, Transform(Nvl(v_g8a2.id_utils, 0))
|
||||
Use In v_g8a2
|
||||
|
||||
IF Used('v_g8d_b')
|
||||
Use In v_g8d_b
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_vanzare_det, dataoras, id_utils from vanzari_detalii where id_vanzare = ] + Transform(m.tnIdVanzare) + [ order by id_vanzare_det], 'v_g8d_b')
|
||||
goExecutor.oReset()
|
||||
lcSnapDetB = CursorToSnapshot('v_g8d_b')
|
||||
Use In v_g8d_b
|
||||
DO asserteaza WITH lcPrefix + ' G8: VANZARI_DETALII dataoras/id_utils identice (nicio scriere)', m.lcSnapDetA == m.lcSnapDetB, ''
|
||||
|
||||
*!* --- G11 partial: fara nicio scriere pe VANZARI_DETALII (G8), nu s-a putut genera nicio miscare
|
||||
*!* de stoc noua pe acest document; proba indirecta, partiala (forma completa a G11 cere S9/reemitere) ---
|
||||
DO asserteaza WITH lcPrefix + ' G11 partial (derivat din G8): nicio scriere pe VANZARI_DETALII => stoc agregat neschimbat pe acest document', m.lcSnapDetA == m.lcSnapDetB, ''
|
||||
|
||||
*!* --- R1: curatenie + jurnal AUSED DUPA caz ---
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* Caz NEGATIV: documentul e respins de o garda CU MESAJ a do_editare_unificata (aici, "luna
|
||||
*!* curenta") - formularul nu trebuie sa se deschida, trebuie sa apara mesajul asteptat, si G2
|
||||
*!* (niciun numar alocat) trebuie sa ramana curat chiar si pe calea de refuz.
|
||||
PROCEDURE VerificaEditareRespinsa
|
||||
LPARAMETERS tnIdVanzare, tcEticheta, tcMesajContine
|
||||
|
||||
LOCAL lcPrefix, lnSucces, loFrm, lcSnapPlajeA, lcSnapPlajeB
|
||||
lcPrefix = Transform(m.tnIdVanzare) + ' [' + m.tcEticheta + ']'
|
||||
gcMockUltimMesaj = ''
|
||||
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' INAINTE'
|
||||
|
||||
IF Used('v_plaje_resp_a')
|
||||
Use In v_plaje_resp_a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_resp_a')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeA = CursorToSnapshot('v_plaje_resp_a')
|
||||
Use In v_plaje_resp_a
|
||||
|
||||
Select crsfacturi
|
||||
loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx')
|
||||
DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', Vartype(m.loFrm) == 'O', Vartype(m.loFrm)
|
||||
IF Vartype(m.loFrm) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
Select crsfacturi
|
||||
Locate For id_vanzare = m.tnIdVanzare
|
||||
DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', Found(), Transform(Found())
|
||||
IF !Found()
|
||||
loFrm.Release()
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
goDriverS8p7.Reseteaza()
|
||||
loFrm.do_editare_unificata()
|
||||
|
||||
DO asserteaza WITH lcPrefix + ': formularul NU s-a deschis (garda a respins documentul)', !goDriverS8p7.lGasit, Transform(goDriverS8p7.lGasit)
|
||||
DO asserteaza WITH lcPrefix + ': a aparut un mesaj de garda (refuz explicat, nu iesire silentioasa)', !Empty(gcMockUltimMesaj), gcMockUltimMesaj
|
||||
DO asserteaza WITH lcPrefix + ': mesajul contine [' + m.tcMesajContine + ']', m.tcMesajContine $ Lower(gcMockUltimMesaj), gcMockUltimMesaj
|
||||
|
||||
Try
|
||||
loFrm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
IF Used('v_plaje_resp_b')
|
||||
Use In v_plaje_resp_b
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_resp_b')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeB = CursorToSnapshot('v_plaje_resp_b')
|
||||
Use In v_plaje_resp_b
|
||||
DO asserteaza WITH lcPrefix + ' G2: vplaje_numere identic inainte/dupa (refuz, dar tot fara numar ars)', m.lcSnapPlajeA == m.lcSnapPlajeB, ''
|
||||
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* S8 - blocarea grupurilor B si C la editare. Citeste starea deja capturata de goDriverS8p7
|
||||
*!* (formularul e inchis pana aici) si asearta doar cand controlul e prezent.
|
||||
PROCEDURE VerificaBlocajGrupBC
|
||||
LPARAMETERS tcPrefix
|
||||
|
||||
IF goDriverS8p7.lCtClbPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_altele (sursa) needitabil', !goDriverS8p7.lCtClbAlteleActiv, Transform(goDriverS8p7.lCtClbAlteleActiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH tcPrefix + ' grupB: clb_fdoc.cboFdoc (tip document) needitabil', ;
|
||||
goDriverS8p7.lClbFdocPrezent AND !goDriverS8p7.lClbFdocActiv, Transform(goDriverS8p7.lClbFdocActiv)
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_nume_client (client) needitabil', ;
|
||||
goDriverS8p7.lCtClbNumeClientPrezent AND !goDriverS8p7.lCtClbNumeClientActiv, Transform(goDriverS8p7.lCtClbNumeClientActiv)
|
||||
IF goDriverS8p7.lCtClbValutaPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_valuta needitabil', !goDriverS8p7.lCtClbValutaActiv, Transform(goDriverS8p7.lCtClbValutaActiv)
|
||||
ENDIF
|
||||
IF goDriverS8p7.lClbZiCursPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Clb_zi_curs needitabil', !goDriverS8p7.lClbZiCursActiv, Transform(goDriverS8p7.lClbZiCursActiv)
|
||||
ENDIF
|
||||
IF goDriverS8p7.lCtClbGestiuneInitPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_gestiune_init (gestiune sursa) needitabil', !goDriverS8p7.lCtClbGestiuneInitActiv, Transform(goDriverS8p7.lCtClbGestiuneInitActiv)
|
||||
ENDIF
|
||||
IF goDriverS8p7.lCtClbPolPreturiPrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupB: Ct_clb_politici_preturi needitabil', !goDriverS8p7.lCtClbPolPreturiActiv, Transform(goDriverS8p7.lCtClbPolPreturiActiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH tcPrefix + ' grupB: but_incarca_articole needitabil (G2: evita poGeneratorNumere.verifica_numar)', ;
|
||||
goDriverS8p7.lButIncarcaArticolePrezent AND !goDriverS8p7.lButIncarcaArticoleActiv, Transform(goDriverS8p7.lButIncarcaArticoleActiv)
|
||||
DO asserteaza WITH tcPrefix + ' grupB: but_cursuri needitabil', ;
|
||||
goDriverS8p7.lButCursuriPrezent AND !goDriverS8p7.lButCursuriActiv, Transform(goDriverS8p7.lButCursuriActiv)
|
||||
IF goDriverS8p7.lCtIncasarePrezent
|
||||
DO asserteaza WITH tcPrefix + ' grupC: ct_incasare needitabil', !goDriverS8p7.lCtIncasareActiv, Transform(goDriverS8p7.lCtIncasareActiv)
|
||||
DO asserteaza WITH tcPrefix + ' grupC: chk_incasare needitabil', goDriverS8p7.lChkIncasarePrezent AND !goDriverS8p7.lChkIncasareActiv, Transform(goDriverS8p7.lChkIncasareActiv)
|
||||
ENDIF
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* S8 - neregresie: pe document NOU, grupurile B/C raman editabile (acelasi tipar validat in
|
||||
*!* test_s8_pas7_cablare.prg). NU trece prin factureaza()/poGeneratorNumere.
|
||||
PROCEDURE VerificaDocumentNou
|
||||
PRIVATE poDate
|
||||
LOCAL loForm
|
||||
|
||||
poDate = Createobject('oDateFactura', 0, 0)
|
||||
poDate.tip = 3
|
||||
poDate.id_client = 0
|
||||
poDate.incasat = 0
|
||||
|
||||
*!* Init-ul lui frm_facturare_articole2 presupune 'crsfactura' deja deschis (in productie,
|
||||
*!* creeaza_facturacrs('crsfactura') ruleaza in factureaza() inainte de Createobject, pentru
|
||||
*!* orice document, nou sau editat). R1 (curatenie de aliasuri intre cazuri) inchide crsfactura
|
||||
*!* dupa fiecare caz anterior - fara acest bloc, acest test ar depinde tacit de un leftover
|
||||
*!* (exact cum facea, neintentionat, test_s8_pas7_cablare.prg).
|
||||
IF !Used('crsfactura')
|
||||
creeaza_facturacrs('crsfactura')
|
||||
ENDIF
|
||||
|
||||
loForm = Newobject('frm_facturare_articole2', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vcx')
|
||||
DO asserteaza WITH 'document nou: Newobject(frm_facturare_articole2) reuseste (fara Show, fara factureaza)', Vartype(m.loForm) == 'O', Vartype(m.loForm)
|
||||
IF Vartype(m.loForm) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
DO asserteaza WITH 'document nou: poDate.lEditare = .F. (stare naturala, nesetata de nimeni)', !poDate.lEditare, Transform(poDate.lEditare)
|
||||
|
||||
IF loForm.do_exista_obiect('Ct_clb_altele')
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_altele ramane editabil', loForm.Ct_clb_altele.lactiv, Transform(loForm.Ct_clb_altele.lactiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH 'document nou grupB: clb_fdoc.cboFdoc ramane editabil', loForm.clb_fdoc.cboFdoc.Enabled, Transform(loForm.clb_fdoc.cboFdoc.Enabled)
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_nume_client ramane editabil', loForm.Ct_clb_nume_client.lactiv, Transform(loForm.Ct_clb_nume_client.lactiv)
|
||||
IF loForm.do_exista_obiect('Ct_clb_valuta')
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_valuta ramane editabil', loForm.Ct_clb_valuta.lactiv, Transform(loForm.Ct_clb_valuta.lactiv)
|
||||
ENDIF
|
||||
IF loForm.do_exista_obiect('Clb_zi_curs')
|
||||
DO asserteaza WITH 'document nou grupB: Clb_zi_curs ramane editabil', !loForm.Clb_zi_curs.text_simplu1.ReadOnly, Transform(loForm.Clb_zi_curs.text_simplu1.ReadOnly)
|
||||
ENDIF
|
||||
IF loForm.do_exista_obiect('Ct_clb_gestiune_init', loForm.ct_contabilitate)
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_gestiune_init ramane editabil', loForm.ct_contabilitate.Ct_clb_gestiune_init.lactiv, Transform(loForm.ct_contabilitate.Ct_clb_gestiune_init.lactiv)
|
||||
ENDIF
|
||||
IF loForm.do_exista_obiect('Ct_clb_politici_preturi')
|
||||
DO asserteaza WITH 'document nou grupB: Ct_clb_politici_preturi ramane editabil', loForm.Ct_clb_politici_preturi.lactiv, Transform(loForm.Ct_clb_politici_preturi.lactiv)
|
||||
ENDIF
|
||||
DO asserteaza WITH 'document nou grupB: but_incarca_articole ramane editabil', loForm.but_incarca_articole.Enabled, Transform(loForm.but_incarca_articole.Enabled)
|
||||
*!* but_cursuri.Enabled = Used('crscursuri') AND Reccount('crscursuri')>0 (ofacturare.vc2:20918),
|
||||
*!* iar citeste_cursuri_zi() ruleaza in Init doar pentru Inlist(poDate.tip,1,22,5,29,7,10,45)
|
||||
*!* (:20899) - tip=3 (comanda) NU e in acea lista, deci but_cursuri e NATURAL needitabil pe un
|
||||
*!* document nou de acest tip, indiferent de lEditare. Prima trecere a acestei suite astepta
|
||||
*!* .T. aici (copiat din test_s8_pas7_cablare.prg) si a picat: R1 (curatenie de aliasuri intre
|
||||
*!* cazuri) a inchis 'crscursuri' ramas din cazul anterior, care mascase adevaratul comportament -
|
||||
*!* asertiunea veche trecea din intamplare, nu din cauza codului. Corectata aici la valoarea reala.
|
||||
DO asserteaza WITH 'document nou grupB: but_cursuri needitabil natural (tip=3 nu incarca crscursuri in Init, independent de lEditare)', !loForm.but_cursuri.Enabled, Transform(loForm.but_cursuri.Enabled)
|
||||
IF loForm.do_exista_obiect('ct_incasare')
|
||||
DO asserteaza WITH 'document nou grupC: ct_incasare ramane editabil', loForm.ct_incasare.Enabled, Transform(loForm.ct_incasare.Enabled)
|
||||
DO asserteaza WITH 'document nou grupC: chk_incasare ramane editabil', loForm.chk_incasare.Enabled, Transform(loForm.chk_incasare.Enabled)
|
||||
ENDIF
|
||||
|
||||
loForm.Release()
|
||||
ENDPROC
|
||||
|
||||
|
||||
*!* S8 - incasarea la editare (D1/D3/D4). Replica dovedita a corpului do_editare_unificata pana la
|
||||
*!* Createobject (acelasi tipar validat in test_s8_pas7_cablare.prg).
|
||||
PROCEDURE VerificaIncasareLaEditare
|
||||
LPARAMETERS tnIdVanzare, tcEticheta, tnIncasatAsteptat, tnNrIncasareAsteptat, tnTipIncasareAsteptat, tnModAsteptat
|
||||
|
||||
LOCAL lcPrefix, lnSucces, loForm, pnDiscountRon, pnDiscountValuta
|
||||
LOCAL lnSters, llEProforma, lnTipDoc, lcSnapPlajeA, lcSnapPlajeB
|
||||
PRIVATE pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP, poDate
|
||||
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP
|
||||
lcPrefix = Transform(m.tnIdVanzare) + ' [incasare ' + m.tcEticheta + ']'
|
||||
gcMockUltimMesaj = ''
|
||||
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' INAINTE'
|
||||
|
||||
IF Used('v_plaje_inc_a')
|
||||
Use In v_plaje_inc_a
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_inc_a')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeA = CursorToSnapshot('v_plaje_inc_a')
|
||||
Use In v_plaje_inc_a
|
||||
|
||||
lnSucces = goExecutor.oExecute('select id_vanzare,cod,data_act,sters,id_fact,eproforma,tip,incasat from fact_vfacturi where id_vanzare=' + Transform(m.tnIdVanzare), 'crsIncUnic')
|
||||
goExecutor.oReset()
|
||||
DO asserteaza WITH lcPrefix + ': documentul a putut fi reincarcat', lnSucces >= 0 AND Used('crsIncUnic') AND Reccount('crsIncUnic') = 1, Transform(lnSucces)
|
||||
IF !(lnSucces >= 0 AND Used('crsIncUnic') AND Reccount('crsIncUnic') = 1)
|
||||
RETURN
|
||||
ENDIF
|
||||
SELECT crsIncUnic
|
||||
lnIdVanzareP = id_vanzare
|
||||
lnCod = cod
|
||||
pnAn = Year(data_act)
|
||||
pnLuna = Month(data_act)
|
||||
lnSters = sters
|
||||
lnIdFact = id_fact
|
||||
llEProforma = (eproforma = 1)
|
||||
lnTipDoc = tip
|
||||
Use In crsIncUnic
|
||||
|
||||
DO asserteaza WITH lcPrefix + ': garzile do_editare_unificata trecute (nesters/neproforma/tip valid/luna curenta)', ;
|
||||
lnSters = 0 AND !llEProforma AND !Inlist(lnTipDoc,44,45,46,51) AND (pnAn*12+pnLuna) == (gnAn*12+gnLuna), ''
|
||||
DO asserteaza WITH lcPrefix + ': fara referinte (incasari/plati)', !ReferinteDocumenteNota(pnAn, pnLuna, lnCod), ''
|
||||
DO asserteaza WITH lcPrefix + ': nu e in eFactura', !EsteInEFactura(lnIdFact), ''
|
||||
DO asserteaza WITH lcPrefix + ': fara urmasi', !DocumentAreUrmasi(lnIdVanzareP), ''
|
||||
|
||||
poDate = IncarcaAntetFacturaEditare(lnIdVanzareP, @pnDiscountRon, @pnDiscountValuta)
|
||||
DO asserteaza WITH lcPrefix + ': IncarcaAntetFacturaEditare reuseste', Vartype(m.poDate) == 'O', Vartype(m.poDate)
|
||||
IF Vartype(m.poDate) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
|
||||
IncarcaLiniiFacturaEditare(poDate, lnIdVanzareP)
|
||||
|
||||
update_jtva_coloane([JV], [jtva_coloane_temp])
|
||||
update_saft_taxtable()
|
||||
IF Used('jtva_coloane')
|
||||
Use In jtva_coloane
|
||||
ENDIF
|
||||
IF poDate.tva_incasare = 0
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ELSE
|
||||
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
|
||||
ENDIF
|
||||
|
||||
loForm = Createobject('frm_facturare_articole2')
|
||||
DO asserteaza WITH lcPrefix + ': formularul se deschide fara eroare (defectul 5 latent nu se activeaza)', Vartype(m.loForm) == 'O', Vartype(m.loForm)
|
||||
IF Vartype(m.loForm) <> 'O'
|
||||
RETURN
|
||||
ENDIF
|
||||
DO asserteaza WITH lcPrefix + ': G9 niciun amessagebox la Createobject/Init', Empty(gcMockUltimMesaj), gcMockUltimMesaj
|
||||
|
||||
*!* --- asertiunile care prind regresia D1/D3/D4 ---
|
||||
DO asserteaza WITH lcPrefix + ': poDate.incasat = valoarea din baza (NU suprascrisa cu totalctva)', ;
|
||||
Round(Nvl(poDate.incasat,-1),2) == Round(m.tnIncasatAsteptat,2), Transform(Nvl(poDate.incasat,-1))
|
||||
DO asserteaza WITH lcPrefix + ': poDate.nr_incasare nu a fost zeroit', ;
|
||||
Nvl(poDate.nr_incasare,-1) == m.tnNrIncasareAsteptat, Transform(Nvl(poDate.nr_incasare,-1))
|
||||
DO asserteaza WITH lcPrefix + ': poDate.ntip_incasare incarcat corect', ;
|
||||
Nvl(poDate.ntip_incasare,-1) == m.tnTipIncasareAsteptat, Transform(Nvl(poDate.ntip_incasare,-1))
|
||||
DO asserteaza WITH lcPrefix + ': modul afisat (opt_incasat.Value) corespunde tip_incasare', ;
|
||||
loForm.ct_incasare.opt_incasat.Value == m.tnModAsteptat - 1, Transform(loForm.ct_incasare.opt_incasat.Value)
|
||||
DO asserteaza WITH lcPrefix + ': chk_incasare.Value = 1 (document incasat)', loForm.chk_incasare.Value == 1, Transform(loForm.chk_incasare.Value)
|
||||
DO asserteaza WITH lcPrefix + ': grupC ct_incasare needitabil', !loForm.ct_incasare.Enabled, Transform(loForm.ct_incasare.Enabled)
|
||||
DO asserteaza WITH lcPrefix + ': grupC chk_incasare needitabil', !loForm.chk_incasare.Enabled, Transform(loForm.chk_incasare.Enabled)
|
||||
|
||||
loForm.ndiscfactron = pnDiscountRon
|
||||
loForm.ndiscfactval = pnDiscountValuta
|
||||
loForm.do_calculeaza_totaluri()
|
||||
|
||||
*!* nemodal: eliberarea din Timer, in interiorul propriului Show() modal, blocheaza VFP in Release()
|
||||
loForm.WindowType = 0
|
||||
goDriverS8p7.Reseteaza()
|
||||
loForm.Show()
|
||||
DO asserteaza WITH lcPrefix + ': niciun amessagebox pe parcursul Show()', Empty(gcMockUltimMesaj), gcMockUltimMesaj
|
||||
|
||||
Try
|
||||
loForm.Release()
|
||||
Catch
|
||||
Endtry
|
||||
|
||||
IF Used('v_plaje_inc_b')
|
||||
Use In v_plaje_inc_b
|
||||
ENDIF
|
||||
lnSucces = goExecutor.oExecute([select id_plaja, urmval from vplaje_numere order by id_plaja], 'v_plaje_inc_b')
|
||||
goExecutor.oReset()
|
||||
lcSnapPlajeB = CursorToSnapshot('v_plaje_inc_b')
|
||||
Use In v_plaje_inc_b
|
||||
DO asserteaza WITH lcPrefix + ' G2: vplaje_numere identic inainte/dupa (niciun numar alocat)', m.lcSnapPlajeA == m.lcSnapPlajeB, ''
|
||||
|
||||
DO CurataAliasuriReziduale
|
||||
DO LogAUsed WITH lcPrefix + ' DUPA'
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE CursorToSnapshot
|
||||
LPARAMETERS tcAlias
|
||||
|
||||
LOCAL lcResult, lnI
|
||||
lcResult = ''
|
||||
SELECT (m.tcAlias)
|
||||
SCAN
|
||||
FOR lnI = 1 TO FCOUNT()
|
||||
lcResult = lcResult + Transform(Evaluate(Field(m.lnI))) + '|'
|
||||
ENDFOR
|
||||
lcResult = lcResult + Chr(10)
|
||||
ENDSCAN
|
||||
RETURN m.lcResult
|
||||
ENDPROC
|
||||
|
||||
|
||||
PROCEDURE asserteaza
|
||||
LPARAMETERS tcNume, tlConditie, tcValoare
|
||||
|
||||
IF m.tlConditie
|
||||
gnPass = gnPass + 1
|
||||
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ELSE
|
||||
gnFail = gnFail + 1
|
||||
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + Transform(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
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
|
||||
|
||||
|
||||
*!* driverS8p7: gaseste FRM_FACTURARE_ARTICOLE2 in _SCREEN.Forms in timp ce .Show() e blocat pe
|
||||
*!* modal (acelasi tipar ca test_s8_pas7_cablare.prg). Citeste Ct_clb_altele din Objects (nu
|
||||
*!* PEMSTATUS) inainte sa elibereze forma, ceea ce incheie .Show() si reda controlul apelantului.
|
||||
DEFINE CLASS driverS8p7 AS Custom
|
||||
lBusy = .F.
|
||||
lGasit = .F.
|
||||
lCtClbPrezent = .F.
|
||||
lCtClbAlteleActiv = .F.
|
||||
cCtClbEticheta = ''
|
||||
nTotalRon = 0
|
||||
nTotalVal = 0
|
||||
|
||||
lClbFdocPrezent = .F.
|
||||
lClbFdocActiv = .F.
|
||||
lCtClbNumeClientPrezent = .F.
|
||||
lCtClbNumeClientActiv = .F.
|
||||
lCtClbValutaPrezent = .F.
|
||||
lCtClbValutaActiv = .F.
|
||||
lClbZiCursPrezent = .F.
|
||||
lClbZiCursActiv = .F.
|
||||
lCtClbGestiuneInitPrezent = .F.
|
||||
lCtClbGestiuneInitActiv = .F.
|
||||
lCtClbPolPreturiPrezent = .F.
|
||||
lCtClbPolPreturiActiv = .F.
|
||||
lButIncarcaArticolePrezent = .F.
|
||||
lButIncarcaArticoleActiv = .F.
|
||||
lButCursuriPrezent = .F.
|
||||
lButCursuriActiv = .F.
|
||||
lCtIncasarePrezent = .F.
|
||||
lCtIncasareActiv = .F.
|
||||
lChkIncasarePrezent = .F.
|
||||
lChkIncasareActiv = .F.
|
||||
|
||||
PROCEDURE Reseteaza
|
||||
This.lGasit = .F.
|
||||
This.lCtClbPrezent = .F.
|
||||
This.lCtClbAlteleActiv = .F.
|
||||
This.cCtClbEticheta = ''
|
||||
This.nTotalRon = 0
|
||||
This.nTotalVal = 0
|
||||
This.lClbFdocPrezent = .F.
|
||||
This.lClbFdocActiv = .F.
|
||||
This.lCtClbNumeClientPrezent = .F.
|
||||
This.lCtClbNumeClientActiv = .F.
|
||||
This.lCtClbValutaPrezent = .F.
|
||||
This.lCtClbValutaActiv = .F.
|
||||
This.lClbZiCursPrezent = .F.
|
||||
This.lClbZiCursActiv = .F.
|
||||
This.lCtClbGestiuneInitPrezent = .F.
|
||||
This.lCtClbGestiuneInitActiv = .F.
|
||||
This.lCtClbPolPreturiPrezent = .F.
|
||||
This.lCtClbPolPreturiActiv = .F.
|
||||
This.lButIncarcaArticolePrezent = .F.
|
||||
This.lButIncarcaArticoleActiv = .F.
|
||||
This.lButCursuriPrezent = .F.
|
||||
This.lButCursuriActiv = .F.
|
||||
This.lCtIncasarePrezent = .F.
|
||||
This.lCtIncasareActiv = .F.
|
||||
This.lChkIncasarePrezent = .F.
|
||||
This.lChkIncasareActiv = .F.
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE Executa
|
||||
IF This.lBusy OR This.lGasit
|
||||
RETURN
|
||||
ENDIF
|
||||
This.lBusy = .T.
|
||||
TRY
|
||||
LOCAL lnI, lnJ, lnJ2, loFrm2, loObj, loObj2
|
||||
FOR lnI = 1 TO _SCREEN.FormCount
|
||||
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
|
||||
loFrm2 = _SCREEN.Forms(m.lnI)
|
||||
This.lGasit = .T.
|
||||
This.nTotalRon = Nvl(loFrm2.ntotalron, 0)
|
||||
This.nTotalVal = Nvl(loFrm2.ntotalval, 0)
|
||||
FOR lnJ = 1 TO loFrm2.Objects.Count
|
||||
loObj = loFrm2.Objects(m.lnJ)
|
||||
DO CASE
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_ALTELE'
|
||||
This.lCtClbPrezent = .T.
|
||||
This.lCtClbAlteleActiv = loObj.lactiv
|
||||
This.cCtClbEticheta = Alltrim(loObj.clb_tx_cautare.lb_SIMPLU1.Caption)
|
||||
CASE Upper(loObj.Name) == 'CLB_FDOC'
|
||||
This.lClbFdocPrezent = .T.
|
||||
This.lClbFdocActiv = loObj.cboFdoc.Enabled
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_NUME_CLIENT'
|
||||
This.lCtClbNumeClientPrezent = .T.
|
||||
This.lCtClbNumeClientActiv = loObj.lactiv
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_VALUTA'
|
||||
This.lCtClbValutaPrezent = .T.
|
||||
This.lCtClbValutaActiv = loObj.lactiv
|
||||
CASE Upper(loObj.Name) == 'CLB_ZI_CURS'
|
||||
This.lClbZiCursPrezent = .T.
|
||||
This.lClbZiCursActiv = !loObj.text_simplu1.ReadOnly
|
||||
CASE Upper(loObj.Name) == 'CT_CLB_POLITICI_PRETURI'
|
||||
This.lCtClbPolPreturiPrezent = .T.
|
||||
This.lCtClbPolPreturiActiv = loObj.lactiv
|
||||
CASE Upper(loObj.Name) == 'BUT_INCARCA_ARTICOLE'
|
||||
This.lButIncarcaArticolePrezent = .T.
|
||||
This.lButIncarcaArticoleActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'BUT_CURSURI'
|
||||
This.lButCursuriPrezent = .T.
|
||||
This.lButCursuriActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'CT_INCASARE'
|
||||
This.lCtIncasarePrezent = .T.
|
||||
This.lCtIncasareActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'CHK_INCASARE'
|
||||
This.lChkIncasarePrezent = .T.
|
||||
This.lChkIncasareActiv = loObj.Enabled
|
||||
CASE Upper(loObj.Name) == 'CT_CONTABILITATE'
|
||||
FOR lnJ2 = 1 TO loObj.Objects.Count
|
||||
loObj2 = loObj.Objects(m.lnJ2)
|
||||
IF Upper(loObj2.Name) == 'CT_CLB_GESTIUNE_INIT'
|
||||
This.lCtClbGestiuneInitPrezent = .T.
|
||||
This.lCtClbGestiuneInitActiv = loObj2.lactiv
|
||||
ENDIF
|
||||
ENDFOR
|
||||
ENDCASE
|
||||
ENDFOR
|
||||
loFrm2.Release()
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDFOR
|
||||
CATCH TO loExcS8p7
|
||||
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
FINALLY
|
||||
This.lBusy = .F.
|
||||
ENDTRY
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
@@ -50,7 +50,7 @@ ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
*-- mock amessagebox incarcat PRIMUL, inaintea lantului real (la nume duplicat castiga primul gasit)
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg ADDITIVE
|
||||
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
||||
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1)
|
||||
QUIT
|
||||
|
||||
154
utile/Teste/editare_factura/test_s8_pas1_aplica.prg
Normal file
154
utile/Teste/editare_factura/test_s8_pas1_aplica.prg
Normal file
@@ -0,0 +1,154 @@
|
||||
* test_s8_pas1_aplica.prg
|
||||
* S8 pas 1 (planul #13) - aplica CREATE OR REPLACE VIEW VVANZARI_ARTICOLE (extensie) pe
|
||||
* MARIUSM_AUTO, apoi verifica in aceeasi rulare: coloanele noi (30 in loc de 23, cele vechi
|
||||
* neschimbate ca pozitie/tip), randurile pe id_vanzare de control - IDENTICE cu inainte
|
||||
* (1047->2, 1050->4, 1040->1, 1055->2, 1125->4) - si continut real (nu NULL) pe coloanele noi
|
||||
* pentru un document cu contract+valuta (1040) si un document cu pretd real (894).
|
||||
* Scrie in Oracle (CREATE OR REPLACE VIEW, comanda idempotenta) - fara DROP, fara atingere de
|
||||
* date. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_pas1_aplica_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
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', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcOut, lcSql, llOk
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 1. aplica CREATE OR REPLACE VIEW ---
|
||||
lcSql = [create or replace view vvanzari_articole as ] + ;
|
||||
[select vd.id_vanzare, vd.id_vanzare_det, vd.id_articol, vd.cantitate, vd.pret, vd.pret_cu_tva, vd.proc_tvav, ] + ;
|
||||
[vd.discount_unitar, vd.id_gestiune, vd.cont, vd.id_valuta, vd.id_jtva_coloana, vd.serie, vd.explicatie, ] + ;
|
||||
[vd.taxcode, vd.lot, vd.sters, vd.id_vanzare_set, vd.pret_achizitie, na.denumire, na.codmat, ng.nume_gestiune, ] + ;
|
||||
[nv.nume_val, vd.id_pol, vd.id_ctr, vd.diferenta, vd.pretd, vd.id_valutad, vc.curs, vc.multiplicator ] + ;
|
||||
[from vanzari_detalii vd ] + ;
|
||||
[left join nom_articole na on na.id_articol = vd.id_articol ] + ;
|
||||
[left join nom_gestiuni ng on ng.id_gestiune = vd.id_gestiune ] + ;
|
||||
[left join nom_valute nv on nv.id_valuta = vd.id_valuta ] + ;
|
||||
[left join vanzari_cursuri vc on vc.id_vanzare = vd.id_vanzare and vc.id_valuta = vd.id_valuta]
|
||||
|
||||
llOk = goExecutor.oExecuta(m.lcSql)
|
||||
lcOut = lcOut + '--- CREATE OR REPLACE VIEW ---' + CHR(13) + CHR(10)
|
||||
lcOut = lcOut + 'rezultat: ' + TRANSFORM(m.llOk) + CHR(13) + CHR(10)
|
||||
IF !m.llOk
|
||||
lcOut = lcOut + 'EROARE: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
IF !m.llOk
|
||||
STRTOFILE('OPRIT dupa eroare la CREATE OR REPLACE - nu se mai verifica.' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
*!* --- 2. marcheaza versiunea (registru intern Oracle, separat de docs\scripturi_oracle_13.md) ---
|
||||
*!* "exec ..." e sintaxa SQL*Plus, nu SQL valid - prin goExecutor blocheaza rularea headless;
|
||||
*!* forma corecta aici e blocul PL/SQL anonim
|
||||
llOk = goExecutor.oExecuta([begin pack_migrare.UpdateVersiune('wip13_2026_09_02_01_COMUN_VVANZARI_ARTICOLE_EXT'); end;])
|
||||
lcOut = lcOut + '--- UpdateVersiune ---' + CHR(13) + CHR(10) + 'rezultat: ' + TRANSFORM(m.llOk) + CHR(13) + CHR(10)
|
||||
IF !m.llOk
|
||||
lcOut = lcOut + 'EROARE: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 3. coloanele DUPA - trebuie 30, primele 23 neschimbate ca pozitie/tip ---
|
||||
lcSql = [select column_id, column_name, data_type, data_length, data_precision, data_scale ] + ;
|
||||
[from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VVANZARI_ARTICOLE' order by column_id]
|
||||
IF Used('crscols')
|
||||
Use In crscols
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crscols]) < 0
|
||||
lcOut = lcOut + 'EROARE coloane dupa: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- coloane DUPA (' + TRANSFORM(RECCOUNT('crscols')) + ', asteptat 30) ---' + CHR(13) + CHR(10)
|
||||
SELECT crscols
|
||||
SCAN
|
||||
lcOut = lcOut + TRANSFORM(column_id) + '. ' + ALLTRIM(column_name) + ' ' + ALLTRIM(data_type) + ;
|
||||
IIF(NVL(data_precision,0) > 0, '(' + TRANSFORM(data_precision) + ',' + TRANSFORM(NVL(data_scale,0)) + ')', ;
|
||||
IIF(NVL(data_length,0) > 0 AND ALLTRIM(data_type) $ 'VARCHAR2,CHAR', '(' + TRANSFORM(data_length) + ')', '')) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crscols
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 4. randuri DUPA pe cele 5 id_vanzare de control - trebuie identice cu INAINTE ---
|
||||
lcSql = [select id_vanzare, count(*) as nr from vvanzari_articole where id_vanzare in (1050,1047,1055,1040,1125) and sters = 0 group by id_vanzare order by id_vanzare]
|
||||
IF Used('crscnt')
|
||||
Use In crscnt
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crscnt]) < 0
|
||||
lcOut = lcOut + 'EROARE numarare dupa: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- randuri sters=0 pe id_vanzare de control (DUPA) - asteptat 1040->1,1047->2,1050->4,1055->2,1125->4 ---' + CHR(13) + CHR(10)
|
||||
SELECT crscnt
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' -> ' + TRANSFORM(nr) + ' randuri' + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crscnt
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 5. continut real pe coloanele noi: 1040 (contract + valuta), 894 (pretd real) ---
|
||||
lcSql = [select id_vanzare, id_vanzare_det, id_pol, id_ctr, diferenta, pretd, id_valutad, curs, multiplicator ] + ;
|
||||
[from vvanzari_articole where id_vanzare in (1040,894) and sters = 0 order by id_vanzare, id_vanzare_det]
|
||||
IF Used('crscheck')
|
||||
Use In crscheck
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crscheck]) < 0
|
||||
lcOut = lcOut + 'EROARE continut nou: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- continut coloane noi, 1040 (contract+valuta) si 894 (pretd real) ---' + CHR(13) + CHR(10)
|
||||
SELECT crscheck
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_pol=' + TRANSFORM(NVL(id_pol,-1)) + ' id_ctr=' + TRANSFORM(NVL(id_ctr,-1)) + ;
|
||||
' diferenta=' + TRANSFORM(NVL(diferenta,-1)) + ' pretd=' + TRANSFORM(NVL(pretd,-1)) + ;
|
||||
' id_valutad=' + TRANSFORM(NVL(id_valutad,-1)) + ' curs=' + TRANSFORM(NVL(curs,-1)) + ;
|
||||
' multiplicator=' + TRANSFORM(NVL(multiplicator,-1)) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crscheck
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 6. proba directa a consumatorului real IncarcaArticoleFactura (select v.*) - nu trebuie sa pice ---
|
||||
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
||||
IncarcaArticoleFactura(1050)
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- IncarcaArticoleFactura(1050) dupa extindere ---' + CHR(13) + CHR(10)
|
||||
lcOut = lcOut + 'Reccount(tvd) = ' + TRANSFORM(RECCOUNT('tvd')) + ' (asteptat 4)' + CHR(13) + CHR(10)
|
||||
lcOut = lcOut + 'Fcount(tvd) = ' + TRANSFORM(FCOUNT('tvd')) + CHR(13) + CHR(10)
|
||||
lcOut = lcOut + 'are id_pol: ' + TRANSFORM(TYPE('tvd.id_pol') <> 'U') + ', are curs: ' + TRANSFORM(TYPE('tvd.curs') <> 'U') + CHR(13) + CHR(10)
|
||||
IF Used('tvd')
|
||||
Use In tvd
|
||||
ENDIF
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
115
utile/Teste/editare_factura/test_s8_pas1_cardinalitate.prg
Normal file
115
utile/Teste/editare_factura/test_s8_pas1_cardinalitate.prg
Normal file
@@ -0,0 +1,115 @@
|
||||
* test_s8_pas1_cardinalitate.prg
|
||||
* S8 pas 1 - continuare investigare read-only: verifica daca (id_vanzare, id_valuta) e unic in
|
||||
* VANZARI_CURSURI (altfel un join pe aceasta cheie ar multiplica randurile view-ului), cauta un
|
||||
* exemplu cu pretd nenul, si numara randurile INAINTE pe cateva id_vanzare suplimentare
|
||||
* (1055, 1040, 1125) care vor fi folosite ca proba de continut real (contract / valuta).
|
||||
* Nu scrie nimic in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_pas1_cardinalitate_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
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', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcOut, lcSql
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 1. dubluri pe (id_vanzare, id_valuta) in VANZARI_CURSURI - risc de multiplicare la join ---
|
||||
lcSql = [select max(nr) as maxnr, count(*) as grupuri from (select id_vanzare, id_valuta, count(*) as nr from vanzari_cursuri group by id_vanzare, id_valuta having count(*) > 1)]
|
||||
IF Used('crsdup')
|
||||
Use In crsdup
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crsdup]) < 0
|
||||
lcOut = lcOut + 'EROARE dubluri: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + '--- dubluri (id_vanzare,id_valuta) in VANZARI_CURSURI ---' + CHR(13) + CHR(10)
|
||||
lcOut = lcOut + 'grupuri cu >1 rand: ' + TRANSFORM(NVL(crsdup.grupuri,0)) + ', max randuri intr-un grup: ' + TRANSFORM(NVL(crsdup.maxnr,0)) + CHR(13) + CHR(10)
|
||||
USE IN crsdup
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 2. exemplu cu pretd nenul ---
|
||||
lcSql = [select * from (select id_vanzare, id_vanzare_det, id_valutad, pretd from vanzari_detalii where nvl(pretd,0) <> 0 and sters = 0 order by id_vanzare_det desc) where rownum <= 5]
|
||||
IF Used('crspretd')
|
||||
Use In crspretd
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crspretd]) < 0
|
||||
lcOut = lcOut + 'EROARE pretd nenul: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- exemple cu pretd <> 0 (max 5) ---' + CHR(13) + CHR(10)
|
||||
IF RECCOUNT('crspretd') = 0
|
||||
lcOut = lcOut + '(niciun rand cu pretd <> 0 in toata VANZARI_DETALII)' + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
SELECT crspretd
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ' id_valutad=' + TRANSFORM(NVL(id_valutad,-1)) + ' pretd=' + TRANSFORM(pretd) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
USE IN crspretd
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 3. randuri INAINTE pe id_vanzare suplimentare (1055 contract, 1040 contract, 1125 valuta) ---
|
||||
lcSql = [select id_vanzare, count(*) as nr from vvanzari_articole where id_vanzare in (1055,1040,1125) and sters = 0 group by id_vanzare order by id_vanzare]
|
||||
IF Used('crscnt2')
|
||||
Use In crscnt2
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crscnt2]) < 0
|
||||
lcOut = lcOut + 'EROARE numarare suplimentara: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- randuri sters=0 pe id_vanzare 1055/1040/1125 (INAINTE) ---' + CHR(13) + CHR(10)
|
||||
SELECT crscnt2
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' -> ' + TRANSFORM(nr) + ' randuri' + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crscnt2
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 4. VANZARI_CURSURI pentru id_vanzare 1055/1040/1125, ca sa vedem daca exista randuri de curs pentru ele ---
|
||||
lcSql = [select id_vanzare, id_valuta, curs, multiplicator from vanzari_cursuri where id_vanzare in (1055,1040,1125) order by id_vanzare]
|
||||
IF Used('crscurex')
|
||||
Use In crscurex
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crscurex]) < 0
|
||||
lcOut = lcOut + 'EROARE vanzari_cursuri exemple: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- VANZARI_CURSURI pentru 1055/1040/1125 ---' + CHR(13) + CHR(10)
|
||||
IF RECCOUNT('crscurex') = 0
|
||||
lcOut = lcOut + '(niciun rand)' + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
SELECT crscurex
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' id_valuta=' + TRANSFORM(id_valuta) + ' curs=' + TRANSFORM(curs) + ' multiplicator=' + TRANSFORM(multiplicator) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
USE IN crscurex
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
135
utile/Teste/editare_factura/test_s8_pas1_cursuri.prg
Normal file
135
utile/Teste/editare_factura/test_s8_pas1_cursuri.prg
Normal file
@@ -0,0 +1,135 @@
|
||||
* test_s8_pas1_cursuri.prg
|
||||
* S8 pas 1 - continuare investigare read-only: CURS/MULTIPLICATOR nu exista direct pe
|
||||
* VANZARI_DETALII (confirmat de test_s8_pas1_ddl_view.prg). Aici se verifica VANZARI_CURSURI:
|
||||
* structura, cheia de join catre o linie de vanzare, si daca join-ul ar multiplica randurile
|
||||
* view-ului (risc de cardinalitate). Nu scrie nimic in Oracle. QUIT la final.
|
||||
|
||||
SET SAFETY OFF
|
||||
SET TALK OFF
|
||||
|
||||
PUBLIC gcErrLog
|
||||
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_pas1_cursuri_log.txt'
|
||||
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
||||
|
||||
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', 2026, 8
|
||||
IF gnHandle <= 0
|
||||
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
ENDIF
|
||||
|
||||
LOCAL lcOut, lcSql
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 1. exista tabela VANZARI_CURSURI? coloanele ei ---
|
||||
lcSql = [select column_id, column_name, data_type from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI_CURSURI' order by column_id]
|
||||
IF Used('crscur')
|
||||
Use In crscur
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crscur]) < 0
|
||||
lcOut = lcOut + 'EROARE VANZARI_CURSURI: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + '--- VANZARI_CURSURI, coloane (' + TRANSFORM(RECCOUNT('crscur')) + ') ---' + CHR(13) + CHR(10)
|
||||
IF RECCOUNT('crscur') = 0
|
||||
lcOut = lcOut + '(tabela nu exista sau owner gresit)' + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
SELECT crscur
|
||||
SCAN
|
||||
lcOut = lcOut + TRANSFORM(column_id) + '. ' + ALLTRIM(column_name) + ' ' + ALLTRIM(data_type) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
ENDIF
|
||||
USE IN crscur
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 2. VANZARI, coloane CURS/MULTIPLICATOR pe antet (ca sa comparam cu ce s-ar citi pe linie) ---
|
||||
lcSql = [select column_id, column_name, data_type from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VANZARI' ] + ;
|
||||
[and (column_name like '%CURS%' or column_name like '%MULTIPLIC%') order by column_id]
|
||||
IF Used('crsvcurs')
|
||||
Use In crsvcurs
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crsvcurs]) < 0
|
||||
lcOut = lcOut + 'EROARE VANZARI curs: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- VANZARI (antet), coloane CURS/MULTIPLICATOR (' + TRANSFORM(RECCOUNT('crsvcurs')) + ') ---' + CHR(13) + CHR(10)
|
||||
SELECT crsvcurs
|
||||
SCAN
|
||||
lcOut = lcOut + TRANSFORM(column_id) + '. ' + ALLTRIM(column_name) + ' ' + ALLTRIM(data_type) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crsvcurs
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 3. mostre de valori din VANZARI_DETALII pentru documentele 1050/1047 - PRETD, ID_VALUTAD, ID_CTR, ID_POL, DIFERENTA ---
|
||||
lcSql = [select id_vanzare, id_vanzare_det, id_pol, id_ctr, diferenta, pretd, id_valutad from vanzari_detalii where id_vanzare in (1050,1047) order by id_vanzare, id_vanzare_det]
|
||||
IF Used('crsval')
|
||||
Use In crsval
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crsval]) < 0
|
||||
lcOut = lcOut + 'EROARE mostre 1050/1047: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- VANZARI_DETALII, mostre 1050/1047 ---' + CHR(13) + CHR(10)
|
||||
SELECT crsval
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ;
|
||||
' id_pol=' + TRANSFORM(NVL(id_pol,-1)) + ' id_ctr=' + TRANSFORM(NVL(id_ctr,-1)) + ;
|
||||
' diferenta=' + TRANSFORM(NVL(diferenta,-1)) + ' pretd=' + TRANSFORM(NVL(pretd,-1)) + ;
|
||||
' id_valutad=' + TRANSFORM(NVL(id_valutad,-1)) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crsval
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
*!* --- 4. cauta un document cu id_ctr populat si unul cu id_valutad populat (in afara de 1050/1047), ca proba de continut real ---
|
||||
lcSql = [select * from (select id_vanzare, id_vanzare_det, id_ctr, id_pol from vanzari_detalii where id_ctr is not null and sters = 0 order by id_vanzare_det desc) where rownum <= 3]
|
||||
IF Used('crsctr')
|
||||
Use In crsctr
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crsctr]) < 0
|
||||
lcOut = lcOut + 'EROARE cautare id_ctr: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- exemple cu id_ctr populat (max 3) ---' + CHR(13) + CHR(10)
|
||||
SELECT crsctr
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ' id_ctr=' + TRANSFORM(id_ctr) + ' id_pol=' + TRANSFORM(NVL(id_pol,-1)) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crsctr
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
lcSql = [select * from (select id_vanzare, id_vanzare_det, id_valutad, pretd from vanzari_detalii where id_valutad is not null and sters = 0 order by id_vanzare_det desc) where rownum <= 3]
|
||||
IF Used('crsval2')
|
||||
Use In crsval2
|
||||
ENDIF
|
||||
IF goExecutor.oExecute(m.lcSql, [crsval2]) < 0
|
||||
lcOut = lcOut + 'EROARE cautare id_valutad: ' + goExecutor.cEroare + CHR(13) + CHR(10)
|
||||
ELSE
|
||||
lcOut = lcOut + CHR(13) + CHR(10) + '--- exemple cu id_valutad populat (max 3) ---' + CHR(13) + CHR(10)
|
||||
SELECT crsval2
|
||||
SCAN
|
||||
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ' id_valutad=' + TRANSFORM(id_valutad) + ' pretd=' + TRANSFORM(NVL(pretd,-1)) + CHR(13) + CHR(10)
|
||||
ENDSCAN
|
||||
USE IN crsval2
|
||||
ENDIF
|
||||
goExecutor.oReset()
|
||||
STRTOFILE(m.lcOut, gcErrLog, 1)
|
||||
lcOut = ''
|
||||
|
||||
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
QUIT
|
||||
|
||||
|
||||
PROCEDURE test_error_handler
|
||||
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
||||
|
||||
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
||||
ENDPROC
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user