commit d91b19e336be6d6f4dc756e71f743de4f86ad429 Author: Marius Mutu Date: Tue Apr 21 15:46:20 2026 +0300 Initial commit - tasks v1.1.14 Co-Authored-By: Claude Sonnet 4.6 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe47e7a --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# Subversion metadata (SVN rămâne activ în paralel) +.svn/ + +# Windows shortcuts +*.lnk +*.bat + +# Visual FoxPro compiled/generated files +*.exe +*.fxp +*.bak +*.err + +# Local configuration with secrets +settings.ini + +# Logs +LOG.txt diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..8566f65 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,84 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +Visual FoxPro 9.0 desktop application for task/project management and software distribution tracking. The app manages work assignments (tasks/lucrări), client software versions, and generates ROA update XML files for client auto-update mechanisms. Backend is Oracle via ODBC. Language of code and comments is Romanian. + +## Building & Running + +There is no command-line build system. Compilation happens inside the Visual FoxPro 9.0 IDE: + +- **Build executable:** Open `tasks.pjx` in VFP IDE → Project → Build Executable → produces `tasks.exe` +- **Run interactively:** `tasks.exe` (GUI mode) +- **Run silently with auto XML generation:** `tasks.exe "s" "xml_roa_auto"` + +No test framework and no linter exist for this project. + +## Configuration + +`settings.ini` (at project root) is the primary configuration file. Key sections: + +- `[connection]` — Oracle ODBC credentials for `CENTRAL`, `CONTAFIN_ORACLE`, `SOFT_SERII` schemas +- `[folder]` — Output paths for ROA XML, SQL scripts, and Contafin exports +- `[script]` — SQL script filename prefixes per module +- `[wrap]` — Executable wrapping/encryption settings + +A template lives at `settings.ini.tmpl`. + +## Architecture + +### Entry Point & Initialization + +`programe/main.prg` is the startup module. It sets global variables, loads class libraries, configures paths from `settings.ini`, establishes the Oracle connection (via `conecteaza()` in `programe/proceduri_sql.prg`), and opens the main menu/form. + +Key globals set in `main.prg`: `gnHandle` (DB connection), `gcAppPath`, `gcDataPath`, `gcTempPath`, `gnIdUtilizator`, `gnIdClient`, `gnIdProgram`, `gcProgrameChangeLogsFile`. + +### File Types + +| Extension | Purpose | +|-----------|---------| +| `.prg` | Source procedures/functions | +| `.scx/.sct` | Form definition + code | +| `.vcx/.vct` | Class library definition + code | +| `.frx/.frt` | Report definition + code | +| `.mnx/.mnt/.mpr` | Menu definition | +| `.fxp` | Compiled program (auto-generated) | +| `.pjx/.pjt` | VFP project file | + +### Core Modules + +**`programe/proceduri_sql.prg`** — Database layer. `conecteaza(host, user, pass)` opens ODBC connection into `gnHandle`. `executaSql(cSql)` runs queries. + +**`programe/oproceduri_comune.prg`** — Defines `oexecutor` class: the main SQL execution object with properties `nHandle`, `cSql`, `cCursor`, `nSucces`, `cEroare`, `lReconnect`. `oExecute()` runs queries and populates cursors, handles reconnection. + +**`programe/proceduri.prg`** — Business logic: `EditTask()`, `EditLucrare()`, `genereaza_xml_roa()`, `genereaza_xml_roa_tot()`. The XML generation queries `VSC_PROGRAME_CLIENTI` and writes `ROASTART_.xml` to the configured output folder. + +**`programe/actualizare_roa.prg` / `clase/actualizareroa.vcx`** — ROA update generation workflow. + +**`programe/generare_script.prg` / `clase/generare_script.vcx`** — SQL migration script generation. + +**`clase/execute_script.vcx`** — Applies SQL scripts to target databases with progress tracking, logging, and rollback on error. Output goes to timestamped folders under `roa_central/`. + +**`programe/rapoarte.prg`** — Report runner using `utile/foxypreviewer.app` for PDF/RTF/HTML output. Report templates are `.frx` files in `rapoarte/`. + +### UI Layer + +Forms are in `ferestre/` (`.scx` files). All inherit from `clase/_frm_base.vcx`. Grids inherit from `clase/_grd_base.vcx`. The main tasks form is `ferestre/frm_tasks.scx`. + +### Data Flow + +``` +settings.ini → conecteaza() → gnHandle (Oracle ODBC) + ↓ + oexecutor.oExecute(cSql) → cursor + ↓ + Business logic (proceduri.prg, *.vcx classes) + ↓ + Forms (ferestre/*.scx) / Reports (rapoarte/*.frx) / XML output +``` + +### Version History + +`changelog_tasks.txt` contains the full version history in Romanian. Current version: **1.1.14** (January 2021). `programe_changelogs.xml` tracks program-level change metadata for the ROA distribution system. diff --git a/ROASTART_.xml b/ROASTART_.xml new file mode 100644 index 0000000..28b5a5d --- /dev/null +++ b/ROASTART_.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COMUNROA + 1.0.30 + \_ARHIVE\COMUNROA\COMUNROA-1.0.30.ZIP + + + + DEV_USERREPORTS + 20161020 + \_ARHIVE\USERREPORTS\DEV_USERREPORTS-20161020.ZIP + + + + ROAPRINT + 3.0.3 + \_ARHIVE\ROAPRINT\ROAPRINT-3.0.3.ZIP + + + + ROASTART + 2.2.9 + \_ARHIVE\ROASTART\ROASTART-2.2.9.ZIP + + + + ROMFAST_USERREPORTS + 20131203 + \_ARHIVE\USERREPORTS\ROMFAST_USERREPORTS-20131203.ZIP + + + + WERT_USERREPORTS + 20161019 + \_ARHIVE\USERREPORTS\WERT_USERREPORTS-20161019.ZIP + + + diff --git a/SETTINGS.XML b/SETTINGS.XML new file mode 100644 index 0000000..d99a2e0 --- /dev/null +++ b/SETTINGS.XML @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ROA_ROMFAST + SOFT + SOFT + 5 + + diff --git a/backup/APPWIZ.VCT b/backup/APPWIZ.VCT new file mode 100644 index 0000000..554f463 Binary files /dev/null and b/backup/APPWIZ.VCT differ diff --git a/backup/SETTINGS.XML.TMPL b/backup/SETTINGS.XML.TMPL new file mode 100644 index 0000000..65b744f --- /dev/null +++ b/backup/SETTINGS.XML.TMPL @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ROA_ROMFAST + SOFT + SOFT + + diff --git a/backup/appwiz.vcx b/backup/appwiz.vcx new file mode 100644 index 0000000..c62fc86 Binary files /dev/null and b/backup/appwiz.vcx differ diff --git a/backup/exemplu.prg b/backup/exemplu.prg new file mode 100644 index 0000000..6f982c4 --- /dev/null +++ b/backup/exemplu.prg @@ -0,0 +1,33 @@ +LOCAL lnHandle +lnHandle=SQLCONNECT([jcsserver],[soft],[123]) +lcSql=[select * from vtasks] +lnSucces = SQLEXEC(lnHandle,lcSql,[cursorprg]) +IF lnSucces < 0 + MESSAGEBOX("Eroare la select") +ELSE + SELECT cursorprg + BROWSE +ENDIF + +*!* lcDescriere=[descriere] +*!* lcData = TTOC(DATEtime(),1) +*!* lnEstimareInitiala = 5 +*!* lcSql=[insert into tasks(descriere,dataora_inceput,estimare_initiala) values(']+lcDescriere+[',to_date(']+lcData+[','YYYYMMDDHH24miss'),] + ALLTRIM(STR(lnEstimareInitiala)) + [)] +*!* lnSucces = SQLEXEC(lnHandle,lcSql) +*!* IF lnSucces < 0 +*!* MESSAGEBOX("Eroare la insert") +*!* ELSE +*!* MESSAGEBOX("A fost adaugata inregistrarea!") +*!* ENDIF + +lcDescriere2=[descriere modificata] +lnIdTask = 1 +lnEstimareCurenta = 5.15 +lcSql = [update tasks set descriere = '] + lcDescriere2 + [',estimare_curenta =] + ALLTRIM(STR(lnEstimareCurenta,14,2)) + [ where id_task = ] + ALLTRIM(STR(lnIdTask)) +lnSucces = SQLEXEC(lnHandle,lcSql) +IF lnSucces < 0 + MESSAGEBOX("Eroare la update") +ELSE + MESSAGEBOX("A fost modificata inregistrarea!") +ENDIF +SQLDISCONNECT(lnHandle) \ No newline at end of file diff --git a/backup/frm_adaugare_task.SCT b/backup/frm_adaugare_task.SCT new file mode 100644 index 0000000..69a30b1 Binary files /dev/null and b/backup/frm_adaugare_task.SCT differ diff --git a/backup/frm_adaugare_task.scx b/backup/frm_adaugare_task.scx new file mode 100644 index 0000000..cf8f702 Binary files /dev/null and b/backup/frm_adaugare_task.scx differ diff --git a/backup/frm_connect.SCT b/backup/frm_connect.SCT new file mode 100644 index 0000000..8f30aca Binary files /dev/null and b/backup/frm_connect.SCT differ diff --git a/backup/frm_connect.scx b/backup/frm_connect.scx new file mode 100644 index 0000000..dd2d1d4 Binary files /dev/null and b/backup/frm_connect.scx differ diff --git a/backup/frm_lucrare_noua.SCT b/backup/frm_lucrare_noua.SCT new file mode 100644 index 0000000..414a136 Binary files /dev/null and b/backup/frm_lucrare_noua.SCT differ diff --git a/backup/frm_lucrare_noua.scx b/backup/frm_lucrare_noua.scx new file mode 100644 index 0000000..5844177 Binary files /dev/null and b/backup/frm_lucrare_noua.scx differ diff --git a/backup/frm_setari.SCT b/backup/frm_setari.SCT new file mode 100644 index 0000000..e945ae3 Binary files /dev/null and b/backup/frm_setari.SCT differ diff --git a/backup/frm_setari.scx b/backup/frm_setari.scx new file mode 100644 index 0000000..ec08956 Binary files /dev/null and b/backup/frm_setari.scx differ diff --git a/backup/frm_tasks.SCT b/backup/frm_tasks.SCT new file mode 100644 index 0000000..5239cb4 Binary files /dev/null and b/backup/frm_tasks.SCT differ diff --git a/backup/frm_tasks.scx b/backup/frm_tasks.scx new file mode 100644 index 0000000..dfc0ccb Binary files /dev/null and b/backup/frm_tasks.scx differ diff --git a/backup/frm_viz_lucrari.SCT b/backup/frm_viz_lucrari.SCT new file mode 100644 index 0000000..ac688d9 Binary files /dev/null and b/backup/frm_viz_lucrari.SCT differ diff --git a/backup/frm_viz_lucrari.scx b/backup/frm_viz_lucrari.scx new file mode 100644 index 0000000..34187ed Binary files /dev/null and b/backup/frm_viz_lucrari.scx differ diff --git a/backup/main.prg b/backup/main.prg new file mode 100644 index 0000000..f3dd5d5 --- /dev/null +++ b/backup/main.prg @@ -0,0 +1,297 @@ +Set Talk Off +Set Deleted On +Set Century On +Set Date Dmy SHORT +Set Safety Off +Set Console Off +Set Seconds Off +Set Exclusive Off +Set Status Off +Set Status Bar Off +Set Hours To 24 +Set Exact On +Set Ansi On +_Screen.WindowState= 2 +Set NullDisplay To "" +*!* ================================================================= +Public gnConnHandle, gnIdProgram, gnIdUtilizator, ; + gnIdClient, gbSpecial, gdData, gcAppName, gcAppPath, gcDataPath +Local lcPath + + +gnConnHandle = -1 +gnIdUtilizator = 0 +gnIdProgram = 0 +gnIdClient = 0 +gbSpecial = .F. +gdData = Date() + + +gcAppPath = Addbs(Justpath(Sys(16,0))) +gcAppName = Juststem(Sys(16,0)) +Set Default To (gcAppPath) + +gcDataPath = Addbs(gcAppPath) + [test.vcx] +Set Classlib To (gcDataPath) + + + + +*!* PUSH MENU _MSYSMENU +lcOnShutdown="ShutDown()" +On Shutdown &lcOnShutdown +On Error ErrorHandler(Error(),Program(),Lineno()) + +Push Menu _Msysmenu + + +*!* SETARI +gcSettingsFile = gcAppPath + 'settings.xml' +If !File(gcSettingsFile) + Messagebox('Nu exista fisierul ' + gcSettingsFile + '!',0+16,'Setari') + Shutdown() + Return +Endif + +Xmltocursor(gcSettingsFile,"settings",512) +*!* SETARI ^ + +*!* PROGRAME_CHANGELOGS +gcProgrameChangeLogsFile = gcAppPath + 'programe_changelogs.xml' +If !File(gcProgrameChangeLogsFile) + Create Cursor programe_changelogs (id_program i, Program v(100), changelog v(200)) +Else + Xmltocursor(gcProgrameChangeLogsFile,"programe_changelogs",512) +Endif + + +*!* PROGRAME_CHANGELOGS ^ + +Private goApp +goApp=Createobject("custom") +goApp.AddProperty("idutilizator",settings.idutilizator) + +goExecutant = Createobject("Executor") + +Do (gcAppPath + "meniu.mpr") + +Do Form (gcAppPath + "frm_connect.scx") + +If gnConnHandle<0 + Shutdown() + Return +Endif + + +Set Procedure To proceduri.prg Additive && tasks, soft clienti +SET PROCEDURE TO proceduri_sql.prg ADDITIVE +SET PROCEDURE TO utile.prg ADDITIVE +SET PROCEDURE TO rapoarte.prg ADDITIVE + +gcAppPath=Addbs(Justpath(Sys(16,0))) +gcAppName=Juststem(Sys(16,0)) +Set Default To (gcAppPath) +lcPath = gcAppPath + "ferestre;" + ; + gcAppPath + "clase;" + ; + gcAppPath + "programe;" + ; + gcAppPath + "meniuri;" + ; + gcAppPath + "grafice;" + ; + gcAppPath + "date" + +Set Path To (lcPath) Additive + +Set Classlib To appwiz Additive && generare script +Set Classlib To comun Additive +Set Classlib To utility Additive +Set Classlib To Start Additive +Set Classlib To gen_script Additive +Set Classlib To execute_script Additive +Set Classlib To frm_script_aplicat Additive + +Set Procedure To oproceduri_comune.prg Additive +Set Procedure To oinit_optiuni.prg Additive +Set Procedure To ini.prg Additive +Set Procedure To proceduri_genscript.prg Additive + +lnSucces=editLucrare()&&in proceduri.prg +Read Events + +*!* ================================================================= + + +*!* ================================================================= +*!* Release goApp +*!* _Screen.MaxButton=.T. +*!* _Screen.BorderStyle= 3 +*!* _Screen.WindowState= 2 +*!* Pop Menu _Msysmenu + +*!* On Error +*!* On Shutdown +*!* ================================================================= + + +*!* ================================================================= +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 + If Messagebox(lcErrorMsg,17,_Screen.Caption)#1 + On Error + Return .F. + Endif +Endfunc + + +**============================================= +Function Shutdown + *!* If Type("goApp")=="O" And Not Isnull(goApp) + *!* Return goApp.OnShutDown() + *!* Endif + Do salveazaSetari + *DO inchide + Do deconectare + Cleanup() + Pop Menu _Msysmenu + *!* If _vfp.StartMode !=0 + *!* Quit + *!* Endif +Endfunc +**============================================= + +Function Cleanup + + If Cntbar("_msysmenu")=7 + Return + Endif + On Error + On Shutdown + Set Classlib To + Set Path To + Clear All + *Close All + Pop Menu _Msysmenu + Clear Events + Return +Endfunc + +**============================================= + +Procedure deconectare + Local lcCaption, lnSucces + + lnSucces = -1 + + If gnConnHandle > 0 + lnSucces = SQLDisconnect(gnConnHandle) + Endif + + Return lnSucces +Endproc && deconectare + +**============================================= + +Procedure conectare + Parameters tcHost, tcUser, tcPassword + + gnConnHandle = SQLConnect(tcHost, tcUser, tcPassword) + If gnConnHandle < 0 + Aerror(laEroare) + Messagebox(laEroare(2)) + Endif + + Return gnConnHandle +Endproc && conectare + +***===================================================== +Define Class Executor As Relation + cEroare = [] + + Procedure executaSql + Lparameters cmdsql,crsName, tlDontShowError + Local lnSucces + + lnSucces = -1 + + If Pcount()<2 + crsName="" + Endif + *LPARAMETERS cmdsql, crsname + If gnConnHandle > 0 + lnSucces=SQLExec(gnConnHandle,cmdsql,crsName) + + If lnSucces < 0 + Aerror(laEroare) + This.cEroare = laEroare(2) + If !m.tlDontShowError + Messagebox(This.cEroare) + Endif + Endif + Endif + + + Return lnSucces + Endproc +Enddefine && Executor + +**====================================== + +Procedure salveazaSetari + + If Used('settings') + Replace settings.idutilizator With goApp.idutilizator In settings + Cursortoxml("SETTINGS",gcSettingsFile,1,512,0,"1") + Endif + If Used('programe_changelogs') + Cursortoxml("programe_changelogs", gcProgrameChangeLogsFile,1,512,0,"1") + Endif +Endproc + +**====================================== +** actualizeaza programe_changelogs cu calea catre fisierul changelog pentru un id_program +Procedure UpdateProgrameChangeLogs + Lparameters tnIdProgram, tcProgram, tcChangeLog + + Local lcSelect + lcSelect = Select() + + If Used('programe_changelogs') And !Empty(tcChangeLog) + Select programe_changelogs + Locate For id_program = tnIdProgram + If Found() + Replace changelog With Alltrim(tcChangeLog) + Else + Insert Into programe_changelogs(id_program, Program, changelog) Values (tnIdProgram, Alltrim(tcProgram), Alltrim(tcChangeLog)) + Endif + Endif + Select (lcSelect) +Endproc + +**====================================== +** intoarce calea catre fisierul changelog in functie de id_program +Function GetChangeLogByIdProgram + Lparameters tnIdProgram + Local lcSelect, lcChangelog + lcSelect = Select() + lcChangelog = "" + + If Used('programe_changelogs') + Select programe_changelogs + Locate For id_program = tnIdProgram + If Found() + lcChangelog = Alltrim(changelog) + Endif + Endif + + Select (lcSelect) + Return lcChangelog +Endfunc diff --git a/backup/meniu.MNT b/backup/meniu.MNT new file mode 100644 index 0000000..bafd302 Binary files /dev/null and b/backup/meniu.MNT differ diff --git a/backup/meniu.mnx b/backup/meniu.mnx new file mode 100644 index 0000000..d4c0171 Binary files /dev/null and b/backup/meniu.mnx differ diff --git a/backup/proceduri.prg b/backup/proceduri.prg new file mode 100644 index 0000000..dede252 --- /dev/null +++ b/backup/proceduri.prg @@ -0,0 +1,37 @@ +Procedure EditTask + parameters tnId + + private poRec + lcSql = [select * from tasks where ]+Iif(!Empty(tnId),[ id = ?tnId] , [1=2]) + lcCursor = Sys(2015) + lnSucces = goExecutant.executasql(lcSql,lcCursor) + If lnSucces > 0 + Select (lcCursor) + Scatter Name poRec Memo + Do Form frm_adaugare_task + Endif + + + Return lnSucces +Endproc + +*****============================================================== +Procedure EditLucrare + parameters tnId + + private poRec +*!* IF EMPTY(tnid) + +*!* endif + lcSql = [select * from luc_vlucrari_tot where ]+Iif(!Empty(tnId),[ id = ?tnId], [1=2]) + lcCursor = Sys(2015) + lnSucces = goExecutant.executasql(lcSql,lcCursor) + If lnSucces > 0 + Select (lcCursor) + Scatter Name poRec Memo + poRec.datal = TTOD(poRec.datal) + Do Form frm_lucrare_noua + Endif + Return lnSucces +Endproc +************************** diff --git a/backup/proceduri_sql.prg b/backup/proceduri_sql.prg new file mode 100644 index 0000000..2836b8e --- /dev/null +++ b/backup/proceduri_sql.prg @@ -0,0 +1,65 @@ +************************ inceput conecteaza *************************** +Procedure conecteaza + Lparameters tcHost, tcUser, tcPassword + + gnConnHandle = SQLConnect(tcHost, tcUser, tcPassword) + If gnConnHandle < 1 + Aerror(laEroare) + Messagebox(laEroare(2)) + Endif + + Return gnConnHandle +Endproc + +**************************** inceput executaSql *************************** +Function executaSql + Lparameters cmdSql, crsName, tlShowErr + Local lnSucces + + lnSucces = -1 + + If Pcount() < 2 And !m.tlShowErr + crsName="" + Endif + + If gnConnHandle > 0 + lnSucces=SQLExec(gnConnHandle,cmdSql,crsName) + + If lnSucces < 0 And m.tlShowErr + Aerror(laEroare) + eroaresql(@laEroare,cmdSql) + Endif + Endif + + Return lnSucces +Endfunc + +************************* inceput deconecteaza ************************ +Function deconecteaza + *Lparameters lnConn + Local lnSucces + + lnSucces = -1 + If lnConn > 0 + lnSucces = SQLDisconnect(gnConnHandle) + Endif + + Return lnSucces +Endfunc + +******************************* inceput eroareSql ********************************** +Procedure eroaresql + Lparameters laErr, lcsql + + EXTERNAL ARRAY laErr + + Local lcMesaj + + lcMesaj = [Eroare # : ] + Alltrim(Str(laErr(1))) + crlf + ; + [Mesajul : ] + laErr(2) + ; + IIF(!Empty(laErr(3)), [Eroare OLE : ] + laErr(3) ,[]) + ; + [Aplicatie : ] + laErr(4) + ; + IIF(Pcount() = 2, crlf + lcsql, []) + Messagebox(lcMesaj,0+16) + +Endproc diff --git a/backup/sc_form_main.SCT b/backup/sc_form_main.SCT new file mode 100644 index 0000000..2c7a60c Binary files /dev/null and b/backup/sc_form_main.SCT differ diff --git a/backup/sc_form_main.scx b/backup/sc_form_main.scx new file mode 100644 index 0000000..9f1c16c Binary files /dev/null and b/backup/sc_form_main.scx differ diff --git a/backup/soft_clienti.prg b/backup/soft_clienti.prg new file mode 100644 index 0000000..c6b77e2 --- /dev/null +++ b/backup/soft_clienti.prg @@ -0,0 +1,122 @@ +_Screen.WindowState= 2 &&Specifies properties and methods for the main Visual FoxPro window +&& 0-normal/1-minimized (minimized to an icon)/2-maximized (enlarged to fill the screen) +Set Deleted On &&ignore records that are marked for deletion. +Set Century On &&Specifies a four-digit year in a format that includes 10 characters (including date delimiters). +Set Date Dmy &&Date/Mounth/Year +Set Safety Off &&Determines whether Visual FoxPro displays a dialog box before overwriting an existing file, or whether table or field rules, default values, and error messages are evaluated when changes are made in the Table Designer or with ALTER TABLE +Set Console Off &&Suppresses output to the main Visual FoxPro window or to the active user-defined window +Set NullDisplay To '*' &&Specifies the text displayed for null values. +Set Seconds Off &&Specifies that seconds are not displayed in DateTime values +Set Hours To 24 +Set Exclusive Off &&Allows a table opened on a network to be shared and modified by any user on the network. +Set Ansi On &&'Tommy' = 'Tom' is false (.F.) +Set Exact On &&Specifies the rules Visual FoxPro uses when comparing two strings of different lengths + + +Local lcMainClassLib +Local lcLastSetTalk, lcLastSetPath, lcLastSetClassLib, lcOnShutdown, lcPath + +*-- Save and configure environment. +lcLastSetTalk=Set("TALK") +Set Talk Off + +lcLastSetPath=Set("PATH") +Public gcAppDir, gcDatePath, gcDataPath, buton, gcTempPath, recordNumber, gnConnHandle +Store 2 To buton +Store 0 To recordNumeber +gnConnHandle = 0 + +&&declarare variabile pt. nr crt +&& in programul principal +Public m.nrord +Private nror +Declare nror[65000] + +*!* lcOnShutdown = "inchide()" +*!* On Shutdown &lcOnShutdown +On Error ErrorHandler(Error(),Program(),Lineno()) + +gcAppDir=Addbs(Justpath(Sys(16,0))) +*gcAppDir=SYS(5)+ SYS(2003)+"\" +gcAppDir = Strtran(gcAppDir, 'PROGRAME\','') +gpos = Rat('\',gcAppDir,2) +gcDatePath = Left(gcAppDir,gpos) + 'date_aplicatii\' + + +If Not Directory(gcDatePath) + Md (gcDatePath) +Endif + +gcDataPath = gcAppDir + "date\" +gcTempPath = "c:\temp\" +If Not Directory(gcTempPath) + Md (gcTempPath) +Endif + +Cd (gcAppDir) && init: CD "\soft_clienti\" + + +lcclase = gcAppDir + [clase] +lcLastSetClassLib=Set("CLASSLIB") + +Set Procedure To proceduri_sql Additive +*!* Set Procedure To proceduri_start Additive +*!* Set Procedure To proceduri_soft_clienti Additive + + +*gnConnHandle = conecteaza([jcsServer],[soft],[soft]) +gnConnHandle = conecteaza([ROA_ROMFAST2],[soft],[soft]) +Do Form sc_form_main + +******************* inceput ErrorHandler ******************************************* +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 + If Messagebox(lcErrorMsg,17,_Screen.Caption) # 1 + On Error + Return .F. + Endif +Endfunc + + +**************************************** inceput Shutdown ************************************ +Function inchide() + + If Type("goApp")=="O" And Not Isnull(goApp) + Return goApp.OnShutDown() + Endif + Cleanup() + If _vfp.StartMode = 4 + Quit + Endif + + *!* If gnConnHandle > 0 + *!* deconecteaza(gnConnHandle) + *!* Endif +Endfunc + +**************************************** inceput Cleanup ************************************* +Function Cleanup + + If Cntbar("_msysmenu")=7 + Return + Endif + On Error + On Shutdown + Set Classlib To + Set Path To + Clear All + Close All + Pop Menu _Msysmenu + Return +Endfunc diff --git a/backup/start.VCT b/backup/start.VCT new file mode 100644 index 0000000..f987ce2 Binary files /dev/null and b/backup/start.VCT differ diff --git a/backup/start.vcx b/backup/start.vcx new file mode 100644 index 0000000..d47a463 Binary files /dev/null and b/backup/start.vcx differ diff --git a/backup/tasks_ref.CDX b/backup/tasks_ref.CDX new file mode 100644 index 0000000..6a17410 Binary files /dev/null and b/backup/tasks_ref.CDX differ diff --git a/backup/tasks_ref.DBF b/backup/tasks_ref.DBF new file mode 100644 index 0000000..3a45fc9 Binary files /dev/null and b/backup/tasks_ref.DBF differ diff --git a/backup/tasks_ref.FPT b/backup/tasks_ref.FPT new file mode 100644 index 0000000..7c906f4 Binary files /dev/null and b/backup/tasks_ref.FPT differ diff --git a/backup/test.VCT b/backup/test.VCT new file mode 100644 index 0000000..72f9edb Binary files /dev/null and b/backup/test.VCT differ diff --git a/backup/test.vcx b/backup/test.vcx new file mode 100644 index 0000000..14ecfc0 Binary files /dev/null and b/backup/test.vcx differ diff --git a/backup/utile.prg b/backup/utile.prg new file mode 100644 index 0000000..8e3f3ad --- /dev/null +++ b/backup/utile.prg @@ -0,0 +1,85 @@ +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* lnOption = xmenu('\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clase/APPWIZ.VCT b/clase/APPWIZ.VCT new file mode 100644 index 0000000..b477b0d Binary files /dev/null and b/clase/APPWIZ.VCT differ diff --git a/clase/GridExtras/adauga.png b/clase/GridExtras/adauga.png new file mode 100644 index 0000000..4a7ea12 Binary files /dev/null and b/clase/GridExtras/adauga.png differ diff --git a/clase/GridExtras/add16.png b/clase/GridExtras/add16.png new file mode 100644 index 0000000..4a7ea12 Binary files /dev/null and b/clase/GridExtras/add16.png differ diff --git a/clase/GridExtras/addfilter16.bmp b/clase/GridExtras/addfilter16.bmp new file mode 100644 index 0000000..8c0aabb Binary files /dev/null and b/clase/GridExtras/addfilter16.bmp differ diff --git a/clase/GridExtras/ascendingsort12.bmp b/clase/GridExtras/ascendingsort12.bmp new file mode 100644 index 0000000..ea211d0 Binary files /dev/null and b/clase/GridExtras/ascendingsort12.bmp differ diff --git a/clase/GridExtras/cauta.png b/clase/GridExtras/cauta.png new file mode 100644 index 0000000..e6969c5 Binary files /dev/null and b/clase/GridExtras/cauta.png differ diff --git a/clase/GridExtras/clearfilter16.bmp b/clase/GridExtras/clearfilter16.bmp new file mode 100644 index 0000000..2823623 Binary files /dev/null and b/clase/GridExtras/clearfilter16.bmp differ diff --git a/clase/GridExtras/close16.bmp b/clase/GridExtras/close16.bmp new file mode 100644 index 0000000..b0a1934 Binary files /dev/null and b/clase/GridExtras/close16.bmp differ diff --git a/clase/GridExtras/config.fpw b/clase/GridExtras/config.fpw new file mode 100644 index 0000000..db4a499 --- /dev/null +++ b/clase/GridExtras/config.fpw @@ -0,0 +1 @@ +RESOURCE=OFF \ No newline at end of file diff --git a/clase/GridExtras/delete16.png b/clase/GridExtras/delete16.png new file mode 100644 index 0000000..1294132 Binary files /dev/null and b/clase/GridExtras/delete16.png differ diff --git a/clase/GridExtras/descendingsort12.bmp b/clase/GridExtras/descendingsort12.bmp new file mode 100644 index 0000000..d73caed Binary files /dev/null and b/clase/GridExtras/descendingsort12.bmp differ diff --git a/clase/GridExtras/excel.jpg b/clase/GridExtras/excel.jpg new file mode 100644 index 0000000..7cdfda6 Binary files /dev/null and b/clase/GridExtras/excel.jpg differ diff --git a/clase/GridExtras/excel24.jpg b/clase/GridExtras/excel24.jpg new file mode 100644 index 0000000..f54e6fe Binary files /dev/null and b/clase/GridExtras/excel24.jpg differ diff --git a/clase/GridExtras/exit.png b/clase/GridExtras/exit.png new file mode 100644 index 0000000..36b9c58 Binary files /dev/null and b/clase/GridExtras/exit.png differ diff --git a/clase/GridExtras/filter12.bmp b/clase/GridExtras/filter12.bmp new file mode 100644 index 0000000..1c59153 Binary files /dev/null and b/clase/GridExtras/filter12.bmp differ diff --git a/clase/GridExtras/find.BMP b/clase/GridExtras/find.BMP new file mode 100644 index 0000000..c29fbce Binary files /dev/null and b/clase/GridExtras/find.BMP differ diff --git a/clase/GridExtras/gridextras.CDX b/clase/GridExtras/gridextras.CDX new file mode 100644 index 0000000..c4ce87e Binary files /dev/null and b/clase/GridExtras/gridextras.CDX differ diff --git a/clase/GridExtras/gridextras.FPT b/clase/GridExtras/gridextras.FPT new file mode 100644 index 0000000..0139651 Binary files /dev/null and b/clase/GridExtras/gridextras.FPT differ diff --git a/clase/GridExtras/gridextras.VCT b/clase/GridExtras/gridextras.VCT new file mode 100644 index 0000000..59f945a Binary files /dev/null and b/clase/GridExtras/gridextras.VCT differ diff --git a/clase/GridExtras/gridextras.dbf b/clase/GridExtras/gridextras.dbf new file mode 100644 index 0000000..3fa5285 Binary files /dev/null and b/clase/GridExtras/gridextras.dbf differ diff --git a/clase/GridExtras/gridextras.vcx b/clase/GridExtras/gridextras.vcx new file mode 100644 index 0000000..8596529 Binary files /dev/null and b/clase/GridExtras/gridextras.vcx differ diff --git a/clase/GridExtras/gridextrasprocs.prg b/clase/GridExtras/gridextrasprocs.prg new file mode 100644 index 0000000..f9f9abf --- /dev/null +++ b/clase/GridExtras/gridextrasprocs.prg @@ -0,0 +1,712 @@ +******************************** +*!* Simple Sample Usage +******************************** +*!* DIMENSION aWrkSht(1), aCols(1) +*!* m.lcXlsFile = GETFILE("Excel:XLS,XLSX,XLSB,XLSM") +*!* IF FILE(m.lcXlsFile) +*!* CLEAR +*!* ?AWorkSheets(@aWrkSht,m.lcXlsFile,.T.) +*!* ?AWorkSheetColumns(@aCols,m.lcXlsFile,"Sheet1") +*!* AppendFromExcel(m.lcXlsFile, "Sheet1", "MyTable", "column1,column2,column3", "Recnum Is Not Null", "field1,field2,field3", "field1 > 14000") +*!* SELECT MyTable +*!* GO TOP IN "MyTable" +*!* BROWSE LAST NOWAIT +*!* ENDIF +*!* CopyToExcel("C:\Test.xlsx", "Sheet1", "MyTable") && try xls, xlsb, and xlsm as well + +********************************** +FUNCTION AppendFromExcel(tcXLSFile, tcSheet, tvWorkarea, tcExcelFieldList, tcExcelWhereExpr, tcTableFieldList, tcTableForExpr, tlNoHeaderRow) + ********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of a worksheet within the excel workbook (can also be a range Sheet1$A1:C20 for instance) + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want the worksheet result set appended to (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want from the worksheet (default is '*' - all columns) + * tcExcelWhereExpr [optional] := a valid SQL Where clause to be used when querying the worksheet (default is '1=1') + * tcTableFieldList [optional] := a comma delimited list of fields you want the worksheet result set inserted into (default is '*' - all fields) + * tcTableForExpr [optional] := a valid VFP Where clause to be used when querying the worksheet result set (cursor) (default is '.T.') + * tlNoHeaderRow [optional] := pass .T. if the worksheet does not contain a header row, .F. is the default which specifies that a header row does exist + * + * RETURN Information + * returns numeric, the number of records inserted into tvWorkArea + * + * Provider Information + * the default provider being used in the SQLStringConnect function can be downloaded and installed from: + * http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en + ********************************** + LOCAL lnSelect, laErr[1], laTableFields[1], laExcelFields[1], lnFieldCounter, ; + lcSQLAlias, lnResult, lcInsertValues, lcFieldList, lcNvlFieldList, ; + lcFieldType, lcExcelFieldType, lcNvlFieldName, lcTempAlias, loExc, lnReturn, ; + lcHeaderRow, llOpenedtvWorkArea + m.lnSelect = SELECT(0) + m.lnReturn = 0 + IF NOT FILE(m.tcXLSFile) + ERROR 1, m.tcXLSFile + ENDIF + + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"*") + m.tcExcelWhereExpr = EVL(m.tcExcelWhereExpr,"1=1") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lcSQLAlias = SYS(2015) + m.lcTempAlias = SYS(2015) + m.lnSQL = 0 + m.lcHeaderRow = IIF(EMPTY(m.tlNoHeaderRow), "Yes", "No") + TRY + SELECT (m.tvWorkarea) + + m.lnSQL = SQLSTRINGCONNECT([Provider=Microsoft.ACE.OLEDB.12.0;Data Source="] + m.tcXLSFile + [";Extended Properties="Excel 12.0 Xml;HDR=] + m.lcHeaderRow + [;";]) + + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 AND UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lnResult = SQLEXEC(m.lnSQL,[SELECT ] + m.tcExcelFieldList + [ FROM "] + m.tcSheet + [" Where ] + m.tcExcelWhereExpr, m.lcSQLAlias) + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + m.lcFieldList = "" + m.lcNvlFieldList = "" + m.lnTotalExcelFields = AFIELDS(m.laExcelFields, m.lcSQLAlias) + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE .F. INTO CURSOR (m.lcTempAlias) + FOR m.lnFieldCounter = 1 TO MIN(AFIELDS(m.laTableFields, m.lcTempAlias), m.lnTotalExcelFields) + m.lcFieldList = m.lcFieldList + IIF(!EMPTY(m.lcFieldList),",","")+m.laTableFields[m.lnFieldCounter,1] + m.lcFieldType = CHRTRAN(m.laTableFields[m.lnFieldCounter,2],"NIFYD","BBBBT") + m.lcExcelFieldType = CHRTRAN(m.laExcelFields[m.lnFieldCounter,2],"CVNIFYD","MMBBBBT") + m.lcNvlFieldName = m.laExcelFields[m.lnFieldCounter,1] + IF !m.laTableFields[m.lnFieldCounter,5] + m.lcNvlFieldName = [NVL(]+m.lcNvlFieldName+[,]+; + ICASE(m.lcExcelFieldType="B", "0", ; + m.lcExcelFieldType="M", "''", ; + m.lcExcelFieldType="T", "{//}", ; + m.lcExcelFieldType="L", ".F.", ; + "''")+[)] + ENDIF + IF INLIST(m.lcFieldType, "C", "V") + m.lcNvlFieldName = [CAST(]+m.lcNvlFieldName+[ AS ]+m.lcFieldType+[(] + TRANSFORM(m.laTableFields[m.lnFieldCounter,3]) + [))] + ELSE + m.lcNvlFieldName = [CAST(]+m.lcNvlFieldName+[ AS ]+m.lcFieldType+[)] + ENDIF + m.lcNvlFieldList = m.lcNvlFieldList + IIF(!EMPTY(m.lcNvlFieldList),",","") + m.lcNvlFieldName + ENDFOR + INSERT INTO (m.tvWorkarea) (&lcFieldList) SELECT &lcNvlFieldList FROM (m.lcSQLAlias) WHERE &tcTableForExpr + m.lnReturn = _TALLY + ENDIF + + CATCH TO m.loExc + *!* MESSAGEBOX(m.loExc.MESSAGE + " : " + TRANSFORM(m.loExc.LINENO)) + FINALLY + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkArea) + ENDIF + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + USE IN SELECT(m.lcTempAlias) + USE IN SELECT(m.lcSQLAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + +********************************** +FUNCTION AWorkSheets(taArray, tcXLSFile, tlAllTables) + ********************************** + * PARAMETER Information + * taArray := an array sent in by reference to fill with Worksheet/Table information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tlAllTables := if .T., array will contain information regarding all tables in workbook; .F. returns only worksheets + * + * RETURN Information + * returns numeric, the number of tables found in the workbook + ********************************** + + LOCAL lnSQL, laErr[1], lcSQLAlias, lnResult, lnReturn, loExc + m.lnReturn = 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + +"DBQ="+FULLPATH(m.tcXLSFile)+";") + + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ELSE + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lcSQLAlias = SYS(2015) + m.lnResult = SQLTABLES(m.lnSQL,"VIEW,TABLE,SYSTEM TABLE",m.lcSQLAlias) + + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + TRY + IF tlAllTables + SELECT CAST(ALLTRIM(table_name) AS V(100)), ; + CAST(ALLTRIM(table_type) AS V(12)) ; + FROM (m.lcSQLAlias) ; + INTO ARRAY taArray + ELSE + SELECT CAST(ALLTRIM(table_name) AS V(100)), ; + CAST(ALLTRIM(table_type) AS V(12)) ; + FROM (m.lcSQLAlias) ; + WHERE table_type = "SYSTEM TABLE" ; + INTO ARRAY taArray + ENDIF + m.lnReturn = _TALLY + CATCH TO m.loExc + THROW + FINALLY + *!* USE IN SELECT(m.lcSQLAlias) + ENDTRY + ENDIF + + RETURN m.lnReturn +ENDFUNC + +********************************** +FUNCTION AWorkSheetColumns(taArray, tcXLSFile, tcSheet) + ********************************** + * PARAMETER Information + * taArray := an array sent in by reference to fill with the specified worksheet's column information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the worksheet or table to use when retrieving column information + * + * RETURN Information + * returns numeric, the number of columns found in the worksheet/table + ********************************** + LOCAL lnSQL, laErr[1], lnResult, lnReturn, lcSQLAlias, loExc + m.lnReturn = 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + +"DBQ="+FULLPATH(m.tcXLSFile)+";") + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ELSE + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lcSQLAlias = SYS(2015) + m.lnResult = SQLEXEC(m.lnSQL,[SELECT * FROM "] + m.tcSheet + [$" Where 1=0], m.lcSQLAlias) + + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + TRY + m.lnReturn = AFIELDS(m.taArray, m.lcSQLAlias) + CATCH TO m.loExc + THROW + FINALLY + USE IN SELECT(m.lcSQLAlias) + ENDTRY + ENDIF + + RETURN m.lnReturn +ENDFUNC + +*********************************** +FUNCTION CopyToExcel(tcXLSFile, tcSheet, tvWorkArea, tcExcelFieldList, tcTableFieldList, tcTableForExpr) + *********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of the worksheet to create within the excel workbook + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want to be copied to the worksheet (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want to create in the worksheet (default is '*' - columns will match table field list) + * tcTableFieldList [optional] := a comma delimited list of fields you want this function to copy from tvWorkArea + * tcTableForExpr [optional] := a valid VFP Where/For clause to be used when querying tvWorkArea for data to be copied to the worksheet + * + * RETURN Information + * returns numeric, the number of records inserted into the worksheet + * + * Provider Information + * the default provider being used in the SQLStringConnect function can be downloaded and installed from: + * http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en + ********************************** + #DEFINE adOpenStatic 3 + #DEFINE adOpenKeyset 1 + #DEFINE adLockOptimistic 3 + #DEFINE adUseClient 3 + #DEFINE adUseServer 2 + #DEFINE adCmdText 0x0001 + LOCAL loConnection as ADODB.Connection, lcCreateTableCommand, llOpenedtvWorkArea, loExc as Exception, ; + lnReturn, lnResult, lnFieldCounter, lnSQL, loCursorAdapter as CursorAdapter, ; + lcFieldName, lcFieldType, lcSelectFields, lcUpdateNameListFields, lcUpdatableFieldList, ; + loRecordSet as ADODB.Recordset, lcConversionFunc, lcVFPFieldName, laTableFields[1], laErr[1] + + m.lnSelect = SELECT(0) + m.lnReturn = 0 + + m.llOpenedtvWorkArea = .F. + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lnSQL = 0 + m.lcTempAlias = SYS(2015) + + TRY + CreateExcelTemplate(m.tcXLSFile) + IF !FILE(m.tcXLSFile) + m.lnReturn + ENDIF + m.loConnection = CreateObject ( "ADODB.Connection") + *!* This is the only provider/driver that appears to work without showing Select Data Source dialog + *!* or throwing a weird error about the excel Database being readonly. + m.loConnection.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data Source="] + m.tcXLSFile + [";Extended Properties="Excel 12.0 Xml;HDR=Yes;";] + m.loConnection.Open() + m.loConnection.Execute("DROP TABLE [Sheet1$]") + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE &tcTableForExpr INTO CURSOR (m.lcTempAlias) NOFILTER + GO TOP IN (m.lcTempAlias) + m.lnReturn = RECCOUNT(m.lcTempAlias) + m.lcCreateTableCommand = "" + m.lcSelectFields = "" + m.lcUpdateNameListFields = "" + m.lcUpdatableFieldList = "" + m.lcConversionFunc = "" + FOR m.lnFieldCounter = 1 TO AFIELDS(m.laTableFields, m.lcTempAlias) + m.lcVFPFieldName = m.laTableFields(m.lnFieldCounter, 1) + m.lcFieldName = ALLTRIM(GETWORDNUM(m.tcExcelFieldList, m.lnFieldCounter, ",")) + IF EMPTY(m.lcFieldName) + m.lcFieldName = m.laTableFields(m.lnFieldCounter, 1) + ENDIF + m.lcSelectFields = m.lcSelectFields + "[" + m.lcFieldName + "] " + " AS " + m.lcVFPFieldName + m.lcUpdateNameListFields = m.lcUpdateNameListFields + m.lcVFPFieldName + " [" + m.tcSheet + "].[" + m.lcFieldName + "]" + m.lcUpdatableFieldList = m.lcUpdatableFieldList + m.lcVFPFieldName + m.lcCreateTableCommand = m.lcCreateTableCommand + "[" + m.lcFieldName + "] " + m.lcFieldType = m.laTableFields(m.lnFieldCounter, 2) + m.lcCreateTableCommand = m.lcCreateTableCommand + ; + ICASE(m.lcFieldType = 'C', 'Char(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')', ; + m.lcFieldType = 'Y', 'Currency', ; + m.lcFieldType = 'D', 'Date', ; + m.lcFieldType = 'T', 'DateTime', ; + m.lcFieldType = 'B', 'Double', ; + m.lcFieldType = 'F', 'Double', ; + m.lcFieldType = 'G', 'Binary', ; + m.lcFieldType = 'I', 'Integer', ; + m.lcFieldType = 'L', 'Logical', ; + m.lcFieldType = 'M', 'Text', ; + m.lcFieldType = 'N', 'Numeric(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ',' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 4)) + ')', ; + m.lcFieldType = 'Q', 'Binary', ; + m.lcFieldType = 'V', 'VarChar(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')', ; + m.lcFieldType = 'W', 'Blob', ; + 'Char(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')') + IF INLIST(m.lcFieldType,"T","D") + m.lcConversionFunc = m.lcConversionFunc + IIF(!EMPTY(m.lcConversionFunc), ", ", "") + m.lcVFPFieldName + " EmptyFieldToNull" + ENDIF + IF m.lnFieldCounter != ALEN(m.laTableFields,1) + m.lcCreateTableCommand = m.lcCreateTableCommand + ',' + m.lcSelectFields = m.lcSelectFields + ',' + m.lcUpdateNameListFields = m.lcUpdateNameListFields + ',' + m.lcUpdatableFieldList = m.lcUpdatableFieldList + ',' + ENDIF + ENDFOR + IF !EMPTY(m.lcCreateTableCommand) + IF m.tcSheet != [Sheet1$] + m.tcSheet = STRTRAN(m.tcSheet,"$","") + ENDIF + m.lcCreateTableCommand = "CREATE TABLE [" + m.tcSheet + "](" + m.lcCreateTableCommand + ")" + m.loConnection.Errors.Clear() + m.loConnection.Execute(m.lcCreateTableCommand) + IF m.loConnection.Errors.Count>0 + ERROR m.loConnection.Errors(0).Description + ENDIF + m.loRecordSet = CreateObject("ADODB.Recordset") + With m.loRecordSet + .ActiveConnection = m.loConnection + .CursorLocation = adUseClient + .CursorType = adOpenStatic + .LockType = adLockOptimistic + ENDWITH + m.loCursorAdapter = CREATEOBJECT("CursorAdapter") + m.loCursorAdapter.Alias = SYS(2015) + m.loCursorAdapter.DataSourceType = "ADO" + m.loCursorAdapter.DataSource = m.loRecordSet + m.loCursorAdapter.SelectCmd = "Select " + m.lcSelectFields + " From [" + m.tcSheet + "]" + IF m.loCursorAdapter.CursorFill(.F.,.T.) + m.loCursorAdapter.Tables = "[" + m.tcSheet + "]" + m.loCursorAdapter.BufferModeOverride = 3 && faster than 5 when dealing with larger record sets + m.loCursorAdapter.UpdateNameList = m.lcUpdateNameListFields + m.loCursorAdapter.UpdatableFieldList = m.lcUpdatableFieldList + IF !EMPTY(m.lcConversionFunc) + m.loCursorAdapter.ConversionFunc = m.lcConversionFunc + ENDIF + INSERT INTO (m.loCursorAdapter.Alias) SELECT * FROM (m.lcTempAlias) + m.lnReturn = TABLEUPDATE(.T.,.T.,m.loCursorAdapter.Alias) + ELSE + AERROR(m.laErr) + ERROR m.laErr(2) + ENDIF + ENDIF + m.loConnection.Close() + CATCH TO m.loExc + SET STEP ON + m.lnReturn = 0 + FINALLY + m.loCursorAdapter = Null + m.loConnection = Null + RELEASE loCursorAdapter, loConnection + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkarea) + ENDIF + USE IN SELECT(m.lcTempAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + +*********************************** +FUNCTION CopyToExcelSimple(tcXLSFile, tcSheet, tvWorkArea, tcExcelFieldList, tcTableFieldList, tcTableForExpr) + *********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of the worksheet to create within the excel workbook + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want to be copied to the worksheet (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want to create in the worksheet (default is '*' - columns will match table field list) + * tcTableFieldList [optional] := a comma delimited list of fields you want this function to copy from tvWorkArea + * tcTableForExpr [optional] := a valid VFP Where/For clause to be used when querying tvWorkArea for data to be copied to the worksheet + * + * RETURN Information + * returns numeric, the number of records inserted into the worksheet + * + ********************************** + + LOCAL llOpenedtvWorkArea, loExc as Exception, ; + lnReturn, lnResult, lnFieldCounter, lnSQL, ; + lcFieldName, lcFieldType, lcSelectFields, ; + laErr[1] + + m.lnSelect = SELECT(0) + m.lnReturn = 0 + + m.llOpenedtvWorkArea = .F. + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lnSQL = 0 + m.lcTempAlias = SYS(2015) + + TRY + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE &tcTableForExpr INTO CURSOR (m.lcTempAlias) NOFILTER + COPY TO (m.tcXLSFile) TYPE XL5 + CATCH TO m.loExc + SET STEP ON + m.lnReturn = 0 + FINALLY + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkarea) + ENDIF + USE IN SELECT(m.lcTempAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + + +******************* +FUNCTION EmptyFieldToNull(tdFieldValue) +******************* + RETURN EVL(m.tdFieldValue,NULL) +ENDFUNC + +******************* +FUNCTION CreateExcelTemplate(tcExcelFile) +******************* + LOCAL lcExcelFileExtension, lcFileBinary + m.llReturn = .F. + IF FILE(m.tcExcelFile) + m.llReturn = .T. + ELSE + m.lcExcelFileExtension = UPPER(JUSTEXT(m.tcExcelFile)) + DO case + CASE m.lcExcelFileExtension = "XLSX" + m.lcFileBinary = 0h504B030414000600080000002100CC7EE6A14E010000080400001300DF015B436F6E74656E745F54797065735D2E786D6C20A2DB0128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000AC93CB4EC3301045F748FC83E52D8ADDB2400835ED82C712BA281F60EC4963D52F79DCD2FE3D938422814A455536B1226BEE9D39733D996DBD631BC86863A8F9588C3883A0A3B16159F3D7C55375CB1916158C723140CD77807C36BDBC982C7609905175C09AB7A5A43B2951B7E0158A9820D04D13B357857EF35226A5576A09F27A34BA913A8602A154A5D3E0D3C90B3590AD013657B93C2B4F3E72EB64213518BE63417A9CDD0F859D77CD554ACE6A55A873B909E6876B159BC66A3051AF3D79895EECAA5391BF1A62D939C0B3AD306550065B80E29D1844F7CE0FD0A8B52BEC714B0406E8191C9E36DA274C + m.lcFileBinary = m.lcFileBinary + 0h4195FDF8D8DA84471C8EB33BCEE43DE6D55B8CABFFA6D2D1115ED9B0EFFB5008687BF31C134ADAF5D90D4087DC80A91249422E16BE981DF2A60076B3F76B44D91FE7A7F07B34BEF4FFC440C70CA743D867A5AB3E30B9ECDFF1F4030000FFFF0300504B030414000600080000002100B5553023F50000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A0000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1A5BB4C48BB21541EC024EE1FB58DA32440F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA06222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A5913051CA6168D19319A865DC94E53D86BF1E502D3CD5C16A08077B07AA3EFA3CF9B2B7344D6F782FE67D62974E8C409E + m.lcFileBinary = m.lcFileBinary + 0h133BCB76E543660BA9CFDBA89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812E9F68A9F8BDCE3CE2A784E14D64F861C1C50F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D773FE3A04E14B9F74E4391E5A0C8595FF7AED5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483AC45D1F58A516C71A3A91F086C8B6 + m.lcFileBinary = m.lcFileBinary + 0hA3D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6EDF34BDA5776F8F2339B98040966948175095892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F16193CFBE4F2170000FFFF0300504B030414000600080000002100A460FAFF52010000270200000F000000786C2F776F726B626F6F6B2E786D6C8C915D6FC2201486EF97EC3F10EE272DA9CE185B93655BE6CD6232A7D7AC9C5A228506A8D57FBF534CE776B72BCE073CE7BC2FCBD5B9D1E404CE2B6B729A4E124AC094562A73C8E9E7F6F5614E890FC248A1AD819C5EC0D355717FB7ECAD3B7E + m.lcFileBinary = m.lcFileBinary + 0h597B2408303EA77508ED82315FD6D0083FB12D18EC54D6352260EA0ECCB70E84F435406834E34932638D50865E090BF71F86AD2A55C2B32DBB064CB8421C6811707D5FABD6D36259290DBBAB2222DAF65D34B8F75953A2850F2F52059039CD30B53DFC29B8AE7DEA941EBAD3644A59F12372E3085203B88D5327515ED0294A2454A2D3618B82C77958E719E7B3E1ED60CE4E41EF6F982125E7BD32D2F639E5199A7D19B31427923EB6F64A861A51D9FC567B0375A8434EE7499A0C74F60B1F2DC531F12426EAFD186CC625636D8D9230760B85815BCB3412C667A5D0250A1C8E78914F1F7954CFC63F2EBE010000FFFF0300504B0304140006000800000021 + m.lcFileBinary = m.lcFileBinary + 0h00A083C4AEA3010000640300000D000000786C2F7374796C65732E786D6CA453C16ADC3010BD17F20F42F746BB0B0D6DB19D436121909440B6D0AB6CC95EC16864A4F1B2EED767643BDEDD530EBD584F4F336F9E66E4E2F1EC419C6C4C2E6029B7F71B292C36C138EC4AF9E7B0FFFA5D8A441A8D8680B694A34DF2B1BAFB52241AC1BE1DAD25C112984A7924EA7F2A959AA3F53ADD87DE229FB4217A4DBC8D9D4A7DB4DAA49CE441ED369B07E5B54359156D404AA2090312BB5888AA48FFC44903335BA9AAA20910A2209667231383DADB39E29706574797C35AED1D8C33BDCBC4E46889F30E43CCA4CA259725719203580DECB20126AAA2D74436E29E3762 + m.lcFileBinary = m.lcFileBinary + 0hC187B1E7F2C8DD9865A6B84FA2BBA8C7EDEEDB55829A0A56451DA2E1EE5F5F7DA6AA026C4B6C34BAEE98570A3D7FEB40143C03E37417500343F591B100BE4E6301DEF284FEB637DAE756E0E0F79E9E4C2979D6B9091F902FB2C0596FDE64FD6BB559FBBF65C5B9BDD567C52BDB37A6D7F222CFBB94BFF39302B94A887A70400E6F05A7EBB3A6395F5AB0C913205DF3CBCDCD59AB70278C6DF50074580F4B79C12FD6B8C1FF58A35EDD29D02451CA0B7ECE93DA3E4C534EEBEF51BD030000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E786D6CEC594F6FDB3614BF0FD87720 + m.lcFileBinary = m.lcFileBinary + 0h746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE4C1731B5626D615DDFFCD275E982 + m.lcFileBinary = m.lcFileBinary + 0hF174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F00664F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2F117E57859C4FFFAC327BFFCFC79 + m.lcFileBinary = m.lcFileBinary + 0h3910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B26CCD6D01FA169C7E0343BD2A75FB + m.lcFileBinary = m.lcFileBinary + 0h1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28C1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE099C95D9FA959428A8FD3ACC6A5AA8 + m.lcFileBinary = m.lcFileBinary + 0h3373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216C10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45D02F7095A6AD6DA6DCE29C265DF1 + m.lcFileBinary = m.lcFileBinary + 0h02CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207E93FB0FF51E133FB71426FA8437E + m.lcFileBinary = m.lcFileBinary + 0h00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100075F38D31E010000C701000018000000786C2F776F726B7368656574732F7368656574312E786D6C8C514D6BC3300CBD0FF61F8CEE8BD38D6EA324298352B6C360ECEBEE2472626A5BC156D7EDDFCF496819F4B29B3EDE7BD2938AF5B7B3E20B4334E44B58643908F40DB5C677257CBC6FAFEE4144 + m.lcFileBinary = m.lcFileBinary + 0h56BE55963C96F08311D6D5E54571A0B08B3D228BA4E063093DF3B09232363D3A15331AD0A78EA6E014A73474320E01553B919C95D7797E2B9D321E668555F88F06696D1ADC50B377E87916096815A7FD636F860855D19AD41B0D8980BA848705C8AA98C67E1A3CC43FB16055BFA1C586B14DEE418CAE6AA2DD087C4AA57CA4CA33EE7672F512448B5AED2DBFD2E1114DD77312599EA66D14AB441F5487CF2A74C6476151274C9EDD8108337E8A9986A9BA04511333B963D6A783613A4C9EDD80D0447C4CC6B54E2FA87E010000FFFF0300504B030414000600080000002100A6A453EB3E0100005102000011000801646F6350726F70732F636F72652E786D + m.lcFileBinary = m.lcFileBinary + 0h6C20A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000007C92516BC3201485DF07FB0FC1F7449342DB4992C236FAB4C260191B7B13BD6D65D188BAA5FDF733499BA65006BE78CFB9DF3D5ECC57075547BF609D6C7481D284A008346F84D4BB02BD57EB788922E79916AC6E3414E8080EADCAFBBB9C1BCA1B0BAFB63160BD0417059276949B02EDBD371463C7F7A0984B82430771DB58C57CB8DA1D368C7FB31DE08C903956E099609EE10E189B91884E48C147A4F9B1750F101C430D0AB477384D527CF17AB0CADD6CE8958953497F34E14DA7B853B6E08338BA0F4E8EC6B66D9376D6C708F953FCB97979EB9F1A4BDDED8A032A73C129B7C07C63CB1C4F2F617135737E1376BC95201E8F41 + m.lcFileBinary = m.lcFileBinary + 0hBF5113BC8F3B40404421001DE29E958FD9D373B54665B7C3983CC4E9BC2284F6E7AB1B79D5DF051A0AEA34F87FE2B223924595113A5BD02C9B10CF8021F7F52728FF000000FFFF0300504B03041400060008000000210027388BC4880100001103000010000801646F6350726F70732F6170702E786D6C20A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92C16EDB300C86EF03F60E86EE8D9C601886405651A41D7AD8B00049BBB326D3B150591244D648F6F4A36DA471BA9DA613C99FF8F58994BA3D76BEE821A38BA112CB45290A0836D62E1C2AF1B4FF7AF345144826D4C6C7009538018A5BFDF183DAE6982093032CD82260255AA2B496126D0B9DC105CB819526E6CE10A7F9 + m.lcFileBinary = m.lcFileBinary + 0h2063D3380BF7D1BE761048AECAF2B3842341A8A1BE496F8662725CF7F4BFA675B4031F3EEF4F8981B5BA4BC93B6B885FA9BF3B9B23C6868A87A305AFE45C544CB703FB9A1D9D74A9E43C553B6B3C6CD85837C623287929A84730C3D0B6C665D4AAA7750F96622ED0FDE6B1AD44F1CB200C3895E84D762610630D6D5332C63E2165FD33E6176C010895E486A93886F3DE79EC3EE9E5D8C0C175E3603081B0708DB877E4017F345B93E91FC4CB39F1C830F14E38BB816FBA73CE373E996F7AE7BD895D32E1C4C25BF4CD85177C4AFB786F08CEE3BC2EAA5D6B32D4BC81B37E29A8479E64F683C9A635E100F5B9E76F6158FEF3F4C3F572B528F98C3B3FD794BC + m.lcFileBinary = m.lcFileBinary + 0hFC65FD070000FFFF0300504B01022D0014000600080000002100CC7EE6A14E010000080400001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D0014000600080000002100B5553023F50000004C0200000B000000000000000000000000005E0300005F72656C732F2E72656C73504B01022D00140006000800000021008D87DA70E00000002D0200001A000000000000000000000000004A060000786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C73504B01022D0014000600080000002100A460FAFF52010000270200000F000000000000000000000000006A080000786C2F776F + m.lcFileBinary = m.lcFileBinary + 0h726B626F6F6B2E786D6C504B01022D0014000600080000002100A083C4AEA3010000640300000D00000000000000000000000000E9090000786C2F7374796C65732E786D6C504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000B70B0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100075F38D31E010000C701000018000000000000000000000000006A120000786C2F776F726B7368656574732F7368656574312E786D6C504B01022D0014000600080000002100A6A453EB3E010000510200001100000000000000000000000000BE130000646F635072 + m.lcFileBinary = m.lcFileBinary + 0h6F70732F636F72652E786D6C504B01022D001400060008000000210027388BC48801000011030000100000000000000000000000000033160000646F6350726F70732F6170702E786D6C504B050600000000090009003E020000F11800000000 + CASE m.lcExcelFileExtension = "XLSB" + m.lcFileBinary = 0h504B030414000600080000002100558086C16D010000020400001300DD015B436F6E74656E745F54797065735D2E786D6C20A2D90128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000A453CD4BC33014BF0BFE0F255769B2791091B53BE8042FBAC3C47396BEAE616912F2B2D9FEF7BEB6ACA0EC83E1A5A16D7E9F2F99CD9BDA247B08A89DCDD8944F580256B942DB4DC63E57AFE9234B304A5B48E32C64AC0564F3FCF666B66A3D6042688B19AB62F44F42A0AAA096C89D074B7F4A176A19E9356C84976A2B3720EE279307A19C8D60631A3B0E96CF5EA0943B139345439F07276B6D59F23CECEBA43226BD375AC94846C5DE16BCC6141A058663051039016468792D55700B2BD706688B241691CF3E2860D005244B19E2BBAC894D344644720BC373CAC9EF05C1DFA95257965A41E1D4AEA62CBC27BBEB + m.lcFileBinary = m.lcFileBinary + 0h584E0B7EBBB0EDDDA2E89769E7FA82EA1873047702471A0B60F002D79F047E980927645F2B56DAE321C21185F3159D894E252D83F3286886FF2E1ABA435240917AA28410358C9E4FCC796C0EC5704ADE08DF5C553EE17AD0179E192FC6D6005E33D301718A72AC4DB900D7F776186F873E5296E86F70FE030000FFFF0300504B0304140006000800000021004382E3C5F70000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1B5BB20A4DD102A0FE0256E1BB58DA32440F7F66427A834B61DFDEFF3CF9FBCDDCDD3A8BE38442BAE8275518262A7C558D755F0D1BCAE9E40C544CED0288E2B3872845D7D7FB77DE791521E8ABDF5516515172BE853F2CF8851F73C512CC4B3CB9556C2442987A1434F7AA08E7153968F18FE6A40BD + m.lcFileBinary = m.lcFileBinary + 0hD0547B5341D89B0750CDD1E7CDD7B5A56DADE617D19F13BB746605F29CD819362B1F325B48365FA31A0A1DA70A8CE8B79C8E48DE17191BF03CD1E676A2FFAFC58913194A845A025FE639755C025ADF0E74DDA265C7AF3BF388DF128683C8501CAC3B99838B1FA87F000000FFFF0300504B03041400060008000000210006332055E50000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E62696E2E72656C7320A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91C16AC3301044EF85FE83D87BBD760AA594C8B98442AEC1FD00555EDB22B624B4DB36FEFB0A97360DA4F4928B60B468DEEC68BD394EA37AA7C42E780D555182226F43EB7CAFE1A579BE7B04C562 + m.lcFileBinary = m.lcFileBinary + 0h7C6BC6E049C34C0C9BFAF666BDA7D1487EC4838BACB28B670D83487C42643BD064B808917C9E74214D46B24C3D46630FA6275C95E503A6DF1E509F79AA5DAB21EDDA7B50CD1C33F97FEFD075CED236D8B789BC5C4020CB3CE6055463524FA2E14B17AFCE035EC6AFAE89975C0B9DE88BC4E5AC8ADCD35F19AA6B66F808E9C003919C72FC5C312E93EABB103CFBE4FA130000FFFF0300504B030414000600080000002100A76734B792000000C00000000F000000786C2F776F726B626F6F6B2E62696E6A66646860346040034C407E05430E0323903681922C60B62983018329C34C461E0DA0B0D35390020686764686798CB21F80AC4C20BE6AC9C0E025CF + m.lcFileBinary = m.lcFileBinary + 0hC0100132050A2A3A1819FA1919E630AA800440BA40C615317832A4301832B001D9C10C190CA9405802E44F606498CB2825FB9A11AC320528FB67E5C74BBE4901F6209D590CB31819196603710B2303000000FFFF0300504B030414000600080000002100F98F44D4E0000000CA0100000D000000786C2F7374796C65732E62696EA4904F4B424114C57FBEB9E8F6B9EB1BB410FF1104EE8C5CA608F60514438522100DFA16ADEAC3E52E15FCB3D255923CCFBC47E2D26860CE9C7BCF993B73EF7BC097590AC85D4E846F9E0690F127444146784B9B470674180AA7C6A7993CE46BDEE3AA1E89DC8D402B8EFE00F95A56EEFF569918B3A491C295CAA58E1F38 + m.lcFileBinary = m.lcFileBinary + 0h8FCD8D4D72BD189EB61086B03516BFDAB1AC88D796C62AD14A175ED36B515A6783670DEB291EDCDAF876E6D59DE3C7353DCB6ADF4BED68B00FB418F11AB3BAA2AE863CD6DD4AEC6A2A7A51B5D189EB4EB91E7DE5CA5CB3777C041C000000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E786D6CEC594F6FDB3614BF0FD87720746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E + m.lcFileBinary = m.lcFileBinary + 0h1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE4C1731B5626D615DDFFCD275E982F174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F006 + m.lcFileBinary = m.lcFileBinary + 0h64F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2F117E57859C4FFFAC327BFFCFC793910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E + m.lcFileBinary = m.lcFileBinary + 0h4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B26CCD6D01FA169C7E0343BD2A75FB1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28 + m.lcFileBinary = m.lcFileBinary + 0hC1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE099C95D9FA959428A8FD3ACC6A5AA83373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216 + m.lcFileBinary = m.lcFileBinary + 0hC10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45D02F7095A6AD6DA6DCE29C265DF102CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C + m.lcFileBinary = m.lcFileBinary + 0h5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207E93FB0FF51E133FB71426FA8437E00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F + m.lcFileBinary = m.lcFileBinary + 0h31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100A1512698C10000001C01000023000000786C2F776F726B7368656574732F5F72656C732F7368656574312E62696E2E72656C736CCFC16AC3300C06E0FBA0EF60745F9CF430C68853D861906BE91E40B395C434968D654AF2F6F56DEDD8F197F83FA1FEB48555DD288B8F6CA06B5A50C4363ACFB381EFCBD7EB3B2829C80ED7C864602781D37078E9CFB462A925597C12551516034B29E9436BB10B05942626E2BA99620E586ACCB34E68AF38933EB6ED9BCE8F060C4FA61A9D813CBA0ED4654FF5F21F3B789BA3C4A93436061DA7C9DBFF54BDAD9F + m.lcFileBinary = m.lcFileBinary + 0h9E31EF233BDAAA8579A662E0E777D83535801E7AFDF4D370070000FFFF0300504B030414000600080000002100A273D38D810000001601000018000000786C2F776F726B7368656574732F7368656574312E62696E6A646498CC287E928589C181010CFE430188338551002C8644B432327432CADD61461202EB4C411298C1A882220F946244928631BB1819DA18199E32F3806CE460D001AB99C8C8308991613A8B134415480C9B5E9819301A5D0D887F97994980E10EB3411A183CB387D1103D2FEC61B431185CB687D14D8C0C00000000FFFF0300504B0304140006000800000021001E06781015000000200000001E000000786C2F776F726B73686565 + m.lcFileBinary = m.lcFileBinary + 0h74732F62696E617279496E646578312E62696ED29260000205108106A632310011000000FFFF0300504B0304140006000800000021004B7C9F083E0100005102000011000801646F6350726F70732F636F72652E786D6C20A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C925F4BC33014C5DF05BF43C97B9B74835943DB81CA9E1C085614DF4272D7159B3F24D16EDFDEB4DD6A0743C84BEE39F7774F2EC9D707D9463F605DA35581D284A00814D7A2517581DEAA4D9CA1C879A6046BB582021DC1A175797B937343B9B6F062B501EB1B7051202947B929D0DE7B4331767C0F92B92438541077DA4AE6C3D5D6D830FEC56AC00B42565882678279867B606C26223A21059F90E6DBB6 + m.lcFileBinary = m.lcFileBinary + 0h0340700C2D4850DEE13449F19FD78395EE6AC3A0CC9CB2F14713DE748A3B670B3E8A93FBE09AC9D8755DD22D8718217F8A3FB6CFAFC353E346F5BBE280CA5C70CA2D30AF6D99E3F9252CAE65CE6FC38E770D888763D0AFD4041FE28E1010510840C7B867E57DF9F8546D50D9EF3026F771BAAA08A1C3F9EC475EF4F781C6823C0DFE9F98F54472572D085D66946433E21930E6BEFC04E52F000000FFFF0300504B0304140006000800000021006F7E771280010000FE02000010000801646F6350726F70732F6170702E786D6C20A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92416BE3301085EF85FD0F46F7464E589625C82AA569E9614B0349B367551EC7228A64345393F4D7 + m.lcFileBinary = m.lcFileBinary + 0h776C93C6D9EDA93A8DE63D9E3E8DA46E0E7B9FB590D0C55088E9241719041B4B17B68578593F5CFF16199209A5F13140218E80E246FFB852CB141B48E400338E0858889AA8994B89B686BDC109CB81952AA6BD21DEA6AD8C55E52C2CA27DDB432039CBF35F120E04A184F2BAF90C1443E2BCA5EF8696D1767CB8591F1B06D6EAB669BCB386F896FAC9D914315694DD1F2C7825C7A262BA15D8B7E4E8A87325C75BB5B2C6C31D07EBCA780425CF0DF508A61BDAD2B8845AB5346FC1524C19BA771EDB4C64AF06A1C329446B92338118ABB30D9BBEF60D52D27F63DA610D40A8241B86665F8EBDE3DAFDD4D3DEC0C5A5B10B184058B8445C3BF280CFD5D224FA + m.lcFileBinary = m.lcFileBinary + 0h82783A26EE1906DE0167D5F10D678EF9FA2BF349FF64FF7161872FCD3A2E0CC16976974DB5AA4D8292C77DD2CF0DF5C8634BBE0BB9AB4DD84279F2FC2F742FBD19BEB39ECE2639AFFE814F3D25CF1F577F000000FFFF0300504B01022D0014000600080000002100558086C16D010000020400001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D00140006000800000021004382E3C5F70000004C0200000B000000000000000000000000007B0300005F72656C732F2E72656C73504B01022D001400060008000000210006332055E50000002D0200001A00000000000000000000000000690600 + m.lcFileBinary = m.lcFileBinary + 0h00786C2F5F72656C732F776F726B626F6F6B2E62696E2E72656C73504B01022D0014000600080000002100A76734B792000000C00000000F000000000000000000000000008E080000786C2F776F726B626F6F6B2E62696E504B01022D0014000600080000002100F98F44D4E0000000CA0100000D000000000000000000000000004D090000786C2F7374796C65732E62696E504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000580A0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100A1512698C10000001C01000023000000000000000000000000000B + m.lcFileBinary = m.lcFileBinary + 0h110000786C2F776F726B7368656574732F5F72656C732F7368656574312E62696E2E72656C73504B01022D0014000600080000002100A273D38D810000001601000018000000000000000000000000000D120000786C2F776F726B7368656574732F7368656574312E62696E504B01022D00140006000800000021001E06781015000000200000001E00000000000000000000000000C4120000786C2F776F726B7368656574732F62696E617279496E646578312E62696E504B01022D00140006000800000021004B7C9F083E01000051020000110000000000000000000000000015130000646F6350726F70732F636F72652E786D6C504B01022D001400 + m.lcFileBinary = m.lcFileBinary + 0h06000800000021006F7E771280010000FE02000010000000000000000000000000008A150000646F6350726F70732F6170702E786D6C504B0506000000000B000B00DB020000401800000000 + CASE m.lcExcelFileExtension = "XLSM" + m.lcFileBinary = 0h504B03041400060008000000210038088E4F60010000F20300001300DB015B436F6E74656E745F54797065735D2E786D6C20A2D70128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000A4934D6EC2301085F7957A87C8DB2A31745155158105A5CB96053D80B127C4C27FF2181A6EDF495290401481D838B2A279DFBC37E3D1A4B126DB4244ED5DC986C58065E0A457DAAD4AF6BDF8C85F59864938258C7750B21D209B8C1F1F468B5D00CCA8DA61C9EA94C21BE7286BB0020B1FC0D19FCA472B125DE38A0721D76205FC793078E1D2BB042EE5A9D560E3D1173510B5826C2E62FA149638BC313C911AF4E7B0203D964DFBC2965D321182D15224EA9C6F9D3AA1E6BEAAB404E5E5C612ABE8C49E5A15FE2F10D3CE00DE8DC2104128AC019235452FBA27BF4325362665B38612E8438F60F0366B7F611654D9D9C7 + m.lcFileBinary = m.lcFileBinary + 0h5A07BC40B89CDDE54C7E7C5C2FBD5F5F918AC51C1A0964B9B55E5821A39F39B134A0E8A2DDBEC373E3A639CDA30FC869AA57A08E37EC74D6D086AB40E5812421260D8774CEB169D55A975DD7C8BBCFFDFB76BC0407FDAB32903EC2ED21ECB7A2AD3EE39C772F76FC0B0000FFFF0300504B030414000600080000002100B5553023F50000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1A5BB4C48BB21541EC024EE1FB58DA32440F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA06222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A5913051CA6168D19319A865DC94E53D86BF1E502D3CD5C16A08077B07AA3EFA3CF9B2 + m.lcFileBinary = m.lcFileBinary + 0hB7344D6F782FE67D62974E8C409E133BCB76E543660BA9CFDBA89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812E9F68A9F8BDCE3CE2A784E14D64F861C1C50F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D773FE3A04E14B9F74E4391E5A0C8595FF7AED5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483A + m.lcFileBinary = m.lcFileBinary + 0hC45D1F58A516C71A3A91F086C8B6A3D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6EDF34BDA5776F8F2339B98040966948175095892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F16193CFBE4F2170000FFFF0300504B030414000600080000002100A460FAFF52010000270200000F000000786C2F776F726B626F6F6B2E786D6C8C915D6FC2201486EF97EC3F10EE272DA9CE185B93655BE6CD6232A7D7AC9C5A228506A8D57FBF534CE776B72BCE073CE7BC2FCBD5B9D1E404CE2B6B729A4E124AC094562A73C8E9E7F6F5614E890FC248A1 + m.lcFileBinary = m.lcFileBinary + 0hAD819C5EC0D355717FB7ECAD3B7E597B2408303EA77508ED82315FD6D0083FB12D18EC54D6352260EA0ECCB70E84F435406834E34932638D50865E090BF71F86AD2A55C2B32DBB064CB8421C6811707D5FABD6D36259290DBBAB2222DAF65D34B8F75953A2850F2F52059039CD30B53DFC29B8AE7DEA941EBAD3644A59F12372E3085203B88D5327515ED0294A2454A2D3618B82C77958E719E7B3E1ED60CE4E41EF6F982125E7BD32D2F639E5199A7D19B31427923EB6F64A861A51D9FC567B0375A8434EE7499A0C74F60B1F2DC531F12426EAFD186CC625636D8D9230760B85815BCB3412C667A5D0250A1C8E78914F1F7954CFC63F2EBE010000FFFF03 + m.lcFileBinary = m.lcFileBinary + 0h00504B030414000600080000002100A083C4AEA3010000640300000D000000786C2F7374796C65732E786D6CA453C16ADC3010BD17F20F42F746BB0B0D6DB19D436121909440B6D0AB6CC95EC16864A4F1B2EED767643BDEDD530EBD584F4F336F9E66E4E2F1EC419C6C4C2E6029B7F71B292C36C138EC4AF9E7B0FFFA5D8A441A8D8680B694A34DF2B1BAFB52241AC1BE1DAD25C112984A7924EA7F2A959AA3F53ADD87DE229FB4217A4DBC8D9D4A7DB4DAA49CE441ED369B07E5B54359156D404AA2090312BB5888AA48FFC44903335BA9AAA20910A2209667231383DADB39E29706574797C35AED1D8C33BDCBC4E46889F30E43CCA4CA25972571920358 + m.lcFileBinary = m.lcFileBinary + 0h0DECB20126AAA2D74436E29E3762C187B1E7F2C8DD9865A6B84FA2BBA8C7EDEEDB55829A0A56451DA2E1EE5F5F7DA6AA026C4B6C34BAEE98570A3D7FEB40143C03E37417500343F591B100BE4E6301DEF284FEB637DAE756E0E0F79E9E4C2979D6B9091F902FB2C0596FDE64FD6BB559FBBF65C5B9BDD567C52BDB37A6D7F222CFBB94BFF39302B94A887A70400E6F05A7EBB3A6395F5AB0C913205DF3CBCDCD59AB70278C6DF50074580F4B79C12FD6B8C1FF58A35EDD29D02451CA0B7ECE93DA3E4C534EEBEF51BD030000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E78 + m.lcFileBinary = m.lcFileBinary + 0h6D6CEC594F6FDB3614BF0FD87720746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE + m.lcFileBinary = m.lcFileBinary + 0h4C1731B5626D615DDFFCD275E982F174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F00664F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2 + m.lcFileBinary = m.lcFileBinary + 0hF117E57859C4FFFAC327BFFCFC793910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B2 + m.lcFileBinary = m.lcFileBinary + 0h6CCD6D01FA169C7E0343BD2A75FB1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28C1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE09 + m.lcFileBinary = m.lcFileBinary + 0h9C95D9FA959428A8FD3ACC6A5AA83373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216C10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45 + m.lcFileBinary = m.lcFileBinary + 0hD02F7095A6AD6DA6DCE29C265DF102CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207 + m.lcFileBinary = m.lcFileBinary + 0hE93FB0FF51E133FB71426FA8437E00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100075F38D31E010000C701000018000000786C2F776F726B7368656574732F7368656574312E786D6C8C514D6BC3300CBD0FF61F8CEE8BD38D6EA324298352B6C360ECEBEE2472626A5BC156D7EDDFCF496819F4B29B3EDE7BD2938AF5B7B3E20B4334E44B586439 + m.lcFileBinary = m.lcFileBinary + 0h08F40DB5C677257CBC6FAFEE414456BE55963C96F08311D6D5E54571A0B08B3D228BA4E063093DF3B09232363D3A15331AD0A78EA6E014A73474320E01553B919C95D7797E2B9D321E668555F88F06696D1ADC50B377E87916096815A7FD636F860855D19AD41B0D8980BA848705C8AA98C67E1A3CC43FB16055BFA1C586B14DEE418CAE6AA2DD087C4AA57CA4CA33EE7672F512448B5AED2DBFD2E1114DD77312599EA66D14AB441F5487CF2A74C6476151274C9EDD8108337E8A9986A9BA04511333B963D6A783613A4C9EDD80D0447C4CC6B54E2FA87E010000FFFF0300504B0304140006000800000021000ACFE8CF3F0100005102000011000801646F + m.lcFileBinary = m.lcFileBinary + 0h6350726F70732F636F72652E786D6C20A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000007C92CB6AC3301045F785FE83D1DE969C904785ED405BB26AA0509794EE8434494CAD07925A277F5FD94E5C0742411BCDBD73E66A50B63ACA3AFA01EB2AAD7294260445A0B81695DAE7E8BD5CC74B1439CF9460B55690A31338B42AEEEF326E28D7165EAD36607D052E0A24E52837393A786F28C68E1F40329704870AE24E5BC97CB8DA3D368C7FB13DE00921732CC133C13CC32D303603119D91820F48F36DEB0E2038861A2428EF709AA4F8CFEBC14A77B3A153464E59F993096F3AC71DB305EFC5C17D74D5606C9A2669A65D8C903FC51F9B97B7EEA971A5DA5D7140452638E51698D7B6C8F0 + m.lcFileBinary = m.lcFileBinary + 0hF812165733E73761C7BB0AC4E329E8376A8277717B08882804A07DDC8BB29D3E3D976B54B43B8CC9439CCE4B4268773EDB9157FD6DA0BE20CF83FF272E5B2259941342A70B3A9B8D8817409FFBFA1314BF000000FFFF0300504B0304140006000800000021006F7E771280010000FE02000010000801646F6350726F70732F6170702E786D6C20A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92416BE3301085EF85FD0F46F7464E589625C82AA569E9614B0349B367551EC7228A64345393F4D7776C93C6D9EDA93A8DE63D9E3E8DA46E0E7B9FB590D0C55088E9241719041B4B17B68578593F5CFF16199209A5F13140218E80E246FFB852CB141B48E400338E0858889AA8994B + m.lcFileBinary = m.lcFileBinary + 0h89B686BDC109CB81952AA6BD21DEA6AD8C55E52C2CA27DDB432039CBF35F120E04A184F2BAF90C1443E2BCA5EF8696D1767CB8591F1B06D6EAB669BCB386F896FAC9D914315694DD1F2C7825C7A262BA15D8B7E4E8A87325C75BB5B2C6C31D07EBCA780425CF0DF508A61BDAD2B8845AB5346FC1524C19BA771EDB4C64AF06A1C329446B92338118ABB30D9BBEF60D52D27F63DA610D40A8241B86665F8EBDE3DAFDD4D3DEC0C5A5B10B184058B8445C3BF280CFD5D224FA82783A26EE1906DE0167D5F10D678EF9FA2BF349FF64FF7161872FCD3A2E0CC16976974DB5AA4D8292C77DD2CF0DF5C8634BBE0BB9AB4DD84279F2FC2F742FBD19BEB39ECE2639 + m.lcFileBinary = m.lcFileBinary + 0hAFFE814F3D25CF1F577F000000FFFF0300504B01022D001400060008000000210038088E4F60010000F20300001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D0014000600080000002100B5553023F50000004C0200000B000000000000000000000000006C0300005F72656C732F2E72656C73504B01022D00140006000800000021008D87DA70E00000002D0200001A0000000000000000000000000058060000786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C73504B01022D0014000600080000002100A460FAFF52010000270200000F000000000000000000000000007808 + m.lcFileBinary = m.lcFileBinary + 0h0000786C2F776F726B626F6F6B2E786D6C504B01022D0014000600080000002100A083C4AEA3010000640300000D00000000000000000000000000F7090000786C2F7374796C65732E786D6C504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000C50B0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100075F38D31E010000C7010000180000000000000000000000000078120000786C2F776F726B7368656574732F7368656574312E786D6C504B01022D00140006000800000021000ACFE8CF3F010000510200001100000000000000000000000000CC13 + m.lcFileBinary = m.lcFileBinary + 0h0000646F6350726F70732F636F72652E786D6C504B01022D00140006000800000021006F7E771280010000FE020000100000000000000000000000000042160000646F6350726F70732F6170702E786D6C504B050600000000090009003E020000F81800000000 + OTHERWISE && XLS + m.lcFileBinary = 0hD0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000000000010000000100000000000000001000001A00000001000000FEFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFDFFFFFF1C000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F00000010000000110000001200000013000000140000001500000016000000170000001800000019000000FEFFFFFFFEFFFFFF1D000000FEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFF52006F006F007400200045006E00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500FFFFFFFFFFFFFFFF020000002008020000000000C00000000000004600000000000000000000000030C843AA2911C9011B000000800200000000000057006F0072006B0062006F006F006B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200020104000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000002000000892F00 + m.lcFileBinary = m.lcFileBinary + 0h00000000000500530075006D006D0061007200790049006E0066006F0072006D006100740069006F006E000000000000000000000000000000000000000000000000000000280002010100000003000000FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000C800000000000000050044006F00630075006D0065006E007400530075006D006D0061007200790049006E0066006F0072006D006100740069006F006E000000000000000000000038000201FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000004000000E000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000908100000060500A91FCD07C100010006040000E1000200B004C10002000000E20000005C0070000200002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202042000200B004610102000000C00100003D01020001009C0002001000190002000000120002000000130002000000AF0102000000BC01020000003D001200F0006900D5394A1F380000000000010058024000020000008D00020000002200020000 + m.lcFileBinary = m.lcFileBinary + 0h000E0002000100B70102000000DA000200000031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00680101003800BC020000000200AA0701430061006D00620072006900610031001E002C0101003800BC020000000200AA0701430061006C00690062007200 + m.lcFileBinary = m.lcFileBinary + 0h690031001E00040101003800BC020000000200AA0701430061006C00690062007200690031001E00DC0001003800BC020000000200AA0701430061006C00690062007200690031001E00DC000000110090010000000200AA0701430061006C00690062007200690031001E00DC000000140090010000000200AA0701430061006C00690062007200690031001E00DC0000003C0090010000000200AA0701430061006C00690062007200690031001E00DC0000003E0090010000000200AA0701430061006C00690062007200690031001E00DC0001003F00BC020000000200AA0701430061006C00690062007200690031001E00DC0001003400BC02000000 + m.lcFileBinary = m.lcFileBinary + 0h0200AA0701430061006C00690062007200690031001E00DC000000340090010000000200AA0701430061006C00690062007200690031001E00DC0001000900BC020000000200AA0701430061006C00690062007200690031001E00DC0000000A0090010000000200AA0701430061006C00690062007200690031001E00DC000200170090010000000200AA0701430061006C00690062007200690031001E00DC0001000800BC020000000200AA0701430061006C00690062007200690031001E00DC000000090090010000000200AA0701430061006C0069006200720069001E041C000500170000222422232C2323305F293B5C28222422232C2323305C29 + m.lcFileBinary = m.lcFileBinary + 0h1E04210006001C0000222422232C2323305F293B5B5265645D5C28222422232C2323305C291E04220007001D0000222422232C2323302E30305F293B5C28222422232C2323302E30305C291E0427000800220000222422232C2323302E30305F293B5B5265645D5C28222422232C2323302E30305C291E0437002A003200005F282224222A20232C2323305F293B5F282224222A205C28232C2323305C293B5F282224222A20222D225F293B5F28405F291E042E0029002900005F282A20232C2323305F293B5F282A205C28232C2323305C293B5F282A20222D225F293B5F28405F291E043F002C003A00005F282224222A20232C2323302E30305F293B5F + m.lcFileBinary = m.lcFileBinary + 0h282224222A205C28232C2323302E30305C293B5F282224222A20222D223F3F5F293B5F28405F291E0436002B003100005F282A20232C2323302E30305F293B5F282A205C28232C2323302E30305C293B5F282A20222D223F3F5F293B5F28405F29E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF20000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E0001400000000000100200000000000000000000002C020E000140005000000F5FF200000B400000000000000049F20E000140005 + m.lcFileBinary = m.lcFileBinary + 0h000000F5FF200000B40000000000000004AD20E000140005000000F5FF200000B40000000000000004AA20E000140005000000F5FF200000B40000000000000004AE20E000140005000000F5FF200000B400000000000000049B20E000140005000000F5FF200000B40000000000000004AF20E000140005000000F5FF200000B40000000000000004AC20E000140005000000F5FF200000B400000000000000049D20E000140005000000F5FF200000B400000000000000048B20E000140005000000F5FF200000B40000000000000004AE20E000140005000000F5FF200000B40000000000000004AC20E000140005000000F5FF200000B4000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0004B320E000140015000000F5FF200000B400000000000000049E20E000140015000000F5FF200000B400000000000000049D20E000140015000000F5FF200000B400000000000000048B20E000140015000000F5FF200000B40000000000000004A420E000140015000000F5FF200000B40000000000000004B120E000140015000000F5FF200000B40000000000000004B420E000140015000000F5FF200000B40000000000000004BE20E000140015000000F5FF200000B400000000000000048A20E000140015000000F5FF200000B40000000000000004B920E000140015000000F5FF200000B40000000000000004A420E000140015000000F5FF20 + m.lcFileBinary = m.lcFileBinary + 0h0000B40000000000000004B120E000140015000000F5FF200000B40000000000000004B520E00014000B000000F5FF200000B40000000000000004AD20E00014000F000000F5FF200000941111970B970B00049620E000140011000000F5FF200000946666BF1FBF1F0004B720E000140005002B00F5FF200000F80000000000000000C020E000140005002900F5FF200000F80000000000000000C020E000140005002C00F5FF200000F80000000000000000C020E000140005002A00F5FF200000F80000000000000000C020E000140013000000F5FF200000F40000000000000000C020E00014000A000000F5FF200000B40000000000000004AA20E000 + m.lcFileBinary = m.lcFileBinary + 0h140007000000F5FF200000D400500000001F0000C020E000140008000000F5FF200000D400500000000B0000C020E000140009000000F5FF200000D400200000000F0000C020E000140009000000F5FF200000F40000000000000000C020E00014000D000000F5FF200000941111970B970B0004AF20E000140010000000F5FF200000D400600000001A0000C020E00014000C000000F5FF200000B40000000000000004AB20E000140005000000F5FF2000009C1111160B160B00049A20E00014000E000000F5FF200000941111BF1FBF1F00049620E000140005000900F5FF200000F80000000000000000C020E000140006000000F5FF200000F4000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000C020E000140014000000F5FF200000D4006100003E1F0000C020E000140012000000F5FF200000F40000000000000000C0207C0814007C080000000000000000000000003E00DED9EE787D082D007D080000000000000000000000000000000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000100000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000200000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000300000002000D00140003 + m.lcFileBinary = m.lcFileBinary + 0h0000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000400000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000500000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000600000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000700000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000800000002000D001400030000000100000030305C + m.lcFileBinary = m.lcFileBinary + 0h293B5F282A0E000500027D082D007D080000000000000000000000000900000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000A00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000B00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000C00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000D00000002000D001400030000000100000030305C293B5F282A0E00050002 + m.lcFileBinary = m.lcFileBinary + 0h7D082D007D080000000000000000000000000E00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000F00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002B00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002C00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002D00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000002E00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000003A00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000003B00000002000D001400030000000300000030305C293B5F282A0E000500017D0841007D080000000000000000000000003100000003000D001400030000000300000030305C293B5F282A0E000500020800140003000000040000003B5F28405F2920207D0841007D080000000000000000000000003200000003000D001400030000000300000030305C293B5F282A0E00050002 + m.lcFileBinary = m.lcFileBinary + 0h080014000300FF3F040000003B5F28405F2920207D0841007D080000000000000000000000003300000003000D001400030000000300000030305C293B5F282A0E000500020800140003003233040000003B5F28405F2920207D082D007D080000000000000000000000003400000002000D001400030000000300000030305C293B5F282A0E000500027D0841007D080000000000000000000000003000000003000D00140002000000006100FF30305C293B5F282A0E000500020400140002000000C6EFCEFF3B5F28405F2920207D0841007D080000000000000000000000002800000003000D001400020000009C0006FF30305C293B5F282A0E000500 + m.lcFileBinary = m.lcFileBinary + 0h020400140002000000FFC7CEFF3B5F28405F2920207D0841007D080000000000000000000000003700000003000D001400020000009C6500FF30305C293B5F282A0E000500020400140002000000FFEB9CFF3B5F28405F2920207D0891007D080000000000000000000000003500000007000D001400020000003F3F76FF30305C293B5F282A0E000500020400140002000000FFCC99FF3B5F28405F29202007001400020000007F7F7FFF202020202020202008001400020000007F7F7FFF202020202020202009001400020000007F7F7FFF00000000000000000A001400020000007F7F7FFF00000000000000007D0891007D0800000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00003900000007000D001400020000003F3F3FFF30305C293B5F282A0E000500020400140002000000F2F2F2FF3B5F28405F29202007001400020000003F3F3FFF202020202020202008001400020000003F3F3FFF202020202020202009001400020000003F3F3FFF00000000000000000A001400020000003F3F3FFF00000000000000007D0891007D080000000000000000000000002900000007000D00140002000000FA7D00FF30305C293B5F282A0E000500020400140002000000F2F2F2FF3B5F28405F29202007001400020000007F7F7FFF202020202020202008001400020000007F7F7FFF202020202020202009001400020000007F7F7FFF00 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000A001400020000007F7F7FFF00000000000000007D0841007D080000000000000000000000003600000003000D00140002000000FA7D00FF30305C293B5F282A0E000500020800140002000000FF8001FF3B5F28405F2920207D0891007D080000000000000000000000002A00000007000D001400030000000000000030305C293B5F282A0E000500020400140002000000A5A5A5FF3B5F28405F29202007001400020000003F3F3FFF202020202020202008001400020000003F3F3FFF202020202020202009001400020000003F3F3FFF00000000000000000A001400020000003F3F3FFF00000000000000007D082D007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000003D00000002000D00140002000000FF0000FF30305C293B5F282A0E000500027D0891007D080000000000000000000000003800000007000D001400030000000100000030305C293B5F282A0E000500020400140002000000FFFFCCFF3B5F28405F2920200700140002000000B2B2B2FF20202020202020200800140002000000B2B2B2FF20202020202020200900140002000000B2B2B2FF00000000000000000A00140002000000B2B2B2FF00000000000000007D082D007D080000000000000000000000002F00000002000D001400020000007F7F7FFF30305C293B5F282A0E000500027D0855007D08000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h3C00000004000D001400030000000100000030305C293B5F282A0E000500020700140003000000040000003B5F28405F29202008001400030000000400000020202020202020207D0841007D080000000000000000000000002200000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000040000003B5F28405F2920207D0841007D080000000000000000000000001000000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566040000003B5F28405F2920207D0841007D080000000000000000000000001600000003000D001400030000000100000030305C293B5F282A0E00 + m.lcFileBinary = m.lcFileBinary + 0h050002040014000300CC4C040000003B5F28405F2920207D0841007D080000000000000000000000001C00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233040000003B5F28405F2920207D0841007D080000000000000000000000002300000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000050000003B5F28405F2920207D0841007D080000000000000000000000001100000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566050000003B5F28405F2920207D0841007D080000000000000000000000001700000003000D + m.lcFileBinary = m.lcFileBinary + 0h001400030000000100000030305C293B5F282A0E00050002040014000300CC4C050000003B5F28405F2920207D0841007D080000000000000000000000001D00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233050000003B5F28405F2920207D0841007D080000000000000000000000002400000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000060000003B5F28405F2920207D0841007D080000000000000000000000001200000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566060000003B5F28405F2920207D084100 + m.lcFileBinary = m.lcFileBinary + 0h7D080000000000000000000000001800000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C060000003B5F28405F2920207D0841007D080000000000000000000000001E00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233060000003B5F28405F2920207D0841007D080000000000000000000000002500000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000070000003B5F28405F2920207D0841007D080000000000000000000000001300000003000D001400030000000100000030305C293B5F282A0E00050002040014 + m.lcFileBinary = m.lcFileBinary + 0h0003006566070000003B5F28405F2920207D0841007D080000000000000000000000001900000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C070000003B5F28405F2920207D0841007D080000000000000000000000001F00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233070000003B5F28405F2920207D0841007D080000000000000000000000002600000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000080000003B5F28405F2920207D0841007D080000000000000000000000001400000003000D001400030000 + m.lcFileBinary = m.lcFileBinary + 0h000100000030305C293B5F282A0E000500020400140003006566080000003B5F28405F2920207D0841007D080000000000000000000000001A00000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C080000003B5F28405F2920207D0841007D080000000000000000000000002000000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233080000003B5F28405F2920207D0841007D080000000000000000000000002700000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000090000003B5F28405F2920207D0841007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000001500000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566090000003B5F28405F2920207D0841007D080000000000000000000000001B00000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C090000003B5F28405F2920207D0841007D080000000000000000000000002100000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233090000003B5F28405F2920209302120010000D0000323025202D20416363656E743192084D0092080000000000000000000001041EFF0D0032003000250020002D0020004100 + m.lcFileBinary = m.lcFileBinary + 0h6300630065006E00740031000000030001000C0007046566DBE5F1FF05000C0007010000000000FF25000500029302120011000D0000323025202D20416363656E743292084D00920800000000000000000000010422FF0D0032003000250020002D00200041006300630065006E00740032000000030001000C0007056566F2DDDCFF05000C0007010000000000FF25000500029302120012000D0000323025202D20416363656E743392084D00920800000000000000000000010426FF0D0032003000250020002D00200041006300630065006E00740033000000030001000C0007066566EAF1DDFF05000C0007010000000000FF250005000293021200 + m.lcFileBinary = m.lcFileBinary + 0h13000D0000323025202D20416363656E743492084D0092080000000000000000000001042AFF0D0032003000250020002D00200041006300630065006E00740034000000030001000C0007076566E5E0ECFF05000C0007010000000000FF25000500029302120014000D0000323025202D20416363656E743592084D0092080000000000000000000001042EFF0D0032003000250020002D00200041006300630065006E00740035000000030001000C0007086566DBEEF3FF05000C0007010000000000FF25000500029302120015000D0000323025202D20416363656E743692084D00920800000000000000000000010432FF0D0032003000250020002D + m.lcFileBinary = m.lcFileBinary + 0h00200041006300630065006E00740036000000030001000C0007096566FDE9D9FF05000C0007010000000000FF25000500029302120016000D0000343025202D20416363656E743192084D0092080000000000000000000001041FFF0D0034003000250020002D00200041006300630065006E00740031000000030001000C000704CC4CB8CCE4FF05000C0007010000000000FF25000500029302120017000D0000343025202D20416363656E743292084D00920800000000000000000000010423FF0D0034003000250020002D00200041006300630065006E00740032000000030001000C000705CC4CE6B9B8FF05000C0007010000000000FF25000500 + m.lcFileBinary = m.lcFileBinary + 0h029302120018000D0000343025202D20416363656E743392084D00920800000000000000000000010427FF0D0034003000250020002D00200041006300630065006E00740033000000030001000C000706CC4CD7E4BCFF05000C0007010000000000FF25000500029302120019000D0000343025202D20416363656E743492084D0092080000000000000000000001042BFF0D0034003000250020002D00200041006300630065006E00740034000000030001000C000707CC4CCCC0DAFF05000C0007010000000000FF2500050002930212001A000D0000343025202D20416363656E743592084D0092080000000000000000000001042FFF0D0034003000 + m.lcFileBinary = m.lcFileBinary + 0h250020002D00200041006300630065006E00740035000000030001000C000708CC4CB6DDE8FF05000C0007010000000000FF2500050002930212001B000D0000343025202D20416363656E743692084D00920800000000000000000000010433FF0D0034003000250020002D00200041006300630065006E00740036000000030001000C000709CC4CFCD5B4FF05000C0007010000000000FF2500050002930212001C000D0000363025202D20416363656E743192084D00920800000000000000000000010420FF0D0036003000250020002D00200041006300630065006E00740031000000030001000C000704323395B3D7FF05000C0007000000FFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFF2500050002930212001D000D0000363025202D20416363656E743292084D00920800000000000000000000010424FF0D0036003000250020002D00200041006300630065006E00740032000000030001000C0007053233D99795FF05000C0007000000FFFFFFFF2500050002930212001E000D0000363025202D20416363656E743392084D00920800000000000000000000010428FF0D0036003000250020002D00200041006300630065006E00740033000000030001000C0007063233C2D69AFF05000C0007000000FFFFFFFF2500050002930212001F000D0000363025202D20416363656E743492084D0092080000000000000000000001042CFF0D + m.lcFileBinary = m.lcFileBinary + 0h0036003000250020002D00200041006300630065006E00740034000000030001000C0007073233B2A1C7FF05000C0007000000FFFFFFFF25000500029302120020000D0000363025202D20416363656E743592084D00920800000000000000000000010430FF0D0036003000250020002D00200041006300630065006E00740035000000030001000C000708323393CDDDFF05000C0007000000FFFFFFFF25000500029302120021000D0000363025202D20416363656E743692084D00920800000000000000000000010434FF0D0036003000250020002D00200041006300630065006E00740036000000030001000C0007093233FAC090FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF250005000293020C002200070000416363656E74319208410092080000000000000000000001041DFF070041006300630065006E00740031000000030001000C00070400004F81BDFF05000C0007000000FFFFFFFF250005000293020C002300070000416363656E743292084100920800000000000000000000010421FF070041006300630065006E00740032000000030001000C0007050000C0504DFF05000C0007000000FFFFFFFF250005000293020C002400070000416363656E743392084100920800000000000000000000010425FF070041006300630065006E00740033000000030001000C00070600009BBB59FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF250005000293020C002500070000416363656E743492084100920800000000000000000000010429FF070041006300630065006E00740034000000030001000C00070700008064A2FF05000C0007000000FFFFFFFF250005000293020C002600070000416363656E74359208410092080000000000000000000001042DFF070041006300630065006E00740035000000030001000C00070800004BACC6FF05000C0007000000FFFFFFFF250005000293020C002700070000416363656E743692084100920800000000000000000000010431FF070041006300630065006E00740036000000030001000C0007090000F79646FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF25000500029302080028000300004261649208390092080000000000000000000001011BFF03004200610064000000030001000C0005FF0000FFC7CEFF05000C0005FF00009C0006FF25000500029302100029000B000043616C63756C6174696F6E92088100920800000000000000000000010216FF0B00430061006C00630075006C006100740069006F006E000000070001000C0005FF0000F2F2F2FF05000C0005FF0000FA7D00FF250005000206000E0005FF00007F7F7FFF010007000E0005FF00007F7F7FFF010008000E0005FF00007F7F7FFF010009000E0005FF00007F7F7FFF010093020F002A000A0000436865636B2043656C + m.lcFileBinary = m.lcFileBinary + 0h6C92087F00920800000000000000000000010217FF0A0043006800650063006B002000430065006C006C000000070001000C0005FF0000A5A5A5FF05000C0007000000FFFFFFFF250005000206000E0005FF00003F3F3FFF060007000E0005FF00003F3F3FFF060008000E0005FF00003F3F3FFF060009000E0005FF00003F3F3FFF0600930204002B8003FF92082000920800000000000000000000010503FF050043006F006D006D00610000000000930204002C8006FF92082800920800000000000000000000010506FF090043006F006D006D00610020005B0030005D0000000000930204002D8004FF92082600920800000000000000000000010504 + m.lcFileBinary = m.lcFileBinary + 0hFF0800430075007200720065006E006300790000000000930204002E8007FF92082E00920800000000000000000000010507FF0C00430075007200720065006E006300790020005B0030005D0000000000930215002F001000004578706C616E61746F7279205465787492084700920800000000000000000000010235FF10004500780070006C0061006E00610074006F0072007900200054006500780074000000020005000C0005FF00007F7F7FFF2500050002930209003000040000476F6F6492083B0092080000000000000000000001011AFF040047006F006F0064000000030001000C0005FF0000C6EFCEFF05000C0005FF0000006100FF250005 + m.lcFileBinary = m.lcFileBinary + 0h000293020E00310009000048656164696E67203192084700920800000000000000000000010310FF0900480065006100640069006E006700200031000000030005000C00070300001F497DFF250005000207000E00070400004F81BDFF050093020E00320009000048656164696E67203292084700920800000000000000000000010311FF0900480065006100640069006E006700200032000000030005000C00070300001F497DFF250005000207000E000704FF3FA8C0DEFF050093020E00330009000048656164696E67203392084700920800000000000000000000010312FF0900480065006100640069006E006700200033000000030005000C0007 + m.lcFileBinary = m.lcFileBinary + 0h0300001F497DFF250005000207000E000704323395B3D7FF020093020E00340009000048656164696E67203492083900920800000000000000000000010313FF0900480065006100640069006E006700200034000000020005000C00070300001F497DFF250005000293020A003500050000496E70757492087500920800000000000000000000010214FF050049006E007000750074000000070001000C0005FF0000FFCC99FF05000C0005FF00003F3F76FF250005000206000E0005FF00007F7F7FFF010007000E0005FF00007F7F7FFF010008000E0005FF00007F7F7FFF010009000E0005FF00007F7F7FFF01009302100036000B00004C696E6B6564 + m.lcFileBinary = m.lcFileBinary + 0h2043656C6C92084B00920800000000000000000000010218FF0B004C0069006E006B00650064002000430065006C006C000000030005000C0005FF0000FA7D00FF250005000207000E0005FF0000FF8001FF060093020C0037000700004E65757472616C9208410092080000000000000000000001011CFF07004E00650075007400720061006C000000030001000C0005FF0000FFEB9CFF05000C0005FF00009C6500FF250005000293020400008000FF92083300920800000000000000000000010100FF06004E006F0072006D0061006C000000020005000C0007010000000000FF25000500029302090038000400004E6F746592086200920800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000001020AFF04004E006F00740065000000050001000C0005FF0000FFFFCCFF06000E0005FF0000B2B2B2FF010007000E0005FF0000B2B2B2FF010008000E0005FF0000B2B2B2FF010009000E0005FF0000B2B2B2FF010093020B0039000600004F757470757492087700920800000000000000000000010215FF06004F00750074007000750074000000070001000C0005FF0000F2F2F2FF05000C0005FF00003F3F3FFF250005000206000E0005FF00003F3F3FFF010007000E0005FF00003F3F3FFF010008000E0005FF00003F3F3FFF010009000E0005FF00003F3F3FFF0100930204003A8005FF9208240092080000000000000000000001 + m.lcFileBinary = m.lcFileBinary + 0h0505FF0700500065007200630065006E0074000000000093020A003B000500005469746C659208310092080000000000000000000001030FFF05005400690074006C0065000000020005000C00070300001F497DFF250005000193020A003C00050000546F74616C92084D00920800000000000000000000010319FF050054006F00740061006C000000040005000C0007010000000000FF250005000206000E00070400004F81BDFF010007000E00070400004F81BDFF0600930211003D000C00005761726E696E67205465787492083F0092080000000000000000000001020BFF0C005700610072006E0069006E00670020005400650078007400000002 + m.lcFileBinary = m.lcFileBinary + 0h0005000C0005FF0000FF0000FF25000500028E0858008E080000000000000000000090000000110011005400610062006C0065005300740079006C0065004D0065006400690075006D0039005000690076006F0074005300740079006C0065004C0069006700680074003100360060010200000085000E00032E0000000006005368656574319A0818009A0800000000000000000000010000000000000001000000A3081000A30800000000000000000000000000008C00040001000100C1010800C10100001DEB0100FC0008000000000000000000FF00020008006308160063080000000000000000000016000000040000000200960810009608000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000042E501009B0810009B0800000000000000000000010000008C0810008C0800000000000000000000000000000A0000000908100000061000A91FCD07C1000100060400000B021000000000000000000000000000152F00000D00020001000C00020064000F000200010011000200000010000800FCA9F1D24D62503F5F00020001002A00020000002B00020000008200020001008000080000000000000000002502040000002C0181000200C104140000001500000083000200000084000200000026000800666666666666E63F27000800666666666666E63F28000800000000000000E83F29000800000000000000E83FA10022000000 + m.lcFileBinary = m.lcFileBinary + 0h2C01010001000100040042E50100333333333333D33F333333333333D33F74009C0826009C0800000000000000000000000000000000000000000000000000003C33000000000000000055000200080000020E0000000000000000000000000000003E021200B606000000004000000000000000000000008B0810008B0800000000000000000000000002001D000F0003000000000000010000000000000067081700670800000000000000000000020001FFFFFFFF034400000A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000003000000FEFFFFFF050000000600000007000000FEFFFFFF09000000FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF0000060002000000000000000000000000000000000001000000E0859FF2F94F6810AB9108002B27B3D930000000980000000700000001000000400000000400000048000000080000005400000012000000600000000C000000780000000D00000084000000130000009000000002000000E40400001E00000004000000000000001E00000004000000000000001E000000100000004D6963726F736F667420457863656C004000000000C07C0D23D9C601400000000086FCA92911C90103000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEFF000006000200000000000000000000000000000000000100000002D5CDD59C2E1B10939708002B2CF9AE30000000B000000008000000010000004800000017000000500000000B000000580000001000000060000000130000006800000016000000700000000D000000780000000C0000008B00000002000000E40400000300000000000C000B000000000000000B000000000000000B000000000000000B000000000000001E1000000100000007000000536865657431000C100000020000001E0000 + m.lcFileBinary = m.lcFileBinary + 0h000B000000576F726B73686565747300030000000100000000000000000000000000000000000000000000000000000000000000000000000000010043006F006D0070004F0062006A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000200FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000800000072000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100FEFF030A0000FFFFFFFF2008020000000000C000000000000046260000004D6963726F736F6674204F666669636520457863656C203230303320576F726B736865657400060000004269666638000E000000457863656C2E53686565742E3800F439B271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + ENDCASE + IF !EMPTY(m.lcFileBinary) + IF STRTOFILE(m.lcFileBinary, m.tcExcelFile, 0) > 0 + m.llReturn = .T. + ENDIF + ENDIF + ENDIF + RETURN m.llReturn +ENDFUNC \ No newline at end of file diff --git a/clase/GridExtras/gridextrasselect.vct b/clase/GridExtras/gridextrasselect.vct new file mode 100644 index 0000000..01b8c30 Binary files /dev/null and b/clase/GridExtras/gridextrasselect.vct differ diff --git a/clase/GridExtras/gridextrasselect.vcx b/clase/GridExtras/gridextrasselect.vcx new file mode 100644 index 0000000..4c6f832 Binary files /dev/null and b/clase/GridExtras/gridextrasselect.vcx differ diff --git a/clase/GridExtras/gridfunctions16.bmp b/clase/GridExtras/gridfunctions16.bmp new file mode 100644 index 0000000..e5a44a9 Binary files /dev/null and b/clase/GridExtras/gridfunctions16.bmp differ diff --git a/clase/GridExtras/modifica.png b/clase/GridExtras/modifica.png new file mode 100644 index 0000000..f48da8f Binary files /dev/null and b/clase/GridExtras/modifica.png differ diff --git a/clase/GridExtras/nosort12.bmp b/clase/GridExtras/nosort12.bmp new file mode 100644 index 0000000..b531a2f Binary files /dev/null and b/clase/GridExtras/nosort12.bmp differ diff --git a/clase/GridExtras/renunta.png b/clase/GridExtras/renunta.png new file mode 100644 index 0000000..9a27ad1 Binary files /dev/null and b/clase/GridExtras/renunta.png differ diff --git a/clase/GridExtras/salveaza.png b/clase/GridExtras/salveaza.png new file mode 100644 index 0000000..ba15628 Binary files /dev/null and b/clase/GridExtras/salveaza.png differ diff --git a/clase/GridExtras/sample.PJT b/clase/GridExtras/sample.PJT new file mode 100644 index 0000000..110ef0f Binary files /dev/null and b/clase/GridExtras/sample.PJT differ diff --git a/clase/GridExtras/sample.SCT b/clase/GridExtras/sample.SCT new file mode 100644 index 0000000..611b012 Binary files /dev/null and b/clase/GridExtras/sample.SCT differ diff --git a/clase/GridExtras/sample.pjx b/clase/GridExtras/sample.pjx new file mode 100644 index 0000000..3b11824 Binary files /dev/null and b/clase/GridExtras/sample.pjx differ diff --git a/clase/GridExtras/sample.scx b/clase/GridExtras/sample.scx new file mode 100644 index 0000000..8fdbbd4 Binary files /dev/null and b/clase/GridExtras/sample.scx differ diff --git a/clase/GridExtras/search16.bmp b/clase/GridExtras/search16.bmp new file mode 100644 index 0000000..e6969c5 Binary files /dev/null and b/clase/GridExtras/search16.bmp differ diff --git a/clase/GridExtras/showfilters16.bmp b/clase/GridExtras/showfilters16.bmp new file mode 100644 index 0000000..5b11413 Binary files /dev/null and b/clase/GridExtras/showfilters16.bmp differ diff --git a/clase/GridExtras/sterge.png b/clase/GridExtras/sterge.png new file mode 100644 index 0000000..1294132 Binary files /dev/null and b/clase/GridExtras/sterge.png differ diff --git a/clase/GridExtras/table_sql_view.png b/clase/GridExtras/table_sql_view.png new file mode 100644 index 0000000..e3da5a5 Binary files /dev/null and b/clase/GridExtras/table_sql_view.png differ diff --git a/clase/GridExtras/table_sql_view16.png b/clase/GridExtras/table_sql_view16.png new file mode 100644 index 0000000..f48da8f Binary files /dev/null and b/clase/GridExtras/table_sql_view16.png differ diff --git a/clase/_baza.VCT b/clase/_baza.VCT new file mode 100644 index 0000000..23f06c1 Binary files /dev/null and b/clase/_baza.VCT differ diff --git a/clase/_baza.vcx b/clase/_baza.vcx new file mode 100644 index 0000000..aa3ff47 Binary files /dev/null and b/clase/_baza.vcx differ diff --git a/clase/_ca_base.vct b/clase/_ca_base.vct new file mode 100644 index 0000000..e043559 Binary files /dev/null and b/clase/_ca_base.vct differ diff --git a/clase/_ca_base.vcx b/clase/_ca_base.vcx new file mode 100644 index 0000000..751b799 Binary files /dev/null and b/clase/_ca_base.vcx differ diff --git a/clase/_frm_base.vct b/clase/_frm_base.vct new file mode 100644 index 0000000..70d1886 Binary files /dev/null and b/clase/_frm_base.vct differ diff --git a/clase/_frm_base.vcx b/clase/_frm_base.vcx new file mode 100644 index 0000000..a84de2a Binary files /dev/null and b/clase/_frm_base.vcx differ diff --git a/clase/_grd_base.VCT b/clase/_grd_base.VCT new file mode 100644 index 0000000..3c04f3d Binary files /dev/null and b/clase/_grd_base.VCT differ diff --git a/clase/_grd_base.vcx b/clase/_grd_base.vcx new file mode 100644 index 0000000..300ac31 Binary files /dev/null and b/clase/_grd_base.vcx differ diff --git a/clase/actualizareroa.VCT b/clase/actualizareroa.VCT new file mode 100644 index 0000000..a9dd7b0 Binary files /dev/null and b/clase/actualizareroa.VCT differ diff --git a/clase/actualizareroa.vcx b/clase/actualizareroa.vcx new file mode 100644 index 0000000..364a06e Binary files /dev/null and b/clase/actualizareroa.vcx differ diff --git a/clase/appwiz.vcx b/clase/appwiz.vcx new file mode 100644 index 0000000..77f8595 Binary files /dev/null and b/clase/appwiz.vcx differ diff --git a/clase/comun.VCT b/clase/comun.VCT new file mode 100644 index 0000000..cb703be Binary files /dev/null and b/clase/comun.VCT differ diff --git a/clase/comun.vcx b/clase/comun.vcx new file mode 100644 index 0000000..b641c74 Binary files /dev/null and b/clase/comun.vcx differ diff --git a/clase/execute_script.VCT b/clase/execute_script.VCT new file mode 100644 index 0000000..8d5110d Binary files /dev/null and b/clase/execute_script.VCT differ diff --git a/clase/execute_script.vcx b/clase/execute_script.vcx new file mode 100644 index 0000000..676acb1 Binary files /dev/null and b/clase/execute_script.vcx differ diff --git a/clase/generare_script.VCT b/clase/generare_script.VCT new file mode 100644 index 0000000..145cbe4 Binary files /dev/null and b/clase/generare_script.VCT differ diff --git a/clase/generare_script.vcx b/clase/generare_script.vcx new file mode 100644 index 0000000..fe6d76d Binary files /dev/null and b/clase/generare_script.vcx differ diff --git a/clase/gridsort.VCT b/clase/gridsort.VCT new file mode 100644 index 0000000..767b7a3 Binary files /dev/null and b/clase/gridsort.VCT differ diff --git a/clase/gridsort.vcx b/clase/gridsort.vcx new file mode 100644 index 0000000..ebf1b19 Binary files /dev/null and b/clase/gridsort.vcx differ diff --git a/clase/start.VCT b/clase/start.VCT new file mode 100644 index 0000000..ddcb6c1 Binary files /dev/null and b/clase/start.VCT differ diff --git a/clase/start.vcx b/clase/start.vcx new file mode 100644 index 0000000..0cec6b3 Binary files /dev/null and b/clase/start.vcx differ diff --git a/clase/systray.vct b/clase/systray.vct new file mode 100644 index 0000000..cff31a0 Binary files /dev/null and b/clase/systray.vct differ diff --git a/clase/systray.vcx b/clase/systray.vcx new file mode 100644 index 0000000..b0f7c58 Binary files /dev/null and b/clase/systray.vcx differ diff --git a/clase/test.vct b/clase/test.vct new file mode 100644 index 0000000..a39f118 Binary files /dev/null and b/clase/test.vct differ diff --git a/clase/test.vcx b/clase/test.vcx new file mode 100644 index 0000000..00c7a11 Binary files /dev/null and b/clase/test.vcx differ diff --git a/contafin-noutati-template-htmlmerge.xml b/contafin-noutati-template-htmlmerge.xml new file mode 100644 index 0000000..83438f9 --- /dev/null +++ b/contafin-noutati-template-htmlmerge.xml @@ -0,0 +1,25 @@ + + + + +Noutati Contafin +http://www.romfast.ro +Noutati +en-us +Copyright <%=YEAR(DATE())%> +<%=RFC822Date(DATETIME())%> +http://blogs.law.harvard.edu/tech/rss + +<%=VERSION()%> +60 + + +<%=HTMLFix(title)%> +<%=HTMLFix(Description)%> +<%=RFC822Date(DATETIME())%> +<%=HTMLFix(Link)%> +contafin.romfast.ro.<%=guid%> + +
+
+
\ No newline at end of file diff --git a/ferestre/frm_adaugare_task.SCT b/ferestre/frm_adaugare_task.SCT new file mode 100644 index 0000000..86c762a Binary files /dev/null and b/ferestre/frm_adaugare_task.SCT differ diff --git a/ferestre/frm_adaugare_task.scx b/ferestre/frm_adaugare_task.scx new file mode 100644 index 0000000..f146368 Binary files /dev/null and b/ferestre/frm_adaugare_task.scx differ diff --git a/ferestre/frm_connect.SCT b/ferestre/frm_connect.SCT new file mode 100644 index 0000000..6c4744b Binary files /dev/null and b/ferestre/frm_connect.SCT differ diff --git a/ferestre/frm_connect.scx b/ferestre/frm_connect.scx new file mode 100644 index 0000000..3aed631 Binary files /dev/null and b/ferestre/frm_connect.scx differ diff --git a/ferestre/frm_lucrare_noua.SCT b/ferestre/frm_lucrare_noua.SCT new file mode 100644 index 0000000..ad65d17 Binary files /dev/null and b/ferestre/frm_lucrare_noua.SCT differ diff --git a/ferestre/frm_lucrare_noua.scx b/ferestre/frm_lucrare_noua.scx new file mode 100644 index 0000000..2d2b003 Binary files /dev/null and b/ferestre/frm_lucrare_noua.scx differ diff --git a/ferestre/frm_lucrare_noua_a.SCT b/ferestre/frm_lucrare_noua_a.SCT new file mode 100644 index 0000000..07a0a1d Binary files /dev/null and b/ferestre/frm_lucrare_noua_a.SCT differ diff --git a/ferestre/frm_lucrare_noua_a.scx b/ferestre/frm_lucrare_noua_a.scx new file mode 100644 index 0000000..9d8fde2 Binary files /dev/null and b/ferestre/frm_lucrare_noua_a.scx differ diff --git a/ferestre/frm_setari.SCT b/ferestre/frm_setari.SCT new file mode 100644 index 0000000..64b131a Binary files /dev/null and b/ferestre/frm_setari.SCT differ diff --git a/ferestre/frm_setari.scx b/ferestre/frm_setari.scx new file mode 100644 index 0000000..0f29cd8 Binary files /dev/null and b/ferestre/frm_setari.scx differ diff --git a/ferestre/frm_tasks.SCT b/ferestre/frm_tasks.SCT new file mode 100644 index 0000000..f865cdb Binary files /dev/null and b/ferestre/frm_tasks.SCT differ diff --git a/ferestre/frm_tasks.scx b/ferestre/frm_tasks.scx new file mode 100644 index 0000000..9a88381 Binary files /dev/null and b/ferestre/frm_tasks.scx differ diff --git a/ferestre/frm_viz_lucrari.SCT b/ferestre/frm_viz_lucrari.SCT new file mode 100644 index 0000000..d2625a4 Binary files /dev/null and b/ferestre/frm_viz_lucrari.SCT differ diff --git a/ferestre/frm_viz_lucrari.scx b/ferestre/frm_viz_lucrari.scx new file mode 100644 index 0000000..3ba7a42 Binary files /dev/null and b/ferestre/frm_viz_lucrari.scx differ diff --git a/ferestre/genscript/frm_add_script.SCT b/ferestre/genscript/frm_add_script.SCT new file mode 100644 index 0000000..6fa1ea4 Binary files /dev/null and b/ferestre/genscript/frm_add_script.SCT differ diff --git a/ferestre/genscript/frm_add_script.scx b/ferestre/genscript/frm_add_script.scx new file mode 100644 index 0000000..73c10f8 Binary files /dev/null and b/ferestre/genscript/frm_add_script.scx differ diff --git a/ferestre/genscript/frm_add_select_script.SCT b/ferestre/genscript/frm_add_select_script.SCT new file mode 100644 index 0000000..4b5ea07 Binary files /dev/null and b/ferestre/genscript/frm_add_select_script.SCT differ diff --git a/ferestre/genscript/frm_add_select_script.scx b/ferestre/genscript/frm_add_select_script.scx new file mode 100644 index 0000000..8ea7768 Binary files /dev/null and b/ferestre/genscript/frm_add_select_script.scx differ diff --git a/ferestre/genscript/frm_aleg_data.SCT b/ferestre/genscript/frm_aleg_data.SCT new file mode 100644 index 0000000..3919a79 Binary files /dev/null and b/ferestre/genscript/frm_aleg_data.SCT differ diff --git a/ferestre/genscript/frm_aleg_data.scx b/ferestre/genscript/frm_aleg_data.scx new file mode 100644 index 0000000..9905903 Binary files /dev/null and b/ferestre/genscript/frm_aleg_data.scx differ diff --git a/ferestre/genscript/frm_aleg_text.sct b/ferestre/genscript/frm_aleg_text.sct new file mode 100644 index 0000000..85b995b Binary files /dev/null and b/ferestre/genscript/frm_aleg_text.sct differ diff --git a/ferestre/genscript/frm_aleg_text.scx b/ferestre/genscript/frm_aleg_text.scx new file mode 100644 index 0000000..1b9978b Binary files /dev/null and b/ferestre/genscript/frm_aleg_text.scx differ diff --git a/ferestre/genscript/frm_alegdinclob.SCT b/ferestre/genscript/frm_alegdinclob.SCT new file mode 100644 index 0000000..02cd1b8 Binary files /dev/null and b/ferestre/genscript/frm_alegdinclob.SCT differ diff --git a/ferestre/genscript/frm_alegdinclob.scx b/ferestre/genscript/frm_alegdinclob.scx new file mode 100644 index 0000000..9e9d41b Binary files /dev/null and b/ferestre/genscript/frm_alegdinclob.scx differ diff --git a/ferestre/genscript/frm_danu.SCT b/ferestre/genscript/frm_danu.SCT new file mode 100644 index 0000000..c9136f5 Binary files /dev/null and b/ferestre/genscript/frm_danu.SCT differ diff --git a/ferestre/genscript/frm_danu.scx b/ferestre/genscript/frm_danu.scx new file mode 100644 index 0000000..c83e583 Binary files /dev/null and b/ferestre/genscript/frm_danu.scx differ diff --git a/ferestre/genscript/frm_exec_script.SCT b/ferestre/genscript/frm_exec_script.SCT new file mode 100644 index 0000000..e750a4a Binary files /dev/null and b/ferestre/genscript/frm_exec_script.SCT differ diff --git a/ferestre/genscript/frm_exec_script.scx b/ferestre/genscript/frm_exec_script.scx new file mode 100644 index 0000000..a406dbe Binary files /dev/null and b/ferestre/genscript/frm_exec_script.scx differ diff --git a/ferestre/genscript/frm_gen_script.SCT b/ferestre/genscript/frm_gen_script.SCT new file mode 100644 index 0000000..59325c3 Binary files /dev/null and b/ferestre/genscript/frm_gen_script.SCT differ diff --git a/ferestre/genscript/frm_gen_script.scx b/ferestre/genscript/frm_gen_script.scx new file mode 100644 index 0000000..12ecdfa Binary files /dev/null and b/ferestre/genscript/frm_gen_script.scx differ diff --git a/ferestre/genscript/frm_mod_script.SCT b/ferestre/genscript/frm_mod_script.SCT new file mode 100644 index 0000000..42b04e3 Binary files /dev/null and b/ferestre/genscript/frm_mod_script.SCT differ diff --git a/ferestre/genscript/frm_mod_script.scx b/ferestre/genscript/frm_mod_script.scx new file mode 100644 index 0000000..7dbb59a Binary files /dev/null and b/ferestre/genscript/frm_mod_script.scx differ diff --git a/ferestre/genscript/frm_modmaster.SCT b/ferestre/genscript/frm_modmaster.SCT new file mode 100644 index 0000000..1670b6d Binary files /dev/null and b/ferestre/genscript/frm_modmaster.SCT differ diff --git a/ferestre/genscript/frm_modmaster.scx b/ferestre/genscript/frm_modmaster.scx new file mode 100644 index 0000000..a2517f8 Binary files /dev/null and b/ferestre/genscript/frm_modmaster.scx differ diff --git a/ferestre/genscript/frm_op234.SCT b/ferestre/genscript/frm_op234.SCT new file mode 100644 index 0000000..78ac715 Binary files /dev/null and b/ferestre/genscript/frm_op234.SCT differ diff --git a/ferestre/genscript/frm_op234.scx b/ferestre/genscript/frm_op234.scx new file mode 100644 index 0000000..a940645 Binary files /dev/null and b/ferestre/genscript/frm_op234.scx differ diff --git a/ferestre/genscript/frm_operatii.SCT b/ferestre/genscript/frm_operatii.SCT new file mode 100644 index 0000000..ae356b9 Binary files /dev/null and b/ferestre/genscript/frm_operatii.SCT differ diff --git a/ferestre/genscript/frm_operatii.scx b/ferestre/genscript/frm_operatii.scx new file mode 100644 index 0000000..f34c9ac Binary files /dev/null and b/ferestre/genscript/frm_operatii.scx differ diff --git a/ferestre/genscript/frm_scriptfinal.SCT b/ferestre/genscript/frm_scriptfinal.SCT new file mode 100644 index 0000000..a9fd8c8 Binary files /dev/null and b/ferestre/genscript/frm_scriptfinal.SCT differ diff --git a/ferestre/genscript/frm_scriptfinal.scx b/ferestre/genscript/frm_scriptfinal.scx new file mode 100644 index 0000000..50c1b48 Binary files /dev/null and b/ferestre/genscript/frm_scriptfinal.scx differ diff --git a/ferestre/genscript/frm_scripturi_aplicate.SCT b/ferestre/genscript/frm_scripturi_aplicate.SCT new file mode 100644 index 0000000..e750a4a Binary files /dev/null and b/ferestre/genscript/frm_scripturi_aplicate.SCT differ diff --git a/ferestre/genscript/frm_scripturi_aplicate.scx b/ferestre/genscript/frm_scripturi_aplicate.scx new file mode 100644 index 0000000..a406dbe Binary files /dev/null and b/ferestre/genscript/frm_scripturi_aplicate.scx differ diff --git a/ferestre/genscript/frm_selefinal.SCT b/ferestre/genscript/frm_selefinal.SCT new file mode 100644 index 0000000..43f1c0e Binary files /dev/null and b/ferestre/genscript/frm_selefinal.SCT differ diff --git a/ferestre/genscript/frm_selefinal.scx b/ferestre/genscript/frm_selefinal.scx new file mode 100644 index 0000000..88a6114 Binary files /dev/null and b/ferestre/genscript/frm_selefinal.scx differ diff --git a/ferestre/genscript/frm_vad_clob.SCT b/ferestre/genscript/frm_vad_clob.SCT new file mode 100644 index 0000000..c26a943 Binary files /dev/null and b/ferestre/genscript/frm_vad_clob.SCT differ diff --git a/ferestre/genscript/frm_vad_clob.scx b/ferestre/genscript/frm_vad_clob.scx new file mode 100644 index 0000000..ad4e099 Binary files /dev/null and b/ferestre/genscript/frm_vad_clob.scx differ diff --git a/ferestre/sc_form_main.SCT b/ferestre/sc_form_main.SCT new file mode 100644 index 0000000..8a159e8 Binary files /dev/null and b/ferestre/sc_form_main.SCT differ diff --git a/ferestre/sc_form_main.scx b/ferestre/sc_form_main.scx new file mode 100644 index 0000000..1028bf9 Binary files /dev/null and b/ferestre/sc_form_main.scx differ diff --git a/genscript_template.ini b/genscript_template.ini new file mode 100644 index 0000000..e1843c6 --- /dev/null +++ b/genscript_template.ini @@ -0,0 +1,19 @@ +[connection] +host= +username= +password= +[login] +login_save=1 +login_history_size=10 +login_sort=last_used +[folder] +script_folder= +scripturi= +[sql] +sqlplus= +[script] +CONTAFIN_ORACLE=CO_ +SCHEMAROA=FF_ +SYS=SYS_ +CONTABILITATE=JCS_ +SOFT_SERII=RF_ \ No newline at end of file diff --git a/grafice/SG.ICO b/grafice/SG.ICO new file mode 100644 index 0000000..1661e47 Binary files /dev/null and b/grafice/SG.ICO differ diff --git a/grafice/cry.gif b/grafice/cry.gif new file mode 100644 index 0000000..6acc02c Binary files /dev/null and b/grafice/cry.gif differ diff --git a/grafice/da_sus.bmp b/grafice/da_sus.bmp new file mode 100644 index 0000000..d5a3989 Binary files /dev/null and b/grafice/da_sus.bmp differ diff --git a/grafice/down.bmp b/grafice/down.bmp new file mode 100644 index 0000000..f328ea0 Binary files /dev/null and b/grafice/down.bmp differ diff --git a/grafice/excel_sus.bmp b/grafice/excel_sus.bmp new file mode 100644 index 0000000..adfe8c9 Binary files /dev/null and b/grafice/excel_sus.bmp differ diff --git a/grafice/grafic_sus.bmp b/grafice/grafic_sus.bmp new file mode 100644 index 0000000..bfd651e Binary files /dev/null and b/grafice/grafic_sus.bmp differ diff --git a/grafice/happy.gif b/grafice/happy.gif new file mode 100644 index 0000000..7121507 Binary files /dev/null and b/grafice/happy.gif differ diff --git a/grafice/help_sus.bmp b/grafice/help_sus.bmp new file mode 100644 index 0000000..e330ba4 Binary files /dev/null and b/grafice/help_sus.bmp differ diff --git a/grafice/jos1.bmp b/grafice/jos1.bmp new file mode 100644 index 0000000..715b967 Binary files /dev/null and b/grafice/jos1.bmp differ diff --git a/grafice/listare_sus.bmp b/grafice/listare_sus.bmp new file mode 100644 index 0000000..7fa12f5 Binary files /dev/null and b/grafice/listare_sus.bmp differ diff --git a/grafice/modific_sus.bmp b/grafice/modific_sus.bmp new file mode 100644 index 0000000..259b575 Binary files /dev/null and b/grafice/modific_sus.bmp differ diff --git a/grafice/modiparam_sus.bmp b/grafice/modiparam_sus.bmp new file mode 100644 index 0000000..332dceb Binary files /dev/null and b/grafice/modiparam_sus.bmp differ diff --git a/grafice/news1.ico b/grafice/news1.ico new file mode 100644 index 0000000..4c6bd5e Binary files /dev/null and b/grafice/news1.ico differ diff --git a/grafice/nou_sus.bmp b/grafice/nou_sus.bmp new file mode 100644 index 0000000..ba8a033 Binary files /dev/null and b/grafice/nou_sus.bmp differ diff --git a/grafice/nu_sus.bmp b/grafice/nu_sus.bmp new file mode 100644 index 0000000..efabc33 Binary files /dev/null and b/grafice/nu_sus.bmp differ diff --git a/grafice/precEDENT1.bmp b/grafice/precEDENT1.bmp new file mode 100644 index 0000000..dad6cb1 Binary files /dev/null and b/grafice/precEDENT1.bmp differ diff --git a/grafice/refac_sus.bmp b/grafice/refac_sus.bmp new file mode 100644 index 0000000..f430a54 Binary files /dev/null and b/grafice/refac_sus.bmp differ diff --git a/grafice/renunt_sus.bmp b/grafice/renunt_sus.bmp new file mode 100644 index 0000000..6468726 Binary files /dev/null and b/grafice/renunt_sus.bmp differ diff --git a/grafice/save_sus.bmp b/grafice/save_sus.bmp new file mode 100644 index 0000000..8a18aba Binary files /dev/null and b/grafice/save_sus.bmp differ diff --git a/grafice/searchalb.bmp b/grafice/searchalb.bmp new file mode 100644 index 0000000..2a531bc Binary files /dev/null and b/grafice/searchalb.bmp differ diff --git a/grafice/sterg_sus.bmp b/grafice/sterg_sus.bmp new file mode 100644 index 0000000..828c209 Binary files /dev/null and b/grafice/sterg_sus.bmp differ diff --git a/grafice/sus1.bmp b/grafice/sus1.bmp new file mode 100644 index 0000000..69b38c1 Binary files /dev/null and b/grafice/sus1.bmp differ diff --git a/grafice/terminat_jos.bmp b/grafice/terminat_jos.bmp new file mode 100644 index 0000000..400e728 Binary files /dev/null and b/grafice/terminat_jos.bmp differ diff --git a/grafice/terminat_sus.bmp b/grafice/terminat_sus.bmp new file mode 100644 index 0000000..dacc04a Binary files /dev/null and b/grafice/terminat_sus.bmp differ diff --git a/grafice/up.bmp b/grafice/up.bmp new file mode 100644 index 0000000..ecab466 Binary files /dev/null and b/grafice/up.bmp differ diff --git a/grafice/urmator1.bmp b/grafice/urmator1.bmp new file mode 100644 index 0000000..3afae03 Binary files /dev/null and b/grafice/urmator1.bmp differ diff --git a/grafice/verificare1.bmp b/grafice/verificare1.bmp new file mode 100644 index 0000000..20445e0 Binary files /dev/null and b/grafice/verificare1.bmp differ diff --git a/meniuri/MENIU.MPR b/meniuri/MENIU.MPR new file mode 100644 index 0000000..5464be9 --- /dev/null +++ b/meniuri/MENIU.MPR @@ -0,0 +1,170 @@ +* ********************************************************* +* * +* * 29/04/2021 MENIU.MPR 12:46:44 +* * +* ********************************************************* +* * +* * Author's Name +* * +* * Copyright (C) 2021 Company Name +* * Address +* * City, Zip +* * +* * Description: +* * This PROGRAM was automatically generated BY GENMENU. +* * +* ********************************************************* + + +* ********************************************************* +* * +* * Menu Definition +* * +* ********************************************************* +* + +SET SYSMENU TO +SET SYSMENU AUTOMATIC + +DEFINE PAD _61e0re26v OF _MSYSMENU PROMPT "Utile" COLOR SCHEME 3 ; + KEY ALT+U, "" +DEFINE PAD _61e0re26w OF _MSYSMENU PROMPT "Tasks" COLOR SCHEME 3 ; + KEY ALT+T, "" +DEFINE PAD _61e0re26x OF _MSYSMENU PROMPT "Lucrari" COLOR SCHEME 3 ; + KEY ALT+L, "" +DEFINE PAD _61e0re26y OF _MSYSMENU PROMPT "\ + + Noutati + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + +
+ + + + + +
+ + + + +
+
+
+ +
+
+
+
Top Slogan
+
+
+
+ Bottom Slogan
+
+ + + +
+
+ + +
+ + + + +
+
+ +
+ Noutati
+ +
+

 

+ + + + + + + + +
+ <%= ALLTRIM(NVL(nume_program, '')) %> v <%= ALLTRIM(NVL(versiune,'')) %> - <%= ALLTRIM(DTOC(TTOD(NVL(datal, {//::})))) %> +
+
+<%= IIF(!ISNULL(titlu), ALLTRIM(titlu) + ' - ', '') + ALLTRIM(STRTRAN(explicatie_client, CHR(13) + CHR(10), '
')) %> +
+
+

 

+
+ +
+
+
+
 
+
+ + + + + + \ No newline at end of file diff --git a/noutati-template.html b/noutati-template.html new file mode 100644 index 0000000..3511331 --- /dev/null +++ b/noutati-template.html @@ -0,0 +1,211 @@ + + + Noutati + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + +
+ + + + + +
+ + + + +
+
+
+ +
+
+
+
Top Slogan
+
+
+
+ Bottom Slogan
+
+ + + +
+
+ + +
+ + + + +
+
+ +
+ Noutati
+ +
+

 

+

+

 

+
+ +
+
+
+
 
+
+ + + + + + \ No newline at end of file diff --git a/programe/actualizare_roa.prg b/programe/actualizare_roa.prg new file mode 100644 index 0000000..f712f8d --- /dev/null +++ b/programe/actualizare_roa.prg @@ -0,0 +1,140 @@ +Local lcDir, lcSchema , lcsql , lcsql1 +lcSchema = "" +lcDir = "" +lcSql = "" +lcActualizare = "" +lcDir = ReadINI(goApp.cIniFile, "folder", "script_folder") +lcSchema = goApp.cUserName +If Empty(lcDir) Or !Directory(lcDir) + lcDir = Getdir("d:\contafin_oracle\comun\scripturi\","Alegeti directorul cu scripturile","Director scripturi") + If Empty(lcDir) + Return + Endif + WriteINI(goApp.cIniFile, "folder", "script_folder", lcDir) +Endif +lcDir = ADDBS(m.lcDir) +* 09.07.2020 +* Nu mai criptez scripturile, deci o sa iau scripturile din SCRIPTURI_CLAR, in loc de directorul SCRIPTURI +lcDir = STRTRAN(m.lcDir, '\SCRIPTURI\', '\SCRIPTURI_CLAR\',1,1,1) + +Cd (lcDir) + +*** cursor crsScripturiMasa cu scripturi pe care doresc sa le execut +CREATE CURSOR crsScripturiMasa (script c(250), Data D, tip c(100), seq N(5), dataseq c(20), ; + ales L, aplicat N(1), rec N(5), filename c(250), aplicat2 N(1), server c(100), schema c(100)) + +*** cursor crsScripturi cu scripturile fizice - pentru generarea xml cu scripturi de aplicat pe scheme +Create Cursor crsScripturi (script c(250), Data D, tip c(100), seq N(5), dataseq c(20), ; + ales L, aplicat N(1), rec N(5), filename c(250), aplicat2 N(1), server c(100), schema c(100)) + +Wait Window 'xdir' Nowait + + +loList = Newobject("fileslist","xrecurse.prg") +loList.FileExtensions = 'sql' +loList.Recurse(lcDir) + +If Reccount('dirlist')=0 + Use + Return +Endif + + +Wait Window 'insert into crsScripturi' Nowait +Select dirlist +Scan + lcFileName = Addbs(Alltrim(DIRNAME)) + Alltrim(filename) + lcScript = Upper(Alltrim(filename)) + lcScript = Strtran(lcScript, 'SCRIPT_', '') + + lnPos1 = At("_", lcScript, 1) + lnPos2 = At("_", lcScript, 2) + lnPos3 = At("_", lcScript, 3) + lnPos4 = At("_", lcScript, 4) + lnPos5 = At("_", lcScript, 5) + lnPos6 = At("_", lcScript, 5) + + lnPosp = At(".", lcScript, 1) + + lnOccurs = Occurs('_', lcScript) + + If lnOccurs = 4 + lcAn = Substr(lcScript,lnPos1 + 1, 4) + lcLuna = Substr(lcScript,lnPos2 + 1, 2) + lcZi = Substr(lcScript,lnPos3 + 1, lnPos4 - lnPos3 - 1) + lcSeq = Substr(lcScript,lnPos4 + 1, lnPosp - lnPos4 - 1) + + + lcTip = "" + Else + lcAn = Substr(lcScript,lnPos1 + 1, 4) + lcLuna = Substr(lcScript,lnPos2 + 1, 2) + lcZi = Substr(lcScript,lnPos3 + 1, lnPos4 - lnPos3 - 1) + lcSeq = Substr(lcScript,lnPos4 + 1, lnPos5 - lnPos4 - 1) + lcTip = Substr(lcScript,lnPos5 + 1, lnPosp - lnPos5 - 1) + + Endif + + lcScript = Lower(lcScript) + lnSeq = Round(Val(lcSeq),0) + lcDataSeq = Padl(lcAn,4,'0') + '_' + Padl(lcLuna,2,'0') + '_' + Padl(lcZi,2,'0') + '_' + Padl(lcSeq,2,'0') + + lnAn = Val(lcAn) + lnLuna = Val(lcLuna) + lnZi = Val(lcZi) + + + If lnAn < 2000 Or lnAn > 2099 + lnAn = Year(Date()) + Endif + If !Between(lnLuna,1,12) + lnLuna = Month(Date()) + Endif + If !Between(lnZi, 1, 31) + lnZi = 1 + Endif + + ldData = Date(lnAn, lnLuna, lnZi) + *** nu mai ma intereseaza scripturile mai vechi de 2011 + if year(m.ldData) < 2011 + loop + endif + + Insert Into crsScripturi (script, Data, seq, dataseq, tip, filename, server, schema ) ; + Values (Upper(lcScript), ldData, lnSeq, lcDataSeq, lcTip, lcFileName, server, schema) +ENDSCAN + + +lcSql = [select 0 as ales, id, customer_id, customer_name, dsn, server, schema, parola ] + ; + [from UPD_VSCHEME order by customer_name, server, schema] + +use in (select('crsScheme')) +lnSucces = goExecutor.oExecute(lcSql, 'crsScheme') +If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16, 'Eroare') +Endif + + +Use In (SELECT("dirlist")) + + +Select crsScripturi + +Index On LEFT(script,100) Tag scriptName +Set Order To scriptName Descending + +Select crsScripturi +Go Top + + +SELECT crsScheme +GO top +loFrmExecute = Createobject("frm_actualizare_roa") +*!* loFrmExecute.cDirScripturi = lcDir +*!* loFrmExecute.grdScripturi.SetAll("DynamicBackColor","iif(aplicat = 0, IIF(aplicat2=1,RGB(255,200,200),RGB(255,255,225)), RGB(255,255,255))", "Column") +loFrmExecute.Show(1) + +use in (select('crsScheme')) +Use In (select('dirlist')) +Use In (select('crsScripturi')) + diff --git a/programe/conectare.prg b/programe/conectare.prg new file mode 100644 index 0000000..8fba2fd --- /dev/null +++ b/programe/conectare.prg @@ -0,0 +1,22 @@ +* Test conectare +x=CREATE('conectare') +DEFINE CLASS Conectare AS Conectare +PROCEDURE INIT + DODEFAULT() +IF !FILE(lcIniFile) + SET TEXTMERGE ON TO MEMVAR lcTextIni + ENDIF +\[connection] +\host=ROA_ROMFAST2 +\username=test +\password=123 + SET TEXTMERGE TO + STRTOFILE(lcTextIni, lcIniFile) + + ENDPROC + +ENDDEFINE + + + + \ No newline at end of file diff --git a/programe/execute_script.prg b/programe/execute_script.prg new file mode 100644 index 0000000..90bfa08 --- /dev/null +++ b/programe/execute_script.prg @@ -0,0 +1,157 @@ +*!* EXECUTE_SCRIPT +LOCAL lcDir, lcSchema +lcSchema = "" +lcDir = "" + +lcDir = ReadINI(goApp.cIniFile, "folder", "script_folder") +lcSchema = goApp.cUserName +IF EMPTY(lcDir) OR !DIRECTORY(lcDir) + lcDir = GETDIR("d:\contafin_oracle\comun\scripturi\","Alegeti directorul cu scripturile","Director scripturi") + IF EMPTY(lcDir) + RETURN + ENDIF + WriteINI(goApp.cIniFile, "folder", "script_folder", lcDir) +ENDIF + +CD (lcDir) + +CREATE CURSOR crsScripturi (script c(100), DATA D, tip c(20), seq N(5), dataseq c(20), ales L, aplicat N(1), rec N(5), filename c(100), aplicat2 n(1)) +IF UPPER(ALLTRIM(lcSchema)) = "CONTAFIN_ORACLE" + lnFiles = ADIR(laScripts, 'co_*.sql') +ELSE + lnFiles = ADIR(laScripts, 'ff_*.sql') +ENDIF + +FOR i = 1 TO lnFiles + lcFileName = laScripts(i,1) + lcScript = UPPER(laScripts(i,1)) + lcScript = STRTRAN(lcScript, 'SCRIPT_', '') + + lnPos1 = AT("_", lcScript, 1) + lnPos2 = AT("_", lcScript, 2) + lnPos3 = AT("_", lcScript, 3) + lnPos4 = AT("_", lcScript, 4) + lnPos5 = AT("_", lcScript, 5) + lnPos6 = AT("_", lcScript, 5) + lnPosp = AT(".", lcScript, 1) + + *!* ff_2006_04_04_01_COMUN_CONTABILITATE.sql + *!* cf_2006_02_22_1.sql + lnOccurs = OCCURS('_', lcScript) + + IF lnOccurs = 4 + lcAn = SUBSTR(lcScript,lnPos1 + 1, 4) + lcLuna = SUBSTR(lcScript,lnPos2 + 1, 2) + lcZi = SUBSTR(lcScript,lnPos3 + 1, lnPos4 - lnPos3 - 1) + lcSeq = SUBSTR(lcScript,lnPos4 + 1, lnPosp - lnPos4 - 1) + lcTip = "" + ELSE + lcAn = SUBSTR(lcScript,lnPos1 + 1, 4) + lcLuna = SUBSTR(lcScript,lnPos2 + 1, 2) + lcZi = SUBSTR(lcScript,lnPos3 + 1, lnPos4 - lnPos3 - 1) + lcSeq = SUBSTR(lcScript,lnPos4 + 1, lnPos5 - lnPos4 - 1) + lcTip = SUBSTR(lcScript,lnPos5 + 1, lnPosp - lnPos5 - 1) + ENDIF + + lcScript = LOWER(lcScript) + lnSeq = ROUND(VAL(lcSeq),0) + lcDataSeq = PADL(lcAn,4,'0') + '_' + PADL(lcLuna,2,'0') + '_' + PADL(lcZi,2,'0') + '_' + PADL(lcSeq,2,'0') + + lnAn = VAL(lcAn) + lnLuna = VAL(lcLuna) + lnZi = VAL(lcZi) + + + IF lnAn < 2000 OR lnAn > 2099 + lnAn = YEAR(DATE()) + ENDIF + IF !BETWEEN(lnLuna,1,12) + lnLuna = MONTH(DATE()) + ENDIF + IF !BETWEEN(lnZi, 1, 31) + lnZi = 1 + ENDIF + + ldData = DATE(lnAn, lnLuna, lnZi) + + + INSERT INTO crsScripturi (script, DATA, seq, dataseq, tip, filename) VALUES (UPPER(lcScript), ldData, lnSeq, lcDataSeq, lcTip, ADDBS(lcDir) + lcFileName) +ENDFOR + +SELECT crsScripturi +*INDEX ON DTOS(DATA) + PADL(seq,5,'0') TAG dataseq +*SET ORDER TO dataseq DESCENDING +INDEX ON script TAG scriptName +SET ORDER TO scriptName DESCENDING + +*lcSql = [select script_final as script, data_script as data, tip_script as tip, seq_script as seq, 0 as aplicat, 00000 as rec from versiune order by data_script desc, seq_script desc] +lcSql=[select distinct (case when UPPER(TRIM(script_final)) not like '%.SQL' ]+; + [then UPPER(TRIM(script_final))||'.SQL' else UPPER(TRIM(script_final)) end) ]+; + [as script, data_script as data, tip_script as tip, seq_script as seq, 0 as aplicat, 00000 as rec ] +; + [from versiune order by 1 desc] + +lnSucces = goExecutor.oExecute(lcSql, 'crsScripturiVersiune1') +IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') +ENDIF +IF lnSucces > 0 + + UPDATE crsScripturiVersiune1 SET script = SUBSTR(script,8) WHERE UPPER(LEFT(script,7)) = 'SCRIPT_' + SELECT * FROM crsScripturiVersiune1 WITH (BUFFERING = .T.) INTO CURSOR crsScripturiVersiune ORDER BY script DESC READWRITE + + + UPDATE crsScripturi SET aplicat = 1 ; + WHERE UPPER(ALLTRIM(script)) IN ; + (SELECT UPPER(ALLTRIM(script)) FROM crsScripturiVersiune) + UPDATE crsScripturi SET ales = .T. ; + WHERE aplicat = 0 + +*!* DESELECTEZ SCRIPTURILE NEAPLICATE CARE MAI AU CEL PUTIN UN SCRIPT DE ACELASI TIP APLICAT CU O DATA MAI MARE + + SELECT crsScripturi + SCAN FOR ales + lcScript = ALLTRIM(UPPER(script)) + lcTip = UPPER(ALLTRIM(GETWORDNUM(JUSTSTEM(script),6,'_'))) + SELECT COUNT(*) AS NR ; + FROM crsScripturi ; + WHERE aplicat = 1 AND ALLTRIM(UPPER(script)) > lcScript AND UPPER(ALLTRIM(GETWORDNUM(JUSTSTEM(script),6,'_'))) = lcTip ; + INTO CURSOR crsScripturiAplicate + IF _TALLY > 0 AND crsScripturiAplicate.nr > 0 + REPLACE aplicat2 WITH 1, ales WITH .F. IN crsScripturi + ENDIF + USE IN crsScripturiAplicate + SELECT crsScripturi + ENDSCAN + + SELECT crsScripturiVersiune + SCAN + lcScriptName = PADR(UPPER(ALLTRIM(script)),100," ") + IF SEEK(lcScriptName, 'crsScripturi', 'scriptName') + REPLACE rec WITH RECNO('crsScripturi') IN crsScripturiVersiune + REPLACE rec WITH RECNO('crsScripturiVersiune') IN crsScripturi + ENDIF + ENDSCAN + + SELECT crsScripturi + GO TOP + SELECT crsScripturiVersiune + GO TOP + + loFrmExecute = CREATEOBJECT("frm_exec_script") + loFrmExecute.cDirScripturi = lcDir + loFrmExecute.lbScripturiDirector.CAPTION = lcDir + loFrmExecute.grdScripturi.SETALL("DynamicBackColor","iif(aplicat = 0, IIF(aplicat2=1,RGB(255,200,200),RGB(255,255,225)), RGB(255,255,255))", "Column") + + *!* loFrmExecute.grdScripturiVersiune.SETALL("DynamicBackColor","iif(aplicat = 1, RGB(255,255,225), RGB(255,255,255))", "Column") + loFrmExecute.SHOW(1) + *!* DO FORM frm_exec_script NAME loFrmExecute LINKED +ENDIF + +USE IN crsScripturi +USE IN crsScripturiVersiune + +*!* PRIVATE poScripturi +*!* lcCursor = "crsScripturi" +*!* lcSelect = "" +*!* poScripturi = null +*!* gencursor('poScripturi',lccursor,tcselect,tcfiltru,tcschema,tcorder,.F.,'', llModParam ,lcFiltOriginal) diff --git a/programe/execute_script_xdir.prg b/programe/execute_script_xdir.prg new file mode 100644 index 0000000..d9ae53d --- /dev/null +++ b/programe/execute_script_xdir.prg @@ -0,0 +1,222 @@ +*!* EXECUTE_SCRIPT +Local lcDir, lcSchema +lcSchema = "" +lcDir = "" + +lcDir = ReadINI(goApp.cIniFile, "folder", "script_folder") +lcSchema = goApp.cUserName +If Empty(lcDir) Or !Directory(lcDir) + lcDir = Getdir("d:\contafin_oracle\comun\scripturi\","Alegeti directorul cu scripturile","Director scripturi") + If Empty(lcDir) + Return + Endif + WriteINI(goApp.cIniFile, "folder", "script_folder", lcDir) +Endif + +Cd (lcDir) +Create Cursor crsScripturi (script c(100), Data D, tip c(20), seq N(5), dataseq c(20), ales L, aplicat N(1), rec N(5), filename c(100), aplicat2 N(1)) + +Wait Window 'xdir' Nowait +*!* oFolder=CREATEOBJECT('files_list') && xdir.prg +*!* oFolder.prompt_completed=.F. &&Preview/Print without message +*!* oFolder.FileExtensions = 'sql' +*!* oFolder.IgnoreEmptyFolders= .T. +*!* oFolder.xScan(lcDir) + +loList = Newobject("fileslist","xrecurse.prg") +loList.FileExtensions = 'sql' +loList.Recurse(lcDir) + +If Reccount('dirlist')=0 + Use + Return +Endif + +lcPrefixScript = ReadINI(goApp.cIniFile, "script", Alltrim(lcSchema)) && CO_, RF_, SYS_, JCS_ +lcPrefixScript = Upper(Nvl(lcPrefixScript,'')) +If Empty(lcPrefixScript) + lcPrefixScript = ReadINI(goApp.cIniFile, "script", 'SCHEMAROA') && FF_ +Endif +lcPrefixScript = Upper(Nvl(lcPrefixScript,'')) +If !Empty(lcPrefixScript) + Select dirlist + Set Filter To Like(lcPrefixScript + '*', Upper(filename)) +Else + Do Case + Case Upper(Alltrim(lcSchema)) = "CONTAFIN_ORACLE" + Select dirlist + Set Filter To Like('CO_*', Upper(filename)) + Case Upper(Alltrim(lcSchema)) = "SYS" + Select dirlist + Set Filter To Like('SYS_*', Upper(filename)) + Otherwise + Select dirlist + Set Filter To !(Like('CO_*', Upper(filename)) Or Like('SYS_*', Upper(filename))) + + Endcase +Endif + +*!* IF UPPER(ALLTRIM(lcSchema)) = "CONTAFIN_ORACLE" +*!* lnFiles = ADIR(laScripts, 'co_*.sql') +*!* ELSE +*!* lnFiles = ADIR(laScripts, 'ff_*.sql') +*!* ENDIF + +Wait Window 'insert into crsScripturi' Nowait +Select dirlist +Scan + +*!* FOR i = 1 TO lnFiles +*!* lcFileName = laScripts(i,1) + lcFileName = Addbs(Alltrim(DIRNAME)) + Alltrim(filename) + lcScript = Upper(Alltrim(filename)) + lcScript = Strtran(lcScript, 'SCRIPT_', '') + + lnPos1 = At("_", lcScript, 1) + lnPos2 = At("_", lcScript, 2) + lnPos3 = At("_", lcScript, 3) + lnPos4 = At("_", lcScript, 4) + lnPos5 = At("_", lcScript, 5) + lnPos6 = At("_", lcScript, 5) + + lnPosp = At(".", lcScript, 1) + + + +*!* ff_2006_04_04_01_COMUN_CONTABILITATE.sql +*!* cf_2006_02_22_1.sql + lnOccurs = Occurs('_', lcScript) + + If lnOccurs = 4 + lcAn = Substr(lcScript,lnPos1 + 1, 4) + lcLuna = Substr(lcScript,lnPos2 + 1, 2) + lcZi = Substr(lcScript,lnPos3 + 1, lnPos4 - lnPos3 - 1) + lcSeq = Substr(lcScript,lnPos4 + 1, lnPosp - lnPos4 - 1) + + + lcTip = "" + Else + lcAn = Substr(lcScript,lnPos1 + 1, 4) + lcLuna = Substr(lcScript,lnPos2 + 1, 2) + lcZi = Substr(lcScript,lnPos3 + 1, lnPos4 - lnPos3 - 1) + lcSeq = Substr(lcScript,lnPos4 + 1, lnPos5 - lnPos4 - 1) + lcTip = Substr(lcScript,lnPos5 + 1, lnPosp - lnPos5 - 1) + + Endif + + lcScript = Lower(lcScript) + lnSeq = Round(Val(lcSeq),0) + lcDataSeq = Padl(lcAn,4,'0') + '_' + Padl(lcLuna,2,'0') + '_' + Padl(lcZi,2,'0') + '_' + Padl(lcSeq,2,'0') + + lnAn = Val(lcAn) + lnLuna = Val(lcLuna) + lnZi = Val(lcZi) + + + If lnAn < 2000 Or lnAn > 2099 + lnAn = Year(Date()) + Endif + If !Between(lnLuna,1,12) + lnLuna = Month(Date()) + Endif + If !Between(lnZi, 1, 31) + lnZi = 1 + Endif + + ldData = Date(lnAn, lnLuna, lnZi) + + + Insert Into crsScripturi (script, Data, seq, dataseq, tip, filename) Values (Upper(lcScript), ldData, lnSeq, lcDataSeq, lcTip, lcFileName) + +*!* ENDFOR +Endscan +Use In dirlist + + + +Select crsScripturi +*INDEX ON DTOS(DATA) + PADL(seq,5,'0') TAG dataseq +*SET ORDER TO dataseq DESCENDING +Index On script Tag scriptName +Set Order To scriptName Descending + +*!* WAIT WINDOW 'select from versiune' NOWAIT +*!* *lcSql = [select script_final as script, data_script as data, tip_script as tip, seq_script as seq, 0 as aplicat, 00000 as rec from versiune order by data_script desc, seq_script desc] +*!* lcSql=[select distinct (case when UPPER(TRIM(script_final)) not like '%.SQL' ]+; +*!* [then UPPER(TRIM(script_final))||'.SQL' else UPPER(TRIM(script_final)) end) ]+; +*!* [as script, data_script as data, tip_script as tip, seq_script as seq, 0 as aplicat, 00000 as rec ] +; +*!* [from versiune order by 1 desc] + +*!* lnSucces = goExecutor.oExecute(lcSql, 'crsScripturiVersiune1') +*!* IF lnSucces < 0 +*!* MESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') +*!* ENDIF + + +*!* IF lnSucces > 0 +*!* WAIT WINDOW 'update aplicat' NOWAIT +*!* UPDATE crsScripturiVersiune1 SET script = SUBSTR(script,8) WHERE UPPER(LEFT(script,7)) = 'SCRIPT_' +*!* SELECT * FROM crsScripturiVersiune1 WITH (BUFFERING = .T.) INTO CURSOR crsScripturiVersiune ORDER BY script DESC READWRITE + + +*!* UPDATE crsScripturi SET aplicat = 1 ; +*!* WHERE UPPER(ALLTRIM(script)) IN ; +*!* (SELECT UPPER(ALLTRIM(script)) FROM crsScripturiVersiune) +*!* UPDATE crsScripturi SET ales = .T. ; +*!* WHERE aplicat = 0 + +*!* *!* DESELECTEZ SCRIPTURILE NEAPLICATE CARE MAI AU CEL PUTIN UN SCRIPT DE ACELASI TIP APLICAT CU O DATA MAI MARE +*!* WAIT WINDOW 'update aplicat roz' NOWAIT +*!* SELECT crsScripturi +*!* SCAN FOR ales +*!* lcScript = ALLTRIM(UPPER(script)) +*!* lcTip = UPPER(ALLTRIM(GETWORDNUM(JUSTSTEM(script),6,'_'))) +*!* SELECT COUNT(*) AS NR ; +*!* FROM crsScripturi ; +*!* WHERE aplicat = 1 AND ALLTRIM(UPPER(script)) > lcScript AND UPPER(ALLTRIM(GETWORDNUM(JUSTSTEM(script),6,'_'))) = lcTip ; +*!* INTO CURSOR crsScripturiAplicate +*!* IF _TALLY > 0 AND crsScripturiAplicate.NR > 0 +*!* REPLACE aplicat2 WITH 1, ales WITH .F. IN crsScripturi +*!* ENDIF +*!* USE IN crsScripturiAplicate +*!* SELECT crsScripturi +*!* ENDSCAN + +*!* SELECT crsScripturiVersiune +*!* SCAN +*!* lcScriptName = PADR(UPPER(ALLTRIM(script)),100," ") +*!* IF SEEK(lcScriptName, 'crsScripturi', 'scriptName') +*!* REPLACE rec WITH RECNO('crsScripturi') IN crsScripturiVersiune +*!* REPLACE rec WITH RECNO('crsScripturiVersiune') IN crsScripturi +*!* ENDIF +*!* ENDSCAN + +*!* SELECT crsScripturi +*!* GO TOP +*!* SELECT crsScripturiVersiune +*!* GO TOP +Select crsScripturi +Go Top +loFrmExecute = Createobject("frm_exec_script") +loFrmExecute.cDirScripturi = lcDir +*!* loFrmExecute.lbScripturiDirector.CAPTION = lcDir +loFrmExecute.grdScripturi.SetAll("DynamicBackColor","iif(aplicat = 0, IIF(aplicat2=1,RGB(255,200,200),RGB(255,255,225)), RGB(255,255,255))", "Column") + +*!* loFrmExecute.grdScripturiVersiune.SETALL("DynamicBackColor","iif(aplicat = 1, RGB(255,255,225), RGB(255,255,255))", "Column") +loFrmExecute.Show(1) +*!* DO FORM frm_exec_script NAME loFrmExecute LINKED +*!* ENDIF +If Used('dirlist') + Use In dirlist +Endif +If Used('crsScripturi') + Use In crsScripturi +Endif + +*!* USE IN crsScripturiVersiune + +*!* PRIVATE poScripturi +*!* lcCursor = "crsScripturi" +*!* lcSelect = "" +*!* poScripturi = null +*!* gencursor('poScripturi',lccursor,tcselect,tcfiltru,tcschema,tcorder,.F.,'', llModParam ,lcFiltOriginal) diff --git a/programe/generare_script.prg b/programe/generare_script.prg new file mode 100644 index 0000000..9c50904 --- /dev/null +++ b/programe/generare_script.prg @@ -0,0 +1,2 @@ +loFrmGen = Createobject("frm_generare_script") +loFrmGen.Show(1) \ No newline at end of file diff --git a/programe/genereazaxml_original.txt b/programe/genereazaxml_original.txt new file mode 100644 index 0000000..ab28e7b --- /dev/null +++ b/programe/genereazaxml_original.txt @@ -0,0 +1,137 @@ +#Define crlf Chr(13) + Chr(10) + +Local lcSql, lcfile, cVersiune, lcClipText, lcSir, lcFisier, lcDir, lcFisVersDif, ; + lcfileVersiuniMax, lnsucces, lnCustomerId + +lnCustomerId = crs2xml.id + + +lcClipText = [] +lcSir = [] +lcFisier = [] +lcDir = [] +lcFisVersDif = [] +x = SQLConnect("JCSSERVER","SOFT_SERII","123") +If x < 0 + Return +Endif + +lcSql = [select DISTINCT customer_id, NUME, ID_PROGRAM, (CASE WHEN Upper(PROGRAM) ] + ; + [LIKE 'INDEX%' THEN 'MANUAL' ELSE PROGRAM END) AS PROGRAM from vgen_programe ] + ; + [where customer_id = ] + Alltrim(Str(crs2xml.id)) +lnsucces = SQLExec(x, lcSql, "crsProgsTemp1") +If lnsucces < 0 + Return +Endif +SQLDisconnect(x) +*!* selectie combobox - un client, programele cu licenta pentru client +executaSql([select 0 as ales, v.customer, v.program, v.versiune, v.versiune_maxima, ]+ ; + [v.id, v.customer_id from vsc_versiune_max_inst_dv v ] + ; + [where v.customer_id = ] + Alltrim(Str(crs2xml.id)), "crsprogstemp2", .T.) +*!* selectie combobox - un client, programele cu licenta pentru client ^ +executasql([select * from programs], "crsPrograms", .t.) +executasql([select * from sc_versiune_programe], "crsVersProg", .t.) + +Select a.nume As customer, a.Program, b.versiune, b.versiune_maxima, a.customer_id, a.id_program ; + From crsprogstemp2 b ; + INNER Join crsProgsTemp1 a On a.customer_id = b.customer_id And b.Id = a.id_program ; + ORDER By 2 ; + INTO Cursor crsXmlOut + +*SELECT c.customer, c.program, c.versiune, c.customer_id FROM crsprogstemp2 c ; + JOIN crsprograms p ON p.id = c.id ORDER BY 2 ; + WHERE !EMPTY(NVL(c.versiune,[])) ; + INTO CURSOR crsProgLic + +lcClipText = lcClipText + Alltrim(customer) + crlf + "VERSIUNI EXISTENTE: " +lcVersiune = "" +Set Textmerge On To Memvar lcVersiune Noshow +Set Textmerge Delimiters To '{{', '}}' + \ + +Select crsXmlOut +*SELECT crsProgLic +Scan For customer_id = lnCustomerId + \<{{Alltrim(PROGRAM)}}> + \ + \{{Alltrim(VERSIUNE)}} + \{{'\_ARHIVE\' + Alltrim(PROGRAM) + '\' + Alltrim(PROGRAM) + '-' + Alltrim(VERSIUNE) + '.EXE'}} + \S-a gasit {{Alltrim(PROGRAM)}} versiunea {{Alltrim(VERSIUNE)}}. Programul va incepe procedurile de actualizare ! + \ + \ + + lcClipText = lcClipText + Alltrim(Program) + '-' + Alltrim(versiune) + ', ' +Endscan +Set Textmerge To +lcfile = Putfile("Alegeti calea",Upper(Alltrim(crs2xml.Name)) + '.xml',"xml") +Strtofile(lcVersiune,lcfile) +If Messagebox("Doriti sa generati XML Aplicatii diferenta",4) = 6 + + Select Distinct c.Program, c.versiune, c.versiune_maxima, c.id_program, c.customer_id , ; + '\_ARHIVE\' + Alltrim(c.Program) + '\' + Alltrim(c.Program) + '-' + ; + Alltrim(c.versiune_maxima) + '.EXE' As fisier ; + FROM crsXmlOut c INNER Join porec p On p.customer_id = c.customer_id ; + WHERE NVL(c.versiune,[]) <> NVL(c.versiune_maxima,[]) ; + INTO Cursor crsVersiuniDiferiteTemp + SELECT program , versiune_maxima as versiune, id_program, customer_id, fisier ; + FROM crsVersiuniDiferiteTemp INTO CURSOR crsVersiuniDiferite + + *!* Cursor cu ultimele Versiuni + + lcFisier = Addbs(Upper(Alltrim(crs2xml.Name))) + lcDir = Addbs(Justpath(lcfile)) + "ACTUALIZARIAPLICATII\" + lcFisier + If Not Directory(lcDir) + Md(lcDir) + Endif + lcFisVersDif = lcDir + "Aplicatii_" + Alltrim(crs2xml.Name) + ".XML" + Cursortoxml("crsVersiunidiferite",lcFisVersDif,1,512,0,"1") + + *!* Cursor cu Versiuni diferite ^ + lcClipText = lcClipText + crlf + 'VERSIUNI DIFERITE: ' + + Select crsVersiuniDiferite + Scan + lcClipText = lcClipText + Alltrim(Program) + '-' + Alltrim(versiune) + ', ' + Endscan + + + *!* versiunea maxima a programelor instalate la client + executaSql([select * from sc_versiune_programe], [crsVmax],.T.) + Select c1.Program, c1.nume, cv.versiune_curenta As versiune From crsProgsTemp1 c1 ; + JOIN crsvmax cv On c1.id_program = cv.id_program ; + WHERE c1.customer_id = crs2xml.id ; &&porec.cust_id + order By 1; + into Cursor crsVersiuniMax + Set Textmerge On To Memvar lcVersiune Noshow + Select crsVersiuniMax + Scan + \<{{Alltrim(PROGRAM)}}> + \ + \{{Alltrim(VERSIUNE)}} + \{{'\_ARHIVE\' + Alltrim(PROGRAM) + '\' + Alltrim(PROGRAM) + '-' + Alltrim(VERSIUNE) + '.EXE'}} + \S-a gasit {{Alltrim(PROGRAM)}} versiunea {{Alltrim(VERSIUNE)}}. Programul va incepe procedurile de actualizare ! + \ + \ + Endscan + + Set Textmerge To + lcfileVersiuniMax = Addbs(Justpath(lcFisVersDif)) + Upper(Alltrim(crs2xml.Name)) + '.xml' + Strtofile(lcVersiune,lcfileVersiuniMax ) + * Cursor cu ultimele Versiuni ^ + + Use In (Select("crsProgLic")) + Use In (Select("crsprograms")) + Use In (Select("crsVersiuniDiferite")) + Use In (Select("crsVersiuniDiferiteTemp")) + Use In (Select("crsProgsTemp1")) + Use In (Select("crsProgsTemp2")) + Use In (Select("crsVmax")) + Use In (Select("crsVersiuniMax")) + Use In (Select("crsxmlout")) + Use In (Select("crsVersProg")) + + _Cliptext = Nvl(lcClipText,[]) + +Endif + +thisform.release() \ No newline at end of file diff --git a/programe/htmlmerge.prg b/programe/htmlmerge.prg new file mode 100644 index 0000000..3199fa4 --- /dev/null +++ b/programe/htmlmerge.prg @@ -0,0 +1,287 @@ +* Program....: HtmlMerge.prg +* Version....: 1.1 +* Author.....: Maurice de Beijer +* Date.......: September 1, 1999 +* Notice.....: Copyright (c) 1999-2000 ABL, All Rights Reserved. +* Compiler...: Visual FoxPro 06.00.8492.00 for Windows +* Abstract...: Merge a HTML template with the current cursor +* Changes....: +* Useage.....: +* +* SELECT *, ; +* '' + eng_name + '' AS Link ; +* FROM (ADDBS(_SAMPLES) + 'Data\Products') ; +* WHERE !Discontinu ; +* ORDER BY Eng_Name ; +* INTO CURSOR cProd NOFILTER +* * Create the HTML merge object +* loHTML = NewObject('HTMLMerge', 'HTMLMerge.prg') +* * Read the first template +* lcText = FILETOSTR('Template_1.htm') +* * Merge it with the cursor of products +* loHTML.ScanMerge(lcText) +* * Save the result as Demo_1.htm +* STRTOFILE(loHTML.cHTML, 'demo_1.htm') +* +* Note.......: +* +* May 17, 2000 +* Add the check for NoScan atributes. +* If a table or list containes a NoScan attribute this will be ignored when determining the table/list to scan. +* This is usefull when you use a table to format a page header and use a second table below this which +* you want to scan. To use it just add a NoScan attribute to any table/list above the table/list you want to +* use in the scan loop. + + +******************************** +DEFINE CLASS HTMLMerge AS Custom +******************************** + +* The final HTML Text +cHTML = '' + + +******************************* +PROCEDURE ScanMerge(tcTemplate) +******************************* +* Look for the first table or list in the template +* The first item is merged with every line in the current cursor +LOCAL lnTable, lnList, lnFirst + +lnTable = THIS.GetScanTagPos(' 0 + * Table found, first do the header + lcText = LEFT(lcTemplate, lnAtPos - 1) + lcTemplate = SUBSTR(lcTemplate, lnAtPos) + THIS.Merge(lcText) + + * Extract the whole table part stopping just + * before the end table marker + lnAtPos = ATCC('', lcTemplate) + lcTable = LEFT(lcTemplate, lnAtPos - 1) + lcTemplate = SUBSTR(lcTemplate, lnAtPos) + + lnAtPos = ATCC(' 0 + * Take care of the starting tag + lcText = LEFT(lcTable, lnAtPos - 1) + lcTable = SUBSTR(lcTable, lnAtPos) + THIS.Merge(lcText) + ENDIF + + DO WHILE ATCC(' 0 + * Extract the headers and merger them + lnAtPos = ATCC('', lcTable) + lcText = LEFT(lcTable, lnAtPos + 5) + lcTable = SUBSTR(lcTable, lnAtPos + 5) + THIS.Merge(lcText) + ENDDO + + SCAN + * Merge the remainig body of the table for each record + THIS.Merge(lcTable) + ENDSCAN +ENDIF + +* Expand the remainder of the template +THIS.Merge(lcTemplate) + +RETURN THIS.cHTML + + +******************************************* +PROCEDURE MergeList(tcTemplate, tnStartPos) +******************************************* +LOCAL lcTemplate, lnAtPos, lcTable, lcText +lcTemplate = tcTemplate +IF VARTYPE(tcStartPos) = 'N' + * Start position laready known + lnAtPos = tnStartPos +ELSE + * Start position not known yet, find it + lnAtPos = THIS.GetScanTagPos(' 0 + * Table found, first do the header + lcText = LEFT(lcTemplate, lnAtPos - 1) + lcTemplate = SUBSTR(lcTemplate, lnAtPos) + THIS.Merge(lcText) + + * Extract the whole table part + lnAtPos = ATCC('', lcTemplate) + IF lnAtPos = 0 + lnAtPos = ATCC('', lcTemplate) + ENDIF + lcTable = LEFT(lcTemplate, lnAtPos - 1) + lcTemplate = SUBSTR(lcTemplate, lnAtPos) + + lnAtPos = ATCC(' 0 + * Take care of the
tag + lcText = LEFT(lcTable, lnAtPos - 1) + lcTable = SUBSTR(lcTable, lnAtPos) + THIS.Merge(lcText) + ENDIF + + SCAN + * Merge the body for each record + THIS.Merge(lcTable) + ENDSCAN +ENDIF + +* Expand the remainder of the template +THIS.Merge(lcTemplate) + +RETURN THIS.cHTML + + +************************* +PROCEDURE Write(tcString) +************************* +* Add a string to the output + +THIS.cHTML = THIS.cHTML + TRANSFORM(tcString) + +RETURN + +************************* +PROCEDURE WriteLine(tcString) +************************* +* Add a string and new line to the output + +* Write the line +THIS.Write(tcString) +* Write the cariage return +THIS.Write(CHR(13)+CHR(10)) + +RETURN + + +***************** +PROCEDURE Clear() +***************** +* Clear all output + +THIS.cHTML = '' + +RETURN + + +*********************** +PROCEDURE Merge(tcText) +*********************** +* Merge a template with the embedded Visual FoxPro expressions +LOCAL lcText, lnAtPos1, lnAtPos2, lcEval, lcValue +lcText = tcText +lcText = STRTRAN(lcText, '<%', '<%') +lcText = STRTRAN(lcText, '%>', '%>') + +* Loop while another expression is found +DO WHILE ATCC('<%=', lcText) > 0 + * Get the start and end position of the next expression + lnAtPos1 = ATCC('<%=', lcText) + lnAtPos2 = ATCC('%>', lcText) + + * Extract the next expression + lcEval = SUBSTR(lcText, lnAtPos1 + 3, lnAtPos2 - lnAtPos1 - 3) + * Remove any cariage returns from the expression as they could be inserted by an HTML editor + lcEval = CHRTRAN(lcEval, CHR(13) + CHR(10), '') + + * Evaluate it + lcValue = TRANSFORM(EVALUATE(lcEval)) + * Stuff the result back instead of the original expression + lcText = STUFFC(lcText, lnAtPos1, lnAtPos2 - lnAtPos1 + 2, lcValue) +ENDDO + +* Add it to the current HTML +THIS.Write(lcText) + +* Return the result +RETURN lcText + + +****************************************** +PROCEDURE GetScanTagPos(tcTag, tcTemplate) +****************************************** +* Find the required scan tag, ignore all tags containing a NoScan attribute +LOCAL lnResult, lnPos, lnAtPos1, lnAtPos2, lcTemp +lnResult = 0 +lnPos = 1 + +DO WHILE .T. + * Find the next position + lnAtPos1 = ATCC(tcTag, tcTemplate, lnPos) + IF lnAtPos1 > 0 + * Found another tag to test, extract the rest of the string + lcTemp = SUBSTR(tcTemplate, lnAtPos1) + * Find the end of the tag + lnAtPos2 = ATCC('>', lcTemp) + * And determine the complete tag + lcTemp = LEFT(lcTemp, lnAtPos2) + + * Check if we are to ignore this tag during the scan operation + IF ATCC('NoScan', lcTemp) = 0 + * No NoScan attribute on this tag, use it + lnResult = lnAtPos1 + EXIT + ELSE + * Try to find a next tag + lnPos = lnPos + 1 + ENDIF + ELSE + * Didn't find the required tag, stop + EXIT + ENDIF +ENDDO + + +RETURN lnResult + +ENDDEFINE diff --git a/programe/ini.prg b/programe/ini.prg new file mode 100644 index 0000000..c712cc1 --- /dev/null +++ b/programe/ini.prg @@ -0,0 +1,29 @@ +* WriteINI - Writes an item to an INI file, pretty straight forward * + +PROCEDURE WriteINI &&(cINIFile AS String, cTopic AS String, cItem AS String, cValue AS STRING) + LPARAMETERS cINIFile, cTopic, cItem, cValue + DECLARE INTEGER WritePrivateProfileString IN Win32API ; + STRING cTopic, ; + STRING cItem, ; + STRING cValue, ; + STRING cINIFile + WritePrivateProfileString(m.cTopic, m.cItem, m.cValue, m.cINIFile) +ENDPROC + +* ReadINI - Reads values from an INI file, pretty straight forward * + +FUNCTION ReadINI &&(cINIFile As String, cTopic AS String, cItem AS String) AS STRING + LPARAMETERS cINIFile, cTopic, cItem + DECLARE INTEGER GetPrivateProfileString IN Win32API ; + STRING cTopic, ; + STRING cItem, ; + STRING cDefault, ; + STRING cValueBuf, ; + INTEGER nValueBufSize, ; + STRING cINIFile + + PRIVATE cValue, nBuf + m.cValue = REPLICATE(CHR(0), 255) + m.nBuf = GetPrivateProfileString(m.cTopic, m.cItem, '', @cValue, 255, m.cINIFile) + RETURN LEFT(m.cValue, m.nBuf) +ENDFUNC diff --git a/programe/log_mesaje.prg b/programe/log_mesaje.prg new file mode 100644 index 0000000..7bdd7bc --- /dev/null +++ b/programe/log_mesaje.prg @@ -0,0 +1,84 @@ +Define Class log_mesaje As Relation + + cLogFile = "c:\log.txt" + lLogging = .F. + + && ------------------------------INCEPUT: Init ------------------------------ + *!* Procedura: Init + *!* Parametri: + *!* Data/Ora generarii: 20/02/2004 12:41:53 + *!* Autor: MARIUS.MUTU + Procedure Init + Lparameters tcLogFile, tlAdditive + + Local lLog, llAdditive, cLogFile + lLog = Iif(File(Addbs(Justpath(Sys(16, 0))) + "LOG.txt"), .T., .F.) && daca exista fisierul log + This.lLogging = lLog Or This.lLogging && creez log daca exista in directorul aplicatiei fisierul sau daca proprietatea lLogging = .T. + + If !This.lLogging + Return + Endif + + Set Console Off + Set Talk Off + + cLogFile = Iif(Empty(tcLogFile), Addbs(Justpath(Sys(16, 0))) + "LOG.txt", m.tcLogFile) + This.cLogFile = cLogFile + + If Parameters() < 2 + llAdditive = Iif(File(cLogFile), .T., .F.) + Else + llAdditive = tlAdditive + Endif + + If llAdditive + Set Textmerge On To (cLogFile) Additive + Else + Set Textmerge On To (cLogFile) + Endif + + + \<> <> <> + + Set Textmerge To + + + + Endproc + && ------------------------------SFARSIT: Init ------------------------------ + + && ------------------------------INCEPUT: Log ------------------------------ + *!* Procedura: Log + *!* Parametri: tcText + *!* Data/Ora generarii: 20/02/2004 12:48:57 + *!* Autor: MARIUS.MUTU + Procedure Log + Lparameters tcText, tcProgram + + If !This.lLogging + Return + Endif + + Local lcText, lcLogFile + + Set Console Off + Set Talk Off + + lcText = Iif(Empty(tcText), "", Alltrim(tcText)) + lcProgram = Iif(Empty(tcProgram), "", Alltrim(tcProgram)) + lcSpatiu = Space(10) + + lcLogFile = This.cLogFile + lcAddText = Ttoc(Datetime()) + " " + Sys(0) + Iif(Type('GCS') = 'C', " " + GCS, "") + Chr(13) + Chr(10) + ; + Iif(!Empty(lcProgram), lcSpatiu + lcProgram, "") + Iif(!Empty(lcText), lcSpatiu + lcText, "") + + Set Textmerge On To (lcLogFile) Additive + +\ <> + + Set Textmerge To + + Endproc + && ------------------------------SFARSIT: Log ------------------------------ + +Enddefine && log_mesaje \ No newline at end of file diff --git a/programe/main.prg b/programe/main.prg new file mode 100644 index 0000000..d9b88e3 --- /dev/null +++ b/programe/main.prg @@ -0,0 +1,545 @@ +Lparameters tcSilent, tcCommand +* tcSilent (optional): s (silentios) pentru rularea unei comenzi fara afisarea formularului +* tcCommand (optional): xml_roa_auto pentru generarea automata a xml-urilor ROA cu programe + +*!* 25.01.2011 +*!* marius.mutu +*!* settings.ini - hostserii, usernameserii, passwordserii +Local lcHost, lcHostSerii, lcPassword, lcPasswordSerii, lcText, lcUserName, lcUserNameSerii +Local lnSucces +Store "" To lcHost, lcHostSerii, lcPassword, lcPasswordSerii, lcText, lcUserName, lcUserNameSerii +lnSucces = 0 + +LOCAL llSilent, lcCommand +llSilent = IIF(PCOUNT() > 0, LOWER(tcSilent) = 's', .F.) +lcCommand = IIF(PCOUNT() > 1, LOWER(m.tcCommand), '') && xml_roa_auto + +*:Global gcProgrameChangeLogsFile +*!* IF TooManyInstances(1) &&Too many instance already running? +*!* QUIT +*!* ENDIF + +Set Talk Off +Set Deleted On +Set Century On +Set Date Dmy SHORT +Set Safety Off +Set Console Off +Set Seconds Off +Set Exclusive Off +Set Status Off +Set Status Bar Off +Set Hours To 24 +Set Exact On +Set Ansi On +_Screen.Caption = 'TASKS' +_Screen.WindowState= 2 +Set NullDisplay To "" +*!* ================================================================= +Public gnIdProgram, gnIdUtilizator, ; + gnIdClient, gbSpecial, gdData, gcAppName, gcAppPath, gcDataPath, gcTempPath, gnhandle, gcIcon +Local lcPath, liat + +gnhandle = -1 +gnIdUtilizator = 0 +gnIdProgram = 0 +gnIdClient = 0 +gbSpecial = .F. +gdData = Date() +gcAppPath = Addbs(Justpath(Sys(16,0))) +gcAppPath = Strtran(Upper(gcAppPath),"PROGRAME\","") +gcAppName = Juststem(Sys(16,0)) +Set Default To (gcAppPath) + +gcDataPath = Addbs(gcAppPath) + [clase\test.vcx] +Set Classlib To (gcDataPath) + +gcTempPath = Addbs(Sys(2023)) + +On Shutdown Shutdown() +On Error ErrorHandler(Error(),Program(),Lineno()) +Push Menu _Msysmenu + +*!* PROGRAME_CHANGELOGS +gcProgrameChangeLogsFile = gcAppPath + 'programe_changelogs.xml' +If !File(gcProgrameChangeLogsFile) + Create Cursor programe_changelogs (id_program i, Program v(100), changelog v(200)) +Else + Xmltocursor(gcProgrameChangeLogsFile,"programe_changelogs",512) +Endif +*!* PROGRAME_CHANGELOGS ^ + +Set Default To (gcAppPath) && generare script +lcPath = gcAppPath + ";" + ; + gcAppPath + "ferestre;" + ; + gcAppPath + "ferestre;" + ; + gcAppPath + "clase;" + ; + gcAppPath + "programe;" + ; + gcAppPath + "meniuri;" + ; + gcAppPath + "rapoarte;" + ; + gcAppPath + "grafice;" + ; + gcAppPath + "clase\GridExtras;" + +Set Path To (lcPath) Additive + +Set Procedure To proceduri.prg Additive && tasks, soft clienti +Set Procedure To proceduri_sql.prg Additive +Set Procedure To utile.prg Additive +Set Procedure To rapoarte.prg Additive +Set Procedure To htmlmerge.prg Additive + +Set Classlib To appwiz Additive && generare script +Set Classlib To comun Additive +Set Classlib To Start Additive +Set Classlib To execute_script Additive +Set Classlib To systray Additive + +Set Classlib To generare_script Additive +Set Classlib To gridextras Additive + +Set Procedure To oproceduri_comune.prg Additive +Set Procedure To ini.prg Additive + +Set Procedure To "rbInputBox.prg" Additive +Set Procedure To regex.prg Additive + +Set Library To gcAppPath + 'biblioteci\vfpcompression.fll' && v 1.0.39 +*!* 30.08.2010 +Private gcReportPreviewer, gcReportPreviewerPath +gcReportPreviewer = "FoxyPreview" && rapoarte.prg +gcReportPreviewerPath = gcAppPath + 'utile\' +*!* 30.08.2010 ^ + +Private lcIniFile +Local lcidutilizator + +gcIcon = [news1.ico] +If File(Addbs(gcAppPath) + [grafice\] + gcIcon) + Private goSystray + goSystray = Createobject("osystray") + *!* Bindevent(_Screen,[Resize],goSystray,[minimizeaza],1) + Bindevent(_Screen,[rightclick],goSystray,[clickdreapta],1) + +Else + Messagebox([Nu s-a gasit icoana cu adresa:] + Chr(13) + Chr(10) +; + ADDBS(gcAppPath) + [grafice\] + gcIcon,0 + 48) +Endif + +lcIniFile = gcAppPath + 'settings.ini' + +*goExecutor = Createobject("oExecutor") +*Do (gcAppPath + "meniu.mpr") +If !File(lcIniFile) + Set Textmerge On To Memvar lcTextIni + \[connection] + \host=ROA_ROMFAST + \username=SOFT + \password=SOFT + \host_serii=ROA_CENTRAL + \username_serii=SOFT_SERII + \password_serii=123 + \host_database=ROA_CENTRAL + \username_database=CONTAFIN_ORACLE + \password_database=ROMFASTSOFT + \idutilizator= + Set Textmerge To + Strtofile(lcTextIni, lcIniFile) +Endif + + + +lcHost = ReadINI(lcIniFile, "connection", "host") +lcUserName = ReadINI(lcIniFile, "connection", "username") +lcPassword = ReadINI(lcIniFile, "connection", "password") +lcidutilizator = ReadINI(lcIniFile, "connection", "idutilizator") + +*!* 25.01.2011 +lcHostSerii = ReadINI(lcIniFile, "connection", "host_serii") +lcUserNameSerii = ReadINI(lcIniFile, "connection", "username_serii") +lcPasswordSerii = ReadINI(lcIniFile, "connection", "password_serii") +*!* 25.01.2011 ^ + +*!* 27.05.2013 +lcHostDatabase = ReadINI(lcIniFile, "connection", "host_database") +lcUserNameDatabase = ReadINI(lcIniFile, "connection", "username_database") +lcPasswordDatabase = ReadINI(lcIniFile, "connection", "password_database") +*!* 27.05.2013 ^ + +If Empty(lcHost) Or Empty(lcUserName) Or Empty(lcPassword) Or ; + EMPTY(lcHostSerii) Or Empty(lcUserNameSerii) Or Empty(lcPasswordSerii) Or ; + EMPTY(lcHostDatabase) Or Empty(lcHostDatabase) Or Empty(lcHostDatabase) + Messagebox('Completati detaliile de login pentru SOFT@ROA_ROMFAST, SOFT_SERII@ROA_CENTRAL, CONTAFIN_ORACLE@ROA_CENTRAL' + lcIniFile, 0+48, _Screen.Caption) +Else + + + + Private poLog,goLog && obiect pt logarea mesajelor sistemului + goLog = Newobject("Log_Mesaje","Log_Mesaje.prg") + + Private goExecutor, goConn + goExecutor = Createobject("oExecutor") + goConn = Createobject("oConn") + + Local lcMenu + lcMenu = "meniu.mpr" + + Release goApp + Public goApp + goApp = Createobject("cApplication") + goApp.AddProperty("cIniFile", lcIniFile) + goApp.AddProperty("cHost", lcHost) + goApp.AddProperty("cUserName", lcUserName) + goApp.AddProperty("cPassword", lcPassword) + goApp.AddProperty("cIdUtilizator", Alltrim(lcidutilizator)) + goApp.AddProperty("IdUtilizator", Val(Alltrim(lcidutilizator))) + goApp.AddProperty("cUtilizator", '') + + goApp.AddProperty("cHostSerii", lcHostSerii) + goApp.AddProperty("cUserNameSerii", lcUserNameSerii) + goApp.AddProperty("cPasswordSerii", lcPasswordSerii) + + + goApp.AddProperty("cHostDatabase", lcHostDatabase) + goApp.AddProperty("cUserNameDatabase", lcUserNameDatabase) + goApp.AddProperty("cPasswordDatabase", lcPasswordDatabase) + + + goApp.AddProperty("cMenu",lcMenu) + goApp.AddProperty("nhandle", 0) + + *!* completez inifile cu prefixele scripturilor pe scheme + lcText = Filetostr(goApp.cIniFile) + + If Atc("[script]",lcText) = 0 + lcText = '' + TEXT TO m.lcText NOSHOW + +[script] +CONTAFIN_ORACLE=CO_ +SCHEMAROA=FF_ +SOFT_SERII=RF_ +SYS=SYS_ +CONTABILITATE=JCS_ + + ENDTEXT + Strtofile(Chr(13) + Chr(10) + m.lcText,goApp.cIniFile,1) + Endif + + Create Cursor dual (Info c(10)) + Insert Into dual (Info) Values ("dummy") + + Set Step On + *!* completez inifile cu prefixele scripturilor pe scheme ^ + *!* conectare + conectare(lcHost, lcUserName, lcPassword, lcidutilizator) + *!* conectare ^ + + If gnhandle > 0 + Local llReturn + llReturn = .F. + + lnSucces = goExecutor.oexecute([select users.login, users.id from users ] + ; + [inner join roles_users on user_id=users.id inner join roles on role_id=roles.id ] + ; + [where roles.id=2 order by 1],"crsUtilizatori") + + + goLog.Log('silent: ' + TRANSFORM(m.llSilent) + ' command: ' + m.lcCommand, PROGRAM()) + IF m.llSilent AND !EMPTY(m.lcCommand) + IF m.lcCommand = "xml_roa_auto" + goLog.Log('genereaza_xml_roa_tot', PROGRAM()) + DO genereaza_xml_roa_tot IN proceduri.prg + ENDIF + ELSE + Do Form ("frm_connect.scx") To llReturn + If llReturn + WriteINI(goApp.cIniFile, "connection", "idutilizator", Alltrim(Transform(goApp.idutilizator))) + goApp.cUtilizator = Alltrim(crsUtilizatori.login) + + Private goConfig + goConfig = Createobject("Config") + + Do (lcMenu) + *goApp.cStartupMenu = gcAppPath + "meniu.mpx" + + *!* 29.08.2011 + *** TEST MENUHIT + If File(gcAppPath + "FOXCODE.DBF") + * _FOXCODE = gcAppPath + "foxcode.dbf" + Endif + *!* 29.08.2011 ^ + editLucrare() + Read Events + + On Error + On Shutdown + Do deconectare + + cleanup() + + Endif && llReturn + ENDIF && m.llSilent + Endif && gnHandle +Endif +cleanup() + + +*!* ================================================================= +*!* ================================================================= +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:" + Space(5) + Alltrim(Str(nLine)) + If Not Empty(lcCodeLineMsg) + lcErrorMsg = lcErrorMsg + Chr(13) + Chr(13) + lcCodeLineMsg + Endif + Endif + If Messagebox(lcErrorMsg, 17, _Screen.Caption) # 1 + On Error + On Shutdown + Quit + Endif +Endfunc + + +**============================================= +Function Shutdown + *!* If Type("goAppTask")=="O" And Not Isnull(goApp) + *!* Return goAppTask.OnShutDown() + *!* Endif + Do salveazaSetari + If Type('goApp') = 'O' + Return goApp.onShutDown() + Endif + + Do deconectare + *!* cleanup() + + + *!* If _vfp.StartMode !=0 + *!* Quit + *!* Endif +Endfunc +**============================================= + +Function cleanup + + *!* If Cntbar("_msysmenu") = 7 + *!* Return + *!* ENDIF + + On Error + On Shutdown + Set Classlib To + Set Path To + Clear All + *Close All + _Screen.MaxButton=.T. + _Screen.BorderStyle= 3 + _Screen.WindowState= 2 + + Pop Menu _Msysmenu + Clear Events + + Return +Endfunc + +***************************** inceput conectare +Procedure conectare + Lparameters tcHost, tcUserName, tcPassword, tcIdUtilizator + + Local lnHandle, lcHost, lcUserName, lcPassword, lcCaption, lcidutilizator + + If Pcount() = 3 + goApp.cHost = tcHost + goApp.cUserName = tcUserName + goApp.cPassword = tcPassword + * goapp.cidutilizator = goapptask.idutilizator + goApp.cidutilizator = tcIdUtilizator + Endif + + lcHost = Upper(tcHost) + lcUserName = Upper(tcUserName) + lcPassword = tcPassword + lcidutilizator = tcIdUtilizator + + If Type('goApp') = 'O' And goApp.nhandle > 0 + Do deconectare + Endif + + lnHandle = goConn.Connect(lcHost, lcUserName, lcPassword, lcidutilizator) + + goApp.nhandle = lnHandle + *!* goExecutor.nhandle = lnHandle + + If lnHandle > 0 + lcCaption = "Conectat " + lcHost + " " + lcUserName + Else + lcCaption = "Neconectat" + Endif + If Type('goApp') = 'O' + goApp.SetCaption(lcCaption) + Endif + + Return lnHandle + +Endproc && conectare +**************************************** + +Procedure deconectare + Local lcCaption, lnSucces + + lnSucces = goConn.Disconnect() + goApp.nhandle = -1 + goExecutor.nhandle = -1 + lcCaption = "Neconectat" + goApp.SetCaption(lcCaption) + +Endproc && deconectare + +************************* inceput salveazaSetari ******************** +Procedure salveazaSetari + Try + If Used('settings') + Replace settings.idutilizator With goApp.idutilizator In settings + Cursortoxml("SETTINGS",gcSettingsFile,1,512,0,"1") + Endif + If Used('programe_changelogs') + Cursortoxml("programe_changelogs", gcProgrameChangeLogsFile,1,512,0,"1") + Endif + Catch + Endtry +Endproc + +**====================================== +** actualizeaza programe_changelogs cu calea catre fisierul ; +changelog pentru un id_program +Procedure UpdateProgrameChangeLogs + Lparameters tnIdProgram, tcProgram, tcChangeLog + + Local lcSelect + lcSelect = Select() + + If Used('programe_changelogs') And !Empty(tcChangeLog) + Select programe_changelogs + Locate For id_program = tnIdProgram + If Found() + Replace changelog With Alltrim(tcChangeLog) + Else + Insert Into programe_changelogs(id_program, Program, changelog) Values (tnIdProgram, Alltrim(tcProgram), Alltrim(tcChangeLog)) + Endif + Endif + Select (lcSelect) +Endproc && UpdateProgrameChangeLogs ^ + +**====================================== +** intoarce calea catre fisierul changelog in functie de id_program +Function GetChangeLogByIdProgram + Lparameters tnIdProgram + Local lcSelect, lcChangelog + lcSelect = Select() + lcChangelog = "" + + If Used('programe_changelogs') + Select programe_changelogs + Locate For id_program = tnIdProgram + If Found() + lcChangelog = Alltrim(changelog) + Endif + Endif + + Select (lcSelect) + Return lcChangelog +Endfunc +**====================================== + +********************** inceput TooManyInstances ************************* +Function TooManyInstances(lnInstancesAllowed) + *************************** + #Define GW_CHILD 5 && 0x00000005 + #Define GW_HWNDNEXT 2 && 0x00000002 + #Define SW_MAXIMIZE 3 && 0x00000003 + #Define SW_NORMAL 1 && 0x00000001 + #Define WAIT_OBJECT_0 0 && 0x00000000 + #Define RF_MESAJ 0xA123 + + Local lcUniqueProperty, lcUniqueSemaphore, lnhSemaphore, lnHwnd, llReturn + If Pcount() = 0 + lnInstancesAllowed = 1 && default + Else + lnInstancesAllowed = Max(lnInstancesAllowed,1) &&At least one + Endif + Do DeclareAPIs + lcUniqueSemaphore = Strtran(Justpath(Sys(16,0)),"\","") + *!* lcUniqueSemaphore = "968360BF-C7AD-4B62-A045-0A06D597EF18" + lcUniqueProperty = "E2429959-D873-4733-8182-7A3F14780A27" + &&& + *!* oTypeLib = CreateObject("scriptlet.typelib") + *!* lcUniqueSemaphore = substr(oTypeLib.GUID, 2, 36) + *!* oTypeLib1 = CreateObject("scriptlet.typelib") + *!* lcUniqueProperty = substr(oTypeLib1.GUID, 2, 36) + &&& + lnhSemaphore = CreateSemaphore(0,lnInstancesAllowed,lnInstancesAllowed,lcUniqueSemaphore) + If lnhSemaphore != 0 And WaitForSingleObject(lnhSemaphore, 0) != WAIT_OBJECT_0 + Do DeclareMoreAPIs + llReturn = .T. + lnHwnd = GetWindow(GetDesktopWindow(), GW_CHILD) + Do While lnHwnd != 0 && loop through all windows + If GetProp(lnHwnd, lcUniqueProperty) = 1 && does window have our unique property? + BringWindowToTop(lnHwnd) + *!* modificare v 2.0.23 + If IsIconic(lnHwnd) <> 0 + SendMessage(lnHwnd, RF_MESAJ, 0, 0) + Else + *!* modificare v 2.0.23 ^ + ShowWindow(lnHwnd,SW_NORMAL) + *!* modificare v 2.0.23 + Endif + *!* modificare v 2.0.23 ^ + llReturn = .T. + Exit + Endif + lnHwnd = GetWindow(lnHwnd, GW_HWNDNEXT) + Enddo + CloseHandle(lnHwnd) + CloseHandle(lnhSemaphore) + Clear Dlls "BringWindowToTop", "GetDesktopWindow", ; + "GetProp", "GetWindow", "ShowWindow", ; + "CloseHandle", "SendMessage", "IsIconic" + Else + =SetProp(_vfp.HWnd, lcUniqueProperty, 1) + _Screen.AddProperty("SemaphoreHandle",lnhSemaphore) + llReturn = .F. + Endif + Clear Dlls "CreateSemaphore", "GetLastError", ; + "SetProp" + Return (llReturn) +Endfunc &&&&&&&&&&&&&&&&&&&&&& TooManyInstances ^^ &&&&&&&&&&&&&&&&&&&&&&&&&& +************************************************************************************************************************* +*************************** +Procedure DeclareAPIs() + *************************** + Declare Integer CloseHandle In Kernel32 Integer hObject + Declare Integer CreateSemaphore In Kernel32 Integer lpSemaphoreAttributes, Integer lInitialCount, Integer lMaximumCount, String lpName + Declare Integer SetProp In User32 Integer HWnd, String lpString, Integer hData + Declare Integer WaitForSingleObject In kernel32 Integer hHandle, Integer dwMilliseconds +Endproc +************************************************************************************************************************* +*************************** +Procedure DeclareMoreAPIs() + *************************** + Declare Integer BringWindowToTop In Win32API Integer HWnd + Declare Integer GetDesktopWindow In User32 + Declare Integer GetProp In User32 Integer HWnd, String lpString + Declare Integer GetWindow In User32 Integer HWnd, Integer uCmd + Declare Integer ShowWindow In Win32API Integer HWnd, Integer nCmdShow + *!* modificare v 2.0.23 + Declare Integer SendMessage In user32 Integer HWnd,Integer Msg,Integer wParam, Integer Lparam + Declare Integer IsIconic In user32 Integer HWnd + *!* modificare v 2.0.23 ^ +Endproc + diff --git a/programe/oproceduri_comune.prg b/programe/oproceduri_comune.prg new file mode 100644 index 0000000..7ab6fbc --- /dev/null +++ b/programe/oproceduri_comune.prg @@ -0,0 +1,1367 @@ +Define Class oexecutor As Custom + nHandle = 0 + cSql = '' + cCursor = '' + nSucces = 0 + cEroare = '' + cTime = '' + lReconnect = .T. && cred ca trebuie setat pe .F. inainte de o serie de proceduri executate cu tranzactie manuala + lShowError = .F. + lQuitOnError = .F. + + cEroare = [] && de la tasks + + Declare aEroare[1] + + + * PROCEDURE INIT( tnHandle, tcSql, tcCursor ) + * Date : 06/10/2004, 12:18:21 + * author : marius.mutu + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 3 + * Parameter 1: + * Parameter 2: + * Parameter 3: + * + ******************************************* INCEPUT:INIT ******************************************* + Procedure Init + Lparameters tnHandle, tcSql, tcCursor + + + If Empty(tnHandle) + This.nHandle = gnHandle + Else + This.nHandle = tnHandle + Endif + + Endproc + ******************************************* SFARSIT: INIT ******************************************* + + + * PROCEDURE oExecute( tcSql, tcCursor,tlProgress, tnHandle ) + * Date : 06/10/2004, 12:16:11 + * author : marius.mutu + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 3 + * Parameter 1: + * Parameter 2: + * Parameter 3: + * + ******************************************* INCEPUT:oExecute ******************************************* + Procedure oExecute( tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect ) + Local lnHandle, lcSql, lcCursor, llProgress, lnSucces, laEroare, lcEroare, llShowError, llQuitOnError, llReconnect + + + && tlQuitOnError : Daca face QUIT la eroare (daca vreau QUIT dau .T.) (default .F.) + && tlShowError : Daca arata mesajul de eroare (daca vreau sa il tratez in oexecute dau .T.) (default .F.) + && tlReconnect : Daca incearca sa se reconecteze (default .T.) + If .F. + Local This As oexecutor + Endif + This.Oreset() + + If Type('goLog')='O' + goLog.Log(tcSql,Program()) + Endif + + Local lnTip + lnTip = 0 + + If Empty(tcSql) + lcSql = Upper(This.cSql) + Else + lcSql = Upper(tcSql) + Endif + + If Empty(tcCursor) + lcCursor = This.cCursor + Else + lcCursor = tcCursor + Endif + + If Empty(tnHandle) + lnHandle = This.nHandle + Else + lnHandle = tnHandle + Endif + + && DACA AM TRANZACTIE MANUALA NU FAC RECONNECT + If SQLGetprop(lnHandle,"Transactions") = 2 && TRANZACTIE MANUALA + This.lReconnect = .F. + Else + This.lReconnect = .T. + Endif + + Do Case + Case Pcount() < 6 + llQuitOnError = This.lQuitOnError + llReconnect = This.lReconnect + llShowError = This.lShowError + Case Pcount() < 7 + llQuitOnError = This.lQuitOnError + llReconnect = This.lReconnect + Otherwise + llShowError = tlShowError + llReconnect = tlReconnect + llQuitOnError = tlQuitOnError + Endcase + + lnSucces = This.nSucces + + llProgress = tlProgress && IIF(tlProgress or 'SELECT'$lcSql,.T.,.F.) + lcTitluProgress = Iif(Empty(tcTitluProgress),"",Alltrim(tcTitluProgress)) + + Declare laEroare[1] + lcEroare = '' + + + lnTip = Iif('ROLLBACK'$lcSql Or 'COMMIT'$lcSql,1,0) && daca ROLLBACK SAU COMMIT TIP = 1, ALTFEL 0 + + Do Case + Case lnTip = 0 + + If llProgress + Local loTherm, lcTask, lnPercent, lnSeconds + If !Empty(lcTitluProgress) + lcTask = lcTitluProgress + Else + lcTask = "Se executa ... " + Endif + loTherm = Newobject("_thermometer","_therm","",lcTask) + + lnPercent = 15 + + + loTherm.Show() + Endif + + lnSucces = -1 + Do While .T. + Do While .T. + + If llProgress + lnPercent = lnPercent + 5 + If lnPercent > 90 + lnPercent = 15 + Endif + + loTherm.Update(lnPercent, lcTask+" "+Trans(lnPercent)) + Endif + + + lnSucces = SQLExec(lnHandle,lcSql,lcCursor) + If lnSucces = 0 + * + Else + Exit + Endif + Enddo + + If lnSucces > 0 + If Used(lcCursor) + lcTempCursor = Sys(2015) + Use Dbf(lcCursor) In 0 Again Shared Alias (lcTempCursor) + Use In (lcCursor) + Use Dbf(lcTempCursor) In 0 Again Alias (lcCursor) + Use In (lcTempCursor) + Endif + Exit + Endif + + If lnSucces < 0 + Release laEroare + Declare laEroare(1) + lnEroare1 = 0 + lnEroare2 = 0 + lcTextEroare = [] + lnHandle = 0 + llEroare = .F. + + Aerror(laEroare) + If Alen(laEroare) > 1 + lnEroare1 = laEroare[1] + lnEroare2 = laEroare[5] + lcTextEroare = laEroare[3] + lnHandle = laEroare[6] + llEroare = .T. + Endif + Do Case + Case lnEroare1 <>1526 && eroare <> ODBC + lcTextEroare = Program() + Chr(13) + Alltrim(Str(lnEroare1)) + ' ' + laEroare[2] + If Type('goLog')='O' + goLog.Log(lcTextEroare,Program()) + Endif + If llShowError + Messagebox(lcTextEroare,0,"Eroare") + Endif + If llQuitOnError + Quit + Retry + Else + Exit + Endif + + Case lnEroare1 = 1526 && eroare ODBC + Do Case + Case llReconnect And Inlist(lnEroare2,12152,3114,12560) && 12512 = TNS: UNABLE TO SEND BREAK MESSAGE; 3114 = NOT CONNECTED TO ORACLE; 12560 = PROTOCOL ADAPTER ERROR + If Type('goLog')='O' + lcLog = laEroare(3) + Chr(13) + goLog.Log(lcLog,Program()) + Endif + + Do While .T. + lnRaspuns = Messagebox('Eroare de conectare.' + Chr(13) + lcTextEroare + Chr(13) + 'Doriti reconectare?',4+32,'Eroare') && retry = 4; cancel = 2 + If lnRaspuns = 6 + + lnHandle = goConn.Connect(goConn.cHost, goConn.cUser, goConn.cPassword, llReconnect) + + *!* gnHandle = SQLConnect(gcHost,gcUserName,gcPassword) + + If lnHandle < 0 + Declare laEroare2(1) + Aerror(laEroare2) + lcTextEroare = laEroare2(3) + If Type('goLog')='O' + goLog.Log(lcTextEroare,Program()) + Endif + + Release laEroare2 + Loop + Else + *!* goExecutor.nHandle = gnHandle + Exit + Endif + Else + Quit + Retry + Endif && lnRaspuns = 6 + Enddo && .T. + Loop && daca am iesit cu un handle valid intru din nou in loop si fac cursorfill + Otherwise + lcTextEroare = Program() + Chr(13) + Alltrim(Str(lnEroare1)) + ' ' + Chr(13) + Transform(laEroare[2]) + Chr(13) + Transform(laEroare[3]) + Chr(13) + lcSql + If llShowError + lnRaspuns = Messagebox('Eroare necunoscuta' + Chr(13) + lcTextEroare,0,'Eroare') && ok = 0 + Endif + If Type('goLog')='O' + goLog.Log(lcTextEroare,Program()) + Endif + If llQuitOnError + Quit + Retry + Else + Exit + Endif + Endcase && INLIST(lnEroare2,12152,3114) + Endcase + Endif && lnSucces < 0 + + Enddo && .T. + + If llProgress + loTherm.Complete() + Release loTherm + Endif + + Case lnTip = 1 + If 'ROLLBACK'$lcSql + lnSucces = Sqlrollback(lnHandle) + Else + lnSucces = Sqlcommit(lnHandle) + Endif + Endcase + + If lnSucces < 0 + Aerror(laEroare) + + If laEroare[1] <> 1526 + lcEroare = laEroare[2] + Else + lcEroare = Alltrim(Str(lnEroare1)) + ' ' + Chr(13) + Transform(laEroare[2]) + Chr(13) + Transform(laEroare[3]) + Chr(13) + lcSql + Endif + + If llShowError + Messagebox(lcEroare,0,"Eroare") + Endif + If llQuitOnError + Quit + Retry + Endif + + Endif + + + + This.aEroare = laEroare + This.nSucces = lnSucces + This.cEroare = lcEroare + + Return lnSucces + + Endproc + ******************************************* SFARSIT: oExecute ******************************************* + + + + * PROCEDURE oReset( ) + * Date : 06/10/2004, 12:21:06 + * author : marius.mutu + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 0 + * + ******************************************* INCEPUT:oReset ******************************************* + Procedure Oreset( ) + With This + .aEroare = .F. + .nSucces = 0 + .cSql = '' + .cCursor = '' + Endwith + Endproc + ******************************************* SFARSIT: oReset ******************************************* +Enddefine && oExecutor + + + + +*** oConn =========================================================================================== +Define Class oConn As Custom + + cHost = '' + cUser = '' + cPassword = '' + cIdUtilizator = '' + nHandle = 0 + cEroare = '' + Declare aEroare[7] + lShowError = .F. + lReconnect = .F. && Daca llReconnect = .T. se apeleaza InitSesiune din oInit_Optiuni.prg + + + *** Connect =========================================================================================== + Procedure Connect + Lparameters tcHost, tcUser, tcPassword, tcIdUtilizator, tlReconnect + + *!* tlReconnect = .T. daca se apeleaza connect la reconectare (atunci se apeleaza si InitSesiune()) + Local lnSucces, laEroare, lcString, lcHost, lcUser, lcPassword, lcSql + + If Pcount() < 4 Or Type('tcHost') # 'C' Or Type('tcUser') # 'C' ; + OR Type('tcPassword') # 'C' Or Type('tcIdUtilizator') # 'C' + * + Else + This.cHost = tcHost + This.cUser = tcUser + This.cPassword = tcPassword + This.cIdUtilizator = tcIdUtilizator + Endif + + lcHost = This.cHost + lcUser = This.cUser + lcPassword = This.cPassword + + If Pcount() < 5 Or Type('tlReconnect') # 'L' + llReconnect = This.lReconnect + Else + llReconnect = tlReconnect + Endif + + SQLSetprop(0,"DispLogin",3) + lcString = "dsn=" + Alltrim(lcHost) + ";Uid=" + Alltrim(lcUser) + ";Pwd=" + Alltrim(lcPassword) + ";" + + This.nHandle = Sqlstringconnect(lcString) + + If Type('gnHandle') = 'N' + gnHandle = This.nHandle + Endif + + If Type('goExecutor') = 'O' + goExecutor.nHandle = This.nHandle + Endif + + If This.nHandle > 0 + lnSucces = 1 + + *** SETARI SESIUNE DUPA CONECTARE + This.postConn() + + If llReconnect + lnSucces = InitSesiune() && IN oInit_Optiuni.prg + Endif + Else + lnSucces = -1 + This.ProcessError() + Endif + + Return This.nHandle + + Endproc && Connect + *** END Connect =========================================================================================== + + *** Disconnect =========================================================================================== + Procedure Disconnect + Lparameters tnHandle + + Local lnSucces, lnHandle + + lnHandle = Iif(Empty(tnHandle) Or Type('tnHandle') # 'N', 0 , tnHandle) + + lnSucces = SQLDisconnect(lnHandle) + + If lnSucces < 0 + This.ProcessError() + Endif + + Return lnSucces + + Endproc && + *** END Disconnect =========================================================================================== + + *** ProcessError =========================================================================================== + Procedure ProcessError + + Local laEroare, lnEroare1, lnEroare2, lcTextEroare, lcEroareConectare + lcTextEroare = '' + lcEroareConectare = '' + Dimension laEroare[1] + + Aerror(laEroare) + If Alen(laEroare) > 1 + lnEroare1 = laEroare[1] + lnEroare2 = laEroare[5] + lcTextEroare = laEroare[3] + lnHandle = laEroare[6] + llEroare = .T. + + lcTextEroare = 'Conectarea nu a reusit ' + Chr(13) + Chr(10) + Alltrim(Transform(laEroare[1])) + ; + ' ' + Chr(13) + Transform(laEroare[2]) + Chr(13) + Transform(laEroare[3]) + This.cEroare = lcTextEroare + This.aEroare = laEroare + + goLog.Log(lcTextEroare,Program()) + + If laEroare[1] = 1526 And Like('*ORA-20???:*',laEroare[2]) + lnPozi = At("ORA-20",laEroare[2])+11 + lnPozf = At("ORA",laEroare[2],3) + lcEroareConectare = Substr(laEroare[2],lnPozi,lnPozf-lnPozi) + Else + lcEroareConectare = lcTextEroare + Endif + If Empty(lcEroareConectare) + lcEroareConectare = "Conectarea nu a reusit!" + Endif + + Messagebox(lcEroareConectare, 0 + 48,"Atentie") + Endif + + Return lcTextEroare + + Endproc && ProcessError + *** END ProcessError =========================================================================================== + + *** postConn =========================================================================================== + Procedure postConn + *** PUNCT ZECIMAL + lcSql=[ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + Messagebox(goExecutor.cEroare, 0 + 16,'Eroare') + Endif + + Endproc && postConn + *** END postConn =========================================================================================== + + +Enddefine && oConn +*** END oConn =========================================================================================== + + + +* PROCEDURE Get_Ora( tnTip ) +* Date : 16/11/2004, 08:58:45 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT:Get_Ora ******************************************* +Procedure Get_Ora( tnTip ) + * tnTip: 1 sau nimic = DATETIME ; 2 = CHARACTER + + Local lcRetVal + + If Pcount() = 0 Or Type('tnTip') <> 'N' + lnTip = 1 + Else + lnTip = tnTip + Endif + + &&preluare ora de pe oracle server: + Store 0 To pnsucces + pcexec = [select to_char(SYSdate,'dd/mm/yyyy hh:mi:ss AM') as dataora from dual] + pcCursor = [dataora_cursor] + pnsucces = goExecutor.oExecute(pcexec,pcCursor) + If (pnsucces != 0) + Select dataora_cursor + lcRetVal = dataora_cursor.dataora + Use In dataora_cursor + Endif + + If lnTip = 1 + lcRetVal = Ctot(lcRetVal) + Endif + Return lcRetVal +Endproc +******************************************* SFARSIT: Get_Ora ******************************************* + +Function Lista_Campuri + Lparameters tcAlias + + Local lcSelect, i, lcAlias, lcLista + lcLista = [] + lcSelect = Select() + lcAlias = tcAlias + + Select (lcAlias) + lnFields = Fcount() + For i = 1 To lnFields + lcField = Field(i) + lcLista = lcLista + [,] + lcField + Endfor + If !Empty(lcLista) + lcLista = Substr(lcLista,2) + Endif + + Select (lcSelect) + Return lcLista + +Endfunc && Lista_Campuri + + +***--------------------------------------------------------------------- +Procedure OPEN_DEFAULT_APP + Parameters tcfilename + + Declare Integer ShellExecute In shell32.Dll ; + INTEGER hndWin, ; + STRING cAction, ; + STRING cFileName, ; + STRING cParams, ; + STRING cDir, ; + INTEGER nShowWin + cFileName = tcfilename + cAction = "open" + ShellExecute(0,cAction,cFileName,"","",1) + +Endproc && OPEN_DEFAULT_APP + + +***--------------------------------------------------------------------- +Procedure GET_SCHEMA_GRID + Lparameters toGrid, tcColumnList, tcHeaderList, tcSchema, tlSelect, tnType, tcFrom, tcWhere, tcOrder, tcOutputName + + Local lcSelect, llSelect, lcAlias, lcWhere, lcOrder, lcColumn, lcHeader + Local lnType, lcInto + && tnType : 0 CURSOR, 1 TABLE, 2 ARRAY + + If Type('tnType') # 'N' + lnType = 0 + Else + If !Between(tnType,0,2) + lnType = 0 + Else + lnType = tnType + Endif + Endif + Do Case + Case lnType = 0 + lcInto = ' INTO CURSOR ' + Case lnType = 1 + lcInto = ' INTO TABLE ' + Other lnType = 1 + lcInto = ' INTO ARRAY ' + Endcase + + + tcColumnList = '' + tcHeaderList = '' + tcSchema = '' + + lnNrCol = toGrid.ColumnCount + Dimension myArray[lnNrCol,3] + + With toGrid + For lnCol = 1 To .ColumnCount + lnColumn = .Columns(lnCol).ColumnOrder + lcColumn = .Columns(lnCol).ControlSource + llVisible = .Columns(lnCol).Visible + lnWidth = .Columns(lnCol).Width + If !llVisible Or lnWidth = 0 + Adel(myArray,lnCol) + Loop + Endif + lnPos = At('.',lcColumn) + If lnPos > 0 + lcColumn = Substr(lcColumn, lnPos + 1) + Endif + *tcColumnList = tcColumnList + lcColumn + ',' + myArray[lnCol,1] = lnColumn + + For lnobjcol = 1 To .Columns(lnCol).Objects.Count + If Upper(.Columns(lnCol).Objects(lnobjcol).BaseClass)='HEADER' + lcHeader = .Columns(lnCol).Objects(lnobjcol).Caption + lcHeader = Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(lcHeader,Chr(32),'_'),'.','_'),'/','_'),'\','_'),"&","_"),"%",""),"(","_"),")","_"),"-","_") + *tcHeaderList = tcHeaderList + lcHeader + ',' + *tcSchema = tcSchema + lcColumn + [ as ] + lcHeader + [,] + myArray[lnCol,2] = lcColumn + myArray[lnCol,3] = lcHeader + Exit + Endif + Endfor + Endfor + *!* tcColumnList = Substr(tcColumnList, 1, Len(tcColumnList)-1) + *!* tcHeaderList = Substr(tcHeaderList , 1, Len(tcHeaderList)-1) + *!* tcSchema = Substr(tcSchema , 1, Len(tcSchema)-1) + Endwith + For i = 1 To Alen(myArray,1) + l1 = myArray[i,1] + If Type('l1') # 'N' + myArray[i,1] = -1 + Endif + Endfor + + Asort(myArray) + For i = 1 To Alen(myArray,1) + If myArray[i,1] <> -1 + tcColumnList = tcColumnList + Alltrim(myArray[i,2]) + [,] + tcHeaderList = tcHeaderList + Alltrim(myArray[i,3]) + [,] + tcSchema = tcSchema + Alltrim(myArray[i,2]) + [ as ] + Alltrim(myArray[i,3]) + [,] + Endif + Endfor + + tcColumnList = Substr(tcColumnList, 1, Len(tcColumnList)-1) + tcHeaderList = Substr(tcHeaderList , 1, Len(tcHeaderList)-1) + tcSchema = Substr(tcSchema , 1, Len(tcSchema)-1) + + + If tlSelect + tcSchema = 'SELECT ' + tcSchema + Endif + If !Empty(tcFrom) + tcSchema = tcSchema + ' FROM ' + Alltrim(tcFrom) + Endif + If !Empty(tcWhere) + tcSchema = tcSchema + ' WHERE ' + Alltrim(tcWhere) + Endif + + If !Empty(tcOrder) + tcSchema = tcSchema + ' ORDER BY ' + Alltrim(tcOrder) + Endif + + If !Empty(tcOutputName) + tcSchema = tcSchema + lcInto + tcOutputName + Endif + +Endproc && GET_SCHEMA_GRID + +***--------------------------------- +Procedure amessage + Lparameters tcMessage, tnDialogBoxType, tcTitleBarText, tnTimeOut + Local lnResponse + lnResponse = 0 + lcMessage = Iif(Empty(tcMessage),[],tcMessage) + lnDialogBoxType = Iif(Empty(tnDialogBoxType),0,tnDialogBoxType) + lcTitleBarText = Iif(Empty(tcTitleBarText),[],tcTitleBarText) + lnTimeOut = Iif(Empty(tnTimeOut),0,tnTimeOut) + If lnTimeOut # 0 + lnResponse = Messagebox(lcMessage,lnDialogBoxType,lcTitleBarText,lnTimeOut) + Else + lnResponse = Messagebox(lcMessage,lnDialogBoxType,lcTitleBarText) + Endif + + Return lnResponse + +Endproc && amessage +***--------------------------------- + +***--------------------------------- +Function amessagebox + Lparameters tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut ,tnTimeoutValue + + Local loMessage, lnReturn + loMessage = Newobject("messagebox_form", "MessageBox.vcx", "", tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut ,tnTimeoutValue) + loMessage.Show(1) + lnReturn = loMessage.IDOpcion + Return lnReturn + +Endfunc && amessagebox +***--------------------------------- + +Procedure export_xls + Lparameters tcAlias + + If Used(tcAlias) + lcDir = Addbs(gcTempPath) + + lcFile = Putfile('Nume fisier:', 'Foaie_Excel', 'XLS') + If Empty(lcFile) && Esc pressed + Return + Endif + + + Select (tcAlias) + Export To (lcFile) Type Xl5 + + OPEN_DEFAULT_APP(lcFile) + + Endif +Endproc && export_xls + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID_COMMENT + Param toGrid + *wait wind 'save_grid' + Private pogrid + If Param()=0 Or Type('togrid')!="O" + Return .F. + Endif + + pogrid=toGrid + + * remember control sources in the column's comment field + With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Comment = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText=.RecordSource + .RecordSource="" + Endwith + + Return .T. +Endproc && SAVE_GRID_COMMENT +***-------------------------------------------------------------- +Procedure RESTORE_GRID_COMMENT + Param toGrid + + *wait wind 'restore_grid' + Private pogrid + If Param()=0 Or Type('togrid')!="O" + Return .F. + Endif + + pogrid=toGrid + + + With pogrid + * restore record source + .RecordSource = .ToolTipText + * restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Comment + Endfor + .ToolTipText="" + Endwith + Return .T. +Endproc && RESTORE_GRID_COMMENT + + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID_TAG + Param toGrid + *wait wind 'save_grid' + Private pogrid + If Param()=0 Or Type('togrid')!="O" + Return .F. + Endif + + pogrid=toGrid + + * remember control sources in the column's comment field + With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText=.RecordSource + .RecordSource="" + Endwith + + Return .T. +Endproc && SAVE_GRID_TAG +***-------------------------------------------------------------- +Procedure RESTORE_GRID_TAG + Param toGrid + + *wait wind 'restore_grid' + Private pogrid + If Param()=0 Or Type('togrid')!="O" + Return .F. + Endif + + pogrid=toGrid + + + With pogrid + * restore record source + .RecordSource = .ToolTipText + * restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + Endfor + .ToolTipText="" + Endwith + Return .T. +Endproc && RESTORE_GRID_TAG + + +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* +Procedure XMENU + Lparameters TCITEMS, TNBAR + + Local NITEMCOUNT, AITEMS, X, NROW, NCOL, CTITLE, NLASTPOS, CCOLOR, AITEMS + + Private CPOPMENU, NSELECT && They flow into the GetChoice internal procedure + + If Pcount() < 2 + TNBAR = 1 + Endif + + Activate Screen + + * Parse every item + * + m.NITEMCOUNT = Occurs( ';', TCITEMS ) + 1 + Dimen AITEMS[ m.nItemCount ] + m.NLASTPOS = 1 + + For m.X = 1 To m.NITEMCOUNT + + If m.X < m.NITEMCOUNT + + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( At( ';', m.TCITEMS, m.X ) - 1 ) - m.NLASTPOS + 1 ) + Else + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( Len( m.TCITEMS ) - m.NLASTPOS ) + 1 ) + Endif + + If AITEMS[ m.x ] # "\-" + + AITEMS[ m.x ] = Allt( AITEMS[ m.x ] ) + Endif + + m.NLASTPOS=At( ';', m.TCITEMS, m.X ) + 1 + Next + + * Calculates the mouse pointer position + * + m.NROW = Iif( Mrow() + m.NITEMCOUNT < Srow(), Mrow() - 1, Srow() - m.NITEMCOUNT ) + m.NCOL = Iif( Mcol() + 10 < Scol(), Mcol() - 3, Mcol() - 13 ) + + * Gets an unique name for the pop-up + * + m.CPOPMENU = 'M' + Sys(3) + "_" + + Define Popup ( m.CPOPMENU ) SHORTCUT Relative From NROW, NCOL + + For m.X = 1 To m.NITEMCOUNT + + Define Bar m.X Of ( m.CPOPMENU ) Prompt AITEMS[ m.x ] + Next + + m.CANS = "" + m.NSELECT = 0 + Clear Type + + On Selection Popup ( m.CPOPMENU ) Do GETCHOICE + + Activate Popup ( m.CPOPMENU ) Bar TNBAR + + Pop Key + Release Popup ( m.CPOPMENU ) + + Return Iif( Lastkey()=27, 0, m.NSELECT ) + +Endproc && XMENU + +*-------------------- +Procedure GETCHOICE + + m.NSELECT = Bar() + + Deactivate Popup ( m.CPOPMENU ) + + Return + &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MENIU &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + +Procedure lista2array + Parameters tcLISTA,taArray,tcSeparator + && tcLista este un sir de caractere care contine elementele separate prin <;> default + && tarray este vectorul care se completeaza - trebuie dat prin referinta + && tcSeparator separatorul de elemente din tcLista - default este ";" - este optional + && intoarce numarul de elemente gasite + + && ex: lnNr = lista2array("ana;are;mere",@alista,";") + External Array taArray + Local lcLista,lcSeparator,lnNRF,lcF1,i + + lnNRF = 0 + + lcLista=Upper(Allt(tcLISTA)) + If Parameters()<3 Or Empty(tcSeparator) + lcSeparator=";" + Else + lcSeparator=Alltrim(tcSeparator) + Endif + + If Right(lcLista,1)!=lcSeparator + lcLista=lcLista+lcSeparator + Endif + + lnNRF=Occurs(lcSeparator,lcLista) + + If lnNRF>0 + Dimension taArray[lnNrf,1] + + For i=1 To lnNRF + lcF1=Left(lcLista,At(lcSeparator,lcLista)-1) + + If i!=lnNRF + lcLista=Substr(lcLista,At(lcSeparator,lcLista)+1) + Endif + + taArray[i]=lcF1 + Endfor + Else + lnNRF = 0 + Endif + + Return lnNRF + +Endproc && lista2array + + +***------------------------------------------------------------------------------------------- +Procedure get_mask + Parameters tnint, tndec + + Local lnint, lndec + lnint = tnint + lndec = tndec + lnrest = Mod(lnint,3) + + lcString = Replicate("9",lnrest) + lnint_ramas = lnint - lnrest + Do While lnint_ramas > 0 + lcString = lcString + " "+ Replicate("9",3) + lnint_ramas = lnint_ramas - 3 + Enddo + If lndec > 0 + lcString = lcString +"."+Replicate("9",tndec) + Endif + + Return lcString + +Endproc && get_mask +***----------------------------------------------------------- + + +******************************************************************* +* PROCEDURE Get_Version( ) +* Date : 17/11/2004, 16:34:20 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:Get_Version ******************************************* +Procedure Get_Version(tlNoRevision,tlInfo,tcfilename) + Local laVersion,lcVersion,lcFileName + + *-- Get Version Information + *-- Added 4-1-98 BDC + Local lcVersionText, lcFileName,llNoRevision,llInfo + + Dimension aVersion(12) + + If Empty(tcfilename) + lcFileName = Sys(16,0) + Else + lcFileName = tcfilename + Endif + llNoRevision = tlNoRevision + llInfo = tlInfo + + + + *** EGL: 2002.1.2 17:06 - switched to AGETFILEVERSION(). + If Val(Substr(Version(), 15)) >= 6 + * The AGETFILEVERSION() function was introduced in VFP 6 + + *!* DECLARE STRING GetCommandLine IN Kernel32 + *!* lcFileName = GetCommandLine() + lcVersionText = "" + + *!* IF GetFileVersion(&lcFileName,@aVersion) = 0 + If Agetfileversion(aVersion, lcFileName) > 0 + If !llInfo + * daca vreau doar numarul versiunii + lcVersion = Allt(aVersion(4)) + If llNoRevision + * daca nu vreau si revizia + lnPos = Rat('.',lcVersion,1) + Else + lnPos = Len(lcVersion) + Endif + lcVersionText = Left(lcVersion,lnPos) + Else + * vreau toata informatia despre fisier + If Not Empty(aVersion(1)) + lcVersionText = Allt(aVersion(1)) + Endif + + If Not Empty(aVersion(2)) + lcVersionText = lcVersionText+Chr(10)+"Produs de: "+ Allt(aVersion(2)) + Endif + + If Not Empty(aVersion(3)) + lcVersionText = lcVersionText+Chr(10)+"Descriere: "+ Allt(aVersion(3)) + Endif + + If Not Empty(aVersion(4)) + lcVersionText = lcVersionText+Chr(10)+"Versiune fisier: "+ Allt(aVersion(4)) + Endif + + If Not Empty(aVersion(5)) + lcVersionText = lcVersionText+Chr(10)+"Nume intern: "+ Allt(aVersion(5)) + Endif + + If Not Empty(aVersion(6)) + lcVersionText = lcVersionText+Chr(10)+"Copyright: "+ Allt(aVersion(6)) + Endif + + If Not Empty(aVersion(7)) + lcVersionText = lcVersionText+Chr(10)+"Marca inregistrata: "+ Allt(aVersion(7)) + Endif + + If Not Empty(aVersion(8)) + lcVersionText = lcVersionText+Chr(10)+"Nume fisier: "+ Allt(aVersion(8)) + Endif + + If Not Empty(aVersion(9)) + lcVersionText = lcVersionText+Chr(10)+"Private Build: "+ Allt(aVersion(9)) + Endif + + If Not Empty(aVersion(10)) + lcVersionText = lcVersionText+Chr(10)+"Nume produs: "+ Allt(aVersion(10)) + Endif + + If Not Empty(aVersion(11)) + lcVersionText = lcVersionText+Chr(10)+"Versiune produs: "+ Allt(aVersion(11)) + Endif + + If Not Empty(aVersion(12)) + lcVersionText = lcVersionText+Chr(10)+"Special Build: "+ Allt(aVersion(12)) + Endif + + If Empty(lcVersionText) + lcVersionText = "Versiune necunoscuta." + Endif + Endif + Else + + lcVersionText = "Versiune necunoscuta." + + Endif + + Else + lcVersionText = "Versiune necunoscuta." + Endif + Return lcVersionText + +Endproc +******************************************* SFARSIT: Get_Version ******************************************* + + +* PROCEDURE Get_Hexa( tnDeca ) +* Date : 18/11/2004, 17:56:48 +* author : marius.mutu +* description: transforma un Deca in Hexa + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: Numarul in Deca +* +******************************************* INCEPUT:Get_Hexa ******************************************* +Procedure Get_Hexa( tnDeca ) + Local laHexa,lnHexa,lnDeca + + + If Empty(tnDeca) + lnDeca = 0 + Else + lnDeca = tnDeca + Endif + + Dimension laHexa[16] + laHexa[1] = '0' + laHexa[2] = '1' + laHexa[3] = '2' + laHexa[4] = '3' + laHexa[5] = '4' + laHexa[6] = '5' + laHexa[7] = '6' + laHexa[8] = '7' + laHexa[9] = '8' + laHexa[10] = '9' + laHexa[11] = 'A' + laHexa[12] = 'B' + laHexa[13] = 'C' + laHexa[14] = 'D' + laHexa[15] = 'E' + laHexa[16] = 'F' + + lnHexa = '' + + Do While lnDeca > 0 + lnrest = Mod(lnDeca,16) + lcHexa = laHexa[lnRest+1] + lnDeca = Int(lnDeca/16) + + lnHexa = lcHexa + lnHexa + lnrest = Mod(lnDeca,16) + + Enddo + + Return lnHexa + +Endproc +******************************************* SFARSIT: Get_Hexa ******************************************* +&& completeaza cu spatii si CRLF un mesaj a.i. pe fiecare linie sa fie lnLength caractere +Function format_msg + Parameters tcErrMsg,tnLength + Local lnLength,lcLinie,lcMesaj,lnPoz,lnCate,i,j + lcMesaj="" + If Empty(tnLength) + lnLength=50 && numarul de caractere pe linie + Else + lnLength=tnLength + Endif + i=1 + If At(Chr(13)+Chr(10),tcErrMsg,i)>0 + lnCate=At(Chr(13)+Chr(10),tcErrMsg,i)+1 + i=i+1 + Else + lnCate=Min(lnLength,Rat(' ',Substr(tcErrMsg,1,lnLength))-1) + Endif + lnPoz=1 + *!* lcLinie=Substr(tcErrMsg,1,lnCate) + + Do While lnPoz0 + lnCate=At(Chr(13)+Chr(10),tcErrMsg,i)+2-lnPoz + i=i+1 + Else + lcNextChar=Substr(tcErrMsg,lnPoz+lnLength,1) + lcLinieNoua=Substr(tcErrMsg,lnPoz,lnLength) + If lcNextChar!=' ' And Len(lcLinieNoua)>=lnLength + lnCate=Min(lnLength,Rat(' ',lcLinieNoua)-1) + Else + lnCate=lnLength + Endif + Endif + Enddo + Return lcMesaj +Endfunc && format_msg +***-------------------------------------------------------------------------------------- +Function Lista_Campuri + Lparameters tcAlias + + Local lcSelect, i, lcAlias, lcLista + lcLista = [] + lcSelect = Select() + lcAlias = tcAlias + + Select (lcAlias) + lnFields = Fcount() + For i = 1 To lnFields + lcField = Field(i) + lcLista = lcLista + [,] + lcField + Endfor + If !Empty(lcLista) + lcLista = Substr(lcLista,2) + Endif + + Select (lcSelect) + Return lcLista + +Endfunc && Lista_Campuri +***------------------------- CLASS oSysTray ------------------------- + + +Define Class oSysTray As Custom + oobjsystray = Null + + Procedure minimizeaza + + Local lcIcon + lcIcon = [news1.ico] + + If _Screen.WindowState = 1 + This.oobjsystray= Newobject('systray') + With This.oobjsystray + .iconFile = lcIcon + .TipText = [Tasks] + IF WEXIST("frm_luc") + frm_lucrare_noua.release() + endif + .AddIconToSystray() + .icondblclickevent() + Endwith + _Screen.Hide() + Endif + Endproc + + Procedure clickDreapta + + Local lcIcon + lcIcon = [news1.ico] + + If _Screen.WindowState = 1 + This.oobjsystray= Newobject('systray') + With This.oobjsystray + .iconFile = lcIcon + .TipText = [Tasks] + .iconrightclickevent() + Endwith + * _Screen.Hide() + Endif + ENDPROC + + + Procedure iconrightclickevent + + Local lcIcon + lcIcon = [news1.ico] + + If _Screen.WindowState = 1 + This.oobjsystray= Newobject('systray') + With This.oobjsystray + .iconFile = lcIcon + .TipText = [Tasks] + .AddIconToSystray() + Endwith + Do meniu.mpr + * _Screen.Hide() + Endif + ENDPROC + +Enddefine +**----------------------- CLASS oSysTray --------------------------------- + + + +FUNCTION HTMLFix(tcString) + * This code ASSUMES the incoming string is ANSI, + * CHR(32) to (127) and has not already had the + * characters converted - it will make a mess of a + * string that already has strings like — in it. + LOCAL lcString as string + lcString = STRTRAN(tcString,"&","&") + lcString = STRTRAN(lcString,"<","<") + lcString = STRTRAN(lcString,">",">") + RETURN ALLTRIM(lcString) +ENDFUNC && HTMLFix + + +FUNCTION RFC822Date(tDateTime AS DATETIME) AS STRING + * Returns "Thu, 27 Feb 2003 14:11:12 GMT" + LOCAL lcReturn AS STRING, lcTime AS STRING + lcReturn = LEFT(PROPER(CDOW(tDateTime)),3) +", " + lcReturn = lcReturn + PADL(DAY(tDateTime),2,'0') + SPACE(1) + lcReturn = lcReturn + LEFT(PROPER(CMONTH(tDateTime)),3) + SPACE(1) + lcReturn = lcReturn + STR(YEAR(tDateTime),4)+SPACE(1) + + lcTime = TTOC(tDateTime,2) && HH:MM:SS PM + * Compensate for PM + IF RIGHT(lcTime,2) = "PM" AND LEFT(lcTime,2) # "12" + lcTime = STR(12+VAL(lcTime),2)+SUBSTR(lcTime, 3, 6) + ELSE + lcTime = LEFT(lcTime, 8) + ENDIF + * Fake the time zone + lcTime = lcTime + " EST" + + lcReturn = lcReturn + lcTime + + RETURN lcReturn +ENDFUNC && RFC822Date + + +*=============================================== +Procedure COPYFILEAPI + Lparameters tcSourceFile, tcDestinationFile + + && WIN API + && Copy file + && NOTE: the file name case will not be changed for the existing destination file. + Declare Long CopyFile In WIN32API ; + String SourceFileName, String DestFileName, Long bFailIfExists + Local llSucces + llSucces = .T. + If COPYFILE(tcSourceFile, tcDestinationFile, 0) = 0 + llSucces = .F. + ENDIF + + CLEAR DLLS "WIN32API" + + Return llSucces +Endproc && COPYFILE + +*=============================================== +Procedure MOVERENAMEFILEAPI + Lparameters tcSourceFile, tcDestinationFile + Local llSucces + llSucces = .T. + && Move/Rename file + Declare Long MoveFile In WIN32API ; + String SourceFileName, String DestFileName + If MOVEFILE(tcSourceFile, tcDestinationFile) = 0 + llSucces = .F. + Endif + + CLEAR DLLS "WIN32API" + + Return llSucces +Endproc && MOVEFILE diff --git a/programe/proceduri.prg b/programe/proceduri.prg new file mode 100644 index 0000000..3852002 --- /dev/null +++ b/programe/proceduri.prg @@ -0,0 +1,390 @@ +*!* 04.03.2013 +*!* marius.mutu +*!* genereaza_xml_roa +*!* se retin numele xml-urilor pentru clientii roa in settings.ini in sectiunea [folder] + +#Define crlf Chr(13) + Chr(10) + +Procedure EditTask + Parameters tnId + + Private poRec + lcSql = [select * from tasks where ] + Iif(!Empty(tnId), [ id = ?tnId], [1=2]) + lcCursor = Sys(2015) + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces > 0 + Select (lcCursor) + Scatter Name poRec Memo + Do Form frm_adaugare_task + Endif + + + Return lnSucces +Endproc + +*****============================================================== +Procedure EditLucrare + Parameters tnIdLucrare + + Local lnSucces, lcCursor, lcSql + + Private poRec + *!* IF EMPTY(tnid) + + *!* endif + lcSql = [select * from luc_vlucrari_tot where ] + ; + Iif(!Empty(tnIdLucrare), [ id = ?tnIdLucrare ], [1=2]) + lcCursor = Sys(2015) + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces > 0 + Select (lcCursor) + Scatter Name poRec Memo + poRec.datal = Ttod(poRec.datal) + Do Form frm_lucrare_noua + Endif + Return lnSucces +Endproc +************************** + +************************** +* se apeleaza tasks.exe cu parametru din Windows Task Scheduller +* se genereaza xml pentru toti clientii ROA +************************** +Procedure genereaza_xml_roa_tot + + Local lcSql, llAuto, llSilent + Text To lcSql + SELECT DISTINCT CUSTOMER_ID, CUSTOMER + FROM (select CUSTOMER_ID, CUSTOMER, DATA_PLEC + from VSC_PROGRAME_CLIENTI t + WHERE PROGRAM = 'ROACONT' + AND DATA_PLEC BETWEEN TRUNC(SYSDATE) - 60 AND SYSDATE) + order by CUSTOMER + Endtext + executaSql(lcSql, [cCustomersTemp], .T.) + + llSilent = .T. + llAuto = .T. + Select cCustomersTemp + Scan + Wait Window Transform(Recno()) + Transform(Reccount()) + ' ' + cCustomersTemp.customer Nowait + Select cCustomersTemp + Do genereaza_xml_roa With customer_id, customer, m.llSilent, m.llAuto In proceduri.prg + Endscan + Use In (Select('cCustomersTemp')) +Endproc && genereaza_xml_roa_tot +*** +Procedure genereaza_xml_roa + Lparameters tnCustomerId, tcName, tlSilent, tlAuto + * tlSilent: .T. = nu arata dialogul SaveAs pentru xml, decat daca nu are configurat numele fisierului + * tlAuto: .T. = genereaza automat numele fisierului xml, daca nu este configurat in settings.ini + + *!* 09.08.2010 + *!* marius.mutu + *!* nu se mai creeaza vechiul fisier xml cu aplicatiile, ci doar noul fisier + *!* 28.06.2012 + *!* arhivele nu mai au extensia .exe, ci .zip ( am adaugat lcExtensieArhive ) + *!* 20.07.2012 + *!* am adaugat tcName + + Local lcSql, lcfile, cVersiune, lcClipText, lcSir, lcFisier, lcDir, lcFisVersDif + Local lcfileVersiuniMax, lnSucces, lnCustomerId, liat, lcFileAfis, lcExtensieArhive + Local laEroare[1], lcVersiune, x, lcXMLFolder + Local llSilent, llAuto + llSilent = m.tlSilent + llAuto = m.tlAuto + + lcExtensieArhive = [.ZIP] + liat = 0 + lnCustomerId = m.tnCustomerId + *!* 20.07.2012 : am adaugat m.lcCustomerName + lcCustomerName = m.tcName + + lcClipText = [] + lcSir = [] + lcFisier = [] + lcDir = [] + lcFisVersDif = [] + *!* 25.01.2011 + *!* x = SQLConnect("JCSSERVER","SOFT_SERII","123") + x = SQLConnect(goApp.cHostSerii, goApp.cUsernameSerii, goApp.cPasswordSerii) + If x < 0 + Aerror(laEroare) + Messagebox(laEroare(3)) + Return + Endif + *!* 25.01.2011 ^ + + *!* 17.06.2011 : am adaugat id_grup_clienti = 1 ( clienti ROA ) + lcSql = [select DISTINCT customer_id, NUME, ID_PROGRAM, (CASE WHEN Upper(PROGRAM) ] + ; + [LIKE 'INDEX%' THEN 'MANUAL' ELSE PROGRAM END) AS PROGRAM from vgen_programe ] + ; + [where customer_id = ] + Alltrim(Str(m.lnCustomerId)) + [ and id_grup_clienti = 1] + lnSucces = SQLExec(x, lcSql, "crsProgsTemp1") + If lnSucces < 0 + Return + Endif + SQLDisconnect(x) + *!* selectie combobox - un client, programele cu licenta pentru client + *!* 17.06.2011 : am adaugat comun ca sa pot face ROASTART.xml si .XML + *!* 20.07.2012 : am inlocuit crs2xml.id cu m.lnCustomerId + executaSql([select 0 as ales, v.customer, v.program, v.versiune, v.versiune_maxima, ] + ; + [v.id, v.customer_id, v.comun from vsc_versiune_max_inst_dv v ] + ; + [where v.customer_id = ] + Alltrim(Str(m.lnCustomerId)), "crsprogstemp2", .T.) + *!* selectie combobox - un client, programele cu licenta pentru client ^ + executaSql([select * from programs], "crsPrograms", .T.) + executaSql([select * from sc_versiune_programe], "crsVersProg", .T.) + + *** directorul xml_aplicatii + lcXMLFolder = Nvl(readINI(goApp.cinifile, "folder", "xml_aplicatii"), "") + If Empty(m.lcXMLFolder) + llSilent = .F. + ENDIF + + *** 04.03.2013 + *** citesc numele fisierului xml pentru client din clientului din settings.ini + lcCustomerNameSaved = Nvl(readINI(goApp.cinifile, "folder", "xml_aplicatii_" + Alltrim(Str(m.lnCustomerId))), "") + If !Empty(Nvl(m.lcCustomerNameSaved, '')) + lcCustomerName = Juststem(m.lcCustomerNameSaved) + ELSE + IF m.llAuto + lcCustomerName = 'customer_' + ALLTRIM(STR(m.lnCustomerId)) + WriteINI(goApp.cinifile, "folder", "xml_aplicatii_" + Alltrim(Str(m.lnCustomerId)), m.lcCustomerName) + ELSE + llSilent = .F. + ENDIF + Endif + + + + If !m.llSilent + *!* 20.07.2012 : am inlocuit crs2xml.Name cu m.lcCustomerName + lcfile = Putfile("Alegeti calea", Iif(Empty(m.lcXMLFolder), "", Addbs(m.lcXMLFolder)) + Upper(Alltrim(Strtran(m.lcCustomerName, ' ', ''))) + '.xml', 'xml') + If !Empty(m.lcfile) + writeINI(goApp.cinifile, 'folder', "xml_aplicatii_" + Alltrim(Str(m.lnCustomerId)), Juststem(m.lcfile)) + Endif + Else + lcfile = Addbs(m.lcXMLFolder) + Upper(Alltrim(Strtran(m.lcCustomerName, ' ', ''))) + '.xml' + Endif + + *!* 17.06.2011 : am adaugat comun ca sa pot face ROASTART.xml si .XML + Select a.nume As customer, a.Program, b.versiune, b.versiune_maxima, a.customer_id, a.id_program, b.comun ; + From crsprogstemp2 b ; + INNER Join crsProgsTemp1 a On a.customer_id = b.customer_id And b.Id = a.id_program ; + Order By 7 Desc, 2 ; + Into Cursor crsXmlOut + + Select Program As Item, versiune As Version, ; + '\_ARHIVE\' + Alltrim(Program) + '\' + Alltrim(Program) + '-' + Alltrim(versiune) + lcExtensieArhive As fileURL, ; + '' As usermsg ; + From crsXmlOut Where comun = 0 ; + Into Cursor crsXmlOutNew + + *!* 17.06.2011 : am adaugat comun pentru ROASTART.xml ( trebuie redenumit manual in ROASTART.xml ) + *!* 20.07.2012 : am modificat coloanele item ( program as item ) si fileURL ( '\_ARHIVE\' + Alltrim(Program) + '\' + Alltrim(Program) + '-' + Alltrim(versiune) + lcExtensieArhive ) + Select Iif(At([USERREPORTS], Alltrim(Program)) <> 0 And At([-], Program, 1) <> 0, Substr(Alltrim(Program), 1, At([-], Alltrim(Program), 1) - 1), Alltrim(Program)) As Item, versiune As Version, ; + '\_ARHIVE\' + Iif(At([USERREPORTS], Alltrim(Program)) <> 0, [USERREPORTS], Alltrim(Program)) + '\' + Alltrim(Program) + '-' + Alltrim(versiune) + lcExtensieArhive As fileURL, ; + '' As usermsg ; + From crsXmlOut Where comun = 1 ; + Into Cursor crsXmlOutNewS + + *SELECT c.customer, c.program, c.versiune, c.customer_id FROM crsprogstemp2 c ; + JOIN crsprograms p ON p.id = c.id ORDER BY 2 ; + WHERE !EMPTY(NVL(c.versiune,[])) ; + INTO CURSOR crsProgLic + + Select crsXmlOut + lcClipText = lcClipText + Alltrim(customer) + crlf + "VERSIUNI EXISTENTE: " + lcVersiune = "" + Set Textmerge On To Memvar lcVersiune Noshow + Set Textmerge Delimiters To '{{', '}}' + \ + + Select crsXmlOut + *SELECT crsProgLic + Scan For customer_id = lnCustomerId + \<{{Alltrim(Program)}}> + \ + \{{Alltrim(versiune)}} + \{{'\_ARHIVE\' + Alltrim(Program) + '\' + Alltrim(Program) + '-' + Alltrim(versiune) + lcExtensieArhive}} + \S-a gasit {{Alltrim(Program)}} versiunea {{Alltrim(versiune)}}. Programul va incepe procedurile de actualizare ! + \ + \ + + lcClipText = lcClipText + Alltrim(Program) + '-' + Alltrim(versiune) + ', ' + Endscan + Set Textmerge To + + + + *!* 09.02.2010 + *!* Cursortoxml("crsXmlOutNew", Addbs(Justpath(m.lcfile)) + Juststem(m.lcfile) + '.new.xml', 1, 0+512, 0, "1") + Cursortoxml("crsXmlOutNew", Addbs(Justpath(m.lcfile)) + Juststem(m.lcfile) + '.xml', 1, 0 + 512, 0, "1") + *!* 17.06.2011 + Cursortoxml("crsXmlOutNewS", Addbs(Justpath(m.lcfile)) + 'ROASTART_' + Juststem(m.lcfile) + '.xml', 1, 0 + 512, 0, "1") + * Creez si un ROASTART.xml pentru firmele de pe ROA_ROMFAST, pentru ca ele descarca ROASTART.xml direct de pe ROA_CENTRAL, nu de pe ROA_ROMFAST + If Upper(Juststem(m.lcfile)) = 'ROMFAST' + Cursortoxml("crsXmlOutNewS", Addbs(Justpath(m.lcfile)) + 'ROASTART' + '.xml', 1, 0 + 512, 0, "1") + Endif + *!* 17.06.2011 ^ + *!* Strtofile(lcVersiune, m.lcfile) + *!* 09.02.2010 ^ + + *** salvez director xml aplicatii + writeINI(goApp.cinifile, 'folder', 'xml_aplicatii', Justpath(m.lcfile)) + + + *Use In (Select("crsProgLic")) + Use In (Select("crsprograms")) + Use In (Select("crsProgsTemp1")) + Use In (Select("crsProgsTemp2")) + Use In (Select("crsxmlout")) + Use In (Select("crsxmloutnew")) + Use In (Select("crsxmloutnewS")) && 17.06.2011 + Use In (Select("crsVersProg")) + + + _Cliptext = Nvl(lcClipText, []) + + +Endproc && genereaza_xml_roa + +******************************************* +Procedure genereaza_xml_contafin + + Local lcAppPath, lcCheckSum, lcCustomerId, lcFileExe, lcFileZip, lcFisiere, lcSql, lcText, lcWhere + Local lcXML, lcXML2, lcfile, lnHandle, lnSucces, lcAppPath + + lcXMLPath = readINI(goApp.cinifile, "folder", "contafin_arhive") + lcXMLPath = Addbs(m.lcXMLPath) + + *!* lnHandle = SQLConnect('roa_romfast','soft','soft') + *!* If lnHandle < 0 + *!* ProcessError() + *!* Return + *!* Endif + + Text To lcSql Noshow Textmerge +SELECT vp.name as program, vc.versiune_curenta as versiune, vc.customer_id + From vprograme vp Left Join sc_versiune_programe vc On vc.id_program = vp.Id + Left Join programs_groups pg On pg.id_program = vp.Id + Where vc.appupdate = 1 + Endtext + + *!* lnSucces = SQLExec(lnHandle, lcSql, "cProgrameTemp") + *!* If lnSucces < 0 + *!* ProcessError() + *!* Return + *!* Endif + + executaSql(lcSql, "cProgrameTemp", .T.) + + *!* 28.10.2010 + Create Cursor crsCheckSum (fisier c(250), checksum c(100)) + *!* 28.10.2010 ^ + + *!* APPUPDATE + *!* http://83.103.197.79:3002/contafinupdate/default.aspx/update/download/|licenta|/appupdate-1.0.3.exe + *!* http://83.103.197.79:3002/contafinupdate/default.aspx/update/download/|licenta|/changelog_appupdate.txt + *!* 1.0.3 + lcFisiere = '' + Select Distinct customer_id From cProgrameTemp Into Cursor cCustomers Order By customer_id + Select cCustomers + Scan + If !Empty(Nvl(customer_id, 0)) + lcWhere = "inlist(nvl(customer_id,0), 0, " + Alltrim(Str(customer_id)) + ")" + lcCustomerId = Alltrim(Str(customer_id)) + Else + lcWhere = "NVL(customer_id,0) = 0" + lcCustomerId = "" + Endif + + Select Program, versiune, ; + [http://83.103.197.79:3002/contafinupdate/default.aspx/update/download/|licenta|/] + Alltrim(Program) + [-] + Alltrim(versiune) + [.exe] As fisier, ; + [http://83.103.197.79:3002/contafinupdate/default.aspx/update/download/|licenta|/changelog_] + Alltrim(Program) + [.txt] As Log, ; + Space(100) As checksum ; + From cProgrameTemp ; + Where &lcWhere ; + Order By Program ; + Into Cursor crsXML Readwrite + + + + Select crsXML + Scan + lcFileExe = lcXMLPath + Alltrim(Program) + [-] + Alltrim(versiune) + [.exe] + lcFileZip = lcXMLPath + Alltrim(Program) + [-] + Alltrim(versiune) + [.zip] + lcfile = lcFileExe + If !File(lcFileExe) + If File(lcFileZip) + lcfile = lcFileZip + Endif + Endif + Wait Window 'CUSTOMER_ID ' + lcCustomerId + ' ' + Transform(Recno()) + '/' + Transform(Reccount()) + ' ' + lcfile Nowait + + If File(lcfile) + Select crsCheckSum + Locate For Upper(Alltrim(fisier)) = Upper(Alltrim(lcfile)) + If Found() + lcCheckSum = checksum + Else + lcText = Filetostr(lcfile) + lcCheckSum = Sys(2007, lcText, 0, 1) + lcText = "" + Insert Into crsCheckSum (fisier, checksum) Values (lcfile, lcCheckSum) + Endif + *** completez checksum-ul si schimb extensia fisierului din exe in zip, daca este cazul + Replace checksum With lcCheckSum, fisier With Forceext(Alltrim(fisier), Justext(m.lcfile)) In crsXML + Else + Messagebox('Nu exista fisierul ' + lcfile, 0 + 48, _Screen.Caption) + Endif + Endscan + + lcXML = lcXMLPath + 'contafin' + Iif(!Empty(lcCustomerId), '_' + lcCustomerId, '') + '.xml' && CONTAFIN.XML, CONTAFIN_26.XML + lcXML2 = lcXMLPath + 'contafin_local' + Iif(!Empty(lcCustomerId), '_' + lcCustomerId, '') + '.xml' && CONTAFIN.XML, CONTAFIN_26.XML + Cursortoxml('crsXML', lcXML, 1, 512, 0, "1") + + Select crsXML + Replace All fisier With Strtran(fisier, '83.103.197.79:3002', '10.0.20.122:81'), Log With Strtran(Log, '83.103.197.79:3002', '10.0.20.122:81') + Cursortoxml('crsXML', lcXML2, 1, 512, 0, "1") + Use In crsXML + lcFisiere = lcFisiere + lcXML + crlf + Endscan + Use In (Select('cCustomers')) + Use In (Select('cProgrameTemp')) + + Use In (Select('crsCheckSum')) + + Messagebox('S-au creat fisierele ' + lcFisiere) + +Endproc && genereaza_xml_contafin + +************************************************************* +*** converteste un nume de script in elementele componente +************************************************************* +Procedure ParseScriptName + Lparameters tcScript, tcScriptPrefix, tdScriptDate, tnScriptSeq, tcScriptType + + Local lcScript, lnAn, lnLuna, lnPos, lnZi + lcScript = Juststem(m.tcScript) + tcScriptPrefix = "" + tdScriptDate = {} + tnScriptSeq = 0 + tcScriptType = "" + + If !Empty(m.lcScript) + tcScriptPrefix = Getwordnum(m.lcScript, 1, '_') + + lnAn = Val(Getwordnum(m.lcScript, 2, '_')) + lnLuna = Val(Getwordnum(m.lcScript, 3, '_')) + lnZi = Val(Getwordnum(m.lcScript, 4, '_')) + tdScriptDate = Date(m.lnAn, m.lnLuna, m.lnZi) + + tnScriptSeq = Int(Val(Juststem(Getwordnum(m.lcScript, 5, '_')))) + + lnPos = At('_', m.lcScript, 5) + If m.lnPos > 0 + tcScriptType = Juststem(Substr(m.lcScript, m.lnPos + 1)) + Endif + Endif + +Endproc && ParseScriptName \ No newline at end of file diff --git a/programe/proceduri_sql.prg b/programe/proceduri_sql.prg new file mode 100644 index 0000000..940c66c --- /dev/null +++ b/programe/proceduri_sql.prg @@ -0,0 +1,144 @@ +#DEFINE crlf CHR(13) + CHR(10) +************************ inceput conecteaza *************************** +*** foloseste gnHandle +*************************************************************************** +PROCEDURE conecteaza + LPARAMETERS tcHost, tcUser, tcPassword + + LOCAL laEroare[1] + *:Global gnHandle + + gnHandle = SQLCONNECT(tcHost, tcUser, tcPassword) + IF gnHandle < 1 + AERROR(laEroare) + eroaresql(@laEroare, "Conectare " + tcUser + '@' + tcHost) + ENDIF + + RETURN m.gnHandle +ENDPROC + +************************ inceput conecteazaH *************************** +*** foloseste gnHandle +*************************************************************************** +PROCEDURE conecteazaH + LPARAMETERS tcHost, tcUser, tcPassword + + LOCAL laEroare[1], lnHandle + lnHandle = SQLCONNECT(tcHost, tcUser, tcPassword) + IF lnHandle < 1 + AERROR(laEroare) + eroaresql(@laEroare, "Conectare " + tcUser + '@' + tcHost) + ENDIF + + RETURN m.lnHandle +ENDPROC + + +**************************** inceput executaSql *************************** +*** foloseste gnHandle +*************************************************************************** +FUNCTION executaSql + LPARAMETERS tcSql, tcCursor, tlShowErr + + LOCAL laEroare[1], lcCursor, lcSql, llShowErr, lnHandle, lnSucces + lnSucces = -1 + + lcCursor = iif(!empty(m.tcCursor), m.tcCursor, "") + lnHandle = m.gnHandle + lcSql = m.tcSql + llShowErr = m.tlShowErr + + IF m.lnHandle > 0 + lnSucces = SQLEXEC(m.lnHandle, m.lcSql, m.lcCursor) + + IF m.lnSucces < 0 AND m.llShowErr + AERROR(laEroare) + eroaresql(@laEroare, m.lcSql) + ENDIF + ENDIF + + RETURN m.lnSucces +ENDFUNC + +**************************** inceput executaSqlH *************************** +*** foloseste tnHandle +*************************************************************************** +FUNCTION executaSqlH + LPARAMETERS tnHandle, tcSql, tcCursor, tlShowErr, taEroare + + EXTERNAL ARRAY taEroare + LOCAL laEroare[1], lcCursor, lcSql, llShowErr, lnHandle, lnSucces + lnSucces = -1 + + lcCursor = iif(!empty(m.tcCursor), m.tcCursor, "") + lnHandle = m.tnHandle + lcSql = m.tcSql + llShowErr = m.tlShowErr + + IF m.lnHandle > 0 + lnSucces = SQLEXEC(m.lnHandle, m.lcSql, m.lcCursor) + + IF m.lnSucces < 0 + AERROR(taEroare) + IF m.llShowErr + eroaresql(@taEroare, m.lcSql) + ENDIF + ENDIF + ENDIF + + RETURN m.lnSucces +endfunc + +************************* inceput deconecteaza ************************ +*** foloseste gnHandle +*************************************************************************** +FUNCTION deconecteaza + + LOCAL lnHandle, lnSucces + lnHandle = m.gnHandle + lnSucces = -1 + IF m.lnHandle > 0 + lnSucces = SQLDISCONNECT(m.lnHandle) + else + AERROR(laEroare) + eroaresql(@laEroare, "Deconectare Handle = " + alltrim(str(m.lnHandle))) + ENDIF + + RETURN m.lnSucces +ENDFUNC + +************************* inceput deconecteaza ************************ +*** foloseste gnHandle +*************************************************************************** +FUNCTION deconecteazaH + LPARAMETERS tnHandle + + LOCAL lnHandle, lnSucces + + lnHandle = m.tnHandle + lnSucces = -1 + IF m.lnHandle > 0 + lnSucces = SQLDISCONNECT(m.lnHandle) + else + AERROR(laEroare) + eroaresql(@laEroare, "Deconectare Handle = " + alltrim(str(m.lnHandle))) + ENDIF + + RETURN m.lnSucces +ENDFUNC +******************************* inceput eroareSql ********************************** +PROCEDURE eroaresql + LPARAMETERS laErr, lcsql + + LOCAL lcMesaj + EXTERNAL ARRAY laErr + + lcMesaj = [Eroare # : ] + ALLTRIM(STR(laErr(1))) + crlf + ; + [Mesajul : ] + laErr(2) + ; + IIF(!EMPTY(laErr(3)), [Eroare OLE : ] + laErr(3) ,[]) + ; + [Aplicatie : ] + laErr(4) + ; + IIF(PCOUNT() = 2, crlf + lcsql, []) + MESSAGEBOX(lcMesaj,0+16) + +ENDPROC + \ No newline at end of file diff --git a/programe/rapoarte.prg b/programe/rapoarte.prg new file mode 100644 index 0000000..720ce52 --- /dev/null +++ b/programe/rapoarte.prg @@ -0,0 +1,976 @@ +*** RAPOARTE +*!* Listare raport "LISTAREUSERREPORT(lcAlias, "FRX/XLS", lcRaport)" +*!* Generare raport "do UserReport2File" +*!* Modificare raport "DO MODIFICA_RAPORT_UTILIZATOR" +*!* Printer Setup "sys(1037)" + +*!* 26.10.2009 +*!* marius.mutu +*!* listareuserreport - cautare raport in getuserreppath si in reg_report_path +*!* listareuserreport - cautare logo.jpg in getuserreppath si in reg_report_path daca nu e dat ca parametru +*!* get_report_path - cautare si creare raport usr in CONTAFIN\USERREPORTS\CONGEST\FIRMA + +*!* 04.11.2009 +*!* marius.mutu +*!* + GetReportPath - intoarce directorul CONTAFIN\USERREPORTS +*!* Get_Report_Path - tratare variabila glFacturiPersonalizate +*!* listareuserreport - nu am mai folosit get_report_path pentru logo si raport ci GetReportPath(era folosit in ACNPRO si nu era definita variabila glFacturiPersonalizate) + +*!* 07.04.2010 +*!* marius.mutu +*!* getUserRepPath - lcAppPath = gcAppPath +*!* + getUserRepFile + +*!* 30.08.2010 +*!* marius.mutu +*!* rapoarte_ultime_modificari +*!* se cere data initiala, data finala, titlu pentru ultimele modificari +*!* ultima versiune instalata sau data initiala <-> versiunea maxima sau data finala + +#DEFINE CRLF CHR(13) + CHR(10) + +Procedure rapoarte_speciale_cl + + Local lcConnect, lnSucces,lAeroare + *!* PRIVATE pdDatainc,pdDataSf + *!* STORE {} to pdDatainc,pdDataSf + *!* pdDatainc = DATE(2007,7,1) + *!* pdDatasf = DATE(2007,7,31) + + lcConnect = SQLConnect('ROA_CENTRAL','soft','soft') + lnSucces = SQLExec(lcConnect,[select sters, validat, id_utilizator, id_client, nume_client, id, titlu, localizare, explicatie_client, ] + ; + [ tip_lucrare, special, datal, id_program, nume_program, prenume_utilizator, nume_utilizator, ROUND(ore_lucrate,2) as ore_lucrate ] + ; + [ from luc_vlucrari_clienti_special where special = 1 and DATAL between ]+; + [ to_date(] + Dtos(pdData1) + [,'YYYYMMDD') and to_date(] + Dtos(pdData2) + [,'YYYYMMDD') ] + ; + [order by nume_client, nume_program, datal desc],'crslucCli') + If lnSucces < 0 + Aerror(lAeroare) + Messagebox(lAeroare(3)) + Else + Select crslucCli + If Reccount() = 0 + Messagebox('Nu exista inregistrari pentru selectia facuta',0+16) + ELSE + DO LISTAREUSERREPORT WITH 'crslucCli', 'FRX', 'rap_clienti_special' +*!* Report Form rap_clienti_special To Printer Prompt Preview + Endif + Endif + SQLDisconnect(lcConnect) + Use In (Select("crslucCli")) + +Endproc + +********************* inceput rapoarte_cl_CONTAFIN ****************** +Procedure rapoarte_cl_CONTAFIN + + Local lcConnect, lnSucces,lAeroare + lcConnect = SQLConnect('ROA_CENTRAL','soft','soft') + lnSucces= SQLExec(lcConnect,[select * from luc_vlucrari l where ]+; + [ l.tip_lucrare in (2,3) AND l.VALIDAT=1 and l.id_grup = 1 and l.special = 0 ]+; + [ and DATAL between ]+; + [ to_date(']+Dtos(pdData1)+[','YYYYMMDD') and to_date(']+Dtos(pdData2)+[','YYYYMMDD') ]+ ; + [order by nume_program, DATAL desc ],'crslucCli') + If lnSucces < 0 + Aerror(lAeroare) + Messagebox(lAeroare(3)) + Else + Select crslucCli + If Reccount() = 0 + Messagebox('Nu exista inregistrari pentru selectia facuta',0+16) + ELSE + DO LISTAREUSERREPORT WITH 'crslucCli', 'FRX', 'rap_clienti' +*!* Report Form rap_clienti To Printer Prompt Preview + Endif + Endif + SQLDisconnect(lcConnect) + Use In (Select("crslucCli")) + +Endproc + +********************* inceput rapoarte_cl_ROA *************************** +Procedure rapoarte_cl_ROA + + Local lcConnect, lnSucces,lAeroare + Set Date Dmy + Set Century On + *!* pddata1 = DATE(2007,7,1) + *!* pddata2 = DATE(2007,7,31) + lcConnect = SQLConnect('ROA_CENTRAL','soft','soft') + lnSucces = SQLExec(lcConnect,[select * from luc_vlucrari l where ]+; + [ l.tip_lucrare in (2,3) AND l.VALIDAT=1 and l.id_grup = 11 and l.special = 0 ]+; + [ and DATAL between ]+; + [ to_date(] + Dtos(pdData1) + [,'YYYYMMDD') and to_date(] + Dtos(pdData2)+[,'YYYYMMDD') ]+ ; + [order by nume_program, DATAL desc ],'crslucCli') + + If lnSucces < 0 + Aerror(lAeroare) + Messagebox(lAeroare(3)) + Else + Select crslucCli + If Reccount() = 0 + Messagebox('Nu exista inregistrari pentru selectia facuta',0+16) + ELSE + DO LISTAREUSERREPORT WITH 'crslucCli', 'FRX', 'rap_clienti' +*!* Report Form rap_clienti To Printer Prompt Preview + Endif + Endif + SQLDisconnect(lcConnect) + Use In (Select("crslucCli")) + +Endproc + +***************************** soft_trimis_clienti ************************** +Procedure soft_trimis_cl + + * Select crs_prg_clie + * Report Form rap_inform To Printer Prompt Preview + +Endproc + +PROCEDURE soft_trimis_cl_manual + LOCAL loFrm + loFrm = CREATEOBJECT("frm_raport_versiuni") + loFrm.Show(1) + RELEASE loFrm +ENDPROC +*************************** rapoarte_ultime_modificari +Procedure rapoarte_ultime_modificari + Lparameters tnCustId, tcListaPrograme + + PRIVATE pdDataInitiala, pdDataFinala, pcTitlu + Local lcConnect, lnSucces, lAeroare, lcVersiune, lcSql, x, i, lcLista, lcWhere, lnCustId + * lcVersiune = versiune(crsProgs.versiune) + * lclist = [(] + lnCustId = tnCustId + *!* 30.08.2010 + pcTitlu = PADR('BULETIN INFORMATIV', 100, ' ') + pcTitlu = rbInputBox( "Titlu raport", "Titlu", m.pcTitlu) + + pdDataInitiala = {} + pdDataInitiala = rbInputBox( "Data initiala", "Data", m.pdDataInitiala) + + pdDataFinala = {} + pdDataFinala = rbInputBox( "Data finala", "Data", m.pdDataFinala) + + + lcSql = [select vsc.program,l.versiune,vsc.versiune_maxima,l.explicatie_client, ] + ; + [ vsc.customer_id,vsc.data_plec, vsc.id as id_program ,l.datal, l.titlu, l.localizare ] + ; + [ from vsc_versiune_max_inst_dv vsc ] + ; + [ join luc_lucrari l on l.id_program = vsc.id ] + ; + [ and ] + IIF(EMPTY(m.pdDataInitiala), [trunc(vsc.data_plec)], [?m.pdDataInitiala]) + [ <= trunc(l.datal) ] + ; + IIF(EMPTY(m.pdDataFinala), [], [ and ?m.pdDataFinala >= trunc(l.datal) ]) + ; + [ where vsc.customer_id = ] + ALLTRIM(STR(lncustid)) + ; + IIF(EMPTY(m.pdDataInitiala), [ and vsc.versiune <> vsc.versiune_maxima ], []) + ; + [ and l.explicatie_client is not null ] + ; + [ and l.versiune <> vsc.versiune ] + ; && v 1.0.38 + [ and (L.SPECIAL = 0 OR (L.SPECIAL = 1 AND l.id_client = ] + ALLTRIM(STR(lncustid)) + [)) ] + ; + [ order by 1] + *!* 30.08.2010 ^ + + goExecutor.oexecute(lcSql,"crsTest") + + *!* 25.01.2011 + *!* x = SQLConnect("JCSSERVER","SOFT_SERII","123") + x = SQLConnect(goApp.cHostSerii, goApp.cUsernameSerii, goApp.cPasswordSerii) + If x < 0 + AERROR(laEroare) + MESSAGEBOX(laEroare(3)) + Return + Endif + *!* 25.01.2011 ^ + + + lcSql = [select DISTINCT customer_id, NUME, ID_PROGRAM, (CASE WHEN Upper(PROGRAM) ] + ; + [LIKE 'INDEX%' THEN 'MANUAL' ELSE PROGRAM END) AS PROGRAM from vgen_programe ] + lnSucces = SQLExec(x, lcSql, "crsProgsTemp1") && crsprogstemp1 + * [WHERE ID_CLIENT =]+Transform(lnIdClient)+[ ORDER BY 2, 4] + SQLDisconnect(x) + + * lcwhere =[ WHERE ] + IIF(ALLTRIM(tcListaPrograme)!=[()],[ct.id_program in &tcListaPrograme ],[1=2 ] ) + If Alltrim(tcListaPrograme)!=[()] + lcWhere = [ where cp.id_program in ] + tcListaPrograme + Else + lcWhere = [ where 1=2 ] + Endif + + Select ct.Program As nume_program, ct.explicatie_client, ct.datal, ct.titlu, ; + ct.localizare, ct.versiune, ct.versiune_maxima ; + From crsTest ct; + JOIN crsprogstemp1 cp On cp.customer_id = ct.customer_id And cp.id_program = ct.id_program ; + &lcWhere ; + ORDER By ct.Program, ct.datal Into Cursor crslucCli + + Select Min(datal) As data1, Max(datal) As Data2 From crslucCli Into Cursor crsData + Select crsData + pdData1 = data1 + pdData2 = data2 + Select crslucCli + If Reccount() = 0 + Messagebox('Nu exista inregistrari pentru selectia facuta',0+16) + Else +*!* Report Form rap_clienti To Printer Prompt Preview + DO LISTAREUSERREPORT WITH 'crslucCli', 'FRX', 'rap_clienti' + && tcAlias, tcTipExport, tcRaport, tcLogoPath, tcReportPreviewer, toPreviewerConfig && tcDestinationFile, tlDontOpenFile + Endif + + Release paAles + Use In (Select("crstest")) + Use In (Select("crsprogstemp1")) + Use In (Select("crslucCli")) + +Endproc && rapoarte_ultime_modificari^ + + + + +********************* INCEPUT GetReportPath ********************** +* PROCEDURE GetReportPath ( tcReportName ) +* Date : 04.11.2009 +* author : marius.mutu +* description: intoarce calea CONTAFIN\USERREPORTS +****************************************** +PROCEDURE GetReportPath + Local lcAppPath, lcAppName, liAt, lcDirgen, lcUserRepPath,lcAlias + lcAppPath=Addbs(Justpath(Sys(16,0))) + lcAppName=Allt(Uppe(Juststem(Sys(16,0)))) + liAt=Rat("\",lcAppPath,2) + lcDirgen=Addbs(Left(lcAppPath,liAt-1)) + lcUserRepPath = lcDirgen + 'USERREPORTS\' + If !Directory(lcUserRepPath) + Md (lcUserRepPath) + ENDIF + RETURN lcUserRepPath +ENDPROC + +********************* INCEPUT Get_report_path ********************** +* PROCEDURE Get_report_path( tcReportName ) +* Date : 26.04.2005, 16:22:03 +* author : marius.mutu +* description: intoarce calea raportului (EXE SAU USERREPORTPATH\PROGRAM\FIRMA\USR_RAPORT.FRX daca glFacturiPersonalizate) +****************************************** +Procedure Get_report_path + Lparameters tcReportName + Local lcReportName, llFacturiPersonalizate + + lcReportName = Alltrim(tcReportName) + ".FRX" + + *!* 04.11.2009 + llFacturiPersonalizate = .F. + + IF TYPE('glFacturiPersonalizate') <> 'U' + llFacturiPersonalizate = glFacturiPersonalizate + ENDIF + *!* 04.11.2009 ^ + + If llFacturiPersonalizate + *!* 26.10.2009 +*!* lcFile = GetReportPath() + "USR_" + lcReportName + lcFile = getUserRepPath() + "USR_" + lcReportName + *!* 26.10.2009 ^ + If !File(lcFile) + Use (lcReportName) In 0 Alias UserReport Again Shared + Select UserReport + Copy To (lcFile) + Use In UserReport + Endif + lcReportPath = lcFile + Else + lcReportPath = lcReportName + Endif + + Return lcReportPath + +Endproc +********************* SFARSIT Get_report_path ********************** + + +********************* INCEPUT Modifica_raport_utilizator ********************** +* PROCEDURE Modifica_raport_utilizator( ) +* Date : 26.04.2005, 17:44:33 +* author : marius.mutu +* description: + +Procedure Modifica_raport_utilizator( ) + + Cd (gcUserReports) + lcFile = Getfile("frx","Alegeti un raport","Alege") + If File(lcFile) And Upper(Justext(lcFile)) = "FRX" + Modify Report (lcFile) + Endif + + +Endproc +********************* SFARSIT Modifica_raport_utilizator ********************** + + +*!* PROCEDURI_RAPOARTE.PRG + + +*!* LISTARE RAPORT UTILIZATOR +*!* PARAMETRI : tcAlias - alias-ul cursorului; tcTipExport - FRX/XLS; tcRaport - numele raportului; tcLogoPath - daca pe raport trebuie sa am o imagine logo in acelasi director cu raportul +*!* Se listeaza raportul USR_ din directorul \\SERVER\ROA\USERREPORTS\\\ daca exista +*!* Daca nu exista raporturl USR_ se listeaza raportul default +*!* tcReportPreviewer - procedura pentru preview rapoarte "FoxyPreview" (default gcReportPreviewer) +*!* toPreviewerConfig - obiect PreviewerConfig cu setari pentru tcReportPreviewer +Procedure LISTAREUSERREPORT + Lparameters tcAlias, tcTipExport, tcRaport, tcLogoPath, tcReportPreviewer, toPreviewerConfig && tcDestinationFile, tlDontOpenFile + Local lcEroare, laEroare,llEroare + Dimension laEroare[1,1] + + Local lcSelect, lcRaportPath, lcTipExport, lcLogoPath, lcLogoPathDest, llDeleteRaport, llDeleteLogo + LOCAL lcOldReportPreview, lcOldReportBehaviour + LOCAL loEx + llDeleteRaport = .F. + llDeleteLogo = .F. + + *!* 07.04.2010 + LOCAL lcReportPreviewer + lcReportPreviewer = IIF(EMPTY(tcReportPreviewer), IIF(TYPE('gcReportPreviewer') = 'C', gcReportPreviewer, ""), tcReportPreviewer) + *!* 07.04.2010 ^ + + If Type('tcTipExport') = 'C' + lcTipExport = Upper(Alltrim(tcTipExport)) + Else + If Empty(tcRaport) + lcTipExport = 'XLS' + Else + lcTipExport = 'FRX' + Endif + Endif + If Empty(tcAlias) + Return + Endif + If !Used(tcAlias) + Return + Endif + *!* 26.10.2009 + lcLogoPath = Iif(Type('tcLogoPath') <> 'C' Or Empty(tcLogoPath), getUserRepPath() + 'logo.jpg', tcLogoPath) && USERREPORTS\PROGRAM\FIRMA\LOGO.JPG + If !File(lcLogoPath) + lcLogoPath = GetReportPath() + 'logo.jpg' && USERREPORTS\LOGO.JPG + If !File(lcLogoPath) + lcLogoPath = '' + ENDIF + ENDIF + *!* 26.10.2009 ^ + + Do Case + Case lcTipExport = 'FRX' + + lcRaportPath = getUserRepPath() + [USR_] + Juststem(tcRaport) + [.FRX] && USERREPORTS\PROGRAM\FIRMA\USR_RAPORT.FRX + + *!* 04.11.2009 + IF !FILE(lcRaportPath) + lcRaportPath = GetReportPath() + [USR_] + Juststem(tcRaport) + [.FRX] && USERREPORTS\USR_RAPORT.FRX +*!* Get_report_path(Juststem(tcRaport)) + ENDIF + *!* 04.11.2009 ^ + + If !File(lcRaportPath) + lcRaportPath = tcRaport && raportul din executabil + + If !Empty(lcLogoPath) + ***--- inlocuire logo + + lcRaport = Juststem(tcRaport) + [.FRX] + lcRaportPath = Addbs(gcTempPath) + [USR_] + lcRaport + *!* 07.04.2010 + lcLogoPathDest = Addbs(gcTempPath) + JUSTFNAME(lcLogoPath) && "logo.jpg" + *!* 07.04.2010 ^ + + If Used(Juststem(lcRaportPath)) + Use In (Select(Juststem(lcRaportPath))) + Endif + + Use (lcRaport) In 0 Alias rapFactura + Select rapFactura + Copy To (lcRaportPath) + Use In (Select('rapFactura')) + Use In Select(Juststem(lcRaport)) + + + Copy File (lcLogoPath) To (lcLogoPathDest) + llDeleteRaport = .T. + llDeleteLogo = .T. + Endif + ***--- + + Endif + + lcSelect = Select() + If !Empty(tcAlias) And Used(tcAlias) + Select (tcAlias) + Endif + lcError = On('error') + llEroare = .F. + On Error llEroare = .T. + Do While .T. + *!* 07.04.2010 + DO CASE + CASE EMPTY(lcReportPreviewer) + Report Form (lcRaportPath) To Printer Prompt Preview + CASE VERSION(5) < 800 + Report Form (lcRaportPath) To Printer Prompt Preview + OTHERWISE + TRY + lcOldReportBehaviour = SET("ReportBehavior") + DO &lcReportPreviewer WITH lcRaportPath, toPreviewerConfig && tcDestinationFile, tlDontOpenFile + SET REPORTBEHAVIOR &lcOldReportBehaviour + CATCH TO loEx + MESSAGEBOX('Eroare: ' + loEx.Message + CRLF + 'Procedura: ' + loEx.Procedure + CRLF + 'Cod: ' + loEx.LineContents + CRLF + 'Linia nr: ' + TRANSFORM(loEx.LineNo), 0+32, _screen.Caption) +* llEroare = .F. + Report Form (lcRaportPath) To Printer Prompt Preview + ENDTRY + ENDCASE + *!* 07.04.2010 ^ + If llEroare + Aerror(laEroare) + If laEroare[1] = 1958 + lnRaspuns = Messagebox("Eroare la driverul imprimantei.Doriti sa reincercati listarea?",4+32+256,"Confirmare relistare") + If lnRaspuns <> 6 + Exit + Else + llEroare = .F. + Endif + Else + Messagebox(laEroare[2] + [ ] + Alltrim(Str(laEroare[1])) + [ ] + ALLTRIM(TRANSFORM(laEroare(3)))) + Exit + Endif + Else + Exit + Endif + Enddo + On Error &lcError + + Select (lcSelect) + + Case lcTipExport = 'XLS' + export_xls(tcAlias) + Endcase + If llDeleteRaport And File(lcRaportPath) + Delete File FORCEEXT(lcRaportPath,'*') + Endif + If llDeleteLogo And File(lcLogoPathDest) + Delete File (lcLogoPathDest) + Endif + Release lcEroare, laEroare,llEroare + + +Endproc && LISTAREUSERREPORT + +********************* INCEPUT Modifica_raport_utilizator ********************** +* PROCEDURE Modifica_raport_utilizator +* Date : 26.07.2006, 17:44:33 +* author : marius.mutu +Procedure Modifica_raport_utilizator + + lcUserRepPath = getUserRepPath() + Cd (lcUserRepPath) + lcFile = Getfile("frx","Alegeti un raport","Alege") + If File(lcFile) And Upper(Justext(lcFile)) = "FRX" + Modify Report (lcFile) + Endif + +Endproc && Modifica_raport_utilizator +********************* SFARSIT Modifica_raport_utilizator ********************** + +*!* INTOARCE DIRECTORUL CU RAPOARTE UTILIZATOR PENTRU APLICATIA, SCHEMA CURENTA +Function getUserRepPath + Local lcAppPath, lcAppName, liAt, lcDirgen, lcUserRepPath,lcAlias + *!* 07.04.2010 + IF TYPE('gcAppPath') = 'C' + lcAppPath = gcAppPath + ELSE + lcAppPath=Addbs(Justpath(Sys(16,0))) + lcAppPath = STRTRAN(lcAppPath,'PROGRAME\','') + ENDIF + IF TYPE('gcAppName') = 'C' + lcAppName = gcAppName + ELSE + lcAppName = Allt(Uppe(Juststem(Sys(16,0)))) + ENDIF + *!* 07.04.2010 ^ + liAt=Rat("\",lcAppPath,2) + lcDirgen=Addbs(Left(lcAppPath,liAt-1)) + lcUserRepPath = lcDirgen + 'USERREPORTS\' + If !Directory(lcUserRepPath) + Md (lcUserRepPath) + Endif + lcUserRepPath = lcUserRepPath + lcAppName + '\' + If !Directory(lcUserRepPath) + Md (lcUserRepPath) + Endif + + lcUserRepPath = lcUserRepPath + IIF(TYPE('nfscurt') = 'C', ALLTRIM(m.nfscurt) + '\', '') + If !Directory(lcUserRepPath) + Md (lcUserRepPath) + Endif + Return lcUserRepPath + +Endfunc + +**************************************************************************** +*!* extrage frx din executabil pe disc in directorul USERREPORTS +Procedure UserReport2File + Lparameters tcRaport + + Local lcRaport, lcFile + If Empty(tcRaport) + lcRaport= Inputbox("Raport","Scrieti numele raportului","raport.frx") + Else + lcRaport = tcRaport + Endif + + If Empty(lcRaport) + Return + Endif + + lcRaport = Juststem(lcRaport) + '.frx' + lcFile = getUserRepPath() + "USR_" + lcRaport + If File(lcFile) + Return + Endif + + *!* TRY + *!* USE (lcRaport) IN 0 again SHARED ALIAS crsRaportTemp + *!* ENDTRY + + If !File(lcRaport) + Messagebox('Nu exista raportul ' + lcRaport) + Else + Use (lcRaport) In 0 Again Shared Alias crsRaportTemp + Select crsRaportTemp + Copy To (lcFile) + Use In crsRaportTemp + Endif + +Endproc && UserReport2File + +*!* INTOARCE CALEA COMPLETA A RAPORTULUI UTILIZATOR USR_.FRX, DACA EXISTA, ALTFEL, +FUNCTION getUserRepFile + LPARAMETERS tcRaport + LOCAL lcRaportFile + + lcRaportFile = getUserRepPath() + [USR_] + Juststem(tcRaport) + [.FRX] && USERREPORTS\PROGRAM\FIRMA\USR_RAPORT.FRX + IF !FILE(lcRaportFile) + lcRaportFile = Juststem(tcRaport) + [.FRX] && RAPORTUL IN EXECUTABIL + ENDIF + + RETURN lcRaportFile +ENDFUNC && getUserRepFile + +*!* Previewer rapoarte - foloseste gcReportPreviewerPath / gcAppPath pentru localizarea FoxyPreviewer.App +Procedure FoxyPreview + Lparameters tcRaport, toPreviewerConfig && tcDestinationFile, tlDontOpenFile + Local lcRaport, lcFoxyPath, lcComunContafinPath + LOCAL llOpenDestinationFile + llOpenDestinationFile = .T. + + IF TYPE('toPreviewerConfig') <> 'O' + toPreviewerConfig = CREATEOBJECT("PreviewerConfig") + ENDIF + + lcRaport = Forceext(tcRaport, 'frx') + lcFoxyPath = IIF(TYPE('gcReportPreviewerPath') = 'C', ADDBS(gcReportPreviewerPath) + "FoxyPreviewer.App", "FoxyPreviewer.App") + IF !FILE(lcFoxyPath) + lcComunContafinPath = LEFT(ADDBS(gcAppPath), RAT('\',ADDBS(gcAppPath),2)) + 'COMUNCONTAFIN\' + lcFoxyPath = lcComunContafinPath + "FoxyPreviewer.App" + IF !FILE(lcFoxyPath) + lcFoxyPath = ADDBS(GETFILE("app","FoxyPreviewer.App","Open",0,"Alegeti locatia COMUNCONTAFIN\FoxyPreviewer.App")) + ENDIF + ENDIF + + IF EMPTY(NVL(lcFoxyPath,'')) + Report Form (tcRaport) To Printer Prompt Preview + RETURN + ENDIF + + If !'FOXYPREVIEWER'$Upper(Set("Procedure")) + Set Procedure To (lcFoxyPath) Additive + Endif + + If Empty(Justpath(m.lcRaport)) && raporte in executabil - trebuie create pe disc + Local loReport As "FoxyPreviewerCaller" && Of "FoxyPreviewerCaller.Prg" + loReport = Createobject("FoxyPreviewerCaller") + Else && rapoarte pe disc + Local loReport As "PreviewHelper" Of "FoxyPreviewer.App" + loReport = Createobject("PreviewHelper") + ENDIF + + IF TYPE('loReport') <> 'O' + Report Form (tcRaport) To Printer Prompt Preview + RETURN + ENDIF + + With loReport As ReportHelper + .AddReport(m.lcRaport, toPreviewerConfig.GetValue("cClauses")) + + ********************************************** + * Optional available parameters + ********************************************** + .cTitle = toPreviewerConfig.GetValue("cTitle") + .cDestFile = toPreviewerConfig.GetValue("cDestFile") && destination file - if not empty then save without preview + + .lSendToEmail = toPreviewerConfig.GetValue("lSendToEmail") && adds the send to email button + + .lSaveToFile = toPreviewerConfig.GetValue("lSaveToFile") && adds the save to file button + .lSaveAsImage = toPreviewerConfig.GetValue("lSaveAsImage") + .lSaveAsHTML = toPreviewerConfig.GetValue("lSaveAsHTML") + .lSaveAsRTF = toPreviewerConfig.GetValue("lSaveAsRTF") + .lSaveAsXLS = toPreviewerConfig.GetValue("lSaveAsXLS") + .lSaveAsPDF = toPreviewerConfig.GetValue("lSaveAsPDF") + + .lShowCopies = toPreviewerConfig.GetValue("lShowCopies") && shows the copies spinner + .lShowMiniatures = toPreviewerConfig.GetValue("lShowMiniatures") && shows the miniatures page + .nCopies = toPreviewerConfig.GetValue("nCopies") && The quantity of copies to be printed + .lPrintVisible = toPreviewerConfig.GetValue("lPrintVisible") && shows the print button in the toolbar + .cDefaultListener = toPreviewerConfig.GetValue("cDefaultListener") + + .nCanvasCount = toPreviewerConfig.GetValue("nCanvasCount") && initial nr of pages rendered on the preview form. + *!* && Valid values are 1 (default), 2, or 4. + + .nZoomLevel = toPreviewerConfig.GetValue("nZoomLevel") && initial zoom level of the preview window. Possible values are: + *!* && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ; + *!* && 7-200%, 8-300%, 9-500%, 10-whole page + + .lPDFasImage = toPreviewerConfig.GetValue("lPDFasImage") + + .lPrinterPref = toPreviewerConfig.GetValue("lPrinterPref") + + .oListener = toPreviewerConfig.GetValue("oListener") + .cPrinterName = toPreviewerConfig.GetValue("cPrinterName") + + .nWindowState = toPreviewerConfig.GetValue("nWindowState") + .nDockType = toPreviewerConfig.GetValue("nDockType") + + .cFormIcon = toPreviewerConfig.GetValue("cFormIcon") + + .lEmailAuto = toPreviewerConfig.GetValue("lEmailAuto") + .cEmailType = toPreviewerConfig.GetValue("cEmailType") + .lEmailed = toPreviewerConfig.GetValue("lEmailed") + .cCodePage = toPreviewerConfig.GetValue("cCodePage") + + ********************************************** + loReport.RunReport() + + llOpenDestinationFile = toPreviewerConfig.GetValue("lOpenDestFile") && automatically open the destination file after save + + IF m.llOpenDestinationFile + Do Case + Case .lPrinted + *!* Messagebox("Report was printed !",64, "Report status") + Case loReport.lSaved + Messagebox("Raportul a fost salvat ca fisier: " + Chr(13) + .cDestFile, 64, _Screen.Caption) + =OPEN_DEFAULT_APP(.cDestFile) + + *!* Otherwise + *!* Messagebox("Report Preview was closed without saving or printing",48, "Report status") + + ENDCASE + ENDIF + + Endwith + +Endproc && FoxyPreview + + +*!* clasa pentru preview frx din executabil - le salveaza pe disc si apoi le previzualizeaza +DEFINE CLASS FoxyPreviewerCaller AS Custom + cPrinterName = SET("Printer",3) + + lSaveToFile = .T. && adds the save to file button + lSendToEmail = .T. && adds the send to email button + lPrintVisible = .T. && shows the print button in the toolbar + lShowCopies = .T. && shows the copies spinner + lShowMiniatures = .T. && shows the miniatures page + lPrinterPref = .T. && shows the printer preferences button + + * Output types allowed in the "Save as.." button from the toolbar + lSaveAsImage = .T. + lSaveAsHTML = .T. + lSaveAsRTF = .T. + lSaveAsXLS = .T. + lSaveAsPDF = .T. + + nPageTotal = 0 && Total pages of the current report + nCopies = 1 && The quantity of copies to be printed + cTitle = "" && The preview window title + oListener = NULL + cDefaultListener = "FXLISTENER" + nCanvasCount = 1 && initial nr of pages rendered on the preview form. + && Valid values are 1 (default), 2, or 4. + + nZoomLevel = 5 && initial zoom level of the preview window. Possible values are: + && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ; + && 7-200%, 8-300%, 9-500%, 10-whole page + + lExtended = .T. && Flag that tells if the report is being run automatically + && using the _REPORTPERVIEW global variable + + nWindowState = 0 && Normal + nDockType = .F. + + cDestFile = "" && the destination file (image, htm, pdf, etc) + lPrinted = .F. && knows if the user printed the report + lSaved = .F. && knows if the user saved the report to a file + + cFormIcon = "" && "wwrite.ico" + lEmailAuto = .T. + cEmailType = "PDF" + lEmailed = .F. + cCodePage = "CP1252" && CodePage, to be used by PDF Listener + + lPDFasImage = .F. + + * Internal use properties + _oReports = "" && Internal use, collection that contains the report names to be used + _oClauses = "" + + +PROCEDURE AddReport(tcReport, tcClauses) +* populates a collection object with the report files and clauses +* This method can be called many times, providing an easy way to merge reports. + + LOCAL lcReport, lcTempDir, lcFile + lcTempDir = ADDBS(GETENV("TEMP")) + + * Retrieve the FRX and FRT files from the EXE + lcFile = lcTempDir + "TMP_FP_" + SYS(2015) + "." + + IF EMPTY(SYS(2000, tcReport)) + STRTOFILE(FILETOSTR(FORCEEXT(tcReport,"FRX")), lcFile + "FRX") + STRTOFILE(FILETOSTR(FORCEEXT(tcReport,"FRT")), lcFile + "FRT") + ELSE + lcFile = tcReport + ENDIF + + IF VARTYPE(This._oReports) <> "O" + This._oReports = CREATEOBJECT("Collection") + This._oClauses = CREATEOBJECT("Collection") + ENDIF + This._oReports.Add(FORCEEXT(lcFile, "FRX")) + This._oClauses.Add(EVL(tcClauses,"")) +ENDPROC + + +PROCEDURE RunReport + LOCAL lcFoxyPath, lcComunContafinPath + + If !'FOXYPREVIEWER'$Upper(Set("Procedure")) + lcFoxyPath = IIF(TYPE('gcReportPreviewerPath') = 'C', ADDBS(gcReportPreviewerPath) + "FoxyPreviewer.App", "FoxyPreviewer.App") + IF !FILE(lcFoxyPath) + lcComunContafinPath = LEFT(ADDBS(gcAppPath), RAT('\',ADDBS(gcAppPath),2)) + 'COMUNCONTAFIN\' + lcFoxyPath = lcComunContafinPath + "FoxyPreviewer.App" + IF !FILE(lcFoxyPath) + lcFoxyPath = ADDBS(GETFILE("app","FoxyPreviewer.App","Open",0,"Alegeti locatia COMUNCONTAFIN\FoxyPreviewer.App")) + ENDIF + ENDIF + IF EMPTY(NVL(lcFoxyPath,'')) + Report Form (tcRaport) To Printer Prompt Preview + RETURN + ENDIF + + Set Procedure To (lcFoxyPath) Additive + ENDIF + + + LOCAL loReport as "PreviewHelper" OF "FoxyPreviewer.App" + loReport = CREATEOBJECT("PreviewHelper") + + WITH loReport + + LOCAL n, lnCount + lnCount = This._oReports.Count + FOR n = 1 TO lnCount + loReport.AddReport(This._oReports(n), This._oClauses(n)) + ENDFOR + + .cTitle = This.cTitle + .lSendToEmail = This.lSendToEmail + .lSaveToFile = This.lSaveToFile + .lShowCopies = This.lShowCopies + .lShowMiniatures = This.lShowMiniatures + .lPrintVisible = This.lPrintVisible + .lPrinterPref = This.lPrinterPref + + .nCopies = This.nCopies + .lPrintVisible = This.lPrintVisible + .cDefaultListener = This.cDefaultListener + .nCanvasCount = This.nCanvasCount + .nZoomLevel = This.nZoomLevel + .oListener = This.oListener + .cPrinterName = This.cPrinterName + + .lSaveAsImage = This.lSaveAsImage + .lSaveAsHTML = This.lSaveAsHTML + .lSaveAsRTF = This.lSaveAsRTF + .lSaveAsXLS = This.lSaveAsXLS + .lSaveAsPDF = This.lSaveAsPDF + + .nWindowState = This.nWindowState + .nDockType = This.nDockType + .cDestFile = This.cDestFile + + IF NOT EMPTY(This.cFormIcon) + .cFormIcon = This.cFormIcon + ENDIF + + .lEmailAuto = This.lEmailAuto + .cEmailType = This.cEmailType + .lEmailed = This.lEmailed + .cCodePage = This.cCodePage + + .lPDFasImage = This.lPDFasImage + ENDWITH + + loReport.RunReport(This) && This flag will tell FoxyPreviewer that it has a caller object in an EXE + && The main class will update the properties "lSaved" and "lPrinted" + +ENDPROC + +PROCEDURE Destroy + * Clean up, delete the temporary FRX files + LOCAL n, lnCount, lcFile + lnCount = This._oReports.Count + FOR n = 1 TO lnCount + lcFile = This._oReports(n) + IF LEFT(JUSTFNAME(lcFile),7) = "TMP_FP_" && We have a temp FRX file to delete + TRY + DELETE FILE (lcFile) + DELETE FILE FORCEEXT(lcFile, "FRT") + CATCH + ENDTRY + ENDIF + ENDFOR +ENDPROC + +ENDDEFINE + +DEFINE CLASS PreviewerConfig as Custom + cPrinterName = SET("Printer",3) + + lSaveToFile = .T. && adds the save to file button + lSendToEmail = .T. && adds the send to email button + lPrintVisible = .T. && shows the print button in the toolbar + lShowCopies = .T. && shows the copies spinner + lShowMiniatures = .T. && shows the miniatures page + lPrinterPref = .T. && shows the printer preferences button + + * Output types allowed in the "Save as.." button from the toolbar + lSaveAsImage = .T. + lSaveAsHTML = .T. + lSaveAsRTF = .T. + lSaveAsXLS = .T. + lSaveAsPDF = .T. + + nPageTotal = 0 && Total pages of the current report + nCopies = 1 && The quantity of copies to be printed + cTitle = "" && The preview window title + oListener = NULL + cDefaultListener = "FXLISTENER" + nCanvasCount = 1 && initial nr of pages rendered on the preview form. + && Valid values are 1 (default), 2, or 4. + + nZoomLevel = 5 && initial zoom level of the preview window. Possible values are: + && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ; + && 7-200%, 8-300%, 9-500%, 10-whole page + + lExtended = .T. && Flag that tells if the report is being run automatically + && using the _REPORTPERVIEW global variable + + nWindowState = 0 && Normal + nDockType = .F. + + cDestFile = "" && the destination file (image, htm, pdf, etc) + lOpenDestFile = .T. && automatically open the destination file after save +*!* lPrinted = .F. && knows if the user printed the report +*!* lSaved = .F. && knows if the user saved the report to a file + + cFormIcon = "" && "wwrite.ico" + lEmailAuto = .T. + cEmailType = "PDF" +*!* lEmailed = .F. + cCodePage = "CP1252" && CodePage, to be used by PDF Listener + + lPDFasImage = .F. && save PDF as image + cClauses = "" + + + + PROCEDURE Init + * + ENDPROC && Init + +*!* Seteaza valoarea unei proprietati daca exista sau adauga proprietatea, si intoarce valoarea + Procedure SetValue + Lparameters tcProperty, tuValue + + If Type('THIS.&tcProperty') <> 'U' + This.&tcProperty = tuValue + Else + This.AddProperty(tcProperty, tuValue) + Endif + + Return This.&tcProperty + + Endproc && SetValue + +*!* Intoarce valoarea unei proprietati daca exista, altfel valoarea empty() corespunzator tipului proprietatii + Function GetValue + Lparameters tcProperty + + Local lcProperty, luValue + lcProperty = 'THIS.' + tcProperty + + If Type('THIS.&tcProperty') <> 'U' + luValue = This.&tcProperty + Else + luValue = This.GetDefaultValue(tcProperty) + Endif + Return luValue + + Endfunc && GetValue + +*!* Intoarce valoarea empty() a unei proprietati dupa tip = prima litera din numele proprietatii daca nu primeste decat tcProperty +*!* Converteste tcValue la tipul variabilei tcProperty daca tcValue e primit ca parametru + Function GetDefaultValue + Lparameters tcProperty, tcValue + + Local lcType, luValue + luValue = "" + lcType = Upper(Left(tcProperty,1)) + llEmptyValue = Iif(Pcount() = 1, .T., .F.) + + Do Case + Case lcType $ "CM" + luValue = Iif(llEmptyValue, '', tcValue) + Case lcType $ "NIF" + luValue = Iif(llEmptyValue, 0, Val(tcValue)) + Case lcType = "T" + luValue = Iif(llEmptyValue, Dtot({}), Ctot(tcValue)) + Case lcType = "D" + luValue = Iif(llEmptyValue, {}, Ctod(tcValue)) + Case lcType = "L" + luValue = Iif(llEmptyValue, .F., Iif(tcValue = "1" Or Upper(tcValue) = "T" Or Upper(tcValue) = '.T.' Or Upper(tcValue) = 'YES', .T., .F.)) + Otherwise + luValue = "" + Endcase + + Return luValue + Endfunc && GetDefaultValue + +*!* Intoarce .T. daca exista proprietatea + Function HasProperty + Lparameters tcProperty + + Local lcProperty, llReturn + lcProperty = 'THIS.' + tcProperty + llReturn = .F. + + If Type('THIS.&tcProperty') <> 'U' + llReturn = .T. + Endif + + Return llReturn + + Endfunc && HasProperty +ENDDEFINE && PreviewerConfig \ No newline at end of file diff --git a/programe/rbinputbox.prg b/programe/rbinputbox.prg new file mode 100644 index 0000000..9b18ef2 --- /dev/null +++ b/programe/rbinputbox.prg @@ -0,0 +1,279 @@ +*-------------------------------------------------------- +* Function Name.: rbInputBox() +* +* Author........: Rick Borup +* Information Technology Associates +* Champaign, IL U.S.A. +* http://www.ita-software.com +* rborup@ita-software.com +* +* Date Written..: March 20, 2000 +* +* Date Released.: April 27, 2000 +* +* Date Revised..: January 30, 2003 +* +* Abstract......: A simple, general-purpose input box for Visual FoxPro. +* +* Parameters....: (All parameters are optional.) +* +* tcPrompt - the prompt that the user sees. +* The default is "Enter the value". +* +* tcTitle - the title for the form. +* The default is "InputBox". +* +* txDefaultValue - default value. +* This parameter can be a character, date, numeric, or +* currency data type. If this parameter is omitted, an +* empty textbox is displayed and the data type is character. +* The data type of the return value is the same as the +* data type of the default value. +* +* tnLeft - the form's Left position +* +* tnTop - the form's Top position. +* +* If Left and Top are omitted or are not numeric, rbInputBox() +* is auto-centered. +* +* tcFormat - a value for the Format property of the textbox +* +* tcInputMask - a value for the InputMask property of the textbox +* +* tcPasswordChar - a value for the textbox's PasswordChar value +* (the default is blank) +* +* Returns.......: Character, Date, Numeric, or Currency depending +* on the data type of the default value +* +* If the Cancel button is chosen, rbInputBox() returns +* an empty value of the appropriate data type. +* +* Copyright.....: Copyright (c) Information Technology Associates, 2000-2003 +* +* License.......: rbInputBox() is freeware. You may include rbInputBox() +* royalty-free inside a compiled Visual FoxPro APP or EXE +* that you create for your own use or for distribution to +* a third party. +* +* You may redistribute the rbInputBox() distribution +* package, INPUTBOX.ZIP, as long as (a) you distribute +* INPUTBOX.ZIP in its entirety and without modifications, +* and (b) you do not charge anything for it. +* +* Warranty......: NONE. This code is released AS IS without warranty +* of any kind. The user assumes all responsibility and +* liability for its use. +* +* Support.......: NONE, but your comments and suggestions for improvements +* are welcome. Please e-mail rborup@ita-software.com or +* reach me via the Universal Thread at +* http://www.universalthread.com. +* +* Release History:January 30, 2003 - Renamed as "rbInputBox" to avoid conflict +* with the native InputBox() function in +* VFP 7.0 and later. +* - Added tcPasswordChar as 8th parameter +* +* May 2, 2000 - Corrected errata in the readme.txt file. +* +* April 27, 2000 - Original Release +* +* Known Limitations: +* The original release of rbInputBox does not automatically +* resize the form or any of its controls. The current +* sizes are designed to be adequate for most simple input +* functions. There is no arbitrary limitations, other than +* VFP's own inherent limitations, on the size of the return +* value. However, long titles, prompts, or entered values may +* appear truncated on the form. +* +FUNCTION rbInputBox +lparameters tcPrompt, tcTitle, txDefaultValue, tnLeft, tnTop, ; + tcFormat, tcInputMask, tcPasswordChar +private pcReturnValue +pcReturnValue = txDefaultValue +local oInputBox +oInputBox = CreateObject("rbInputBox", tcPrompt, tcTitle, ; + txDefaultValue, tnLeft, tnTop, ; + tcFormat, tcInputMask, tcPasswordChar) +oInputBox.Show() +RETURN pcReturnValue + + +************************************************** +*-- Class: rbinputbox +*-- ParentClass: form +*-- BaseClass: form +*-- Time Stamp: 01/29/03 01:03:14 PM +* +DEFINE CLASS rbinputbox AS form + + + Height = 113 + Width = 318 + DoCreate = .T. + AutoCenter = .T. + Caption = "Input Box" + ControlBox = .F. + WindowType = 1 + Name = "frmInputBox" + + *-- empty value to return if Cancel is chosen; data type depends on data type of txValueIn + xemptyvalue = .F. + + *-- the default value (if any) + xdefaultvalue = .F. + + *-- the return value + xreturnvalue = .F. + + + ADD OBJECT lblinputbox AS label WITH ; + FontName = "Arial", ; + FontSize = 9, ; + Alignment = 1, ; + Caption = "Enter the value", ; + Height = 20, ; + Left = 6, ; + Top = 26, ; + Width = 190, ; + TabIndex = 1, ; + Name = "lblInputBox" + + + ADD OBJECT txtinputbox AS textbox WITH ; + FontName = "Arial", ; + FontSize = 9, ; + Century = 1, ; + Height = 24, ; + Left = 202, ; + SelectOnEntry = .T., ; + TabIndex = 2, ; + Top = 22, ; + Width = 110, ; + Name = "txtInputBox" + + + ADD OBJECT cmdok AS commandbutton WITH ; + Top = 72, ; + Left = 84, ; + Height = 24, ; + Width = 72, ; + Caption = "OK", ; + Default = .T., ; + TabIndex = 3, ; + Name = "cmdOK" + + + ADD OBJECT cmdcancel AS commandbutton WITH ; + Top = 72, ; + Left = 172, ; + Height = 24, ; + Width = 72, ; + Cancel = .T., ; + Caption = "Cancel", ; + TabIndex = 4, ; + Name = "cmdCancel" + + + PROCEDURE Unload + with thisform + if type(".xReturnValue") = "C" + .xReturnValue = RTRIM( .xReturnValue) + endif + pcReturnValue = .xReturnValue + endwith + ENDPROC + + + PROCEDURE Init + lparameters tcPrompt, tcTitle, txDefaultValue, tnLeft, tnTop, ; + tcFormat, tcInputMask, tcPasswordChar + if type("tcPrompt") <> "C" + tcPrompt = "Enter the value" + endif + if type("tcTitle") <> "C" + tcTitle = "Input Box" + endif + if !( type("txDefaultValue") $ "CDNY") + * Valid input data types are C, D, N, and Y + txDefaultValue = "" && default to character data type + endif + if type("tcFormat") <> "C" + tcFormat = "" + endif + if type("tcInputMask") <> "C" + tcInputMask = "" + endif + if type("tcPasswordChar") <> "C" + tcPasswordChar = "" + endif + if len( alltrim( tcPasswordChar)) > 1 + tcPasswordChar = left( tcPasswordChar, 1) + endif + local llAutoCenter + if pcount() < 5 && Top and Left parameters were not passed + tnLeft = 0 + tnTop = 0 + else && Top and left parameters were passed but may not be numeric + if type("tnTop") = "N" and type("tnLeft") = "N" && both are numeric + llAutoCenter = .F. + else && one or both is not numeric, so AutoCenter the form + tnLeft = 0 + tnTop = 0 + llAutoCenter = .T. + endif + endif + + with thisform + .lblInputBox.caption = ALLTRIM( tcPrompt) + .caption = ALLTRIM( tcTitle) + .xDefaultValue = txDefaultValue + .xReturnValue = .xDefaultValue + .txtInputBox.value = .xDefaultValue + .txtInputBox.format = ALLTRIM( tcFormat) + .txtInputBox.InputMask = ALLTRIM( tcInputMask) + .txtInputBox.PasswordChar = tcPasswordChar + .Top = tnTop + .Left = tnLeft + .AutoCenter = llAutoCenter && Set AutoCenter last so it overrides Top and Left if .T. + + do case + case type("txDefaultValue") = "D" + .xEmptyValue = {} + case type("txDefaultValue") = "N" + .xEmptyValue = 0 + case type("txDefaultValue") = "Y" + .xEmptyValue = $0 + otherwise + .xEmptyValue = "" + endcase + endwith + ENDPROC + + + PROCEDURE cmdok.Click + with thisform + .xReturnValue = .txtInputBox.value + .release() + endwith + ENDPROC + + + PROCEDURE cmdcancel.Click + * + * If Cancel was chosen, return the empty value of the correct data type. + * + with thisform + .xReturnValue = .xEmptyValue + .release() + endwith + ENDPROC + + +ENDDEFINE +* +*-- EndDefine: rbinputbox +************************************************** diff --git a/programe/regex.prg b/programe/regex.prg new file mode 100644 index 0000000..1b61645 --- /dev/null +++ b/programe/regex.prg @@ -0,0 +1,160 @@ +*!* CLEAR +*!* ?strtranx([ana are 1234567890.1234 lei], [\s\d+\.\d\s], [=TRANSFORM($1, "999 999 999 999.99")]) +*?strtranx([ana are <<1234567890.1234>> lei], [<<], [=TRANSFORM($1, "AA")]) +*!* RETURN + +*-- http://www.cornerstonenw.com/article_id_parsing3.htm + +*-- count words +? OccursRegExp("\b(\w+)\b", [the then quick quick brown fox fox]) +&& prints 7 + +*-- count repeatedwords +? OccursRegExp("\b(\w+)\s\1\b", [the then quick quick brown fox fox]) +&& prints 2 + + +*-- replace first and second lower-case "a" +? strtranx([Abracadabra],[a],[*],1,2) +&& prints Abr*c*dabra + +*-- replace first and second "a" case-insensitive +? strtranx([Abracadabra],[a],[*],1,2,1) +&& prints *br*cadabra + +*-- locate the replacement targets +? strtranx([Abracadabra],[^a|a$],[*],1,2,0) +&& Abracadabr* +? strtranx([Abracadabra],[^a|a$],[*],1,2,1) +&& *bracadabr* + + +lcText = "The cost, is $123,345.75. " +*-- convert the commas +lcText = strtranx( m.lcText, "(\d{1,3})\,(\d{1,}) ","$1 $2" ) + +*-- convert the decimals +? strtranx( m.lcText, "(\d{1,3})\.(\d{1,})", "$1,$2" ) + +** prints "The cost, is $123 345,75." + +*-- add 1 to all digits +? strtranx( [ABC123], "(\d)", [=TRANSFORM(VAL($1)+1)] ) +** prints "ABC234" + +*-- convert all dates to long format +? strtranx( [the date is: 7/18/2004 ] , [(\d{1,2}/\d{1,2}/\d{4})], [=TRANSFORM(CTOD($1),"@YL")]) +** prints "the date is: Sunday, July 18, 2004" + +*---------------------------------------------------------- +FUNCTION StrtranRegExp( tcSourceString, tcPattern, tcReplace ) + LOCAL loRE + loRE = CREATEOBJECT("vbscript.regexp") + WITH loRE + .PATTERN = tcPattern + .GLOBAL = .T. + .multiline = .T. + RETURN .REPLACE( tcSourceString , tcReplace ) + ENDWITH +ENDFUNC + +*---------------------------------------------------------- +FUNCTION OccursRegExp(tcPattern, tcText) + LOCAL loRE, loMatches, lnResult + loRE = CREATEOBJECT("vbscript.regexp") + WITH loRE + .PATTERN = m.tcPattern + .GLOBAL = .T. + .multiline = .T. + loMatches = loRE.Execute( m.tcText ) + lnResult = loMatches.COUNT + loMatches = NULL + ENDWITH + RETURN m.lnResult +ENDFUNC + + + +*---------------------------------------------------------- +FUNCTION strtranx(tcSearched, ; + tcSearchFor, ; + tcReplacement, ; + tnStart, tnNumber, ; + tnFlag ) + + *-- the final version of the UDF + LOCAL loRE, lcText, lnShift, lcCommand,; + loMatch, loMatches, lnI, lnK, lcSubMatch,; + llevaluate, lcMatchDelim, lcReplaceText, lcReplacement,; + lnStart, lnNumber, loCol, lcKey + + loRE = CREATEOBJECT("vbscript.regexp") + + WITH loRE + .PATTERN = m.tcSearchFor + .GLOBAL = .T. + .multiline = .T. + .ignorecase = IIF(VARTYPE(m.tnFlag)=[N],m.tnFlag = 1,.F.) + ENDWITH + + lcReplacement = m.tcReplacement + + *--- are we evaluating? + IF m.lcReplacement = [=] + llevaluate = .T. + lcReplacement = SUBSTR( m.lcReplacement, 2 ) + ENDIF + + IF VARTYPE( m.tnStart )=[N] + lnStart = m.tnStart + ELSE + lnStart = 1 + ENDIF + + IF VARTYPE( m.tnNumber) =[N] + lnNumber = m.tnNumber + ELSE + lnNumber = -1 + ENDIF + + IF m.lnStart>1 OR m.lnNumber#-1 OR m.llevaluate + + lcText = m.tcSearched + lnShift = 1 + loMatches = loRE.execute( m.lcText ) + loCol = CREATEOBJECT([collection]) + lnNumber = IIF( lnNumber=-1,loMatches.COUNT,MIN(lnNumber,loMatches.COUNT)) + + FOR lnK = m.lnStart TO m.lnNumber + loMatch = loMatches.ITEM(m.lnK-1) && zero based + lcCommand = m.lcReplacement + FOR lnI= 1 TO loMatch.submatches.COUNT + lcSubMatch = loMatch.submatches(m.lnI-1) && zero based + IF m.llevaluate + * "escape" the string we are about to use in an evaluation. + * it is important to escape due to possible delim chars (like ", ' etc) + * malicious content, or VFP line-length violations. + lcKey = ALLTRIM(TRANSFORM(m.lnK)+[_]+TRANSFORM(m.lnI)) + loCol.ADD( m.lcSubMatch, m.lcKey ) + lcSubMatch = [loCol.item(']+m.lcKey+[')] + ENDIF + lcCommand = STRTRAN( m.lcCommand, "$" + ALLTRIM( STR( m.lnI ) ) , m.lcSubMatch) + ENDFOR + + IF m.llevaluate + TRY + lcReplaceText = EVALUATE( m.lcCommand ) + CATCH TO loErr + lcReplaceText="[[ERROR #"+TRANSFORM(loErr.ERRORNO)+[ ]+loErr.MESSAGE+"]]" + ENDTRY + ELSE + lcReplaceText = m.lcCommand + ENDIF + lcText = STUFF( m.lcText, loMatch.FirstIndex + m.lnShift, m.loMatch.LENGTH, m.lcReplaceText ) + lnShift = m.lnShift + LEN( m.lcReplaceText ) - m.loMatch.LENGTH + ENDFOR + ELSE + lcText = loRE.REPLACE( m.tcSearched, m.tcReplacement ) + ENDIF + RETURN m.lcText +ENDFUNC \ No newline at end of file diff --git a/programe/testmerge.prg b/programe/testmerge.prg new file mode 100644 index 0000000..511220e --- /dev/null +++ b/programe/testmerge.prg @@ -0,0 +1,20 @@ +#DEFINE CRLF Chr(13) + Chr(10) +SET PROCEDURE TO D:\ROA_RB\ROAPRINT\COMUN\UTILE\WEB\htmlmerge.prg ADDITIVE +SET PROCEDURE TO D:\ROA_RB\ROAPRINT\COMUN\PROGRAME\regex.prg ADDITIVE +lcTemplate = "c:\roaprint_initializari\totals_win.tmpl" +Create cursor bon (TIP N(2),DENUMIRE C(50),CANTITATE N(10,4),PRET N(10,4),UM C(10),COTATVA N(5,2),DEPARTAMENT N(2)) +Insert into bon(tip, denumire, cantitate, pret, um, cotatva, departament) values (1,'ARTICOL 1', 1, 10.00, 'BUC', 1.19, 1) +loHTML = CREATEOBJ('HTMLMerge') +lcText = FILETOSTR(lcTemplate) +lcText = loHTML.ScanMerge(lcText) +lcText = loHTML.cHtml +MessageBox(lcText) +lcText = strtranregexp(lcText,"(^<.*>\r*\n*)", "") && <...> + chr(13) + chr(10) +Debug +Suspend +lnPos = At(CRLF+CRLF,lcText) +Do while lnPos > 0 + lcText = Strtran(lcText, CRLF+CRLF, CRLF) + lnPos = At(CRLF+CRLF,lcText) +EndDo +MessageBox(lcText) diff --git a/programe/utile.prg b/programe/utile.prg new file mode 100644 index 0000000..471ebc6 --- /dev/null +++ b/programe/utile.prg @@ -0,0 +1,293 @@ +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* lnOption = xmenu('\ 0 + lcXMLDirectory = lcXMLDirectory + Alltrim(tcCustomer_name) + '\' + Endif + + Return lcXMLDirectory + + Endfunc +Enddefine && Config + + +********************** inceput versiune ************************* +Procedure versiune + Lparameters lcvers + + External Array laVers + Local lcVersiune, lnNr + lcVersiune = [] + + lnNr = Alines(laVers,Nvl(lcvers,[]),.T.,".") + If lnNr > 1 + For i =1 To lnNr + laVers(i) = Replicate("0",3 - Len(Alltrim(Nvl(laVers(i),[])))) + laVers(i) + lcVersiune = lcVersiune + laVers(i) + "." + Endfor + lcVersiune = Left(lcVersiune,Len(lcVersiune)-1) + Else + lcVersiune = lcvers + Endif + Return lcVersiune + +Endproc +********************* versiune ^ ******************************** + + +**************************** inceput cmdPagToate ************************** +Define Class cmdPagToate As CommandButton && Create Command button + Left = 50 && Command button column + Top = 100 && Command button row + Height = 25 && Command button height + Visible = .T. + ToolTipText = "Toate inregistrarile" + Caption = "\ ] + lcp1 + + This.Parent.save_grid(This.Parent.grid1) + executasql(lcSql,This.Parent.cCursor,.T.) + Select (This.Parent.cCursor) + If Reccount() = 0 + executasql(lcSqlBackup,This.Parent.cCursor,.T.) + This.Parent.npag1 = 0 + This.Parent.npag2 = 25 + Endif + This.Parent.restore_grid(This.Parent.grid1) + Endproc +Enddefine +************************ sfarsit cmdPagUrmatoare ^ ******************************** \ No newline at end of file diff --git a/programe/xrecurse.prg b/programe/xrecurse.prg new file mode 100644 index 0000000..e8cdd3e --- /dev/null +++ b/programe/xrecurse.prg @@ -0,0 +1,101 @@ +* Test Source Code +x=CREATE('FilesList') +*!* SET TEXTMERGE ON TO TestRecurse NOSHOW +x.FileExtensions = 'sql' +x.Recurse("D:\ROA_RB\DATABASE\SCRIPTURI\") + +*!* SET TEXTMERGE TO +*!* MODI COMM TestRecurse.txt + + +DEFINE CLASS FilesList AS Recurse + + * + PROCEDURE INIT + DODEFAULT() + + CREATE CURSOR dirlist (DirName C(100), FileName C(250) , FileExt C(3), ; + rty C(1), FileAttr C(5), FileSize N(12,1), DateMod D, TimeMod C(12)) + ENDPROC && Init + * +*!* PROCEDURE ProcessDir(tcDir, tcParentDir) +*!* DODEFAULT() +*!* ENDPROC + PROCEDURE ProcessFile(tcFile, tnSize, tdLastMod, tcTime, tcAttr) + + LOCAL loRec + IF !USED('dirlist') + RETURN + ENDIF + + SELECT dirlist + SCATTER NAME loRec BLANK + WITH loRec + .rty='F' + .DirName = JUSTPATH(tcFile) + .FileAttr = tcAttr + .FileName = JUSTFNAME(tcFile) + .FileExt = JUSTEXT(tcFile) + .FileSize = IIF(tnSize > 0, ROUND(tnSize/1024,1) ,0 ) + .DateMod = tdLastMod + .TimeMod = tcTime + ENDWITH + + if len(allt(this.FileExtensions)) > 0 + if atc(loRec.FileExt , this.FileExtensions ) = 0 + return + endif + endif + + INSERT INTO dirlist FROM NAME loRec + ENDPROC && ProcessFile + +ENDDEFINE && FilesList + +DEFINE CLASS Recurse AS CUSTOM + + FileExtensions = "" && what file extensions it process + + PROCEDURE ProcessFile(tcFile, tnSize, tdLastMod, tcTime, tcAttr) + * Abstract Method to be overridden in subclasses that actually do something + ENDPROC + + PROCEDURE ProcessDir(tcDir, tcParentDir) + * Override this method as desired. + ENDPROC + + FUNCTION Recurse + LPARAMETERS pcDir + LOCAL lnPtr, lnFileCount, laFileList, lcDir, lcFile, lcCurDir + lcCurDir = FULLPATH(CURDIR()) + CHDIR (pcDir) + *? 'Dir -> ' + FULLPATH(CURDIR()) + + DIMENSION laFileList[1] + + *--- Read the chosen directory. + lnFileCount = ADIR(laFileList, '*.*', 'D') + FOR lnPtr = 1 TO lnFileCount + + IF 'D' $ laFileList[lnPtr, 5] + *--- Get directory name. + lcDir = laFileList[lnPtr, 1] + + *--- Ignore current and parent directory pointers. + IF lcDir != '.' AND lcDir != '..' + *--- Call this routine again. + THIS.ProcessDir(lcDir, pcDir) + THIS.Recurse(ADDBS(pcDir)+lcDir) + ENDIF + + ELSE + *--- Get the Long file name and process it: + THIS.ProcessFile( ADDBS(pcDir)+laFileList[lnPtr, 1], laFileList[lnPtr, 2], laFileList[lnPtr, 3], laFileList[lnPtr, 4], laFileList[lnPtr, 5] ) + ENDIF + ENDFOR + + *--- Move back to parent directory. + CHDIR (lcCurDir) + RETURN + ENDFUNC +ENDDEFINE diff --git a/programe_changelogs.xml b/programe_changelogs.xml new file mode 100644 index 0000000..ad9833b --- /dev/null +++ b/programe_changelogs.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rapoarte/rap_clienti.FRT b/rapoarte/rap_clienti.FRT new file mode 100644 index 0000000..bc21fde Binary files /dev/null and b/rapoarte/rap_clienti.FRT differ diff --git a/rapoarte/rap_clienti.frx b/rapoarte/rap_clienti.frx new file mode 100644 index 0000000..ef7d19d Binary files /dev/null and b/rapoarte/rap_clienti.frx differ diff --git a/rapoarte/rap_clienti_special.FRT b/rapoarte/rap_clienti_special.FRT new file mode 100644 index 0000000..e75de39 Binary files /dev/null and b/rapoarte/rap_clienti_special.FRT differ diff --git a/rapoarte/rap_clienti_special.frx b/rapoarte/rap_clienti_special.frx new file mode 100644 index 0000000..280e9b5 Binary files /dev/null and b/rapoarte/rap_clienti_special.frx differ diff --git a/rapoarte/rap_inform.FRT b/rapoarte/rap_inform.FRT new file mode 100644 index 0000000..6f6b3c8 Binary files /dev/null and b/rapoarte/rap_inform.FRT differ diff --git a/rapoarte/rap_inform.frx b/rapoarte/rap_inform.frx new file mode 100644 index 0000000..751877c Binary files /dev/null and b/rapoarte/rap_inform.frx differ diff --git a/rapoarte/semnatura_stampila_marius_mutu_romfast.jpg b/rapoarte/semnatura_stampila_marius_mutu_romfast.jpg new file mode 100644 index 0000000..d163f65 Binary files /dev/null and b/rapoarte/semnatura_stampila_marius_mutu_romfast.jpg differ diff --git a/roa-noutati-template-htmlmerge.xml b/roa-noutati-template-htmlmerge.xml new file mode 100644 index 0000000..98e4537 --- /dev/null +++ b/roa-noutati-template-htmlmerge.xml @@ -0,0 +1,25 @@ + + + + +Noutati ROA +http://www.romfast.ro +Noutati +en-us +Copyright <%=YEAR(DATE())%> +<%=RFC822Date(DATETIME())%> +http://blogs.law.harvard.edu/tech/rss + +<%=VERSION()%> +60 +
+ +<%=HTMLFix(title)%> +<%=HTMLFix(Description)%> +<%=RFC822Date(DATETIME())%> +<%=HTMLFix(Link)%> +roa.romfast.ro.<%=guid%> + +
+ + \ No newline at end of file diff --git a/settings.ini.tmpl b/settings.ini.tmpl new file mode 100644 index 0000000..c5c3bc7 --- /dev/null +++ b/settings.ini.tmpl @@ -0,0 +1,54 @@ +[connection] +host=CENTRAL +username=SOFT +password=YOUR_PASSWORD + +host_serii=ROA_CENTRAL +username_serii=SOFT_SERII +password_serii=YOUR_PASSWORD_SERII + +host_database=ROA_CENTRAL +username_database=contafin_oracle +password_database=YOUR_PASSWORD_DATABASE + +idutilizator=5 +[script] +CONTAFIN_ORACLE=CO_ +SCHEMAROA=FF_ +SOFT_SERII=RF_ +SYS=SYS_ +CONTABILITATE=JCS_ + +[folder] +actualizare=actualizariaplicatii\ +script_folder=D:\ROA\DATABASE\SCRIPTURI\ +roa_proiecte=D:\ROA\ +roa_output=Y:\ROAUPDATE\ +roa_arhive=Y:\ROAUPDATE\_ARHIVE\ +contafin_output=Y:\_CONTAFINUPDATE\XOUTPUT\ +contafin_arhive=Y:\_CONTAFINUPDATE\ +criptare_exe=. +contafin_proiecte=D:\CONTAFIN\ +xml_aplicatii=Y:\ROAUPDATE +xml_aplicatii_4450=EDUARD +xml_aplicatii_1281=STEAUANORDULUI +xml_aplicatii_1284=FRUVIMED +xml_aplicatii_4751=ROMCONSTRUCT +xml_aplicatii_4711=SIGMA +xml_aplicatii_2=ABCVAL +xml_aplicatii_11=ARGENTA +xml_aplicatii_31=CONPRESS +xml_aplicatii_102=UTMIDIA +xml_aplicatii_2468=METACOM +sqlplus_exe=D:\ORACLEINSTANTCLIENT\SQLPLUS.EXE +dummy_sql=d:\roa\database\altele\dummy.sql +xml_aplicatii_1701=ROMFAST +log_folder=D:\LOGS\ +xml_aplicatii_4742=DEMOROA +xml_aplicatii_4775=DEVROA + +[wrap] +wrap_server_path = \\YOUR_WRAP_SERVER\wrap +wrap_server_output_path = \\YOUR_WRAP_SERVER\wrap\output +wrap_ext = wrp +wrap_timeout = 30 diff --git a/tasks.PJT b/tasks.PJT new file mode 100644 index 0000000..ae6f192 Binary files /dev/null and b/tasks.PJT differ diff --git a/tasks.pjx b/tasks.pjx new file mode 100644 index 0000000..06f75f3 Binary files /dev/null and b/tasks.pjx differ diff --git a/todo.txt b/todo.txt new file mode 100644 index 0000000..b466a50 --- /dev/null +++ b/todo.txt @@ -0,0 +1,15 @@ +ACTUALIZARE ROA - DE VERIFICAT DACA EXISTA EXECUTABILELE SI SCRIPTURILE + + ret = xmenu("Rapoarte speciale clienti;Rapoarte clienti CONTAFIN;Rapoarte clienti ROA;Soft trimis la clienti;Soft trimis la clienti (alegere manuala a versiunilor)") + Do Case + Case ret = 1 + Do rapoarte_speciale_cl + Case ret = 2 + Do rapoarte_cl_CONTAFIN + Case ret = 3 + Do rapoarte_cl_ROA + Case ret = 4 + Do soft_trimis_cl + CASE ret = 5 + DO soft_trimis_cl_manual + Endcase \ No newline at end of file diff --git a/utile/foxypreviewer.app b/utile/foxypreviewer.app new file mode 100644 index 0000000..6a64c42 Binary files /dev/null and b/utile/foxypreviewer.app differ diff --git a/utile/libhpdf.dll b/utile/libhpdf.dll new file mode 100644 index 0000000..91f84fa Binary files /dev/null and b/utile/libhpdf.dll differ