- TVA-ul de pe DVI poate avea valuta si curs proprii, diferite de ale facturii (rand "protejat": rand_dvi/valuta_proprie pe introdc, sparge_tva_protejat). - Discount financiar pe factura: rand tip_rand='G' (401 = 767), TVA calculat pe baza diminuata, marfa si preturile articolelor pe valoarea integrala. - Factura multi-cota: randurile S, G si T se sparg pe cotele articolelor, cu explicatia TVA din familia coloanei si alinierea T -> S. - Teste noi in utile/Teste/achizitie_import (discount, DVI, cote, e2e). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8
1026 lines
48 KiB
Plaintext
1026 lines
48 KiB
Plaintext
* test_repro_tva11_explicatie.prg
|
|
* Repro (raportat de Marius) - formularul "Achizitie din import marfa/materiale" (import_nota,
|
|
* COMUN\clase\ointroduceri.vcx), pe fluxul REAL de utilizator:
|
|
* 1. factura de import cu notele initial pe cota 21% (DVI, ca in test_dvi_multicota.prg);
|
|
* 2. se adauga 2 articole (unul 21%, unul 11%) - notele se defalca pe cote TVA la sincronizare;
|
|
* nomenclatorul JTVA_COLOANE nu are inca perechea de import 11% (FO11B/FO11T - migrare
|
|
* docs\handoff_tva11_nomenclator.md, neaplicata), deci randul T de 11% nu se poate crea;
|
|
* randul S de 11% ramane cu explicatia mostenita de la baza (21%, gresita - creeaza_rand_s
|
|
* seteaza ptva=11 dar NU schimba explicatie_tva/id_jtva_coloana daca gaseste_jtva_cota nu
|
|
* gaseste perechea - vezi COMUN\clase\ointroduceri.vcx procedura creeaza_rand_s);
|
|
* 3. pe randul S cu TVA%=11 se schimba explicatia TVA cu alta explicatie tot de 11% (dublu-click
|
|
* pe celula "Explicatie TVA" -> formularul REAL de cautare, cauta_alfa_form; Oracle
|
|
* nemock-uibil in cauta_alfa - shadow in mock_cauta_alfa_tva11.prg, vezi acel fisier).
|
|
*
|
|
* STARE (30/07/2026, dupa write-back cu txt2vcx.ps1, fidelity-check O,P1,E0,S1,X0): corectia de
|
|
* cod E ACUM IN BINAR (COMUN\clase\ointroduceri.vcx) pentru AMBELE moduri - PRE si POST NU mai
|
|
* difera prin cod, doar prin nomenclatorul JTVA_COLOANE mock (vezi docs\handoff_tva11_test.md):
|
|
* (a) eroare VFP "Operator/operand type mismatch" (IMPORT_NOTA.GRID1.CSUMA.TEXT1.VALID) -
|
|
* INCHISA de corectie, in AMBELE moduri (nu mai depinde de nomenclator).
|
|
* (b) mesaj de coloana/explicatie TVA lipsa pentru o cota - depinde DOAR de nomenclator:
|
|
* PRE (FO11B/FO11T lipsesc, docs\handoff_tva11_nomenclator.md, script neaplicat) -
|
|
* mesajul apare (text nou: "Documentul <fdoc> are marfa la <cota>%, dar nu exista
|
|
* explicatie TVA de <cota>% in seria '<serie>' - completati nomenclatorul de explicatii
|
|
* TVA."); POST (FO11B/FO11T=236/237 adaugate in mock) - mesajul NU mai apare, finalizarea
|
|
* se poate face.
|
|
* gcPickChoice (fisier steag tva11_pick_other_series.flag) controleaza CE explicatie de 11%
|
|
* alege utilizatorul la pasul 3: SAME (implicit) = din ACEEASI serie ca documentul (FO11B, doar
|
|
* in POST - in PRE nu exista); OTHER = din ALTA serie (CE11CTB, bunuri CE, furnizor inregistrat TVA, EXISTENTA in ambele
|
|
* moduri) - exact alegerea reala a lui Marius din captura lui.
|
|
*
|
|
* Rulare (mod PRE, implicit):
|
|
* powershell -ExecutionPolicy Bypass -File test_repro_tva11_explicatie.ps1
|
|
* Rulare (mod POST + alegere din ACEEASI serie): scrie fisierul-steag tva11_post_fix.flag,
|
|
* sterge tva11_pick_other_series.flag daca exista, ruleaza acelasi .ps1.
|
|
* Rulare (mod POST + alegere din ALTA serie, cazul real Marius): scrie AMBELE fisiere-steag
|
|
* (tva11_post_fix.flag SI tva11_pick_other_series.flag), ruleaza acelasi .ps1.
|
|
* Alternativ, linie de comanda directa (fara harness/screenshot-uri):
|
|
* vfp9.exe -A "test_repro_tva11_explicatie.fxp" POST
|
|
|
|
LPARAMETERS tcModTest
|
|
|
|
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_repro_tva11_explicatie_log.txt"
|
|
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_tva11_explicatie\"
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
|
|
|
|
PUBLIC gcModTest
|
|
IF TYPE('tcModTest') = 'C' AND UPPER(ALLTRIM(tcModTest)) == 'POST'
|
|
gcModTest = 'POST'
|
|
ELSE
|
|
IF FILE("D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\tva11_post_fix.flag")
|
|
gcModTest = 'POST'
|
|
ELSE
|
|
gcModTest = 'PRE'
|
|
ENDIF
|
|
ENDIF
|
|
DO TvLog WITH 'MOD TEST = ' + gcModTest
|
|
|
|
ON ERROR DO TvErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
TRY
|
|
LOCAL gcAppPath, lcPath
|
|
gcAppPath = "D:\ROA\ROAGEST\"
|
|
SET DEFAULT TO (gcAppPath)
|
|
|
|
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
|
|
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 TvLog 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 TvLog WITH 'SET CLASSLIB OK'
|
|
|
|
*----- PROCEDURI (mock-uri 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 "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
|
|
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_cauta_alfa_tva11.prg" ADDITIVE
|
|
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.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 TvLog WITH 'SET PROCEDURE OK'
|
|
|
|
PUBLIC goMockValuta
|
|
goMockValuta = CREATEOBJECT('Custom')
|
|
goMockValuta.AddProperty('id_valuta', 978)
|
|
goMockValuta.AddProperty('nume_val', 'EUR')
|
|
|
|
*----- 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
|
|
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)
|
|
|
|
*-- gnTipGest: citit bare la Do listare_nir With poAct.nnir, gnTipGest In oproceduri_listari,
|
|
*-- dupa oscrie_in_fisiere() cu succes (inainte_de_do_termin) - 0 = gestiune normala.
|
|
PUBLIC gnTipGest
|
|
gnTipGest = 0
|
|
*-- gnHandle: conexiune Oracle reala, nefolosita direct (oscrie_in_fisiere e mock-uit), dar
|
|
*-- declarata defensiv ca in test_e2e_dvi_ron_discount.prg, ca sa nu lipseasca daca e citita.
|
|
PUBLIC gnHandle
|
|
gnHandle = -1
|
|
*-- restul mediului real (roagest.prg) cerut de pasul Terminat/listare_nir - preluat INTREG
|
|
*-- din test_e2e_dvi_ron_discount.prg (singurul test din suita care merge pana la capat pe
|
|
*-- acest drum), ca sa nu descoperim globale lipsa una cate una.
|
|
PUBLIC gcTempPath
|
|
gcTempPath = ADDBS(SYS(2023))
|
|
PUBLIC gcCondSucursala
|
|
gcCondSucursala = ''
|
|
|
|
PUBLIC gnButon
|
|
STORE 2 TO gnButon
|
|
PUBLIC gcMockArtCodmat, gcMockAcontCrt
|
|
gcMockArtCodmat = ''
|
|
gcMockAcontCrt = ''
|
|
PUBLIC gnMockRaspuns
|
|
gnMockRaspuns = 6
|
|
*-- capteaza textul exact al ultimului amessagebox (mock_amessagebox.prg) - pt. assert pe cmesajsync
|
|
PUBLIC gcMockUltimMesaj, gnMockUltimTip
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
*-- denumirea aleasa in dialogul de cautare explicatie TVA (mock_cauta_alfa_tva11.prg)
|
|
PUBLIC gcTestTvaAlege
|
|
gcTestTvaAlege = ''
|
|
|
|
PUBLIC goExecutor, goApp
|
|
goExecutor = CREATEOBJECT('dummyexecutor')
|
|
goApp = CREATEOBJECT('dummyapp')
|
|
|
|
*----- poAct: antetul notei (moneda principala EUR, curs 5) -----
|
|
PUBLIC poAct
|
|
poAct = CREATEOBJECT('Custom')
|
|
poAct.AddProperty('nume_val', 'EUR')
|
|
poAct.AddProperty('curs', 5)
|
|
poAct.AddProperty('proc_tva', 1.21)
|
|
poAct.AddProperty('nnir', 0)
|
|
poAct.AddProperty('id_valuta', 978)
|
|
poAct.AddProperty('id_fdoc', 1)
|
|
poAct.AddProperty('fdoc', 'Factura')
|
|
poAct.AddProperty('id_partc', 601)
|
|
poAct.AddProperty('partc', 'MULTI SUPPLY SRL')
|
|
poAct.AddProperty('serie_act', '')
|
|
poAct.AddProperty('dataact', DATE())
|
|
poAct.AddProperty('tva_incasare', 0)
|
|
poAct.AddProperty('id_set', 1)
|
|
poAct.AddProperty('id_gestin', 1)
|
|
|
|
*----- gcPickChoice: care explicatie de 11% alege utilizatorul la pasul 3 - control primit de la
|
|
* team-lead (30/07/2026), din citire directa (read-only) pe JTVA_COLOANE real: SAME (implicit)
|
|
* = FO11B/236, din ACEEASI serie ca documentul (FO21B/220); OTHER = CE11CTB/232, din ALTA serie
|
|
* (bunuri CE, furnizor inregistrat TVA) - exact ce a ales Marius in captura lui. Fisier-steag, ca la gcModTest (harness-ul
|
|
* standard nu paseaza parametri liniei de comanda). -----
|
|
PUBLIC gcPickChoice
|
|
IF FILE("D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\tva11_pick_other_series.flag")
|
|
gcPickChoice = 'OTHER'
|
|
ELSE
|
|
gcPickChoice = 'SAME'
|
|
ENDIF
|
|
DO TvLog WITH 'PICK CHOICE (flag, relevant DOAR in POST - PRE alege intotdeauna din alta serie, FO11B nu exista) = ' + gcPickChoice
|
|
|
|
*----- jtva_coloane2 / saft_taxtable: id-uri si coloana_jc REALE (team-lead, interogare read-only
|
|
* pe JTVA_COLOANE, 30/07/2026): 220=FO21B/221=FO21T (import bunuri 21% - baza documentului,
|
|
* exista); 236=FO11B/237=FO11T (import bunuri 11% - FIX-ul migrarii, doar in modul POST);
|
|
* 226=CE21CTB/227=CE21CTT si 232=CE11CTB/233=CE11CTT (bunuri CE, furnizor inregistrat TVA 21%/11% - serie DIFERITA,
|
|
* EXISTENTA deja in ambele moduri, neconditionata de migrarea FO11x) - optiunea "alta serie"
|
|
* aleasa efectiv de Marius in captura lui (gcPickChoice='OTHER'). -----
|
|
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, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
|
|
INSERT INTO jtva_coloane2 VALUES (2, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
|
|
INSERT INTO jtva_coloane2 VALUES (3, 226, 'ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE21CTB', 'CE21CTT', 21, 227)
|
|
INSERT INTO jtva_coloane2 VALUES (4, 227, 'TVA ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE21CTT', '', 21, 0)
|
|
INSERT INTO jtva_coloane2 VALUES (5, 232, 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE11CTB', 'CE11CTT', 11, 233)
|
|
INSERT INTO jtva_coloane2 VALUES (6, 233, 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 1, 'CE11CTT', '', 11, 0)
|
|
IF gcModTest == 'POST'
|
|
INSERT INTO jtva_coloane2 VALUES (7, 236, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 237)
|
|
INSERT INTO jtva_coloane2 VALUES (8, 237, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
|
|
DO TvLog WITH 'MOD POST: jtva_coloane2 ARE perechea FO11B/FO11T (236/237) - nomenclator migrat'
|
|
ELSE
|
|
DO TvLog WITH 'MOD PRE: jtva_coloane2 NU are perechea FO11B/FO11T (stare curenta din baza)'
|
|
ENDIF
|
|
|
|
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 ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
|
|
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
|
VALUES ('301205-Import de bunuri cota 11%', 301205, '', 11, 1, 0, 1, 0)
|
|
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
|
VALUES ('300704-Achizitii de servicii intracomunitare, taxabile cu cota de 21%', 300704, '', 21, 1, 0, 1, 0)
|
|
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
|
|
VALUES ('300705-Achizitii de servicii intracomunitare, taxabile cu cota de 11%', 300705, '', 11, 1, 0, 1, 0)
|
|
|
|
DO CreeazaIntrodc WITH 'introdc'
|
|
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', 220, 21, 'ACH. IMP. 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', 221, 21, 'TVA ACH. IMP. 21%')
|
|
GO TOP IN introdc_sablon
|
|
|
|
DO CreeazaRulTemp
|
|
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
|
|
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
|
|
|
|
SELECT introdc
|
|
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
|
|
SET ORDER TO ord_doc
|
|
|
|
*----- goDlgTva11: formularul REAL cauta_alfa_form pentru dialogul de explicatie TVA, pre-construit
|
|
* in main (capcana l - CREATEOBJECT dintr-o procedura da obiect stricat headless). Cursorul are
|
|
* EXACT coloanele SELECT-ate de do_modifica_explicatie_tva (id_jtva_coloana, denumire, cota_tva),
|
|
* filtrate la cota_tva=11 (ca vjtva_coloane in flux real): CE11CTB/CE11CTT (232/233, alta serie,
|
|
* EXISTENTA in ambele moduri) + FO11B/FO11T (236/237, aceeasi serie ca documentul, DOAR in POST). -----
|
|
IF USED('crsTva11cauta')
|
|
USE IN ('crsTva11cauta')
|
|
ENDIF
|
|
CREATE CURSOR crsTva11cauta (id_jtva_coloana N(14), denumire C(100), cota_tva N(6,2))
|
|
INSERT INTO crsTva11cauta VALUES (232, 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 11)
|
|
INSERT INTO crsTva11cauta VALUES (233, 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 11)
|
|
IF gcModTest == 'POST'
|
|
INSERT INTO crsTva11cauta VALUES (236, 'ACH. IMP. 11%', 11)
|
|
INSERT INTO crsTva11cauta VALUES (237, 'TVA ACH. IMP. 11%', 11)
|
|
ENDIF
|
|
GO TOP
|
|
|
|
PUBLIC goDlgTva11
|
|
goDlgTva11 = CREATEOBJECT('cauta_alfa_form', 'crsTva11cauta', '', 'Explicatie TVA,Cota TVA', ;
|
|
'denumire,cota_tva', .F., '', 1)
|
|
goDlgTva11.crs_cursor = 'crsTva11cauta'
|
|
goDlgTva11.cIdColumn = 'id_jtva_coloana'
|
|
goDlgTva11.WindowType = 0
|
|
goDlgTva11.Show()
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH 'goDlgTva11 construit (cauta_alfa_form REAL, mod single-select)'
|
|
|
|
DO TvLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F.)'
|
|
PUBLIC goObj
|
|
goObj = CREATEOBJECT('IMPORT_nota', .F.)
|
|
IF VARTYPE(goObj) <> 'O'
|
|
DO TvLog WITH 'FAIL: instantiere import_nota'
|
|
DO HarnessDone WITH 'done-error'
|
|
QUIT
|
|
ENDIF
|
|
goObj.lDialogAratat = .T.
|
|
goObj.oact = poAct
|
|
goObj.lSpargeSecundare = .F.
|
|
goObj.WindowType = 0
|
|
goObj.Visible = .T.
|
|
goObj.Show()
|
|
goObj.WindowState = 2
|
|
DOEVENTS FORCE
|
|
|
|
SELECT rul_temp
|
|
ZAP
|
|
goObj.gridart.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
PRIVATE pnAsserts, pnPass
|
|
STORE 0 TO pnAsserts, pnPass
|
|
|
|
*========================= PAS 1: FACTURA DE IMPORT, DVI, NOTE INITIAL PE 21% =========================
|
|
PUBLIC goDlg, goT, gcDocKey1
|
|
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
|
|
goDlg.cFelDoc = 'Factura'
|
|
goDlg.nIdFdoc = 1
|
|
goDlg.nNract = 19000
|
|
goDlg.dDataAct = DATE()
|
|
goDlg.nIdPartener = 601
|
|
goDlg.cPartener = 'MULTI SUPPLY SRL'
|
|
goDlg.cExplicatia = 'Import marfa multicota TVA11'
|
|
goDlg.nSuma = 1500
|
|
goDlg.nSumaLei = 0
|
|
goDlg.nCurs = 5
|
|
goDlg.nIdValuta = 978
|
|
goDlg.cValuta = 'EUR'
|
|
goDlg.nIdExplicatieTva = 220
|
|
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
|
|
goDlg.optTipTva.Value = 2 && D = DVI
|
|
goDlg.chkInValutaCont.Value = 1
|
|
goDlg.chkParticipaValuta.Value = 1
|
|
goDlg.cSerieDvi = ''
|
|
goDlg.nNractDvi = 9019
|
|
goDlg.dDviData = DATE()
|
|
goDlg.nIdFdocDVI = 2
|
|
goDlg.cFelDocDvi = 'DVI'
|
|
goDlg.nDviIdPartener = 901
|
|
goDlg.cDviPartener = 'DIRECTIA VAMALA'
|
|
goDlg.nDviTvaLei = 1325.00
|
|
goDlg.nDviTvaVal = 0
|
|
goDlg.actualizeaza_stare_dvi()
|
|
goDlg.WindowType = 0
|
|
goDlg.Visible = .T.
|
|
goDlg.Show()
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH 'valideaza = ' + TRANSFORM(goDlg.valideaza())
|
|
|
|
goT = CREATEOBJECT('Empty')
|
|
=ADDPROPERTY(goT,'serie_act','')
|
|
=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',ROUND(goDlg.nSuma*goDlg.nCurs,gnPC))
|
|
=ADDPROPERTY(goT,'suma_val',goDlg.nSuma)
|
|
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
|
|
=ADDPROPERTY(goT,'participa_valuta',.T.)
|
|
=ADDPROPERTY(goT,'id_valuta',goDlg.nIdValuta)
|
|
=ADDPROPERTY(goT,'curs',goDlg.nCurs)
|
|
=ADDPROPERTY(goT,'nume_val',ALLTRIM(NVL(goDlg.cValuta,'')))
|
|
=ADDPROPERTY(goT,'cTipTva','D')
|
|
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
|
|
=ADDPROPERTY(goT,'dvi_serie','')
|
|
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
|
|
=ADDPROPERTY(goT,'dvi_dataact',DATE())
|
|
=ADDPROPERTY(goT,'dvi_id_fdoc',2)
|
|
=ADDPROPERTY(goT,'dvi_fdoc','DVI')
|
|
=ADDPROPERTY(goT,'dvi_id_partc',901)
|
|
=ADDPROPERTY(goT,'dvi_partc','DIRECTIA VAMALA')
|
|
=ADDPROPERTY(goT,'dvi_scc','401')
|
|
=ADDPROPERTY(goT,'dvi_tva_lei',1325.00)
|
|
=ADDPROPERTY(goT,'dvi_tva_val',0)
|
|
=ADDPROPERTY(goT,'dvi_in_valuta',.F.)
|
|
=ADDPROPERTY(goT,'dvi_id_valuta',0)
|
|
=ADDPROPERTY(goT,'dvi_curs',0)
|
|
=ADDPROPERTY(goT,'dvi_nume_val','')
|
|
=ADDPROPERTY(goT,'dvi_valuta_proprie',1)
|
|
=ADDPROPERTY(goT,'disc_baza_lei',0)
|
|
=ADDPROPERTY(goT,'disc_baza_val',0)
|
|
|
|
LOCAL llOkAdauga
|
|
llOkAdauga = goObj.do_adauga_factura(goT)
|
|
=Assert3('1-do_adauga_factura(goT) reuseste', IIF(llOkAdauga,1,0), 1)
|
|
goDlg.Hide()
|
|
DOEVENTS FORCE
|
|
|
|
SELECT introdc
|
|
SET ORDER TO
|
|
LOCATE FOR nract = 19000 AND tip_rand == 'B'
|
|
IF FOUND()
|
|
gcDocKey1 = ALLTRIM(NVL(doc_key,''))
|
|
ENDIF
|
|
SELECT introdc
|
|
SET ORDER TO ord_doc
|
|
|
|
DO HarnessStep WITH 0, 'factura DVI creata (note initial 21%), doc_key=' + gcDocKey1
|
|
|
|
*========================= PAS 2: 2 ARTICOLE (21% si 11%) - defalcare pe cote la sincronizare =========================
|
|
gcMockArtCodmat = 'ART-BULD-212'
|
|
gcMockAcontCrt = ''
|
|
TRY
|
|
goObj.do_adauga_articol()
|
|
CATCH TO loExcA1
|
|
DO TvLog WITH 'EROARE do_adauga_articol (1, 21%) ' + TRANSFORM(loExcA1.ErrorNo) + ' [' + loExcA1.Message + ']'
|
|
ENDTRY
|
|
DOEVENTS FORCE
|
|
SELECT rul_temp
|
|
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
|
|
IF FOUND()
|
|
REPLACE cant WITH 1, pret_val WITH 1000, pretd WITH 1000, pret WITH ROUND(1000*5,4), ;
|
|
pret_lei WITH ROUND(1000*5,4), cota_tva WITH 21
|
|
ENDIF
|
|
|
|
gcMockArtCodmat = 'ART-A8-371'
|
|
*-- contul 371 are analitice predefinite (FCONTURI_ANALITICE) - completez acont-ul, altfel
|
|
*-- ramane un mesaj permanent in cmesajsync ("analiticul nu e completat"), care ar bloca
|
|
*-- finalizarea INDIFERENT de fixul TVA testat aici (vezi docs\handoff_tva11_test.md)
|
|
gcMockAcontCrt = '4'
|
|
TRY
|
|
goObj.do_adauga_articol()
|
|
CATCH TO loExcA2
|
|
DO TvLog WITH 'EROARE do_adauga_articol (2, 11%) ' + TRANSFORM(loExcA2.ErrorNo) + ' [' + loExcA2.Message + ']'
|
|
ENDTRY
|
|
DOEVENTS FORCE
|
|
SELECT rul_temp
|
|
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
|
|
IF FOUND()
|
|
REPLACE cant WITH 1, pret_val WITH 500, pretd WITH 500, pret WITH ROUND(500*5,4), ;
|
|
pret_lei WITH ROUND(500*5,4), cota_tva WITH 11
|
|
ENDIF
|
|
goObj.gridart.Refresh()
|
|
DOEVENTS FORCE
|
|
|
|
=Assert3('2-doua articole in rul_temp (21% + 11%)', RECCOUNT_ACTIVE('rul_temp'), 2)
|
|
|
|
DO HarnessStep WITH 1, 'articole (21% si 11%) adaugate'
|
|
|
|
*-- prima sincronizare (defalcarea pe cote ceruta de utilizator la pasul 2)
|
|
LOCAL llEroareSync1
|
|
llEroareSync1 = .F.
|
|
TRY
|
|
goObj.sincronizeaza()
|
|
CATCH TO loExcS1
|
|
llEroareSync1 = .T.
|
|
DO TvLog WITH 'EROARE sincronizeaza() #1 ' + TRANSFORM(loExcS1.ErrorNo) + ' [' + loExcS1.Message + '] in ' + loExcS1.Procedure + ':' + TRANSFORM(loExcS1.LineNo)
|
|
ENDTRY
|
|
DOEVENTS FORCE
|
|
=Assert3('3-sincronizeaza() #1 fara eroare VFP', IIF(llEroareSync1,0,1), 1)
|
|
|
|
DO TvLog WITH 'cmesajsync dupa sincronizare #1 = [' + STRTRAN(STRTRAN(NVL(goObj.cmesajsync,''),CHR(13),' '),CHR(10),' | ') + ']'
|
|
|
|
*========================= SIMPTOM (b): mesaj coloana TVA lipsa pentru cota 11% (document DVI) =========================
|
|
LOCAL lcMesajSync1
|
|
lcMesajSync1 = UPPER(NVL(goObj.cmesajsync,''))
|
|
IF gcModTest == 'PRE'
|
|
=AssertContains('4-cmesajsync PRE: contine "11%"', lcMesajSync1, '11%')
|
|
=AssertContainsOr('4a-cmesajsync PRE: contine "COLOANA TVA" sau "EXPLICATIE TVA"', lcMesajSync1, 'COLOANA TVA', 'EXPLICATIE TVA')
|
|
=AssertContains('4b-cmesajsync PRE: mentioneaza documentul DVI', lcMesajSync1, 'DVI')
|
|
ELSE
|
|
=Assert3('4-cmesajsync POST: gol sau fara mentiune de 11% lipsa (nomenclator migrat)', IIF('11%' $ lcMesajSync1 AND ('COLOANA TVA' $ lcMesajSync1 OR 'EXPLICATIE TVA' $ lcMesajSync1),0,1), 1)
|
|
ENDIF
|
|
|
|
*========================= PAS 3: randul S cu TVA%=11 - explicatia mostenita (gresita) de la baza 21% =========================
|
|
SELECT introdc
|
|
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ptva == 11
|
|
LOCAL llGasitS11
|
|
llGasitS11 = FOUND()
|
|
=Assert3('5-exista rand S cu ptva=11', IIF(llGasitS11,1,0), 1)
|
|
IF llGasitS11
|
|
DO TvLog WITH 'rand S(11%) INAINTE de editare: explicatie_tva=[' + ALLTRIM(NVL(explicatie_tva,'')) + '] id_jtva_coloana=' + TRANSFORM(NVL(id_jtva_coloana,0)) + ' recno=' + TRANSFORM(RECNO())
|
|
ELSE
|
|
DO TvLog WITH 'FAIL: nu exista rand S cu ptva=11 - opresc scenariul explicatiei TVA'
|
|
ENDIF
|
|
|
|
IF llGasitS11
|
|
*========================= PAS 3: dublu-click pe celula "Explicatie TVA" -> alta explicatie tot de 11% =========================
|
|
*-- SIMPTOM (a): apel programatic (fara SetFocus/GotFocus real pe celula) - ca gestul de
|
|
*-- dublu-click al utilizatorului, care sare direct pe celula Explicatie TVA fara sa fi
|
|
*-- trecut normal prin celelalte celule ale randului (vezi test_repro_valuta_dblclick.prg,
|
|
*-- PAS A - acelasi tipar de reproducere pentru bug-uri legate de focus in acest grid).
|
|
*-- PRE: FO11B nu exista inca - Marius e nevoit sa aleaga din alta serie (CE11CTB, exact ce a
|
|
*-- ales el real). POST+SAME: alege FO11B (aceeasi serie ca documentul, 220/FO21B). POST+OTHER:
|
|
*-- repeta alegerea din alta serie (CE11CTB), ca sa vedem daca fixul rezista si la alegerea gresita.
|
|
DO CASE
|
|
CASE gcModTest == 'PRE'
|
|
gcTestTvaAlege = 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA'
|
|
CASE gcModTest == 'POST' AND gcPickChoice == 'OTHER'
|
|
gcTestTvaAlege = 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA'
|
|
OTHERWISE
|
|
gcTestTvaAlege = 'ACH. IMP. 11%'
|
|
ENDCASE
|
|
STORE 0 TO gnButon
|
|
DO TvLog WITH '--- INAINTE de dublu-click pe Explicatie TVA (rand S/11%), aleg [' + gcTestTvaAlege + '] ---'
|
|
|
|
LOCAL llEroareDblClick
|
|
llEroareDblClick = .F.
|
|
TRY
|
|
goObj.grid1.cExplicatieTva.Text1.DblClick()
|
|
CATCH TO loExcDbl
|
|
llEroareDblClick = .T.
|
|
DO TvLog WITH 'EROARE (in TRY, NU se propaga la ON ERROR) la DblClick explicatie TVA: ' + TRANSFORM(loExcDbl.ErrorNo) + ' [' + loExcDbl.Message + '] in ' + loExcDbl.Procedure + ':' + TRANSFORM(loExcDbl.LineNo) + ' LineContents=[' + ALLTRIM(loExcDbl.LineContents) + ']'
|
|
LOCAL lnStackI
|
|
FOR lnStackI = 1 TO 15
|
|
IF EMPTY(PROGRAM(lnStackI))
|
|
EXIT
|
|
ENDIF
|
|
DO TvLog WITH ' STACK[' + TRANSFORM(lnStackI) + ']=' + PROGRAM(lnStackI)
|
|
ENDFOR
|
|
ENDTRY
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH '--- DUPA dublu-click pe Explicatie TVA (eroare prinsa in TRY local=' + TRANSFORM(llEroareDblClick) + ') ---'
|
|
|
|
SELECT introdc
|
|
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'S' AND ALLTRIM(NVL(scd,'')) == '371'
|
|
LOCAL llGasitS371Dupa
|
|
llGasitS371Dupa = FOUND()
|
|
DO TvLog WITH 'rand S(371) DUPA dublu-click: gasit=' + TRANSFORM(llGasitS371Dupa) + ' explicatie_tva=[' + ALLTRIM(NVL(explicatie_tva,'')) + '] ptva=' + TRANSFORM(NVL(ptva,0)) + ' id_jtva_coloana=' + TRANSFORM(NVL(id_jtva_coloana,0))
|
|
*-- corectia de cod (fara crash mid-flux) e in ambele moduri - astept acelasi rezultat corect
|
|
*-- imediat dupa dublu-click, indiferent de mod (PRE sau POST).
|
|
=Assert3('5b-rand S(371) gasit dupa dublu-click', IIF(llGasitS371Dupa,1,0), 1)
|
|
IF llGasitS371Dupa
|
|
=Assert3('5c-rand S/371 pastreaza ptva=11 dupa dublu-click', NVL(ptva,0), 11)
|
|
=AssertContains('5d-rand S/371 pastreaza explicatie_tva aleasa (contine "11%")', UPPER(NVL(explicatie_tva,'')), '11%')
|
|
ENDIF
|
|
|
|
DO HarnessStep WITH 2, 'dupa dublu-click Explicatie TVA (rand S/11%) - vezi log pentru eroarea VFP'
|
|
|
|
*-- timerul tmrSync ar re-sincroniza (armat de do_executa/aplica_explicatie_tva) - il declansez
|
|
*-- explicit, FARA TRY/CATCH, ca eroarea VFP (daca apare) sa ajunga la ON ERROR (ca la utilizator)
|
|
DO TvLog WITH '--- INAINTE de sincronizeaza() #2 (declansata de editarea explicatiei TVA, FARA TRY - eroarea trebuie sa ajunga la ON ERROR daca apare) ---'
|
|
goObj.sincronizeaza()
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH '--- DUPA sincronizeaza() #2 ---'
|
|
ENDIF
|
|
|
|
*========================= PAS 3b: coerenta S/T pe familia de explicatii dupa resincronizare =========================
|
|
IF llGasitS11
|
|
DO TvLog WITH 'familii dupa sincronizare #2: S(21)=' + TRANSFORM(CampRand('S',21,'id_jtva_coloana')) + ' T(21)=' + TRANSFORM(CampRand('T',21,'id_jtva_coloana')) + ' S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana'))
|
|
*-- randul T urmeaza familia randului S de aceeasi cota, indiferent din ce serie a ales
|
|
*-- utilizatorul explicatia pe randul S de 11%
|
|
=Assert3('8-rand S(21%) ramane in familia documentului (220/FO21B)', CampRand('S',21,'id_jtva_coloana'), 220)
|
|
=Assert3('8a-rand T(21%) aliniat la perechea S(21%) (221/FO21T)', CampRand('T',21,'id_jtva_coloana'), 221)
|
|
IF gcModTest == 'POST'
|
|
=Assert3('8b-rand S(11%) POST: 236/FO11B', CampRand('S',11,'id_jtva_coloana'), 236)
|
|
=Assert3('8c-rand T(11%) POST: aliniat la perechea S(11%) (237/FO11T)', CampRand('T',11,'id_jtva_coloana'), 237)
|
|
ELSE
|
|
*-- PRE: FO11B/FO11T lipsesc, randul S de 11% ramane pe explicatia de 21% mostenita, deci nu
|
|
*-- exista pereche de aliniat - randul T de 11% pastreaza explicatia aleasa de utilizator
|
|
=Assert3('8b-rand T(11%) PRE: ramane pe explicatia aleasa (233/CE11CTT)', CampRand('T',11,'id_jtva_coloana'), 233)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
*========================= PAS 4: explicatie aleasa MANUAL pe randul T - supravietuieste resincronizarii =========================
|
|
IF llGasitS11
|
|
SELECT introdc
|
|
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == 'T' AND ptva == 11
|
|
IF FOUND()
|
|
DO TvLog WITH 'rand T(11%) INAINTE de alegerea manuala: id_jtva_coloana=' + TRANSFORM(NVL(id_jtva_coloana,0)) + ' expl_manual=' + TRANSFORM(NVL(expl_manual,0))
|
|
gcTestTvaAlege = 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA'
|
|
STORE 0 TO gnButon
|
|
*-- dialogul de cautare se elibereaza singur la prima folosire (do_termin) - il reconstruiesc
|
|
goDlgTva11 = CREATEOBJECT('cauta_alfa_form', 'crsTva11cauta', '', 'Explicatie TVA,Cota TVA', ;
|
|
'denumire,cota_tva', .F., '', 1)
|
|
goDlgTva11.crs_cursor = 'crsTva11cauta'
|
|
goDlgTva11.cIdColumn = 'id_jtva_coloana'
|
|
goDlgTva11.WindowType = 0
|
|
goDlgTva11.Show()
|
|
DOEVENTS FORCE
|
|
TRY
|
|
goObj.grid1.cExplicatieTva.Text1.DblClick()
|
|
CATCH TO loExcDblT
|
|
DO TvLog WITH 'EROARE la DblClick explicatie TVA pe randul T: ' + TRANSFORM(loExcDblT.ErrorNo) + ' [' + loExcDblT.Message + '] in ' + loExcDblT.Procedure + ':' + TRANSFORM(loExcDblT.LineNo)
|
|
ENDTRY
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH 'rand T(11%) DUPA alegerea manuala: id_jtva_coloana=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana')) + ' expl_manual=' + TRANSFORM(CampRand('T',11,'expl_manual'))
|
|
=Assert3('9-rand T(11%) preia explicatia aleasa manual (233/CE11CTT)', CampRand('T',11,'id_jtva_coloana'), 233)
|
|
=Assert3('9a-rand T(11%) marcat ca ales manual (expl_manual=1)', CampRand('T',11,'expl_manual'), 1)
|
|
|
|
goObj.sincronizeaza()
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH 'familii dupa sincronizare #3: S(21)=' + TRANSFORM(CampRand('S',21,'id_jtva_coloana')) + ' T(21)=' + TRANSFORM(CampRand('T',21,'id_jtva_coloana')) + ' S(11)=' + TRANSFORM(CampRand('S',11,'id_jtva_coloana')) + ' T(11)=' + TRANSFORM(CampRand('T',11,'id_jtva_coloana'))
|
|
=Assert3('9b-rand T(11%) pastreaza explicatia manuala dupa resincronizare', CampRand('T',11,'id_jtva_coloana'), 233)
|
|
=Assert3('9c-rand T(21%) ramane aliniat la perechea S(21%) (221/FO21T)', CampRand('T',21,'id_jtva_coloana'), 221)
|
|
IF gcModTest == 'POST'
|
|
=Assert3('9d-rand S(11%) neatins de alegerea de pe randul T (236/FO11B)', CampRand('S',11,'id_jtva_coloana'), 236)
|
|
ENDIF
|
|
ELSE
|
|
DO TvLog WITH 'nu exista rand T cu ptva=11 - sar peste scenariul de eticheta manuala'
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DO HarnessStep WITH 3, 'dupa sincronizare #2 - vezi log pentru eroarea VFP si cmesajsync'
|
|
|
|
*========================= VERIFICARE SIMPTOM (a): eroare VFP "Operator/operand type mismatch" =========================
|
|
LOCAL lcLogIntreg
|
|
lcLogIntreg = UPPER(FILETOSTR(gcUILog))
|
|
LOCAL llGasitMismatch
|
|
llGasitMismatch = ('OPERATOR/OPERAND TYPE MISMATCH' $ lcLogIntreg)
|
|
*-- corectia de COD (Grid1.cSuma/cSumaVal.Text1.Valid) e in binar pentru AMBELE moduri - PRE si
|
|
*-- POST NU mai difera prin cod, doar prin nomenclatorul JTVA_COLOANE mock (confirmat de
|
|
*-- team-lead, 30/07/2026). Deci aceeasi asteptare (NU mai apare) in ambele moduri.
|
|
=Assert3('6-eroare "Operator/operand type mismatch" NU mai apare (corectie de cod, ambele moduri)', IIF(llGasitMismatch,0,1), 1)
|
|
|
|
*========================= VERIFICARE: finalizarea e blocata cat timp cmesajsync e nevid =========================
|
|
*-- inainte_de_do_termin() scrie in actactan si deschide Do Form verificare (modal real) daca
|
|
*-- trece de gardele de sincronizare - fara actactan/stub, GATHER-ul de acolo da eroare 13
|
|
*-- "Alias not found" INAINTE sa ajunga la vreun Return, deci valoarea implicita de mai jos
|
|
*-- (.T.) ar fi FALSA daca ar ramane neschimbata - de-aia NU o mai initializez optimist.
|
|
DO CreeazaActactan
|
|
*-- cerut explicit de team-lead: cmesajsync CHIAR INAINTE de apelul inainte_de_do_termin(),
|
|
*-- ca sa se stie sigur daca banda de sincronizare era deja goala sau nu in acest moment.
|
|
DO TvLog WITH 'cmesajsync INAINTE de inainte_de_do_termin() = [' + STRTRAN(STRTRAN(NVL(goObj.cmesajsync,''),CHR(13),' '),CHR(10),' | ') + ']'
|
|
gcMockUltimMesaj = ''
|
|
LOCAL llPoateTermina, llEroareTermin
|
|
llEroareTermin = .F.
|
|
TRY
|
|
llPoateTermina = goObj.inainte_de_do_termin()
|
|
CATCH TO loExcTermin
|
|
llEroareTermin = .T.
|
|
llPoateTermina = .NULL.
|
|
DO TvLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo)
|
|
ENDTRY
|
|
DOEVENTS FORCE
|
|
DO TvLog WITH 'inainte_de_do_termin() = ' + TRANSFORM(NVL(llPoateTermina,-1)) + ' (eroare=' + TRANSFORM(llEroareTermin) + '); cmesajsync=[' + STRTRAN(STRTRAN(NVL(goObj.cmesajsync,''),CHR(13),' '),CHR(10),' | ') + ']; mesaj amessagebox=[' + gcMockUltimMesaj + ']'
|
|
|
|
*-- PAS-CHEIE (confirmat de team-lead, 30/07/2026): dupa ce utilizatorul alege MANUAL o
|
|
*-- explicatie de 11% care CHIAR EXISTA in nomenclator (fie din aceeasi serie FO11B/236 -
|
|
*-- posibil DOAR in POST, fie dintr-o alta serie CE11CTB/232 - posibila in AMBELE moduri),
|
|
*-- finalizarea NU mai e blocata, INDIFERENT de mod - asta e chiar alegerea "manuala" pe care
|
|
*-- Marius a facut-o real ca sa ocoleasca lipsa FO11B. Blocarea PRE se verifica DOAR inainte
|
|
*-- de aceasta alegere (assert 4/4a/4b, imediat dupa sincronizare #1) - nu mai are sens sa
|
|
*-- astept blocare AICI (dupa editare), in niciun mod.
|
|
=Assert3('7-inainte_de_do_termin()=.T. dupa alegerea unei explicatii VALIDE (indiferent de mod)', IIF(!llEroareTermin AND llPoateTermina,1,0), 1)
|
|
=Assert3('7b-cmesajsync gol dupa editarea explicatiei TVA (indiferent de mod)', IIF(EMPTY(goObj.cmesajsync),1,0), 1)
|
|
|
|
DO TvLog WITH 'dump introdc FINAL:'
|
|
DO DumpIntrodc
|
|
|
|
DO TvLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS (mod=' + gcModTest + ')'
|
|
IF pnPass = pnAsserts
|
|
DO TvLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
|
|
ELSE
|
|
DO TvLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
|
|
ENDIF
|
|
|
|
DO HarnessStep WITH 4, 'final (mod=' + gcModTest + '): ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
|
|
DO HarnessDone WITH 'done'
|
|
|
|
CATCH TO loExc
|
|
DO TvLog 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 DumpIntrodc
|
|
LOCAL lnSel
|
|
lnSel = SELECT()
|
|
SELECT introdc
|
|
SET ORDER TO
|
|
SCAN FOR !DELETED()
|
|
DO TvLog WITH ' nract=' + TRANSFORM(NVL(nract,0)) + ' tip=' + tip_rand + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ;
|
|
' ptva=' + TRANSFORM(NVL(ptva,0)) + ' explicatie_tva=[' + ALLTRIM(NVL(explicatie_tva,'')) + ']' + ;
|
|
' id_jtva_coloana=' + TRANSFORM(NVL(id_jtva_coloana,0)) + ;
|
|
' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']'
|
|
ENDSCAN
|
|
SELECT introdc
|
|
SET ORDER TO ord_doc
|
|
SELECT (lnSel)
|
|
ENDPROC
|
|
|
|
PROCEDURE CreeazaRulTemp
|
|
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), expl_manual N(1), ;
|
|
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
|
|
ENDPROC
|
|
|
|
PROCEDURE CreeazaActactan
|
|
*-- structura minima ceruta de GATHER-urile din import_nota.inainte_de_do_termin() (Scan For
|
|
*-- suma<>0 Or se_scrie=1 / Append Blank / Gather Name poAct + Gather Name loFact Fields ...) -
|
|
*-- acelasi tipar ca test_e2e_dvi_ron_discount.prg (CreeazaActactan), impreuna cu stub_verificare
|
|
*-- (SET PATH) si mock_oscrie_in_fisiere.prg, ca inainte_de_do_termin() sa ruleze pana la capat
|
|
*-- (Do Form verificare e modal real, WindowType=1 - fara stub ar bloca headless la nesfarsit).
|
|
IF USED('actactan')
|
|
USE IN ('actactan')
|
|
ENDIF
|
|
CREATE CURSOR actactan ( ;
|
|
id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ;
|
|
partc C(100), id_partc N(14), partd C(100), id_partd N(14), ;
|
|
suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ;
|
|
scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ;
|
|
id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ;
|
|
tva_incasare N(1), id_set N(14), id_gestin N(14))
|
|
ENDPROC
|
|
|
|
*-- valoarea numerica a campului tcCamp de pe randul (tcTipRand, tnCota) al documentului gcDocKey1;
|
|
*-- -1 daca randul nu exista. Pozitia curenta in introdc se restaureaza la iesire.
|
|
FUNCTION CampRand
|
|
LPARAMETERS tcTipRand, tnCota, tcCamp
|
|
LOCAL lnSel, lnRec, lnVal
|
|
lnSel = SELECT()
|
|
SELECT introdc
|
|
lnRec = IIF(EOF() OR BOF(), 0, RECNO())
|
|
LOCATE FOR ALLTRIM(NVL(doc_key,'')) == gcDocKey1 AND tip_rand == tcTipRand AND ptva == tnCota
|
|
lnVal = IIF(FOUND(), NVL(EVALUATE('introdc.' + tcCamp), 0), -1)
|
|
IF BETWEEN(lnRec, 1, RECCOUNT('introdc'))
|
|
GO lnRec
|
|
ENDIF
|
|
SELECT (lnSel)
|
|
RETURN lnVal
|
|
ENDFUNC
|
|
|
|
FUNCTION RECCOUNT_ACTIVE
|
|
LPARAMETERS tcAlias
|
|
LOCAL lnSel, lnCnt
|
|
lnSel = SELECT()
|
|
SELECT (tcAlias)
|
|
COUNT TO lnCnt FOR !DELETED()
|
|
SELECT (lnSel)
|
|
RETURN lnCnt
|
|
ENDFUNC
|
|
|
|
PROCEDURE Assert3
|
|
LPARAMETERS tcLabel, tuActual, tuExpected
|
|
pnAsserts = pnAsserts + 1
|
|
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
|
|
pnPass = pnPass + 1
|
|
DO TvLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
|
|
ELSE
|
|
DO TvLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE AssertContains
|
|
LPARAMETERS tcLabel, tcHaystackUpper, tcNeedleUpper
|
|
pnAsserts = pnAsserts + 1
|
|
IF UPPER(tcNeedleUpper) $ UPPER(NVL(tcHaystackUpper,''))
|
|
pnPass = pnPass + 1
|
|
DO TvLog WITH ' PASS ' + tcLabel
|
|
ELSE
|
|
DO TvLog WITH ' FAIL ' + tcLabel + ' (nu contine [' + tcNeedleUpper + '] in [' + tcHaystackUpper + '])'
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE AssertContainsOr
|
|
LPARAMETERS tcLabel, tcHaystackUpper, tcNeedle1, tcNeedle2
|
|
pnAsserts = pnAsserts + 1
|
|
IF UPPER(tcNeedle1) $ UPPER(NVL(tcHaystackUpper,'')) OR UPPER(tcNeedle2) $ UPPER(NVL(tcHaystackUpper,''))
|
|
pnPass = pnPass + 1
|
|
DO TvLog WITH ' PASS ' + tcLabel
|
|
ELSE
|
|
DO TvLog WITH ' FAIL ' + tcLabel + ' (nu contine [' + tcNeedle1 + '] nici [' + tcNeedle2 + '] in [' + tcHaystackUpper + '])'
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROCEDURE TvErr
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO TvLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE TvLog
|
|
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
|
|
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
|
|
DO CreeazaJtvaColoaneView WITH m.tcCursor
|
|
RETURN 1
|
|
ENDIF
|
|
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
|
|
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
|
|
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
|
|
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
|
|
RETURN 1
|
|
ENDIF
|
|
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
|
|
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
|
|
INSERT INTO (m.tcCursor) VALUES ('', '')
|
|
RETURN 1
|
|
ENDIF
|
|
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
|
|
CREATE CURSOR (m.tcCursor) (acont C(20))
|
|
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
|
|
RETURN 1
|
|
ENDIF
|
|
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
|
|
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
|
|
INSERT INTO (m.tcCursor) VALUES ('371', '4')
|
|
RETURN 1
|
|
ENDIF
|
|
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
|
|
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
|
|
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
|
|
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
|
|
RETURN 1
|
|
ENDIF
|
|
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
|
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))
|
|
INDEX ON id_jtva_coloana TAG id_jtva
|
|
ELSE
|
|
CREATE CURSOR (m.tcCursor) (id_temp N(1))
|
|
ENDIF
|
|
ENDIF
|
|
RETURN .T.
|
|
ENDPROC
|
|
PROCEDURE oSelect2Value
|
|
LPARAMETERS tcSql, toValue
|
|
toValue = ''
|
|
RETURN 1
|
|
ENDPROC
|
|
PROCEDURE oReset
|
|
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 (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)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
|
VALUES (226, 'ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE21CTB', 21, 227, 1, 5, 300704)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
|
VALUES (227, 'TVA ACH. BUNURI CE. 21% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE21CTT', 21, 1, 6, 300704)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
|
VALUES (232, 'ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE11CTB', 11, 233, 1, 7, 300705)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
|
VALUES (233, 'TVA ACH. BUNURI CE. 11% FURNIZOR INREGISTRAT TVA', 1, 0, 'CE11CTT', 11, 1, 8, 300705)
|
|
IF gcModTest == 'POST'
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
|
|
VALUES (236, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 237, 1, 39, 301205)
|
|
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
|
|
VALUES (237, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 40, 301205)
|
|
ENDIF
|
|
ENDPROC
|