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
670 lines
30 KiB
Plaintext
670 lines
30 KiB
Plaintext
* test_s6_2_comanda_contract.prg
|
|
* Headless: proba de paritate v1 vs v2 pe doua surse care trec prin incarcare in masa
|
|
* (do_incarca_articole / incarca_cursor_articole): COMANDA (tip 3) si CONTRACT (tip 2).
|
|
* Emite 4 documente REALE in Oracle (MARIUSM_AUTO@ROA_CENTRAL, tipdoc 5, seria SSS):
|
|
* comanda v1 (frm_facturare_articole) <- listaid 2479 (client FETCU RELU, 3 linii)
|
|
* comanda v2 (frm_facturare_articole2) <- listaid 2478 (client BALOI IRINA, 9 linii)
|
|
* contract v1 (frm_facturare_articole) <- listaid 20 (client ABC PLOIESTI, 4 articole)
|
|
* contract v2 (frm_facturare_articole2) <- listaid 222 (client ABSOLUT SRL, 3 articole)
|
|
* Surse diferite intre v1 si v2 (nu aceeasi comanda/contract de doua ori) - o comanda/un contract
|
|
* se marcheaza facturat la prima emitere, deci reemiterea pe v2 din aceeasi sursa ar da 0 articole.
|
|
* Comparatia foloseste schela lib_comparatie_documente.prg (CompDoc), plus o comparatie separata
|
|
* pe campurile de CONFIGURATIE (nu depind de sursa: TIP, IN_VALUTA, ID_VALUTA, MULTIPLICATOR,
|
|
* DISCOUNT_EVIDENTIAT, TVA_INCASARE, TIP_FACTURA, TIP_SAFT, COEFICIENT_K) - acestea trebuie sa fie
|
|
* identice v1/v2 chiar daca sursele difera; diferentele de VANZARI_DETALII/ACT legate de sursa
|
|
* (cantitati, client, id_gestiune) sunt asteptate si se argumenteaza in raport, nu se raporteaza
|
|
* ca esecuri.
|
|
*
|
|
* Transferul crsarticole -> crsfactura foloseste do_adauga_tot() pe ambele formulare:
|
|
* - pe v1 e calea reala (butonul "Adauga tot" e cablat, caction = do_adauga_tot);
|
|
* - pe v2 metoda EXISTA in cod dar NU are niciun caction/buton care s-o declanseze (cod mort,
|
|
* confirmat deja pentru lista de preturi in S6-0/3.1 - aici se confirma ca acelasi lucru e
|
|
* valabil si pentru comanda/contract). Vezi AsertiuniRutare si raportul.
|
|
* mock_amessagebox.prg neutralizeaza aMessageBox-ul din bucla do_adauga_tot ("ati selectat toata
|
|
* cantitatea?") - pe contract (tip 2), crsarticole.cantitate nu se decrementeaza cu gnScadereStoc=0
|
|
* (do_initializeaza_articol zeroeste doar copia scatter-uita, nu cursorul sursa), deci acel dialog
|
|
* ar aparea o data per linie fara mock.
|
|
*
|
|
* FRM_ALTE_DATE (numai pe v1, deschis neconditionat de frm_facturare_articole.inainte_de_do_termin,
|
|
* ofacturare.vc2:15076) refuza sa se inchida cat timp poDate.id_delegat e gol
|
|
* (ferestre_cere_date.vc2:3073) - se precompleteaza poDate.id_delegat=39 (delegat real din
|
|
* vnom_delegati, MARIUSM_AUTO) identic pe v1 si v2, iar driverul apasa Termin
|
|
* (loForm.do_termin()), nu Release() - Release() ar sari peste scrierea lui poDate.ntip_incasare.
|
|
* gnFactSeturi=0 elimina FRM_ARTICOLE_COMPUSE (ofacturare.vc2:15028).
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s6_2_comanda_contract.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s6_2_comanda_contract.log
|
|
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8; gnIdSucursala = 167; gnScadereStoc = 0; gnFactSeturi = 0.
|
|
|
|
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, gcCaz, gcUltimaSerie, gnUltimulNract
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s6_2_comanda_contract.log"
|
|
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
|
|
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
|
|
ENDIF
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
|
gnPass = 0
|
|
gnFail = 0
|
|
gcCaz = ""
|
|
|
|
ON ERROR DO S62Err WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
TRY
|
|
*-- stub_verificare PRIMUL (SET PATH plain) - "Do Form verificare" (ofacturare.vc2:14404/:20126)
|
|
*-- rezolva la stub, nu la formularul real (tehnica validata in test_s3b_emitere_reala.prg)
|
|
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 S62Log WITH 'EROARE: conectare Oracle esuata'
|
|
DO S62Final
|
|
ENDIF
|
|
DO S62Log WITH 'ENV OK gnHandle=' + TRANSFORM(gnHandle)
|
|
SQLSETPROP(gnHandle, "QueryTimeOut", 45)
|
|
|
|
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\utile\Teste\facturare_unificat\lib_comparatie_documente.prg" ADDITIVE
|
|
*-- mock amessagebox: la nume duplicat castiga fisierul deschis cel mai recent - se incarca ULTIM
|
|
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
|
|
|
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
|
|
IF !actualizeaza_optiuni_program()
|
|
DO S62Log WITH 'EROARE: actualizeaza_optiuni_program()'
|
|
DO S62Final
|
|
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 S62Log WITH 'actualizeaza_optiuni_program OK, gnScadereStoc=' + TRANSFORM(gnScadereStoc) + ;
|
|
' gnFactSeturi=' + TRANSFORM(gnFactSeturi) + ' gnIdSucursala=' + TRANSFORM(gnIdSucursala) + ' gnIdUtil=' + TRANSFORM(gnIdUtil)
|
|
|
|
update_jtva_coloane([JV], [jtva_coloane_temp])
|
|
update_saft_taxtable()
|
|
|
|
*-- cboTipFactura (frm_facturare_articole2) cere RowSource pe saft_tip_facturi la constructie
|
|
*-- (tehnica validata in test_s4_3_neregresie_masa.prg)
|
|
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
|
|
|
|
*-- driver+timer: unele confirmari (ex. "Doriti sa se inchida comanda?" pe tip=3) folosesc o
|
|
*-- forma modala MESSAGEBOX_FORM, nu functia amessagebox() - mock_amessagebox nu le acopera.
|
|
*-- Tehnica validata in test_s3b_emitere_reala.prg: un Timer pe _SCREEN scaneaza _SCREEN.Forms
|
|
*-- si apasa automat cmdYes/cmdOk, ca raspunsul implicit "Da" al utilizatorului.
|
|
PUBLIC goDriverMsg, gcClaseVazuteS62
|
|
gcClaseVazuteS62 = ';'
|
|
goDriverMsg = CREATEOBJECT('driverMessageboxForm')
|
|
_SCREEN.AddObject('tmrS62Msg', 'Timer')
|
|
_SCREEN.tmrS62Msg.Interval = 200
|
|
BINDEVENT(_SCREEN.tmrS62Msg, 'Timer', goDriverMsg, 'Executa')
|
|
_SCREEN.tmrS62Msg.Enabled = .T.
|
|
DO S62Log WITH 'driver MESSAGEBOX_FORM + timer pregatiti'
|
|
|
|
*-- dovada ca stubul verificare ramane in fata dupa tot setup-ul, la momentul emiterii
|
|
DO S62Log WITH 'DIAG SET_PATH=' + SET('PATH')
|
|
DO S62Log WITH 'DIAG FULLPATH_VERIFICARE=' + FULLPATH('verificare.scx')
|
|
|
|
LOCAL lnIdVzC1, lcSerieC1, lnNractC1, lnIdVzC2, lcSerieC2, lnNractC2
|
|
LOCAL lnIdVzT1, lcSerieT1, lnNractT1, lnIdVzT2, lcSerieT2, lnNractT2
|
|
lnIdVzC1 = 0
|
|
lnIdVzC2 = 0
|
|
lnIdVzT1 = 0
|
|
lnIdVzT2 = 0
|
|
lcSerieC1 = ''
|
|
lcSerieC2 = ''
|
|
lcSerieT1 = ''
|
|
lcSerieT2 = ''
|
|
lnNractC1 = 0
|
|
lnNractC2 = 0
|
|
lnNractT1 = 0
|
|
lnNractT2 = 0
|
|
|
|
DO S62Log WITH CHR(13) + CHR(10) + '===== EMITERE COMANDA (tip 3) - v1 listaid=2479, v2 listaid=2478 ====='
|
|
lnIdVzC1 = EmiteMasa(3, 2479, .F., 'comanda-v1')
|
|
lcSerieC1 = gcUltimaSerie
|
|
lnNractC1 = gnUltimulNract
|
|
lnIdVzC2 = EmiteMasa(3, 2478, .T., 'comanda-v2')
|
|
lcSerieC2 = gcUltimaSerie
|
|
lnNractC2 = gnUltimulNract
|
|
|
|
DO S62Log WITH CHR(13) + CHR(10) + '===== EMITERE CONTRACT (tip 2) - v1 listaid=20, v2 listaid=222 ====='
|
|
lnIdVzT1 = EmiteMasa(2, 20, .F., 'contract-v1')
|
|
lcSerieT1 = gcUltimaSerie
|
|
lnNractT1 = gnUltimulNract
|
|
lnIdVzT2 = EmiteMasa(2, 222, .T., 'contract-v2')
|
|
lcSerieT2 = gcUltimaSerie
|
|
lnNractT2 = gnUltimulNract
|
|
|
|
DO S62Log WITH CHR(13) + CHR(10) + '===== ASERTIUNI STATICE DE RUTARE (ce probeaza / ce nu probeaza acest test) ====='
|
|
DO AsertiuniRutare
|
|
|
|
IF lnIdVzC1 > 0 AND lnIdVzC2 > 0
|
|
DO S62Log WITH CHR(13) + CHR(10) + '===== CompDoc COMANDA v1(' + TRANSFORM(lcSerieC1) + ' ' + TRANSFORM(lnNractC1) + ;
|
|
') vs v2(' + TRANSFORM(lcSerieC2) + ' ' + TRANSFORM(lnNractC2) + ') ====='
|
|
DO CompareazaSurse WITH lcSerieC1, lnNractC1, lcSerieC2, lnNractC2, 'comanda'
|
|
ELSE
|
|
DO Assert WITH .F., 'comanda: ambele documente s-au scris (v1 id_vanzare=' + TRANSFORM(lnIdVzC1) + ' v2 id_vanzare=' + TRANSFORM(lnIdVzC2) + ')'
|
|
ENDIF
|
|
|
|
IF lnIdVzT1 > 0 AND lnIdVzT2 > 0
|
|
DO S62Log WITH CHR(13) + CHR(10) + '===== CompDoc CONTRACT v1(' + TRANSFORM(lcSerieT1) + ' ' + TRANSFORM(lnNractT1) + ;
|
|
') vs v2(' + TRANSFORM(lcSerieT2) + ' ' + TRANSFORM(lnNractT2) + ') ====='
|
|
DO CompareazaSurse WITH lcSerieT1, lnNractT1, lcSerieT2, lnNractT2, 'contract'
|
|
ELSE
|
|
DO Assert WITH .F., 'contract: ambele documente s-au scris (v1 id_vanzare=' + TRANSFORM(lnIdVzT1) + ' v2 id_vanzare=' + TRANSFORM(lnIdVzT2) + ')'
|
|
ENDIF
|
|
|
|
DO S62Final
|
|
|
|
CATCH TO loExc
|
|
DO S62Log WITH 'CATCH TOP-LEVEL ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ;
|
|
' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
|
DO S62Final
|
|
ENDTRY
|
|
|
|
QUIT
|
|
|
|
*==================================================================================
|
|
* EmiteMasa: emite un document REAL prin incarcare in masa (comanda/contract), pe forma indicata.
|
|
* Intoarce id_vanzare (0 daca emiterea a esuat); serie_act/nract se intorc prin gcUltimaSerie/
|
|
* gnUltimulNract (variabile PUBLIC, citite de apelant imediat dupa apel).
|
|
FUNCTION EmiteMasa
|
|
LPARAMETERS tnTip, tnListaId, tlFormNou, tcEticheta
|
|
LOCAL tnIdVz, tcSerieAct, tnNract
|
|
tnIdVz = 0
|
|
tcSerieAct = ''
|
|
tnNract = 0
|
|
gcUltimaSerie = ''
|
|
gnUltimulNract = 0
|
|
|
|
PRIVATE poDate, poGeneratorNumere, poDateGestiuneDest
|
|
LOCAL loSursa, lnIdSet, oform, llOk, loRez, lnScris
|
|
|
|
DO S62Log WITH '--- ' + tcEticheta + ' (tip=' + TRANSFORM(tnTip) + ' listaid=' + TRANSFORM(tnListaId) + ;
|
|
', forma=' + IIF(tlFormNou, 'NOUA (v2)', 'VECHE (v1)') + ') ---'
|
|
|
|
IF tnTip = 3
|
|
loSursa = CreeazaSursaComanda(tnListaId)
|
|
ELSE
|
|
loSursa = CreeazaSursaContract(tnListaId)
|
|
ENDIF
|
|
IF ISNULL(loSursa)
|
|
DO Assert WITH .F., tcEticheta + ': sursa reala citita din Oracle pentru listaid=' + TRANSFORM(tnListaId)
|
|
RETURN 0
|
|
ENDIF
|
|
DO Assert WITH .T., tcEticheta + ': sursa reala citita, id_part=' + TRANSFORM(loSursa.id_part)
|
|
|
|
lnIdSet = 25000 + tnTip - 1
|
|
poDate = CREATEOBJECT("oDateFactura", lnIdSet, tnTip, loSursa)
|
|
poGeneratorNumere = CREATEOBJECT("oGeneratorNumere")
|
|
poDateGestiuneDest = CREATEOBJECT("oDateGestiune")
|
|
|
|
*-- delegat real (vnom_delegati, MARIUSM_AUTO), identic pe v1 si v2: fara el
|
|
*-- frm_alte_date.inainte_de_do_termin (ferestre_cere_date.vc2:3073) respinge la infinit
|
|
poDate.id_delegat = 39
|
|
DO Assert WITH poDate.id_delegat = 39, tcEticheta + ': poDate.id_delegat precompletat'
|
|
|
|
DO Assert WITH TRANSFORM(poDate.listaid) == TRANSFORM(tnListaId), ;
|
|
tcEticheta + ': poDate.listaid provine din toSursa (Init cu parametru), e=' + TRANSFORM(poDate.listaid)
|
|
DO Assert WITH poDate.id_client = loSursa.id_part, tcEticheta + ': poDate.id_client din toSursa'
|
|
|
|
poGeneratorNumere.ResetNumere()
|
|
poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc)
|
|
DO S62Log WITH ' poDate.nIdTipDoc=' + TRANSFORM(poDate.nIdTipDoc) + ' rezultat_serii=' + TRANSFORM(poDate.rezultat_serii)
|
|
IF poDate.rezultat_serii <> 3
|
|
DO Assert WITH .F., tcEticheta + ': rezultat_serii=3 (o singura plaja, fara dialog), e=' + TRANSFORM(poDate.rezultat_serii)
|
|
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
|
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 S62Log WITH ' serie_act=' + 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
|
|
|
|
IF tlFormNou
|
|
*-- v2 reala: crsfactura gol se creeaza INAINTE de formular (ca in factureaza(), ramura
|
|
*-- llFacturareNoua) - articolele se incarca DUPA, prin metoda do_incarca_articole
|
|
DO PregatesteFacturaCrs
|
|
oform = CREATEOBJECT('frm_facturare_articole2')
|
|
oform.WindowType = 0
|
|
oform.Show()
|
|
DOEVENTS FORCE
|
|
DO S62Log WITH ' formular creat (v2 frm_facturare_articole2)'
|
|
llOk = oform.do_incarca_articole()
|
|
ELSE
|
|
*-- v1 reala: incarca_cursor_articole() se cheama INAINTE de formular (ca in factureaza(),
|
|
*-- ramura veche) - functia isi creeaza singura crsfactura
|
|
loRez = incarca_cursor_articole(poDate.tip, .F., poGeneratorNumere)
|
|
llOk = (loRez.nSucces >= 0) AND loRez.lArticole
|
|
oform = CREATEOBJECT('frm_facturare_articole')
|
|
oform.WindowType = 0
|
|
oform.Show()
|
|
DOEVENTS FORCE
|
|
DO S62Log WITH ' formular creat (v1 frm_facturare_articole)'
|
|
ENDIF
|
|
|
|
DO Assert WITH llOk, tcEticheta + ': incarcarea sursei (incarca_cursor_articole) a reusit'
|
|
DO S62Log WITH ' incarcare -> Reccount(crsarticole)=' + IIF(USED('crsarticole'), TRANSFORM(RECCOUNT('crsarticole')), '(nedeschis)')
|
|
|
|
IF !llOk OR !USED('crsarticole') OR RECCOUNT('crsarticole') = 0
|
|
DO S62Log WITH ' ABANDON: fara articole de incarcat pentru ' + tcEticheta
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
IF TYPE('oform') = 'O' AND !ISNULL(oform)
|
|
oform.Release()
|
|
ENDIF
|
|
DO CuratieCrs
|
|
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
*-- transfer crsarticole -> crsfactura: do_adauga_tot() pe ambele forme (vezi antetul
|
|
*-- fisierului si AsertiuniRutare pt statutul cablarii pe v1 vs v2)
|
|
oform.do_adauga_tot()
|
|
DOEVENTS FORCE
|
|
DO S62Log WITH ' do_adauga_tot() -> Reccount(crsfactura)=' + TRANSFORM(RECCOUNT('crsfactura')) + ;
|
|
' ultimul mesaj mock=[' + ALLTRIM(gcMockUltimMesaj) + ']'
|
|
DO Assert WITH RECCOUNT('crsfactura') > 0, tcEticheta + ': crsfactura populat dupa do_adauga_tot'
|
|
|
|
*-- diagnostic id_jtva_coloana: cine ramane pe 0 si cu ce proc_tvav
|
|
LOCAL lnSelDiag, lnRauDiag, lnAratDiag
|
|
lnSelDiag = SELECT()
|
|
lnRauDiag = 0
|
|
lnAratDiag = 0
|
|
SELECT crsfactura
|
|
SCAN
|
|
IF NVL(crsfactura.id_jtva_coloana, 0) <= 0
|
|
lnRauDiag = lnRauDiag + 1
|
|
IF lnAratDiag < 5
|
|
lnAratDiag = lnAratDiag + 1
|
|
DO S62Log WITH ' [diag jtva] rand=' + TRANSFORM(RECNO()) + ' id_articol=' + TRANSFORM(crsfactura.id_articol) + ;
|
|
' id_jtva=' + TRANSFORM(NVL(crsfactura.id_jtva_coloana,0)) + ' proc_tvav=' + TRANSFORM(NVL(crsfactura.proc_tvav,-1)) + ;
|
|
' cant=' + TRANSFORM(crsfactura.cantitate)
|
|
ENDIF
|
|
ENDIF
|
|
ENDSCAN
|
|
DO S62Log WITH ' [diag jtva] crsfactura randuri cu id_jtva_coloana<=0: ' + TRANSFORM(lnRauDiag) + ' din ' + TRANSFORM(RECCOUNT('crsfactura'))
|
|
IF USED('jtva_coloane')
|
|
SELECT jtva_coloane
|
|
DO S62Log WITH ' [diag jtva] cursor jtva_coloane: reccount=' + TRANSFORM(RECCOUNT()) + ' filtru=[' + FILTER() + ']'
|
|
SET FILTER TO
|
|
LOCATE FOR cota_tva = 24
|
|
DO S62Log WITH ' [diag jtva] locate cota_tva=24 -> found=' + TRANSFORM(FOUND()) + ' id=' + TRANSFORM(IIF(FOUND(), jtva_coloane.id_jtva_coloana, -1))
|
|
ELSE
|
|
DO S62Log WITH ' [diag jtva] cursorul jtva_coloane NU e deschis in aceasta sesiune'
|
|
ENDIF
|
|
SELECT (lnSelDiag)
|
|
|
|
oform.do_calculeaza_totaluri()
|
|
DOEVENTS FORCE
|
|
|
|
tcSerieAct = ALLTRIM(NVL(poDate.serie_act, ''))
|
|
tnNract = poDate.nract
|
|
|
|
lnScris = oform.do_termin()
|
|
DO S62Log WITH ' do_termin() -> ' + TRANSFORM(lnScris) + ' poDate.nid_vanzare=' + TRANSFORM(NVL(poDate.nid_vanzare, 0)) + ;
|
|
' ultimul mesaj mock=[' + ALLTRIM(gcMockUltimMesaj) + ']'
|
|
|
|
*-- 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.
|
|
tnIdVz = CdocGasesteIdVanzare(tcSerieAct, tnNract)
|
|
IF tnIdVz < 0
|
|
tnIdVz = 0
|
|
ENDIF
|
|
DO S62Log WITH ' verificare in VANZARI pe ' + tcSerieAct + ' ' + TRANSFORM(tnNract) + ' -> id_vanzare=' + TRANSFORM(tnIdVz)
|
|
DO Assert WITH tnIdVz > 0, tcEticheta + ': documentul exista in VANZARI (jonctiune serie_act+nract), e=' + TRANSFORM(tnIdVz)
|
|
|
|
IF tnIdVz > 0
|
|
DO S62Log WITH ' SCRIS: id_vanzare=' + TRANSFORM(tnIdVz) + ' serie_act=' + tcSerieAct + ' nract=' + TRANSFORM(tnNract)
|
|
ELSE
|
|
poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc)
|
|
tcSerieAct = ''
|
|
tnNract = 0
|
|
ENDIF
|
|
|
|
IF TYPE('oform') = 'O' AND !ISNULL(oform)
|
|
oform.Release()
|
|
ENDIF
|
|
oform = NULL
|
|
|
|
DO CuratieCrs
|
|
RELEASE poDate, poGeneratorNumere, poDateGestiuneDest
|
|
gcUltimaSerie = tcSerieAct
|
|
gnUltimulNract = tnNract
|
|
RETURN tnIdVz
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* crsfactura + coloana "gestiune" ceruta de coloana combo a grilei pe v2 (tehnica validata
|
|
* in test_s4_3_neregresie_masa.prg) - aplicata identic si pe v1, inofensiv acolo.
|
|
PROCEDURE PregatesteFacturaCrs
|
|
DO creeaza_facturacrs WITH 'crsfactura'
|
|
SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE
|
|
USE IN crsfactura
|
|
SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE
|
|
USE IN crsfact_tmp
|
|
ENDPROC
|
|
|
|
PROCEDURE CuratieCrs
|
|
DO InchideCrs WITH 'crsarticole'
|
|
DO InchideCrs WITH 'crsarticole1'
|
|
DO InchideCrs WITH 'crsfactura'
|
|
DO InchideCrs WITH 'crscursuri'
|
|
DO InchideCrs WITH 'crspolitici'
|
|
DO InchideCrs WITH 'crscontracte'
|
|
DO InchideCrs WITH 'crsgestiunidest'
|
|
DO InchideCrs WITH 'crsCtrTemp'
|
|
DO InchideCrs WITH 'crsComTemp'
|
|
DO InchideCrs WITH 'jtva_coloane'
|
|
ENDPROC
|
|
|
|
PROCEDURE InchideCrs
|
|
LPARAMETERS tcAlias
|
|
IF USED(tcAlias)
|
|
USE IN (tcAlias)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* Sursa reala pentru comanda (tnTip=3): campurile citite de oDateFactura.Init pe ramura
|
|
* tnTip=3 (ofacturare_comun.prg): id_part, nume, cod_fiscal, id_comanda, nr_comanda, id_sectie.
|
|
FUNCTION CreeazaSursaComanda
|
|
LPARAMETERS tnIdComanda
|
|
LOCAL lnQ, loSursa
|
|
loSursa = NULL
|
|
lnQ = goExecutor.oExecute([select c.id_part, p.nume, p.cod_fiscal, c.id_comanda, c.nr_comanda, c.id_sectie ] + ;
|
|
[from comenzi c, nom_parteneri p where c.id_part = p.id_part and c.id_comanda = ] + TRANSFORM(tnIdComanda), 'crsSursaCom')
|
|
IF lnQ < 0 OR !USED('crsSursaCom') OR RECCOUNT('crsSursaCom') <> 1
|
|
DO S62Log WITH ' EROARE sursa comanda ' + TRANSFORM(tnIdComanda) + ': ' + TRANSFORM(goExecutor.oPrelucrareEroare())
|
|
IF USED('crsSursaCom')
|
|
USE IN crsSursaCom
|
|
ENDIF
|
|
RETURN loSursa
|
|
ENDIF
|
|
SELECT crsSursaCom
|
|
SCATTER NAME loSursa MEMO
|
|
USE IN crsSursaCom
|
|
*-- poDate.listaid = loSursa.id_comanda (ofacturare_comun.prg:322), fara conversie - v2
|
|
*-- (do_scrie_factura, ofacturare.vc2:20167) cere Val(poDate.listaid), deci listaid trebuie
|
|
*-- caracter; SCATTER dintr-o coloana Oracle numerica da tip N, nu C - convertim aici, ca sursa
|
|
*-- reala (goComanda) sa ajunga la fel ca in productie, nu doar ca TRANSFORM() sa coincida.
|
|
loSursa.id_comanda = ALLTRIM(TRANSFORM(loSursa.id_comanda))
|
|
loSursa.nr_comanda = ALLTRIM(TRANSFORM(loSursa.nr_comanda))
|
|
RETURN loSursa
|
|
ENDFUNC
|
|
|
|
* Sursa reala pentru contract (tnTip=2): campurile citite de oDateFactura.Init pe ramura tip 2/6/52
|
|
* sunt id_part, denumire, cod_fiscal, id_ctr, contract, id_sectie, sectie, id_responsabil,
|
|
* responsabil, id_valuta, nume_val. FACT_VCONTRACTE nu are ultimele sase - se completeaza cu
|
|
* valori neutre (0/'' /RON), la fel pe v1 si v2, deci comparatia de configuratie ramane valida.
|
|
FUNCTION CreeazaSursaContract
|
|
LPARAMETERS tnIdCtr
|
|
LOCAL lnQ, loSursa
|
|
loSursa = NULL
|
|
lnQ = goExecutor.oExecute([select ct.id_part, p.denumire, p.cod_fiscal, ct.id_ctr, ct.contract ] + ;
|
|
[from fact_vcontracte ct, nom_parteneri p where ct.id_part = p.id_part and ct.id_ctr = ] + TRANSFORM(tnIdCtr), 'crsSursaCtr')
|
|
IF lnQ < 0 OR !USED('crsSursaCtr') OR RECCOUNT('crsSursaCtr') <> 1
|
|
DO S62Log WITH ' EROARE sursa contract ' + TRANSFORM(tnIdCtr) + ': ' + TRANSFORM(goExecutor.oPrelucrareEroare())
|
|
IF USED('crsSursaCtr')
|
|
USE IN crsSursaCtr
|
|
ENDIF
|
|
RETURN loSursa
|
|
ENDIF
|
|
SELECT crsSursaCtr
|
|
SCATTER NAME loSursa MEMO
|
|
USE IN crsSursaCtr
|
|
ADDPROPERTY(loSursa, 'id_sectie', 0)
|
|
ADDPROPERTY(loSursa, 'sectie', '')
|
|
ADDPROPERTY(loSursa, 'id_responsabil', 0)
|
|
ADDPROPERTY(loSursa, 'responsabil', '')
|
|
ADDPROPERTY(loSursa, 'id_valuta', 1)
|
|
ADDPROPERTY(loSursa, 'nume_val', 'RON')
|
|
RETURN loSursa
|
|
ENDFUNC
|
|
|
|
*==================================================================================
|
|
* Asertiuni statice (text, fara rulare) - documenteaza exact ce traseu de productie ramane
|
|
* neprobat de acest test: v1 nu are metoda de forma pentru incarcare (calea reala trece prin
|
|
* functia procedurala incarca_cursor_articole, apelata din factureaza() INAINTE de formular);
|
|
* do_adauga_tot() e cablat pe un buton viu doar pe v1 - pe v2 metoda exista dar nu e apelata
|
|
* de niciun caption/buton in productie (acest test o cheama direct, ca S6-0/S3.1 a stabilit
|
|
* deja pentru lista de preturi).
|
|
PROCEDURE AsertiuniRutare
|
|
LOCAL lcTxt
|
|
lcTxt = FILETOSTR("D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vc2")
|
|
IF EMPTY(lcTxt)
|
|
DO Assert WITH .F., "FILETOSTR ofacturare.vc2 a esuat/gol"
|
|
RETURN
|
|
ENDIF
|
|
DO Assert WITH OCCURS("PROCEDURE do_incarca_articole", lcTxt) = 1, ;
|
|
"do_incarca_articole exista o singura data in fisier (doar pe v2) - v1 nu are metoda de " + ;
|
|
"forma pentru incarcare, calea reala e prin incarca_cursor_articole() apelata din factureaza()"
|
|
DO Assert WITH "caction = do_adauga_tot" $ lcTxt, ;
|
|
"exista un caction = do_adauga_tot in fisier (butonul viu e pe v1)"
|
|
DO Assert WITH OCCURS("caction = do_adauga_tot", lcTxt) = 1, ;
|
|
"un singur caction = do_adauga_tot in tot fisierul - v2 NU are niciun buton cablat pt " + ;
|
|
"aceasta metoda (cod mort pe v2; acest test o cheama direct, deci nu probeaza ruta UI reala pe v2)"
|
|
DO Assert WITH OCCURS("PROCEDURE do_adauga_tot", lcTxt) = 2, ;
|
|
"do_adauga_tot exista de doua ori (o data pe fiecare clasa) - metoda exista pe v2, doar cablarea lipseste"
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* CompareazaSurse: ruleaza schela CompDoc (structura VANZARI/VANZARI_DETALII/ACT/RUL) si, separat,
|
|
* o comparatie pe campurile de CONFIGURATIE care nu depind de sursa (trebuie sa fie identice v1/v2
|
|
* chiar daca sursele - comenzi/contracte diferite - nu sunt).
|
|
PROCEDURE CompareazaSurse
|
|
LPARAMETERS tcSerie1, tnNr1, tcSerie2, tnNr2, tcTip
|
|
LOCAL nFail
|
|
nFail = CompDoc(tcSerie1, tnNr1, tcSerie2, tnNr2, 'S6-2 ' + tcTip + ' v1(' + TRANSFORM(tnNr1) + ') vs v2(' + TRANSFORM(tnNr2) + ')')
|
|
DO Assert WITH nFail >= 0, tcTip + ': CompDoc a rulat fara eroare Oracle, esecuri raportate=' + TRANSFORM(nFail)
|
|
DO S62Log WITH ' CompDoc ' + tcTip + ' esecuri totale=' + TRANSFORM(nFail) + ;
|
|
' (surse diferite - vezi raportul pentru argumentarea camp cu camp)'
|
|
DO ComparaCampuriConfig WITH tcSerie1, tnNr1, tcSerie2, tnNr2, tcTip
|
|
ENDPROC
|
|
|
|
PROCEDURE ComparaCampuriConfig
|
|
LPARAMETERS tcSerie1, tnNr1, tcSerie2, tnNr2, tcTip
|
|
LOCAL nId1, nId2, lnQ
|
|
nId1 = CdocGasesteIdVanzare(tcSerie1, tnNr1)
|
|
nId2 = CdocGasesteIdVanzare(tcSerie2, tnNr2)
|
|
IF nId1 <= 0 OR nId2 <= 0
|
|
DO Assert WITH .F., tcTip + ': jonctiune serie_act+nract gaseste ambele id_vanzare (v1=' + ;
|
|
TRANSFORM(nId1) + ' v2=' + TRANSFORM(nId2) + ')'
|
|
RETURN
|
|
ENDIF
|
|
lnQ = goExecutor.oExecute([select id_vanzare, tip, in_valuta, id_valuta, multiplicator, ] + ;
|
|
[discount_evidentiat, tva_incasare, nvl(tip_factura,0) as tip_factura, nvl(tip_saft,0) as tip_saft, ] + ;
|
|
[nvl(coeficient_k,0) as coeficient_k from vanzari where id_vanzare in (] + TRANSFORM(nId1) + [,] + TRANSFORM(nId2) + [)], 'crsCfg')
|
|
IF lnQ < 0 OR RECCOUNT('crsCfg') <> 2
|
|
DO Assert WITH .F., tcTip + ': citire campuri de configuratie din VANZARI (Reccount asteptat 2)'
|
|
IF USED('crsCfg')
|
|
USE IN crsCfg
|
|
ENDIF
|
|
RETURN
|
|
ENDIF
|
|
LOCAL lnTip1, lnTip2, lnInVal1, lnInVal2, lnIdVal1, lnIdVal2, lnMul1, lnMul2, lnDisc1, lnDisc2
|
|
LOCAL lnTvaInc1, lnTvaInc2, lnTipFact1, lnTipFact2, lnTipSaft1, lnTipSaft2, lnCoef1, lnCoef2
|
|
SELECT crsCfg
|
|
LOCATE FOR id_vanzare = nId1
|
|
lnTip1 = tip
|
|
lnInVal1 = in_valuta
|
|
lnIdVal1 = id_valuta
|
|
lnMul1 = multiplicator
|
|
lnDisc1 = discount_evidentiat
|
|
lnTvaInc1 = tva_incasare
|
|
lnTipFact1 = tip_factura
|
|
lnTipSaft1 = tip_saft
|
|
lnCoef1 = coeficient_k
|
|
LOCATE FOR id_vanzare = nId2
|
|
lnTip2 = tip
|
|
lnInVal2 = in_valuta
|
|
lnIdVal2 = id_valuta
|
|
lnMul2 = multiplicator
|
|
lnDisc2 = discount_evidentiat
|
|
lnTvaInc2 = tva_incasare
|
|
lnTipFact2 = tip_factura
|
|
lnTipSaft2 = tip_saft
|
|
lnCoef2 = coeficient_k
|
|
USE IN crsCfg
|
|
|
|
DO Assert WITH lnTip1 = lnTip2, tcTip + ': VANZARI.TIP identic (config, nu sursa) v1=' + TRANSFORM(lnTip1) + ' v2=' + TRANSFORM(lnTip2)
|
|
DO Assert WITH lnInVal1 = lnInVal2, tcTip + ': IN_VALUTA identic v1=' + TRANSFORM(lnInVal1) + ' v2=' + TRANSFORM(lnInVal2)
|
|
DO Assert WITH lnIdVal1 = lnIdVal2, tcTip + ': ID_VALUTA identic v1=' + TRANSFORM(lnIdVal1) + ' v2=' + TRANSFORM(lnIdVal2)
|
|
DO Assert WITH lnMul1 = lnMul2, tcTip + ': MULTIPLICATOR identic v1=' + TRANSFORM(lnMul1) + ' v2=' + TRANSFORM(lnMul2)
|
|
DO Assert WITH lnDisc1 = lnDisc2, tcTip + ': DISCOUNT_EVIDENTIAT identic v1=' + TRANSFORM(lnDisc1) + ' v2=' + TRANSFORM(lnDisc2)
|
|
DO Assert WITH lnTvaInc1 = lnTvaInc2, tcTip + ': TVA_INCASARE identic v1=' + TRANSFORM(lnTvaInc1) + ' v2=' + TRANSFORM(lnTvaInc2)
|
|
DO Assert WITH lnTipFact1 = lnTipFact2, tcTip + ': TIP_FACTURA identic v1=' + TRANSFORM(lnTipFact1) + ' v2=' + TRANSFORM(lnTipFact2)
|
|
DO Assert WITH lnTipSaft1 = lnTipSaft2, tcTip + ': TIP_SAFT identic v1=' + TRANSFORM(lnTipSaft1) + ' v2=' + TRANSFORM(lnTipSaft2)
|
|
DO Assert WITH lnCoef1 = lnCoef2, tcTip + ': COEFICIENT_K identic v1=' + TRANSFORM(lnCoef1) + ' v2=' + TRANSFORM(lnCoef2)
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
PROCEDURE Assert
|
|
LPARAMETERS tlCond, tcMsg
|
|
IF tlCond
|
|
gnPass = gnPass + 1
|
|
DO S62Log WITH 'PASS: ' + tcMsg
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
DO S62Log WITH 'FAIL: ' + tcMsg
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE S62Log
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE S62Err
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO S62Log WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE S62Final
|
|
IF TYPE('_SCREEN.tmrS62Msg') = 'O'
|
|
_SCREEN.tmrS62Msg.Enabled = .F.
|
|
ENDIF
|
|
DO S62Log WITH CHR(13) + CHR(10) + 'TOTAL pass=' + TRANSFORM(gnPass) + ' fail=' + TRANSFORM(gnFail)
|
|
DO S62Log WITH 'END ' + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|
|
|
|
*==================================================================================
|
|
* driverMessageboxForm: cauta o forma MESSAGEBOX_FORM printre _SCREEN.Forms si-i apasa automat
|
|
* cmdYes/cmdOk (raspunsul implicit "Da"/"OK"), ca sa nu blocheze rularea headless. Tehnica identica
|
|
* cu driverAlteDateAD din test_s3b_emitere_reala.prg (partea de MESSAGEBOX_FORM).
|
|
* Trateaza in plus FRM_ALTE_DATE (numai pe v1, deschis neconditionat de
|
|
* frm_facturare_articole.inainte_de_do_termin - ofacturare.vc2:15076): apasa Termin
|
|
* (loForm.do_termin(), nu Release()) ca sa se execute inainte_de_do_termin si sa se scrie
|
|
* poDate.ntip_incasare exact ca pe traseul real - un Release() ar sari peste acea scriere si ar
|
|
* fabrica o diferenta falsa fata de v2, unde codul echivalent ruleaza inline
|
|
* (ofacturare.vc2:20785-20808). Valideaza doar daca poDate.id_delegat e completat dinainte
|
|
* (vezi EmiteMasa) - altfel inainte_de_do_termin respinge din nou si formularul ramane deschis.
|
|
* Niciun tratament generic "strain -> Release()": clasele principale FRM_FACTURARE_ARTICOLE si
|
|
* FRM_FACTURARE_ARTICOLE2 nu sunt atinse de acest driver in niciun fel.
|
|
DEFINE CLASS driverMessageboxForm AS Custom
|
|
nUltimAlteDate = 0
|
|
lBusy = .F.
|
|
|
|
PROCEDURE Executa
|
|
*-- garda de reintrare: do_termin() declanseaza intern Release()/SetFocus, care cedeaza
|
|
*-- controlul buclei de mesaje Windows - fara ea, Timer-ul se reintra in timp ce
|
|
*-- formularul e pe cale sa se elibereze (obiect pe jumatate distrus -> eroare 1924 "nu e
|
|
*-- obiect"), observat empiric la prima rulare. lBusy e verificat/setat sincron, inainte
|
|
*-- de orice cod care ar putea ceda controlul - opreste reintrarea chiar daca Timer.Enabled
|
|
*-- nu apuca sa opreasca un WM_TIMER deja pus in coada.
|
|
IF This.lBusy
|
|
RETURN
|
|
ENDIF
|
|
This.lBusy = .T.
|
|
IF TYPE('_SCREEN.tmrS62Msg') = 'O'
|
|
_SCREEN.tmrS62Msg.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)
|
|
DO S62Log WITH ' [diag alte_date] gasit la index=' + TRANSFORM(lnI) + ;
|
|
' FormCount=' + TRANSFORM(_SCREEN.FormCount) + ' VARTYPE(loAlteDate)=' + VARTYPE(loAlteDate)
|
|
ENDIF
|
|
IF !(lcClasa $ gcClaseVazuteS62)
|
|
gcClaseVazuteS62 = gcClaseVazuteS62 + lcClasa + ';'
|
|
DO S62Log WITH ' [diag timer] forma noua vazuta: ' + 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 S62Log WITH ' [driver msg] mesaj=[' + STRTRAN(lcTextMsg, CHR(13) + CHR(10), ' ') + ']'
|
|
DO CASE
|
|
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdYes', 5)
|
|
DO S62Log WITH ' [driver msg] messagebox_form: apas cmgBotones.cmdYes'
|
|
loMsgForm.cmgBotones.cmdYes.Click()
|
|
CASE PEMSTATUS(loMsgForm.cmgBotones, 'cmdOk', 5)
|
|
DO S62Log WITH ' [driver msg] messagebox_form: apas cmgBotones.cmdOk'
|
|
loMsgForm.cmgBotones.cmdOk.Click()
|
|
ENDCASE
|
|
CATCH TO loExcMsg
|
|
DO S62Log WITH ' [driver msg] CATCH ' + TRANSFORM(loExcMsg.ErrorNo) + ' ' + loExcMsg.Message
|
|
ENDTRY
|
|
ELSE IF !ISNULL(loAlteDate) AND (SECONDS() - This.nUltimAlteDate > 1)
|
|
This.nUltimAlteDate = SECONDS()
|
|
TRY
|
|
DO S62Log WITH ' [driver alte_date] apas do_termin() pe FRM_ALTE_DATE (id_delegat=' + ;
|
|
TRANSFORM(NVL(poDate.id_delegat, 0)) + ') VARTYPE=' + VARTYPE(loAlteDate) + ;
|
|
' TYPE=' + TYPE('loAlteDate')
|
|
loAlteDate.do_termin()
|
|
CATCH TO loExcAD
|
|
DO S62Log WITH ' [driver alte_date] CATCH ' + TRANSFORM(loExcAD.ErrorNo) + ' ' + loExcAD.Message + ;
|
|
' VARTYPE=' + VARTYPE(loAlteDate) + ' TYPE=' + TYPE('loAlteDate')
|
|
ENDTRY
|
|
ENDIF
|
|
CATCH TO loExcTop
|
|
DO S62Log WITH ' [driver] CATCH TOP-LEVEL ' + TRANSFORM(loExcTop.ErrorNo) + ' ' + loExcTop.Message
|
|
FINALLY
|
|
IF TYPE('_SCREEN.tmrS62Msg') = 'O'
|
|
_SCREEN.tmrS62Msg.Enabled = .T.
|
|
ENDIF
|
|
This.lBusy = .F.
|
|
ENDTRY
|
|
ENDPROC
|
|
ENDDEFINE
|