Initial: flux text FoxBin2Prg (git urmareste .??2 in-arbore, binarele VFP git-ignored)
Include si sistemul de depanare/testare headless din Teste\ (harness UI cu capturi, verificare de sintaxa prin compilare, wrappere text<->binar) si docs\depanare_testare_flora2roa.md.
This commit is contained in:
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# SVN ramane autoritatea pentru line endings (rulaj paralel svn+git).
|
||||||
|
# Dezactiveaza orice normalizare CRLF/LF facuta de git, ca sa nu mai apara
|
||||||
|
# "modificari" fantoma dupa fiecare svn update/checkout care doar atinge mtime-ul.
|
||||||
|
* -text
|
||||||
104
.gitignore
vendored
Normal file
104
.gitignore
vendored
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# Flux text FoxBin2Prg: git urmareste DOAR versiunile text .??2 (in arbore),
|
||||||
|
# nu binarele VFP. Binarele convertibile si indecsii regenerabili se ignora.
|
||||||
|
# SVN ramane sursa de adevar pentru binare (via global-ignores pe .??2).
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# --- Binare VFP convertibile in text .??2 (ambele forme de caz) ---
|
||||||
|
*.vcx
|
||||||
|
*.VCX
|
||||||
|
*.vct
|
||||||
|
*.VCT
|
||||||
|
*.scx
|
||||||
|
*.SCX
|
||||||
|
*.sct
|
||||||
|
*.SCT
|
||||||
|
*.frx
|
||||||
|
*.FRX
|
||||||
|
*.frt
|
||||||
|
*.FRT
|
||||||
|
*.mnx
|
||||||
|
*.MNX
|
||||||
|
*.mnt
|
||||||
|
*.MNT
|
||||||
|
*.lbx
|
||||||
|
*.LBX
|
||||||
|
*.lbt
|
||||||
|
*.LBT
|
||||||
|
*.pjx
|
||||||
|
*.PJX
|
||||||
|
*.pjt
|
||||||
|
*.PJT
|
||||||
|
*.dbc
|
||||||
|
*.DBC
|
||||||
|
*.dct
|
||||||
|
*.DCT
|
||||||
|
|
||||||
|
# --- Indecsi regenerabili (nu se transporta in .db2/.dc2) ---
|
||||||
|
*.cdx
|
||||||
|
*.CDX
|
||||||
|
*.dcx
|
||||||
|
*.DCX
|
||||||
|
|
||||||
|
# --- Fisiere generate/compilate Visual FoxPro ---
|
||||||
|
*.fxp
|
||||||
|
*.FXP
|
||||||
|
*.mpr
|
||||||
|
*.MPR
|
||||||
|
*.mpx
|
||||||
|
*.MPX
|
||||||
|
*.vcr
|
||||||
|
*.VCR
|
||||||
|
*.src
|
||||||
|
|
||||||
|
# --- Backup-uri si fisiere temporare create de editorul VFP ---
|
||||||
|
*.bak
|
||||||
|
*.BAK
|
||||||
|
*.tmp
|
||||||
|
*.TMP
|
||||||
|
*.err
|
||||||
|
*.ERR
|
||||||
|
*.Stats
|
||||||
|
*.stackdump
|
||||||
|
|
||||||
|
# --- Stare locala / specifica masinii, nu proiectului ---
|
||||||
|
# Raman urmarite (sunt si in SVN, sunt dependente de rulare): settings.ini,
|
||||||
|
# settings.flora.ini, app.ico, vfpconnection.fll, vfpencryption.fll
|
||||||
|
FOXUSER.DBF
|
||||||
|
FOXUSER.FPT
|
||||||
|
flora2roa.exe
|
||||||
|
update_log.txt
|
||||||
|
log/
|
||||||
|
log.txt
|
||||||
|
LOG.txt
|
||||||
|
|
||||||
|
# --- Date de intrare pentru import: doar exemplele de referinta (cele din SVN) ---
|
||||||
|
# restul (~900 fisiere, ~80 MB) sunt date locale de lucru, nu sursa
|
||||||
|
EXEMPLE/*
|
||||||
|
!EXEMPLE/flora.txt
|
||||||
|
!EXEMPLE/coresp_parteneri.csv
|
||||||
|
!EXEMPLE/Monografii.xlsx
|
||||||
|
!EXEMPLE/hotel/
|
||||||
|
EXEMPLE/hotel/*
|
||||||
|
!EXEMPLE/hotel/bts_detalii_facturi_rep_20240916.xml
|
||||||
|
!EXEMPLE/restaurant/
|
||||||
|
EXEMPLE/restaurant/*
|
||||||
|
!EXEMPLE/restaurant/Iesiri_20240718.xml
|
||||||
|
!EXEMPLE/restaurant/Intrari_20240426.xml
|
||||||
|
!EXEMPLE/restaurant/Vanzari_20240909.xml
|
||||||
|
|
||||||
|
# --- Artefacte ale testelor headless (Teste\ruleaza_teste.ps1) ---
|
||||||
|
Teste/uisync/
|
||||||
|
Teste/screenshots/
|
||||||
|
Teste/_erori_test.txt
|
||||||
|
Teste/*_log.txt
|
||||||
|
|
||||||
|
# --- Cache text extern (inlocuit de fluxul in-arbore .??2) ---
|
||||||
|
_textcache/
|
||||||
|
|
||||||
|
# --- Subversion (working copy paralela) ---
|
||||||
|
.svn/
|
||||||
|
|
||||||
|
docs/diff_*.patch
|
||||||
|
docs/local/
|
||||||
|
.gstack/
|
||||||
10
ALTE/azi.sql
Normal file
10
ALTE/azi.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
SELECT SUM(SUMA) AS SUMA from imp_import_documente where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6
|
||||||
|
AND SUBSTR(SCD, 1,3) = '401';
|
||||||
|
SELECT SUM(SUMA) AS SUMA from imp_import_documente where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6
|
||||||
|
AND SUBSTR(SCC, 1,3) = '401';
|
||||||
|
|
||||||
|
SELECT sum(t.suma) as suma, dat_document from imp_import_documente t where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6 AND SUBSTR(SCD, 1,3) = '401' group by dat_document order by dat_DOCUMENT;
|
||||||
|
SELECT sum(t.suma) as suma, dataact from ACT t where AN=2024 AND LUNA = 6 AND SUBSTR(SCD, 1,3) = '401' AND STERS= 0 group by dataact order by dataact;
|
||||||
|
|
||||||
|
select t.*,rowid from imp_import_documente t where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6 AND SUBSTR(SCD, 1,3) = '401' AND dat_document = to_date('04062024', 'ddmmyyyy')order by dat_document, suma;
|
||||||
|
select t.*,rowid from act t where AN=2024 AND LUNA = 6 AND SUBSTR(SCD, 1,3) = '401' AND STERS= 0 AND dataact = to_date('04062024', 'ddmmyyyy')order by dataact, NRACT, suma;
|
||||||
32
ALTE/documente_duble.sql
Normal file
32
ALTE/documente_duble.sql
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
--select t.*,rowid from act t where an=2024 and luna = 6 order by dataact, nract, cod;
|
||||||
|
|
||||||
|
/*select t.*,rowid from act t where an=2024 and luna = 3 and cod in (
|
||||||
|
select cod from
|
||||||
|
(with select_data as
|
||||||
|
(select distinct a.cod, a.dataact, a.nract, b.cod as codb from
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 2 and sters = 0 and explicatia4 = 'IMPORT BIZ') a join
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 2 and sters = 0 and explicatia4 is null) b on (a.dataact = b.dataact and a.nract = b.nract and a.suma = b.suma)
|
||||||
|
)
|
||||||
|
select cod from select_data
|
||||||
|
union
|
||||||
|
select codb from select_data))
|
||||||
|
order by dataact, nract, cod;*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
select an, luna, nract, dataact, scd, ascd, scc, ascc, suma, explicatia4, sters, id_utils, dataoras, cod from
|
||||||
|
(select an, luna, nract, dataact, scd, ascd, scc, ascc, suma, explicatia4, sters, id_utils, dataoras, cod from act
|
||||||
|
union
|
||||||
|
select an, luna, nract, dataact, scd, ascd, scc, ascc, suma, explicatia4, 0 as sters, 0 as id_utils, null as dataoras, cod from act_imp_2024)
|
||||||
|
where an=2024 and luna = 10 and cod in (
|
||||||
|
select cod from
|
||||||
|
(with select_data as
|
||||||
|
(select distinct a.cod, a.dataact, a.nract, b.cod as codb from
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act_imp_2024 where an=2024 and luna = 10 ) a join
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 10 and sters = 0 and explicatia4 is null) b on (a.dataact = b.dataact and a.nract = b.nract and a.suma = b.suma)
|
||||||
|
)
|
||||||
|
select cod from select_data
|
||||||
|
union
|
||||||
|
select codb from select_data))
|
||||||
|
order by dataact, nract, cod, suma;
|
||||||
|
|
||||||
406
ALTE/oracle-import-script.sql
Normal file
406
ALTE/oracle-import-script.sql
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
-- SQL SERVER
|
||||||
|
-- DROP VIEW dbo.FACC_V_LIST_REGISTRU_JURNAL_X;
|
||||||
|
CREATE VIEW dbo.FACC_V_LIST_REGISTRU_JURNAL_X AS
|
||||||
|
SELECT
|
||||||
|
TBL_REGISTRU.ID_DOCUMENT,
|
||||||
|
TBL_REGISTRU.DAT_DOCUMENT,
|
||||||
|
TBL_REGISTRU.DAT_SCADENT,
|
||||||
|
TBL_REGISTRU.COD_NUMBER,
|
||||||
|
TBL_REGISTRU.TIP_DOCUMENT,
|
||||||
|
TBL_REGISTRU.ID_PARTNER,
|
||||||
|
TBL_REGISTRU.PARTNER_NAME,
|
||||||
|
TBL_REGISTRU.COD_FISCAL,
|
||||||
|
TBL_REGISTRU.COD_CNP,
|
||||||
|
TBL_REGISTRU.EXPLICATII,
|
||||||
|
TBL_REGISTRU.CONT_DEBIT,
|
||||||
|
TBL_REGISTRU.CONT_CREDIT,
|
||||||
|
SUM(TBL_REGISTRU.DEC_VALUE) AS DEC_VALUE
|
||||||
|
FROM
|
||||||
|
(SELECT
|
||||||
|
TOP (100) PERCENT
|
||||||
|
dbo.FACC_T_CONTARI.ID_DOCUMENT,
|
||||||
|
dbo.FACC_T_CONTARI.DAT_DOCUMENT,
|
||||||
|
dbo.FACC_T_DOCUMENTS.DAT_SCADENT,
|
||||||
|
dbo.FACC_V_ALL_DOCUMENTS.COD_NUMBER,
|
||||||
|
dbo._FACC_GET_DOCUMENT_TYPE_NAME(dbo.FACC_T_CONTARI.ID_DOCUMENT) AS TIP_DOCUMENT,
|
||||||
|
dbo.NCL_V_PARTNERS_NAMES.ID_PARTNER,
|
||||||
|
dbo.NCL_V_PARTNERS_NAMES.PARTNER_NAME,
|
||||||
|
dbo.NCL_T_PARTNERS.COD_FISCAL,
|
||||||
|
dbo.NCL_T_PARTNERS.COD_CNP,
|
||||||
|
dbo.FACC_T_CONTARI.EXPLICATII,
|
||||||
|
dbo.FACC_T_CONTARI.CONT_DEBIT,
|
||||||
|
dbo.FACC_T_CONTARI.CONT_CREDIT,
|
||||||
|
dbo.FACC_T_CONTARI.DEC_VAL AS DEC_VALUE
|
||||||
|
FROM
|
||||||
|
dbo.FACC_T_CONTARI
|
||||||
|
INNER JOIN dbo.FACC_V_ALL_DOCUMENTS ON dbo.FACC_T_CONTARI.ID_DOCUMENT = dbo.FACC_V_ALL_DOCUMENTS.ID_DOCUMENT
|
||||||
|
LEFT OUTER JOIN dbo.NCL_V_PARTNERS_NAMES ON dbo.FACC_V_ALL_DOCUMENTS.ID_PARTNER = dbo.NCL_V_PARTNERS_NAMES.ID_PARTNER
|
||||||
|
LEFT OUTER JOIN dbo.NCL_T_PARTNERS ON dbo.FACC_V_ALL_DOCUMENTS.ID_PARTNER = dbo.NCL_T_PARTNERS.ID_PARTNER
|
||||||
|
LEFT OUTER JOIN dbo.FACC_T_DOCUMENTS on dbo.FACC_T_CONTARI.ID_DOCUMENT = dbo.FACC_T_DOCUMENTS.ID_DOCUMENT
|
||||||
|
WHERE
|
||||||
|
(dbo.FACC_T_CONTARI.DEC_VAL <> 0)
|
||||||
|
) AS TBL_REGISTRU
|
||||||
|
INNER JOIN dbo.NCL_T_ACCOUNTS ON TBL_REGISTRU.CONT_DEBIT = dbo.NCL_T_ACCOUNTS.COD_ACCOUNT
|
||||||
|
INNER JOIN dbo.NCL_T_ACCOUNTS AS NCL_T_ACCOUNTS_1 ON TBL_REGISTRU.CONT_CREDIT = NCL_T_ACCOUNTS_1.COD_ACCOUNT
|
||||||
|
GROUP BY
|
||||||
|
TBL_REGISTRU.ID_DOCUMENT,
|
||||||
|
TBL_REGISTRU.DAT_DOCUMENT,
|
||||||
|
TBL_REGISTRU.DAT_SCADENT,
|
||||||
|
TBL_REGISTRU.COD_NUMBER,
|
||||||
|
TBL_REGISTRU.TIP_DOCUMENT,
|
||||||
|
TBL_REGISTRU.ID_PARTNER,
|
||||||
|
TBL_REGISTRU.PARTNER_NAME,
|
||||||
|
TBL_REGISTRU.COD_FISCAL,
|
||||||
|
TBL_REGISTRU.COD_CNP,
|
||||||
|
TBL_REGISTRU.EXPLICATII,
|
||||||
|
TBL_REGISTRU.CONT_DEBIT,
|
||||||
|
TBL_REGISTRU.CONT_CREDIT
|
||||||
|
HAVING
|
||||||
|
(SUM(TBL_REGISTRU.DEC_VALUE) <> 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE VIEW dbo.FACC_V_LIST_REGISTRU_JURNAL_Y AS
|
||||||
|
SELECT
|
||||||
|
r.ID_DOCUMENT,r.DAT_DOCUMENT,r.DAT_SCADENT,r.COD_NUMBER,r.TIP_DOCUMENT,r.ID_PARTNER,r.PARTNER_NAME,r.COD_FISCAL,r.COD_CNP,r.EXPLICATII,r.CONT_DEBIT,r.CONT_CREDIT,r.DEC_VALUE,
|
||||||
|
l.ID_IN as ID_DOCP, l.VAL_LEI, COALESCE(l.val_lei, r.dec_value) as suma
|
||||||
|
FROM [mybiz].[dbo].[FACC_V_LIST_REGISTRU_JURNAL_X] r
|
||||||
|
left outer join [mybiz].[dbo].[PRT_T_LEGATURI] l on r.id_document = l.ID_OUT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE VIEW dbo.FACC_V_LIST_REGISTRU_JURNAL_Y_2024 AS
|
||||||
|
SELECT [ID_DOCUMENT]
|
||||||
|
,[DAT_DOCUMENT]
|
||||||
|
,[DAT_SCADENT]
|
||||||
|
,[COD_NUMBER]
|
||||||
|
,[TIP_DOCUMENT]
|
||||||
|
,[ID_PARTNER]
|
||||||
|
,[PARTNER_NAME]
|
||||||
|
,[COD_FISCAL]
|
||||||
|
,[COD_CNP]
|
||||||
|
,[EXPLICATII]
|
||||||
|
,[CONT_DEBIT]
|
||||||
|
,[CONT_CREDIT]
|
||||||
|
,[DEC_VALUE]
|
||||||
|
,[ID_DOCP]
|
||||||
|
,[VAL_LEI]
|
||||||
|
,[suma]
|
||||||
|
FROM [mybiz].[dbo].[FACC_V_LIST_REGISTRU_JURNAL_Y]
|
||||||
|
where dat_document >= '2024-01-01'
|
||||||
|
|
||||||
|
|
||||||
|
/****** Script for SelectTopNRows command from SSMS ******/
|
||||||
|
SELECT [ID_DOCUMENT]
|
||||||
|
,[DAT_DOCUMENT]
|
||||||
|
,[DAT_SCADENT]
|
||||||
|
,[COD_NUMBER]
|
||||||
|
,[TIP_DOCUMENT]
|
||||||
|
,[ID_PARTNER]
|
||||||
|
,[PARTNER_NAME]
|
||||||
|
,[COD_FISCAL]
|
||||||
|
,[COD_CNP]
|
||||||
|
,[EXPLICATII]
|
||||||
|
,[CONT_DEBIT]
|
||||||
|
,[CONT_CREDIT]
|
||||||
|
,[DEC_VALUE]
|
||||||
|
,[ID_DOCP]
|
||||||
|
,[VAL_LEI]
|
||||||
|
,[suma]
|
||||||
|
FROM [mybiz].[dbo].FACC_V_LIST_REGISTRU_JURNAL_Y_2024
|
||||||
|
order by dat_document desc
|
||||||
|
|
||||||
|
-------------------------------------
|
||||||
|
CREATE TABLE EXT_IMPORT_DOCUMENTE (
|
||||||
|
ID_DOCUMENT VARCHAR2(100),
|
||||||
|
DAT_DOCUMENT VARCHAR2(100),
|
||||||
|
DAT_SCADENT VARCHAR2(100),
|
||||||
|
COD_NUMBER VARCHAR2(100),
|
||||||
|
TIP_DOCUMENT VARCHAR2(100),
|
||||||
|
ID_PARTNER VARCHAR2(100),
|
||||||
|
PARTNER_NAME VARCHAR2(200),
|
||||||
|
COD_FISCAL VARCHAR2(100),
|
||||||
|
COD_CNP VARCHAR2(100),
|
||||||
|
EXPLICATII VARCHAR2(500),
|
||||||
|
CONT_DEBIT VARCHAR2(100),
|
||||||
|
CONT_CREDIT VARCHAR2(100),
|
||||||
|
DEC_VALUE VARCHAR2(100),
|
||||||
|
ID_DOCP VARCHAR2(100),
|
||||||
|
VAL_LEI VARCHAR2(100),
|
||||||
|
SUMA VARCHAR2(100)
|
||||||
|
)
|
||||||
|
ORGANIZATION EXTERNAL (
|
||||||
|
TYPE ORACLE_LOADER
|
||||||
|
DEFAULT DIRECTORY DMPDIR
|
||||||
|
ACCESS PARAMETERS (
|
||||||
|
RECORDS DELIMITED BY NEWLINE
|
||||||
|
SKIP 1
|
||||||
|
FIELDS TERMINATED BY ','
|
||||||
|
OPTIONALLY ENCLOSED BY '"'
|
||||||
|
MISSING FIELD VALUES ARE NULL
|
||||||
|
)
|
||||||
|
LOCATION ('registru_jurnal_2024.csv')
|
||||||
|
)
|
||||||
|
REJECT LIMIT 0;
|
||||||
|
|
||||||
|
-- Verificarea datelor brute
|
||||||
|
SELECT * FROM EXT_IMPORT_DOCUMENTE WHERE ROWNUM <= 10;
|
||||||
|
|
||||||
|
-- Crearea tabelului final cu conversie flexibilă și gestionarea erorilor
|
||||||
|
create table IMP_IMPORT_DOCUMENTE AS
|
||||||
|
SELECT
|
||||||
|
TO_NUMBER(REGEXP_SUBSTR(ID_DOCUMENT, '\d+')) AS ID_DOCUMENT,
|
||||||
|
TO_DATE(SUBSTR(REPLACE(DAT_DOCUMENT, 'NULL', ''),1,10), 'YYYY-MM-DD') AS DAT_DOCUMENT,
|
||||||
|
TO_DATE(SUBSTR(REPLACE(DAT_SCADENT, 'NULL', ''),1,10), 'YYYY-MM-DD') AS DAT_SCADENT,
|
||||||
|
REGEXP_SUBSTR(COD_NUMBER, '\d+') as COD_NUMBER,
|
||||||
|
REPLACE(TIP_DOCUMENT, 'NULL', '') AS TIP_DOCUMENT,
|
||||||
|
TO_NUMBER(REGEXP_SUBSTR(ID_PARTNER, '\d+')) AS ID_PARTNER,
|
||||||
|
REPLACE(PARTNER_NAME, 'NULL', '') AS PARTNER_NAME,
|
||||||
|
REPLACE(COD_FISCAL, 'NULL', '') AS COD_FISCAL,
|
||||||
|
REPLACE(COD_CNP, 'NULL', '') AS COD_CNP,
|
||||||
|
REPLACE(EXPLICATII, 'NULL', '') AS EXPLICATII,
|
||||||
|
REPLACE(CONT_DEBIT, 'NULL', '') AS CONT_DEBIT,
|
||||||
|
REPLACE(CONT_CREDIT, 'NULL', '') AS CONT_CREDIT,
|
||||||
|
TO_NUMBER(REPLACE(DEC_VALUE, 'NULL', '0'), '999999999.99') AS DEC_VALUE,
|
||||||
|
TO_NUMBER(REGEXP_SUBSTR(ID_DOCP, '\d+')) AS ID_DOCP,
|
||||||
|
TO_NUMBER(REPLACE(VAL_LEI,'NULL', '0'), '999999999.99') AS VAL_LEI,
|
||||||
|
TO_NUMBER(REPLACE(SUMA, 'NULL', '0'), '999999999.99') AS SUMA
|
||||||
|
FROM EXT_IMPORT_DOCUMENTE;
|
||||||
|
|
||||||
|
-- Verificarea datelor convertite
|
||||||
|
SELECT * FROM IMPORT_DOCUMENTE WHERE ROWNUM <= 10;
|
||||||
|
|
||||||
|
-- Verificarea rândurilor cu probleme la conversia datei
|
||||||
|
SELECT ID_DOCUMENT, DAT_DOCUMENT, DAT_SCADENT
|
||||||
|
FROM IMP_IMPORT_DOCUMENTE
|
||||||
|
WHERE DAT_DOCUMENT IS NULL OR DAT_SCADENT IS NULL;
|
||||||
|
|
||||||
|
ALTER TABLE IMP_IMPORT_DOCUMENTE ADD ID_PART NUMBER(20) NULL;
|
||||||
|
alter table IMP_IMPORT_DOCUMENTE add scd varchar2(4);
|
||||||
|
alter table IMP_IMPORT_DOCUMENTE add ascd varchar2(4);
|
||||||
|
alter table IMP_IMPORT_DOCUMENTE add scc varchar2(4);
|
||||||
|
alter table IMP_IMPORT_DOCUMENTE add ascc varchar2(4);
|
||||||
|
alter table IMP_IMPORT_DOCUMENTE add cod number(20);
|
||||||
|
alter table IMP_IMPORT_DOCUMENTE add id_fdoc number(5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Created on 10/29/2024 by MMARI
|
||||||
|
declare
|
||||||
|
lnIdPart NOM_PARTENERI.ID_PART%TYPE := 0;
|
||||||
|
begin
|
||||||
|
-- Test statements here
|
||||||
|
for item in (select distinct id_partner, partner_name, cod_fiscal, cod_cnp from imp_import_documente where cod_fiscal is not null) loop
|
||||||
|
select max(id_part) into lnIdPart from nom_parteneri where sters = 0 and trim(regexp_replace(cod_fiscal, '[^0-9]', '')) = item.cod_fiscal;
|
||||||
|
if lnIdPart is null then
|
||||||
|
PACK_DEF.adauga_partener(tcDenumire => item.partner_name,
|
||||||
|
tcNume => item.partner_name,
|
||||||
|
tcPrenume => '',
|
||||||
|
tcCod_fiscal => item.cod_fiscal,
|
||||||
|
tcReg_comert => '',
|
||||||
|
tnId_loc => NULL,
|
||||||
|
tnId_categorie_entitate => NULL,
|
||||||
|
tcPrefix => NULL,
|
||||||
|
tcSufix => NULL,
|
||||||
|
tnTip_persoana => 1,
|
||||||
|
tcBanca => NULL,
|
||||||
|
tcCont_banca => NULL,
|
||||||
|
tnInactiv => 0,
|
||||||
|
tcMotiv_inactiv => NULL,
|
||||||
|
tnId_util => -3,
|
||||||
|
tcSir_id_tipPart => '16;',
|
||||||
|
tnId_Part => lnIdPart);
|
||||||
|
|
||||||
|
update nom_parteneri set zona = 'IMPORT' where id_part = lnIdPart;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
update imp_import_documente set id_part = lnIdPart where id_partner = item.id_partner;
|
||||||
|
end loop;
|
||||||
|
|
||||||
|
end;
|
||||||
|
/
|
||||||
|
|
||||||
|
UPDATE IMP_IMPORT_DOCUMENTE
|
||||||
|
SET SCD = CASE
|
||||||
|
WHEN INSTR(cont_debit, '.') > 0 THEN
|
||||||
|
SUBSTR(cont_debit, 1, INSTR(cont_debit, '.') - 1)
|
||||||
|
ELSE
|
||||||
|
cont_debit
|
||||||
|
END,
|
||||||
|
ascd = CASE
|
||||||
|
WHEN INSTR(cont_debit, '.') > 0 THEN
|
||||||
|
REPLACE(SUBSTR(cont_debit, INSTR(cont_debit, '.') + 1),
|
||||||
|
'.',
|
||||||
|
'')
|
||||||
|
ELSE
|
||||||
|
null
|
||||||
|
END,
|
||||||
|
scc = CASE
|
||||||
|
WHEN INSTR(cont_credit, '.') > 0 THEN
|
||||||
|
SUBSTR(cont_credit, 1, INSTR(cont_credit, '.') - 1)
|
||||||
|
ELSE
|
||||||
|
cont_credit
|
||||||
|
END,
|
||||||
|
ascc = CASE
|
||||||
|
WHEN INSTR(cont_credit, '.') > 0 THEN
|
||||||
|
REPLACE(SUBSTR(cont_credit, INSTR(cont_credit, '.') + 1),
|
||||||
|
'.',
|
||||||
|
'')
|
||||||
|
ELSE
|
||||||
|
null
|
||||||
|
END;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
FOR ITEM IN (SELECT 50 as id_fdoc, 'Amortizare' as fel_document
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 25, 'Chitanta Beneficiar Lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 25, 'Chitanta Furnizor Lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 15, 'Consum'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 35, 'Dispozitie de incasare / plata Lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 40, 'Extras de cont Lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 42, 'Factura Client'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 42, 'Factura Furnizor'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 50, 'Import Aplicatii Fidelio'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 50, 'Import Aplicatii Micros'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 50, 'Inchidere Venituri si Cheltuieli'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 48, 'Monetar lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 50, 'Nota Salarizare'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 50, 'Note contabile diverse'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 56, 'Ordin de plata beneficiar Lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 56, 'Ordin de plata furnizor Lei'
|
||||||
|
FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 55, 'Transfer'
|
||||||
|
FROM DUAL) LOOP
|
||||||
|
UPDATE IMP_IMPORT_DOCUMENTE
|
||||||
|
SET ID_FDOC = ITEM.ID_FDOC
|
||||||
|
WHERE UPPER(TRIM(replace(tip_document,'-->',''))) = UPPER(ITEM.FEL_DOCUMENT);
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
insert into act (an, luna, dataireg, cod, id_fact, dataact, datascad, nract, id_fdoc, explicatia, scd, ascd, scc, ascc, suma, id_Factd, id_factc, id_partd, id_partc, id_util, dataora, explicatia4)
|
||||||
|
select extract(year from dat_document) as an, extract(month from dat_document) as luna, dat_document as dataireg, id_document as cod, id_document as id_fact, dat_document as dataact, dat_scadent as datascad, to_number(nvl(cod_number,to_char(dat_document, 'yyyymmdd'))) as nract,
|
||||||
|
id_fdoc, explicatii as explicatia, scd, ascd, scc, ascc, suma,
|
||||||
|
case when scd in ('401','404','419','462', '408') then nvl(id_docp,0) else 0 end as id_factd,
|
||||||
|
case when scc in ('4111','409','4091', '4092', '4093', '4094','461', '418') then nvl(id_docp,0) else 0 end as id_factc,
|
||||||
|
case when scd in ('401','404','419','462', '408','4111','409','4091', '4092', '4093', '4094','461', '418') then nvl(id_part,0) else 0 end as id_partd,
|
||||||
|
case when scc in ('401','404','419','462', '408','4111','409','4091', '4092', '4093', '4094','461', '418') then nvl(id_part,0) else 0 end as id_partc,
|
||||||
|
-3 as id_util, to_date('29102024','ddmmyyyy') as dataora, 'IMPORT BIZ' as explicatia4
|
||||||
|
from imp_import_documente where extract(year from dat_document) = 2024 and extract(month from dat_document) between 1 and 5 order by dat_document, cod_number;
|
||||||
|
|
||||||
|
update act set id_jtva_coloana = 113 where an=2024 and scc = '401' and id_jtva_coloana is null and explicatia4 = 'IMPORT BIZ';
|
||||||
|
|
||||||
|
----------------------------------
|
||||||
|
-- DOCUMENTE DUBLE DIN IMPORTBIZ SI ROA
|
||||||
|
--select t.*,rowid from act t where an=2024 and luna = 6 order by dataact, nract, cod;
|
||||||
|
|
||||||
|
select an, luna, nract, dataact, scd, ascd, scc, ascc, suma, explicatia4, sters, id_utils, dataoras, cod from
|
||||||
|
(select an, luna, nract, dataact, scd, ascd, scc, ascc, suma, explicatia4, sters, id_utils, dataoras, cod from act
|
||||||
|
union
|
||||||
|
select an, luna, nract, dataact, scd, ascd, scc, ascc, suma, explicatia4, 0 as sters, 0 as id_utils, null as dataoras, cod from act_imp_2024)
|
||||||
|
where an=2024 and luna = 10 and cod in (
|
||||||
|
select cod from
|
||||||
|
(with select_data as
|
||||||
|
(select distinct a.cod, a.dataact, a.nract, b.cod as codb from
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act_imp_2024 where an=2024 and luna = 10 ) a join
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 10 and sters = 0 and explicatia4 is null) b on (a.dataact = b.dataact and a.nract = b.nract and a.suma = b.suma)
|
||||||
|
)
|
||||||
|
select cod from select_data
|
||||||
|
union
|
||||||
|
select codb from select_data))
|
||||||
|
order by dataact, nract, cod, suma;
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
update act set explicatia5 = 'DUPLICATE' WHERE an=2024 and luna = 9 and cod in (
|
||||||
|
select cod from
|
||||||
|
(with select_data as
|
||||||
|
(select distinct a.cod, a.dataact, a.nract, b.cod as codb from
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 9 and sters = 0 and explicatia4 = 'IMPORT BIZ') a join
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 9 and sters = 0 and explicatia4 is null) b on (a.dataact = b.dataact and a.nract = b.nract and a.suma = b.suma)
|
||||||
|
)
|
||||||
|
select cod from select_data
|
||||||
|
union
|
||||||
|
select codb from select_data));
|
||||||
|
|
||||||
|
|
||||||
|
select t.*,rowid from act t where an=2024 and luna = 6 and cod in (
|
||||||
|
select cod from
|
||||||
|
(with select_data as
|
||||||
|
(select distinct a.cod, a.dataact, a.nract, b.cod as codb from
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 6 and sters = 0 and explicatia4 = 'IMPORT BIZ') a join
|
||||||
|
(select distinct dataact, nract, suma, cod, explicatia4 from act where an=2024 and luna = 6 and sters = 0 and explicatia4 is null) b on (a.dataact = b.dataact and a.nract = b.nract and a.suma = b.suma)
|
||||||
|
)
|
||||||
|
select cod from select_data
|
||||||
|
union
|
||||||
|
select codb from select_data))
|
||||||
|
order by dataact, nract, cod;
|
||||||
|
|
||||||
|
select T.EXPLICATIA4, T.EXPLICATIA5, T.STERS, T.DATAORAS, T.ID_UTILS, t.nract, t.dataact, t.explicatia, t.scd, t.ascd, t.scc, t.ascc, t.suma, t.*,rowid from act t where an=2024 and luna = 6 AND EXPLICATIA5 like '%DUPLICATE' order by t.dataact, t.nract, t.cod;
|
||||||
|
|
||||||
|
-- DUPLICATE
|
||||||
|
select T.EXPLICATIA4, T.EXPLICATIA5, T.STERS, t.nract, t.dataact, t.scd, t.ascd, t.scc, t.ascc, t.suma, t.id_jtva_coloana, t.taxcode, t.paymentcode, t.explicatia, t.id_fact, t.id_factd, t.id_factc, t.cod, t.id_act, t.id_fdoc, t.datascad, t.dataireg, t.an, t.luna, t.nnir, t.id_util, t.dataora, t.id_responsabil, t.id_venchelt, t.id_sectie, t.id_set, t.id_lucrare, t.id_Gestin, t.id_Gestout, t.id_Valuta, t.proc_tva, t.id_ctr, t.serie_act,rowid from act t where an=2024 and luna = 6 AND STERS = 0 AND EXPLICATIA5 = 'DUPLICATE' order by t.dataact, t.nract, t.cod, t.suma;
|
||||||
|
|
||||||
|
-- ZDUPLICATE
|
||||||
|
select T.EXPLICATIA4, T.EXPLICATIA5, T.STERS, t.nract, t.dataact, t.scd, t.ascd, t.scc, t.ascc, t.suma, t.explicatia, t.id_fact, t.id_factd, t.id_factc, t.cod, t.id_act, t.id_jtva_coloana, t.id_fdoc, t.datascad, t.dataireg, t.an, t.luna, t.nnir, t.id_util, t.dataora, t.id_responsabil, t.id_venchelt, t.id_sectie, t.id_set, t.id_lucrare, t.id_Gestin, t.id_Gestout, t.id_Valuta, t.proc_tva, t.id_ctr, t.serie_act, t.taxcode, t.paymentcode,rowid from act t where an=2024 and luna = 6 AND EXPLICATIA5 = 'ZDUPLICATE' order by t.dataact, t.nract, t.cod, t.suma;
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
|
||||||
|
/*SELECT SUM(SUMA) AS SUMA from imp_import_documente where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6
|
||||||
|
AND SUBSTR(SCD, 1,3) = '401';
|
||||||
|
SELECT SUM(SUMA) AS SUMA from imp_import_documente where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6
|
||||||
|
AND SUBSTR(SCC, 1,3) = '401';*/
|
||||||
|
|
||||||
|
SELECT CONT, SUM(DEBIT) AS DEBIT, SUM(CREDIT) AS CREDIT FROM
|
||||||
|
(SELECT SUBSTR(SCD,1,3) AS CONT, SUMA AS DEBIT, 0 AS CREDIT FROM ACT WHERE AN=2024 AND LUNA = 6 AND STERS = 0 AND SCD IS NOT NULL
|
||||||
|
UNION ALL
|
||||||
|
SELECT SUBSTR(SCC,1,3) AS CONT, 0 AS DEBIT, SUMA AS CREDIT FROM ACT WHERE AN=2024 AND LUNA = 6 AND STERS = 0 AND SCC IS NOT NULL)
|
||||||
|
GROUP BY CONT
|
||||||
|
ORDER BY CONT;
|
||||||
|
|
||||||
|
select a.dataact, a.suma as biz, b.suma as roa, a.suma - b.suma as dif from
|
||||||
|
(SELECT sum(t.suma) as suma, dat_document as dataact from imp_import_documente t where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6 AND SUBSTR(SCD, 1,3) = '401' group by dat_document) a left join
|
||||||
|
(SELECT sum(t.suma) as suma, dataact from ACT t where AN=2024 AND LUNA = 6 AND SUBSTR(SCD, 1,3) = '401' AND STERS= 0 group by dataact) b on (a.dataact = b.dataact) order by dataact;
|
||||||
|
|
||||||
|
|
||||||
|
select a.scd, a.scc, b.scd, b.scc, a.dataact, a.suma as biz, b.suma as roa, nvl(a.suma,0) - nvl(b.suma,0) as dif from
|
||||||
|
(SELECT SCD, SCC, sum(t.suma) as suma, dat_document as dataact from imp_import_documente t where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6 group by SCD, SCC, dat_document) a left join
|
||||||
|
(SELECT SCD, SCC, sum(t.suma) as suma, dataact from ACT t where AN=2024 AND LUNA = 6 AND STERS= 0 group by SCD, SCC, dataact) b on (a.dataact = b.dataact and a.scd = b.scd and a.scc = b.scc)
|
||||||
|
where nvl(a.suma,0) - nvl(b.suma,0) <> 0 order by a.scd, a.dataact;
|
||||||
|
|
||||||
|
select t.*,rowid from imp_import_documente t where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6 AND SUBSTR(SCC, 1,3) = '401' AND dat_document = to_date('20062024', 'ddmmyyyy')order by dat_document, to_number(cod_number), suma;
|
||||||
|
--select t.explicatia4, t.*,rowid from act t where AN=2024 AND LUNA = 6 AND SUBSTR(SCD, 1,3) = '401' AND STERS= 0 AND dataact = to_date('21062024', 'ddmmyyyy')order by dataact, suma;
|
||||||
|
select T.EXPLICATIA4, T.EXPLICATIA5, T.STERS, t.nract, t.dataact, t.scd, t.ascd, t.scc, t.ascc, t.suma, t.id_jtva_coloana, t.taxcode, t.paymentcode, t.explicatia, t.id_fact, t.id_factd, t.id_factc, t.cod, t.id_act, t.id_fdoc, t.datascad, t.dataireg, t.an, t.luna, t.nnir, t.id_util, t.dataora, t.id_responsabil, t.id_venchelt, t.id_sectie, t.id_set, t.id_lucrare, t.id_Gestin, t.id_Gestout, t.id_Valuta, t.proc_tva, t.id_ctr, t.serie_act,rowid from act t where an=2024 and luna = 6 AND STERS = 0 AND SUBSTR(SCC, 1,3) = '401' AND dataact = to_date('20062024', 'ddmmyyyy') order by t.dataact, T.NRACT, t.suma;
|
||||||
|
|
||||||
|
select t.*,rowid from imp_import_documente t where extract(year from dat_document) = 2024 and extract(month from dat_document) = 6 AND cod_number like '%7000696928%' AND dat_document = to_date('20062024', 'ddmmyyyy')order by dat_document, to_number(cod_number), suma;
|
||||||
|
select T.EXPLICATIA4, T.EXPLICATIA5, T.STERS, t.nract, t.dataact, t.scd, t.ascd, t.scc, t.ascc, t.suma, t.id_jtva_coloana, t.taxcode, t.paymentcode, t.explicatia, t.id_fact, t.id_factd, t.id_factc, t.cod, t.id_act, t.id_fdoc, t.datascad, t.dataireg, t.an, t.luna, t.nnir, t.id_util, t.dataora, t.id_responsabil, t.id_venchelt, t.id_sectie, t.id_set, t.id_lucrare, t.id_Gestin, t.id_Gestout, t.id_Valuta, t.proc_tva, t.id_ctr, t.serie_act,rowid from act t where an=2024 and luna = 6 AND STERS = 0 AND nract= 7000696928 AND dataact = to_date('20062024', 'ddmmyyyy') order by t.dataact, T.NRACT, t.suma;
|
||||||
BIN
EXEMPLE/Monografii.xlsx
Normal file
BIN
EXEMPLE/Monografii.xlsx
Normal file
Binary file not shown.
2963
EXEMPLE/coresp_parteneri.csv
Normal file
2963
EXEMPLE/coresp_parteneri.csv
Normal file
File diff suppressed because it is too large
Load Diff
140
EXEMPLE/flora.txt
Normal file
140
EXEMPLE/flora.txt
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
restaurant
|
||||||
|
vanzari: tip document (La masa), nr document, data document, valoare fara tva, valoare tva, procent tva, tip plata (Carte credit, Numerar)
|
||||||
|
intrari: doar valoarea fara tva (nu exista coloane cu valoare TVA, cota TVA)
|
||||||
|
iesiri: tip document (RaportGestiune), nr document, data document, valoare, cod sectie iesire, denumire sectie iesire, cod sectie intrare, denumire sectie intrare, tip iesire (Vanzare)
|
||||||
|
|
||||||
|
hotel
|
||||||
|
facturi: nr factura, data factura, cumparator, camera, tip camera, tarif, grupa tarif, pers facturare, sosire, plecare , codfiscal/cnp, regcomert/ci/pasaport, total, cash, card, cec, virament, alt tip, departament pos, denumire pos (Visa Card, Tarif Cazare, Taxa Statiune, Cash, Virament Intern), pos pret net, pos tva, pos taxa1 (proc tva), tip factura (Factura Laser A4, Decontare Interna), copanie tara, companie oras, agentie
|
||||||
|
|
||||||
|
La Restaurant sunt 3 fisiere:
|
||||||
|
1. Vanzari: monetare POS
|
||||||
|
- numar
|
||||||
|
- data
|
||||||
|
- valoare totala fara TVA
|
||||||
|
- valoare TVA
|
||||||
|
- Procent TVA
|
||||||
|
- tip plata (ex: Carte credit, Numerar, Tichete)
|
||||||
|
- tip document (ex: "La masa")
|
||||||
|
* Nu exista articole
|
||||||
|
|
||||||
|
Restaurant Monetar MON MICROS 7/6 07.05.2024 (F:\flora\restaurant\Vanzari_20240506.xml)
|
||||||
|
Data document: 06.05.2024
|
||||||
|
Incasare Card 19% 24
|
||||||
|
5125.01 = 418.02 20.17
|
||||||
|
5125.01 = 4427.0101 3.83
|
||||||
|
|
||||||
|
Incasare Numerar Casa Flora 19 % 30
|
||||||
|
5311 = 418.02 25.21
|
||||||
|
5311 = 4427.0101 4.79
|
||||||
|
|
||||||
|
Incasare Numerar Casa Flora 9% 148.50
|
||||||
|
5311 = 418.02 136.24
|
||||||
|
5311 = 4427.0201 12.26
|
||||||
|
|
||||||
|
Incasare Tichete?
|
||||||
|
|
||||||
|
2. intrari: facturi achizitie
|
||||||
|
- numar
|
||||||
|
- data
|
||||||
|
- Tip document (Factura)
|
||||||
|
- Cod fiscal
|
||||||
|
- Nume furnizor
|
||||||
|
- valoare totala fara TVA
|
||||||
|
- cod sectie intrare
|
||||||
|
- denumire sectie intrare (Bar Casa Flora, Bucatarie Casa Flora)
|
||||||
|
- tip tranzactie (Achizitie)
|
||||||
|
* Nu exista valoarea TVA!
|
||||||
|
* Nu este completata Cota TVA!
|
||||||
|
* Nu exista articole
|
||||||
|
|
||||||
|
Restaurant Intrari
|
||||||
|
Factura 594121001391 29.04.2024, Selgros Cash&Carry, CUI RO11805367
|
||||||
|
Achizitii marfuri Bucatarie Casa Flora, 485.15 lei fara TVA, 0 lei TVA
|
||||||
|
371.08 = 401.01 485.15 lei
|
||||||
|
4426.0101 = 401.01 0 lei
|
||||||
|
|
||||||
|
Factura 320406 29.04.2024, Sorla SRL, CUI RO5782471
|
||||||
|
Achizitii marfuri Bar Casa Flora, 3745.79 lei fara TVA, 0 lei TVA
|
||||||
|
371.08 = 401.01 3745.79 lei
|
||||||
|
4426.0101 = 401.01 0 lei
|
||||||
|
|
||||||
|
3. iesiri: consum, Raport gestiune
|
||||||
|
- numar
|
||||||
|
- data
|
||||||
|
- valoare totala document
|
||||||
|
- tip document (ex: "RaportGestiune")
|
||||||
|
- sectie intrare
|
||||||
|
- sectie iesire
|
||||||
|
- tip iesire (ex: "Vanzare")
|
||||||
|
|
||||||
|
Restaurant Raport de Gestiune
|
||||||
|
RAP MICROS 7 07.05.2024
|
||||||
|
Consum marfa vanzare Bar Casa Flora 607 = 371.01 11.04
|
||||||
|
Consum marfa vanzare Bucatarie Casa Flora 607 = 371.08 60.24
|
||||||
|
|
||||||
|
RAP MICROS 6 06.05.2024
|
||||||
|
Iesiri_20240506.xml
|
||||||
|
Consum marfa vanzare Bar Casa Flora 607 = 371.01 21.92
|
||||||
|
Consum marfa vanzare Bucatarie Casa Flora 607 = 371.08 39.95
|
||||||
|
|
||||||
|
Se importa din fisierul de vanzari
|
||||||
|
Vanzare CASA FLORA 418.02 = 707.0201 45.38
|
||||||
|
TVA Vanzare CASA FLORA 418.02 = 4428.03 8.62
|
||||||
|
|
||||||
|
|
||||||
|
RAP MICROS 5 05.05.2024
|
||||||
|
Vanzare CASA FLORA 418.02 = 707.0201 159.65
|
||||||
|
TVA Vanzare CASA FLORA 418.02 = 4428.03 30.33
|
||||||
|
Consum marfa vanzare Bar Casa Flora 607 = 371.01 21.92
|
||||||
|
Consum marfa vanzare Bucatarie Casa Flora 607 = 371.08 39.95
|
||||||
|
|
||||||
|
La Hotel este 1 fisier:
|
||||||
|
1. facturi:
|
||||||
|
- numar
|
||||||
|
- data
|
||||||
|
- nume cumparator
|
||||||
|
- cod fiscal/cnp
|
||||||
|
- reg. comert/ci/pasaport
|
||||||
|
- total valoare defalcat pe cash/card/cec/virament/alte
|
||||||
|
- departament POS
|
||||||
|
- denumire POS (ex: Visa Card, Tarif Cazare, Taxa Statiune, Cash, Virament Intern)
|
||||||
|
|
||||||
|
Fidelio Gestiune
|
||||||
|
bts_detalii_facturi_rep_20240507.xml
|
||||||
|
RAP FID 7 07.05.2024
|
||||||
|
418.01 = 472.03 180 Tichete (de ce este suma cu tot cu TVA pe venituri in avans?)
|
||||||
|
|
||||||
|
Fidelio Monetar
|
||||||
|
FID 8/7 08.05.2024
|
||||||
|
5125.03 = 418.01 164.14 Incasare tichete card 9%
|
||||||
|
5125.03 = 4427.0201 14.86 TVA Incasare tichete card 9%
|
||||||
|
|
||||||
|
Fidelio Factura 1 (Card)
|
||||||
|
Cumparator: GOCIU GABRIELA LUMINITA
|
||||||
|
Factura servicii 9% Tichete 100 lei, 11429 07.05.2024, Partener: KARD, CUI: 00000000
|
||||||
|
4111.02 = 418.01 91.74
|
||||||
|
4111.02 = 4427.0201 8.26
|
||||||
|
|
||||||
|
Fidelio Factura 2 servicii 9% Tichete 80 lei, 11430 07.05.2024, Partener: KARD, CUI: 00000000
|
||||||
|
Cumparator: GOCIU GABRIELA LUMINITA
|
||||||
|
4111.02 = 418.01 73.39
|
||||||
|
4111.02 = 4427.0201 6.61
|
||||||
|
|
||||||
|
* Este posibil ca o factura sa se achite cu mai multe mijloace de plata (card, tichete, numerar, virament intern)?
|
||||||
|
|
||||||
|
* Din Fidelio se importa doar facturile achitate cu Card. Ce se intampla cu facturile achitate numerar, tichete?
|
||||||
|
|
||||||
|
* La sfarsitul lunii se storneaza manual facturile importate din Fidelio, intrucat se declara din Fidelio eFactura cu toate detaliile:
|
||||||
|
4111 = 418 -180 lei
|
||||||
|
|
||||||
|
* Se face automat la import nota:
|
||||||
|
472 = 70x
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
3481
EXEMPLE/hotel/bts_detalii_facturi_rep_20240916.xml
Normal file
3481
EXEMPLE/hotel/bts_detalii_facturi_rep_20240916.xml
Normal file
File diff suppressed because it is too large
Load Diff
1711
EXEMPLE/restaurant/Iesiri_20240718.xml
Normal file
1711
EXEMPLE/restaurant/Iesiri_20240718.xml
Normal file
File diff suppressed because it is too large
Load Diff
51
EXEMPLE/restaurant/Intrari_20240426.xml
Normal file
51
EXEMPLE/restaurant/Intrari_20240426.xml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<?xml version="1.0" standalone="yes"?>
|
||||||
|
<DocumentElement>
|
||||||
|
<Intrari>
|
||||||
|
<IdInregistrare>0-20240426</IdInregistrare>
|
||||||
|
<TipDocument>Factura</TipDocument>
|
||||||
|
<NrDocument>57778</NrDocument>
|
||||||
|
<DataDocument>26.04.2024 00:00:00</DataDocument>
|
||||||
|
<CodFiscal>22495407</CodFiscal>
|
||||||
|
<DenumireFurnizor>ARISA CORPORATION SRL</DenumireFurnizor>
|
||||||
|
<ValoareFacturaFaraTVA>2613.48</ValoareFacturaFaraTVA>
|
||||||
|
<ValoareAjustataFaraTVA>2613.48</ValoareAjustataFaraTVA>
|
||||||
|
<ValoareAjustare>0</ValoareAjustare>
|
||||||
|
<TVAValoareAjustata>0</TVAValoareAjustata>
|
||||||
|
<CotaTVA>0</CotaTVA>
|
||||||
|
<CodSectieDeIntrare>4</CodSectieDeIntrare>
|
||||||
|
<DenumireSectieDeIntrare>Bucatarie Casa Flora</DenumireSectieDeIntrare>
|
||||||
|
<TipTranzactie>Achizitie</TipTranzactie>
|
||||||
|
</Intrari>
|
||||||
|
<Intrari>
|
||||||
|
<IdInregistrare>1-20240426</IdInregistrare>
|
||||||
|
<TipDocument>Factura</TipDocument>
|
||||||
|
<NrDocument>57779</NrDocument>
|
||||||
|
<DataDocument>26.04.2024 00:00:00</DataDocument>
|
||||||
|
<CodFiscal>22495407</CodFiscal>
|
||||||
|
<DenumireFurnizor>ARISA CORPORATION SRL</DenumireFurnizor>
|
||||||
|
<ValoareFacturaFaraTVA>3289.77</ValoareFacturaFaraTVA>
|
||||||
|
<ValoareAjustataFaraTVA>3289.77</ValoareAjustataFaraTVA>
|
||||||
|
<ValoareAjustare>0</ValoareAjustare>
|
||||||
|
<TVAValoareAjustata>0</TVAValoareAjustata>
|
||||||
|
<CotaTVA>0</CotaTVA>
|
||||||
|
<CodSectieDeIntrare>4</CodSectieDeIntrare>
|
||||||
|
<DenumireSectieDeIntrare>Bucatarie Casa Flora</DenumireSectieDeIntrare>
|
||||||
|
<TipTranzactie>Achizitie</TipTranzactie>
|
||||||
|
</Intrari>
|
||||||
|
<Intrari>
|
||||||
|
<IdInregistrare>2-20240426</IdInregistrare>
|
||||||
|
<TipDocument>Factura</TipDocument>
|
||||||
|
<NrDocument>57784</NrDocument>
|
||||||
|
<DataDocument>26.04.2024 00:00:00</DataDocument>
|
||||||
|
<CodFiscal>22495407</CodFiscal>
|
||||||
|
<DenumireFurnizor>ARISA CORPORATION SRL</DenumireFurnizor>
|
||||||
|
<ValoareFacturaFaraTVA>939.39</ValoareFacturaFaraTVA>
|
||||||
|
<ValoareAjustataFaraTVA>939.39</ValoareAjustataFaraTVA>
|
||||||
|
<ValoareAjustare>0</ValoareAjustare>
|
||||||
|
<TVAValoareAjustata>0</TVAValoareAjustata>
|
||||||
|
<CotaTVA>0</CotaTVA>
|
||||||
|
<CodSectieDeIntrare>4</CodSectieDeIntrare>
|
||||||
|
<DenumireSectieDeIntrare>Bucatarie Casa Flora</DenumireSectieDeIntrare>
|
||||||
|
<TipTranzactie>Achizitie</TipTranzactie>
|
||||||
|
</Intrari>
|
||||||
|
</DocumentElement>
|
||||||
523
EXEMPLE/restaurant/Vanzari_20240909.xml
Normal file
523
EXEMPLE/restaurant/Vanzari_20240909.xml
Normal file
@@ -0,0 +1,523 @@
|
|||||||
|
<?xml version="1.0" standalone="yes"?>
|
||||||
|
<DocumentElement>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>0-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2155</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>0</ValoareFaraTVA>
|
||||||
|
<TVA>0</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>1-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2156</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>64.22</ValoareFaraTVA>
|
||||||
|
<TVA>5.78</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>2-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2157</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>10.08</ValoareFaraTVA>
|
||||||
|
<TVA>1.92</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>3-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2158</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>4.59</ValoareFaraTVA>
|
||||||
|
<TVA>0.41</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>4-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2158</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>10.08</ValoareFaraTVA>
|
||||||
|
<TVA>1.92</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>5-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2158</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>13.03</ValoareFaraTVA>
|
||||||
|
<TVA>2.47</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>6-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2158</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>82.57</ValoareFaraTVA>
|
||||||
|
<TVA>7.43</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>7-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2159</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>10.08</ValoareFaraTVA>
|
||||||
|
<TVA>1.92</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>8-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2160</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>13.76</ValoareFaraTVA>
|
||||||
|
<TVA>1.24</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>9-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>2.75</ValoareFaraTVA>
|
||||||
|
<TVA>0.25</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>10-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>10.08</ValoareFaraTVA>
|
||||||
|
<TVA>1.92</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>11-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>13.76</ValoareFaraTVA>
|
||||||
|
<TVA>1.24</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>12-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>18.35</ValoareFaraTVA>
|
||||||
|
<TVA>1.65</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>13-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>18.49</ValoareFaraTVA>
|
||||||
|
<TVA>3.51</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>14-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>27.52</ValoareFaraTVA>
|
||||||
|
<TVA>2.48</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>15-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>36.7</ValoareFaraTVA>
|
||||||
|
<TVA>3.3</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>16-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>35.29</ValoareFaraTVA>
|
||||||
|
<TVA>6.71</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>17-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2161</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>43.58</ValoareFaraTVA>
|
||||||
|
<TVA>3.92</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>18-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>6.88</ValoareFaraTVA>
|
||||||
|
<TVA>0.62</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>19-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>13.76</ValoareFaraTVA>
|
||||||
|
<TVA>1.24</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>20-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>16.51</ValoareFaraTVA>
|
||||||
|
<TVA>1.49</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>21-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>23.53</ValoareFaraTVA>
|
||||||
|
<TVA>4.47</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>22-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>33.49</ValoareFaraTVA>
|
||||||
|
<TVA>3.01</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>23-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>44.95</ValoareFaraTVA>
|
||||||
|
<TVA>4.05</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>24-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2162</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>39.91</ValoareFaraTVA>
|
||||||
|
<TVA>3.59</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>25-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2163</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>16.51</ValoareFaraTVA>
|
||||||
|
<TVA>1.49</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>26-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2163</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>35.29</ValoareFaraTVA>
|
||||||
|
<TVA>6.71</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>27-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2163</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>40.83</ValoareFaraTVA>
|
||||||
|
<TVA>3.67</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>28-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2163</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>50</ValoareFaraTVA>
|
||||||
|
<TVA>4.5</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>29-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2163</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>21.43</ValoareFaraTVA>
|
||||||
|
<TVA>4.07</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>tichete</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>30-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2164</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>9.24</ValoareFaraTVA>
|
||||||
|
<TVA>1.76</TVA>
|
||||||
|
<ProcentTVA>19</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Carte credit</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>31-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>1.83</ValoareFaraTVA>
|
||||||
|
<TVA>0.17</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>32-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>3.67</ValoareFaraTVA>
|
||||||
|
<TVA>0.33</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>33-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>6.88</ValoareFaraTVA>
|
||||||
|
<TVA>0.62</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>34-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>13.76</ValoareFaraTVA>
|
||||||
|
<TVA>1.24</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>35-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>13.76</ValoareFaraTVA>
|
||||||
|
<TVA>1.24</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>36-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>27.52</ValoareFaraTVA>
|
||||||
|
<TVA>2.48</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>37-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>27.52</ValoareFaraTVA>
|
||||||
|
<TVA>2.48</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>38-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>100.46</ValoareFaraTVA>
|
||||||
|
<TVA>9.04</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
<Vanzari>
|
||||||
|
<IdInregistrare>39-20240909</IdInregistrare>
|
||||||
|
<TipDocument>La masa</TipDocument>
|
||||||
|
<NrDocument>2165</NrDocument>
|
||||||
|
<DataDocument>09.09.2024 00:00:00</DataDocument>
|
||||||
|
<ValoareFaraTVA>44.95</ValoareFaraTVA>
|
||||||
|
<TVA>4.05</TVA>
|
||||||
|
<ProcentTVA>9</ProcentTVA>
|
||||||
|
<ValoareAchizitie>0</ValoareAchizitie>
|
||||||
|
<CodSectieVanzare>1</CodSectieVanzare>
|
||||||
|
<DenumireSectieVanzare />
|
||||||
|
<TipPlata>Numerar</TipPlata>
|
||||||
|
</Vanzari>
|
||||||
|
</DocumentElement>
|
||||||
91
INFO.txt
Normal file
91
INFO.txt
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
Am facut suma(cantitate * pret) pe intrari si pe iesiri, dar nu am gasit in balanta sumele respective la 371, 401.
|
||||||
|
|
||||||
|
In fisierul de iesiri nu am gasit referinte la conturi. Sunt doar iesiri de 371?
|
||||||
|
In fisierul de intrari nu este contul in clar, ci un camp ID care face referire la un nomenclator de conturi. Trebuie sa aflu ce conturi reprezinta ID-urile
|
||||||
|
|
||||||
|
Am gasit si un fisier cu transferuri. Trebuie sa generam note si pentru transferuri?
|
||||||
|
|
||||||
|
Pentru lamuriri o sa imi trebuiasca:
|
||||||
|
RAPORT DE GESTIUNE
|
||||||
|
CENTRALIZATOR BONURI CONSUM
|
||||||
|
CENTRALIZATOR NIR-URI
|
||||||
|
CENTRALIZATOR TRANSFERURI (daca trebuie generate note)
|
||||||
|
LISTA ARTICOLE
|
||||||
|
Factura F/54381/17.05.2016 COCA COLA HBC ROMANIA SRL (NIR 1299)
|
||||||
|
NIR 1301 si Factura 866673 18/05/2016 (articolele au alte conturi decat NIR-ul 1299)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SELECT CONT, SUM(CANT*PRET) AS VALOARE FROM NIR1 GROUP BY CONT INTO CURSOR TT
|
||||||
|
CONT 11 (301): 6598.88
|
||||||
|
CONT 18 (371): 7490.00
|
||||||
|
balanta 301 debit: 6598.90
|
||||||
|
balanta 371 debit: 7533.45
|
||||||
|
balanta 378 credit: 4808.81
|
||||||
|
balanta 4428.1 credit: 715.53
|
||||||
|
|
||||||
|
|
||||||
|
SELECT l.cont, sum(l1.pret*l1.cant) as valoare FROM livrare l FULL JOIN livrare1 l1 ON l.codparinte = l1.codparinte AND l.indexlocal = l1.indexlivr GROUP BY l.cont
|
||||||
|
|
||||||
|
|
||||||
|
transf1
|
||||||
|
marfa
|
||||||
|
607: CALCULATE SUM((valachiz) FOR valachiz <> 0
|
||||||
|
378: CALCULATE SUM((pret*cant)-tva-valachiz) FOR valachiz <> 0
|
||||||
|
4428: CALCULATE SUM(tva) FOR valachiz <> 0
|
||||||
|
------------------------------
|
||||||
|
LUNA 06/2016
|
||||||
|
INTRARI - NIR
|
||||||
|
SELECT N.CONT, SUM(N.CANT*N.PRET) AS VALCTVAV, SUM(N.tva) AS VALTVAV, SUM(I.CANT*I.PRET) AS VALACH, SUM(((N.CANT*N.PRET)-N.TVA)-(I.CANT*I.PRET)) AS VALADAOS, SUM(I.TVA) AS VALTVAA FROM NIR1 N JOIN INTRARI1 I ON N.CODPARINTE = I.CODPARINTE AND N.ART = I.ART GROUP BY CONT INTO CURSOR TT
|
||||||
|
|
||||||
|
301
|
||||||
|
valoare achizitie fara tva: 7944.39
|
||||||
|
valoare tva achizitie: 717.51
|
||||||
|
|
||||||
|
371
|
||||||
|
valoare achizitie fara tva: 2982.41 (371 = 401)
|
||||||
|
valoare tva achizitie: 377.68 (4426 = 401)
|
||||||
|
valoare adaos: 5457.26 (371 = 378)
|
||||||
|
valoare tva vz neex: 904.33 (371 = 4428)
|
||||||
|
valoare vz cu adaos si tva: 9344 (debit 371)
|
||||||
|
|
||||||
|
|
||||||
|
LIVRARE - BON CONSUM (descarcare gestiune produse retete 301 si 371)
|
||||||
|
SELECT l.cont, ROUND(sum(l1.pret*l1.cant),2) as valvctva, ROUND(SUM((l1.pret-l1.adaos)*l1.cant),2) as valach, ROUND(SUM(l1.pret*l1.tvaneex/(1+l1.tvaneex)*l1.cant),2) as valtvaneex, ROUND(SUM((l1.adaos*l1.cant)-(l1.pret*l1.tvaneex/(1+l1.tvaneex)*l1.cant)),2) as valadaos FROM livrare l FULL JOIN livrare1 l1 ON l.codparinte = l1.codparinte AND l.indexlocal = l1.indexlivr GROUP BY l.cont
|
||||||
|
301
|
||||||
|
valoare achizitie fara tva: 9543.77 (601 = 301)
|
||||||
|
|
||||||
|
371
|
||||||
|
valoare achizitie fara tva: 491.42 (607 = 371)
|
||||||
|
valoare adaos: 1352.62 (378 = 371)
|
||||||
|
valoare tva neex: 165.96 (4428 = 371)
|
||||||
|
|
||||||
|
TRANSFER - MONETARE (descarcare gestiune marfa 371)
|
||||||
|
SELECT ROUND(SUM(valachiz),2) as valach, ROUND(SUM((pret*cant)-tva-valachiz),2) as valadaos, ROUND(SUM(tva),2) as valtva WHERE valachiz <> 0 FROM transf1
|
||||||
|
371
|
||||||
|
valoare achizitie fara tva: 2368.64 (607 = 371)
|
||||||
|
valoare adaos: 4199.53 (378 = 371)
|
||||||
|
valoare tva neex: 724.34 (4428 = 371)
|
||||||
|
|
||||||
|
INCASARI
|
||||||
|
SELECT t.zi, SUM(t.valdoc) as valtot, SUM(NVL(t2.valoare, 0.00)) as valpos, SUM(t.valdoc-NVL(t2.valoare,0.00)) as valcasa FROM transf t LEFT JOIN transf2 t2 ON t.coddoc = t2.codparinte GROUP BY t.zi
|
||||||
|
|
||||||
|
select z.zi, ROUND(NVL(x.proctva*100, 0.00),0) as proctva, ROUND(NVL(x.valvctva, 0.0000),2) - ROUND(NVL(z.valdiscoun * x.valvctva/y.valvctva, 0.0000),2) as valdoc, round(w.valpos* x.valvctva/y.valvctva,2) as valpos, round(w.valcasa* x.valvctva/y.valvctva,2) as valcasa from ;
|
||||||
|
(SELECT tr.zi, s.tvaneex as proctva, ROUND(SUM(t.cant*t.pret),2) as valvctva FROM transf1 t FULL JOIN sursa1 s ON t.codparinte = s.codparinte AND t.indexlocal = s.indexlivr FULL JOIN transf tr ON t.codparinte = tr.coddoc GROUP BY tr.zi, s.tvaneex ) x, ;
|
||||||
|
(SELECT tr.zi, ROUND(SUM(t.cant*t.pret),2) as valvctva FROM transf1 t JOIN transf tr ON t.codparinte = tr.coddoc GROUP BY tr.zi) y, ;
|
||||||
|
(SELECT tr.zi, ROUND(SUM(tr.valdiscoun),2) as valdiscoun FROM transf tr GROUP BY tr.zi) z, ;
|
||||||
|
(SELECT tr.zi, SUM(NVL(t2.valoare, 0.00)) as valpos, SUM(tr.valdoc-NVL(t2.valoare,0.00)) as valcasa FROM transf tr LEFT JOIN transf2 t2 ON tr.coddoc = t2.codparinte GROUP BY tr.zi) w ;
|
||||||
|
WHERE x.zi = y.zi AND x.zi = z.zi and x.zi = w.zi ;
|
||||||
|
INTO CURSOR tt
|
||||||
|
|
||||||
|
select zi, proctva, valdoc, ;
|
||||||
|
round(valdoc * proctva /(100 + proctva),2) as tva,;
|
||||||
|
valdoc - round(valdoc * proctva /(100 + proctva),2) as baza,;
|
||||||
|
round(valpos * proctva /(100 + proctva),2) as tvacard,;
|
||||||
|
valpos - round(valpos * proctva /(100 + proctva),2) as bazacard,;
|
||||||
|
round(valcasa * proctva /(100 + proctva),2) as tvanumerar,;
|
||||||
|
valcasa - round(valcasa * proctva /(100 + proctva),2) as bazanumerar ;
|
||||||
|
FROM tt INTO CURSOR vv
|
||||||
|
|
||||||
|
CASA = valoarea incasata numerar, cu tot cu TVA
|
||||||
|
CARD = valoarea incasata cu card, cu tot cu TVA
|
||||||
66
Teste/_precompile.ps1
Normal file
66
Teste/_precompile.ps1
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# _precompile.ps1 -Prg <cale.prg> - regenereaza .fxp-ul target intr-un proces IZOLAT.
|
||||||
|
# De ce izolat: precompilarea (vfp9 -A ... COMPILE) atarna dupa COMPILE si e omorata; daca
|
||||||
|
# ruleaza in ACEEASI sesiune powershell care lanseaza apoi testul, lansarile ulterioare de
|
||||||
|
# vfp9 esueaza (deschid editorul in loc sa ruleze). Rulat ca proces separat (Start-Process
|
||||||
|
# -Wait din harness), nu otraveste sesiunea care lanseaza testul.
|
||||||
|
param([Parameter(Mandatory=$true)][string]$Prg)
|
||||||
|
$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||||
|
$Fxp = [System.IO.Path]::ChangeExtension($Prg, 'fxp')
|
||||||
|
$dir = [System.IO.Path]::GetDirectoryName($Prg)
|
||||||
|
$tmpPrg = Join-Path $dir '_compile_tmp.prg'
|
||||||
|
# prg temporar care compileaza target-ul (COMPILE cu variabila; forma cu literal in ghilimele da eroare)
|
||||||
|
Set-Content -Path $tmpPrg -Value ("lcT = `"$Prg`"`r`nCOMPILE (lcT)`r`nQUIT`r`n") -Encoding ascii
|
||||||
|
# omoara doar vfp9 proprii (linia de comanda contine folderul testului), nu instante straine
|
||||||
|
function Stop-VfpProprii([string]$Marker) {
|
||||||
|
Get-CimInstance Win32_Process -Filter "Name='vfp9.exe'" -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
if ($_.CommandLine -and $_.CommandLine.ToLower().Contains($Marker.ToLower())) {
|
||||||
|
Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Stop-VfpProprii $dir
|
||||||
|
Start-Sleep -Milliseconds 500
|
||||||
|
if (Test-Path $Fxp) { [System.IO.File]::Delete($Fxp) }
|
||||||
|
|
||||||
|
# Fara furt de focus: fereastra vfp9 a compilarii (chiar tranzitorie) e impinsa off-screen,
|
||||||
|
# la fel ca in vfp_ui_harness.ps1 (SetWindowPos HWND_BOTTOM + NOACTIVATE, x=-4000).
|
||||||
|
Add-Type @"
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
public class Win32UiPc {
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool IsWindow(IntPtr hWnd);
|
||||||
|
public static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
|
||||||
|
public const uint SWP_NOSIZE = 0x0001;
|
||||||
|
public const uint SWP_NOACTIVATE = 0x0010;
|
||||||
|
}
|
||||||
|
"@
|
||||||
|
function Push-OffscreenPc([IntPtr]$Hwnd) {
|
||||||
|
if ($Hwnd -eq [IntPtr]::Zero -or -not [Win32UiPc]::IsWindow($Hwnd)) { return }
|
||||||
|
[Win32UiPc]::SetWindowPos($Hwnd, [Win32UiPc]::HWND_BOTTOM, -4000, 0, 0, 0, ([Win32UiPc]::SWP_NOSIZE -bor [Win32UiPc]::SWP_NOACTIVATE)) | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
$ok = $false
|
||||||
|
foreach ($try in 1..3) {
|
||||||
|
$pcProc = Start-Process -FilePath $Vfp -ArgumentList @('-A', "`"$tmpPrg`"") -PassThru
|
||||||
|
$dl = (Get-Date).AddSeconds(30)
|
||||||
|
$pcHwnd = [IntPtr]::Zero
|
||||||
|
while (-not (Test-Path $Fxp) -and (Get-Date) -lt $dl) {
|
||||||
|
if ($pcHwnd -eq [IntPtr]::Zero -and -not $pcProc.HasExited) {
|
||||||
|
$pcProc.Refresh()
|
||||||
|
if ($pcProc.MainWindowHandle -ne [IntPtr]::Zero) { $pcHwnd = $pcProc.MainWindowHandle }
|
||||||
|
}
|
||||||
|
Push-OffscreenPc $pcHwnd
|
||||||
|
Start-Sleep -Milliseconds 300
|
||||||
|
}
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
Stop-VfpProprii $dir
|
||||||
|
Start-Sleep -Seconds 1
|
||||||
|
if (Test-Path $Fxp) { $ok = $true; break }
|
||||||
|
}
|
||||||
|
foreach ($f in @($tmpPrg, [System.IO.Path]::ChangeExtension($tmpPrg, 'fxp'))) {
|
||||||
|
if (Test-Path $f) { try { [System.IO.File]::Delete($f) } catch {} }
|
||||||
|
}
|
||||||
|
if ($ok) { exit 0 } else { exit 1 }
|
||||||
49
Teste/bin_din_text.ps1
Normal file
49
Teste/bin_din_text.ps1
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Scrie inapoi in proiect binarele VFP (.scx+.sct / .vcx+.vct) regenerate din textul editat.
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Wrapper peste D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1 cu parametrii FLORA2ROA. Flux in-arbore:
|
||||||
|
textul .sc2/.vc2 sta LANGA binar, deci -CacheRoot = radacina proiectului.
|
||||||
|
|
||||||
|
Regenereaza in staging, face fidelity check (bin -> text, comparat pe octeti) si abia apoi
|
||||||
|
copiaza peste binarul din proiect. Refuza daca binarul e blocat (IDE sau flora2roa.exe
|
||||||
|
deschis) sau daca e mai nou decat textul (fara -Force).
|
||||||
|
|
||||||
|
Editarea textului se face byte-safe, in Windows-1252:
|
||||||
|
$t = [IO.File]::ReadAllText($p, [Text.Encoding]::GetEncoding(1252))
|
||||||
|
[IO.File]::WriteAllText($p, $t, [Text.Encoding]::GetEncoding(1252))
|
||||||
|
NU cu tool-uri care scriu UTF-8: corup diacriticele din TOT fisierul.
|
||||||
|
Vezi COMUN\docs\flux-editare-vfp-text.md si conventie_encoding_cp1252.md.
|
||||||
|
|
||||||
|
Dupa write-back binarul e modificat in SVN: se comite in SVN doar cu acordul utilizatorului.
|
||||||
|
|
||||||
|
.PARAMETER TextFile
|
||||||
|
Unul sau mai multe fisiere .sc2/.vc2 din arbore (ex. frm_import.sc2).
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile frm_import.sc2 -DryRun
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile frm_import.sc2
|
||||||
|
#>
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)][string[]]$TextFile,
|
||||||
|
[string]$ProjectRoot,
|
||||||
|
[switch]$Force,
|
||||||
|
[switch]$NoVerify,
|
||||||
|
[switch]$DryRun
|
||||||
|
)
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
if (-not $ProjectRoot) { $ProjectRoot = Split-Path $PSScriptRoot -Parent }
|
||||||
|
$tool = 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1'
|
||||||
|
if (-not (Test-Path $tool)) { throw "Nu gasesc $tool (tooling-ul partajat FoxBin2Prg)." }
|
||||||
|
|
||||||
|
$TextFile = $TextFile | ForEach-Object { if ([IO.Path]::IsPathRooted($_)) { $_ } else { Join-Path $ProjectRoot $_ } }
|
||||||
|
|
||||||
|
# flux in-arbore: CacheRoot = ProjectRoot (maparea text->binar devine identitate)
|
||||||
|
& $tool -TextFile $TextFile -ProjectRoot $ProjectRoot -CacheRoot $ProjectRoot `
|
||||||
|
-Force:$Force -NoVerify:$NoVerify -DryRun:$DryRun
|
||||||
|
exit $LASTEXITCODE
|
||||||
21
Teste/mock_amessagebox.prg
Normal file
21
Teste/mock_amessagebox.prg
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
* mock_amessagebox.prg - inlocuieste FUNCTION amessagebox (myutils.prg) in testele headless,
|
||||||
|
* ca dialogurile modale sa nu blocheze procesul. Returneaza 6 (Da/OK) implicit.
|
||||||
|
* Se incarca cu SET PROCEDURE ... ADDITIVE dupa initializarea mediului: la nume duplicat de
|
||||||
|
* procedura VFP alege fisierul deschis cel mai recent.
|
||||||
|
* gnMockRaspuns (PUBLIC, optional): valoarea returnata (implicit 6).
|
||||||
|
* gcMockUltimMesaj / gnMockUltimTip (PUBLIC, optional): daca testul declara gcMockUltimMesaj ca
|
||||||
|
* sir, mock-ul memoreaza mesajul si tipul ultimului apel, pentru aserturi pe textul dialogului.
|
||||||
|
FUNCTION amessagebox
|
||||||
|
LPARAMETERS tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut, tnTimeoutValue
|
||||||
|
LOCAL lnRaspuns
|
||||||
|
lnRaspuns = IIF(TYPE('gnMockRaspuns') = 'N', gnMockRaspuns, 6)
|
||||||
|
IF TYPE('gcMockUltimMesaj') = 'C'
|
||||||
|
gcMockUltimMesaj = TRANSFORM(tcMessage)
|
||||||
|
gnMockUltimTip = IIF(TYPE('tnDialogBoxType') = 'N', tnDialogBoxType, 0)
|
||||||
|
ENDIF
|
||||||
|
TestLog('MOCK amessagebox: [' + ALLTRIM(TRANSFORM(tcMessage)) + '] -> returnez ' + TRANSFORM(lnRaspuns))
|
||||||
|
RETURN lnRaspuns
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
* MESSAGEBOX nativ nu se poate umbri; formularul apeleaza si MESSAGEBOX() direct in cateva
|
||||||
|
* locuri. Testele care ating acele ramuri trebuie sa evite conditia care le declanseaza.
|
||||||
74
Teste/ruleaza_teste.ps1
Normal file
74
Teste/ruleaza_teste.ps1
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Ruleaza suita de teste FLORA2ROA (verificare de sintaxa + teste UI cu capturi).
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Ordinea e cea din COMUN\docs\depanare_testare_vfp.md: intai compilarea de verificare (ieftina,
|
||||||
|
prinde sintaxa), apoi testele functionale pe fluxul real al utilizatorului.
|
||||||
|
|
||||||
|
Suitele NU se ruleaza in paralel: harness-ul isi omoara instantele vfp9 proprii inainte de
|
||||||
|
fiecare lansare (filtrat pe linia de comanda, instantele straine nu sunt atinse).
|
||||||
|
|
||||||
|
.PARAMETER Doar
|
||||||
|
Ruleaza numai testele al caror nume contine acest sir.
|
||||||
|
|
||||||
|
.PARAMETER FaraSintaxa
|
||||||
|
Sare peste verificarea de sintaxa.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\ruleaza_teste.ps1
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\ruleaza_teste.ps1 -Doar export
|
||||||
|
#>
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[string]$Doar,
|
||||||
|
[switch]$FaraSintaxa
|
||||||
|
)
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
$Teste = $PSScriptRoot
|
||||||
|
$Root = Split-Path $Teste -Parent
|
||||||
|
|
||||||
|
# nume test -> etichetele pasilor asteptate de vfp_ui_harness.ps1 (o captura per pas)
|
||||||
|
$suita = @(
|
||||||
|
@{ Prg = 'test_frm_import_ui.prg'; Steps = @('afisat', 'trace', 'date') }
|
||||||
|
@{ Prg = 'test_export_date.prg'; Steps = @('afisat', 'importat') }
|
||||||
|
)
|
||||||
|
if ($Doar) { $suita = $suita | Where-Object { $_.Prg -like "*$Doar*" } }
|
||||||
|
|
||||||
|
$rezultate = @()
|
||||||
|
|
||||||
|
if (-not $FaraSintaxa) {
|
||||||
|
Write-Host '=== Verificare de sintaxa (compilare headless) ===' -ForegroundColor Cyan
|
||||||
|
& (Join-Path $Teste 'verifica_sintaxa.ps1')
|
||||||
|
$rezultate += [pscustomobject]@{ Test = 'verifica_sintaxa'; Rezultat = $(if ($LASTEXITCODE -eq 0) { 'PASS' } else { 'FAIL' }) }
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($t in $suita) {
|
||||||
|
$prg = Join-Path $Teste $t.Prg
|
||||||
|
if (-not (Test-Path $prg)) { Write-Warning "lipsa: $prg"; continue }
|
||||||
|
Write-Host ''
|
||||||
|
Write-Host ("=== {0} ===" -f $t.Prg) -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# capturile fiecarui test in folderul lui, ca sa nu se suprascrie intre teste
|
||||||
|
$shots = Join-Path (Join-Path $Teste 'screenshots') ([IO.Path]::GetFileNameWithoutExtension($t.Prg))
|
||||||
|
& (Join-Path $Teste 'vfp_ui_harness.ps1') -TestPrg $prg -Steps $t.Steps -ShotsDir $shots -StepTimeoutSec 300
|
||||||
|
|
||||||
|
# verdictul il da testul: ultima linie "REZULTAT:" din log
|
||||||
|
$log = Join-Path $Teste ([IO.Path]::GetFileNameWithoutExtension($t.Prg) + '_log.txt')
|
||||||
|
$verdict = 'FARA LOG'
|
||||||
|
if (Test-Path $log) {
|
||||||
|
$linie = Select-String -Path $log -Pattern '^REZULTAT:' | Select-Object -Last 1
|
||||||
|
if ($linie) { $verdict = $linie.Line -replace '^REZULTAT:\s*', '' }
|
||||||
|
$failuri = @(Select-String -Path $log -Pattern '^FAIL:')
|
||||||
|
foreach ($f in $failuri) { Write-Warning $f.Line }
|
||||||
|
}
|
||||||
|
$rezultate += [pscustomobject]@{ Test = $t.Prg; Rezultat = $verdict }
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host ''
|
||||||
|
Write-Host '=== SUMAR ===' -ForegroundColor Cyan
|
||||||
|
$rezultate | Format-Table -AutoSize
|
||||||
|
$nrFail = @($rezultate | Where-Object { $_.Rezultat -notlike 'PASS*' }).Count
|
||||||
|
exit ([int]($nrFail -gt 0))
|
||||||
63
Teste/test_conectare_roa.prg
Normal file
63
Teste/test_conectare_roa.prg
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
* test_conectare_roa.prg - verifica drumul de initializare CU conectare la Oracle.
|
||||||
|
* Ruleaza cu datele din settings.ini; daca baza nu e accesibila, testul trebuie sa raporteze
|
||||||
|
* esecul si sa iasa - NU sa ramana agatat pe un dialog de login (SQLSetProp DispLogin).
|
||||||
|
*
|
||||||
|
* vfp9.exe -A -T "Teste\test_conectare_roa.prg"
|
||||||
|
* Nu face parte din suita implicita: depinde de reteaua/serverul Oracle.
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
|
||||||
|
PUBLIC gcUILog, gcSyncDir, gnTestFail
|
||||||
|
gnTestFail = 0
|
||||||
|
|
||||||
|
LOCAL lcTestDir, llConectat
|
||||||
|
lcTestDir = ADDBS(JUSTPATH(SYS(16, 0)))
|
||||||
|
gcUILog = lcTestDir + 'test_conectare_roa_log.txt'
|
||||||
|
gcSyncDir = lcTestDir + 'uisync\'
|
||||||
|
IF !DIRECTORY(gcSyncDir)
|
||||||
|
MD (gcSyncDir)
|
||||||
|
ENDIF
|
||||||
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
|
||||||
|
* fara dialog de login: headless, un prompt ODBC ar bloca procesul la nesfarsit
|
||||||
|
SQLSETPROP(0, 'DispLogin', 3)
|
||||||
|
|
||||||
|
llConectat = DO_CONECTARE(lcTestDir)
|
||||||
|
|
||||||
|
HarnessLog('gnHandle = ' + TRANSFORM(gnHandle))
|
||||||
|
TestAssert(TYPE('goConn') = 'O', 'goConn instantiat chiar si fara conectare')
|
||||||
|
TestAssert(TYPE('gnHandle') = 'N', 'gnHandle este numeric')
|
||||||
|
|
||||||
|
IF llConectat
|
||||||
|
TestAssert(gnHandle > 0, 'conectare reusita la ' + ALLTRIM(goApp.oSettings.host))
|
||||||
|
LOCAL lnSucces
|
||||||
|
lnSucces = goExecutor.oExecute(GetHash('cSql=>select 1 as unu from dual??cCursor=>cPing'))
|
||||||
|
TestAssertEqual(1, lnSucces, 'interogare de test executata')
|
||||||
|
IF USED('cPing')
|
||||||
|
TestAssertEqual(1, cPing.unu, 'baza a raspuns corect')
|
||||||
|
USE IN (SELECT('cPing'))
|
||||||
|
ENDIF
|
||||||
|
goConn.Disconnect()
|
||||||
|
TestAssert(goConn.GetHandle() <= 0, 'deconectare reusita')
|
||||||
|
ELSE
|
||||||
|
HarnessLog('Conectare esuata (host ' + ALLTRIM(goApp.oSettings.host) + ;
|
||||||
|
'). Testul a iesit controlat, fara sa ramana agatat.')
|
||||||
|
TestAssert(gnHandle <= 0, 'esecul de conectare e raportat, nu ascuns')
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
HarnessLog('REZULTAT: ' + TestRezultat())
|
||||||
|
DO HarnessDone WITH TestRezultat()
|
||||||
|
QUIT
|
||||||
|
|
||||||
|
FUNCTION DO_CONECTARE
|
||||||
|
LPARAMETERS tcTestDir
|
||||||
|
LOCAL llOk
|
||||||
|
llOk = .F.
|
||||||
|
DO (tcTestDir + 'test_init_env_auto.prg') WITH .T.
|
||||||
|
SET PROCEDURE TO (tcTestDir + 'ui_harness.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (tcTestDir + 'mock_amessagebox.prg') ADDITIVE
|
||||||
|
DO HarnessInit
|
||||||
|
llOk = (TYPE('gnHandle') = 'N' AND gnHandle > 0)
|
||||||
|
RETURN llOk
|
||||||
|
ENDFUNC
|
||||||
111
Teste/test_export_date.prg
Normal file
111
Teste/test_export_date.prg
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
* test_export_date.prg - test functional pe fluxul REAL de citire a fisierelor de import.
|
||||||
|
* Instantiaza frm_import, seteaza intervalul din controale si apeleaza ExportDate() (pasul pe
|
||||||
|
* care il declanseaza butonul "Import Fidelio&Biz > ROA"), apoi verifica cursoarele rezultate.
|
||||||
|
* Nu are nevoie de Oracle: ExportDate citeste doar XML-urile din folderele din settings.ini.
|
||||||
|
*
|
||||||
|
* Parametri optionali: data de inceput si data de sfarsit ca AAAALLZZ.
|
||||||
|
* vfp9.exe -A -T "Teste\test_export_date.prg" 20250601 20250630
|
||||||
|
* Rulare cu capturi:
|
||||||
|
* powershell -ExecutionPolicy Bypass -File Teste\vfp_ui_harness.ps1 `
|
||||||
|
* -TestPrg 'D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_export_date.prg' -Steps @('afisat','importat')
|
||||||
|
|
||||||
|
LPARAMETERS tcData1, tcData2
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
|
||||||
|
PUBLIC gcUILog, gcSyncDir, gnTestFail, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||||
|
gnTestFail = 0
|
||||||
|
gnMockRaspuns = 6
|
||||||
|
gcMockUltimMesaj = ''
|
||||||
|
gnMockUltimTip = 0
|
||||||
|
|
||||||
|
LOCAL lcTestDir, ldData1, ldData2
|
||||||
|
lcTestDir = ADDBS(JUSTPATH(SYS(16, 0)))
|
||||||
|
gcUILog = lcTestDir + 'test_export_date_log.txt'
|
||||||
|
gcSyncDir = lcTestDir + 'uisync\'
|
||||||
|
IF !DIRECTORY(gcSyncDir)
|
||||||
|
MD (gcSyncDir)
|
||||||
|
ENDIF
|
||||||
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
|
||||||
|
ldData1 = IIF(TYPE('tcData1') = 'C' AND LEN(ALLTRIM(TRANSFORM(tcData1))) = 8, ;
|
||||||
|
DATE(VAL(LEFT(tcData1, 4)), VAL(SUBSTR(tcData1, 5, 2)), VAL(RIGHT(tcData1, 2))), DATE(2025, 6, 1))
|
||||||
|
ldData2 = IIF(TYPE('tcData2') = 'C' AND LEN(ALLTRIM(TRANSFORM(tcData2))) = 8, ;
|
||||||
|
DATE(VAL(LEFT(tcData2, 4)), VAL(SUBSTR(tcData2, 5, 2)), VAL(RIGHT(tcData2, 2))), DATE(2025, 6, 30))
|
||||||
|
|
||||||
|
DO (lcTestDir + 'test_init_env_auto.prg') WITH .F.
|
||||||
|
|
||||||
|
SET PROCEDURE TO (lcTestDir + 'ui_harness.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (lcTestDir + 'mock_amessagebox.prg') ADDITIVE
|
||||||
|
|
||||||
|
DO HarnessInit
|
||||||
|
HarnessLog('Interval cerut: ' + DTOC(ldData1) + ' - ' + DTOC(ldData2))
|
||||||
|
HarnessLog('cale_import_fidelio = ' + goApp.oSettings.cale_import_fidelio)
|
||||||
|
HarnessLog('cale_import_biz = ' + goApp.oSettings.cale_import_biz)
|
||||||
|
HarnessLog('cale_import = ' + goApp.oSettings.cale_import)
|
||||||
|
|
||||||
|
TestAssert(DIRECTORY(ADDBS(ALLTRIM(goApp.oSettings.cale_import_fidelio))), 'exista directorul Fidelio')
|
||||||
|
TestAssert(DIRECTORY(ADDBS(ALLTRIM(goApp.oSettings.cale_import_biz))), 'exista directorul Biz')
|
||||||
|
TestAssert(DIRECTORY(ADDBS(ALLTRIM(goApp.oSettings.cale_import))), 'exista directorul de import')
|
||||||
|
|
||||||
|
PUBLIC goImportFrm
|
||||||
|
DO FORM (gcAppPath + 'frm_import') NAME goImportFrm NOSHOW
|
||||||
|
goImportFrm.WindowType = 0
|
||||||
|
goImportFrm.Show()
|
||||||
|
DOEVENTS FORCE
|
||||||
|
|
||||||
|
DO HarnessStep WITH 0, 'formular afisat'
|
||||||
|
|
||||||
|
* fluxul real: utilizatorul completeaza intervalul in controale, apoi apasa butonul de import
|
||||||
|
goImportFrm.txtData1.Value = ldData1
|
||||||
|
goImportFrm.txtData2.Value = ldData2
|
||||||
|
goImportFrm.chkTest.Value = 1
|
||||||
|
LOCAL lnSucces
|
||||||
|
lnSucces = goImportFrm.ExportDate()
|
||||||
|
DOEVENTS FORCE
|
||||||
|
|
||||||
|
HarnessLog('ExportDate a returnat ' + TRANSFORM(lnSucces))
|
||||||
|
TestAssertEqual(1, lnSucces, 'ExportDate returneaza CT_SUCCES')
|
||||||
|
|
||||||
|
LOCAL lnFidelio, lnIntrari, lnIesiri, lnVanzari, lnPart
|
||||||
|
lnFidelio = IIF(USED('cFacturiFidelio'), RECCOUNT('cFacturiFidelio'), -1)
|
||||||
|
lnIntrari = IIF(USED('cIntrariRestaurant'), RECCOUNT('cIntrariRestaurant'), -1)
|
||||||
|
lnIesiri = IIF(USED('cIesiriRestaurant'), RECCOUNT('cIesiriRestaurant'), -1)
|
||||||
|
lnVanzari = IIF(USED('cVanzariRestaurant'), RECCOUNT('cVanzariRestaurant'), -1)
|
||||||
|
lnPart = IIF(USED('nPart'), RECCOUNT('nPart'), -1)
|
||||||
|
HarnessLog('Randuri citite: facturi Fidelio=' + TRANSFORM(lnFidelio) + ' intrari=' + TRANSFORM(lnIntrari) + ;
|
||||||
|
' iesiri=' + TRANSFORM(lnIesiri) + ' vanzari=' + TRANSFORM(lnVanzari) + ' parteneri=' + TRANSFORM(lnPart))
|
||||||
|
|
||||||
|
TestAssert(lnFidelio >= 0, 'cursorul cFacturiFidelio exista')
|
||||||
|
TestAssert(lnIntrari >= 0, 'cursorul cIntrariRestaurant exista')
|
||||||
|
TestAssert(lnIesiri >= 0, 'cursorul cIesiriRestaurant exista')
|
||||||
|
TestAssert(lnVanzari >= 0, 'cursorul cVanzariRestaurant exista')
|
||||||
|
TestAssert(lnPart >= 0, 'cursorul nPart exista')
|
||||||
|
TestAssert(lnFidelio + lnIntrari + lnIesiri + lnVanzari > 0, ;
|
||||||
|
's-au citit randuri din fisierele intervalului')
|
||||||
|
|
||||||
|
* datele citite trebuie sa fie DOAR din intervalul cerut (filtrul pe numele fisierului)
|
||||||
|
IF lnVanzari > 0
|
||||||
|
LOCAL lnInAfara
|
||||||
|
SELECT cVanzariRestaurant
|
||||||
|
COUNT FOR !BETWEEN(CTOD(LEFT(ALLTRIM(NVL(datadocument, '')), 10)), ldData1, ldData2) ;
|
||||||
|
AND !EMPTY(ALLTRIM(NVL(datadocument, ''))) TO lnInAfara
|
||||||
|
TestAssertEqual(0, lnInAfara, 'vanzarile citite sunt in intervalul cerut')
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
* cheia externa de partener se calculeaza pentru toate randurile
|
||||||
|
IF lnPart > 0
|
||||||
|
LOCAL lnFaraCod
|
||||||
|
SELECT nPart
|
||||||
|
COUNT FOR EMPTY(NVL(cod, '')) TO lnFaraCod
|
||||||
|
TestAssertEqual(0, lnFaraCod, 'toti partenerii au cod cheie externa calculat')
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
DO HarnessStep WITH 1, 'import citit: ' + TRANSFORM(lnFidelio + lnIntrari + lnIesiri + lnVanzari) + ' randuri'
|
||||||
|
|
||||||
|
HarnessLog('REZULTAT: ' + TestRezultat())
|
||||||
|
DO HarnessDone WITH TestRezultat()
|
||||||
|
|
||||||
|
goImportFrm.Release()
|
||||||
|
QUIT
|
||||||
82
Teste/test_frm_import_ui.prg
Normal file
82
Teste/test_frm_import_ui.prg
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
* test_frm_import_ui.prg - test UI smoke pentru formularul real frm_import.
|
||||||
|
* Verifica pornirea aplicatiei fara Oracle: mediul se initializeaza, formularul se instantiaza,
|
||||||
|
* Init completeaza intervalul de date din settings.ini, iar metoda Trace scrie in edtInfo.
|
||||||
|
*
|
||||||
|
* Rulare (orchestrator + capturi):
|
||||||
|
* powershell -ExecutionPolicy Bypass -File Teste\vfp_ui_harness.ps1 `
|
||||||
|
* -TestPrg 'D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_frm_import_ui.prg' `
|
||||||
|
* -Steps @('afisat','trace','date')
|
||||||
|
* Rulare fara capturi: vfp9.exe -A -T "Teste\test_frm_import_ui.prg" (auto-continue la 30s/pas)
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
|
||||||
|
PUBLIC gcUILog, gcSyncDir, gnTestFail, gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
||||||
|
gnTestFail = 0
|
||||||
|
gnMockRaspuns = 6
|
||||||
|
gcMockUltimMesaj = ''
|
||||||
|
gnMockUltimTip = 0
|
||||||
|
|
||||||
|
LOCAL lcTestDir
|
||||||
|
lcTestDir = ADDBS(JUSTPATH(SYS(16, 0)))
|
||||||
|
gcUILog = lcTestDir + 'test_frm_import_ui_log.txt'
|
||||||
|
gcSyncDir = lcTestDir + 'uisync\'
|
||||||
|
IF !DIRECTORY(gcSyncDir)
|
||||||
|
MD (gcSyncDir)
|
||||||
|
ENDIF
|
||||||
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
||||||
|
|
||||||
|
DO (lcTestDir + 'test_init_env_auto.prg') WITH .F.
|
||||||
|
|
||||||
|
SET PROCEDURE TO (lcTestDir + 'ui_harness.prg') ADDITIVE
|
||||||
|
* mock-ul de dialoguri se incarca ULTIMUL, ca sa umbreasca amessagebox din myutils.prg
|
||||||
|
SET PROCEDURE TO (lcTestDir + 'mock_amessagebox.prg') ADDITIVE
|
||||||
|
|
||||||
|
DO HarnessInit
|
||||||
|
HarnessLog('Mediu initializat. goApp=' + TYPE('goApp') + ' goExecutor=' + TYPE('goExecutor') + ;
|
||||||
|
' goConn=' + TYPE('goConn'))
|
||||||
|
|
||||||
|
TestAssert(TYPE('goApp') = 'O', 'goApp instantiat')
|
||||||
|
TestAssert(TYPE('goExecutor') = 'O', 'goExecutor instantiat')
|
||||||
|
TestAssert(TYPE('goConn') = 'O', 'goConn instantiat')
|
||||||
|
TestAssert(TYPE('goApp.oSettings') = 'O', 'settings.ini citit in goApp.oSettings')
|
||||||
|
|
||||||
|
PUBLIC goImportFrm
|
||||||
|
DO FORM (gcAppPath + 'frm_import') NAME goImportFrm NOSHOW
|
||||||
|
* modeless: Show(1) pe un formular modal nu returneaza si blocheaza testul headless
|
||||||
|
goImportFrm.WindowType = 0
|
||||||
|
goImportFrm.Show()
|
||||||
|
goImportFrm.WindowState = 2
|
||||||
|
DOEVENTS FORCE
|
||||||
|
|
||||||
|
TestAssert(TYPE('goImportFrm') = 'O', 'frm_import instantiat')
|
||||||
|
TestAssert(TYPE('goImportFrm.txtData1.Value') = 'D', 'txtData1 are valoare data')
|
||||||
|
TestAssert(TYPE('goImportFrm.txtData2.Value') = 'D', 'txtData2 are valoare data')
|
||||||
|
TestAssert(goImportFrm.txtData1.Value <= goImportFrm.txtData2.Value, ;
|
||||||
|
'interval valid: ' + DTOC(goImportFrm.txtData1.Value) + ' - ' + DTOC(goImportFrm.txtData2.Value))
|
||||||
|
TestAssertEqual(1, goImportFrm.chkTest.Value, 'bifa Test activa implicit (nu scrie note in ROA)')
|
||||||
|
|
||||||
|
DO HarnessStep WITH 0, 'formular afisat'
|
||||||
|
|
||||||
|
* Trace este canalul prin care formularul raporteaza progresul importului
|
||||||
|
goImportFrm.Trace('Verificare harness: mesaj de test')
|
||||||
|
DOEVENTS FORCE
|
||||||
|
TestAssert('Verificare harness' $ goImportFrm.edtInfo.Value, 'Trace scrie in edtInfo')
|
||||||
|
|
||||||
|
DO HarnessStep WITH 1, 'trace scris in edtInfo'
|
||||||
|
|
||||||
|
* schimbarea intervalului se reflecta in controale (fluxul real al utilizatorului)
|
||||||
|
goImportFrm.txtData1.Value = DATE(2025, 6, 1)
|
||||||
|
goImportFrm.txtData2.Value = DATE(2025, 6, 30)
|
||||||
|
goImportFrm.Refresh()
|
||||||
|
DOEVENTS FORCE
|
||||||
|
TestAssertEqual(DATE(2025, 6, 1), goImportFrm.txtData1.Value, 'data inceput modificata')
|
||||||
|
TestAssertEqual(DATE(2025, 6, 30), goImportFrm.txtData2.Value, 'data sfarsit modificata')
|
||||||
|
|
||||||
|
DO HarnessStep WITH 2, 'interval 06/2025 setat'
|
||||||
|
|
||||||
|
HarnessLog('REZULTAT: ' + TestRezultat())
|
||||||
|
DO HarnessDone WITH TestRezultat()
|
||||||
|
|
||||||
|
goImportFrm.Release()
|
||||||
|
QUIT
|
||||||
55
Teste/test_helpers.prg
Normal file
55
Teste/test_helpers.prg
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
* test_helpers.prg - proceduri comune testelor FLORA2ROA (handler de erori headless + aserturi).
|
||||||
|
* Se incarca automat din test_init_env_auto.prg cu SET PROCEDURE ... ADDITIVE.
|
||||||
|
* TestErrorHandler - ON ERROR pentru rulare fara consola: logheaza si continua
|
||||||
|
* TestAssert(cond, mesaj) - PASS/FAIL in log; incrementeaza gnTestFail la esec
|
||||||
|
* TestAssertEqual(asteptat, obtinut, mesaj)
|
||||||
|
* TestRezultat() - 'PASS'/'FAIL' + numarul de aserturi picate
|
||||||
|
* TestLog(mesaj) - scrie in gcUILog (harness) sau in gcTestErrLog
|
||||||
|
|
||||||
|
PROCEDURE TestErrorHandler
|
||||||
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
||||||
|
LOCAL lcLinie
|
||||||
|
lcLinie = TTOC(DATETIME()) + ' EROARE ' + TRANSFORM(tnError) + ': ' + TRANSFORM(tcMessage) + ;
|
||||||
|
' | program: ' + TRANSFORM(tcProgram) + ' | linia: ' + TRANSFORM(tnLine)
|
||||||
|
IF TYPE('gcTestErrLog') = 'C' AND !EMPTY(gcTestErrLog)
|
||||||
|
SET SAFETY OFF
|
||||||
|
STRTOFILE(lcLinie + CHR(13) + CHR(10), gcTestErrLog, .T.)
|
||||||
|
ENDIF
|
||||||
|
TestLog(lcLinie)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE TestLog
|
||||||
|
LPARAMETERS tcMesaj
|
||||||
|
IF TYPE('gcUILog') = 'C' AND !EMPTY(gcUILog)
|
||||||
|
DO HarnessLog WITH TRANSFORM(tcMesaj)
|
||||||
|
ENDIF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
FUNCTION TestAssert
|
||||||
|
LPARAMETERS tlConditie, tcMesaj
|
||||||
|
IF TYPE('gnTestFail') <> 'N'
|
||||||
|
PUBLIC gnTestFail
|
||||||
|
gnTestFail = 0
|
||||||
|
ENDIF
|
||||||
|
IF tlConditie
|
||||||
|
TestLog('PASS: ' + TRANSFORM(tcMesaj))
|
||||||
|
ELSE
|
||||||
|
gnTestFail = gnTestFail + 1
|
||||||
|
TestLog('FAIL: ' + TRANSFORM(tcMesaj))
|
||||||
|
ENDIF
|
||||||
|
RETURN tlConditie
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
FUNCTION TestAssertEqual
|
||||||
|
LPARAMETERS tuAsteptat, tuObtinut, tcMesaj
|
||||||
|
LOCAL llEgal
|
||||||
|
llEgal = (TRANSFORM(tuAsteptat) == TRANSFORM(tuObtinut))
|
||||||
|
RETURN TestAssert(llEgal, TRANSFORM(tcMesaj) + ' [asteptat: ' + TRANSFORM(tuAsteptat) + ;
|
||||||
|
' | obtinut: ' + TRANSFORM(tuObtinut) + ']')
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
FUNCTION TestRezultat
|
||||||
|
LOCAL lnFail
|
||||||
|
lnFail = IIF(TYPE('gnTestFail') = 'N', gnTestFail, 0)
|
||||||
|
RETURN IIF(lnFail = 0, 'PASS', 'FAIL (' + TRANSFORM(lnFail) + ' aserturi picate)')
|
||||||
|
ENDFUNC
|
||||||
102
Teste/test_init_env_auto.prg
Normal file
102
Teste/test_init_env_auto.prg
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
* test_init_env_auto.prg
|
||||||
|
* Initializare NEINTERACTIVA a mediului FLORA2ROA pentru rulare headless
|
||||||
|
* (vfp9.exe -A -T "script.prg"), echivalentul programului principal main.prg fara
|
||||||
|
* DO FORM / READ EVENTS.
|
||||||
|
*
|
||||||
|
* Utilizare dintr-un script de test:
|
||||||
|
* DO Teste\test_init_env_auto WITH .F. && fara conectare Oracle (implicit)
|
||||||
|
* DO Teste\test_init_env_auto WITH .T. && conectare cu datele din settings.ini
|
||||||
|
* DO Teste\test_init_env_auto WITH .T., 'ROA', 'XENOTI', 'parola'
|
||||||
|
*
|
||||||
|
* Parametri:
|
||||||
|
* tlConnect - .T. = se conecteaza la Oracle (goConn.Connect); implicit .F.
|
||||||
|
* tcHost/tcUser/tcPassword - suprascriu datele din settings.ini
|
||||||
|
* tcAppPath - radacina aplicatiei; implicit se deduce din calea acestui program
|
||||||
|
*
|
||||||
|
* Dupa apel sunt disponibile: gcAppName, gcAppPath, gcTempPath, goLog, goApp, goConn,
|
||||||
|
* goExecutor, gnHandle si SET PROCEDURE / SET LIBRARY ca in main.prg. Se poate face
|
||||||
|
* CREATEOBJECT('frm_import') sau DO FORM frm_import si apela metodele punctual.
|
||||||
|
*
|
||||||
|
* ATENTIE: ErrorHandler-ul din main.prg deschide MESSAGEBOX (blocheaza headless). Aici se
|
||||||
|
* instaleaza TestErrorHandler (test_helpers.prg), care logheaza in gcTestErrLog si continua.
|
||||||
|
|
||||||
|
LPARAMETERS tlConnect, tcHost, tcUser, tcPassword, tcAppPath
|
||||||
|
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
CLOSE DATABASES ALL
|
||||||
|
SET DELETED ON
|
||||||
|
SET EXCLUSIVE ON
|
||||||
|
SET ANSI ON
|
||||||
|
SET EXACT ON
|
||||||
|
SET CENTURY ON
|
||||||
|
SET DATE DMY
|
||||||
|
SET NULLDISPLAY TO ''
|
||||||
|
|
||||||
|
PUBLIC gcAppName, gcAppPath, gcTempPath, gcTestErrLog
|
||||||
|
PUBLIC goApp, goLog, goConn, goExecutor, goImportFrm, gnHandle
|
||||||
|
|
||||||
|
LOCAL lcHere
|
||||||
|
lcHere = ADDBS(JUSTPATH(SYS(16, 0)))
|
||||||
|
IF TYPE('tcAppPath') = 'C' AND !EMPTY(tcAppPath)
|
||||||
|
gcAppPath = ADDBS(tcAppPath)
|
||||||
|
ELSE
|
||||||
|
* scriptul sta in <radacina>\Teste\, deci radacina e cu un nivel mai sus
|
||||||
|
gcAppPath = ADDBS(JUSTPATH(SUBSTR(lcHere, 1, LEN(lcHere) - 1)))
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
gcAppName = 'FLORA2ROA'
|
||||||
|
gcTempPath = GETENV("TEMP")
|
||||||
|
gcTestErrLog = gcAppPath + 'Teste\_erori_test.txt'
|
||||||
|
SET DEFAULT TO (gcAppPath)
|
||||||
|
SET PATH TO (gcAppPath) ADDITIVE
|
||||||
|
SET PATH TO (gcAppPath + 'Teste') ADDITIVE
|
||||||
|
|
||||||
|
* aceleasi fisiere de proceduri ca in main.prg; mock-urile se incarca DUPA, in test
|
||||||
|
SET PROCEDURE TO (gcAppPath + 'capp.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (gcAppPath + 'app.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (gcAppPath + 'myutils.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (gcAppPath + 'vfpconnection_utils.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (gcAppPath + 'myapp.prg') ADDITIVE
|
||||||
|
SET PROCEDURE TO (gcAppPath + 'Teste\test_helpers.prg') ADDITIVE
|
||||||
|
|
||||||
|
LOCAL lnLib, lcLib
|
||||||
|
FOR lnLib = 1 TO 2
|
||||||
|
lcLib = IIF(lnLib = 1, 'vfpconnection.fll', 'vfpencryption.fll')
|
||||||
|
IF FILE(gcAppPath + lcLib)
|
||||||
|
TRY
|
||||||
|
SET LIBRARY TO (gcAppPath + lcLib) ADDITIVE
|
||||||
|
CATCH
|
||||||
|
STRTOFILE('Nu s-a putut incarca ' + lcLib + CHR(13) + CHR(10), gcTestErrLog, .T.)
|
||||||
|
ENDTRY
|
||||||
|
ENDIF
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
ON ERROR DO TestErrorHandler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
||||||
|
|
||||||
|
goImportFrm = NULL
|
||||||
|
goConn = CREATEOBJECT("oConn")
|
||||||
|
goExecutor = CREATEOBJECT("oExecutor")
|
||||||
|
goLog = CREATEOBJECT("Log", gcAppPath + "log\log_test_" + gcAppName + "_" + DTOS(DATE()) + ".txt")
|
||||||
|
goApp = CREATEOBJECT("MyApp")
|
||||||
|
gnHandle = 0
|
||||||
|
|
||||||
|
IF TYPE('tcHost') = 'C' AND !EMPTY(tcHost)
|
||||||
|
goApp.oSettings.host = ALLTRIM(tcHost)
|
||||||
|
ENDIF
|
||||||
|
IF TYPE('tcUser') = 'C' AND !EMPTY(tcUser)
|
||||||
|
goApp.oSettings.user = ALLTRIM(tcUser)
|
||||||
|
ENDIF
|
||||||
|
IF TYPE('tcPassword') = 'C' AND !EMPTY(tcPassword)
|
||||||
|
goApp.oSettings.password = ALLTRIM(tcPassword)
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF TYPE('tlConnect') = 'L' AND tlConnect
|
||||||
|
goConn.Connect()
|
||||||
|
gnHandle = goConn.GetHandle()
|
||||||
|
IF gnHandle <= 0
|
||||||
|
RETURN .F.
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
RETURN .T.
|
||||||
35
Teste/text_din_bin.ps1
Normal file
35
Teste/text_din_bin.ps1
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Genereaza/improspateaza versiunile TEXT (.sc2/.vc2/.pj2) ale binarelor VFP din FLORA2ROA.
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Wrapper peste D:\ROA\UTIL\foxbin2prg\git_sync.ps1 cu parametrii acestui proiect (flux
|
||||||
|
in-arbore: textul sta LANGA binar, nu intr-un cache extern). Git urmareste textele .??2;
|
||||||
|
binarele VFP sunt git-ignored, iar SVN ramane sursa de adevar pentru ele.
|
||||||
|
|
||||||
|
Se ruleaza la inceput de sesiune si INAINTE de orice git commit, ca textele sa reflecte
|
||||||
|
binarele curente. Conversia e incrementala si nu atinge niciodata binarele.
|
||||||
|
|
||||||
|
Fluxul complet si capcanele: COMUN\docs\flux-editare-vfp-text.md,
|
||||||
|
COMUN\docs\inrolare-proiect-git-text.md.
|
||||||
|
|
||||||
|
.PARAMETER Force
|
||||||
|
Reconverteste chiar daca textul e la zi.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\text_din_bin.ps1
|
||||||
|
#>
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[string]$ProjectRoot,
|
||||||
|
[switch]$Force
|
||||||
|
)
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
if (-not $ProjectRoot) { $ProjectRoot = Split-Path $PSScriptRoot -Parent }
|
||||||
|
$tool = 'D:\ROA\UTIL\foxbin2prg\git_sync.ps1'
|
||||||
|
if (-not (Test-Path $tool)) { throw "Nu gasesc $tool (tooling-ul partajat FoxBin2Prg)." }
|
||||||
|
|
||||||
|
# -DbfList gol: proiectul nu are tabele de configurare de urmarit ca text
|
||||||
|
& $tool -ProjectRoot $ProjectRoot -DbfList @() -Force:$Force
|
||||||
|
exit $LASTEXITCODE
|
||||||
64
Teste/ui_harness.prg
Normal file
64
Teste/ui_harness.prg
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
* ui_harness.prg - proceduri reutilizabile pentru teste UI VFP cu handshake pe semafoare.
|
||||||
|
* Un test seteaza PUBLIC gcSyncDir (folder semafoare, cu \ final) si gcUILog (fisier log),
|
||||||
|
* apoi SET PROCEDURE TO ui_harness ADDITIVE si foloseste:
|
||||||
|
* HarnessLog(mesaj) - scrie o linie in log
|
||||||
|
* HarnessStep(n, mesaj [, autoSec]) - semnaleaza pasul n gata + asteapta continuarea
|
||||||
|
* HarnessReady(n, mesaj) / HarnessWaitContinue(n [, autoSec]) - variantele separate
|
||||||
|
* HarnessDone([status]) - scrie done.txt
|
||||||
|
* HarnessWaitContinue asteapta cont_<n>.txt; daca nu apare in autoSec secunde (implicit 30),
|
||||||
|
* continua singur (auto-continue) => testul merge si FARA orchestrator (doar log, fara capturi).
|
||||||
|
|
||||||
|
PROCEDURE HarnessInit
|
||||||
|
*-- defensiv: SAFETY OFF ca STRTOFILE peste un fisier existent sa nu scoata dialogul modal
|
||||||
|
*-- "overwrite?" (blocheaza headless); TALK OFF ca SUM/CALCULATE sa nu deseneze pe desktop.
|
||||||
|
*-- Un test ar trebui sa faca oricum SET SAFETY OFF INAINTE de prima lui scriere de log.
|
||||||
|
SET SAFETY OFF
|
||||||
|
SET TALK OFF
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE HarnessLog
|
||||||
|
LPARAMETERS tcMsg
|
||||||
|
IF TYPE('gcUILog') <> 'C' OR EMPTY(gcUILog)
|
||||||
|
RETURN
|
||||||
|
ENDIF
|
||||||
|
SET SAFETY OFF
|
||||||
|
LOCAL lcL
|
||||||
|
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
|
||||||
|
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE HarnessReady
|
||||||
|
LPARAMETERS tnStep, tcNote
|
||||||
|
SET SAFETY OFF
|
||||||
|
STRTOFILE(TTOC(DATETIME()) + ' ' + tcNote + CHR(13)+CHR(10), gcSyncDir + 'ready_' + TRANSFORM(tnStep) + '.txt')
|
||||||
|
HarnessLog('READY ' + TRANSFORM(tnStep) + ' - ' + tcNote)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
FUNCTION HarnessWaitContinue
|
||||||
|
LPARAMETERS tnStep, tnAutoSec
|
||||||
|
LOCAL lcCont, lnMax, lnI, llPrimit
|
||||||
|
lcCont = gcSyncDir + 'cont_' + TRANSFORM(tnStep) + '.txt'
|
||||||
|
lnMax = IIF(TYPE('tnAutoSec') = 'N' AND tnAutoSec > 0, tnAutoSec, 30)
|
||||||
|
lnI = 0
|
||||||
|
DO WHILE !FILE(lcCont) AND lnI < (lnMax * 5)
|
||||||
|
lnI = lnI + 1
|
||||||
|
DOEVENTS FORCE
|
||||||
|
= INKEY(0.2)
|
||||||
|
ENDDO
|
||||||
|
llPrimit = FILE(lcCont)
|
||||||
|
HarnessLog('CONTINUE ' + TRANSFORM(tnStep) + IIF(llPrimit, ' (semnal primit)', ' (auto-continue dupa ' + TRANSFORM(lnMax) + 's)'))
|
||||||
|
RETURN llPrimit
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
PROCEDURE HarnessStep
|
||||||
|
LPARAMETERS tnStep, tcNote, tnAutoSec
|
||||||
|
HarnessReady(tnStep, tcNote)
|
||||||
|
HarnessWaitContinue(tnStep, tnAutoSec)
|
||||||
|
ENDPROC
|
||||||
|
|
||||||
|
PROCEDURE HarnessDone
|
||||||
|
LPARAMETERS tcStatus
|
||||||
|
SET SAFETY OFF
|
||||||
|
STRTOFILE(IIF(EMPTY(tcStatus), 'done', tcStatus) + ' ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcSyncDir + 'done.txt')
|
||||||
|
HarnessLog('GATA')
|
||||||
|
ENDPROC
|
||||||
128
Teste/verifica_sintaxa.ps1
Normal file
128
Teste/verifica_sintaxa.ps1
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Verificare de sintaxa prin compilare headless a fisierelor .prg din FLORA2ROA.
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
Cel mai ieftin test dupa orice editare de .prg (vezi COMUN\docs\depanare_testare_vfp.md, sect. 4).
|
||||||
|
Compileaza COPII ale fisierelor intr-un folder temporar, ca .fxp-urile si .err-urile generate
|
||||||
|
sa nu murdareasca arborele proiectului. VFP nu rezolva simboluri externe la compilare, deci
|
||||||
|
copia izolata e suficienta pentru sintaxa.
|
||||||
|
|
||||||
|
Toate fisierele se compileaza intr-o SINGURA rulare vfp9: lansarile repetate de vfp9 din
|
||||||
|
aceeasi sesiune PowerShell esueaza tacut (procesul porneste dar nu executa - vezi
|
||||||
|
COMUN\docs\testare-ui-vfp.md, capcana d).
|
||||||
|
|
||||||
|
Verdict per fisier: existenta unui <nume>.err dupa compilare. Se raporteaza si liniile mai
|
||||||
|
lungi de 250 de caractere (capcana VFP: literal/linie prea lunga = eroare de compilare sau
|
||||||
|
eroare 11 derutanta la runtime).
|
||||||
|
|
||||||
|
NU inlocuieste testul functional: prinde sintaxa, nu apeluri catre metode inexistente.
|
||||||
|
|
||||||
|
.PARAMETER Files
|
||||||
|
Fisiere .prg de verificat. Implicit toate .prg-urile din radacina proiectului si din Teste\.
|
||||||
|
|
||||||
|
.PARAMETER ProjectRoot
|
||||||
|
Radacina proiectului (implicit folderul parinte al acestui script).
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\verifica_sintaxa.ps1
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\verifica_sintaxa.ps1 -Files myutils.prg,app.prg
|
||||||
|
#>
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[string[]]$Files,
|
||||||
|
[string]$ProjectRoot,
|
||||||
|
[int]$MaxLineLen = 250,
|
||||||
|
[string]$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||||
|
)
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
if (-not $ProjectRoot) { $ProjectRoot = Split-Path $PSScriptRoot -Parent }
|
||||||
|
if (-not (Test-Path $Vfp)) { throw "Nu gasesc vfp9.exe: $Vfp" }
|
||||||
|
|
||||||
|
if (-not $Files) {
|
||||||
|
$Files = @(Get-ChildItem -Path $ProjectRoot -Filter '*.prg' -File | ForEach-Object { $_.FullName })
|
||||||
|
$Files += @(Get-ChildItem -Path (Join-Path $ProjectRoot 'Teste') -Filter '*.prg' -File -ErrorAction SilentlyContinue | ForEach-Object { $_.FullName })
|
||||||
|
}
|
||||||
|
$Files = $Files | ForEach-Object { if ([IO.Path]::IsPathRooted($_)) { $_ } else { Join-Path $ProjectRoot $_ } }
|
||||||
|
|
||||||
|
$work = Join-Path $env:TEMP ('flora2roa_syntax_' + [Guid]::NewGuid().ToString('N').Substring(0,8))
|
||||||
|
New-Item -ItemType Directory -Force -Path $work | Out-Null
|
||||||
|
|
||||||
|
# fisierele .h referite prin #INCLUDE trebuie sa fie langa copie, altfel compilarea da eroare
|
||||||
|
Get-ChildItem -Path $ProjectRoot -Filter '*.h' -File -ErrorAction SilentlyContinue |
|
||||||
|
ForEach-Object { Copy-Item $_.FullName (Join-Path $work $_.Name) -Force }
|
||||||
|
|
||||||
|
# omoara doar instantele vfp9 proprii (linia de comanda contine folderul de lucru temporar)
|
||||||
|
function Stop-VfpProprii([string]$Marker) {
|
||||||
|
Get-CimInstance Win32_Process -Filter "Name='vfp9.exe'" -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
if ($_.CommandLine -and $_.CommandLine.ToLower().Contains($Marker.ToLower())) {
|
||||||
|
Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# copiaza sursele + strange liniile prea lungi (analiza statica, fara VFP)
|
||||||
|
$copii = @()
|
||||||
|
$liniiLungi = @{}
|
||||||
|
foreach ($f in $Files) {
|
||||||
|
if (-not (Test-Path $f)) { Write-Warning "lipsa: $f"; continue }
|
||||||
|
$nume = [IO.Path]::GetFileName($f)
|
||||||
|
$copie = Join-Path $work $nume
|
||||||
|
Copy-Item -LiteralPath $f -Destination $copie -Force
|
||||||
|
$copii += [pscustomobject]@{ Nume = $nume; Sursa = $f; Copie = $copie }
|
||||||
|
|
||||||
|
$lungi = @()
|
||||||
|
$linii = [IO.File]::ReadAllLines($f, [Text.Encoding]::GetEncoding(1252))
|
||||||
|
for ($i = 0; $i -lt $linii.Length; $i++) {
|
||||||
|
if ($linii[$i].Length -gt $MaxLineLen) { $lungi += ('{0} (len={1})' -f ($i + 1), $linii[$i].Length) }
|
||||||
|
}
|
||||||
|
if ($lungi) { $liniiLungi[$nume] = ($lungi -join '; ') }
|
||||||
|
}
|
||||||
|
if (-not $copii) { Write-Host 'Nimic de verificat.'; return }
|
||||||
|
|
||||||
|
# un singur .prg care compileaza toate copiile (SAFETY OFF: fara dialog "overwrite?" headless)
|
||||||
|
$linii = @('SET SAFETY OFF', 'SET TALK OFF')
|
||||||
|
foreach ($c in $copii) { $linii += ('lcT = "{0}"' -f $c.Copie); $linii += 'COMPILE (lcT)' }
|
||||||
|
$linii += 'STRTOFILE("gata", "' + (Join-Path $work '_gata.txt') + '")'
|
||||||
|
$linii += 'QUIT'
|
||||||
|
$tmpPrg = Join-Path $work '_compile_all.prg'
|
||||||
|
Set-Content -Path $tmpPrg -Value (($linii -join "`r`n") + "`r`n") -Encoding ascii
|
||||||
|
|
||||||
|
# -A ignora config.fpw implicit, -T sare peste splash; ambele obligatorii headless
|
||||||
|
$p = Start-Process -FilePath $Vfp -ArgumentList @('-A', '-T', "`"$tmpPrg`"") -PassThru -WindowStyle Minimized
|
||||||
|
if (-not $p.WaitForExit(180000)) { Write-Warning 'Timeout la compilare (180s).'; try { $p.Kill() } catch {} }
|
||||||
|
Stop-VfpProprii $work
|
||||||
|
if (-not (Test-Path (Join-Path $work '_gata.txt'))) {
|
||||||
|
Write-Warning 'Compilarea nu a ajuns la final - verdictul per fisier poate fi incomplet.'
|
||||||
|
}
|
||||||
|
|
||||||
|
$rezultate = foreach ($c in $copii) {
|
||||||
|
$err = [IO.Path]::ChangeExtension($c.Copie, 'err')
|
||||||
|
$fxp = [IO.Path]::ChangeExtension($c.Copie, 'fxp')
|
||||||
|
$erori = if (Test-Path $err) { (Get-Content -Raw $err).Trim() } else { '' }
|
||||||
|
[pscustomobject]@{
|
||||||
|
Fisier = $c.Nume
|
||||||
|
Sintaxa = if ($erori) { 'ERORI' } elseif (Test-Path $fxp) { 'OK' } else { 'NECOMPILAT' }
|
||||||
|
Erori = $erori
|
||||||
|
LiniiLungi = $(if ($liniiLungi.ContainsKey($c.Nume)) { $liniiLungi[$c.Nume] } else { '' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Remove-Item -Recurse -Force $work -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
$rezultate | Format-Table Fisier, Sintaxa -AutoSize
|
||||||
|
foreach ($r in $rezultate | Where-Object { $_.Erori }) {
|
||||||
|
Write-Host ''
|
||||||
|
Write-Warning ("ERORI in {0}:`n{1}" -f $r.Fisier, $r.Erori)
|
||||||
|
}
|
||||||
|
foreach ($r in $rezultate | Where-Object { $_.LiniiLungi }) {
|
||||||
|
Write-Host ''
|
||||||
|
Write-Warning ("Linii peste $MaxLineLen caractere in {0}: {1}" -f $r.Fisier, $r.LiniiLungi)
|
||||||
|
}
|
||||||
|
$nrProbleme = @($rezultate | Where-Object { $_.Sintaxa -ne 'OK' }).Count
|
||||||
|
Write-Host ''
|
||||||
|
Write-Host ("Gata. Fisiere verificate: {0} Cu probleme: {1}" -f @($rezultate).Count, $nrProbleme)
|
||||||
|
exit ([int]($nrProbleme -gt 0))
|
||||||
231
Teste/vfp_ui_harness.ps1
Normal file
231
Teste/vfp_ui_harness.ps1
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
# vfp_ui_harness.ps1 - harness reutilizabil pentru teste UI VFP cu capturi de ecran.
|
||||||
|
# Lanseaza un test VFP care afiseaza un formular real, il conduce pas cu pas prin semafoare
|
||||||
|
# (ready_<n>.txt scris de test <-> cont_<n>.txt scris de harness), face un screenshot dupa
|
||||||
|
# fiecare pas si il valideaza. Testul VFP foloseste procedurile din ui_harness.prg.
|
||||||
|
#
|
||||||
|
# Exemplu:
|
||||||
|
# powershell -ExecutionPolicy Bypass -File vfp_ui_harness.ps1 `
|
||||||
|
# -TestPrg 'D:\...\test_x_ui.prg' -Steps @('afisat','actiune1','actiune2')
|
||||||
|
#
|
||||||
|
# Capcane rezolvate (vezi docs\testare-ui-vfp.md): precompilare izolata, lansare .fxp,
|
||||||
|
# detectie pornire pe mtime log, timeout-uri generoase, kill zombi vfp9.
|
||||||
|
#
|
||||||
|
# FARA FURT DE FOCUS (cerinta Marius, 17/07/2026): capturile NU mai folosesc
|
||||||
|
# Graphics.CopyFromScreen (poza ecranului intreg - fura focus / se corupe daca utilizatorul
|
||||||
|
# lucreaza in paralel). Se foloseste PrintWindow pe handle-ul ferestrei vfp9 + fereastra e
|
||||||
|
# mutata OFF-SCREEN (x=-4000, HWND_BOTTOM, SWP_NOACTIVATE) imediat ce apare handle-ul si
|
||||||
|
# re-impinsa inainte de fiecare pas (VFP isi poate re-activa fereastra la Show()/dialoguri).
|
||||||
|
# Fereastra ramane "visible" pentru GDI (PrintWindow merge), doar nu e pe ecranul vizibil
|
||||||
|
# utilizatorului si nu ia focus.
|
||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)][string]$TestPrg,
|
||||||
|
[Parameter(Mandatory=$true)][string[]]$Steps, # etichete pentru pasii 0..N-1
|
||||||
|
[int]$StepTimeoutSec = 130, # cat astept fiecare ready_<n> (dupa pas 0)
|
||||||
|
[int]$ReadyTimeoutSec = 180, # cat astept ready_0 (afisarea formularului, incarcare lenta)
|
||||||
|
[string]$ShotsDir,
|
||||||
|
[string]$SyncDir,
|
||||||
|
[string]$Vfp = 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe'
|
||||||
|
)
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
|
$TestDir = [System.IO.Path]::GetDirectoryName($TestPrg)
|
||||||
|
$TestFxp = [System.IO.Path]::ChangeExtension($TestPrg, 'fxp')
|
||||||
|
$TestLog = [System.IO.Path]::ChangeExtension($TestPrg, $null) + '_log.txt'
|
||||||
|
if (-not $SyncDir) { $SyncDir = Join-Path $TestDir 'uisync' }
|
||||||
|
if (-not $ShotsDir) { $ShotsDir = Join-Path $TestDir 'screenshots' }
|
||||||
|
$Precompile = Join-Path $PSScriptRoot '_precompile.ps1'
|
||||||
|
|
||||||
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
|
Add-Type -AssemblyName System.Drawing
|
||||||
|
|
||||||
|
Add-Type @"
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
public class Win32Ui {
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct RECT { public int Left, Top, Right, Bottom; }
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool PrintWindow(IntPtr hwnd, IntPtr hdc, uint nFlags);
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool IsWindow(IntPtr hWnd);
|
||||||
|
public static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
|
||||||
|
public const uint SWP_NOSIZE = 0x0001;
|
||||||
|
public const uint SWP_NOACTIVATE = 0x0010;
|
||||||
|
public const uint SWP_NOZORDER = 0x0004;
|
||||||
|
}
|
||||||
|
"@
|
||||||
|
|
||||||
|
function Clear-Dir([string]$Dir) {
|
||||||
|
if (Test-Path $Dir) {
|
||||||
|
Get-ChildItem -Path $Dir -File -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
try { [System.IO.File]::Delete($_.FullName) } catch {}
|
||||||
|
}
|
||||||
|
} else { New-Item -ItemType Directory -Path $Dir | Out-Null }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Muta fereastra vfp9 off-screen (x=-4000), fara sa o activeze/minimizeze - ramane randabila
|
||||||
|
# pentru PrintWindow, dar nu se vede si nu fura focus. Se cheama repetat (VFP isi reactiveaza
|
||||||
|
# singur fereastra la Show()/dialoguri modale).
|
||||||
|
function Push-Offscreen([IntPtr]$Hwnd) {
|
||||||
|
if ($Hwnd -eq [IntPtr]::Zero) { return }
|
||||||
|
if (-not [Win32Ui]::IsWindow($Hwnd)) { return }
|
||||||
|
[Win32Ui]::SetWindowPos($Hwnd, [Win32Ui]::HWND_BOTTOM, -4000, 0, 0, 0, ([Win32Ui]::SWP_NOSIZE -bor [Win32Ui]::SWP_NOACTIVATE)) | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Polleaza MainWindowHandle pana devine nenul (fereastra principala vfp9 aparuta).
|
||||||
|
function Wait-MainWindowHandle([System.Diagnostics.Process]$Proc, [int]$TimeoutSec) {
|
||||||
|
$deadline = (Get-Date).AddSeconds($TimeoutSec)
|
||||||
|
while ((Get-Date) -lt $deadline) {
|
||||||
|
try {
|
||||||
|
$Proc.Refresh()
|
||||||
|
if ($Proc.HasExited) { return [IntPtr]::Zero }
|
||||||
|
if ($Proc.MainWindowHandle -ne [IntPtr]::Zero) { return $Proc.MainWindowHandle }
|
||||||
|
} catch {}
|
||||||
|
Start-Sleep -Milliseconds 200
|
||||||
|
}
|
||||||
|
return [IntPtr]::Zero
|
||||||
|
}
|
||||||
|
|
||||||
|
function Wait-File([string]$Path, [int]$TimeoutSec, [IntPtr]$Hwnd = [IntPtr]::Zero) {
|
||||||
|
$deadline = (Get-Date).AddSeconds($TimeoutSec)
|
||||||
|
while (-not (Test-Path $Path)) {
|
||||||
|
if ((Get-Date) -gt $deadline) { return $false }
|
||||||
|
if ($Hwnd -ne [IntPtr]::Zero) { Push-Offscreen $Hwnd }
|
||||||
|
Start-Sleep -Milliseconds 300
|
||||||
|
}
|
||||||
|
return $true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Captura pe HANDLE cu PrintWindow (nu depinde de foreground/ecran vizibil). flag 2 =
|
||||||
|
# PW_RENDERFULLCONTENT (randare completa, necesar pt. multe ferestre GDI+/themed); daca da
|
||||||
|
# imagine goala, se incearca fallback cu flag 0.
|
||||||
|
function Take-Screenshot([IntPtr]$Hwnd, [string]$Path) {
|
||||||
|
if ($Hwnd -eq [IntPtr]::Zero -or -not [Win32Ui]::IsWindow($Hwnd)) {
|
||||||
|
Write-Warning "Take-Screenshot: handle invalid, sar captura ($Path)."
|
||||||
|
return
|
||||||
|
}
|
||||||
|
$rect = New-Object Win32Ui+RECT
|
||||||
|
[Win32Ui]::GetWindowRect($Hwnd, [ref]$rect) | Out-Null
|
||||||
|
$w = $rect.Right - $rect.Left
|
||||||
|
$h = $rect.Bottom - $rect.Top
|
||||||
|
if ($w -le 0 -or $h -le 0) { $w = 1920; $h = 1080 }
|
||||||
|
$bmp = New-Object System.Drawing.Bitmap $w, $h
|
||||||
|
$g = [System.Drawing.Graphics]::FromImage($bmp)
|
||||||
|
$hdc = $g.GetHdc()
|
||||||
|
$ok = [Win32Ui]::PrintWindow($Hwnd, $hdc, 2)
|
||||||
|
$g.ReleaseHdc($hdc)
|
||||||
|
$g.Dispose()
|
||||||
|
if (-not $ok) {
|
||||||
|
$g2 = [System.Drawing.Graphics]::FromImage($bmp)
|
||||||
|
$hdc2 = $g2.GetHdc()
|
||||||
|
[Win32Ui]::PrintWindow($Hwnd, $hdc2, 0) | Out-Null
|
||||||
|
$g2.ReleaseHdc($hdc2)
|
||||||
|
$g2.Dispose()
|
||||||
|
}
|
||||||
|
$bmp.Save($Path, [System.Drawing.Imaging.ImageFormat]::Png)
|
||||||
|
$bmp.Dispose()
|
||||||
|
}
|
||||||
|
|
||||||
|
# omoara doar vfp9 proprii (linia de comanda contine folderul testului), nu instante straine
|
||||||
|
function Stop-VfpProprii([string]$Marker) {
|
||||||
|
Get-CimInstance Win32_Process -Filter "Name='vfp9.exe'" -ErrorAction SilentlyContinue | ForEach-Object {
|
||||||
|
if ($_.CommandLine -and $_.CommandLine.ToLower().Contains($Marker.ToLower())) {
|
||||||
|
Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Clear-Dir $SyncDir
|
||||||
|
Clear-Dir $ShotsDir
|
||||||
|
|
||||||
|
# 1) Precompilare izolata (proces copil complet, ca sa nu otraveasca sesiunea de lansare).
|
||||||
|
# -WindowStyle Hidden pe consola powershell copil (sigur - e consola, nu GUI VFP).
|
||||||
|
Write-Host "Precompilez .fxp (izolat): $Precompile -Prg $TestPrg"
|
||||||
|
Stop-VfpProprii $TestDir
|
||||||
|
Start-Sleep -Milliseconds 500
|
||||||
|
$pc = Start-Process powershell -WindowStyle Hidden -ArgumentList @('-ExecutionPolicy','Bypass','-File', "`"$Precompile`"", '-Prg', "`"$TestPrg`"") -Wait -PassThru
|
||||||
|
Start-Sleep -Seconds 2
|
||||||
|
Stop-VfpProprii $TestDir
|
||||||
|
Start-Sleep -Seconds 2
|
||||||
|
if (-not (Test-Path $TestFxp)) { Write-Warning "Nu s-a generat $TestFxp - compilare esuata." }
|
||||||
|
|
||||||
|
# 2) Lansez .FXP-ul (nu .prg-ul). vfp9 -A porneste uneori procesul FARA sa execute (log gol);
|
||||||
|
# discriminator: START e prima linie a testului (mtime log > momentul lansarii) => in ~2s daca
|
||||||
|
# ruleaza. Relansez doar daca log-ul nu e scris in 30s (instanta moarta). Apoi astept ready_0.
|
||||||
|
# Imediat ce apare MainWindowHandle, fereastra e impinsa off-screen (fara activare).
|
||||||
|
$ready0 = Join-Path $SyncDir 'ready_0.txt'
|
||||||
|
$started = $false
|
||||||
|
$hwnd = [IntPtr]::Zero
|
||||||
|
foreach ($try in 1..8) {
|
||||||
|
if (Test-Path $ready0) { [System.IO.File]::Delete($ready0) }
|
||||||
|
if (Test-Path $TestLog) { [System.IO.File]::Delete($TestLog) }
|
||||||
|
$t0 = Get-Date
|
||||||
|
Write-Host "Lansez VFP (incercarea $try): $Vfp -A $TestFxp"
|
||||||
|
$proc = Start-Process -FilePath $Vfp -ArgumentList @('-A', "`"$TestFxp`"") -PassThru
|
||||||
|
$dl = (Get-Date).AddSeconds(30)
|
||||||
|
while ((Get-Date) -lt $dl) {
|
||||||
|
if ($hwnd -eq [IntPtr]::Zero -and -not $proc.HasExited) {
|
||||||
|
$proc.Refresh()
|
||||||
|
if ($proc.MainWindowHandle -ne [IntPtr]::Zero) {
|
||||||
|
$hwnd = $proc.MainWindowHandle
|
||||||
|
Push-Offscreen $hwnd
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Push-Offscreen $hwnd
|
||||||
|
}
|
||||||
|
if ((Test-Path $TestLog) -and ((Get-Item $TestLog).LastWriteTime -gt $t0)) { $started = $true; break }
|
||||||
|
if (Test-Path $ready0) { $started = $true; break }
|
||||||
|
Start-Sleep -Milliseconds 500
|
||||||
|
}
|
||||||
|
if ($started) { break }
|
||||||
|
Write-Warning "Incercarea ${try}: testul nu a scris START in 30s (instanta moarta); relansez."
|
||||||
|
if ($proc -and -not $proc.HasExited) { try { $proc.Kill() } catch {} }
|
||||||
|
Stop-VfpProprii $TestDir
|
||||||
|
Start-Sleep -Milliseconds 1500
|
||||||
|
$hwnd = [IntPtr]::Zero
|
||||||
|
}
|
||||||
|
# Daca handle-ul principal inca nu a aparut (formular aditional creat mai tarziu), mai astept putin.
|
||||||
|
if ($hwnd -eq [IntPtr]::Zero) { $hwnd = Wait-MainWindowHandle $proc 15 }
|
||||||
|
Push-Offscreen $hwnd
|
||||||
|
if (-not (Wait-File $ready0 $ReadyTimeoutSec $hwnd)) {
|
||||||
|
Write-Warning "Testul nu a ajuns la ready_0 in ${ReadyTimeoutSec}s. Ultima linie log: '$(Get-Content $TestLog -Tail 1 -ErrorAction SilentlyContinue)'"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 3) Parcurg pasii: astept ready_<n> (re-impingand fereastra off-screen periodic), screenshot
|
||||||
|
# pe handle (PrintWindow), scriu cont_<n>.
|
||||||
|
$ok = $true
|
||||||
|
for ($n = 0; $n -lt $Steps.Count; $n++) {
|
||||||
|
$label = $Steps[$n]
|
||||||
|
$ready = Join-Path $SyncDir ("ready_{0}.txt" -f $n)
|
||||||
|
$cont = Join-Path $SyncDir ("cont_{0}.txt" -f $n)
|
||||||
|
Write-Host "Astept pasul $n ($label)"
|
||||||
|
if (-not (Wait-File $ready $StepTimeoutSec $hwnd)) {
|
||||||
|
Write-Warning "TIMEOUT la pasul $n."
|
||||||
|
$ok = $false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
Write-Host (" ready: {0}" -f (Get-Content $ready -Raw).Trim())
|
||||||
|
# daca fereastra principala s-a schimbat intre timp (formular nou), reincerc handle-ul
|
||||||
|
if ($hwnd -eq [IntPtr]::Zero -or -not [Win32Ui]::IsWindow($hwnd)) { $hwnd = Wait-MainWindowHandle $proc 5 }
|
||||||
|
Push-Offscreen $hwnd
|
||||||
|
Start-Sleep -Milliseconds 1200 # las formularul sa se deseneze complet
|
||||||
|
Push-Offscreen $hwnd
|
||||||
|
$png = Join-Path $ShotsDir ("step_{0}_{1}.png" -f $n, $label)
|
||||||
|
Take-Screenshot $hwnd $png
|
||||||
|
Write-Host " screenshot: $png"
|
||||||
|
Set-Content -Path $cont -Value 'go' -Encoding ascii
|
||||||
|
}
|
||||||
|
|
||||||
|
# 4) Astept done.txt si inchid.
|
||||||
|
if ($ok) {
|
||||||
|
$done = Join-Path $SyncDir 'done.txt'
|
||||||
|
if (Wait-File $done 30 $hwnd) { Write-Host "done: $((Get-Content $done -Raw).Trim())" }
|
||||||
|
}
|
||||||
|
Start-Sleep -Milliseconds 800
|
||||||
|
if ($proc -and -not $proc.HasExited) { try { $proc.Kill() } catch {} }
|
||||||
|
Stop-VfpProprii $TestDir
|
||||||
|
Write-Host "GATA. Screenshots in $ShotsDir"
|
||||||
240
app.prg
Normal file
240
app.prg
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
*!* app.prg
|
||||||
|
*!* MyApp *!*
|
||||||
|
#INCLUDE COMUN.H
|
||||||
|
#DEFINE CRLF CHR(13) + CHR(10)
|
||||||
|
|
||||||
|
*** ==================== MyApp ============================ ***
|
||||||
|
Define Class MyApp As cApp
|
||||||
|
|
||||||
|
Enddefine && MyApp
|
||||||
|
|
||||||
|
Define Class Settings As cSettings
|
||||||
|
cIniText = ;
|
||||||
|
"[general]" + CRLF + ;
|
||||||
|
"host = ROA" + CRLF + ;
|
||||||
|
"user = XENOTI" + CRLF + ;
|
||||||
|
"password = +vIcfGb3NCfLCZXaqOM19Q==" + CRLF + ;
|
||||||
|
"cale_import_fidelioD:\PROIECTE\FLORA\FLORA2ROA\EXEMPLE\hotel\" + CRLF + ;
|
||||||
|
"cale_import_biz=D:\PROIECTE\FLORA\FLORA2ROA\EXEMPLE\restaurant\" + CRLF + ;
|
||||||
|
"cale_import=D:\PROIECTE\FLORA\FLORA2ROA\EXEMPLE\import\" + CRLF + ;
|
||||||
|
"last_data1 =" + CRLF + ;
|
||||||
|
"last_data2 =" + CRLF + ;
|
||||||
|
"tva_incasare = 0" + CRLF + ;
|
||||||
|
"id_part_casa_restaurant = 232" + CRLF + ;
|
||||||
|
"id_part_card_restaurant = 230" + CRLF + ;
|
||||||
|
"id_part_tichete_restaurant = 230" + CRLF + ;
|
||||||
|
"id_part_casa_hotel = 232" + CRLF + ;
|
||||||
|
"id_part_card_hotel = 230" + CRLF + ;
|
||||||
|
"id_part_tichete_hotel = 231" + CRLF + ;
|
||||||
|
"id_part_virament_hotel = 226" + CRLF + ;
|
||||||
|
"id_part_viramentint_hotel = " + CRLF + ;
|
||||||
|
"id_part_clienti_hotel = 233" + CRLF + ;
|
||||||
|
"id_part_clienti_restaurant = 234" + CRLF + ;
|
||||||
|
"cont_casa_restaurant = 5311" + CRLF + ;
|
||||||
|
"acont_casa_restaurant = " + CRLF + ;
|
||||||
|
"cont_card_restaurant = 5125" + CRLF + ;
|
||||||
|
"acont_card_restaurant = 01" + CRLF + ;
|
||||||
|
"cont_tichete_restaurant = 472" + CRLF + ;
|
||||||
|
"acont_tichete_restaurant = 03" + CRLF + ;
|
||||||
|
"cont_casa_hotel = 5311" + CRLF + ;
|
||||||
|
"acont_casa_hotel = " + CRLF + ;
|
||||||
|
"cont_card_hotel = 5125" + CRLF + ;
|
||||||
|
"acont_card_hotel = 01" + CRLF + ;
|
||||||
|
"cont_tichete_hotel = 5125" + CRLF + ;
|
||||||
|
"acont_tichete_hotel = 01" + CRLF + ;
|
||||||
|
"cont_virament_hotel = 5121" + CRLF + ;
|
||||||
|
"acont_virament_hotel = " + CRLF + ;
|
||||||
|
"cont_viramentint_hotel = 581" + CRLF + ;
|
||||||
|
"acont_viramentint_hotel = " + CRLF + ;
|
||||||
|
"cont_clienti_restaurant = 418" + CRLF + ;
|
||||||
|
"acont_clienti_restaurant = 02" + CRLF + ;
|
||||||
|
"cont_clienti_hotel = 418" + CRLF + ;
|
||||||
|
"acont_clienti_hotel = 01" + CRLF + ;
|
||||||
|
"cont_factura_casa_hotel = 4111" + CRLF + ;
|
||||||
|
"cont_factura_card_hotel = 4111" + CRLF + ;
|
||||||
|
"cont_factura_tichete_hotel = 4111" + CRLF + ;
|
||||||
|
"cont_factura_viramentint_hotel = 4111" + CRLF + ;
|
||||||
|
"acont_factura_casa_hotel = 01" + CRLF + ;
|
||||||
|
"acont_factura_card_hotel = 02" + CRLF + ;
|
||||||
|
"acont_factura_tichete_hotel = 0Y" + CRLF + ;
|
||||||
|
"acont_factura_viramentint_hotel = 01" + CRLF + ;
|
||||||
|
"acont_marfa_bar = 01" + CRLF + ;
|
||||||
|
"acont_marfa_bucatarie = 08" + CRLF + ;
|
||||||
|
"acont_ach_4428 = TP" + CRLF + ;
|
||||||
|
"acont_ach_4426 = " + CRLF + ;
|
||||||
|
"acont_vz_4428 = TI" + CRLF + ;
|
||||||
|
"acont_vz_4427 = " + CRLF + ;
|
||||||
|
"acont_mf_4428 = M" + CRLF + ;
|
||||||
|
"[connection]" + CRLF + ;
|
||||||
|
"connection_timeout=60" + CRLF + ;
|
||||||
|
"response_timeout=60" + CRLF + ;
|
||||||
|
"[other]" + CRLF + ;
|
||||||
|
"write_log=0"
|
||||||
|
|
||||||
|
|
||||||
|
host = ''
|
||||||
|
user = ''
|
||||||
|
password = ''
|
||||||
|
password_crypt = ''
|
||||||
|
|
||||||
|
cContCasaRestaurant = '5311'
|
||||||
|
cAcontCasaRestaurant = ''
|
||||||
|
cContCardRestaurant = '5125'
|
||||||
|
cAcontCardRestaurant = '01'
|
||||||
|
cContTicheteRestaurant = '472'
|
||||||
|
cAcontTicheteRestaurant = '03'
|
||||||
|
|
||||||
|
cContCasaHotel = '5311'
|
||||||
|
cAcontCasaHotel = ''
|
||||||
|
cContCardHotel = '5125'
|
||||||
|
cAcontCardHotel = '01'
|
||||||
|
cContTicheteHotel = '5125'
|
||||||
|
cAcontTicheteHotel = '01' && pe extrasul de cont apar ca incasari cu cardul normale
|
||||||
|
cContViramentHotel = '5121'
|
||||||
|
cAcontViramentHotel = ''
|
||||||
|
cContViramentIntHotel = '5121'
|
||||||
|
cAcontViramentIntHotel = ''
|
||||||
|
|
||||||
|
cContClientiRestaurant = '418'
|
||||||
|
cAcontClientiRestaurant = '02'
|
||||||
|
cContClientiHotel = '4111'
|
||||||
|
cAcontClientiHotel = '01'
|
||||||
|
|
||||||
|
cContFacturaCasaHotel = '4111'
|
||||||
|
cContFacturaCardHotel = '4111'
|
||||||
|
cContFacturaTicheteHotel = '4111'
|
||||||
|
cContFacturaViramentIntHotel = '418'
|
||||||
|
cAContFacturaCasaHotel = '01'
|
||||||
|
cAContFacturaCardHotel = '02'
|
||||||
|
cAContFacturaTicheteHotel = '02'
|
||||||
|
cAContFacturaViramentIntHotel = '01'
|
||||||
|
|
||||||
|
cAcontMarfaBar = '01' && 371.01
|
||||||
|
cAcontMarfaBucatarie = '08' && 371.08
|
||||||
|
|
||||||
|
cAcontVenituriBar = '0201' && 707.0201
|
||||||
|
cAcontVenituriBucatarie = '0202' && 707.0202
|
||||||
|
|
||||||
|
nIdPartCasaRestaurant = 251 && Id Partener Casa Lei 5311 Restaurant
|
||||||
|
nIdPartCardRestaurant = 230 && Id Partener Card 5125 Restaurant
|
||||||
|
nIdPartTicheteRestaurant = 230 && Id Partener Tichete 472 Restaurant
|
||||||
|
nIdPartClientiRestaurant = 234 && Id Partener 418 vanzare Restaurant
|
||||||
|
|
||||||
|
nIdPartCasaHotel = 251 && Id Partener Casa Lei 5311 Hotel
|
||||||
|
nIdPartCardHotel = 230 && Id Partener Card 5125 Hotel
|
||||||
|
nIdPartTicheteHotel = 230 && Id Partener Card 5125 Hotel
|
||||||
|
nIdPartViramentHotel = 230 && Id Partener Card 5125 Hotel
|
||||||
|
nIdPartViramentIntHotel = 230 && Id Partener Card 5125 Hotel
|
||||||
|
nIdPartClientiHotel = 233 && Id Partener 418 vanzare Hotel
|
||||||
|
|
||||||
|
connect_timeout = 60 && ftpget default 60 secunde
|
||||||
|
response_timeout = 60
|
||||||
|
|
||||||
|
nTVAIncasare = 0 && sistem TVA Incasare pentru facturi achizitie 4426/4428
|
||||||
|
cAcontAch4428 = ''
|
||||||
|
cAcontAch4426 = ''
|
||||||
|
cAcontVz4428 = ''
|
||||||
|
cAcontVz4427 = ''
|
||||||
|
cAcontMf4428 = ''
|
||||||
|
|
||||||
|
cale_import_fidelio = ''
|
||||||
|
cale_import_biz = ''
|
||||||
|
cale_import = ''
|
||||||
|
last_data1 = {}
|
||||||
|
last_data2 = {}
|
||||||
|
|
||||||
|
lWriteLog = .F.
|
||||||
|
|
||||||
|
Procedure ReadSettings
|
||||||
|
DoDefault()
|
||||||
|
|
||||||
|
lcInifile = This.cIniFile
|
||||||
|
|
||||||
|
Dimension aFiles[4]
|
||||||
|
|
||||||
|
This.host = Alltrim(This.ReadVariable("general","host"))
|
||||||
|
This.user = This.ReadVariable("general","user")
|
||||||
|
This.password_crypt = This.ReadVariable("general","password")
|
||||||
|
This.password = This.DecryptPassword(This.password_crypt)
|
||||||
|
|
||||||
|
lcIdPart = Alltrim(This.ReadVariable("general","id_part_casa_restaurant"))
|
||||||
|
This.nIdPartCasaRestaurant = IIF(!EMPTY(m.lcIdPart), INT(VAL(m.lcIdPart)), 0)
|
||||||
|
|
||||||
|
lcIdPart = Alltrim(This.ReadVariable("general","id_part_card_restaurant"))
|
||||||
|
This.nIdPartCardRestaurant = IIF(!EMPTY(m.lcIdPart), INT(VAL(m.lcIdPart)), 0)
|
||||||
|
|
||||||
|
lcIdPart = Alltrim(This.ReadVariable("general","id_part_tichete_restaurant"))
|
||||||
|
This.nIdPartTicheteRestaurant = IIF(!EMPTY(m.lcIdPart), INT(VAL(m.lcIdPart)), 0)
|
||||||
|
|
||||||
|
lcIdPart = Alltrim(This.ReadVariable("general","id_part_clienti_restaurant"))
|
||||||
|
This.nIdPartClientiRestaurant = IIF(!EMPTY(m.lcIdPart), INT(VAL(m.lcIdPart)), 0)
|
||||||
|
|
||||||
|
lcTVAIncasare = Alltrim(This.ReadVariable("general","tva_incasare"))
|
||||||
|
This.nTVAIncasare = IIF(!EMPTY(m.lcTVAIncasare), INT(VAL(m.lcTVAIncasare)), 0)
|
||||||
|
|
||||||
|
This.cContCasaRestaurant = Alltrim(NVL(This.ReadVariable("general","cont_casa_restaurant"),''))
|
||||||
|
This.cAcontCasaRestaurant = Alltrim(NVL(This.ReadVariable("general","acont_casa_restaurant"),''))
|
||||||
|
This.cContCardRestaurant = Alltrim(NVL(This.ReadVariable("general","cont_card_restaurant"),''))
|
||||||
|
This.cAcontCardRestaurant = Alltrim(NVL(This.ReadVariable("general","acont_card_restaurant"),''))
|
||||||
|
This.cContTicheteRestaurant = Alltrim(NVL(This.ReadVariable("general","cont_tichete_restaurant"),''))
|
||||||
|
This.cAcontTicheteRestaurant = Alltrim(NVL(This.ReadVariable("general","acont_tichete_restaurant"),''))
|
||||||
|
|
||||||
|
This.cContCasaHotel = Alltrim(NVL(This.ReadVariable("general","cont_casa_hotel"),''))
|
||||||
|
This.cAcontCasaHotel = Alltrim(NVL(This.ReadVariable("general","acont_casa_hotel"),''))
|
||||||
|
This.cContCardHotel = Alltrim(NVL(This.ReadVariable("general","cont_card_hotel"),''))
|
||||||
|
This.cAcontCardHotel = Alltrim(NVL(This.ReadVariable("general","acont_card_hotel"),''))
|
||||||
|
|
||||||
|
This.cContTicheteHotel = Alltrim(NVL(This.ReadVariable("general","cont_tichete_hotel"),''))
|
||||||
|
This.cAcontTicheteHotel = Alltrim(NVL(This.ReadVariable("general","acont_tichete_hotel"),''))
|
||||||
|
This.cContViramentHotel = Alltrim(NVL(This.ReadVariable("general","cont_virament_hotel"),''))
|
||||||
|
This.cAcontViramentHotel = Alltrim(NVL(This.ReadVariable("general","acont_virament_hotel"),''))
|
||||||
|
This.cContViramentIntHotel = Alltrim(NVL(This.ReadVariable("general","cont_viramentint_hotel"),''))
|
||||||
|
This.cAcontViramentIntHotel = Alltrim(NVL(This.ReadVariable("general","acont_viramentint_hotel"),''))
|
||||||
|
|
||||||
|
This.cContClientiRestaurant = Alltrim(NVL(This.ReadVariable("general","cont_clienti_restaurant"),''))
|
||||||
|
This.cAcontClientiRestaurant = Alltrim(NVL(This.ReadVariable("general","acont_clienti_restaurant"),''))
|
||||||
|
This.cContClientiHotel = Alltrim(NVL(This.ReadVariable("general","cont_clienti_hotel"),''))
|
||||||
|
This.cAcontClientiHotel = Alltrim(NVL(This.ReadVariable("general","acont_clienti_hotel"),''))
|
||||||
|
|
||||||
|
This.cAcontMarfaBar = Alltrim(NVL(This.ReadVariable("general","acont_marfa_bar"),''))
|
||||||
|
This.cAcontMarfaBucatarie = Alltrim(NVL(This.ReadVariable("general","acont_marfa_bucatarie"),''))
|
||||||
|
|
||||||
|
This.cAcontVenituriBar = Alltrim(NVL(This.ReadVariable("general","acont_venituri_bar"),''))
|
||||||
|
This.cAcontVenituriBucatarie = Alltrim(NVL(This.ReadVariable("general","acont_venituri_bucatarie"),''))
|
||||||
|
|
||||||
|
This.cAcontAch4428 = Alltrim(NVL(This.ReadVariable("general","acont_ach_4428"),''))
|
||||||
|
This.cAcontAch4426 = Alltrim(NVL(This.ReadVariable("general","acont_ach_4426"),''))
|
||||||
|
This.cAcontVz4428 = Alltrim(NVL(This.ReadVariable("general","acont_vz_4428"),''))
|
||||||
|
This.cAcontVz4427 = Alltrim(NVL(This.ReadVariable("general","acont_vz_4427"),''))
|
||||||
|
This.cAcontMf4428 = Alltrim(NVL(This.ReadVariable("general","acont_mf_4428"),''))
|
||||||
|
|
||||||
|
This.cale_import_fidelio = Alltrim(This.ReadVariable("general","cale_import_fidelio"))
|
||||||
|
This.cale_import_biz = Alltrim(This.ReadVariable("general","cale_import_biz"))
|
||||||
|
This.cale_import = Alltrim(This.ReadVariable("general","cale_import"))
|
||||||
|
|
||||||
|
This.last_data1 = CTOD(This.ReadVariable("general","last_data1"))
|
||||||
|
This.last_data2 = CTOD(This.ReadVariable("general","last_data2"))
|
||||||
|
|
||||||
|
lcTimeOut = This.ReadVariable("connection","connect_timeout")
|
||||||
|
If Empty(Nvl(lcTimeOut,''))
|
||||||
|
This.connect_timeout = 60
|
||||||
|
Else
|
||||||
|
This.connect_timeout = Round(Val(lcTimeOut),0)
|
||||||
|
Endif
|
||||||
|
|
||||||
|
lcTimeOut = This.ReadVariable("connection","response_timeout")
|
||||||
|
If Empty(Nvl(lcTimeOut,''))
|
||||||
|
This.response_timeout = 60
|
||||||
|
Else
|
||||||
|
This.response_timeout = Round(Val(lcTimeOut),0)
|
||||||
|
ENDIF
|
||||||
|
lcLog = This.ReadVariable("other","write_log")
|
||||||
|
This.lWriteLog = (VAL(m.lcLog) = 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Endproc && ReadSettings
|
||||||
|
|
||||||
|
|
||||||
|
Enddefine
|
||||||
|
|
||||||
275
capp.prg
Normal file
275
capp.prg
Normal file
@@ -0,0 +1,275 @@
|
|||||||
|
*!* capp *!*
|
||||||
|
#INCLUDE COMUN.H
|
||||||
|
#INCLUDE SECURITY.H
|
||||||
|
|
||||||
|
#DEFINE CRLF CHR(13) + CHR(10)
|
||||||
|
|
||||||
|
*** ==================== CAPP ============================ ***
|
||||||
|
Define Class cApp As Custom
|
||||||
|
oSettings = Null
|
||||||
|
lError = .F.
|
||||||
|
cErrorMessage = ''
|
||||||
|
oLog = Null
|
||||||
|
oTrace = Null
|
||||||
|
lWriteLog = .F. && .T. = scrie in log pe disc
|
||||||
|
|
||||||
|
*
|
||||||
|
Procedure Init
|
||||||
|
*Set Procedure To "app.prg" Additive
|
||||||
|
This.oSettings = Newobject("Settings","app.prg") && CREATEOBJECT("Settings")
|
||||||
|
This.oLog = Iif(Type('goLog') = 'O', goLog, Createobject("Log"))
|
||||||
|
Endproc && INIT
|
||||||
|
*
|
||||||
|
Procedure ProcessError(toHash)
|
||||||
|
Declare laErrors[1]
|
||||||
|
|
||||||
|
LOCAL loHash
|
||||||
|
IF TYPE('toHash') = 'O'
|
||||||
|
loHash = toHash
|
||||||
|
ELSE
|
||||||
|
loHash = GetHash()
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lnErrorLines = Aerror(laErrors)
|
||||||
|
|
||||||
|
lnError = Iif(loHash.HasProperty("nError"), loHash.GetValue("nError"), Transform(laErrors(1)) + ' ' + Transform(laErrors(5)))
|
||||||
|
lcMethod = loHash.GetValue("cMethod")
|
||||||
|
lnLine = loHash.GetValue("nLine")
|
||||||
|
lcError = Iif(loHash.HasProperty("cError"), loHash.GetValue("cError"), Transform(laErrors(2)))
|
||||||
|
lcCode = Iif(loHash.HasProperty("cCode"), loHash.GetValue("cCode"), Message(1) )
|
||||||
|
lcCallStack = GetCallStack()
|
||||||
|
lcUserMessage = loHash.GetValue("cUserMessage")
|
||||||
|
|
||||||
|
This.cErrorMessage = lcUserMessage + CRLF + CRLF + ;
|
||||||
|
'Eroarea nr: ' + Transform(lnError) + CRLF + ;
|
||||||
|
'Eroarea: ' + Transform(lcError) + CRLF + ;
|
||||||
|
'Procedura: ' + Transform(lcMethod) + CRLF + ;
|
||||||
|
'Linia: ' + Transform(lnLine) + CRLF + ;
|
||||||
|
'Codul: ' + Transform(lcCode) + CRLF + ;
|
||||||
|
lcCallStack
|
||||||
|
|
||||||
|
This.lError = .T.
|
||||||
|
This.Log(This.cErrorMessage)
|
||||||
|
|
||||||
|
*!* MESSAGEBOX(THIS.cErrorMessage,0+16,'Eroare')
|
||||||
|
*!* IF MESSAGEBOX(THIS.cErrorMessage + CRLF + 'Doriti sa iesiti?',16+4,'Eroare') = 6
|
||||||
|
*!* IF _vfp.StartMode = 0
|
||||||
|
*!* SET STEP ON
|
||||||
|
*!* ELSE
|
||||||
|
*!* RETURN TO MASTER
|
||||||
|
*!* ENDIF
|
||||||
|
*!* ENDIF
|
||||||
|
Endproc && ProcessError
|
||||||
|
*
|
||||||
|
Procedure Log
|
||||||
|
Lparameters tcMessage, toTrace
|
||||||
|
LOCAL loTrace
|
||||||
|
|
||||||
|
IF this.oSettings.lWriteLog
|
||||||
|
This.oLog.WriteLog(tcMessage)
|
||||||
|
ENDIF
|
||||||
|
loTrace = This.oTrace
|
||||||
|
|
||||||
|
*!* 03.03.2010
|
||||||
|
IF TYPE('toTrace') = 'O'
|
||||||
|
toTrace.Trace(tcMessage)
|
||||||
|
ELSE
|
||||||
|
IF TYPE('loTrace') = 'O'
|
||||||
|
loTrace.Trace(tcMessage)
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
*!* 03.03.2010 ^
|
||||||
|
Endproc && Log
|
||||||
|
*
|
||||||
|
Function Gethost
|
||||||
|
Local lcValue
|
||||||
|
lcValue = This.oSettings.GetValue("HOST")
|
||||||
|
Return lcValue
|
||||||
|
Endfunc && GetHost
|
||||||
|
*
|
||||||
|
Function GetUser
|
||||||
|
Local lcValue
|
||||||
|
lcValue = This.oSettings.GetValue("USER")
|
||||||
|
Return lcValue
|
||||||
|
Endfunc && GetUser
|
||||||
|
*
|
||||||
|
Function GetPassword
|
||||||
|
Local lcValue
|
||||||
|
lcValue = This.oSettings.GetValue("PASSWORD")
|
||||||
|
Return lcValue
|
||||||
|
Endfunc && GetPassword
|
||||||
|
*
|
||||||
|
Function GetConnectionString
|
||||||
|
Local lcValue
|
||||||
|
lcValue = This.oSettings.GetValue("CONNECTIONSTRING")
|
||||||
|
Return lcValue
|
||||||
|
Endfunc && GetConnectionString
|
||||||
|
*
|
||||||
|
Function GetError
|
||||||
|
Return This.cErrorMessage
|
||||||
|
Endfunc && GetError
|
||||||
|
*
|
||||||
|
Function HasError
|
||||||
|
Return This.lError
|
||||||
|
Endfunc && HasError
|
||||||
|
*
|
||||||
|
Function IsLoggedIn
|
||||||
|
Return .T.
|
||||||
|
&& RETURN THIS.oSettings.GetValue("IdUtilizator") > 0
|
||||||
|
Endfunc && IsLoggedIn
|
||||||
|
|
||||||
|
Function ShowError
|
||||||
|
Return Messagebox(This.cErrorMessage + CRLF + 'Doriti sa iesiti?',16+4,'Eroare')
|
||||||
|
Endfunc && ShowError
|
||||||
|
|
||||||
|
Enddefine && cAPP
|
||||||
|
|
||||||
|
|
||||||
|
*** ==================== cSETTINGS ============================ ***
|
||||||
|
Define Class cSETTINGS As Custom
|
||||||
|
cIniFile = ''
|
||||||
|
cAppPath = ''
|
||||||
|
cIniText = ''
|
||||||
|
|
||||||
|
|
||||||
|
Proc Init
|
||||||
|
Local lcApppath, lcApplicationFile
|
||||||
|
If Type('gcAppPath') = 'C'
|
||||||
|
lcApppath = gcAppPath
|
||||||
|
Else
|
||||||
|
lcApppath = Addbs(Justpath(Sys(16, 0)))
|
||||||
|
|
||||||
|
If 'PROGRAME'$Upper(lcApppath)
|
||||||
|
lcApppath = Strtran(lcApppath, 'PROGRAME\','')
|
||||||
|
Endif
|
||||||
|
Endif
|
||||||
|
This.cAppPath = lcApppath
|
||||||
|
|
||||||
|
This.cIniFile = This.cAppPath + 'settings.ini'
|
||||||
|
|
||||||
|
This.InitSettings()
|
||||||
|
This.ReadSettings()
|
||||||
|
Endproc
|
||||||
|
|
||||||
|
Procedure InitSettings
|
||||||
|
Local lcInifile, lcIniText
|
||||||
|
lcIniText = This.cIniText
|
||||||
|
|
||||||
|
lcInifile = This.cIniFile
|
||||||
|
If Empty(lcInifile)
|
||||||
|
Return
|
||||||
|
Endif
|
||||||
|
IF !FILE(lcInifile)
|
||||||
|
Strtofile(lcIniText, lcInifile)
|
||||||
|
ENDIF
|
||||||
|
Endproc && InitSettings
|
||||||
|
|
||||||
|
Procedure ReadSettings
|
||||||
|
|
||||||
|
Endproc && ReadSettings
|
||||||
|
|
||||||
|
|
||||||
|
*==========================================
|
||||||
|
Procedure SetVariable
|
||||||
|
Lparameters tcSection, tcVarname, tuValue
|
||||||
|
|
||||||
|
Local lcSection, lcVarname, lcValue
|
||||||
|
|
||||||
|
lcSection = Lower(Alltrim(tcSection))
|
||||||
|
lcVarname = Lower(Alltrim(tcVarname))
|
||||||
|
lcValue = Transform(tuValue)
|
||||||
|
SetIni(This.cIniFile, lcSection, lcVarname, lcValue)
|
||||||
|
|
||||||
|
Endproc && SetVariable
|
||||||
|
|
||||||
|
*==========================================
|
||||||
|
Procedure ReadVariable
|
||||||
|
Lparameters tcSection, tcVarname
|
||||||
|
|
||||||
|
Local lcSection, lcVarname, lcValue
|
||||||
|
|
||||||
|
lcSection = Lower(Alltrim(tcSection))
|
||||||
|
lcVarname = Lower(Alltrim(tcVarname))
|
||||||
|
|
||||||
|
lcValue = GetIni(This.cIniFile, lcSection, lcVarname)
|
||||||
|
lcValue = Nvl(lcValue, '')
|
||||||
|
|
||||||
|
Return lcValue
|
||||||
|
Endproc && ReadVariable
|
||||||
|
|
||||||
|
Function GetValue
|
||||||
|
Lparameters tcSetting
|
||||||
|
|
||||||
|
Local lcSetting, luValue
|
||||||
|
lcSetting = "THIS." + tcSetting
|
||||||
|
luValue = ''
|
||||||
|
If Type(lcSetting) # 'U'
|
||||||
|
luValue = &lcSetting
|
||||||
|
Endif
|
||||||
|
Return luValue
|
||||||
|
|
||||||
|
Endfunc
|
||||||
|
|
||||||
|
|
||||||
|
Procedure SetValue
|
||||||
|
Lparameters tcSetting, tuValue
|
||||||
|
|
||||||
|
Local lcSetting, luValue
|
||||||
|
lcSetting = "THIS." + tcSetting
|
||||||
|
luValue = tuValue
|
||||||
|
If Type(lcSetting) # 'U'
|
||||||
|
&lcSetting = luValue
|
||||||
|
Endif
|
||||||
|
|
||||||
|
Endproc
|
||||||
|
|
||||||
|
Function DecryptPassword As Character
|
||||||
|
Lparameters tcPassword
|
||||||
|
Local lcPassword
|
||||||
|
|
||||||
|
lcPassword = Alltrim(Strconv(Alltrim(m.tcPassword),14))
|
||||||
|
lcPassword = This.EncryptDecrypt(m.lcPassword, ENCRYPTKEY, "decrypt","blowfish")
|
||||||
|
|
||||||
|
Return m.lcPassword
|
||||||
|
Endfunc
|
||||||
|
|
||||||
|
*!* EncryptDecrypt
|
||||||
|
*!* EX: EncryptDecrypt("text to encrypt", "encrypt key", "encrypt")
|
||||||
|
*!* EX: EncryptDecrypt("text to decrypt", "decrypt key", "decrypt")
|
||||||
|
*!* EX: EncryptDecrypt("text to encrypt", "encrypt key", "encrypt","blowfish")
|
||||||
|
Function EncryptDecrypt
|
||||||
|
Lparameters tcText, tcPassword, tcMode, tcAlgorithm
|
||||||
|
&& tcMode : ENCRYPT/DECRYPT
|
||||||
|
Local lcAlgorithm,lcReturn, lcString, lcPWD
|
||||||
|
Local loException As Exception
|
||||||
|
m.lcString = tcText
|
||||||
|
m.lcPWD = tcPassword
|
||||||
|
m.lcReturn = ""
|
||||||
|
lcAlgorithm = ""
|
||||||
|
If Type('tcAlgorithm') = 'C'
|
||||||
|
lcAlgorithm = tcAlgorithm
|
||||||
|
Endif
|
||||||
|
If lcAlgorithm = "blowfish"
|
||||||
|
If Upper(Alltrim(Transform(tcMode))) = "ENCRYPT"
|
||||||
|
lcReturn=Encrypt(m.lcString, m.lcPWD,4,0)
|
||||||
|
Else
|
||||||
|
Try
|
||||||
|
lcReturn=decrypt(m.lcString, Alltrim(m.lcPWD),4,0)
|
||||||
|
Catch To loException
|
||||||
|
If loException.ErrorNo=2028
|
||||||
|
golog.Log("S-a incercat decriptarea unui text care nu a fost generat cu algoritmul de criptare selectat.",Program())
|
||||||
|
Else
|
||||||
|
golog.Log(loException.Message,Program())
|
||||||
|
Endif
|
||||||
|
Endtry
|
||||||
|
Endif
|
||||||
|
Endif
|
||||||
|
*!* 18.03.2008 : am scos chr(0) de la sfarsitul textului decriptat
|
||||||
|
If At(Chr(0),m.lcReturn) > 0 And Upper(Alltrim(Transform(tcMode))) != "ENCRYPT"
|
||||||
|
m.lcReturn = Substr(m.lcReturn, 1, At(Chr(0),m.lcReturn)-1)
|
||||||
|
Endif
|
||||||
|
*!* 18.03.2008
|
||||||
|
Return m.lcReturn
|
||||||
|
Endfunc && EncryptDecrypt
|
||||||
|
|
||||||
|
Enddefine && cSETTINGS
|
||||||
96
changelog_flora2roa.txt
Normal file
96
changelog_flora2roa.txt
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
<!--
|
||||||
|
02/07/2026
|
||||||
|
FLORA2ROA - 2.0.5
|
||||||
|
|
||||||
|
:eroare:
|
||||||
|
Corectare eroare "numeric overflow" la salvarea notelor contabile.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
01/07/2026
|
||||||
|
FLORA2ROA - 2.0.4
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Toti clientii cu cod fiscale peste 10 cifre se considera persoane fizice, in scopul declaratiei D406 SAFT.
|
||||||
|
Toate persoanele fizice cu CNP invalid se salveaza fara CNP in baza de date pentru a nu da eroare la D406 SAFT.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
16/10/2025
|
||||||
|
FLORA2ROA - 2.0.3
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Nu se mai genereaza note VANZARI RESTAURANT pentru Tip Plata = "MD BUFET".
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
24/09/2025
|
||||||
|
FLORA2ROA - 2.0.2
|
||||||
|
|
||||||
|
:nou:
|
||||||
|
Corectare explicatie TVA livrari 21% MONETAR HOTEL.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
12/08/2025
|
||||||
|
FLORA2ROA - 2.0.1
|
||||||
|
|
||||||
|
:nou:
|
||||||
|
Actualizare cote TVA 21%, 11%
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
11/08/2025
|
||||||
|
FLORA2ROA - 2.0.0
|
||||||
|
|
||||||
|
:nou:
|
||||||
|
Actualizare cote TVA 21%, 11%
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Completare document pereche la contul "418" in notele MONETAR RESTAURANT 5125 = 418, pentru constituirea "418" in VENITURI RESTAURANT 418 = 707
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
14/07/2025
|
||||||
|
FLORA2ROA - 1.0.9
|
||||||
|
|
||||||
|
:eroare:
|
||||||
|
S-a corectat o eroaree de la salvarea notelor contabile in baza de date.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
25/06/2025
|
||||||
|
FLORA2ROA - 1.0.8
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Facturi Hotel TAXA STATIUNE - EXPLICATIA TVA ESTE "LIVRARI SCUTITE CU DREPT DE DEDUCERE" in loc de "LIVRARI 19%"
|
||||||
|
Incasare Hotel, cu tichete se face nota 418.02 - 472.03
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
25/04/2025
|
||||||
|
FLORA2ROA - 1.0.7
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Import. Corectare Explicatie TVA pentru facturi 4111. Completare cod de taxa si cod de plata SAFT.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
06/12/2024
|
||||||
|
FLORA2ROA - 1.0.5
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Import RESTAURANT. Se pot exclude din import Intrari, Iesiri, Vanzari Restaurant sau Hotel.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
04/12/2024
|
||||||
|
FLORA2ROA - 1.0.4
|
||||||
|
|
||||||
|
:modificare:
|
||||||
|
Import DESCARCARE RESTAURANT.
|
||||||
|
- Notele se cumuleaza dupa data document si tip document, in loc de numar document.
|
||||||
|
- Iesirile tip "Protocol" se inregistreaza 623 = 371.
|
||||||
|
-->
|
||||||
12
comun.h
Normal file
12
comun.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#IFNDEF COMUN_H
|
||||||
|
#DEFINE COMUN_H
|
||||||
|
|
||||||
|
|
||||||
|
#DEFINE LF CHR(10)
|
||||||
|
#DEFINE CR CHR(10)
|
||||||
|
#DEFINE CRLF CHR(13) + CHR(10)
|
||||||
|
|
||||||
|
#DEFINE CT_INSUCCES -1
|
||||||
|
#DEFINE CT_SUCCES 1
|
||||||
|
|
||||||
|
#ENDIF
|
||||||
1
config.fpw
Normal file
1
config.fpw
Normal file
@@ -0,0 +1 @@
|
|||||||
|
SCREEN=ON
|
||||||
104
docs/depanare_testare_flora2roa.md
Normal file
104
docs/depanare_testare_flora2roa.md
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# Depanare si testare FLORA2ROA (headless, fara IDE)
|
||||||
|
|
||||||
|
Implementarea in acest proiect a sistemului comun de depanare/testare VFP. Metoda generala si
|
||||||
|
capcanele complete: `D:\ROA\ROACONT\COMUN\docs\depanare_testare_vfp.md`,
|
||||||
|
`testare-ui-vfp.md`, `flux-editare-vfp-text.md`, `reguli_lucru.md`.
|
||||||
|
|
||||||
|
## Ce contine `Teste\`
|
||||||
|
|
||||||
|
Infrastructura (copiata din `COMUN\utile\Teste`, generica):
|
||||||
|
|
||||||
|
- `ui_harness.prg` - proceduri de handshake intre testul VFP si orchestrator
|
||||||
|
(`HarnessLog`, `HarnessStep`, `HarnessReady`, `HarnessWaitContinue`, `HarnessDone`).
|
||||||
|
- `vfp_ui_harness.ps1` - orchestrator: precompileaza, lanseaza vfp9, conduce testul pas cu pas
|
||||||
|
pe semafoare si face o captura PNG dupa fiecare pas. Fereastra e mutata off-screen, deci nu
|
||||||
|
fura focusul si se poate lucra in paralel.
|
||||||
|
- `_precompile.ps1` - precompilare izolata a `.fxp`-ului testului (proces copil separat).
|
||||||
|
|
||||||
|
Specific FLORA2ROA:
|
||||||
|
|
||||||
|
- `test_init_env_auto.prg` - initializare NEINTERACTIVA a mediului, echivalentul lui `main.prg`
|
||||||
|
fara `DO FORM` / `READ EVENTS`. Dupa apel sunt disponibile `goApp`, `goLog`, `goConn`,
|
||||||
|
`goExecutor`, `gcAppPath`. Conectarea la Oracle e OPTIONALA (primul parametru).
|
||||||
|
- `test_helpers.prg` - `TestErrorHandler` (ON ERROR care logheaza si continua, fara MESSAGEBOX)
|
||||||
|
si aserturile `TestAssert` / `TestAssertEqual` / `TestRezultat`.
|
||||||
|
- `mock_amessagebox.prg` - `amessagebox` care returneaza direct valoarea butonului, ca
|
||||||
|
dialogurile modale sa nu blocheze rularea headless.
|
||||||
|
- `verifica_sintaxa.ps1` - compilare de verificare pentru toate `.prg`-urile, pe copii in TEMP.
|
||||||
|
- `text_din_bin.ps1` / `bin_din_text.ps1` - conversie `.scx`/`.vcx` <-> text (`_textcache\`).
|
||||||
|
- `ruleaza_teste.ps1` - ruleaza toata suita si da sumarul.
|
||||||
|
- `test_frm_import_ui.prg` - smoke: formularul real porneste, Init completeaza intervalul din
|
||||||
|
`settings.ini`, `Trace` scrie in `edtInfo`.
|
||||||
|
- `test_export_date.prg` - functional: `ExportDate()` citeste XML-urile din interval si
|
||||||
|
populeaza cursoarele (fara Oracle).
|
||||||
|
- `test_conectare_roa.prg` - verifica drumul CU conectare la Oracle: fie se conecteaza si
|
||||||
|
executa o interogare de proba, fie raporteaza esecul si iese controlat. NU e in suita
|
||||||
|
implicita (depinde de reteaua/serverul Oracle).
|
||||||
|
|
||||||
|
## Comenzi uzuale
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# toata suita (sintaxa + teste UI cu capturi)
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\ruleaza_teste.ps1
|
||||||
|
|
||||||
|
# doar verificarea de sintaxa, dupa orice editare de .prg
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\verifica_sintaxa.ps1
|
||||||
|
|
||||||
|
# un singur test, cu capturi
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\vfp_ui_harness.ps1 `
|
||||||
|
-TestPrg 'D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_export_date.prg' -Steps @('afisat','importat')
|
||||||
|
|
||||||
|
# un singur test, fara capturi (auto-continue la 30s pe pas)
|
||||||
|
& 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_export_date.prg" 20250601 20250630
|
||||||
|
|
||||||
|
# verificarea conexiunii la Oracle (datele din settings.ini)
|
||||||
|
& 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_conectare_roa.prg"
|
||||||
|
```
|
||||||
|
|
||||||
|
Rezultatele: `Teste\<test>_log.txt` (linii `PASS:`/`FAIL:` si `REZULTAT:`),
|
||||||
|
capturi in `Teste\screenshots\`, erori runtime in `Teste\_erori_test.txt`.
|
||||||
|
|
||||||
|
## Editarea formularului pe text
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\text_din_bin.ps1 # binar -> _textcache\*.sc2
|
||||||
|
# editezi _textcache\frm_import.sc2 BYTE-SAFE, in Windows-1252:
|
||||||
|
# $t = [IO.File]::ReadAllText($p, [Text.Encoding]::GetEncoding(1252))
|
||||||
|
# [IO.File]::WriteAllText($p, $t, [Text.Encoding]::GetEncoding(1252))
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile _textcache\frm_import.sc2 -DryRun
|
||||||
|
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile _textcache\frm_import.sc2
|
||||||
|
```
|
||||||
|
|
||||||
|
Write-back-ul face fidelity check (bin -> text, comparat pe octeti) inainte de a atinge
|
||||||
|
binarul si refuza daca `frm_import.scx` e blocat de IDE sau de `flora2roa.exe`.
|
||||||
|
|
||||||
|
## Un test nou in 5 pasi
|
||||||
|
|
||||||
|
1. `SET SAFETY OFF` + `SET TALK OFF` ca PRIMA linie, apoi `PUBLIC gcUILog, gcSyncDir`.
|
||||||
|
2. `DO test_init_env_auto WITH .F.` (sau `.T.` cand testul chiar are nevoie de Oracle), apoi
|
||||||
|
`SET PROCEDURE TO ui_harness ADDITIVE` si `mock_amessagebox` ULTIMUL.
|
||||||
|
3. `DO FORM (gcAppPath + 'frm_import') NAME goImportFrm NOSHOW`, `WindowType = 0`, `Show()`.
|
||||||
|
Modal (`Show(1)`) nu returneaza si blocheaza testul.
|
||||||
|
4. Pe fiecare pas: actiunea din fluxul REAL al utilizatorului (metoda pe care o apeleaza
|
||||||
|
butonul, nu popularea directa a cursoarelor), aserturi cu `TestAssert`, apoi
|
||||||
|
`DO HarnessStep WITH <n>, '<eticheta>'`. La final `DO HarnessDone WITH TestRezultat()` si `QUIT`.
|
||||||
|
5. Inregistreaza testul in lista `$suita` din `ruleaza_teste.ps1`.
|
||||||
|
|
||||||
|
## Capcane confirmate in acest proiect
|
||||||
|
|
||||||
|
- `ErrorHandler` din `main.prg` deschide `MESSAGEBOX` si face `SET STEP ON`: headless ar bloca
|
||||||
|
procesul la nesfarsit. De aceea `test_init_env_auto.prg` instaleaza `TestErrorHandler`.
|
||||||
|
- Compilarile repetate de `vfp9` din ACEEASI sesiune PowerShell esueaza tacut (procesul
|
||||||
|
porneste dar nu executa). `verifica_sintaxa.ps1` compileaza toate fisierele intr-o singura
|
||||||
|
rulare; harness-ul foloseste proces copil izolat pentru precompilare.
|
||||||
|
- `Set Exclusive On` din `main.prg` nu se pastreaza in teste (mediul de test deschide cursoare
|
||||||
|
partajate); daca un test are nevoie de comportamentul exact al aplicatiei, il seteaza el.
|
||||||
|
- Testele nu ruleaza in paralel intre ele: harness-ul isi omoara instantele `vfp9` proprii
|
||||||
|
inainte de fiecare lansare (filtrat pe linia de comanda; instantele straine nu sunt atinse).
|
||||||
|
- `settings.ini` decide folderele de import. Testele functionale depind de continutul din
|
||||||
|
`EXEMPLE\hotel` si `EXEMPLE\restaurant`; daca intervalul nu are fisiere, cursoarele raman goale.
|
||||||
|
- Un test care se conecteaza la Oracle face `SQLSETPROP(0, 'DispLogin', 3)` inainte de conectare:
|
||||||
|
altfel, cu date de acces gresite, driverul ODBC deschide un dialog de login care blocheaza
|
||||||
|
procesul headless la nesfarsit (simptom: proces viu, CPU 0%, log fara linii noi).
|
||||||
|
- `CreeazaNote()` si `ScrieNote()` scriu in ROA si NU pot fi testate fara Oracle. Bifa
|
||||||
|
"Nu scrie note contabile" (`chkTest.Value = 1`) opreste scrierea; testele o lasa activa.
|
||||||
12
fisiere.prg
Normal file
12
fisiere.prg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
CLOSE DATABASES
|
||||||
|
SET DELETED ON
|
||||||
|
SET ANSI ON
|
||||||
|
SET EXACT ON
|
||||||
|
|
||||||
|
lcdir = [E:\vali\MARITIMO_DBF\]
|
||||||
|
CD (m.lcDir)
|
||||||
|
lnFiles = ADIR(laFiles, '*.dbf')
|
||||||
|
FOR lnFile = 1 TO lnFiles
|
||||||
|
lcFile = lcDir + laFiles(lnFile,1)
|
||||||
|
USE (m.lcFile) IN 0 SHARED
|
||||||
|
ENDFOR
|
||||||
103
flora2roa.pj2
Normal file
103
flora2roa.pj2
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
|
||||||
|
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
*< FOXBIN2PRG: Version="1.21" SourceFile="flora2roa.pjx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
|
||||||
|
*
|
||||||
|
LPARAMETERS tcDir
|
||||||
|
|
||||||
|
lcCurdir = SYS(5)+CURDIR()
|
||||||
|
CD ( EVL( tcDir, JUSTPATH( SYS(16) ) ) )
|
||||||
|
|
||||||
|
*<DevInfo>
|
||||||
|
_Author = ""
|
||||||
|
_Company = ""
|
||||||
|
_Address = ""
|
||||||
|
_City = ""
|
||||||
|
_State = ""
|
||||||
|
_PostalCode = ""
|
||||||
|
_Country = ""
|
||||||
|
*--
|
||||||
|
_Comments = ""
|
||||||
|
_CompanyName = " "
|
||||||
|
_FileDescription = " "
|
||||||
|
_LegalCopyright = ""
|
||||||
|
_LegalTrademark = ""
|
||||||
|
_ProductName = " "
|
||||||
|
_MajorVer = "2"
|
||||||
|
_MinorVer = "0"
|
||||||
|
_Revision = "5"
|
||||||
|
_LanguageID = ""
|
||||||
|
_AutoIncrement = "0"
|
||||||
|
*</DevInfo>
|
||||||
|
|
||||||
|
|
||||||
|
*<BuildProj>
|
||||||
|
*<.HomeDir = 'd:\proiecte\flora\flora2roa' />
|
||||||
|
|
||||||
|
FOR EACH loProject IN _VFP.Projects FOXOBJECT
|
||||||
|
loProject.Close()
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
STRTOFILE( '', '__newproject.f2b' )
|
||||||
|
BUILD PROJECT flora2roa.pjx FROM '__newproject.f2b'
|
||||||
|
FOR EACH loProject IN _VFP.Projects FOXOBJECT
|
||||||
|
loProject.Close()
|
||||||
|
ENDFOR
|
||||||
|
|
||||||
|
MODIFY PROJECT 'flora2roa.pjx' NOWAIT NOSHOW NOPROJECTHOOK
|
||||||
|
|
||||||
|
loProject = _VFP.Projects('flora2roa.pjx')
|
||||||
|
|
||||||
|
WITH loProject.FILES
|
||||||
|
.ADD('app.ico') && *< FileMetadata: Type="x" Cpid="0" Timestamp="0" ID="0" ObjRev="0" User="" />
|
||||||
|
.ADD('app.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('capp.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('comun.h') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" User="" />
|
||||||
|
.ADD('config.fpw') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" User="" />
|
||||||
|
.ADD('frm_import.scx') && *< FileMetadata: Type="K" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('import.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('main.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('myapp.prg') && *< FileMetadata: Type="P" Cpid="1250" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('myutils.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
.ADD('security.h') && *< FileMetadata: Type="T" Cpid="1252" Timestamp="0" ID="0" ObjRev="0" User="" />
|
||||||
|
.ADD('settings.ini') && *< FileMetadata: Type="T" Cpid="1250" Timestamp="0" ID="0" ObjRev="0" User="" />
|
||||||
|
.ADD('vfpconnection_utils.prg') && *< FileMetadata: Type="P" Cpid="1252" Timestamp="0" ID="0" ObjRev="544" User="" />
|
||||||
|
*</BuildProj>
|
||||||
|
|
||||||
|
.ITEM('__newproject.f2b').Remove()
|
||||||
|
|
||||||
|
*<FileComments>
|
||||||
|
*</FileComments>
|
||||||
|
|
||||||
|
*<ExcludedFiles>
|
||||||
|
.ITEM("settings.ini").Exclude = .T.
|
||||||
|
*</ExcludedFiles>
|
||||||
|
|
||||||
|
*<TextFiles>
|
||||||
|
.ITEM("comun.h").Type = 'T'
|
||||||
|
.ITEM(lcCurdir + 'config.fpw').Type = 'T'
|
||||||
|
.ITEM("security.h").Type = 'T'
|
||||||
|
*</TextFiles>
|
||||||
|
ENDWITH
|
||||||
|
|
||||||
|
WITH loProject
|
||||||
|
*<ProjectProperties>
|
||||||
|
.SetMain("main.prg")
|
||||||
|
|
||||||
|
.Icon = "app.ico"
|
||||||
|
.Debug = .F.
|
||||||
|
.Encrypted = .F.
|
||||||
|
*<.CmntStyle = 1 />
|
||||||
|
*<.NoLogo = .F. />
|
||||||
|
*<.SaveCode = .T. />
|
||||||
|
*<.User = '' />
|
||||||
|
.ProjectHookLibrary = ''
|
||||||
|
.ProjectHookClass = ''
|
||||||
|
*</ProjectProperties>
|
||||||
|
ENDWITH
|
||||||
|
|
||||||
|
|
||||||
|
_VFP.Projects('flora2roa.pjx').Close()
|
||||||
|
*ERASE '__newproject.f2b'
|
||||||
|
CD (lcCurdir)
|
||||||
|
RETURN
|
||||||
1
flora2roa.txt
Normal file
1
flora2roa.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
2.0.3
|
||||||
2259
frm_import.sc2
Normal file
2259
frm_import.sc2
Normal file
File diff suppressed because it is too large
Load Diff
0
import.prg
Normal file
0
import.prg
Normal file
132
main.prg
Normal file
132
main.prg
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
#INCLUDE COMUN.H
|
||||||
|
#INCLUDE SECURITY.H
|
||||||
|
_screen.Icon= 'D:\PROIECTE\FLORA\FLORA2ROA\app.ico'
|
||||||
|
RELEASE MENU _Msysmenu
|
||||||
|
|
||||||
|
Close Databases All
|
||||||
|
Set Deleted On
|
||||||
|
Set Exclusive On
|
||||||
|
Set Ansi On
|
||||||
|
Set Exact On
|
||||||
|
Set Century On
|
||||||
|
Set Date Dmy
|
||||||
|
Set Safety Off
|
||||||
|
|
||||||
|
Private gcAppName, gcAppPath, gcTempPath
|
||||||
|
|
||||||
|
Local lcMesaj, lcOnShutdown, llSucces
|
||||||
|
PRIVATE goApp as "MyApp"
|
||||||
|
PRIVATE goLog as "Log"
|
||||||
|
Local lcFile, lcFileI, i
|
||||||
|
|
||||||
|
Local lcLibraryPath
|
||||||
|
Local loEx As Exception
|
||||||
|
|
||||||
|
gcAppName = 'FLORA2ROA'
|
||||||
|
gcAppPath = Addbs(Justpath(Sys(16,0)))
|
||||||
|
gcTempPath = GETENV("TEMP")
|
||||||
|
SET DEFAULT TO (gcAppPath)
|
||||||
|
|
||||||
|
lcOnShutdown="ShutDown()"
|
||||||
|
On Shutdown &lcOnShutdown
|
||||||
|
On Error ErrorHandler(Error(),Program(),Lineno())
|
||||||
|
|
||||||
|
SET PROCEDURE TO capp.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO app.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO myutils.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO vfpconnection_utils.prg ADDITIVE
|
||||||
|
SET PROCEDURE TO myapp.prg ADDITIVE
|
||||||
|
|
||||||
|
llSucces = .F.
|
||||||
|
lcLibraryPath = m.gcAppPath + "vfpconnection.fll"
|
||||||
|
If File(lcLibraryPath)
|
||||||
|
llSucces = .F.
|
||||||
|
Try
|
||||||
|
Set Library To (lcLibraryPath) Additive
|
||||||
|
llSucces = .T.
|
||||||
|
Catch To loEx
|
||||||
|
lcMesaj = 'vfpconnection ' + loEx.Message
|
||||||
|
ShowMessage(m.lcMesaj)
|
||||||
|
Endtry
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
If m.llSucces
|
||||||
|
lcLibraryPath = m.gcAppPath + "vfpencryption.fll"
|
||||||
|
If File(lcLibraryPath)
|
||||||
|
llSucces = .F.
|
||||||
|
Try
|
||||||
|
Set Library To (lcLibraryPath) Additive
|
||||||
|
llSucces = .T.
|
||||||
|
Catch To loEx
|
||||||
|
lcMesaj = 'vfpencryption' + loEx.Message
|
||||||
|
ShowMessage(m.lcMesaj)
|
||||||
|
Endtry
|
||||||
|
Endif
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
***********************
|
||||||
|
PRIVATE goImportFrm, goConn, goExecutor
|
||||||
|
goImportFrm = NULL
|
||||||
|
goConn = CREATEOBJECT("oConn")
|
||||||
|
goExecutor = CREATEOBJECT("oExecutor")
|
||||||
|
|
||||||
|
goLog = Createobject("Log", gcApppath + "log\log_" + gcAppName + "_" + Dtos(Date()) + ".txt")
|
||||||
|
goApp = Createobject("MyApp")
|
||||||
|
|
||||||
|
*!* 02.03.2010
|
||||||
|
SetConnectTimeout(goApp.oSettings.connect_timeout) && Default is 10 seconds
|
||||||
|
SetResponseTimeout(goApp.oSettings.response_timeout) && Default is 10 seconds
|
||||||
|
*!* 02.03.2010 ^
|
||||||
|
|
||||||
|
DO FORM frm_import NAME goImportFrm LINKED
|
||||||
|
|
||||||
|
READ EVENTS
|
||||||
|
|
||||||
|
SHUTDOWN()
|
||||||
|
|
||||||
|
*************************
|
||||||
|
Procedure ShowMessage
|
||||||
|
Lparameters tcMessage
|
||||||
|
Messagebox(m.tcMessage)
|
||||||
|
Endproc
|
||||||
|
*************************
|
||||||
|
Function ErrorHandler(nError,cMethod,nLine)
|
||||||
|
Local lcErrorMsg,lcCodeLineMsg
|
||||||
|
|
||||||
|
Wait Clear
|
||||||
|
lcErrorMsg=Message()+Chr(13)+Chr(13)
|
||||||
|
lcErrorMsg=lcErrorMsg+"Method: "+cMethod
|
||||||
|
lcCodeLineMsg=Message(1)
|
||||||
|
If Between(nLine,1,10000) And Not lcCodeLineMsg="..."
|
||||||
|
lcErrorMsg=lcErrorMsg+Chr(13)+"Line: "+Alltrim(Str(nLine))
|
||||||
|
If Not Empty(lcCodeLineMsg)
|
||||||
|
lcErrorMsg=lcErrorMsg+Chr(13)+Chr(13)+lcCodeLineMsg
|
||||||
|
Endif
|
||||||
|
ENDIF
|
||||||
|
SET STEP ON
|
||||||
|
If Messagebox(lcErrorMsg,17,_Screen.Caption)#1
|
||||||
|
On Error
|
||||||
|
Return .F.
|
||||||
|
Endif
|
||||||
|
Endfunc
|
||||||
|
*************************
|
||||||
|
Function Shutdown
|
||||||
|
Cleanup()
|
||||||
|
Quit
|
||||||
|
Endfunc
|
||||||
|
*************************
|
||||||
|
Function Cleanup
|
||||||
|
On Error
|
||||||
|
On Shutdown
|
||||||
|
Set Classlib To
|
||||||
|
Set Path To
|
||||||
|
Clear All
|
||||||
|
Close All
|
||||||
|
*POP MENU _msysmenu
|
||||||
|
Return
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1707
myutils.prg
Normal file
1707
myutils.prg
Normal file
File diff suppressed because it is too large
Load Diff
1
security.h
Normal file
1
security.h
Normal file
@@ -0,0 +1 @@
|
|||||||
|
#DEFINE ENCRYPTKEY "233!do*32Di3-o23\409"
|
||||||
72
settings.flora.ini
Normal file
72
settings.flora.ini
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
[general]
|
||||||
|
host = ROA
|
||||||
|
user = XENOTI
|
||||||
|
password = +vIcfGb3NCfLCZXaqOM19Q==
|
||||||
|
cale_import_fidelio = \\10.0.0.37\Biz\
|
||||||
|
cale_import_biz = C:\BIZ\
|
||||||
|
cale_import = C:\roa\flora2roa\IMPORT\
|
||||||
|
last_data1 = 30/04/2025
|
||||||
|
last_data2 = 30/04/2025
|
||||||
|
|
||||||
|
tva_incasare = 0
|
||||||
|
|
||||||
|
id_part_casa_restaurant = 251
|
||||||
|
id_part_card_restaurant = 230
|
||||||
|
id_part_tichete_restaurant = 230
|
||||||
|
id_part_clienti_restaurant = 234
|
||||||
|
|
||||||
|
id_part_casa_hotel = 251
|
||||||
|
id_part_card_hotel = 230
|
||||||
|
id_part_clienti_hotel = 233
|
||||||
|
|
||||||
|
cont_casa_restaurant = 5311
|
||||||
|
acont_casa_restaurant =
|
||||||
|
|
||||||
|
cont_card_restaurant = 5125
|
||||||
|
acont_card_restaurant = 01
|
||||||
|
|
||||||
|
cont_tichete_restaurant = 472
|
||||||
|
acont_tichete_restaurant = 03
|
||||||
|
|
||||||
|
cont_casa_hotel = 5311
|
||||||
|
acont_casa_hotel =
|
||||||
|
|
||||||
|
cont_card_hotel = 5125
|
||||||
|
acont_card_hotel = 01
|
||||||
|
|
||||||
|
cont_tichete_hotel = 5125
|
||||||
|
acont_tichete_hotel = 01
|
||||||
|
|
||||||
|
cont_viramentint_hotel = 418
|
||||||
|
acont_viramentint_hotel = 01
|
||||||
|
|
||||||
|
cont_clienti_restaurant = 418
|
||||||
|
acont_clienti_restaurant = 02
|
||||||
|
|
||||||
|
cont_clienti_hotel = 4111
|
||||||
|
acont_clienti_hotel = 01
|
||||||
|
|
||||||
|
cont_factura_casa_hotel = 4111
|
||||||
|
cont_factura_card_hotel = 4111
|
||||||
|
cont_factura_tichete_hotel = 4111
|
||||||
|
cont_factura_viramentint_hotel = 4111
|
||||||
|
acont_fatura_casa_hotel = 01
|
||||||
|
acont_factura_card_hotel = 02
|
||||||
|
acont_factura_tichete_hotel = 02
|
||||||
|
acont_factura_viramentint_hotel = 01
|
||||||
|
|
||||||
|
acont_marfa_bar = 01
|
||||||
|
acont_marfa_bucatarie = 08
|
||||||
|
|
||||||
|
acont_venituri_bar = 0201
|
||||||
|
acont_venituri_bucatarie = 0202
|
||||||
|
|
||||||
|
acont_ach_4428 = TP
|
||||||
|
acont_ach_4426 =
|
||||||
|
acont_vz_4428 = TI
|
||||||
|
acont_vz_4427 =
|
||||||
|
acont_mf_4428 = M
|
||||||
|
|
||||||
|
[connection]
|
||||||
|
connection_timeout = 60
|
||||||
|
response_timeout = 60
|
||||||
72
settings.ini
Normal file
72
settings.ini
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
[general]
|
||||||
|
host = CONPRESS
|
||||||
|
user = XENOTI
|
||||||
|
password = +vIcfGb3NCfLCZXaqOM19Q==
|
||||||
|
cale_import_fidelio = D:\PROIECTE\FLORA\FLORA2ROA\EXEMPLE\hotel\
|
||||||
|
cale_import_biz = D:\PROIECTE\FLORA\FLORA2ROA\EXEMPLE\restaurant\
|
||||||
|
cale_import = D:\PROIECTE\FLORA\FLORA2ROA\EXEMPLE\
|
||||||
|
last_data1 = 01/08/2025
|
||||||
|
last_data2 = 01/08/2025
|
||||||
|
|
||||||
|
tva_incasare = 0
|
||||||
|
|
||||||
|
id_part_casa_restaurant = 251
|
||||||
|
id_part_card_restaurant = 230
|
||||||
|
id_part_tichete_restaurant = 230
|
||||||
|
id_part_clienti_restaurant = 234
|
||||||
|
|
||||||
|
id_part_casa_hotel = 251
|
||||||
|
id_part_card_hotel = 230
|
||||||
|
id_part_clienti_hotel = 233
|
||||||
|
|
||||||
|
cont_casa_restaurant = 5311
|
||||||
|
acont_casa_restaurant =
|
||||||
|
|
||||||
|
cont_card_restaurant = 5125
|
||||||
|
acont_card_restaurant = 01
|
||||||
|
|
||||||
|
cont_tichete_restaurant = 472
|
||||||
|
acont_tichete_restaurant = 03
|
||||||
|
|
||||||
|
cont_casa_hotel = 5311
|
||||||
|
acont_casa_hotel =
|
||||||
|
|
||||||
|
cont_card_hotel = 5125
|
||||||
|
acont_card_hotel = 01
|
||||||
|
|
||||||
|
cont_tichete_hotel = 5125
|
||||||
|
acont_tichete_hotel = 01
|
||||||
|
|
||||||
|
cont_viramentint_hotel = 418
|
||||||
|
acont_viramentint_hotel = 01
|
||||||
|
|
||||||
|
cont_clienti_restaurant = 418
|
||||||
|
acont_clienti_restaurant = 02
|
||||||
|
|
||||||
|
cont_clienti_hotel = 4111
|
||||||
|
acont_clienti_hotel = 01
|
||||||
|
|
||||||
|
cont_factura_casa_hotel = 4111
|
||||||
|
cont_factura_card_hotel = 4111
|
||||||
|
cont_factura_tichete_hotel = 4111
|
||||||
|
cont_factura_viramentint_hotel = 4111
|
||||||
|
acont_fatura_casa_hotel = 01
|
||||||
|
acont_factura_card_hotel = 02
|
||||||
|
acont_factura_tichete_hotel = 02
|
||||||
|
acont_factura_viramentint_hotel = 01
|
||||||
|
|
||||||
|
acont_marfa_bar = 01
|
||||||
|
acont_marfa_bucatarie = 08
|
||||||
|
|
||||||
|
acont_venituri_bar = 0201
|
||||||
|
acont_venituri_bucatarie = 0202
|
||||||
|
|
||||||
|
acont_ach_4428 = TP
|
||||||
|
acont_ach_4426 =
|
||||||
|
acont_vz_4428 = TI
|
||||||
|
acont_vz_4427 =
|
||||||
|
acont_mf_4428 = M
|
||||||
|
|
||||||
|
[connection]
|
||||||
|
connection_timeout = 60
|
||||||
|
response_timeout = 60
|
||||||
109
update.bat
Normal file
109
update.bat
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
setlocal enabledelayedexpansion
|
||||||
|
|
||||||
|
:: Set the variables
|
||||||
|
set DOWNLOAD_URL=https://roa.romfast.ro/contafinupdate/default.aspx/update/download/1/
|
||||||
|
|
||||||
|
set APP_NAME=flora2roa
|
||||||
|
set APP_DIR=%~dp0
|
||||||
|
set CURRENT_VERSION_FILE=%APP_NAME%.txt
|
||||||
|
set SERVER_VERSION_FILE=%APP_NAME%.txt
|
||||||
|
set NEW_VERSION_FILE=%APP_NAME%_server.txt
|
||||||
|
set UPDATE_FILE=%APP_NAME%.zip
|
||||||
|
|
||||||
|
set UNZIP_DIR=%APP_DIR%\unzip
|
||||||
|
set APP_EXE=%APP_NAME%.exe
|
||||||
|
set APP_EXE_OLD=%APP_NAME%_old.exe
|
||||||
|
set LOG_FILE=%APP_DIR%update_log.txt
|
||||||
|
|
||||||
|
:: Log the variables for debugging
|
||||||
|
echo [%date% %time%] APP_DIR=%APP_DIR% >> %LOG_FILE%
|
||||||
|
echo [%date% %time%] LOG_FILE=%LOG_FILE% >> %LOG_FILE%
|
||||||
|
echo [%date% %time%] UNZIP_DIR=%UNZIP_DIR% >> %LOG_FILE%
|
||||||
|
|
||||||
|
echo [%date% %time%] Start actualizare >> %LOG_FILE%
|
||||||
|
|
||||||
|
CD %APP_DIR%
|
||||||
|
|
||||||
|
:: Check the current version
|
||||||
|
if not exist "%CURRENT_VERSION_FILE%" (
|
||||||
|
echo [%date% %time%] Current version file not found. >> %LOG_FILE%
|
||||||
|
echo 0.0.0 >> %APP_DIR%\%CURRENT_VERSION_FILE%
|
||||||
|
)
|
||||||
|
|
||||||
|
set /p CURRENT_VERSION=<"%CURRENT_VERSION_FILE%"
|
||||||
|
|
||||||
|
echo [%date% %time%] current version %CURRENT_VERSION_FILE%: %CURRENT_VERSION% >> %LOG_FILE%
|
||||||
|
|
||||||
|
:: Get the new version from the server
|
||||||
|
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('%DOWNLOAD_URL%%SERVER_VERSION_FILE%', '%APP_DIR%\%NEW_VERSION_FILE%')" || (
|
||||||
|
echo [%date% %time%] Error: Failed to download new version file: %DOWNLOAD_URL%%SERVER_VERSION_FILE% >> %LOG_FILE%
|
||||||
|
goto END
|
||||||
|
)
|
||||||
|
|
||||||
|
set /p NEW_VERSION=<"%APP_DIR%\%NEW_VERSION_FILE%"
|
||||||
|
|
||||||
|
echo [%date% %time%] server version: %NEW_VERSION% >> %LOG_FILE%
|
||||||
|
|
||||||
|
:: Check if an update is available
|
||||||
|
if "%CURRENT_VERSION%" geq "%NEW_VERSION%" (
|
||||||
|
echo [%date% %time%] No update available. >> %LOG_FILE%
|
||||||
|
goto END
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Download the update
|
||||||
|
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('%DOWNLOAD_URL%%UPDATE_FILE%', '%APP_DIR%\%UPDATE_FILE%')" || (
|
||||||
|
echo [%date% %time%] Error: Failed to download update file. >> %LOG_FILE%
|
||||||
|
goto END
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Check if the application is running
|
||||||
|
tasklist /fi "imagename eq %APP_EXE%" | find /i "%APP_EXE%" > nul
|
||||||
|
if %errorlevel% equ 0 (
|
||||||
|
echo [%date% %time%] Error: %APP_NAME% is currently running. Please close it before updating. >> %LOG_FILE%
|
||||||
|
goto END
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Unzip the update
|
||||||
|
powershell -Command "Expand-Archive -Path '%APP_DIR%\%UPDATE_FILE%' -DestinationPath '%UNZIP_DIR%' -Force" || (
|
||||||
|
echo [%date% %time%] Error: Failed to unzip update file. >> %LOG_FILE%
|
||||||
|
goto END
|
||||||
|
)
|
||||||
|
|
||||||
|
:: Update the application
|
||||||
|
if exist "%APP_DIR%\%APP_EXE_OLD%" (
|
||||||
|
del "%APP_DIR%\%APP_EXE_OLD%"
|
||||||
|
echo [%date% %time%] Fișierul %APP_DIR%\%APP_EXE_OLD% a fost șters >> %LOG_FILE%
|
||||||
|
)
|
||||||
|
|
||||||
|
if not exist "%UNZIP_DIR%\%APP_EXE%" (
|
||||||
|
echo [%date% %time%] Nu exista fișierul %UNZIP_DIR%\%APP_EXE% >> %LOG_FILE%
|
||||||
|
goto END
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist "%APP_DIR%\%APP_EXE%" (
|
||||||
|
rename "%APP_DIR%\%APP_EXE%" "%APP_EXE_OLD%"
|
||||||
|
echo [%date% %time%] Fișierul %APP_DIR%\%APP_EXE% a fost redenumit în %APP_DIR%\%APP_EXE_OLD% >> %LOG_FILE%
|
||||||
|
)
|
||||||
|
|
||||||
|
move /y "%UNZIP_DIR%\%APP_EXE%" "%APP_DIR%\%APP_EXE%"
|
||||||
|
|
||||||
|
echo [%date% %time%] Updating %APP_DIR%\%APP_NAME% to version %NEW_VERSION%... >> %LOG_FILE%
|
||||||
|
|
||||||
|
:: Update the local version file
|
||||||
|
if exist "%APP_DIR%\%CURRENT_VERSION_FILE%" (
|
||||||
|
del "%APP_DIR%\%CURRENT_VERSION_FILE%"
|
||||||
|
echo Fișierul %CURRENT_VERSION_FILE% a fost șters. >> %LOG_FILE%
|
||||||
|
)
|
||||||
|
|
||||||
|
if exist "%APP_DIR%\%NEW_VERSION_FILE%" (
|
||||||
|
rename "%APP_DIR%\%NEW_VERSION_FILE%" "%CURRENT_VERSION_FILE%"
|
||||||
|
echo Fișierul %APP_DIR%\%NEW_VERSION_FILE% a fost redenumit în %CURRENT_VERSION_FILE%. >> %LOG_FILE%
|
||||||
|
) else (
|
||||||
|
echo Fișierul %APP_DIR%\%NEW_VERSION_FILE% nu a fost găsit. >> %LOG_FILE%
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [%date% %time%] Update successful. >> %LOG_FILE%
|
||||||
|
|
||||||
|
:END
|
||||||
|
start "" "%APP_DIR%\%APP_EXE%"
|
||||||
|
exit /b
|
||||||
BIN
vfpconnection.fll
Normal file
BIN
vfpconnection.fll
Normal file
Binary file not shown.
174
vfpconnection_demo.prg
Normal file
174
vfpconnection_demo.prg
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
*!* The code below is not designed to run all at once
|
||||||
|
*!* Run the individual examples seperately
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* Upload Examples
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
*!* FILE
|
||||||
|
?FILEGet("File:///C:\Source.txt", "C:\Destination.txt", "MyProgress()", "MyTrace()")
|
||||||
|
*!* FTP
|
||||||
|
?FTPGet("FTP://UserName:Password@somedomain.com/directory/Source.zip", "C:\Destination.zip", "MyProgress()", "MyTrace()")
|
||||||
|
*!* FTPS
|
||||||
|
?FTPSGet("FTPS://UserName:Password@somedomain.com:21/directory/Source.zip", "C:\Destination.zip", "MyProgress()", "MyTrace()")
|
||||||
|
*!* HTTP
|
||||||
|
?HTTPGet("http://www.somedomain.com/Source.htm", "C:\Destination.htm", "MyProgress()", "MyTrace()")
|
||||||
|
*!* HTTPS
|
||||||
|
?HTTPSGet("https://www.somedomain.com/Source.htm", "C:\Destination.htm", "MyProgress()", "MyTrace()")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* Download Examples
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
*!* FILE
|
||||||
|
?FILEPut("C:\Source.txt", "File:///C:\Destination.txt", "MyProgress()", "MyTrace()")
|
||||||
|
*!* FTP
|
||||||
|
?FTPPut("C:\Source.zip", "FTP://UserName:Password@somedomain.com/directory/Destination.zip", "MyProgress()", "MyTrace()")
|
||||||
|
*!* FTPS
|
||||||
|
?FTPSPut("C:\Source.zip", "FTPS://UserName:Password@somedomain.com:21/directory/Destination.zip", "MyProgress()", "MyTrace()")
|
||||||
|
*!* HTTP
|
||||||
|
?HTTPPut("C:\Source.htm", "http://www.somedomain.com/Destination.htm", "MyProgress()", "MyTrace()")
|
||||||
|
*!* HTTPS
|
||||||
|
?HTTPSPut("C:\Source.htm", "https://www.somedomain.com/Destination.htm", "MyProgress()", "MyTrace()")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* To String Examples
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
*!* FILE
|
||||||
|
?FILEToStr("C:\Source.txt")
|
||||||
|
*!* FTP
|
||||||
|
?FTPTOSTR("FTP://UserName:Password@somedomain.com:21/directory/Source.txt")
|
||||||
|
*!* FTPS
|
||||||
|
?FTPSTOSTR("FTPS://UserName:Password@somedomain.com:21/directory/Source.txt")
|
||||||
|
*!* HTTP
|
||||||
|
?HTTPToStr("http://www.somedomain.com/Source.txt")
|
||||||
|
*!* HTTPS
|
||||||
|
?HTTPSToStr("https://www.somedomain.com/Source.txt")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* HTTP Post Examples
|
||||||
|
********************************************************************
|
||||||
|
*!* Simple HTTP Post
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
LOCAL lcPost
|
||||||
|
m.lcPost = "fname=John&lname=Smith"
|
||||||
|
?HttpSimplePost("http://www.snee.com/xml/crud/posttest.cgi", m.lcPost, "", "MyTrace()")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
*!* MultiPart/Form-Data HTTP Post
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
LOCAL ARRAY aryPost(2,2)
|
||||||
|
aryPost(1,1) = "fname" && name
|
||||||
|
aryPost(1,2) = "test first" && value
|
||||||
|
aryPost(2,1) = "lname" && name
|
||||||
|
aryPost(2,2) = "test last" && value
|
||||||
|
?HttpPost("http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi", @aryPost, "", "MyTrace()")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* FTP Commands Example
|
||||||
|
********************************************************************
|
||||||
|
*!* Rename FTP Directory
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
LOCAL ARRAY aryFTPCommands(4)
|
||||||
|
aryFTPCommands(1) = "CWD /"
|
||||||
|
aryFTPCommands(2) = "PWD"
|
||||||
|
aryFTPCommands(3) = "RNFR MyDir"
|
||||||
|
aryFTPCommands(4) = "RNTO RenamedMyDir"
|
||||||
|
?FTPCommands("FTP://username:password@somedomain.com/", @aryFTPCommands, "MyTrace()")
|
||||||
|
*!* ?FTPSCommands("FTPS://username:password@somedomain.com/", @aryFTPCommands, "MyTrace()")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* URL Encode/Decode Example
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
LOCAL lcString, lcEncoded, lcDecoded
|
||||||
|
m.lcString = "A!B@C#D$E%F^G&H*I(J)K_L-M=N+O[P]Q{R}S|T\U:V;W'X,Y.Z<0>1/2?3<>4<EFBFBD>5<EFBFBD>6<EFBFBD>7<EFBFBD>8<EFBFBD>9"
|
||||||
|
m.lcEncoded = UrlEncode(m.lcString)
|
||||||
|
m.lcDecoded = UrlDecode(m.lcEncoded)
|
||||||
|
?"Escaped: " + m.lcEncoded
|
||||||
|
?"Unescaped: " + m.lcDecoded
|
||||||
|
?"Original : " + m.lcString
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* Setting Timeouts Example
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
SetConnectTimeout(30) && Default is 10 seconds
|
||||||
|
SetResponseTimeout(30) && Default is 10 seconds
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* Datetime String to the number of seconds from Epoch (12 Midnight on January 1, 1970)
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
?DateStrToEpochSec("Sun, 06 Nov 1994 08:49:37 GMT")
|
||||||
|
?DateStrToEpochSec("Sunday, 06-Nov-94 08:49:37 GMT")
|
||||||
|
?DateStrToEpochSec("Sun Nov 6 08:49:37 1994")
|
||||||
|
?DateStrToEpochSec("06 Nov 1994 08:49:37 GMT")
|
||||||
|
?DateStrToEpochSec("06-Nov-94 08:49:37 GMT")
|
||||||
|
?DateStrToEpochSec("Nov 6 08:49:37 1994")
|
||||||
|
?DateStrToEpochSec("06 Nov 1994 08:49:37")
|
||||||
|
?DateStrToEpochSec("06-Nov-94 08:49:37")
|
||||||
|
?DateStrToEpochSec("1994 Nov 6 08:49:37")
|
||||||
|
?DateStrToEpochSec("GMT 08:49:37 06-Nov-94 Sunday")
|
||||||
|
?DateStrToEpochSec("94 6 Nov 08:49:37")
|
||||||
|
?DateStrToEpochSec("1994 Nov 6")
|
||||||
|
?DateStrToEpochSec("06-Nov-94")
|
||||||
|
?DateStrToEpochSec("Sun Nov 6 94")
|
||||||
|
?DateStrToEpochSec("1994.Nov.6")
|
||||||
|
?DateStrToEpochSec("Sun/Nov/6/94/GMT")
|
||||||
|
?DateStrToEpochSec("Sun, 06 Nov 1994 08:49:37 CET")
|
||||||
|
?DateStrToEpochSec("06 Nov 1994 08:49:37 EST")
|
||||||
|
?DateStrToEpochSec("Sun, 12 Sep 2004 15:05:58 -0700")
|
||||||
|
?DateStrToEpochSec("Sat, 11 Sep 2004 21:32:11 +0200")
|
||||||
|
?DateStrToEpochSec("20040912 15:05:58 -0700")
|
||||||
|
?DateStrToEpochSec("20040911 +0200")
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
********************************************************************
|
||||||
|
*!* Determine the version of libcurl and OpenSSL that were used for VFPConnection.fll
|
||||||
|
********************************************************************
|
||||||
|
SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
|
||||||
|
?CURLVERSION()
|
||||||
|
SET LIBRARY TO
|
||||||
|
|
||||||
|
***********************
|
||||||
|
FUNCTION MyProgress() && Callback from the FLL - can be used to track operation progress
|
||||||
|
***********************
|
||||||
|
*!* You can create your own function, procedure or method to handle this and name it whatever you want.
|
||||||
|
*!* The nConnectTotalBytes and nConnectBytesSoFar are private variables created on-the-fly by the FLL
|
||||||
|
?m.nConnectTotalBytes
|
||||||
|
?m.nConnectBytesSoFar
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
***********************
|
||||||
|
FUNCTION MyTrace() && Callback from the FLL - used to provide a detailed trace of the operation
|
||||||
|
***********************
|
||||||
|
*!* You can create your own function, procedure or method to handle this and name it whatever you want.
|
||||||
|
*!* The nTraceDataType and cTraceData are private variables created on-the-fly by the FLL
|
||||||
|
#DEFINE TYPE_TEXT 0
|
||||||
|
#DEFINE TYPE_HEADER_IN 1
|
||||||
|
#DEFINE TYPE_HEADER_OUT 2
|
||||||
|
#DEFINE TYPE_DATA_IN 3
|
||||||
|
#DEFINE TYPE_DATA_OUT 4
|
||||||
|
#DEFINE TYPE_SSL_DATA_IN 5
|
||||||
|
#DEFINE TYPE_SSL_DATA_OUT 6
|
||||||
|
#DEFINE TYPE_END 7
|
||||||
|
?ICASE(m.nTraceDataType = TYPE_TEXT, "STATUS:", ;
|
||||||
|
m.nTraceDataType = TYPE_HEADER_IN, "<RECV HEADER: ", ;
|
||||||
|
m.nTraceDataType = TYPE_HEADER_OUT, ">SEND HEADER: ", ;
|
||||||
|
m.nTraceDataType = TYPE_DATA_IN, "<RECV DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_DATA_OUT, ">SEND DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_SSL_DATA_IN, "<RECV SSL DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_SSL_DATA_OUT, ">SEND SSL DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_END, "END: ", "UNKNOWN: ")
|
||||||
|
??m.cTraceData
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
44
vfpconnection_utils.prg
Normal file
44
vfpconnection_utils.prg
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
*!* vfpconnection_utils
|
||||||
|
|
||||||
|
***********************
|
||||||
|
Function MyProgress && Callback from the FLL - can be used to track operation progress
|
||||||
|
Lparameters tcFile
|
||||||
|
Local lnProgress, lcFile
|
||||||
|
lnProgress = 0
|
||||||
|
lcFile = Iif(Empty(m.tcFile) Or Type('tcFile') <> 'C', '', m.tcFile)
|
||||||
|
If m.nConnectTotalBytes > 0
|
||||||
|
m.lnProgress = Int(m.nConnectBytesSoFar / m.nConnectTotalBytes * 100)
|
||||||
|
Endif
|
||||||
|
|
||||||
|
Wait Window m.lcFile + ' ' + Transform(m.lnProgress) + '% ...' Nowait
|
||||||
|
Endfunc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
***********************
|
||||||
|
Function MyTrace() && Callback from the FLL - used to provide a detailed trace of the operation
|
||||||
|
***********************
|
||||||
|
*!* You can create your own function, procedure or method to handle this and name it whatever you want.
|
||||||
|
*!* The nTraceDataType and cTraceData are private variables created on-the-fly by the FLL
|
||||||
|
#Define TYPE_TEXT 0
|
||||||
|
#Define TYPE_HEADER_IN 1
|
||||||
|
#Define TYPE_HEADER_OUT 2
|
||||||
|
#Define TYPE_DATA_IN 3
|
||||||
|
#Define TYPE_DATA_OUT 4
|
||||||
|
#Define TYPE_SSL_DATA_IN 5
|
||||||
|
#Define TYPE_SSL_DATA_OUT 6
|
||||||
|
#Define TYPE_END 7
|
||||||
|
lcDataType = Icase(m.nTraceDataType = TYPE_TEXT, "STATUS:", ;
|
||||||
|
m.nTraceDataType = TYPE_HEADER_IN, "<RECV HEADER: ", ;
|
||||||
|
m.nTraceDataType = TYPE_HEADER_OUT, ">SEND HEADER: ", ;
|
||||||
|
m.nTraceDataType = TYPE_DATA_IN, "<RECV DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_DATA_OUT, ">SEND DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_SSL_DATA_IN, "<RECV SSL DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_SSL_DATA_OUT, ">SEND SSL DATA: ", ;
|
||||||
|
m.nTraceDataType = TYPE_END, "END: ", "UNKNOWN: ")
|
||||||
|
lcData = m.cTraceData
|
||||||
|
If Inlist(m.nTraceDataType, TYPE_TEXT)
|
||||||
|
lcMesaj = lcDataType + " " + lcData
|
||||||
|
goApp.Log(m.lcMesaj)
|
||||||
|
Endif
|
||||||
|
Endfunc
|
||||||
BIN
vfpencryption.fll
Normal file
BIN
vfpencryption.fll
Normal file
Binary file not shown.
Reference in New Issue
Block a user