Achizitie import unificata (ROAGEST): ointroduceri, teste UI, documentatie
- import_nota / import_adauga_factura: flux unificat note contabile + articole, sincronizare automata, total factura automat, TVA impartit pe conturile creditoare ale notelor (rundele 1-31) - runda 32: totalurile import_nota pe _label/_textbox din _baza.vcx (Arial 10), fara containerele clb_tx_simplu si fara bifa "Recalculeaza TVA" (recalcul mereu automat); "Sincronizeaza facturile secundare" mutata sub butoane - utile/Teste: harness UI VFP headless (vfp_ui_harness.ps1, ui_harness.prg, precompilare, mock-uri) in radacina; suitele e2e pentru achizitia din import grupate in utile/Teste/achizitie_import/ - docs: flux editare text vcx/scx, testare-ui-vfp si testare-vfp-mcp (mutate din ROAGEST, general valabile), inventar comun, orchestrare subagenti, conventie GO recno, depanare testare VFP Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019DGibQKa5uK4P2TNSFFQNh
This commit is contained in:
884
utile/Teste/achizitie_import/test_adauga_repere_212.prg
Normal file
884
utile/Teste/achizitie_import/test_adauga_repere_212.prg
Normal file
@@ -0,0 +1,884 @@
|
||||
* test_adauga_repere_212.prg
|
||||
* Extensie a test_scenariu_import_212.prg: Marius a testat manual in aplicatia reala si a
|
||||
* gasit ca populatea directa a rul_temp (INSERT INTO) era INSUFICIENTA - nu trece prin fluxul
|
||||
* real de adaugare articole (butonul "Adauga repere" -> import_nota.do_adauga_articol,
|
||||
* COMUN\clase\ointroduceri.vcx). Aici articolul BULDOEXCAVATOR (cont 212) se adauga apeland
|
||||
* REAL goObj.do_adauga_articol() dupa ce dialogul de cautare (modal, nu poate rula headless)
|
||||
* e inlocuit cu mock_cauta_nom_articole.prg (returneaza acelasi format XML ca fluxul real,
|
||||
* cauta_alfa.prg ~227/510) - vezi docs/testare-ui-vfp.md pentru reteta generala.
|
||||
*
|
||||
* Scenariu identic cu test_scenariu_import_212.prg pana la cele 3 documente (FACTURA 100 RAJA
|
||||
* DVI valuta EUR curs 5.23, FACTURA 102 TRANS OIL MOTO DVI lei, FACTURA 103 BIROUL VAMAL TVA la
|
||||
* furnizor), apoi:
|
||||
* 1. goObj.do_adauga_articol() REAL (nu INSERT direct) - verifica daca articolul apare in
|
||||
* rul_temp/grila dupa fluxul real (Problema 1 raportata de Marius: nu aparea deloc).
|
||||
* 2. daca articolul a fost adaugat, completez cant/pret pe rand (do_adauga_articol NU seteaza
|
||||
* cantitati/preturi - doar campurile din nomenclator+antet; utilizatorul le completeaza
|
||||
* manual in grid dupa - simulez exact asta).
|
||||
* 3. sincronizeaza() - verific mesajul benzii (Problema 2: repetare per document).
|
||||
*
|
||||
* Rulare:
|
||||
* powershell -ExecutionPolicy Bypass -File test_adauga_repere_212.ps1
|
||||
|
||||
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 gcUILog, gcSyncDir
|
||||
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_adauga_repere_212_log.txt"
|
||||
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repere212\"
|
||||
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
||||
|
||||
ON ERROR DO ArErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||
ON SHUTDOWN QUIT
|
||||
|
||||
TRY
|
||||
LOCAL gcAppPath, lcPath
|
||||
gcAppPath = "D:\ROA\ROAGEST\"
|
||||
SET DEFAULT TO (gcAppPath)
|
||||
|
||||
lcPath = gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
|
||||
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
|
||||
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
|
||||
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
|
||||
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
|
||||
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
|
||||
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
|
||||
SET PATH TO &lcPath ADDITIVE
|
||||
DO ArLog WITH 'SET PATH OK'
|
||||
|
||||
*----- CLASE -----
|
||||
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
|
||||
SET CLASSLIB TO GESTIUNI ADDITIVE
|
||||
SET CLASSLIB TO CAUT ADDITIVE
|
||||
SET CLASSLIB TO BAZA ADDITIVE
|
||||
SET CLASSLIB TO comun ADDITIVE
|
||||
SET CLASSLIB TO accessibility.vcx ADDITIVE
|
||||
SET CLASSLIB TO messagebox ADDITIVE
|
||||
SET CLASSLIB TO registry ADDITIVE
|
||||
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
|
||||
SET CLASSLIB TO DECABAZA ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare ADDITIVE
|
||||
SET CLASSLIB TO stocuri.vcx ADDITIVE
|
||||
SET CLASSLIB TO rulaje.vcx ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_web ADDITIVE
|
||||
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
|
||||
SET CLASSLIB TO overificari ADDITIVE
|
||||
SET CLASSLIB TO ferestre_oracle ADDITIVE
|
||||
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
|
||||
SET CLASSLIB TO configurare.vcx ADDITIVE
|
||||
SET CLASSLIB TO serii_numere.vcx ADDITIVE
|
||||
SET CLASSLIB TO omodificari.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocompensari.vcx ADDITIVE
|
||||
SET CLASSLIB TO caut_ora ADDITIVE
|
||||
SET CLASSLIB TO onote_contabile ADDITIVE
|
||||
SET CLASSLIB TO otoolbar ADDITIVE
|
||||
SET CLASSLIB TO bon_fisc ADDITIVE
|
||||
SET CLASSLIB TO onom_articole ADDITIVE
|
||||
SET CLASSLIB TO onom_retete ADDITIVE
|
||||
SET CLASSLIB TO orapoarte ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_parametri ADDITIVE
|
||||
SET CLASSLIB TO ONOM_CURS ADDITIVE
|
||||
SET CLASSLIB TO ctl32_statusbar_fals.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_common.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_structs.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE
|
||||
SET CLASSLIB TO ctl32_balloontip.vcx ADDITIVE
|
||||
SET CLASSLIB TO ocriterii.vcx ADDITIVE
|
||||
SET CLASSLIB TO oavize.vcx ADDITIVE
|
||||
SET CLASSLIB TO onomenclatoare2 ADDITIVE
|
||||
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
|
||||
SET CLASSLIB TO oimportxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO excelxml.vcx ADDITIVE
|
||||
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
|
||||
DO ArLog WITH 'SET CLASSLIB OK'
|
||||
|
||||
*----- PROCEDURI (mock amessagebox + mock cauta_nom_articole PRIMELE, ui_harness la final) -----
|
||||
SET PROCEDURE TO PROCEDURI
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
|
||||
SET PROCEDURE TO acces_meniu ADDITIVE
|
||||
SET PROCEDURE TO cauta_alfa ADDITIVE
|
||||
SET PROCEDURE TO pmenu ADDITIVE
|
||||
SET PROCEDURE TO proceduri_comune ADDITIVE
|
||||
SET PROCEDURE TO quitapp ADDITIVE
|
||||
SET PROCEDURE TO init_program ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
|
||||
SET PROCEDURE TO orapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO mesaje ADDITIVE
|
||||
SET PROCEDURE TO oserii_numere.prg ADDITIVE
|
||||
SET PROCEDURE TO oexport.prg ADDITIVE
|
||||
SET PROCEDURE TO wwConfig.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
|
||||
SET PROCEDURE TO validare.prg ADDITIVE
|
||||
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
|
||||
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
|
||||
SET PROCEDURE TO updateserver.prg ADDITIVE
|
||||
SET PROCEDURE TO oinainte_de.prg ADDITIVE
|
||||
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
|
||||
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
|
||||
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
|
||||
SET PROCEDURE TO OINTRODUCERI ADDITIVE
|
||||
SET PROCEDURE TO oHeader.prg ADDITIVE
|
||||
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
|
||||
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
|
||||
SET PROCEDURE TO osecurity ADDITIVE
|
||||
SET PROCEDURE TO ocautare ADDITIVE
|
||||
SET PROCEDURE TO orefaceri ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
|
||||
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
|
||||
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO ini.prg ADDITIVE
|
||||
SET PROCEDURE TO odocumente.prg ADDITIVE
|
||||
SET PROCEDURE TO regex.prg ADDITIVE
|
||||
SET PROCEDURE TO wwutils.prg ADDITIVE
|
||||
SET PROCEDURE TO inchidere_k ADDITIVE
|
||||
SET PROCEDURE TO iniacces.prg ADDITIVE
|
||||
SET PROCEDURE TO oupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO procese.prg ADDITIVE
|
||||
SET PROCEDURE TO version.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlaccess.prg ADDITIVE
|
||||
SET PROCEDURE TO xmlparser.prg ADDITIVE
|
||||
SET PROCEDURE TO filebringer.prg ADDITIVE
|
||||
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
|
||||
SET PROCEDURE TO wwhttp.prg ADDITIVE
|
||||
SET PROCEDURE TO xdate.prg ADDITIVE
|
||||
SET PROCEDURE TO ofacturare.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
|
||||
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
|
||||
SET PROCEDURE TO email.prg ADDITIVE
|
||||
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
|
||||
DO ArLog WITH 'SET PROCEDURE OK'
|
||||
|
||||
*----- Globale -----
|
||||
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
|
||||
STORE 2 TO gnPc, gnPval, gnPVal
|
||||
gnPcant = 3
|
||||
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
|
||||
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
|
||||
*-- SAFT (406) mereu activ in teste: exercita GetTaxCode/GetTaxCodeIdPart/taxcode pe randuri.
|
||||
gl406 = .T.
|
||||
gcS = 'CONTAFIN'
|
||||
gnAn = YEAR(DATE())
|
||||
gnLuna = MONTH(DATE())
|
||||
gnIdFirma = 110
|
||||
gnIdSucursala = 110
|
||||
gcAcces = "1;2;3;4;5;6;7;8;"
|
||||
gcFirma = gcS
|
||||
PUBLIC nror(65000)
|
||||
|
||||
*-- gnButon: variabila "gola" folosita in tot lantul cauta_alfa->CAUT->do_adauga_articol.
|
||||
*-- In aplicatia reala e declarata PRIVATE o singura data la pornire (Programe/roagest.prg:496)
|
||||
*-- si ramane vizibila tot restul rularii; aici o declar PUBLIC pentru acelasi efect.
|
||||
PUBLIC gnButon
|
||||
STORE 2 TO gnButon
|
||||
|
||||
PUBLIC goExecutor, goApp
|
||||
goExecutor = CREATEOBJECT('dummyexecutor')
|
||||
goApp = CREATEOBJECT('dummyapp')
|
||||
|
||||
*----- poAct: antetul notei; dialogul mosteneste din el la Init -----
|
||||
PUBLIC poAct
|
||||
poAct = CREATEOBJECT('Custom')
|
||||
poAct.AddProperty('nume_val', '')
|
||||
poAct.AddProperty('curs', 1)
|
||||
poAct.AddProperty('proc_tva', 1.21)
|
||||
poAct.AddProperty('nnir', 0)
|
||||
poAct.AddProperty('id_valuta', 0)
|
||||
poAct.AddProperty('id_fdoc', 1)
|
||||
poAct.AddProperty('fdoc', 'Factura')
|
||||
poAct.AddProperty('id_partc', 500)
|
||||
poAct.AddProperty('partc', 'FURNIZOR ANTET SRL')
|
||||
poAct.AddProperty('serie_act', '')
|
||||
poAct.AddProperty('dataact', DATE())
|
||||
poAct.AddProperty('tva_incasare', 0)
|
||||
poAct.AddProperty('id_set', 1)
|
||||
poAct.AddProperty('id_gestin', 1)
|
||||
|
||||
*----- jtva_coloane2 (explicatii TVA): achizitii interne 21% + import (DVI) 21% - perechi
|
||||
* reale (Oracle dev, vjtva_coloane, 17.07.2026), regimul curent 21%/11% post 01.08.2025. -----
|
||||
IF USED('jtva_coloane2')
|
||||
USE IN ('jtva_coloane2')
|
||||
ENDIF
|
||||
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
|
||||
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
|
||||
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
|
||||
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
|
||||
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
||||
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
||||
|
||||
*----- saft_taxtable: coduri reale (vsaft_taxtable) - achizitii interne 21% vs import 21% -----
|
||||
IF USED('saft_taxtable')
|
||||
USE IN ('saft_taxtable')
|
||||
ENDIF
|
||||
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
|
||||
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
|
||||
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
|
||||
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
|
||||
INDEX ON taxcode TAG taxcode
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('', 0, '', 0, 1, 1, 1, 1)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301104-Achizitii de bunuri si servicii taxabile cu cota de 21%, altele decat importurile si cele supuse masurilor de simplificare', 301104, '', 21, 1, 0, 1, 0)
|
||||
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
||||
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
||||
|
||||
*----- introdc (RecordSource Grid1) - porneste GOL, ca in fluxul real -----
|
||||
DO CreeazaIntrodc WITH 'introdc'
|
||||
|
||||
*----- introdc_sablon: perechea-sablon (B 371/401 + T 4426/401) pe care do_adauga_factura o
|
||||
* cloneaza; sablonul e la 21% (cota folosita in toate cele 3 scenarii de mai jos). -----
|
||||
DO CreeazaIntrodc WITH 'introdc_sablon'
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
|
||||
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
|
||||
id_jtva_coloana, ptva, explicatie_tva) ;
|
||||
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
|
||||
GO TOP IN introdc_sablon
|
||||
|
||||
*----- rul_temp cu 1 rand INAINTE de instantiere: altfel import_nota.Init il recreeaza din
|
||||
* Oracle (rul_temp gol => llRulTempPlin=.F.) si GridArt isi pierde coloanele (eroare 1925).
|
||||
* Randul se sterge dupa Show (ZAP, nu DELETE ALL - vezi docs/testare-ui-vfp.md capcana k).
|
||||
* STRUCTURA FIDELA: rul_temp real = select r.*, r.pret as pret_lei, r.pretd as pret_val,
|
||||
* 000.00 as cota_tva from vrul r where 1=2 (ointroduceri.vc2:11030) - coloanele VRUL sunt
|
||||
* preluate direct din Oracle dev (all_tab_columns, owner=MARIUSM_AUTO, table=VRUL,
|
||||
* 17.07.2026), nu aproximate; PROC_TVA exista in VRUL - eroarea 12 dintr-o rulare
|
||||
* anterioara a testului ("Variable 'PROC_TVA' is not found") era artefact al unui mock
|
||||
* trunchiat, nu bug de aplicatie (GATHER NAME loAct la :10107 populeaza rul_temp.proc_tva
|
||||
* din poAct.proc_tva - camp valid pe randul curent, nu variabila globala). -----
|
||||
DO CreeazaRulTemp
|
||||
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
||||
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
||||
|
||||
DO ArLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.) - lIntern=.F. (import)'
|
||||
SELECT introdc
|
||||
PUBLIC goObj
|
||||
*-- lIntern=.F. (import): sparge_document grupeaza articolele in valuta (pret_val*cant), ca
|
||||
*-- in scenariul real al lui Marius. Activate() ar deschide automat dialogul modal "adauga
|
||||
*-- factura" (This.do_adauga(), Show(1)) pentru !lIntern - blocheaza headless; il dezarmez
|
||||
*-- cu lDialogAratat=.T. INAINTE de Show(), documentele se adauga manual mai jos.
|
||||
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
||||
IF VARTYPE(goObj) <> 'O'
|
||||
DO ArLog WITH 'FAIL: instantiere import_nota'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
QUIT
|
||||
ENDIF
|
||||
goObj.lDialogAratat = .T.
|
||||
goObj.oact = poAct
|
||||
goObj.WindowType = 0
|
||||
goObj.Visible = .T.
|
||||
goObj.Show()
|
||||
goObj.WindowState = 2
|
||||
DOEVENTS FORCE
|
||||
|
||||
*-- golesc placeholder-ul cu ZAP (nu DELETE ALL, vezi capcana k)
|
||||
SELECT rul_temp
|
||||
ZAP
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
*========================= DOC 1: FACTURA 100, RAJA, DVI valuta (EUR curs 5.23) =========================
|
||||
PUBLIC goDlg, goT
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 100
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 601
|
||||
goDlg.cPartener = 'RAJA'
|
||||
goDlg.cExplicatia = 'Import marfa RAJA'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 5.23
|
||||
goDlg.nIdValuta = 978
|
||||
goDlg.cValuta = 'EUR'
|
||||
*-- ACH. IMP. 21% (id 220) - coloana de import (SCD 371/SCC 401, taxcode SAFT 301204)
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2 && D = DVI
|
||||
goDlg.chkInValutaCont.Value = 1
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
*-- DVI: TVA achitat in vama (BIROUL VAMAL), doc 101, cont 4426/401
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 101
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'BIROUL VAMAL'
|
||||
goDlg.nDviTvaLei = 1098.30
|
||||
goDlg.nDviTvaVal = 210.00
|
||||
goDlg.actualizeaza_stare_dvi()
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO ArLog WITH 'DOC1: valideaza (pe dialog) = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlg
|
||||
DO ArLog WITH 'DOC1: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
DO VerificaPereche WITH 100, 5230, 1000, 'EUR', .T.
|
||||
DO VerificaDvi WITH 100, 101, 5230, 1098.30
|
||||
|
||||
*========================= DOC 2: FACTURA 102, TRANS OIL MOTO, DVI lei (acelasi doc vamal 101) =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 102
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 602
|
||||
goDlg.cPartener = 'TRANS OIL MOTO'
|
||||
goDlg.cExplicatia = 'Achizitie TRANS OIL MOTO'
|
||||
goDlg.nSuma = 1000
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 0
|
||||
goDlg.nIdExplicatieTva = 220
|
||||
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
||||
goDlg.optTipTva.Value = 2 && D = DVI
|
||||
goDlg.chkInValutaCont.Value = 0
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
*-- ACELASI document vamal (nr 101, BIROUL VAMAL) ca la doc 1 - randul T se re-cheie pe
|
||||
*-- acelasi doc_key ca T-ul doc 1 (identitate = serie_act+nract+id_fdoc+id_partc, calc_doc_key).
|
||||
goDlg.cSerieDvi = ''
|
||||
goDlg.nNractDvi = 101
|
||||
goDlg.dDviData = DATE()
|
||||
goDlg.nIdFdocDVI = 2
|
||||
goDlg.cFelDocDvi = 'DVI'
|
||||
goDlg.nDviIdPartener = 900
|
||||
goDlg.cDviPartener = 'BIROUL VAMAL'
|
||||
goDlg.nDviTvaLei = 210.00
|
||||
goDlg.nDviTvaVal = 0
|
||||
goDlg.actualizeaza_stare_dvi()
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO ArLog WITH 'DOC2: valideaza (pe dialog) = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlg
|
||||
DO ArLog WITH 'DOC2: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
DO VerificaPereche WITH 102, 1000, 0, '', .T.
|
||||
DO VerificaSumaGrupVama WITH 101, 1308.30, 2
|
||||
|
||||
*========================= DOC 3: FACTURA 103, BIROUL VAMAL, TVA la furnizor (nu DVI) =========================
|
||||
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
||||
goDlg.cFelDoc = 'Factura'
|
||||
goDlg.nIdFdoc = 1
|
||||
goDlg.nNract = 103
|
||||
goDlg.dDataAct = DATE()
|
||||
goDlg.nIdPartener = 900
|
||||
goDlg.cPartener = 'BIROUL VAMAL'
|
||||
goDlg.cExplicatia = 'Factura BIROUL VAMAL'
|
||||
goDlg.nSuma = 500
|
||||
goDlg.nSumaLei = 0
|
||||
goDlg.nCurs = 0
|
||||
*-- ACH. INT. 21% (id 208) - achizitie normala (nu import), TVA la furnizor
|
||||
goDlg.nIdExplicatieTva = 208
|
||||
goDlg.cExplicatieTva = 'ACH. INT. 21%'
|
||||
goDlg.optTipTva.Value = 1 && F = furnizor
|
||||
goDlg.chkInValutaCont.Value = 0
|
||||
goDlg.chkParticipaValuta.Value = 1
|
||||
goDlg.WindowType = 0
|
||||
goDlg.Visible = .T.
|
||||
goDlg.Show()
|
||||
DOEVENTS FORCE
|
||||
DO ArLog WITH 'DOC3: valideaza (pe dialog) = ' + TRANSFORM(goDlg.valideaza())
|
||||
DO ConstruiesteToDlg
|
||||
DO ArLog WITH 'DOC3: do_adauga_factura = ' + TRANSFORM(goObj.do_adauga_factura(goT))
|
||||
goDlg.Hide()
|
||||
DOEVENTS FORCE
|
||||
DO VerificaPereche WITH 103, 500, 0, ''
|
||||
|
||||
DO ArLog WITH 'DIAG dump introdc dupa cele 3 documente (inainte de articol):'
|
||||
DO DumpIntrodc
|
||||
|
||||
*========================= PAS 0: cele 3 documente, structura B/T intacta (rul_temp gol) =========================
|
||||
DO HarnessStep WITH 0, 'dupa 3 documente: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri (astept 6, 3 perechi B/T), rul_temp=' + TRANSFORM(RECCOUNT_ACTIVE('rul_temp')) + ' articole'
|
||||
|
||||
*========================= ADAUGARE ARTICOL PRIN FLUXUL REAL: do_adauga_articol() =========================
|
||||
*-- gnButon/XML furnizate de mock_cauta_nom_articole.prg (dialogul real e modal, nu ruleaza
|
||||
*-- headless) - dar callback-ul care scrie in rul_temp e chiar do_adauga_articol REAL din clasa.
|
||||
LOCAL lnRandInainte, lnRandDupa, llEroareAdauga
|
||||
lnRandInainte = RECCOUNT_ACTIVE('rul_temp')
|
||||
llEroareAdauga = .F.
|
||||
TRY
|
||||
goObj.do_adauga_articol()
|
||||
CATCH TO loExcAdd
|
||||
llEroareAdauga = .T.
|
||||
DO ArLog WITH 'EROARE la do_adauga_articol() ' + TRANSFORM(loExcAdd.ErrorNo) + ' [' + loExcAdd.Message + ;
|
||||
'] in ' + loExcAdd.Procedure + ':' + TRANSFORM(loExcAdd.LineNo) + ' (' + loExcAdd.LineContents + ')'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
lnRandDupa = RECCOUNT_ACTIVE('rul_temp')
|
||||
DO ArLog WITH 'do_adauga_articol(): randuri rul_temp INAINTE=' + TRANSFORM(lnRandInainte) + ' DUPA=' + TRANSFORM(lnRandDupa) + ' eroare=' + TRANSFORM(llEroareAdauga) + ' gnButon=' + TRANSFORM(gnButon)
|
||||
|
||||
*-- VERIFICARE 0 (Problema 1 raportata de Marius): articolul BULDOEXCAVATOR apare in rul_temp?
|
||||
LOCAL llArticolAdaugat
|
||||
llArticolAdaugat = .F.
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
IF FOUND()
|
||||
llArticolAdaugat = .T.
|
||||
DO ArLog WITH 'PASS verificare0: BULDOEXCAVATOR gasit in rul_temp dupa do_adauga_articol() REAL - denumire=' + ALLTRIM(denumire) + ' cont=[' + ALLTRIM(NVL(cont,'')) + '] cant=' + TRANSFORM(cant) + ' pret=' + TRANSFORM(pret) + ' pret_val=' + TRANSFORM(pret_val) + ' cota_tva=' + TRANSFORM(cota_tva) + ' id_gestiune=' + TRANSFORM(NVL(id_gestiune,-1)) + ' acont=[' + ALLTRIM(NVL(acont,'')) + ']'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare0: BULDOEXCAVATOR NU a fost gasit in rul_temp dupa do_adauga_articol() REAL - articolul se pierde in fluxul real (Problema 1 confirmata)'
|
||||
ENDIF
|
||||
|
||||
*-- VERIFICARE 2 (runda4c dedup): sincronizeaza() a rulat deja in do_adauga_articol cu
|
||||
*-- cant/pret 0 -> mesajul "cantitati/preturi" trebuie sa apara EXACT o data (nu per document)
|
||||
LOCAL lnAparitiiPre
|
||||
lnAparitiiPre = 0
|
||||
DO WHILE AT('nu au inca cantitati', goObj.cmesajsync, lnAparitiiPre + 1) > 0
|
||||
lnAparitiiPre = lnAparitiiPre + 1
|
||||
ENDDO
|
||||
IF lnAparitiiPre = 1
|
||||
DO ArLog WITH 'PASS verificare2 (runda4c dedup, la cant=0): mesajul "cantitati/preturi" apare O SINGURA DATA in cmesajsync'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare2 (runda4c dedup, la cant=0): mesajul apare de ' + TRANSFORM(lnAparitiiPre) + ' ori (astept 1)'
|
||||
ENDIF
|
||||
|
||||
*-- captura grila DUPA do_adauga_articol, INAINTE de completarea manuala cant/pret (developer
|
||||
*-- vede exact ce lasa fluxul real: randul apare cu cant/pret 0 sau lipseste complet)
|
||||
DO HarnessStep WITH 1, 'dupa do_adauga_articol() REAL: articol_adaugat=' + TRANSFORM(llArticolAdaugat) + ' rul_temp=' + TRANSFORM(lnRandDupa) + ' randuri (eroare=' + TRANSFORM(llEroareAdauga) + ')'
|
||||
|
||||
*-- daca articolul a fost adaugat, completez cant/pret (do_adauga_articol NU le seteaza -
|
||||
*-- utilizatorul le tasteaza manual in grid; simulez exact asta, ca in scenariul lui Marius:
|
||||
*-- 1 buc, 5230 lei / 1000 EUR, curs 5.23)
|
||||
IF llArticolAdaugat
|
||||
SELECT rul_temp
|
||||
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
||||
REPLACE cant WITH 1, pret WITH 5230, pret_lei WITH 5230, pret_val WITH 1000, pretd WITH 1000
|
||||
goObj.gridart.Refresh()
|
||||
DOEVENTS FORCE
|
||||
DO ArLog WITH 'cant/pret completate manual pe randul BULDOEXCAVATOR (simuleaza tastarea in grid)'
|
||||
ENDIF
|
||||
|
||||
*========================= sincronizeaza() =========================
|
||||
LOCAL llEroareSync
|
||||
llEroareSync = .F.
|
||||
TRY
|
||||
goObj.sincronizeaza()
|
||||
CATCH TO loExcSync
|
||||
llEroareSync = .T.
|
||||
DO ArLog WITH 'EROARE la sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + ;
|
||||
'] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo) + ' (' + loExcSync.LineContents + ')'
|
||||
ENDTRY
|
||||
DOEVENTS FORCE
|
||||
goObj.grid1.Refresh()
|
||||
DOEVENTS FORCE
|
||||
|
||||
IF !llEroareSync
|
||||
DO ArLog WITH 'PASS verificare1: sincronizeaza() a rulat fara eroare'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare1: sincronizeaza() a aruncat eroare - vezi mesajul de mai sus'
|
||||
ENDIF
|
||||
|
||||
LOCAL lnLenCaption, lcCaption, lcMesajSync, lnAparitiiMesaj
|
||||
lcCaption = goObj.lblSync.Caption
|
||||
lcMesajSync = goObj.cmesajsync
|
||||
lnLenCaption = LEN(lcCaption)
|
||||
DO ArLog WITH 'cmesajsync (' + TRANSFORM(LEN(lcMesajSync)) + ' caractere) = [' + lcMesajSync + ']'
|
||||
DO ArLog WITH 'lblSync.Caption (' + TRANSFORM(lnLenCaption) + ' caractere) = [' + lcCaption + ']'
|
||||
|
||||
*-- runda4c (dedup aplicat in sparge_document): mesajul "cantitati/preturi" trebuie sa apara
|
||||
*-- O SINGURA DATA in cmesajsync, nu o data per document (Problema 2, fix aplicat de Marius).
|
||||
IF !EMPTY(lcMesajSync)
|
||||
lnAparitiiMesaj = 0
|
||||
LOCAL lnPosCaut, lcTextCautat
|
||||
lcTextCautat = 'nu au inca cantitati'
|
||||
lnPosCaut = 1
|
||||
DO WHILE .T.
|
||||
lnPosCaut = AT(lcTextCautat, lcMesajSync, lnAparitiiMesaj + 1)
|
||||
IF lnPosCaut = 0
|
||||
EXIT
|
||||
ENDIF
|
||||
lnAparitiiMesaj = lnAparitiiMesaj + 1
|
||||
ENDDO
|
||||
IF lnAparitiiMesaj <= 1
|
||||
DO ArLog WITH 'PASS verificare2post (dupa completare cant/pret): mesajul "cantitati/preturi" apare de ' + TRANSFORM(lnAparitiiMesaj) + ' ori (0 = disparut legitim, niciodata >1)'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare2post (dupa completare cant/pret): mesajul "cantitati/preturi" apare de ' + TRANSFORM(lnAparitiiMesaj) + ' ori (astept <=1)'
|
||||
ENDIF
|
||||
IF lnLenCaption <= 254 AND LEFT(lcCaption, 15) == 'NESINCRONIZAT: '
|
||||
DO ArLog WITH 'PASS verificare2b: Caption trunchiat corect la ' + TRANSFORM(lnLenCaption) + ' caractere (<=254), prefix NESINCRONIZAT: OK'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare2b: Caption lungime=' + TRANSFORM(lnLenCaption) + ' (astept <=254) prefix=[' + LEFT(lcCaption,15) + ']'
|
||||
ENDIF
|
||||
ELSE
|
||||
DO ArLog WITH 'INFO verificare2: cmesajsync gol -> nota SINCRONIZATA'
|
||||
ENDIF
|
||||
|
||||
*-- runda4c (spargere doar factura principala): dupa sincronizeaza(), doar documentul
|
||||
*-- principal (primul B/S din introdc, aici nract=100/RAJA) trebuie spart in randuri S (cont
|
||||
*-- 212); documentele 102 (TRANS OIL MOTO) si 103 (BIROUL VAMAL) trebuie sa ramana B/T
|
||||
*-- neatinse (regula de domeniu: articolele apartin doar facturii principale).
|
||||
LOCAL llDoc100Spart, llDoc102Nesparte, llDoc103Nesparte
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = 100 AND tip_rand == 'S'
|
||||
llDoc100Spart = FOUND()
|
||||
LOCATE FOR nract = 102 AND tip_rand == 'B'
|
||||
llDoc102Nesparte = FOUND()
|
||||
LOCATE FOR nract = 103 AND tip_rand == 'B'
|
||||
llDoc103Nesparte = FOUND()
|
||||
IF llDoc100Spart AND llDoc102Nesparte AND llDoc103Nesparte
|
||||
DO ArLog WITH 'PASS verificare3 (runda4c spargere doar principala): doc 100/RAJA spart (rand S gasit), doc 102/103 raman B/T nesparte'
|
||||
ELSE
|
||||
DO ArLog WITH 'FAIL verificare3 (runda4c spargere doar principala): doc100Spart=' + TRANSFORM(llDoc100Spart) + ' (astept .T.) doc102Nesparte=' + TRANSFORM(llDoc102Nesparte) + ' (astept .T.) doc103Nesparte=' + TRANSFORM(llDoc103Nesparte) + ' (astept .T.)'
|
||||
ENDIF
|
||||
|
||||
*========================= PAS 2: dupa sincronizeaza() =========================
|
||||
DO HarnessStep WITH 2, 'dupa sincronizeaza(): ' + IIF(EMPTY(lcMesajSync),'SINCRONIZAT','NESINCRONIZAT (' + TRANSFORM(LEN(lcMesajSync)) + ' car., mesaj repetat de ' + TRANSFORM(lnAparitiiMesaj) + ' ori)') + ' introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
|
||||
|
||||
*========================= do_executa() din nou + totaluri finale =========================
|
||||
LOCAL llEroareExec
|
||||
llEroareExec = .F.
|
||||
TRY
|
||||
goObj.do_executa()
|
||||
CATCH TO loExcExec
|
||||
llEroareExec = .T.
|
||||
DO ArLog WITH 'EROARE la do_executa() ' + TRANSFORM(loExcExec.ErrorNo) + ' [' + loExcExec.Message + ;
|
||||
'] in ' + loExcExec.Procedure + ':' + TRANSFORM(loExcExec.LineNo)
|
||||
ENDTRY
|
||||
goObj.recalculeaza()
|
||||
goObj.actualizeaza_banda()
|
||||
DOEVENTS FORCE
|
||||
|
||||
DO ArLog WITH 'DIAG dump introdc FINAL (dupa sincronizeaza+do_executa):'
|
||||
DO DumpIntrodc
|
||||
DO ArLog WITH 'DIAG dump rul_temp FINAL:'
|
||||
SELECT rul_temp
|
||||
SCAN
|
||||
DO ArLog WITH ' denumire=' + ALLTRIM(denumire) + ' cont=' + ALLTRIM(NVL(cont,'')) + ' cant=' + TRANSFORM(cant) + ;
|
||||
' pret=' + TRANSFORM(pret) + ' pret_val=' + TRANSFORM(pret_val) + ' cota_tva=' + TRANSFORM(cota_tva)
|
||||
ENDSCAN
|
||||
|
||||
DO ArLog WITH 'TOTALURI FINALE: nbaza_lei=' + TRANSFORM(goObj.nbaza_lei) + ' ntva_lei=' + TRANSFORM(goObj.ntva_lei) + ;
|
||||
' nbaza_val=' + TRANSFORM(goObj.nbaza_val) + ' ntva_val=' + TRANSFORM(goObj.ntva_val) + ;
|
||||
' ndif_lei=' + TRANSFORM(goObj.ndif_lei) + ' ndif_val=' + TRANSFORM(goObj.ndif_val)
|
||||
LOCAL lnSumaBazaDoc, lnSumaTvaDoc
|
||||
SELECT SUM(IIF(tip_rand=='B' OR tip_rand=='S',suma,0)) AS s FROM introdc INTO CURSOR crsBazaTot NOFILTER
|
||||
lnSumaBazaDoc = NVL(crsBazaTot.s,0)
|
||||
USE IN crsBazaTot
|
||||
SELECT SUM(IIF(tip_rand=='T',suma,0)) AS s FROM introdc INTO CURSOR crsTvaTot NOFILTER
|
||||
lnSumaTvaDoc = NVL(crsTvaTot.s,0)
|
||||
USE IN crsTvaTot
|
||||
DO ArLog WITH 'TOTALURI PE RANDURI introdc: suma(B+S)=' + TRANSFORM(lnSumaBazaDoc) + ' (asteptare bruta B: 5230+1000+500=6730) suma(T)=' + TRANSFORM(lnSumaTvaDoc)
|
||||
|
||||
DO ArLog WITH 'GATA - scenariu executat integral'
|
||||
DO HarnessStep WITH 3, 'final: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri, articol_adaugat=' + TRANSFORM(llArticolAdaugat) + ' eroare_sync=' + TRANSFORM(llEroareSync) + ' eroare_exec=' + TRANSFORM(llEroareExec)
|
||||
DO HarnessDone WITH 'done'
|
||||
|
||||
CATCH TO loExc
|
||||
DO ArLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
|
||||
DO HarnessDone WITH 'done-error'
|
||||
ENDTRY
|
||||
|
||||
QUIT
|
||||
|
||||
*==================================================================================
|
||||
PROCEDURE ConstruiesteToDlg
|
||||
*-- toDlg construit INLINE in programul PRINCIPAL (ADDPROPERTY da eroare 11 din proceduri in
|
||||
*-- acest runtime headless - vezi docs/testare-ui-vfp.md capcana l); valorile respecta exact
|
||||
*-- dialog.construieste_todlg.
|
||||
goT = CREATEOBJECT('Empty')
|
||||
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
|
||||
=ADDPROPERTY(goT,'nract',goDlg.nNract)
|
||||
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
|
||||
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
|
||||
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
|
||||
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
|
||||
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
|
||||
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
|
||||
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
|
||||
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
|
||||
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
||||
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
|
||||
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
|
||||
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
|
||||
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
|
||||
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
|
||||
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
||||
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
|
||||
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
||||
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
|
||||
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
|
||||
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
|
||||
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
|
||||
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
|
||||
=ADDPROPERTY(goT,'dvi_scc','401')
|
||||
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
|
||||
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaRulTemp
|
||||
*-- structura reala a rul_temp (vezi ointroduceri.vc2:11030): toate coloanele VRUL (Oracle
|
||||
*-- dev, MARIUSM_AUTO, 17.07.2026) + pret_lei/pret_val/cota_tva (aliasuri din select-ul care
|
||||
*-- creeaza rul_temp gol). Folosita atat la pregatirea INAINTE de instantiere, cat si de
|
||||
*-- dummyexecutor.oExecute (cand import_nota.Init recreeaza rul_temp gol din Oracle).
|
||||
IF USED('rul_temp')
|
||||
USE IN ('rul_temp')
|
||||
ENDIF
|
||||
CREATE CURSOR rul_temp ( ;
|
||||
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
|
||||
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
|
||||
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
|
||||
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
|
||||
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
|
||||
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
|
||||
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
|
||||
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
|
||||
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
|
||||
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
|
||||
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
|
||||
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
|
||||
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
|
||||
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
|
||||
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
|
||||
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
|
||||
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
|
||||
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
|
||||
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
|
||||
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
|
||||
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
|
||||
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
|
||||
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
|
||||
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
|
||||
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
|
||||
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
|
||||
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
|
||||
, fdoc C(30), id_fdoc N(18,4);
|
||||
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE CreeazaIntrodc
|
||||
LPARAMETERS tcAlias
|
||||
IF USED(tcAlias)
|
||||
USE IN (tcAlias)
|
||||
ENDIF
|
||||
CREATE CURSOR (tcAlias) ( ;
|
||||
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
|
||||
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
|
||||
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
|
||||
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
|
||||
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
|
||||
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
|
||||
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
|
||||
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
|
||||
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), ;
|
||||
scd_orig C(20), ascd_orig C(20))
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaPereche
|
||||
*-- verifica perechea B+T adaugata (dupa nract): sume lei/valuta, valuta pe baza
|
||||
LPARAMETERS tnNract, tnBazaLei, tnBazaVal, tcVal, tlTDvi
|
||||
LOCAL lnSel, lcMsg, llB, llT, lnBS, lnBSV, lcNV
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = tnNract AND tip_rand == 'B'
|
||||
llB = FOUND()
|
||||
IF llB
|
||||
lnBS = suma
|
||||
lnBSV = suma_val
|
||||
lcNV = ALLTRIM(NVL(nume_val,''))
|
||||
ENDIF
|
||||
LOCATE FOR nract = tnNract AND tip_rand == 'T'
|
||||
*-- cu DVI, randul T e legitim re-cheiat pe documentul vamal (verificat de VerificaDvi)
|
||||
llT = FOUND() OR tlTDvi
|
||||
IF llB AND llT AND ABS(lnBS - tnBazaLei) < 0.01 AND ABS(lnBSV - tnBazaVal) < 0.01 AND ALLTRIM(NVL(lcNV,'')) == tcVal
|
||||
lcMsg = 'PASS pereche nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(lnBS) + ' val=' + TRANSFORM(lnBSV) + ' ' + lcNV + ') + randT gasit'
|
||||
ELSE
|
||||
lcMsg = 'FAIL pereche nract=' + TRANSFORM(tnNract) + ': B?=' + TRANSFORM(llB) + ' T?=' + TRANSFORM(llT) + ' bazaLei=' + TRANSFORM(IIF(llB,lnBS,-1)) + '(astept ' + TRANSFORM(tnBazaLei) + ') bazaVal=' + TRANSFORM(IIF(llB,lnBSV,-1)) + '(astept ' + TRANSFORM(tnBazaVal) + ') val=[' + IIF(llB,lcNV,'?') + '](astept [' + tcVal + '])'
|
||||
ENDIF
|
||||
DO ArLog WITH lcMsg
|
||||
SELECT (lnSel)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaDvi
|
||||
*-- randul T e re-cheiat pe documentul vamal (Go lnRecT - fix), nu mai ramane sub nract-ul facturii.
|
||||
LPARAMETERS tnNract, tnNractDvi, tnBazaLei, tnTvaLei
|
||||
LOCAL lnSel, lcMsg, llB, llT, lnBS, lnTS, lcTPartc, llVama, llRamasitaT
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
LOCATE FOR nract = tnNract AND tip_rand == 'B'
|
||||
llB = FOUND()
|
||||
IF llB
|
||||
lnBS = suma
|
||||
ENDIF
|
||||
LOCATE FOR nract = tnNractDvi AND tip_rand == 'T'
|
||||
llT = FOUND()
|
||||
IF llT
|
||||
lnTS = suma
|
||||
lcTPartc = ALLTRIM(NVL(partc,''))
|
||||
llVama = ('VAMAL' $ UPPER(lcTPartc))
|
||||
ENDIF
|
||||
LOCATE FOR nract = tnNract AND tip_rand == 'T'
|
||||
llRamasitaT = FOUND()
|
||||
IF llB AND llT AND !llRamasitaT AND ABS(lnBS - tnBazaLei) < 0.01 AND ABS(lnTS - tnTvaLei) < 0.01 AND llVama
|
||||
lcMsg = 'PASS DVI nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(lnBS) + ') + T_DVI(nract=' + TRANSFORM(tnNractDvi) + ' partc=' + lcTPartc + ' suma=' + TRANSFORM(lnTS) + ')'
|
||||
ELSE
|
||||
lcMsg = 'FAIL DVI nract=' + TRANSFORM(tnNract) + ': B(suma=' + TRANSFORM(IIF(llB,lnBS,-1)) + ', astept ' + TRANSFORM(tnBazaLei) + ') T_DVI(nract=' + TRANSFORM(tnNractDvi) + ' suma=' + TRANSFORM(IIF(llT,lnTS,-1)) + ', astept ' + TRANSFORM(tnTvaLei) + ' partc=' + IIF(llT,lcTPartc,'?') + ') ramasitaT=' + TRANSFORM(llRamasitaT) + ' (astept .F.)'
|
||||
ENDIF
|
||||
DO ArLog WITH lcMsg
|
||||
SELECT (lnSel)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE VerificaSumaGrupVama
|
||||
LPARAMETERS tnNractVama, tnSumaAsteptata, tnRanduriAsteptate
|
||||
LOCAL lnSel, lcMsg, lnSumaT, lnCount
|
||||
lnSel = SELECT()
|
||||
SELECT COUNT(*) AS n, SUM(suma) AS s FROM introdc WHERE nract = tnNractVama AND tip_rand == 'T' INTO CURSOR crsGrupVama NOFILTER
|
||||
lnCount = crsGrupVama.n
|
||||
lnSumaT = NVL(crsGrupVama.s, 0)
|
||||
USE IN crsGrupVama
|
||||
IF lnCount = tnRanduriAsteptate AND ABS(lnSumaT - tnSumaAsteptata) < 0.01
|
||||
lcMsg = 'PASS grup vama nract=' + TRANSFORM(tnNractVama) + ': ' + TRANSFORM(lnCount) + ' randuri T, suma totala=' + TRANSFORM(lnSumaT)
|
||||
ELSE
|
||||
lcMsg = 'FAIL grup vama nract=' + TRANSFORM(tnNractVama) + ': randuri=' + TRANSFORM(lnCount) + ' (astept ' + TRANSFORM(tnRanduriAsteptate) + ') suma=' + TRANSFORM(lnSumaT) + ' (astept ' + TRANSFORM(tnSumaAsteptata) + ')'
|
||||
ENDIF
|
||||
DO ArLog WITH lcMsg
|
||||
SELECT (lnSel)
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE DumpIntrodc
|
||||
LOCAL lnSel
|
||||
lnSel = SELECT()
|
||||
SELECT introdc
|
||||
SCAN
|
||||
DO ArLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(nract) + ' tip_rand=' + tip_rand + ;
|
||||
' scd=' + ALLTRIM(scd) + ' suma=' + TRANSFORM(suma) + ' suma_val=' + TRANSFORM(suma_val) + ;
|
||||
' partc=[' + ALLTRIM(NVL(partc,'')) + '] doc_key=[' + ALLTRIM(doc_key) + ']'
|
||||
ENDSCAN
|
||||
SELECT (lnSel)
|
||||
ENDPROC
|
||||
|
||||
FUNCTION RECCOUNT_ACTIVE
|
||||
LPARAMETERS tcAlias
|
||||
LOCAL lnSel, lnCnt
|
||||
lnSel = SELECT()
|
||||
SELECT (tcAlias)
|
||||
COUNT TO lnCnt FOR !DELETED()
|
||||
SELECT (lnSel)
|
||||
RETURN lnCnt
|
||||
ENDFUNC
|
||||
|
||||
PROCEDURE ArErr
|
||||
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
||||
DO ArLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE ArLog
|
||||
LPARAMETERS tcMsg
|
||||
SET SAFETY OFF
|
||||
LOCAL lcL
|
||||
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||
ENDPROC
|
||||
|
||||
DEFINE CLASS dummyapp AS Custom
|
||||
PROCEDURE ReadIni
|
||||
LPARAMETERS tcSection, tcKey
|
||||
RETURN ''
|
||||
ENDPROC
|
||||
PROCEDURE WriteIni
|
||||
LPARAMETERS tcSection, tcKey, tcValue
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
DEFINE CLASS dummyexecutor AS Custom
|
||||
cEroare = ''
|
||||
PROCEDURE oExecute
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
*-- update_jtva_coloane (SELECT * FROM vjtva_coloane ...): mock cu date reale.
|
||||
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
||||
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
||||
RETURN 1
|
||||
ENDIF
|
||||
*-- rul_temp (recreat de import_nota.Init din vrul cand e gol): structura FIDELA (vezi
|
||||
*-- CreeazaRulTemp) - altfel grila isi pierde coloanele (eroare 1925) sau campuri reale
|
||||
*-- (proc_tva etc.) lipsesc din cursor si GATHER/REPLACE pe ele arunca eroare 12.
|
||||
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
||||
DO CreeazaRulTemp
|
||||
ELSE
|
||||
*-- ramura generica: acopera si config_analitice (assign_analitic) - cursor gol,
|
||||
*-- lnSucces>0 dar RECCOUNT=0 => lnSucces=-1 in assign_analitic => lcAnalitic='' (fara
|
||||
*-- analitic pe cont 212, comportament acceptat de team-lead pentru acest test).
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oExecuta
|
||||
LPARAMETERS tcSql, tcCursor
|
||||
IF !EMPTY(m.tcCursor)
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
|
||||
ELSE
|
||||
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
||||
ENDIF
|
||||
ENDIF
|
||||
RETURN .T.
|
||||
ENDPROC
|
||||
PROCEDURE oSelect2Value
|
||||
*-- GetCodFiscalPartenerById: cod fiscal gol => VERIFICA_RTVAI sare peste Oracle real.
|
||||
LPARAMETERS tcSql, toValue
|
||||
toValue = ''
|
||||
RETURN 1
|
||||
ENDPROC
|
||||
PROCEDURE oReset
|
||||
*-- update_jtva_coloane() il apeleaza necondit dupa oExecute (updateserver.prg:611).
|
||||
ENDPROC
|
||||
ENDDEFINE
|
||||
|
||||
PROCEDURE CreeazaJtvaColoaneView
|
||||
LPARAMETERS tcCursor
|
||||
IF USED(m.tcCursor)
|
||||
USE IN (m.tcCursor)
|
||||
ENDIF
|
||||
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
|
||||
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
|
||||
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
|
||||
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
|
||||
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
|
||||
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
||||
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
|
||||
ENDPROC
|
||||
Reference in New Issue
Block a user