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
455 lines
17 KiB
Plaintext
455 lines
17 KiB
Plaintext
* 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
|