0% au considerat acest document util (0 voturi)
30 vizualizări95 pagini

DPXBASE

Documentul oferă o prezentare detaliată a programării în cadrul sistemului AdaptaPro, incluzând structura bazei de date, utilizarea dicționarului de date și avantajele sistemului. Se discută despre caracteristicile bazelor de date relaționale, precum și despre funcționalitățile și modulele disponibile în mediu de dezvoltare DPXBASE. De asemenea, se menționează limbajele de programare utilizate, cum ar fi xHarbour și Harbour, și se subliniază importanța documentației și a autonomiei utilizatorului în gestionarea sistemului.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
30 vizualizări95 pagini

DPXBASE

Documentul oferă o prezentare detaliată a programării în cadrul sistemului AdaptaPro, incluzând structura bazei de date, utilizarea dicționarului de date și avantajele sistemului. Se discută despre caracteristicile bazelor de date relaționale, precum și despre funcționalitățile și modulele disponibile în mediu de dezvoltare DPXBASE. De asemenea, se menționează limbajele de programare utilizate, cum ar fi xHarbour și Harbour, și se subliniază importanța documentației și a autonomiei utilizatorului în gestionarea sistemului.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Programare

TABLA DE CONTENUT

Programare........................................................................................................................................................3

Fiș iere..............................................................................................................................................................21
Aplicaț ii sau Modul al Sistemului....................................................................................................................21
Tabla de Date.................................................................................................................................................22
Generatoare de Browses sau Liste.....................................................................................................................23
Opțiuni pentru Câmpurile..........................................................................................................................24
Meniu de Acces...............................................................................................................................................26
Definiția Meniu.....................................................................................................................................26
Programe Surse Dpxbase..........................................................................................................................27
Butonii de la Barra de Meniu Principal.............................................................................................................30
Personalizarea mesajelor în bara de butoane...............................................................................................30
Legătură ÎntreTablas..........................................................................................................................................31

Alte funcț ii..................................................................................................................................................31


Generatoare de Rapoarte.....................................................................................................................................31
Proiectarea formularelor......................................................................................................................................31

Continuitate în Datapro ParaTablas DBF..........................................................................................................34


Continuitate în Lexicul Xbase Din Produsele DOS..................................................................................34
Componente Dataset........................................................................................................................................35
Clase Tdataset:............................................................................................................................................36
Funcț ii pentru Declaraț ii SQL........................................................................................................................38
Funcț ii pentru gestionarea datelor...................................................................................................................39
Deschide tabela(Csql,Ldata).................................................................................................................................39
Asql(Csql)...................................................................................................................................................39
Sqldelete(Ctabla,Cwhere).............................................................................................................................40
Sqlupdate(Ctabla,Ccampo,Xvalor,,Cwhere)....................................................................................................40
Sqlget(Ctabelă,Ccâmp,Cunde)....................................................................................................................40
Dtosql(Dfecha).............................................................................................................................................40
Sqltodate(Cfecha)........................................................................................................................................41
Bdlist(Ctable,Afields,Lgroup,Cwhere).............................................................................................................41
Bdselect(Ctable,Afields,Lgroup,Cwhere).......................................................................................................42
Obiecte............................................................................................................................................................43
Arhive de Ajutor............................................................................................................................................45

Clase Proprietare Datapro46


Tpublic............................................................................................................................................................46
Masă..............................................................................................................................................................47

Manualul utilizatorului Capitolul VI. Pag: 1


Programare

Tdpedit...........................................................................................................................................................52

Modulele HRB.......................................................................................................................................................57

Glosar de Termeni..........................................................................................................................................61

Manualul utilizatorului Capitolul VI. Pag: 2


Programare

DICȚIONAR DE DATE:
Este un set de metadate legate într-o manieră ierarhică care conține toate informațiile și
funcționalitățile tehnice ale bazei de date a sistemului AdaptaPro și sub acest concept se
fundamentează toate activitățile sistemului: Introducerea de Date, Procese și emiterea de
informație.

Pe Wikipedia am găsit această descriere foarte apropiată de natura dicționarului de


date despre AdaptaPro.

HTTP://[Link]/WIKI/DICCIONARIO_DE_DATOS

Bază de date:

Este un set de date aparținând aceluiași context într-o manieră: Structurate,


Ierarhică și Relațională.

Structurat: Fiecare tabel este compus din câmpuri ș i înregistrări.


Jerarhică: Se referă la dependența în cascadă a tabelelor, exemplu: Tabel Părinte, Copil, Nepot.
Relacional: Se referă la legătura dintre tabele prin unul sau mai multe câmpuri comune între tabel
Părinte cu tabelul fiică, de asemenea denumit: Entitate și Relație.

[Link]
[Link]

Utilizarea bazelor de date relaț ionale (RDBMS):

AdaptaPro este un sistem de tehnologie Client/Server, iar serverul se referă la baza de


date MySQL care are caracteristici de RDBMS.

[Link]

Datorită dicț ionarului de date, utilizatorul va putea crea noi tabele ș i legături între ele.
fără a necesita cunoș tinț e la nivel de un (DBA „Administrator de Baze de Date
AdaptaPro se ocupă de construirea sentinț elor SQL ș i le trimite către server
de la baza de date pentru ca aceasta să genereze tabelele ș i integritatea referenț ială între tabele.

Avantajele unui sistem proiectat conform conceptului de dicț ionar de Date versus un sistem fără
dicț ionar de date.

Caracteristică AdaptaPro Sisteme Clasice

Manualul utilizatorului Capitolul VI. Pag: 3


Programare

Cresterea Permite cresterea deoarece sistemul va putea creste doar


Sistem sistemul este fundamentat pe la participare
dic ț ionar de date ș i când este direct ș i exclusiv din partea de
utilizatorul adaugă componente noi în programatorii săi ș i utilizatorul
dic ț ionarul de date sistemul nu va putea a adăuga
de asemenea, va creș te funcț ionalităț i.
Documentación Documentación: Toate componentele sunt
Toate componentele funcț ionale în programul binar ș i
pentru gestionarea datelor se află depinde exclusiv de
exclusiv în dicț ionarul de sus programatori.
Date. Dicț ionarul de date este Documentaț ia va putea doar
documentaț ia bazei Base de a fi într-un document în format
date. electronic. Dacă baza de date
schimbă, documentaț ia
este învechită.
Certificare Permite certificarea de normalizare Al neexistând o
de la baza de date din cauza că se documentaț ia bazei de
poate cunoaș te designul ș i relaț iile sale. datele nu este posibil să facem o
certificare de normalizare
Optimizare.
Optimizare Utilizatorul va putea optimiza relaț ia Depinde doar de un expert
între tabeluri fără a fi nevoie să ai DBA care cunoaș te foarte bine
cunoș tinț e de baze de date la nivel de bază de date
de un DBA
**ADĂUGA REGULI PENTRU
OPTIMIZARE
Actualizări Sistemul va putea fi actualizat Depinde de un expert DBA
de la baza de convenabil datorită faptului că pentru a actualiza baza de date
datos dic ț ionarul de date se ocupă de conformitatea cu noua structură.
adăugaț i noile funcț ionalităț i la
baza de date de fiecare dată când se instalează
o nouă versiune
Adaptări Dic ț ionarul de date marchează sau nu există modalitatea de a cunoa ș te
distingue conț inuturile sistemului de adaptările realizate în
maniera standard ș i adaptările sau baza de date.
incorporări agregate de către
utilizatori.
Flux de Utilizatorul prin func ț ionalităț i Depinde de expert în DBA.
Informaț ie ș i de consulta va putea cunoaș te fluxul de
Ierarhizare informaț ie, relaț ie ș i ierarhie a
tabere.
Interacț iunea Toate func ț ionalităț ile de intrare depind de proiectarea sistemului

Manualul utilizatorului Capitolul VI. Pag: 4


Programare

sistem cu el de date prin intermediul formularelor ș i aceasta interac ț ionează cu


dicț ionar de AdaptaPro utilizează structura fiecărui câmp,
Date tabel pentru ajustarea câmpurilor în funcț ie de
defini ț ie de în baza de date,
exemplu: Dacă utilizatorul solicită ca
campo “Descripción del producto”
aumenta-l până la 100 de caractere, el
formular de introducere a datelor se
ajustare cu noua lungime a
câmp”. Validarea integrită ț ii
referenț ial despre ierarhia superioară
cum beneficiază reducerea timpului
ș i costul de programare din cauza că
programatorul nu va fi necesar.
Actualizare Se pot adăuga func ț ionalităț i. Doar sistemul este înlocuit.
Selectivă selective sau parț iale, reuș ind să fie complete la nivelul programului
prin intermediul utilizatorul adaugă doar componente binare. Se poate utiliza doar
PLUG-IN ce dore ș ti. Componente se formatează de imprimare cu
exportă ș i importă prin intermediul raportului crystal.
dicț ionar de Date.

Fortalezas:

Autonomie: Utilizatorul va putea obț ine autonomie tehnologică datorită faptului că nu depinde de
fabricant (AdaptaPro) pentru a realiza noi încorporări sau adaptări ale sistemului.
AdaptaPro este foarte bine documentat, ceea ce permite o cunoaș tere rapidă a designului de
bază de date.

Reducerea timpului de dezvoltare: Datorită dicț ionarului de date, sistemul are o


asistente care permite crearea de funcț ionalităț i ș i generarea de cod sursă fără a fi necesară
cunoș tinț e avansate de programare economisind ore de programare, în plus
sistemul dispune de funcț ii care permit exportarea ș i importarea componentelor din dicț ionar
de date.

Reducerea costurilor: Reducerea costurilor este semnificativă din cauza scurtării dezvoltării
ș i facilităț ile de implementare evitând: Transferuri, instalaț ii manuale ș i altele
complexităț ile implicate legate de implementarea de noi funcț ionalităț i. Mulț umesc pentru
conceptul uniform al designului bazei de date este posibil să se adauge mai multe funcț ionalităț i
fără a fi nevoie de a realiza noi funcț ionalităț i în programele sursă.

Uniformitate în design: Toate aplicaț iile sistemului urmează aceeaș i matriț ă


de designul bazei de date pornind de la următorul principiu:

Manualul utilizatorului Capitolul VI. Pag: 5


Programare

Tablă Produse Clienț i Furnizor Cutie Bănci Contabilitate


Învăț ătoareDPINV DPCLIENTES DPPROVEEDOR DPCAJA DPCTABANCO DPCTA
Modelo DPINVTRAN DPTIPDOCCLI DPTIPDOCPRO DPCAJAINST DPBANCOTIP (Conform
Scaune
Tran- DPMOVINV DPDOCCLI DPDOCPRO DPCAJAMOV DPCTABCOMOV DPASIENTOS
sancț iune

Acest principiu (Tabel, Model ș i Tranzacț ie) îi permite utilizatorului să implementeze mai multe.
funcț ionalităț i în sistem doar prin adăugarea de noi înregistrări în tabelele de model
de tranzacț ii evitând să investească timp ș i costuri pentru a implementa funcț ionalităț i noi
financiare. Acest design permite, printr-o singură interogare SQL, ob ț inerea soldurilor de
oricare dintre aceste aplicaț ii:

Tablă Consulta SQL


Inventar Logic SELECT MOV_CODIGO
SUM(MOV_CANTID*MOV_LOGICO) DIN DPMOVINV
UNDE MOV_INVACT=1
GRUP PE MOV_CODIGO

Inventar Fizic SELECT MOV_CODIGO


SUM(MOV_CANTID*MOV_FISICO) DIN DPMOVINV
UND MOV_INVACT=1
GRUPEAZĂ DUPĂ MOV_CODIGO

Funcț ionalităț i generice:

PROGRAMARE
DPXBASE este un mediu de dezvoltare pentru un lexic de tip Xbase și proiectat pentru a crea
aplicații de tip comercial într-un mod rapid și simplu. În plus, încorporează un set de
componente tehnologice care contribuie la robustetea aplicațiilor finale. În cadrul acestora
avem:

1. Limbaj de Programare xHarbour pentru 32 de biți și C++ de la Borland.

Manualul utilizatorului Capitolul VI. Pag: 6


Programare

2. Acces la baze de date de tip SQL prin ODBC sau Nativ MySQL. 5.x prin intermediul
clasa EAGLE scrisă în limbajul C și folosind funcții incluse în
fișierul „[Link]” (Furnizat de MySQL 5.x)
3. Utilizarea integrității referențiale în bazele de date.
4. Rapoarte prin Crystal Report.
5. Generatoare de rapoarte pentru clasa Treport.
6. Generatoare de Cod Sursă pentru Formulare de multiple scopuri: Întreținere
de registre, Feronă dialoguri, Feronă MDI.

DPXBASE dispune de un (Dicționar de Date) care permite definirea tuturor tabelelor de tip "SQL" care
vor fi utilizate de sistem într-o manieră ierarhică: Câmpuri, Indici, Chei Primare și
referințe între tabele. În plus; importă structuri din formate DBF.

XBASE:

xBase este termenul generic pentru toate limbile de programare care derivă din limbajul de
programarea dBase, publicată inițial de Ashton-Tate. Există indicii că a existat un
predecesor necomercial.
La 'x' înseamnă că există diverși interpreți și compilatoare pentru acest limbaj. O listă
incompletă ar fi:

- dBase / Visual dBASE de dBASE Inc.


- (dBXL/Arago) QuickSilver
Clipper de Computer Associates
FoxPro
Visual FoxPro de Microsoft
- xBase++ de Alaska Software
- Recitalul companiei Recital Corp.
- Visual FlagShip de multisoft GmbH
- Clip
Proiectul Harbour
- - xHarbour

Sursă:[Link]

HARBOUR: (Creador: Antonio Linares)

Harbour este un limbaj de programare modern care s-a născut ca un compilator al limbajului de
programarea Clipper (o variantă de xBase) dezvoltată ca software liber. Obiectivul său inițial
a fost susținut toate sentințele și extensiile versiunii celei mai populare a compilatorului, Clipper
5.2. Harbour este totodată un compilator multiplatformă, capabil să compileze pentru și să se execute în DOS
(MS-DOS, DR-DOS, etc), Microsoft Windows, OS/2, GNU/Linux, variații diferite de Unix, diverse

Manualul Utilizatorului Capitolul VI. Pag: 7


Programare

descendenți ai BSD, Mac OS X, MINIX 3, Windows CE, Pocket PC, Symbian, iPhone OS, QNX,
VxWorks, OS/2 BeOS/Haiku, AIX folosind același cod sursă și fișiere de bază de date.

Sursă:[Link]

REGULAMENT PENTRU ASISTENȚA LA CURSURI (DPXBASE)

Cerinț e:

Cuno ș tinț e: Programare anterioară în orice limbaj de programare sau Excel


prin intermediul (Formule sau Macros), domeniu teoretic practic în Baze de date ș i Termeni ai
argou informatic în special în domeniul dezvoltării: Câmpuri, Tipuri de Câmpuri,
{"Tablas de Datos":"Tabele de date","Tablas de índices":"Tabele de indecș i","Integridad referencial":"Integritate referenț ială","Variables":"Variabile","Funciones":"Funcț ii","Tipos de":"Tipuri de"}

date, Proceduri, Aranjamente (Vectori) ș i Obiecte.

Cunoș tinț e despre Dicț ionarul de Date: Prin intermediul cursului de Dicț ionar de date,
utilizatorul va putea cunoaș te ș i documenta despre structura de date ș i designul funcț ional al
bază de date pentru a efectua interogări asupra bazei de date, a include, a elimina ș i a modifica
(Actualizaț i) registre.

Lectura Previa de Documentaț ie: Înainte ca participantul să participe la curs, este necesar
lectura manualelor de programare ș i a documentaț iei de ajutor (în format CHM)
de tot conț inutul componentelor de dezvoltare incluse în arhitectura deschisă
del Sistem AdaptaPro:

Funcț ii xBase C:\dpadmwin\help\[Link]


Funcț ii Bibliotecă FiveWin C:\dpadmwin\help\[Link]
Comenzi FiveWin C:\dpadmwin\help\[Link]
Manual de Programare C:\dpadmwin\docs\[Link]
DpXbase
Clase FiveWin (Obiecte) C:\dpadmwin\help\[Link]
Funcț ii DpXbase C:\dpadmwin\help\[Link]

Utilizarea Claselor pentru Cursul de DpXbase

Manualul utilizatorului Capítulo VI. Pag: 8


Programare

TDPEDIT() Formulare MDI


TTABLE() Incluziune, Consultare ș i Modificare a înregistrărilor

XBROWSE() Mediu de date prin linii ș i coloane


TGET() Introducerea de date prin intermediul tastaturii (Input)

TSAY() Mostra de texte (Ieș ire)


TBMPGET() Introducerea datelor prin intermediul tastaturii ș i funcț ionalitatea
de Boton
TCOMBOBOX() Prezentare Selector de Date dintr-o Listă de opț iuni

DEZVOLTAREA CURSURI DPXBASE.

Desarrollo del Curso:

De bază: Se desfăș oară timp de patru sau ș ase ore ș i prin practica de a crea mai multe
programe dedicate exclusiv pentru gestionarea datelor: Lanț uri, Date, Numere,
Lógica ș i Blocuri de Coduri ș i Programare Orientată pe Obiecte.

Orientat: Utilizatori ai sistemului de plată care doresc să efectueze adaptări sau noi
concepturi de plăț i, utilizatori care doresc să adapteze rapoarte generate prin DpXbase.

Avansat: Se desfăș oară timp de patru sau ș ase ore prin crearea de programe pentru
crea formulare pentru introducerea datelor într-un tabel în MYSQL ș i interogarea datelor
prin intermediul clasei TXBROWSE()

Programare cu baze de date:

REGULAMENT PENTRU PROIECTAREA FORMATELOR CU CRYSTAL


RAPORT.
Se înț elege prin format cuvânt derivat din termenul „Formă”. Pentru cazul sistemului de
AdaptaPro, fiș ierele cu extensia .RPT (Crystal Report). Printr-o interogare SQL

Manualul utilizatorului Capitolul VI. Pag: 9


Programare

generare un fiș ier cu extensia .DBF (Fiș ier Dbase) conprinzând înregistrările ș i câmpurile
care vor fi afiș ate prin formatul conceput cu Crystal Report Versiunea 8.0.

Originea datelor pentru Crystal:

[Link] de Documente: Se generează dintr-un tabel în format „.DBF”


generat dintr-un Program scris în limbajul DpXbase. În caz că
formatul Crystal Report necesită un câmp nou, este necesar să se adapteze
consulta SQL ș i/sau instrucț iuni ale programului DpXbase.

[Link] de Raportare: Se generează printr-un tabel în format „.DBF” creat


cu cursorul printr-o instrucț iune SQL indică într-un raport construit prin
generatoare de rapoarte AdaptaPro.

Tip de format în funcț ie de destinaț ie:

Normalizat: Când se referă la o necesitate particulară a fiecărei companii ș i această sediu


realizaț i plecând de la o copie a unui model deja creat sau creaț i unul nou ș i acesta trebuie
a avea un prefix diferit de textul DP*.*, pentru a respecta această normă este necesar
numiț i fiecare format în crystal în funcț ie de iniț ialele clientului, de exemplu: Organizaț ie
Kanguro, toate formatele cu crystal report vor fi denumite prin prefixul
[Link] să faciliteze o reinstalare sau actualizare viitoare a sistemului.

Estandarizat: Se referă la atunci când se îmbunătă ț eș te, se creează sau se corectează un format în crystal report
care va putea face parte din sistemele standard AdaptaPro, acestea vor trebui mai întâi
consultat de departamentul de dezvoltare AdaptaPro pentru a emite recomandări ș i
exigenț e. Acest fiș ier trebuie creat cu prefixul DP, exemplu: [Link]
(Dovada de Plată). Tehnicianul trebuie să adauge formatul crystal în raportul DpXbase
ce îl execută ș i trimite către departamentul de dezvoltare (prin e-mail) raportul ș i
respectivul raport. Astfel, pentru a evita obț inerea de rapoarte fără formate crystal report ș i fiș iere de
formate RPT (Crystal Report) fără raport.

Forme de Design:

[Link] de Format: Se referă exclusiv la amplasarea câmpurilor în


formatul raportului crystal conform indicaț iilor date de utilizator.

[Link] tabelului DBF cu câmpuri existente: Când este necesar


adăugaț i unul sau mai multe câmpuri în tabelul DBF necesar pentru a fi afiș ate în
formato crystal. Para este caso es necesario modificar la sentencia SQL que genera
la tabla DBF, si se referă la un raport, este necesar să modificaț i raportul ș i în cazul
Pentru a fi un document, este necesară modificarea programului sursă DpXbase.

Manualul utilizatorului Capítulo VI. Pag: 10


Programare

3. Incorporarea de noi câmpuri inexistente în dic ț ionarul de date:


Când se face referire la introducerea de noi câmpuri în tabelele sistemului ș i
Necesită lucrări de programare fie pentru a modifica un formular pentru
încărcarea datelor ș i crearea unui nou program DpXbase. Această activitate depinde de
noi sau modificarea programelor DpXbase.

Cerere de Raport cu formate Crystal Report:

1. Raporturi: Clientul trebuie să furnizeze un model de raport conceput în format


excel, indicado: Columnas, Totales, Agrupaciones, Ordenamiento, Totales, Filtros
(Ranguri ș i Criterii) ale înregistrărilor.

[Link]: Se referă la documente financiare: Facturi, Ofertare,


Bugetele, Chitanț ele de plată ș i similare. Clientul trebuie să furnizeze o
fotocopia a aceluia ș i cu indica ț ii pentru fiecare câmp. Solicita ț i o copie a
document cu imprimarea datelor pentru a preciza locaț ia câmpurilor ș i
conț inutul acestora. Precizare: Câmpuri Memos, Totalizatoare, Seriale, Loturi,
Controlul Preț urilor, reduceri. Subtotaluri (Vin ș i Pleacă), printre altele.

Ridicarea Cerinț elor:

1. Când face parte din proiectul de implementare: Liderul de proiect trebuie să


evaluarea nevoilor în fiecare format ș i includerea în proiect a inventarului de
formate în crystal report care trebuie să fie proiectate conform acest regulament.

2. Cerere directă sau solicitare: Liderul de proiect trebuie să ceară utilizatorului o copie
del document gol ș i copie a documentului imprimat, trebuie să fie solicitată
fizic. În fiecare format, se face un buget pentru dezvoltare pe sarcină ș i
buget pentru instalare virtuală. În cazul în care utilizatorul dore ș te din orice
motivul instalării formatului personalizat, aceasta trebuie bugetată ca o
labor de media jornada. Un format poate fi cotizat media jornada pentru
dezvoltare mai multe teste ș i jumătate de zi pentru instalarea sa.

Format Comentarios Utilizatori în care va fi


instalând formatul

Indicaț i cantitatea de formate:

Formalizarea Livrării: După ce formatul este conceput, instalat pe PC-ul clientului,


este necesar să se efectueze o imprimare fizică a acestuia (în cazul facturii fiscale, imprimaț i
o factură deja realizată într-un format electronic ș i apoi a o imprima pe hârtie albă)

Manualul utilizatorului Capitolul VI. Pag: 11


Programare

necesar pentru formalizarea satisfacț iei clientului. Astfel se evită reclamaț iile pentru incidente
când unii utilizatori modifică formatele ș i apoi nu avem formalităț i
pentru a emite un răspuns.

Cantidad de Usuarios: Según la cantidad de usuarios en donde será instalado el sistema


va depinde de timpul necesar pentru livrarea formală a acestuia.

Recomandări: Pentru a optimiza timpul de livrare, este necesar să se facă instalarea de


toate formatele într-o singură vizită. Pentru a evita instalarea pe fiecare PC, este necesar
înregistraț i fiecare format, în opț iunea “Registru de personalizări” situată în secț iunea
„Ficheros” din aplicaț ia „Definiț ii ale Sistemului”. Această opț iune distribuie formatele
de Crystal Report pe toate celelalte PC-uri unde se execută sistemul. Tot personalul
tehnicianul trebuie să evalueze această funcț ionalitate înainte de a fi utilizată cu clientul.

Tarifele în timp:
Descriere Cant/Horas
Proiectare de format fără a fi necesare modificări
Design de Formate cu modificări în Interogare
Design de Formate cu încorporări în Dicț ionarul de Date sau
modificări în formulare.
Proiectarea formatelor Crystal derivate dintr-un raport.

Normativa pentru proiectarea rapoartelor în Crystal Report pentru componente standard


del Sistemului AdaptaPro:

Caracteristici ale rapoartelor care sunt concepute în Crystal Report pentru standardul ar putea
a urma aceleaș i parametrii pentru cei care trebuie să fie adaptaț i la client.

Acestea trebuie să fie generate prin tabele DBF, care sunt generate la emiterea raportului
prin intermediul sistemelor Adaptapro care sunt stocate în folderul crystal. Nu este
permis să fac conexiune directă cu baza de date deoarece filtrele create de
generatoare de rapoarte prin utilizarea clauzei WHERE în fraza SQL se folose ș te pentru
generarea interogării care va fi afiș ată prin formatul Crystal.

Aceș tia trebuie să fie concepuț i cu tipul de literă Tahoma (Occidental), Numele de la
empresa tamaño de letra 11 negrita a la izquierda, RIF tamaño de letra 10 negrita a la

Manualul utilizatorului Capitolul VI. Pag: 12


Programare

stânga, Titlu mărimea fontului 11 îngroș at centrat, Datele intervalelor centrat sub
Titlu dimensiune font 10 îngroș at,
Fecha, RIF de la empresa, Usuario y Sucursal la etiqueta de tamaño 9 negrita y los datos
dimensiune 9, nu îngroș ată, aliniate la dreapta.

Titlul detaliului cu dimensiunea 10, îngroș at, să fie plasat într-un chenar rotunjit de culoare
fund gri deschis, detaliu dimensiune 10 nu îngroș at, coloanele separate cu linie punctată
culoare gri.(Acest dimensiune poate varia în funcț ie de cantitatea de informaț ii care se
trebuie să includă în raport, iar acest lucru implică faptul că informaț ia să fie prezentată pe hârtie
în formă verticală sau orizontală.

Ca referinț ă, cu aceste date se poate lua raportul [Link]

VARIABLELE SISTEMULUI:

oDp (Este este numele obiectului care conț ine toate variabilele publice ale sistemului în mod
encapsulată) reușind să optimizeze utilizarea eficientă a resursei de memorie RAM a sistemului
Operativă.

Alocarea sau crearea variabilelor se solicită în mod direct.


Clasa TPUBLIC evaluează dacă această variabilă nu există pentru a-i atribui în mod dinamic valoarea pentru
poate fi utilizată în următoarele părți ale sistemului, exemplu:

/*
-------------------------------------------------------------
*/
PROCE MAIN()

oDp:cVariable:=”Valor”

MsgAlert(oDp:cVariable) // Va afiș a Valoare

RETURN

/*
-------------------------------------------------------------
*/

Pentru a verifica dacă există o variabilă în obiectul oDp: se folosește metoda

Manualul utilizatorului Capitolul VI. Pag: 13


Programare

/*
-------------------------------------------------------------
*/
PROCE MAIN()

Dacă ¡oDp:IsDef("cVariable")
MesajEroare("Variabila cVariable nu există")
ALTFEL
MesajEroare("Variabila cVariable există")
ENDIF

RETURN NIL
/*
-------------------------------------------------------------
*/

Când este utilizată funcția SQLGET(„TABELĂ”, „CAMPO”, „CONDIȚIE”) prin intermediul clasei
TTABLE pentru a obține valoarea unui câmp indicând numele tabelului și instrucțiunea WHERE
de SQL și înregistrarea este găsită, sistemul copiază conținutul fiecărui câmp în aranjament
oDp:aRow[],Ejemplo

/*
-------------------------------------------------------------
*/
PROCE PRINCIPAL()

SQLGET(„DPINV”,„INV_CODIGO,INV_DESCRI”,„INV_CODIGO”+GetWhere(
=,01

// Es necesar evalua si are contenido para evita


gol // un aranjament care nu există
Dacă ¡Gol(oDp:aRow)
MsgAlert(ODp:aRow[1]) // Mostră el cod ș terge produs
02
MsgAlert(oDp:aRow[2]) // Afiș ează Descrierea
SFÂRȘ IT

RETURN NIL
/*
-------------------------------------------------------------
*/

Manualul utilizatorului Capitolul VI. Pag: 14


Programare

INSPECȚIA OBIECTELOR:

Tipuri de Date:
DpXbase suportă aceleași tipuri de date ca tabelele de format DBF din Dbase sau Foxpro,
în plus, suportă tipuri de date exclusive Clipper, cum ar fi: Blocuri de Cod,
Arreglos, Obiecte și Nule. Pentru o înțelegere ușoară sau lectură a programelor scrise în DpXbase
utilizăm notația ungară care constă într-o tehnică pentru a declara variabilele cu un prefix
ce indică tipul de date pe care îl reprezintă, exemplu:

LOCAL nNumerico:=100
LOCAL cCaracter:=”Caracteres”
LOCAL dFecha:=DATA()
LOCAL lLogico:=.T.
LOCAL bBloq :={||NIL}
LOCAL aArray :={1,2,3,4,5}
LOCAL oObjeto:=OpenTable(“SELECT * FROM DPINV”)

Numere, suportă 19 întregi ș i ș apte zecimale, se referă la valori de tip numeric.


De asemenea, suportă valori întregi (fără zecimale).

Carácter sau Memo: Acceptă caractere sau șiruri de date și suportă până la 4 Giga pentru fiecare
variabilă.

Exemplu pentru obținerea datelor dintr-un șir în formatText, pentru acest caz, datele obținute
prin intermediul unui fișierText din consulta portalului Seniat.

Textul conține

<?xml version="1.0" encoding="ISO-8859-1"?> <rif:Rif xmlns:rif="rif"


xmlns:xsi="[Link]
rif:numeroRif="J312344202"><rif:Nombre>SERVICIOS INFORMATICOS DATAPRO
C.A. (SERVICII INFORMATICE DATAPRO,
C.A)</rif:Nombre><rif:AgenteRetencionIVA>NO</rif:AgenteRetencionIVA><rif:
ContribuyenteIVA>SI</rif:ContribuyenteIVA><rif:Tasa>75</rif:Tasa></rif:Ri
f>

Pentru a manipula șiruri, este necesar să folosiți următoarele funcții și expresii:

AT("C","ABCD") Determina poziția literei C în șir

Manual del Usuario Capitolul VI. Pag: 15


Programare

ABCD. Generând ca rezultat 3


"C"$"ABC" Această expresie comparativă indică dacă caracterul
„C” se află în șirul „ABCD”. Valoarea sa
es .T.(Logic)
STÂNGA("ABCD",2) Obține doi caractere din partea stângă sau
începutul șirului, în acest caz obține „AB”.
DREAPTA(„ABCD”,2) Obține două caractere din bucla Dreaptă
de la lanț sau de la sfârșit, în acest caz
CD
SUBS("ABCD",2,2) Obține de la al doilea caracter cele două
următoarele caractere, în acest caz este „BC”
STRTRAN("ABCD","B","b") Caută în șirul “ABCD”, în conținutul de
"B" y lo înlocuiește cu "b", rămânând
expresie precum: AbCD.

Dată sau dată: Suportă datele conform formatului „zz/ll/aaaa” și se referă la date care pot
suportă operații matematice și utilizarea sa este legată de funcții
ZI(), LUNĂ(), CMEN(), ZILE(), DTOC(), CTOD(), DTOS(), între altele.

Logice: Se ob ț ine prin compara ț iile valorilor utilizând operatori logici ș i


relaționale, întotdeauna valoarea lor este adevărată .T. sau Fals .F.

Nule: Se referă la valoarea implicită pe care o are o variabilă atunci când este declarată fără valoare, „LOCALE
nValor”, în acest fel nValor este NIL. Dacă întrebăm despre valoarea sa: MsgAlert(ValType(nValor)),
va afișa NIL.

Aranjamente: De asemenea, numite vectore, sunt liste de valori într-o singură dimensiune, DpXbase la
la fel ca clipper, nu suportă aranjamente multidimensionale în formă literală, însă un aranjament poate
este compus din liste care conțin aranjamente, realizând manipularea aranjamentelor
multidimensionale. Lista aranjamentelor se declară cu {}, un alt avantaj al aranjamentelor este că acestea
conținutul poate fi compus din date de mai multe tipuri. Exemplu:

aLista:={1,2,3,4,5,6}
aLista:={“Uno”,2,date(),nil,.T.}

Pentru a declara aranjamente multidimensionale, trebuie să folosiți următoarea formă:

aLista:={}

Manualul utilizatorului Capitolul VI. Pag: 16


Programare

AADD(aLista,{1,2,3,4,5,6}) // Puteț i observa că adăugăm o listă de


numere

Pentru a arăta primul element, trebuie să folosiți următoarea sintaxă:

MsgAlert(STR(aLista[1,1]))// Va afiș a 1

De asemenea, poate fi utilizat aLista[1][1]

DpXbase oferă un set de funcții concepute exclusiv pentru gestionarea aranjamentelor:


AADD(), ASORT(), AEVAL(), ASIZE(), ARREDUCE(), ADEL(), AINS(), ASCAN(), ACLONE() Etc.

Utilizarea aranjamentelor a fost foarte exploatată în DpXbase, acestea fiind utilizate împreună cu blocuri
de cod și obiecte, realizând un instrument de programare potențial. Să vedem cele mai
uzuri importante:

// Căutare într-un aranjament unidimensional


#INCLUDE "[Link]"
PROCE PRINCIPAL()
LOCAL aData:={“MYSQL”, “SQL-SERVER”,”POSGRES”}

nAt:=ASCAN(aData,{|a,n| a="POSGRES")

? nAt,"Găsit pe poziț ia a 3-a"

ÎNTORCE .T.

// Căutare într-un aranjament multidimensional


#INCLUDE "[Link]"
PROCE PRINCIPAL()
LOCAL aCampos:={}

AADD(aCampos, {“CARACTER”,”C”,10,0})
AADD(aCampos, {“NUMERICO”,”N”,16,2})
AADD(aCampos, {“FECHA” ,”D”,08,2})
AADD(aCampos, {“LOGICO” ,”L”,01,2})
AADD(aCampos, {“MEMO” ,”M”,10,2})

nAt:=ASCAN(aCampos,{|a,n| a[2]=”L”})

? nAt,”Econtrado en 3”

ÎNAPOI .T.

Manualul utilizatorului Capítulo VI. Pag: 17


Programación

În ambele exemple putem observa următoarea sintaxă aplicată în funcția ascan()

nAt:=ASCAN(aCampos,{|a,n| a[2]=”L”})

Acești doi parametri |a,n| se referă la:

a Corresponde al elemento que está en evaluación


Se referă la numărul elementului.

Funcțiile ASCAN() și AEVAL() efectuează o parcurgere ascendentă a aranjamentului, dacă aranjamentul este
compus din 10 elemente, se va executa un proces cíclic de 10 ture, în fiecare tură vor fi
trimise ca parametri elementul aranjamentului „a” și poziția „n” a acestuia.

Blocte de Cod: Așa cum sugerează numele, sunt date care conțin cod de execuție
„care se execută ca și cum ar fi parte din EXE”, marele diferență între un program executabil
„Binario” și un bloc de cod se află în că programul executabil se găsește stocat în
un fișier cu extensia EXE și blocul de cod este stocat într-o variabilă. Blocul de
codul este un potențial foarte aplicat în tot DpXbase și în regulile de afaceri responsabile
de generare a tranzacțiilor comerciale.

Declarație:

bBloque:={||MsgAlert(“Bună DpXbase”)}

Pentru a-l executa:

Eval(bBloque) // Afiș ează într-un dialog "Hola DpXbase"

De asemenea, primește parametrii, exemplu:

bBlocare:={|cMesaj|MsgAlert(cMesaj)})

Eval(bBloque, "Acesta este mesajul")

Blocurile de cod se comportă similar unei funcții dintr-un program, adică,


pot primi parametrii și returna valori, exemplu:

FUNCȚIE SUMAR(nValoare1,nValoare2)

Manualul utilizatorului Capítulo VI. Pag: 18


Programare

LOCAL nResp:=nValor1+nValor2
ÎNTOARCE nResp

Pentru a efectua suma, este necesar să apelăm funcț ia aduna


în felul următor: SUMAR(10,20) ș i returnează 30

Traducerea literală a funcției SUMAR() în bloc de cod este:

BSumar:={|nValor1,nValor2|nValor1+nValor2}

Pentru a executa suma, este necesar să utilizați funcția EVAL() în următorul mod:

EVAL(bSumar,10,20) // Returnează 30

Blocurile de cod sunt peste tot în sistem, în principal unde sunt


execuții, cum ar fi: Dă clic pe un control (Buton, Meniu, etc.). A cunoaște pe larg și a stăpâni
conceptul de bloc de cod vă va ajuta să cunoașteți DpXbase și să construiți soluții profitând
potențialul blocurilor de cod.

De fiecare dată când utilizatorul apasă CLICK pe un control, el folosește un bloc de cod.
ce conține executarea controlului, exemplu:

#DEFINE “[Link]”

PROCE TESTBLQ()
LOCAL oDlg,oBtn

DEFINE DIALOG oDLG TITLE "Bloque de Cod"

@ 1,1 BUTON oBtn PROMPT "Închide"


oBtn:bAction:={||oDlg:End()

ACTIVAȚI DIALOG oDLG

ÎNTOARCE NIL

În acest exemplu, puteți observa că acțiunea butonului "Închide" este definită printr-un bloc
de cod, când utilizatorul va apăsa "Clic" va fi executat blocul de cod "oBtn:bAction " care
este compus din apelul metodei "End()" pentru a închide dialogul identificat cu variabila "oDlg".

Blocurile de cod sunt în întreaga utilizare a DpXbase, o mare parte din funcțiile DpXbase
utilizează blocuri de cod, în special funcțiile orientate spre gestionarea aranjamentelor.

Manualul utilizatorului Capítulo VI. Pag: 19


Programare

Obiecte: Conceptul de Obiecte utilizat de DpXbase se bazează pe conceptul clasic de


„Programare orientată pe obiecte (OOP)”. Putem defini că un obiect este un element care este
compus din date și care realizează activități, cum ar fi o calculatoare: Are taste.
care realizează sarcini: (indicați un număr, adunați, scădeți, etc.) și conține date "numere de la 0 la 9"
pentru a efectua operații matematice. Putem observa că DpXbase are o calculeatoare
totalmente proiectată sub conceptul de programare „Obiect”.

Datele de tip obiect sunt obținute prin apelarea la o clasă Obiect preexistentă în
DpXbase, pentru a apela un obiect, utilizăm următoarea sintaxă:

oObjeto:=TDpEdit():New()

oObjeto:=DPEDIT():New("Titlu","forms\[Link]","oObjeto",.F.)
oObjeto:Activează()

Și dacă evaluăm tipul de date al oObjeto cu ValType(oObjeto) returnează „O”

Funcțiile obiectului sau, mai bine zis, ceea ce face se numește „Metodă()” și datele pe care le conține
se numește „Data”.

Toate controalele Windows (GET, TEXT, COMBO, DIALOG) sunt manipulate prin obiecte care
se definesc prin comenzi predefinite în fișierul de antet "[Link]"

În fișierul “[Link]” situat în folderul HELP al sistemului de gestionare


empresarial sau fișă de plată, conține documentația și exemple pentru fiecare dintre funcțiile standard
xbase utilizate în DpXbase. Din motive de comoditate și standardizare, DpXbase utilizează
funcții standard xbase de Clipper 5.2 cu diferența că sunt concepute pentru 32 de biți.

Operatori: Sunt un set de simboluri utilizate pentru a genera rezultate aritmetice ș i/sau
logice.

Aritmetice: Se ocupă cu efectuarea opera ț iunilor aritmetice de: Atribuire, Suma, Scădere,
Înmulțire și Împărțire.

Asignare: Atribuie rezultatul unei variabile, exemplu:

nValoare:=100+200

+ [Link] în formă algebrică valori numerice și date, de asemenea concatenează


valori de tip caracter.

Manualul utilizatorului Capitolul VI. Pag: 20


Programare

LOCAL nMonto:=100+200
LOCAL bFecha:=DATA()+100
LOCAL cChar:=NETNAME()+" este es PC-ul meu"

? nMonto,dFecha,cChar

- Restar. Resta algebraic valori numerice și date. Exemplu:

LOCAL nMonto:=200-100
LOCAL bFecha:=DATA()-1

? nMonto,dFecha

* Multiplicați. Efectuați înmulțirea valorilor numerice. Exemplu:

LOCAL nMonto:=5*5

? nMonto,dFecha

/ Dividere. Efectuează împărțirea valorilor numerice. Exemplu:

LOCAL nMonto:=5*5

nMonto

**Potentierează. Generează valoarea potențială a unei valori numerice. Exemplu:

#INCLUDE "[Link]"

LOCAL nMonto:=3**2

? nMonto

Raț ionale: Utilizat pentru a efectua comparaț ii între valori ș i generează valori logice.
Adevărat sau .F. Fals.

Manualul utilizatorului Capitolul VI. Pag: 21


Programare

= La fel ca, exemplu:


lResp:=(1=0)
== Exact la fel ca, exemplu:
lResp:=(1.0==1.1)
> Mayor , ejemplo:
lResp:=(1>0)
>= Mai mare sau egal cu, exemplu:
lResp:=(1=0)
< Mai mic decât, exemplu:
lResp:=(0<1)
<= Mai mic sau egal decât, exemplu:
lResp:=(1<=0)
<> Diferențe care, exemplu:
lResp:=(1=0)que
$ Cadena Asociată “A”$”ABEDARIO”

Logice: Se ocupă cu realizarea operaț iunilor care generează rezultate adevărate ș i false cu
diverse comparații legate.

.ȘI. Y, toate condițiile trebuie să fie îndeplinite:


DACĂ (1=1) .și. (2=2)
.SAU. O, una dintre condiții trebuie să fie îndeplinită
DACA (1=0) .sau. (1=1)
Simbolul # poate fi folosit de .OR.
DACĂ (1=0) # (1=2)
.NU. Negare.
DACĂ .NU. (1=2)
De asemenea, puteți folosi!
Dacă !(1=0)

Manipularea Datelor:

DpXbase, la fel ca Clipper, are considerații speciale pentru manipularea datelor de tip
aranjamente și blocuri de cod.

Manipularea aranjamentelor: Acest tip de date este manipulat prin următoarele funcții
special concepute pentru gestionarea aranjamentelor și listelor. Să ne amintim că aranjamentele sunt un

Manualul utilizatorului Capitolul VI. Pag: 22


Programare

tipuri de date compuse din alte tipuri de date, generând o listă: aLista:={1,2,3,4,5,6}, una dintre
mari avantaje ale aranjamentelor sunt că acestea suportă orice tip de date, inclusiv aranjamentele,
arreglos de dentro de un arreglo conforman arreglos multidimensionale sau concatenate. La
referința oricărui element se stabilește prin poziția sa, exemplu: aLista[2], se referă la
al doilea element din listă.

Iniț ierea Aranjamentului:

aArray:={}

Declaraț ia unui Arregl de elemente:


aArray:=MATRICE(20)
? aData[1] // Arată NIL

Generează un aranjament cu 20 de elemente nule.

Umple un aranjament

Pentru a umple tabloul caracterului X:

AFILL(aArray,"X")

? aData[1] // Afiș ează X

Adaugă un nou element:

AADD(aData,"Nou")

Măsurarea lungimii aranjamentului:

? LEN(aData) // Genera 21

Elimină sau înlătură primul element al aranjamentului:

ADEL(aData,1)

// Îndepărtează el primer element con valoare NIL, la listă se


menț ine în 21 de elemente.

Manualul utilizatorului Capitolul VI. Pag: 23


Programare

aData:=ASIZE(LEN(aData)-1) // Reduce dimensiunea listei,


acum rămâne cu 20 de elemente.

De asemenea, se poate elimina un element folosind următoarea funcție:

ARREDUCE(aData,1) // Elimină fizic el primar


element

Atribuie o valoare în orice poziț ie a tabloului:


aData[1]:=”Nuevo Valor”

Inserare un nou element:

AADD(aData,NIL) // Agrega un nou element la sfârș it


AINS(aData, "Primero") // Inserează un nou element en la
prima poziț ie

Ordona un Aranjament

SORTARE(aData)

Ordenarea unui Aranjament Multidimensional

LOCAL aData:={},nAt

AADD(aData,{“Z”,3})
AADD(aData,{“B”,2})
AADD(aData,{“A”,1})

aData:=ASORT(aData,,, { |x, y| x[1] < y[1] })

Dacă este necesar, sortează după a doua coloană numerică

aData:=ASORT(aData,,, { |x, y| x[2] < y[2] })

Caută în Listă.

ASCAN(aData,”X”) // Realiza la căutare de X en los

Manualul utilizatorului Capitolul VI. Pag: 24


Programare

elementele listei.

Pentru aranjamente multidimensionale:

LOCAL aData:={},nAt

AADD(aData,{“A”,1})
AADD(aData,{“B”,2})
AADD(aData,{“C”,3})

nAt:=ASCAN(aData, {|a,n| a[1]=„B”})

? nAt // Răspuns 2

Vizualizarea unui Aranjament:

VizualizareMatrice(aData)

Duplicar Arreglo:
LOCAL aDate:={}, aNou

AADD(aData,{„A”,1})
AADD(aData,{“B”,2})
AADD(aData,{“C”,3})

aNou:=Aclone(aDate)

Parcurgerea unei liste

LOCAL aData:={},nTotal:=0

AADD(aData,{“A”,1})
AADD(aData,{„B”,2})
AADD(aData,{“C”,3})
AADD(aData,{“B”,4})

Aeval(aData, {|a,n,b| b:=iif( a[1]=”B”, a[2] ,0),


nTotal:=nTotal + b })

Manualul utilizatorului Capitolul VI. Pag: 25


Programare

// totalizează elementele al căror coloană este „B”

Obț ineț i ultimul element:


LOCAL aData:={1,2,3,4,5,6}

? ATAIL(aData) // Afișează 6

O altă utilizare poate fi

? aData[len(aData)] // Afiș ează 6

Totalizaț i o listă

LOCAL aData:={},aTotal:=0

AADD(aData,{“A”,1})
AADD(aData,{„B”,2})
AADD(aData,{“C”,3})
AADD(aData,{“B”,4})

aTotales:=TOTALES(aData)

? aTotales[2] // Răspuns 10

Manipularea ș irurilor: Tipul de date caracter poate fi concatenat în mod literal. DpXbase
Include un set de funcții care permit lucrul extins cu acest tip de date.

Incrementaț i sau concatenaț i ș iruri.

LOCAL cChar:=""

CChar:=cChar + "Noua Cadena"

Generând o valoare de tip Memo,

cChar:=cChar + CRLF + "Lista Nouă"

Manualul utilizatorului Capitolul VI. Pag: 26


Programare

// CRLF este CHR(10)+ CHR(13)

Înregistrând discul

MemoWrit(¨[Link]”,cChar)

Citind de pe disc

cChar:=Memoread(cChar)

Poate fi de asemenea
cChar =+ cChar

<eemplazando valori
cChar:=”ABBCCDD

cChar:=STRTRAN(cChar,„BB”,„bb”)

? cChar // Arată AbbCCDD

Obț ine o parte dintr-un ș ir

LOCAL cChar:="ABBCCDD"
cChar:=STÂNGA(cChar,2)
? cChar // Afișează AB

LOCAL cChar:=”ABBCCDD”
cChar:=DREAPTA(cChar,2)
? cChar // Afișează DD

LOCAL cChar:=”ABBCCDD”
cChar:=SUBS(cChar,2,2)
? cChar // Muestra BB

Caută poziț ie

LOCAL cChar:=”ABBCCDD”
? AT("C",cChar) // Afișează 4

Manualul utilizatorului Capitolul VI. Pag: 27


Programare

LOCAL cChar:=”ABBCCDD”
? RAT("B",cChar) // Muestra 5

Compararea ș irurilor

LOCAL cChar:=”ABBCCDD”

? "B"$cChar // Arată .T.

"A"=cChar // Arată .T.

„A”==cChar // Arată .F.

Conversia în Arreglos

LOCAL cChar:=”A,B,C,D,E”
LOCAL aData

aData:=_Vector(cChar)

ViewArray(aData)

Conversie în Numéric
LOCAL cChar:="1000"
LOCAL nValor

nValor:=VAL(cChar)

Conversie în Dată
LOCAL cChar:=”01/01/2007”
LOCAL dData

dFecha:=CTOD(cChar)

? dData+1 // Afișează 02/01/2007

Manualul utilizatorului Capitolul VI. Pag: 28


Programare

MacroExecutie
LOCAL cChar:=”A+B”
LOCAL R,A:=100,B:=200

R:=&cChar // De asemenea, se poate folosi R:=MACROEJE(cChar)

? R // Afișează 300

Convertiț i în Bloc de Cod


LOCAL cChar:=”A+B”
LOCAL B,A:=100,B:=200

B:=BlocCod(cChar)

? Eval(R) // Afișează 300

Repetă caracterul
LOCAL cChar:=Repli(“-“,10)

? cChar // Afișare ---------

Umpleț i cu Zero-uri
LOCAL cChar:=STRZERO(123,10)

? cChar // Afișează 0000000123

Manipularea datelor: Tipul de date Date sau Data poate fi concatenat în formă literară, este
a spune se poate aduna sau scădea. DpXbase include un set de funcții care permit să se lucreze
amploate cu date.

Declarând Data
LOCAL dFecha:=CTOD("")

? dData // Afișează / /

Obț inerea datei din sistemul de operare

Manualul utilizatorului Capitolul VI. Pag: 29


Programare

LOCAL dFecha:=DATA()

? dFecha // Muestra 03/03/2007

Incrementaț i Data

LOCAL dFecha:=CTOD("01/01/2007")

dFecha:=dFecha + 7
? dFecha // Muestra 08/01/2007

Reducere Dată

LOCAL dFecha:=CTOD("01/01/2007")

dFecha:=dFecha - 1
? dFecha // Muestra 31/12/2006

Zile între Date

LOCAL dFch1:=CTOD("01/01/2007")
LOCAL dFch2:=CTOD("08/01/2007")

? dFch2-dFch1 // Exemplul 7

Día de la Semana

LOCAL dFecha:=CTOD("01/01/2007")

? DOW(dFecha) // Afișează 1 Duminică


Este duminică
Lunea
// 3 este Marți
// 4 este Miercuri
5 este Joi
// 6 este Vineri
7 este Sâmbătă

Numărul zilei

Manualul utilizatorului Capitolul VI. Pag: 30


Programare

LOCAL dFecha:=CTOD("01/01/2007")

? ZI(dFecha) // Afișează 1

Nombre del Día

LOCAL dFecha:=CTOD("01/01/2007")

CSEMANA(dFecha) // Arată Luni

Número del mes


LOCAL dFecha:=CTOD("01/02/2007")

? LUNA(dFecha) // Afișează 2

Nombre del Mes

LOCAL dFecha:=CTOD("01/02/2007")

? CMES(dFecha) // Afișează Februarie

Número del Año

LOCAL dFecha:=CTOD(“01/02/2007”)

? AN(dFecha) // Arată 2007

Principiul Lunii

LOCAL dFecha:=CTOD("15/02/2007")

? FchIniMes(dFecha) // Muestra 01/02/2007

Dată SQL
LOCAL cChar:= SQLDATE(DATE())

? cChar // Arată 2007-03-08 // Depinde de configurația datei


SQL

Sfârș itul Lunii

Manualul utilizatorului Capitolul VI. Pg: 31


Programare

LOCAL dFecha:=CTOD("15/02/2007")

? FchFinMes(dFecha) // Afișează 28/02/2007

Prima zi a anului

LOCAL cCharLOCAL dFecha

cChar:=”01/01/”+STRZERO(AN(DATE()),4)

? cChar // Afișare 01/01/2007

DData:=CTOD(dData)

? cChar // Afișează 01/01/2007

Funcț ii de Utilizare Generală:

Sunt un set de funcții care pot fi utilizate cu diferite tipuri de date.

Detectare tip de date

LOCAL dFecha:=DATE()
LOCAL nValor:=100
LOCAL lLogico:=.T.
LOCAL aData :={}
LOCAL indef

? ValType(dFecha) // Afișează D
? ValType(nValor) // Afișează N
? ValType(lLogico) // Afișează L
? TipValoare(aData) // Afișare A
? ValType(indef) // Arată U

Valores Iniciales:

Manualul Utilizatorului Capitolul VI. Pag: 32


Programare

Se definesc în fișierul [Link] și au ca scop atribuirea valorilor necesare


pentru a configura valorile sistemului care trebuie luate în considerare înainte de a începe orice
proces

NATIVO. Indică cu .T. dacă conexiunea pentru baza de date se realizează în mod nativ, adică; fără
utilizați tehnologia ODBC de la MS care necesită predefinirea DSN pentru a accesa
bază de date. Dacă valoarea este .F. va folosi conexiune ODBC prin DSN. Dacă BD este MySQL, unele
procesele de date vor fi realizate în mod nativ datorită performanței lor ridicate.

MENUXP: Prezintă meniul principal al sistemului într-o formă clasică, necesară pentru utilizare
sistemul de pe Linux prin intermediul emulatorilor pentru Windows. În plus, optimizează execuția sa datorită
care nu are grafice sau linii, de asemenea; pot fi utilizate în Windows atunci când este necesar un mai mare
performanță în aplicație. Cu Valoare .T. Prezintă meniul sistemului cu o prezentare
Acorde în stil XP, consumă mai multe resurse din cauza imaginilor, liniilor, culorilor și sunetelor care
poate folosi.

CREADSN. Con .T. sugerează că generează conectorii DSN din formularul de "Conexiune cu
la Bază de Date”, poate fi utilizat pentru Nativ și ODBC. Dacă sistemul funcționează în mod nativ nu
necesita DSN pentru ODBC, le poate crea pentru a accesa baza de date din alte surse
aplicații precum Excel prin MsQuery.

TRACER: Con .[Link] în titlul ferestrei principale numele programului DpXbase care
este în execuție, pentru a cunoaște procesele care se execută în timpul pornirii sistemului.

TRACERSQL:=Con .[Link] en el título de la ventana principal la sentencia SQL que está e


executare de când se inițiază sistemul. În plus, instrucțiunea SQL este copiată în Clipboard de
Windows pentru a fi lipit apoi cu <Pastați sau Paste> în programul de administrare a bazei de date
date.

Bază de date MySQL

Pentru o mai mare comoditate, am creat un manual „c:\dpadmwin\docs\[Link]” bazat pe


experiență de utilizare cu acest fabulos motor de bază de date relațional.

Înainte de a instala sistemul, trebuie să instalați baza de date pe server și să-i acordați permisiuni pentru
fiecare utilizator care îi permite sistemului să realizeze conexiunea. Amintiți-vă că permisele sunt acordate de
rațiuni de securitate a accesului pentru a preveni ca un alt utilizator cu acces la adresa IP a
serverul se conectează și poate manipula sau afecta datele.

După instalarea sistemului, se solicită adresa IP a Serverului, în cazul în care este localhost „în
mismo PC”, sistemul va încerca să se conecteze la baza de date, în cazul în care nu reușește să o facă
conectivitate sistemul va executa două comenzi „instalarea serviciului și inițierea serviciului” care

Manual de utilizare Capitolul VI. Pag: 33


Programare

se găsesc în fișierul “mysql [Link]”. Integratorul îl va putea adapta la nevoile sale


necesități.

FICHERO

APLICAȚII SAU MODULUL SISTEMULUI

Permite modificarea și eliminarea modulelor existente, precum și crearea de module noi


al sistemului. Effecțele vor fi vizibile în "Aplicații".

TABLA DE DATOS

Utilizatorul selectează tabelul de date și pentru fiecare câmp trebuie să indice tipul de control
GET, COMBO, RADIO, CHECK, etc. și atribute pentru fiecare câmp, care va fi utilizat pentru a crea
programa sursă xBase care permite executarea unui formular de încărcare a datelor care include tot
funcționalitatea necesară pentru: A include sau a modifica un registru dintr-un tabel SQL. DPxbase oferă
clasa TDPEDIT care controlează formularul cu tabelul de date și navigatorul de înregistrări, are
métodos "methods" para: Iniciar, Grabar, Cancelar, Imprimir, Validar, enlaces, campos únicos y un
fără număr de utilități. Când DPxbase detectează că un câmp este referit cu o altă tabelă
ce include un formulariu cu întreaga sintaxă în format xBase, face posibilă legarea la una sau mai multe
tabele cu proprietățile de accesare, căutare și returnare cu câmpul dorit.

În fiecare câmp, se poate personaliza mesajul interactiv, controlul necesar și validările


necesare.

Manualul utilizatorului Capitolul VI. Pag: 34


Programare

DPxbase, sugerează sintaxă pentru fiecare control, dacă un câmp este referit cu o altă tabelă, va fi
sugerat controlul BMPGET cu toată sintaxa care îi permite utilizatorului să acceseze tabela
referențiată și corelată cele două valori. Imaginea următoare arată controalele create de
DPxbase pentru câmpuri legate de tabelele referite, pentru primele cazuri programatorul
a selectat BMPGET, iar al doilea a selectat controlul „COMBOBOX”, în niciun moment nu a
programatorul a trebuit să scrie o singură linie de cod. DPxbase, sugerează sintaxa
necesară.

Obiectivul DPxbase este de a reduce considerabil timpul de dezvoltare a aplicațiilor,


de asemenea, oferind flexibilitate pentru a accesa și a adapta componentele create, pentru formulare
creează un program sursă scris în format PRG sub clasele "classes" de Fivewin pentru gestionare
de controale, fiecare control este definit și asociat formularului container și coordonatele se
expresate în linii și coloane, aceste poziții pot fi reorganizate în timp de execuție,
formularul dispune de această opțiune. Imaginea următoare arată un formular definitiv compus
por encabezado și Corpul “Rânduri” și în niciun moment nu a fost nevoie să scriu o linie de
codul, a fost necesar doar să realocăm controalele.

Sintaxa generată pentru controlul „Combobox” este următoarea

@ 6.1, 1.0 COMBOBOX oINV:oINV_IVA;


VAR oINV:INV_IVA;

Manualul utilizatorului Capítulo VI. Pag: 35


Programare

ITEMS aItems1;
CÂND;
AccessField("DPINV","INV_IVA",oIVA:nOption);
.SI. oINV:nOption!=0);
FONT oFontG

Fiecare valoare este reprezentată de:

oINV: Reprezintă obiectul clasei TDPEDIT sau formularul conținător.


oINV_IVA:Representa al control “ComboBox” y para su nombre se utiliza el mismo campo
del cod cu prefixul “o” care îl asociază cu “Obiect”.

VAR oINV:INV_IVA:Reprezintă variabila Virtuală a formularului creată automat


din câmpurile tabelului de date. Pentru mai multă comoditate, formularul consideră ca
variabile toate câmpurile și valorile din tabelul de date.

AccessField("DPINV","INV_IVA",oIVA:nOption)Această funcț ie asociază accesul la tabelă ș i


câmpuri cu mecanismul de securitate definit de utilizator, unde poate restricționa
acces la câmpurile unei tabele.

GENERATOR DE PROIECTE SAU LISTE

Apoi, după crearea tabelelor de date, DPxbase generează o listă de navigare folosind clasa
xBrowse, include butoane sugerate pentru: Includere, consultare, modificare, eliminare, imprimare și
naviga, de asemenea; utilizatorul poate selecta în mod ordonat câmpurile de
tabele cu titlurile respective care vor constitui lista de navigare a cursorilor unei
o variație de tabele SQL.

Manualul utilizatorului Capitolul VI. Pag: 36


Programare

Prin apăsarea tastei „Executare”, se deschide Browse-ul definitiv în fereastra MDI, cu toate
opțiunile disponibile pentru: Includere, Consultare, modificare, eliminare și funcții de
navigare. Acest nou Browse poate fi modificat în timpul execuției, toate
instrucțiunile sunt înregistrate într-un fișier de format simplu care permite extinderea acestora
alcances, cum ar fi: Adăugarea de butoane noi.

OPȚIUNI PENTRU CAMPOURI

Face parte din dicționarul de date și are ca scop definirea diferitelor opțiuni
selectabile prin controlul "COMBOBOX" pentru a atribui valoarea unui câmp în timpul
încărcarea datelor din formulare sau emisii de rapoarte.

De asemenea, contribuie la generarea codului sursă pentru formulare și rapoarte,


sistemul detectează câmpurile care au opțiuni și construiește sintaxa pentru control
COMBOBOX furnizând conținutul opțiunilor. Pentru a fi utilizat în mod dinamic se
include în codul sursă funcția: GETOPTIONS("TABLA","CAMPO"), facilitând utilizarea
noile opțiuni care pot fi adăugate pentru câmp.

Pentru a aloca noi opțiuni pentru câmp, accesați formularul de tabele, în bara de

butonii se află, Opțiunile câmpurilor. Prezintă din tabelul care este


focalizată o nouă fereastră conținând toate câmpurile care pot accepta
opțiuni. Concentrați-vă cu mouse-ul pe câmpul dorit și dați un dublu clic sau apăsați butonul

„modificar”, din nou se va prezenta o fereastră de dialog care permite: adăugarea,


modificați sau eliminați fiecare descriere care formează opțiunile câmpului.

Manualul utilizatorului Capitolul VI. Pag: 37


Programare

Această fereastră pentru întreținerea opțiunilor indică numele tabelului și numele


câmpul, conține diversele opțiuni deja înregistrate și prin: Includere, Modificare și
Eliminare, este posibil să actualizăm fiecare linie din listă.

Este important să ținem cont de lungimea câmpului, dacă are un digit, va fi presupus
primul caracter al opțiunii. Exemplu: Opțiunea „Caracter” odată selectată, va putea doar
a stoca primul caracter „C”, din cauza spațiului fizic pe care îl suportă. În cazul în care este nevoie
mai multe opțiuni și două sau mai multe dintre ele coincid în primul caracter, trebuie să extindă lungimea
del câmp. Dacă lungimea câmpului este de 3 cifre, vor fi păstrate primele trei
valori ale opțiunii specificate pentru stocarea fizică în tabel

Consideraț ii:

Controalele combobox vor afișa opțiunile în aceeași ordine în care sunt înregistrate.

Pentru a utiliza valorile op ț iunilor în coloanele rapoartelor, pute ț i


Utilizaț i funcț ia SayOptions() ca expresie a coloanei. Exemplu:

SayOptions("DPTABLAS","CAM_TYPE",oCursor:CAM_TYPE)

Întrebări: 1.-Unde se plasează acea instrucțiune, adică înainte de ce și după ce.


2.-Pe ce ecran se află generatorul de rapoarte?

Manualul utilizatorului Capitolul VI. Pag: 38


Programare

MENIU DE ACCES

Permite modificarea și eliminarea meniurilor modulelor existente, precum și crearea


noi meniuri pentru modulele sistemului. Efectele vor fi vizibile în „Fișiere, Tranzacții,
Informații, Procese și Altele.

DPxbase are un concept de lucru sistematizat unde numele fiecărui program, raport,
formularul este direct asociat la tabele, dacă tabela se numește DPMENU, Browse se
se va numi [Link], Programul DpXbase pentru formular se va numi [Link],
Raportul va fi: [Link], reușind astfel să localizăm orice componentă pentru a o adapta. În plus;
facilitează personalizarea numelui tabelelor și formularelor în timpul execuției, reușind astfel ca
utilizatorul poate indica nume specifice în orice tabel și direct opțiunile de:
Meniu, Formulare și Rapoarte, exemplu: Dacă descrierea tabelului Meniu de Acces „DPMENU” este
„Meniu de Acces”, titlul formularului de produse va adopta numele de „Meniu de Acces”
în același mod, câmpul „Singular” este utilizat pentru a indica numele tabelului într-un al treilea
formular care este legat de tabel. Sintaxa necesară pentru a asocia numele tabelului
în meniul de acces trebuie să fie:{oDp:DPMENU}în câmpul 'Titlul Meniului' după

faceți clic pe pictogramă „Meniul de Acces” din bara de unelte a sistemului și apoi în

butonul „Includere”. {oDp:DPMENU} <Aplicații>

DEFENIȚIA MENIULUI

Toate opțiunile din meniul principal al sistemului sunt definibile de utilizator, iar aceasta
esquematizat pe module, în fiecare modul sunt meniurile: Fișiere,
Transacții, Rapoarte, procese și Altele asociate exclusiv cu fiecare aplicație, acestea
opțiuni: Macros și Bara de activități sunt de asemenea definibile în același mod, doar diferă
că aceste opțiuni sunt generale pentru toate aplicațiile, de asemenea putem spune că
o aplicație într-un modul și un sistem este compus din module.

Alte avantaje în definirea meniului sunt plasarea numelui tabelului asociat


ca titlu al opțiunii din meniu, adică; dacă tabela de produse este definită ca
„Produse din Inventar”, acest nume poate apărea în titlul opțiunii din meniu
când este executat, permițând adaptarea opțiunilor într-un mod direct scris „Opțiunea” sau
prin intermediul numelui de utilizare al unei tabele, reușind să personalizăm aceleași opțiuni în funcție de

Manualul utilizatorului Capitolul VI. Pag: 39


Programare

tipul de companie sau țara. De exemplu, în Venezuela numim "Notă de Livrare"


un document care indică produsele care sunt livrate clientului înainte de facturare, în
Colombia se numește „Nota de Despacho” iar în Spania se denumește „Albarán”.

PROGRAME SURSE DPXBASE

DPxbase, generează și recunoaște cod de lexic xBase bazat pe xHarbour și comenzi pentru
FiveWin. Acest limbaj este compilat și interpretat în timpul execuției, permițând utilizatorului
adăugați sau modificați programe fără a fi nevoie să refaceți programul executabil final. DpXbase
acepta: IF,ELSE, ENDIF,WHILE, ENDDO, DOCASE,ENDCASE, y todos los comandos
Clipper/xHarbour/FiveWin.

Programele sursă sunt stocate în tabela DPPROGRA și, din motive de securitate, se
păstrează o copie în folderul \SCRIPT\ și fiecare program este stocat în format text simplu cu
extensia “.SCR” și versiunea anterioară este stocată cu extensia “.BAK”.

Sistemul oferă un editor de text de tip „RTF” (Rich Text Format) care permite realizarea
editare și/sau scriere de programe DpXbase.

Crearea unui nou program

Manualul Utilizatorului Capitolul VI. Pag: 40


Programare

F2 Pentru a înregistra
F5 Compilare ș i Executare

Procesul de compilare generează un nou fișier cu extensia ."DXB" în folderul DPXBASE și


este conține instrucțiunile și clasele traduse în lexicul de execuție DpXbase gata să fie
executat prin funcția EXECUTA(„PROGRAM”,uPar1,uPar2,uPar2,..uPar20).

Toate programele DpXbase trebuie să respecte următoarele reguli:

1. Trebuie să declarați fișierul de antet #INCLUDE "DPXBASE" care se află în


carpeta „INCLUDE” și conține toate traducerile comenzilor către funcții și/o
clase, de asemenea face referiri la alte fișiere de antet care conțin valorile
predefinite, cum ar fi:

Culorile definite în "INCLUDE\[Link]", la care ne referim adesea prin


următoarea expresie: oControl:SETCOLOR(CLR_WHITE,CLR_YELLOW), CLR_WHITE și
CLR_YELLOW sunt definite în [Link]

#define CLR_YELLOW 65535 // RGB( 255, 255, 0 )


#define CLR_WHITE 16777215 // RGB( 255, 255, 255 )

2. Trebuie să declare prima procedură sau funcție în următoarea formă:

#INCLUDE “[Link]”
PROCEDURA PRINCIPALĂ()

Manualul utilizatorului Capitolul VI. Pag: 41


Programare

ÎNTOARCE

O De asemenea

#INCLUDE "[Link]"
FUNCȚ IA PRINCIPALĂ()
ÎNTORCE NIL

3. Trebuie să finalizeze funcția cu comanda RETURN atunci când este declarată cu PROCEDURA
și comanda RETURN <uValoare> trebuie utilizată atunci când MAIN este definit ca o
funcție prin FUNCTION. Diferența dintre FUNCTION și PROCEDURE este doar în
RETURN care, în cazul PROCEDURE, returnează o valoare nulă (NIL). Dacă doriți să utilizați
FUNCȚIA pentru toate cazurile poate închide cu RETURN NIL.

4. Declararea Variabilelor: Acceptă doar două moduri de Declarare: LOCAL și PRIVATE,


valorile locale sunt utilizabile în cadrul funcției în care au fost declarate și valorile
PRIVATES sunt utilizate în celelalte funcții care sunt invocate din funcția lor
declarație. Nu declarați variabile cu PUBLIC deoarece poate folosi memorie inutilă,
DpXbase oferă obiectul oDp care înlocuiește utilizarea PUBLIC și gestionează mai bine
consum de memorie. Exemplu pentru declarația variabilelor:

PROCE MAIN()
LOCAL cChar:=Space(40),nNum:=100,dFecha:=CTOD("")
MsgAlert(Len(cChar)) // Afiș ează 40
ÎNAPOI

5. Declarație de Funcții, puteți declara funcții prin intermediul instrucțiunii FUNCTION și


declarare parametrii care primesc valori și returnează un rezultat. Exemplu:

PROCE MAIN()
LOCAL cChar:=Space(40),nNum:=100,dFecha:=CTOD("")
Multiplicar(nNum,20)
ÎNTORCE

FUNCTIONMULTIPLICAR(nValor,nPor)
LOCAL nResp
NResp:=nValor*nPor
MsgAlert(STR(nResp))
RETURN nResp

Manualul utilizatorului Capitolul VI. Pag: 42


Programare

BUTONII BAREI DIN MENIUL PRINCIPAL

La fel ca meniul principal, butoanele sunt definite de utilizator, reușind să indice:


Fișier Bitmap, acțiunea care se va executa, aplicația asociată și condiția de execuție. Se pot
indicați tabelele cele mai utilizate pentru o aplicație specifică sau pentru toate aplicațiile.

DPxbase oferă aplicației finale un set de instrumente utile pentru operativitatea acesteia
sistem, cum ar fi: Utilizatori, acces pentru tranzacții cu tabel, restricții pentru câmpuri,
Meniul de Acces, auditul activităților utilizatorului.

PERSONALIZAREA MESAJELOR ÎN BARA DE BUTOANE

Programul „DPBARMSG” creează un obiect de tip „TSAY” care prezintă un chenar în


bară de butoane cu scopul de a indica texte care pot ajuta utilizatorul să identifice
activități precum: Aplicație care se rulează, data sistemului, perioada contabilă sau orice altceva
alte informații pe care doriți să le indicați. Toți parametrii Obiectului, cum ar fi:
Coordinatele, dimensiunea, fontul, culoarea de fundal, culoarea textului și mesajul pot fi
personalizate în acest program, rămânând complet la aprecierea utilizatorului utilizarea acestora.
Pentru o mai mare comoditate, programul „BOTBARCHANGE” care se execută la fiecare schimbare de
aplicația elimină din bara de butoane tot conținutul său pentru ca apoi sistemul
reintroduce butoanele care îndeplinesc condițiile aplicației,
în plus, execută „DPBARMSG” pentru a afișa noile mesaje pentru aplicație
solicitată.

LEGATURA ÎNTRE Tabele

Așa cum sugerează numele, permite realizarea legăturii între tabele prin intermediul unui câmp.
comun între ambele tabele. De exemplu, tabelul muncitorului “nmtrabajador” trebuie legat cu
tabelul departamentului, funcția, unitatea funcțională, absența etc., pentru aceasta se utilizează câmpul cod
al muncitorului.

ALTE FUNCTII
GENERATOR DE RAPOARTE

Manualul utilizatorului Capitolul VI. Pag: 43


Programare

DPxbase oferă un asistent care permite crearea de interogări de tip SQL cu ușurință și în
câteva minute. De asemenea, generează cod xBase pentru clasa TREPORT, facilitând imprimarea
consulta SQL proiectată, de asemenea; consulta poate fi exportată în format DBF cu
finalitatea de a fi utilizată în designul rapoartelor prin Crystal Report.

DESIGNUL FORMULARELOR

Pornind de la programul Fuente "xBase" creat de DPxbase, utilizatorul poate proiecta,


modifica în timpul execuției toate controalele formularului folosind mouse-ul, pentru
fiecare poate configura: Linie, Coloană, Înălțime, Lățime, culori și fonturi pentru fiecare
control în timpul execuției fără a folosi resurse create în altele
aplicaciones.

În partea de sus a feronției sau denumită în mod obișnuit "SysMenú", formularul


dispune de mai multe opțiuni care permit activarea modului de design al formularului, permițând
personalizați-l în timp real, această muncă poate fi efectuată de programator sau
utilizator final.

După activarea modului de design, este posibil să focalizezi orice control prin intermediul mouse-ului,
mutați-l în orice poziție, măriți sau micșorați dimensiunea acestuia pentru un plus de confort
DPxbase oferă alternative pentru a accelera designul.

Manualul utilizatorului Capitolul VI. Pag: 44


Programare

Următoarea imagine ilustrează utilizarea opțiunii: „Culoare” selectată pentru control


focalizat, adică; se poate selecta culoarea fundalului.

Imagini următoare, arată posibilitatea de a schimba culoarea textului controlului și


de asemenea, sursa literelor.

Manualul utilizatorului Capitolul VI. Pag: 45


Programare

DPxbase integrează sub un singur concept: Tabelul de date, Navigatorul „Browse”,


programe surse „DpXbase”, formular pentru încărcarea datelor și rapoarte sub un
un set de elemente identificate și asociate cu tabela de date.

DPxbase a fost creat exclusiv pentru a crea aplicații de tip comercial și


orientat către lexicul xBase, generând produse finale într-un timp scurt și sub conceptul de
arhitectură deschisă care îi permite integratorului sau utilizatorului final să o adapteze după criteriile sale.

DPxbase menține în dezvoltare continuă căutarea maturității tuturor


instrumente cu scopul de a adăuga valoare componentelor de dezvoltare și la
produse finale create pentru Client. DPxbase moștenește toată experiența DpXbase
creat pentru Datapro timp de 15 ani sub popularul și de succesul compilator "Clipper" care
a reușit să se poziționeze pe piață cu mii de instalații satisfăcătoare, în parte datorită
la comoditate și ușurința de a îndeplini cerințele utilizatorului. Acum este DPxbase
pentru 32 de biți și bază de date de tip SQL.

CONTINUITATE ÎN DATAPRO PENTRU TABELA DBF

Toate tabelele de date în format DBF sunt complet portabile în structură și


conținut către noul format de date utilizat de DPxbase (Motor SQL). Opțiunea

Manualul utilizatorului Capitolul VI. Pag: 46


Programare

IncluirTablas are opțiunea „Importați din DBF”, utilizatorul trebuie doar să indice
numele tabelului de Date DBF și DPxbase se ocupă de a-l defini în dicționarul de
Date și construirea structurii sale. În plus, DPxbase oferă un proces de Migrație de
Inregistrari din tabelele DBF utilizate de produsele anterioare.

CONTINUITATE ÎN LEXICUL XBASE DE LA PRODUSELE DOI

Deși DPxbase este compilat cu C++, limbajul Xbase încorporat suportă în mare
parte procedurile din versiunea DOS, atâta vreme cât nu necesită interacțiune
cu o interfață video sau de imprimare. Tabelele de date din versiunile anterioare se
se identificau prin „ALIAS” exemplu: „alias->campo”, acum în DPxbase va fi
indicând un cursor, exemplu „oCursor: Campo”, tipurile de date sunt 100% compatibile.
Partea din programele scrise în DpXbase pentru DPxbase a fost obținută din versiuni
anterioare cu foarte puține schimbări, unde se profita de maturitatea codului deja scris.

COMPONENTE DATASET

Este un gestionator de date controlat printr-o clasă de obiecte care interacționează cu o


tabloul de date și are ca scop manipularea oricărui tip de date compatibile cu
lexic xBase.
Componenteul DataSet a fost incorporat în sistem cu scopul de a stoca
mai multe tipuri de date selectate fără a fi necesar să se folosească tabele specifice
pentru stocarea sa..

Generatorul de rapoarte este o aplicație a sistemului care utilizează în mare măsură


componente Dataset pentru a stoca valori precum: Parametri, Interval și Criteriu, fiecare
raportul conformă o secțiune a Setului de Date. Atunci când utilizatorul din fereastra de execuție
Un anumit raport indică „Setați parametrii raportului”, utilizează setul de date
pentru a stoca toate valorile utilizate în acea execuție a raportului, în scopul de
retomarlos în viitor și presupunând că acești parametri sunt utilizați în mod obișnuit.

Sistemul dispune de două seturi de date, fiecare stocând valorile în tabele distincte,
"DPDATACNF" este utilizată pentru tot ceea ce se referă la configurația generală a sistemului și
"DPDATASET" stochează valori în mod independent în fiecare companie definită la
prin intermediul unui „DSN”.

Manualul Utilizatorului Capitolul VI. Pag: 47


Programare

Pentru parametrii generatorului de rapoarte (Stabilire: Interval și Criteriu) este utilizat


„DPDATACNF”, deoarece toate rapoartele pot fi utilizate în orice DSN și
configurarea fiecărei companii este stocată în „DPDATASET”.

Pentru a stoca date în DataSet-ul de configurare, se folosește în următorul mod:

PROCE MAIN()
LOCAL oData
oData:=DataCnf(“MISECCION”)
oData:cValor:=”Prueba”
oData:Finalizare()
ÎNTORCE NIL

Pentru a citi datele din DataSet, trebuie efectuat în următorul mod:

FUNCȚIE PRINCIPALĂ()

OData local
oData:=DataCnf(“MISECCION”)
MsgAlert(oData:cValor)
oData:Finalizare()
RESTITUI NIL

Puede observar que en ambos casos, se emplea un valor virtual“oData:cValor”de la clase


TDataSet și în mod automat detectează alocarea unei noi valori, o stochează și
de asemenea, îl restaurează atunci când se află salvat în tabel. Metoda „End()” stochează
în mod automat noile valori sau valorile existente care suferă vreo modificare.
De aceea, este foarte practic să folosești acest component în stocarea datelor.

Pentru a utiliza DataSet-ul în configurația fiecărei companii, este necesar să folosiți


următorul exemplu scris în DpXbase:

PROCE MAIN()

Local oData,oDlg

oData:=DataSet(“DATEMPRESA”)
oData:cDir:=oData:Get("DIR",SPACE(20))
oData:cTel:=oData:Get(„TEL”,SPACE(12))
oData:cRep:=oData:Get(“REP”,SPACE(40))

DEFINE DIALOG oDlg TITLE "CONFIGURARE"

Manualul utilizatorului Capitolul VI. Pag: 48


Programare

@ 1,1 GET oData:cDir


@ 2,1 GET oData:cTel
@ 3,1 GET oData:cRep

ACTIVEAZĂ DIALOG oDlg

oData:End()

ÎNAPOI
// EOF

CLASE TDATASET:

Se ocupă de gestionarea, citirea, înregistrarea tuturor celor referitoare la DataSet, se generează din
funcțiile DataCnf() și DataSet(), ambele returnează obiectul clasei TDataSet, la
continuăm detaliind metodele sale.

. Get(cVarName,uValue):
Obține valoarea referită de "cVarName" în cazul în care nu există auto creat cu valoarea
indicat în „uValue”. De asemenea, poate fi folosit în mod direct:
oDataSet:cVarName

. IsDef(cVarName):
Returnează .T. sau .F. dacă valoarea lui "cVarName" există.

. Set(cVarname,uValue):
Asignați valoarea "uValue" pentru "cVarname", de asemenea poate fi folosit ca:
oDataSet:cVarname:=uValue

. Save():
Stochează în tabel toate valorile din DataSet.

. Del():
Elimină o valoare din DataSet și din tabel, exemplu: oDataSet:Del(cVarName)

. DelGroup(cGroupName):
Elimină toate componentele asociate unui grup.

. Load():
Încărcați toate valorile din tabel și generați valorile virtuale ale Dataset-ului

Manualul utilizatorului Capítulo VI. Pag: 49


Programare

DataSet dispune de trei modalități pentru stocarea și recuperarea datelor, acestea


fiul

“ALL”:Almacena y recupera los datos para todos los usuarios y “PC” que accedan al
sistem.

“PC”:Almacena y recupera los datos sólo para el PC que lo solicita, el nombre del PC es
obținut din Sistemul de Operare. Este de remarcat că pe fiecare PC este posibil să se genereze
configurații diferite.

“USER”:Almacena y recupera los datos sólo para el usuario que solicita, es decir; cada
utilizatorul poate dispune de configurări diferite.

Se denumesc valori virtuale acele “ClassData” sau variabile care nu sunt definite în
în clasă, ci se generează dinamic fie prin alocare directă
oDataSet:nValue:=10000" o prin citirea tabelului unde sunt stocate
valori ale Dataset-ului.

Pentru sistemul de salarizare DpNmWin, setul de date a fost utilizat pe scară largă în
stocarea tipurilor de salarii care sunt procesate cu scopul de a putea recupera
tipuri de salarii în următoarele execuții.

FUNCȚII PENTRU SENTINȚE SQL

GetWhere(cOperador,uValor)

Construiește o condiție pentru sentința WHERE sau SET pentru a crea o comandă SQL.
Exemplu

cNomre:=”Datapro”
cWhere:=”UNCHI CAMPO”+GetWhere(“=”,cNombre)

Căderea este construită în următoarea formă:

UNDE CAMPO='Datapro'

Rețineți să folosiți ghilimele [‘] sau Chr(39) simple pentru a indica șiruri de caractere în cadrul unei comenzi
SQL. De asemenea, această funcție este legată de configurația datelor utilizate de

Manualul utilizatorului Capitolul VI. Pag: 50


Programare

motorul bazei de date poate fi folosit confortabil fără a ține cont de reguli
pentru datele și complexitatea construirii acesteia:

Exemplu:

dData:=DATA()
cWhere:=”WHERE FECHA”+GetWhere(“=”,dFecha)

Sentința rezultă astfel:


UNDATĂ=’20041231’

În mod tradițional, condiția WHERE folosind datele trebuie construită astfel:

UNDE FECHA=[’]
+STRZERO(ANUL(dFecha),4)+STRZERO(LUNA(dFecha),2)+STRZERO(ZIUA(dFecha),2
)+[‘]

Confortabil „UNDE DATA”+GetWhere(„=”,dFecha)îl simplifică.

FUNCȚII PENTRU GESTIONAREA DATELOR

Întreaga gestionare a datelor în Datapro se realizează prin comenzi SQL, accesul la


datele din una sau mai multe tabele sunt solicitate folosind instrucțiuni care returnează un cursor de date
într-un plan bidimensional compus din linii și coloane: Liniile reprezintă
registrii și coloanele reprezintă câmpurile.

DESCHIDEȚI TABELA(CSQL, LDATA)

Solicita un cursor de date SQL.


Trebuie să conțină o propoziție de lexic SQL
Indică cu .T. și încarcă datele. Implicit, valoarea sa este .T.

Exemplu:

oCursor:=OpenTable("SELECT TAB_NUMERO,TAB_TABLE"+;
„DIN DPTABLAS”+;
ORDONAȚI DUPĂ TAB_NUMERO

Manualul Utilizatorului Capitolul VI. Pag: 51


Programare

oCursor:MergeInSus()
ÎN TIMP CE !oCursor:Eof()
? oCursor:TAB_NUMERO,oCursor:TAB_TABLE
oCursor:DbSkip()
SFÂRȘ IT
oCursor:Final()

Puteți observa că interogarea poate fi gestionată într-un mod similar cu o tabelă DBF
deschisă prin funcții ale RDD sau mai bine zis deschisă cu: FOLOSIND TABELA. Pentru mai mult
informații consultați clasa TTABLE din acest manual.

ASQL(CSQL)
Returnează un tip de date Arreglo bidimensional conținutul cursorului generat de
consulta SQL. Exemplu: aSql:=ASQL(“SELECT CAMPO FROM XTABLA”). aSql conține
lista de date. MsgAlert(aSql[1,1]), arată prima coloană și coloană. Pentru a evalua
răspunsul poate utiliza: ViewArray(aSql)

DO(bWhile,bFor,bRun)

Execută în mod ciclic conform procesului indicat în <bRun> dacă condiția este îndeplinită
<bFor> până când se îndeplinește <bWhile>.

#[Link]

FUNCȚIA PRINCIPALĂ()
LOCAL nTotal:=0,oCursor

oCursor:=OpenTable(“ SELEC DOC_NETO,DOC_FECHA FROM DPDOCCLI”,.T.)

FAC({||!oCursor:Eof()},;
{||oCursor:DOC_FECHA=oDp:dFecha},;
{||nTotal:=nTotal+oCursor:DOC_NETO,oTablas:skip(1)}

Totaliza suma netă conform documentelor emise în funcț ie de dată


del sistemului.

SQLDELETE(CTABLA,CWHERE)

Șterge din tabelul <CTABLA> cantitatea de înregistrări indicată în <CWHERE>

SQLUPDATE(CTABLA,CCAMPO,XVALOR,,CWHERE)

Permite actualizarea valorului unui câmp al cantității de înregistrări indicate în clauza


Unde. Exemplu:

Manualul utilizatorului Capitolul VI. Pag: 52


Programare

SqlUpdate("NMTRABAJADOR","TIP_NOM","Q","TIPO_NOM='S'") Schimbă tipul de plată


pentru Quincenal de toți lucrătorii de plată săptămânală.

SQLGET(CTABLA,CCAMPO,CWHERE)

Obține valoarea unui câmp dintr-un tabel conform condiției indicate în Where.
Unde poate fi inclusă clauza JOIN.
SQLGET(„NMTRABAJADOR”,„CONCAT(APELLIDO,”,”,NOMBRE)”,„CODIGO=’00001’”).
Obține numele și prenumele lucrătorului.

SqlGet() poate înlocui cu ușurință utilizarea funcțiilor DBLocate() și DbSeek()


utilizate în tabelele DBF conform RDD.

DTOSQL(DFECHA)

Converteți formatul de dată xBase în format de dată pentru Motorul SQL, conform
formatul definit în "oDp:cSqlDate" configurat anterior în [Link] [SQLDATE].

[UPDATE DIN TABLA BCAMPO=’]+DTOSQL(<bFecha>)+[‘]

Cade așa:

UPDATE DIN TABLA BAMPO=’2005-04-02’

SQLTODATE(CFECHA)

Convierte las fechas SQL en fecha xBase, según el formato definido en “oDp:cSqlDate”
predefinit anterior în [Link] [SQLDATE]. Unele funcții MAX sau MIX de SQL
aplicate asupra câmpurilor de tip dată, generează expresii de tip caracter care
reuie să fie convertită într-o formă de dată reală.

bDate:=SQLGETMAX(“DATABLA”,”CAMPO”,<WHERE>) // 2005-05-02
bData:=SQLTODATE(cFecha) // 02/05/2005

Numele tabelului
<aFields> Lista de campos, puede ser un arreglo un una lista de campos entre comillas

BDLIST(CTABLE,AFIELDS,LGROUP,CWHERE)

Generează un cursor de date conform:

Manualul utilizatorului Capitolul VI. Pag: 53


Programare

Numele tabelului
Lista de câmpuri, poate fi un aranjament sau o listă de câmpuri între ghilimele
separas con coma, ejemplo: “Campo1,Campo2,Campo3”
<lGroup> și este adevărat .[Link]ă cursorul folosind GROUP BY în toate câmpurile.
Valoarea sa implicită este .f.
Valor opțional, poate constitui clauza WHERE a interogării și permite
filtrați liniile interogării.

Prezenta la consulta prin intermediul unui editor de înregistrări care permite selectarea oricărei
registro devolvând valoarea primei linii. Are o utilizare ridicată în casetele de interval și
criteriu în executarea unui raport, permițând importarea valorilor dintr-un câmp către
casillas.

Exemplu:
uValue:=BDLIST(“NMTRABAJADOR”,”CODIGO,APELLIDO,NOMBRE,SALARIO”)

BDSELECT(CTABLE,AFIELDS,LGROUP,CWHERE))

Generează un cursor de date după:

<cTable> Nombre de la tabla


<aFields> Lista de campos, puede ser un arreglo un una lista de campos entre comillas
separas con coma, ejemplo: “Campo1,Campo2,Campo3”
<lGroup> și este adevărat .[Link]ă cursorul folosind GROUP BY în toate câmpurile.
Valoarea sa implicită este .f.
Valor opțional, poate configura clauza WHERE a interogării și permite
filtrare liniile interogării.

Prezentați consulta „Cursor” prin intermediul editorului de înregistrări, cu scopul de a realiza


selecție multiplă de înregistrări, adică; marcare a înregistrărilor necesare, la final returnează
o secvență cu toate valorile selectate și reprezentate de prima coloană.

cValue:=BDSELECT(“NMTRABAJADOR”,”CODIGO,APELLIDO,NOMBRE,SALARIO”)

Și dacă utilizatorul a selectat patru muncitori, valoarea lui cValue va fi: "001","002","003","004"

Si doriți să-l transformați într-un aranjament, puteți folosi:

aList:=MacroEje(„{“+cValue+”}”)

De asemenea, recomandată:

Manualul utilizatorului Capitolul VI. Pag: 54


Programación

aList:=_Vector(cValue)

GETOPTIONS("TABLA","CAMPO")

Returnează într-un array toate opțiunile înregistrate pentru un câmp dintr-un anumit tabel.
Exemplu:

aOpcion:=GETOPTIONS(„DPTABLAS”,„CAM_TYPE”)

Devuelve una lista o arreglo con los siguientes valores: “Numerico”, ”Date (Fecha)”,
”Carácter”, ”Logica” y ”Memo”.

SAYOPTIONS(cTable,cField,uValue)

Caută și returnează opțiunea găsită conform valorii <uValue> din listă


opțiuni înregistrate în câmpul <cField> din tabela <cTabla>.
Ejemplo:

cOpcion:=SAYOPTIONS(“DPTABLAS”,”CAM_TYPE”,”C”)

Valoarea de <cOpcion> este „Caracter”. În cazul în care nu se găsește opțiunea căutată,


devolvă valoare goală.

INNERJOIN(cTabela1,cTabela2,cInner)

Caută în dicționarul de date relația existentă între două tabele și construiește-l.


clauza INNER JOIN din instrucțiunea SQL necesară pentru conectarea între tabele
solicitate.

Exemplu: INNERJOIN("DPTABLAS","DPCAMPOS")

Returnează: INNER JOIN DPCAMPOS ON TAB_NUMERO=CAM_NUMTAB

SQLINCREMENTAL(tabel,câmp,condiț ie)

Obține valoarea maximă a câmpului <cField> din tabela <cTable> și o crește cu 1,


determinând valoarea următoare. Exemplu:

MsgAlert( SQLINCREMENTAL(„DPCLIENTES”,„CLI_CODIGO”) )

Manualul utilizatorului Capitolul VI. Pag: 55


Programare

VIZUALIZEAZĂARRAY(aArray)

Afișează într-o fereastră MDI conținutul unui tablou multidimensional.


oDp:lViewArrayMdi:=.T. Afișează în fereastra MDI
oDp:lViewArrayMdi:=.f. Afișează în Caseta de Dialog.

OBIECTE

Clase TTable
Clasa DpLbxRun
Clase DpEdit
Clasă TDocEnc
Clase TDocGrid
Clasa TGridCol
Formulare de Documente compuse din Antet ș i Corp.

Acest tip de documente se generează în mod obișnuit de tabele de bază corelate, primul
se ocupă de antet, cum ar fi: Factura, Comprovante contabile și
a doua tabelă se referă la rândurile sau corpul care formează documentul, cum ar fi
exemplu: Linii de factură, Înregistrări Contabile, printre altele. De asemenea, tabelul de
antetul și tabelul corpului se leagă de alte tabele, de exemplu: Pentru factură se
relacionați cu clienții și rândurile se leagă de produse.

Pentru a începe formularul, folosim funcția DOCENC care returnează obiectul definit în
la clasa tDOCENC.

DOCENC(cTitle,cForm,cFileEdt)

Parámetros:
cTitlu Título del formulario, puede ser “Titulo”
cForm Numele obiectului pentru formular, exemplu:
oForm
cFileEdt Numele fiș ierului în care să stocaț i
parametrii controalelor.

Valori sau Data Clasei


lBar Indicaț i cu .T. că includeț i opț iunile de
navigare prin bara de butoane.
cScope Indică filtrul pentru tabela din antet,

Manualul Utilizatorului Capitolul VI. Pag: 56


Programare

realizează Where în sentinț a SQL. Exemplu


DOC_CODSUC=’00001’
cScopeFind Indica filtrul pentru procesul de căutare prin
clauza WHERE a instrucț iunii SQL. Exemplu:
DOC_CODSUC=’00001’ AND DOC_TIPTRA=’D’
cPrimary Conț ine o listă de câmpuri pentru a valida non-
repetarea înregistrării ș i legătura cu tabelele
ceea ce formează corpul sau grila.
cScript Numele programului DpXbase care conț ine
funcț ii care vor fi executate.
oScroll Obiect referit la clasa TXSCROLL
oSayMsgErr Obiect al Bară de Mesaje.
oMasă Obiectul tabelului de date pentru
antet
oWnd Fereastra MDI de stil CHILD care realizează controlul
al formularului.
oDlg Ventana de tipo dialogo contentiva de los controles
formularului.
oScript Obiect script care execută funcț iile în DpXbase
oBar Control TBAR care conț ine butoanele cu
opț iuni ale formularului.
aBtn Lista de butoane pentru modul de navigare
aGrids Lista de obiecte de grilă care formează corpul
del documento.
aBtnEdit Lista de Butoane pentru modul de editare
nOpț iune Indică starea opț iunii:
0=Navegación
1=Incluir
2=Consultare
3=Modificare
4=Căutare
5=Eliminar

cLista Numele fiș ierului pentru a fi prezentat în browse este


datele din tabel ș i efectuarea căutărilor.
cPresave Numele funcț iei care se execută înainte de
realizaț i înregistrarea în registru.
cPostSave Numele funcț iei care se execută după salvare
registrul.
lSaved Indicaț i dacă înregistrarea a fost salvată.
lInc Permisiune de a include
lCon Permisiune pentru a Consulta
lMod Permisiune pentru a modifica
lEli Permisiune pentru a ș terge
lPrn Permisiune de a Imprima
cSingular Nume singular pentru înregistrare.

Metodos

Manualul utilizatorului Capitolul VI. Pag: 57


Programare

Feronă(nTop,nLeft,nWidth,nHeight) Defineți în pixeli zona formularului.


Activează(bInit,bEnd) Activează fereastra formularului, bInit
este bloc de cod executabil final
y bEnd se referă la condiția de
ieșire.
SetIncremental(cField,cWhere,cNumero) Stabilește datele care generează
câmpuri incrementale. Câmp,
condiție și valoare inițială
BuildIncremental(lSave) Generează valoare incrementală în funcție de
valori stabilite în
SeteazăIncremental()
Imprimantă() Ejecuta la función de impresión
definită în funcția PRINTĂR a
scenariul.
SeteazăTabel(cTabel,cPrimar,cUndeÎnregistrare) Asignează tabelul cu formularul,
cTable=Nombre de la tabla
cPrimary=Campo Unico.
cWhereRecord=Filtro o registros
vizibile.
GridEdit(cTable , cLinkdHead , cLinkGrid , cSql ) Crearea obiectului Grid.
cTable= Tabla asociată sau tabel fiu.
cLinkHead= Campos del encabezado
ce leagă tabelul fiică.
cLinkGrid: Câmpuri din tabla fiică
care se leagă de câmpurile
tabla de antet.
PreȘterge() Execută procesul prealabil pentru a șterge
registro. Și dacă returnează .F. nu se execută
șterge.
SeteazăSfera(cSfera) Schimbă filtrul mesei
antet.
Presa Get(cVarName) ve() Validează procesul de înregistrare. Execută-l
funcția PRESAVE declarată în
cPresave înainte de a înregistra înregistrarea.
Si returnează .F. nu se salvează.

Obține(cVarName) Obține valoarea unei variabile sau


Câmp
Set(cField,uValue) Atribuie o valoare unei variabile sau Data de
antet.
AddBtn(cFile,cText,cWhen,cAction,cFind) Adaugă un nou buton în bara de
buton pentru navigarea

Manualul utilizatorului Capitolul VI. Pag: 58


Programare

formular
cFile=Archivo BMP
cText=Mensaje Tooltip
cWhen=Condiție de activare.
cAction=Proces care trebuie executat
cFind = Identificación del Botón
AddBtnEdit(cFile,cText,cWhen,cAction,cFind) Agrega un botón cuando se active el
mod de editare (Includere sau Modificare)
cFile=Archivo BMP
cText=Mensaje Tooltip
cWhen=Condiția de activare.
cAction=Procesul care trebuie executat
cFind = Identificación del Botón
SetMemo(cField,cTitle,nTop,nLeft,nWidth,nHeight) Adaugă butonul "Câmp memo" în
bara de opțiuni pentru modul de editare
„Includere sau Modificare”.
cField=Indică câmpul care face
referință cu tabela DPMEMO
cTitle = Titulo de la ventana.
nTop,nLeft,nWidth,nHeight , área
vizualizare în pixeli pentru caseta de dialog
despre la fereastră principal
oDp:oFrameDp
ListBrw(cFileBrw) Realiza prezentarea lista de
câmpuri prin intermediul fișierului *.brw conform
data ::cList

GRIDEDIT(CTABLE , CLINKDHEAD , CLINKGRID , CSQL )

Generează corpul documentului format din coloane.

oMasă Obiectul TTabla referitor la datele gri, se


obține din datele cSql trimise de GRIDEDIT
oBrw Objeto de la clase xBrowse que realiza la
navigarea datelor, desenează liniile și
colțuri.
oScript Obiect script care realizează execuția de
funcții DpXbase, cum ar fi:
Pregrabar, Load, PostGrabar.
oHead Obiectul antetului prin intermediul clasei
TDOCENC.

Manualul utilizatorului Capitolul VI. Pag: 59


Programare

oDlg Obiect oDlg container de controale.


nRowSel Numărul liniei de gri bazat pe xBrowse
nRecSelColor Culoare RGB pentru bara indicatoare verticală
nClrPane1 Culoare RGB pentru liniile impare.
nClrPane2 Culoare RGB pentru liniile pare.
nClrText Culoare RGB pentru textul casetelor
nClrFind Culoare RGB pentru textul marcat pentru căutare.
nBtnWidth Lățimea butoanelor opțiunilor.
nBtnHeight Alto de butoanelor opțiunilor.
nBtnStyle Tipo de Botón: 0=Ninguno 1=Bmp 2=Text
nColEdit Indică coloana care este în editare

FIȘ IERE DE ASISTENȚĂ

Sunt situate în folderul "HELP\" al aplicației, acceptă fișiere de ajutor HLP și


CHM.

Este compus din două tipuri de fișiere "Traditionale HLP" care formează ajutorul
oferită de librăriile FiveWin și acestea nu fac parte din licență.

[Link] Conceptul de FiveWin


[Link] Clase, metode și date.
[Link] Comenzi
[Link] Funcții de FiveWin
[Link] Funcții Standard DpXbase
[Link] Generator de Raport Datapro

Al doilea set de fișiere cu extensia CHM conține documentație referitoare la


aplicația datapro și se compune din următoarele fișiere.

[Link] Generatoare de Reporte.


[Link] Programare
Capitol[n].CHM [n] se referă la numărul capitolului și fiecare se referă la
fiecare aplicație a sistemului. „[Link]” se referă la
procesul de instalare și configurare a sistemului.
Pentru a facilita subiectele în fiecare capitol, numele său trebuie să fie
asociat în fiecare tabel și în caz că se referă la vreun proces
se identificará după poziția meniului: Exemplu:
Aplicație Verticală Orizontală.

Manualul utilizatorului Capitolul VI. Pag: 60


Programare

Fiecare aplicație este asociată cu un „capitol[n].chm” și fiecare


tabla este asociată și la o aplicație, de aceea este
posibil să le asociezi și să activezi execuția fișierului de ajutor
corespunzător editorului de înregistrări care afișează conținutul
de o tabelă sau un formular pentru încărcarea datelor.

CLASES PROPIETARIAS DATAPRO


Constituie un set de clase care generează obiecte pentru funcții specifice pentru Datapro.

TPUBLIC

Această clasă generează un obiect public care este disponibil în întregul sistem și are ca
finalitatea de a stoca toate valorile de care sistemul are nevoie pentru funcționarea sa
tehnic și conceptual. Acest model de date inovator este extrem de productiv, evitând
uso excesiv de memorie pentru a declara variabile publice.

DpXbase furnizează obiectul <oDp> de la pornirea sistemului și conține tot.


informații referitoare la configurarea sistemului, de exemplu:

oDp:cEmpresa: Nombre de la Empresa.


oDp:cDsnData : Nombre del DSN de Datos de la empresa Activa.
oDp:cDsnConfig: Nombre del DSN de Datos de la base de datos de configuración.
oDp:cUsuario: Código del usuario que accede al sistema.
oDp:dFecha: Fecha del Sistema.

Atribuirea valorilor se realizează în mod direct sauDp:xValoare:=”Valoare Nouă”, valorile


de <oDp> son Virtuale, adică; nu sunt definite în Clasã, ci; se alocă în formă
dinamică. Exemplu:

oDp:cMiDato:=”Cualquier Dato”

MsgAlert(oDp:MiDato)
Va afișa fereastra de dialog Alert, indicând „Orice Date”

Programul DPINI este prima execuție DpXbase care se realizează la inițierea Datapro. Aici
se alocă majoritatea valorilor care definesc execuția și/sau prezentările sistemului.
De exemplu, dimensiunea butoanelor

Manualul utilizatorului Capítulo VI. Pag: 61


Programare

Metode:

GET(cVarName).Obț ine valoarea unui DATA din obiect, conform identificării


solicitată în <cVarName>, exemplu: oDp:Get(“cEmpresa”), de asemenea poate fi
oDp:cEmpresa.

ADD(cVarname,uValue).Generează o nouă DATĂ Virtuală dinamic și atribuie


valoarea, dacă cVarName există deja, omite solicitarea. Exemplu:
oDp:Add(“cEmpresa”,”Valoare Nouă”), poate fi de asemenea: oDp:cEmpresa:=”Nou
Valoare

SET(cVarName,uValue): Atribuie o valoare unei date. Dacă nu există, este adăugată.


automat. De asemenea, poate fi oDp:cEmpresa:=”Noua Valoare”.

Dacă doriți să cunoașteți toate valorile obiectului oDp, rulați programul INSPET scris în
DpxBase.

TABEL

Este o clasă proprietară a DpXbase care accesează interogări SQL folosind funcția
OpenTable(cSql,lRead) care returnează un obiect conținând interogarea SQL în stilul de
date RDD (xBase). Ttabla moștenește toate câmpurile structurii într-o formă dinamică
permițând să navighezi în fiecare înregistrare și să cunoști conținutul fiecărui câmp, exemplu:
oCursor:CAMPO.

Ttable este utilizat în întreaga aplicație pentru a accesa interogările bazei de date
necesare în Browsere, Formulare, Consultări și Raporturi.

oTable:=OpenTable(“SELECT CAMPO FROM XTABLA”,.t.)


MsgAlert(oTable:CAMPO) // Afișează conținutul CAMPO
oTable:End()

De asemenea, poate gestiona câmpuri virtuale cu scopul de a redesena interogarea, exemplu:


oTable:Replace("CAMPONUEVO",oCursor:Monto*2) , genere un nou câmp numit
CAMPONUEVO care s-a derivat din expresia: oCursor:Monto*2

Sintaxă: Ttable():Nou(cSql)

Datele Clasei TTABLE

Manualul utilizatorului Capitolul VI. Pag: 62


Programare

aDataFill: Un es un aranjament multidimensional care conține în formă bidimensională


continutul interogării SQL. Fiecare linie reprezintă un înregistrare și fiecare coloană
reprezintă un câmp. Pentru a copia aDataFill trebuie să utilizați
aData:=ACLONE(oTable:aDataFill). Și dacă doriți să vizualizați conținutul său, puteți utiliza
ViewArray(oCursor:aDataFill)

aFields: Contiene información de la estructura de laTabla, esta compuesta por


linii și coloane, fiecare linie reprezintă și fiecare coloană reprezintă structura
de los campo: Nume, tip, lungime și zecimale.

oOdbc: Conține obiectul conexiunii DSN la care aparține tabelul. De asemenea


este posibil să folosești metodele acestei clase: oCursor:oOdbc:Execute(<cSQL>)

Metodele Clasei TTABLE

Eof() : Determină dacă la lectura a ajuns la ultimul registru al interogării.

Goto(<nRecord>) : Apunta la înregistrarea <nRecord> a Interogării.

GoTop() : Poziționează primul înregistrare al interogării.

GoBottom(): Poziționează Ultimul Înregistrare al Interogării.

FieldGet(<nField>): Obține valoarea câmpului în funcție de poziția câmpului.


<nField>, poate fi numărul câmpului sau numele câmpului.

FieldName(<nField>): Returnează numele câmpului conform numărului sau poziției


de pe câmp.

RecCount(): Indică cantitatea de linii sau înregistrări a cursorului sau a interogării.

RecNo(): Indică poziția înregistrării cursorului.

FCount(): Determină numărul de câmpuri utilizate de interogare.

DbSkip(<nSkip>): Permite navigarea (Ascendent/Descendent) asupra cursorului.

Append(): Pregătește cursorul pentru a efectua instrucțiunea INSERT INTO.

Înlocuiește(cField,uValue): Înlocuiește valoarea coloanei (Câmp) identificată cu


<cField> în funcție de valoarea <uValue>.

Manualul utilizatorului Capítulo VI. Pag: 63


Programare

Commit(): Execută comanda INSERT INTO pentru a adăuga un nou înregistrare în


tabla, pregătită anterior cu metodele append() și replace().

Commit(<cWhere>): Executa comanda UPDATE pentru a actualiza unul sau mai multe
registrele conform clauzei WHERE, pregătite anterior cu metoda Replace().

CtoDbf(cFile): Creează o tabelă în format DBF/FPT cu conținutul Cursorului. Este


necesar ca interogările care utilizează funcții, să reprezinte rezultatele la
prin etichete. Exemplu SELECT MAX(XCAMPO) AS CAMPO, coloana
MAX(XCAMPO) va fi reprezentat prin CAMPO.

Browse(): Afișează Conținutul Interogării printr-o fereastră MDI.

Executa(<cSQL>): Executa un comand SQL direct cu conexiunea


Server de bază de date.

Exemplu pentru a adăuga un nou registru:


#INCLUDE "[Link]"

PROCE MAIN()

LOCAL oTable

oTable:=OpenTable("SELECT * FROM XTABLA",.F.)


oTable:Adaugă()
oTable:Replace("CAMPO1","Valor 1")
oTable:Replace("DATA", DATE())
oTable:Confirmare()
oTable:End()

ÎNTORCE

În acest exemplu se poate observa că cursorul <oTable> este necesar fără date,
por este rațiune la funcție OpenTable("SELECT * FROM
XTABLA”,.F.).A solicitat prin .F. cursul în formă goală, deoarece doar
este necesară structura tabloului și cum va fi realizat procesul de incluziune
nu este necesar să citiți datele din tabel.

Și se cere să se caute informații în aceeași tabelă pentru a adăuga un nou înregistrare


așa cum se întâmplă în cazurile de numerotare a documentelor, putem folosi
următoarea sintaxă:

#INCLUDE "[Link]"

PROCE MAIN()

Manualul Utilizatorului Capitolul VI. Pag: 64


Programare

LOCAL oTable,xValor,nLen

xValor:=SQLGET("XTABLA", "MAX(XCAMPO)")
xValor:=VAL(xValor)

oTable:=DeschideTabel(„SELECT * FROM XTABLA”,.F.)


nLen := oTable:FieldLen("XCAMPO")
xValor:=STRZERO(xValor+1,nLen)
oTable:Append()
oTable:Replace(“CAMPO1”,xValor)
oTable:Replace(“FECHA” ,DATE())
oTable:Commit()
oTable:Finaliza()

ÎNTORCE

Metoda commit() construiește adevărata sentință SQL pentru inserția înregistrării de


în următoarea formă:
INSEREAZĂ ÎN XTABLA (CAMPO1,FECHA) VALORI ('0001','3005-05-
2005’)

TTable, utiliza las tablas declaradas en el diccionario de datos que contiene el DSN o Base
de date legate, din acest motiv nu este obligatoriu să indicați baza de date unde în
găsește tabela, totuși este posibil să indicăm baza de date sau să adăugăm una nouă
tablă în formă directă.

Adăugaț i un nou tabel la dicț ionarul de date:


ADDTABLE("0998","MITBLE",oDp:cDsnData,.F.)

Adaugă în tabelul "MITABLE" (care trebuie să existe) anterior în baza de date


oDp:cDsnData (aceasta este baza de date activă conform companiei selectate). Dacă doriți
creați tabela în felul următor:

LOCAL oServer, cSql, otable

// Deschide baza de date


oDB:=OpenOdbc(oDp:cDsnData)

// Preparaț i instruirea SQL


cSql:="CREAȚI CREAȚI TABELA `MITABLE` (`CAMPO` VARCHAR (10) "

// Executa instrucț iunea SQL în baza de date


oDB:EXECUTA(cSql)

// Adaugă tabelul în dicț ionarul de date

Manualul utilizatorului Capítulo VI. Pag: 65


Programare

ADDTABLE("0998","MITBLE",oDp:cDsnData,.F.)

// Deschideț i Cursurile de Date sau Tabelul


oTable:=DeschideTabel(“MITABLE”,.F.)
oTable:Adăuga()
oTable:Înlocuire(„CAMPO”,„DIEZ”)

// Înregistrează înregistrarea prin INSERT INTO MITBLE


oTable:Comite()

// Exporta datele către DBF


oTable:CTODBF("[Link]")
otable:End()

Acces la tabele indicând baza de date.

LOCAL oDB,cSql,otable

// Deschideț i baza de date SGE0001 (Trebuie să existe)


oDB:=OpenOdbc("SGE0001")

oTable:=DeschideTabel(„MITABLE”,.T.,oDB)

// Afiș ează datele


oTable:Browse()
otable:End()

Acces la tabele indicând baza de date fără a verifica dicționarul de date, astfel se evită
utilizați funcțiaADDTABLE("0998","MITBLE",oDp:cDsnData,.F.)exemplu:

LOCAL oDB, cSql, otable

// Deschide baza de date SGE0001 (Trebuie să existe)


oDB:=OpenOdbc(“SGE0001”)

oTable:=DeschideTabela(“MITABLE”,.T.,oDB,.F.,)

// Afiș ează datele


oTable:Browse()
otable:End()

TDPEDIT

Este o clasă DpXbase care permite proiectarea de formulare de tip (MDI) într-o formă declarativă,
adica prin comenzi xbase pentru declararea Controalelor care in timpul
execuția poate fi redesenată vizual. Formularul acceptă ca metode

Manualul utilizatorului Capitolul VI. Pag: 66


Programare

virtuale toate funcțiile definite cu „FUNCTION” în același program DpXbase,


de asemenea permite atribuirea de date în mod dinamic doar prin executarea
declarație "oForm:nVariable:=100"

Exemplu

#INCLUDE "[Link]"

PROCE MAIN()

LOCAL oFont

DEFINE FONT oFont NAME "Arial" SIZE 0, -12 BOLD ITALIC

oFrm:=DPEDIT():New("Titlu","[Link]","oFrm", .T. )
oFrm:cVarName:=SPAȚIU(20)
oFrm:nValor :=100
oFrm:dFecha :=oDp:dFecha

Test de text
DIMENSIUNE 120,10 DREAPTA;
COLOR CLR_HBLUE,CLR_YELLOW

@ 2,03 GET oFrm:oNombre VARoFrm:cVarName;


OF oFrm:oDlg;
MĂRIME 50,10;
FONT oFont;
VALID oFrm:MyValid()

Nume

@ 4,03 GET oFrm:oValor VARoFrm:nValor;


IMAGINE "999999.99";
DIMENSIUNE NIL,10 DREAPTA;
FONT oFont;
CÂND !Gol(oFrm:cVarName)

XSAY("Valoare")

@ 6,03 BMPGET oFrm:oFecha VARoFrm:dFecha;


IMAGINE „99/99/9999“;
NAME "BITMAPS\[Link]";
ACȚIUNE LbxDate(oFrm:oFecha,oFrm:dFecha);
DIMENSIUNE 50,10;
FONT oFont;
CAND !Empty(oFrm:cVarName)

XSAY("Data")

Manualul utilizatorului Capitolul VI. Pag: 67


Programare

BUTOANE "Accepta";
MARIME 36,12;
ACTION oFrm:Aceptar()

@ 6,15 BUTON "Închide";


DIMENSIUNE 36,12;
ACTION oFrm:Închide()

oFrm:Activează()

ÎNTORCE

FUNCȚIA MyValid()

Dacă este gol(oFrm:cVarName)


MensajeErr("Nombre no Puede Estar Vació")
ÎNTORCE .F.
ENDIF

ÎNTOARCE .T.

FUNCȚIA XSAY(cText)
LOCAL oObj

oObiect:=ATAIL(oFrm:oDlg:aControl)

@ oObj:nTop-9,oObj:nLeft SPUNE cText PIXEL;


SIZE 40,8

RETURN .T.

FUNCTION ACEPTAR()
MsgAlert("Aici se execută procesul")
ÎNTOARCE .T.

Metodele clasei

Nou(<cTitulo>,<cFichero>,<coFrm>,<lWindows>):Incepe construcț ia de
formular

cTitulo: Nombre del título de la ventana.


cFichero: Numele fișierului cu extensia (.edt) și locația „forms"
contentiva de los parámetros (linie, coloană, înălțime, lățime, culoare fundal și culoare
texto) de fiecare control al formularului.

Manualul utilizatorului Capitolul VI. Pag: 68


Programare

coForm: Numele variabilei care conține și identifică formularul.


Windows: Dacă este adevărat <.T.> generează fereastra formularului, necesar
pentru a declara controalele "@ Lin,Col <CONTROL>"

SetTable(oCursor): Atribuie un cursor de date formularului permițând editarea


valorile unei tabele pentru a fi modificate (oForm:nOption:=3) sau incluse
prin intermediul (oForm:nOption:=1). Formularul preia în mod virtual datele cursului
conform numelui câmpurilor pentru utilizare ușoară. Dacă cursul derivă dintr-o
consulta de produits oCursor:=oTable("SELECT * FROM DPINV", .F.), el
formularul își asumă declarația variabilelor: oForm:INV_CODIGO,
oForm:INV_DESCRI, în acest fel programatorul poate utiliza controale (GET)
pentru a edita valorile sale și prin metoda SAVE() a formularului valorile sunt
stocate în laTabla. Dacă oForm:nOption=1 se indică că se dorește includerea, dacă
oForm:nOption=3 se indică faptul că datele vor fi modificate. Metoda Save()
executați anterior funcția PRESAVE (care trebuie să fie declarată în
formular) cu scopul de a efectua verificări înainte de a salva și PRESAVE
returnează .T. va fi înregistrat înregistrarea și apoi va fi executată funcția POSTSAVE
pentru a realiza evaluări după înregistrare, dacă POSTSAVE returnează .F. sistemul
va executa ROLLBACK al bazei de date pentru a anula noul înregistrare
agregat sau modificat.

CreateWindows(): Desenează fereastra MDI (oWnd) ș i dialogul (oDlg) pentru controale


incrustat și dependent de MDI. Windows() nu este necesar dacă parametrul
<lWindows> este .T. în construcția formularului cu NEW(). Toate controalele
trebuie să fie definite după ce metoda Windows este executată deoarece ::oDlg este
containerele implicite pentru toate controalele.

Activează(bInit,bEnd,bResize): Prezintă în videoclip ș i activează execu ț ia de


formular

bInit: Bloc de cod iniț ial ș i de execuț ie anterioară a feronerului, poate fi


utilizat pentru a apela o metodă virtuală (oFrm:xUDFunction) pentru a crea bară de
buton sau execuții anterioare prezentării formularului.

bEnd:Bloc de Cod care trebuie să fie executat la închiderea formularului, dacă acesta
return .f., formularul nu poate fi închis. Această utilitate este de mare ajutor pentru
efectuarea verificărilor de închidere.

bResize: Bloc de cod care se execută atunci când dimensiunea feroniei este
reajustat cu Mouse-ul.

Manualul utilizatorului Capitolul VI. Pag: 69


Programare

Data de la Clase:

oDlg: Numele obiectului dialog de conținere a controalelor „oFrm:oDlg:aControls”.


Toate controalele (GET, SAY, COMBOBOX, etc.) se creează indicând implicit la
oDlg ca și container.

oWnd: Numele ferestrei de stil MDI (CHILD) fiu al ferestrei principale și se


se ocupă cu executarea tuturor evenimentelor de vânzare: Minimizați, restaurați, ajustați
dimensiune și permite utilizarea în formă MDI.

oCursor: Conține obiectul cursorului SQL al interogării asociate cu


formular

bValid: Bloc de cod care permite validarea închiderii formularului, poate evita
a ieși cu [X] pe fereastra MDI.

lActivează: Indică dacă formularul a fost activat sau a fost executată metoda Activate().

lEscClose: Indică cu .T. dacă formularul poate fi închis cu tasta ESC.

lMsgBar: Con .F. suprime la barra de mensajes ubicada en la parte inferior del
dialog

cPrint: Conține numele funcției definite în programul DpXbase care se


se ocupă de procesul de imprimare.

cDelete: Indică numele funcției care realizează procesul de ștergere. Dacă


devuelve .[Link] realizează ștergerea.

cList: Numele fișierului *.BRW (Browse) care realizează o mostră verticală a


datele registrului.

cPreSave: Numele funcției care validează procesul de înregistrare a înregistrării,


în cazul în care este .F. nu efectuează acțiunea.

cPostSave: Numele funcției care se execută după salvarea înregistrării.

CONTROALE LIBRĂRIEI FIVEWIN PENTRU FORMULARII.


Constituie un set de controale de mare utilizare pentru definirea formularului. Sintaxa clasică
de la librăria fivewin ([Link]) este utilizată în DpXbase, obținând cea mai mare

Manualul utilizatorului Capitolul VI. Pag: 70


Programare

compatibilitate posibilă și valorificarea toată documentația existentă


c:\dpnmwin\help\[Link] din cauza că DpXbase foloseș te la maxim potenț ialul acestei fabuloase
librărie.

Toate controalele definite trebuie să fie asociate doar cu formularul.

Caseta de Selectare
OFrm:lVar:=.T.

@ 02,02 CHECKBOX oFrm:oChk VAR oFrm:lVar;


PROMPT " CheckBox " ;
OF oFrm:oDlg;
DIMENSIUNE 90,10;
PE SCHIMBARE {||.T.};
VALID .T.;
CULOARE NIL,oDp:nGris;
MESSAGE "Indique el valor del CheckBox";
CÂND .t.

Buton (Buton Simple)


@ 01,01 BUTON oFrm:oBtn;
PROMPT "Cerrar ";
DIMENSIUNE 36,12;
ACȚIONEAZĂ oFrm:Închide();
OF oFrm:oDlg ;
MESSAGE "Cerrar Formulario";
CÂND .t.;
ANULEAZĂ

SBUTTON (Buton cu imagine BMP).Prezentați controlul Buton desenat prin trei


buton BMP, Prezentare, Trecere cu mouse-ul și Acțiune.

@09, 43 BUTON oFrm:oBtn ;


Mărimea 42, 23;
FIȘ IER "BITMAPS\[Link]" FĂRĂ PERIMETRU;
LEFT PROMPT "Salir";
COLORS CLR_BLACK, { CLR_WHITE, CLR_HGRAY, 1 };
ACȚIUNE (oFrm:Anulare()) ANULARE

OFrm:oBtn:lCancel:=.T.
OFrm:oBtn:cToolTip:="Cerrar Formulario"
OFrm:oBtn:cMsg :=”Mensaje en la Barra Inferior”

Manualul Utilizatorului Capítulo VI. Pag: 71


Programación

Obț ine (Introduceri date)


oFrm:cVar:=SPATIU(40)

@ 1, 1 OBTINE oFrm:oGet VAR oFrm:cVar;


OF oFrm:oDlg;
DIMENSIUNE NIL,10;
MESSAGE "Indique el valor del Campo";
CÂND .t.;
VALID
MensajeErr("No puede estar Vacio”,;
vacio", nil, {||!Empty(oFrm:cVar)});
LA SCHIMBARE .t.

// Obț ine para Câmpuri Numerice

oFrm:nValor:=1000

@ 4, 10 OBȚINE oFrm:oGet VAR oFrm:nValor;


IMAGINE "99.999.999,99";
DREPT
OF oFrm:oDlg;
DIMENSIUNE NIL,10;
MESSAGE "Indique el Monto";
CAND .t.;
VALID .t.;
PE SCHIMBARE .t.

Obț ineț i (Introducerea datelor în câmpul MEMO)

oFrm:cMemo:= "Campo Memo, Texto"


oFrm:cMemo:=Alltrim(oFrm:cMemo)

@ 5, 5 GET oFrm:oGet VAR oFrm:cMemo;


MEMO;
HSCROLL;
OF oFrm:oDlg;
DIMENSIUNE 100,100;
MESSAGE "Introduzca los textos";
CÂND .t.;
LA SCHIMBARE .t.

ComboBox (Casetă Combinată)


oFrm:aLista:={"Lúnes","Martes","Miércoles","Jueves","Viernes"}
oFrm:cLista:=oFrm:aLista[1]

@ 5,15 COMBOBOX oFrm:oCbx VAR oFrm:cLista;

Manualul utilizatorului Capítulo VI. Pag: 72


Programare

ELEMENTE oFrm:aLista;
OF oFrm:oDlg;
PE SCHIMBARE .T.;
VALABIL .T.;
FONT oFont;
MESSAGE "Seleccione una Opción";
CAND .T.

Răsfoire (Vizualizare ș i Editare a Datelor).Dimensiunea browse-ului se definește


prin metoda Move(nlin,nCol,nAlto,nAncho,.t.) în clauza ON INIT a formularului
(oFrm:Activare({||oFrm:oBrw:Mutare(1,1,200,200,.t.)})

oFrm:aData:=ASQL("SELECT CODIGO,APELLIDO,NOMBRE FROM NMTRABAJADOR")

oFrm:oBrw := TXBrowse():New( oFrm:oDlg )


oFrm:oBrw:oFont := oFont // Amintiț i-vă să-l declaraț i
oFrm:oBrw:SetArray(oFrm:aData,.T.)

oFrm:oCol:=oFrm:oBrw:aCols[1]
Cod
oFrm:oCol:nWidth :=140

oFrm:oCol:=oFrm:oBrw:aCols[2]
oFrm:oCol:cHeader:="Apellido"
oFrm:oCol:nWidth :=200

oFrm:oCol:=oFrm:oBrw:aCols[3]
oFrm:oCol:cHeader:="Nombre"
oFrm:oCol:nWidth :=200

oFrm:oBrw:bClrStd := {|oBrw|oBrw:=oFrm:oBrw,;
{0, iif( oBrw:nArrayAt%2=0, 15790320, 16382457 ) } }

oFrm:oBrw:CreareDinCod()

BAR (Barra de Butoane).Din cauza că formularul oferă controlul Dialog ca


contenitorul de controale este necesar să se definească bara de butoane în clauza (ON INIT) a
dialog, pentru a realiza acest lucru, clasa TDPEDIT a formularului permite definirea în primul parametru al
metoda Activate(bInit) apelul la metoda virtuală sau funcția unde se execută inițierea
formular

#INCLUDE “[Link]”

PROCE MAIN()

oFrm:=DPEDIT():New("Titlu","[Link]","oFrm" , .F. )
oFrm:CreazaFereastra()

Manualul utilizatorului Capítulo VI. Pag: 73


Programare

oFrm:Activeaza({||oFrm:FăBară()})

ÎNTOARCE

FUNCȚIE HacerBarra()

LOCAL oCursor,oBtn

DEFINIȚI CURSOR oCursor HAND

DEFINE BUTTONBAR oFrm:oBar DIMENSIUNE 38,38 DIN oFrm:oDlg 3D CURSOR oCursor

DEFINE BUTTON oBtn;


OF oFrm:oBar;
FĂRĂGRANIȚE
FILENAME "BITMAPS\[Link]";
ACTIUNE MensajeErr("Iesi"),oFrm:Close()

oBtn:cToolTip:="Salir del Formulario"

ÎNTORCE .T.

MODULURI HRB

Sunt programe generate de compilatorul harbour ([Link]) și se execută în


o formă similară cu programele în DLL-uri, sunt compuse din funcții și/sau proceduri
se încarcă la începutul programului și se pot apela funcțiile definite în program
HRB.

În folderul hrb situat în interiorul folderului principal al sistemului se află următoarele


fișiere.
[Link] (Compilator 32 Biți)
[Link] (Fișier batch pentru compilare)
[Link] (programa prg exemplu)

Programa [Link]
// Amplasat c:\dpnmwin\hrb\[Link]
#INCLUDE "[Link]"

MEMVAR oDp

FUNCȚIA HRBtest(cText)

Manualul utilizatorului Capitolul VI. Pag: 74


Programare

MensajeErr(oDp:cEmpresa,cText)

ÎNTORCE NIL
// eof

Puteți observa că [Link] are funcția HrbTest() care poate fi executată din orice loc.
parte din DpXbase. Funcția HrbTest() poate face apeluri la funcții proprii DpXbase
„MensajeErr” și apeluri la proceduri Dpxbase cu doar a indica:
EXECUTĂ(„XPROGRAMA”,xValoare)

Pentru a-l compila, este necesar să accesați dosarul c:\dpnmwin\hrb\


Executa:

CONSTRUIE TEST

[Link] se ocupă de compilarea programului [Link] și de generarea c:\dpnmwin\[Link] gata de a fi


încărcat și utilizat din DpXbase.

Executarea Funcț iilor HRB

Este necesar să încărcăm în memorie funcțiile definite în [Link], pentru aceasta utilizăm următorul
exemplu scris în DpXbase.

#INCLUDE "[Link]"

PROCE PRINCIPAL()

HRBLOAD("[Link]")

HRBTEST(„Desde DpXbase”)

ÎNTOARCEȚI

Reguli generale: Funcțiile nu trebuie să aibă nume asemănătoare cu funcțiile existente în


DpXbase. Nu trebuie să declare variabile statice, nu trebuie să definească clase pentru obiecte. Principala
funcția modulelor HRB este definirea funcțiilor. Dacă la încărcarea modulului HRB de la
În DpXbase apare un mesaj de eroare care se datorează faptului că programul HRB face apel la
funcții inexistente în executabilul DpXbase.

Modulele HRB sunt generate doar din compilarea unui program PRG și nu ca DLL-urile de
produsele Datapro DOS care necesitau compilare și legare (Linkado) unde se puteau
involucra mai multe programe *.PRG, fișiere obiect *.OBJ și fișiere de biblioteci *.LIB

Manualul utilizatorului Capítulo VI. Pag: 75


Programare

Ce este mai bine între DpXbase ș i HRB?

Ambele moduri de lucru au avantajele lor. Principalul avantaj al modulelor HRB constă în
viteza de execuție care este mult mai mare decât DpXbase, plus declarația de variabile
locale-urile sunt reale; permițând crearea diverselor instanțe de controale precum dialoguri (non-modale) sau
feronier MDI. Programul sursă nu este necesar pentru executare, ceea ce permite protejarea
proprietate intelectuală a codului.

DpXbase are editorul său proprietar și este mai confortabil, să scrii, să compilezi și să execuți. Va fi întotdeauna
disponibil programul sursă. Nu permite crearea de instanțe pentru dialoguri nemodale sau feronii
MDI, de aceea trebuie întotdeauna să se bazeze pe clase precum TDPEDIT sau TMDI.

UTILIZAREA ALTOR UNELTE DE DEZVOLTARE.


DpXbase nu intenționează să concureze sau să înlocuiască instrumentele sau mediile de dezvoltare.
cum ar fi FoxPro sau VisualBasic.

Utilizând FoxPro:

Modelul de date folosit de DpXbase este compatibil cu FoxPro, ambele utilizează tipuri de
date: Caracter, logic, memo, numeric ș i dată. Pentru a executa programe binare (EXE)
de la DpXbase este necesar să instalati FoxPro versiunea 8. În dosar
c:\dpadmwin\foxpro se encuentra el programa [Link] que contiene un ejemplo
funcț ional care citeș te parametrii creaț i din DpXbase.

Din DpXbase, trebuie să executaț i programul „FoxRun” cu următorul parametru.

// Acest exemplu este legat de clientul 0000000001


// DPXBASE
FUNCȚIA PRINCIPALĂ()
EXECUTĂ("FOXRUN",STRZERO(1,10))
ÎNTORCE

De asemenea, pentru a crea rapoarte, utilizând FoxPro cu tabele DBF, puteț i folosi următorul
ejemplo:

//DpXbase
FUNCȚ IA PRINCIPALĂ()
LOCAL oMatrice

oTable:=OpenTable("SELECT * DE LA DPINV COMANDĂ PE INV_CODIGO”,.T.)


oTable:CTODBF("[Link]")
OTable:Finalizare()

Manualul utilizatorului Capítulo VI. Pag: 76


Programare

EXECUTA("FOXRUN", "[Link]")

ÎNTOARCE

UTILIZAREA RAPOARTELOR PROIECTATE ÎN FOXPRO.


Cu scopul de a-i oferi mai multă comoditate utilizatorului fabulosului generator de rapoarte care
pentru a oferi mediu de dezvoltare FoxPro, am creat un mic program [Link] care
include codul sursă care permite cunoscut conținutul său și a fi adaptat pentru alte scopuri.

Legarea rapoartelor FRX cu generatorul de rapoarte. La fel cum se asociază


rapoartele concepute cu Crystal Report (*.RPT), trebuie asociate cu rapoartele concepute cu
FoxPro, preferabil ar trebui să fie stocat în folderul CRISTAL al Sistemului
C:\dpadmwin\cristal\

Datapro generează fișiere temporare de format DBF în folderul „CRISTAL". Conținutul de pe


tabelele sunt obținute din interogările SQL solicitate de generatorul de rapoarte.

Pentru o mai mare comoditate, utilizați designerul de rapoarte FoxPro pe tabelele temporare DBF
ubicadas en la carpeta “\CRISTAL” y guarde el archivo de diseño preferiblemente con el mismo
numele tabelului cu extensia FRX și în folderul „CRISTAL".

Pentru a executa raportul conceput în FoxPro, trebuie mai întâi să-l asociați cu raportul, accesați la
dizainer de rapoarte Datapro și selectează opțiunea „Crystal Report”, indică „raport nou” și
introduceți denumirea raportului „Produse proiectate cu FoxPro” și numele fișierului
cu extensia și carpeta respectivă, exemplu: C:\dpadmwin\crystal\[Link]”. Apoi, când...
raportul avea asociația cu diverse opțiuni de design, selectați raportul identificat cu
FoxPro în lista identificată „Design Cristal”, selectați opțiunea „Previzualizare Cristal” sau „Cristal
Imprimă” și în cele din urmă apasă pe „Butonul de Execuție”.

Recomandări pentru optimizarea interogărilor SQL:


[Link]

Optimizarea interogărilor SQL.

Timpul de răspuns într-o interogare SQL depinde în mare parte de modul în care
în care se indică condiț iile înregistrărilor prin intermediul clauzei WHERE. În acest
este foarte important să luam în considerare indicii tabelelor ș i secvenț a acestora
acelea ș i. Condi ț iile din clauza WHERE trebuie să fie conform pozi ț iei celor
câmpurile indexului. Exemplu:

Tabla: CampoA,CampoB,CampoC,CampoD
Índices: CampoB,CampoC

Manualul utilizatorului Capitolul VI. Pag: 77


Programare

Consulta trebuie scrisă în următorul mod:

SELECT CampoA, CampoB, CampoC, CampoD DIN Tabla


UNDE (CampoB>=’A’ ŞI CampoB<=’Z’) ŞI (CampoC<=’A’ ŞI CampoC<=’Z’)

În acest fel, este mai optim, acum dacă inversăm câmpurile din clauza WHERE,
va dura mult mai mult.

SELECT CampoA,CampoB,CampoC,CampoD DIN Tabla


UNDE (CampoC>=’A’ Ș I CampoB<=’Z’) Ș I (CampoB<=’A’ Ș I CampoC<=’Z’)

Podemos hacer pruebas con las tablas del Sistemas de Gestione empresarial, la tabla puede
ser: DPDOCCLI ale căror indice sunt:

DOC_CODSUC,DOC_TIPDOC,DOC_NUMERO,DOC_TIPTRA

Putem realiza interogări în următorul mod, cu MySQLfront:

SELECT DOC_CODSUC, DOC_TIPDOC, DOC_NUMERO, DOC_TIPTRA, DOC_CODIGO


DIN DPDOCCLI
UND DOC_CODSUC='000001' ŞI
DOC_TIPDOC='FAV' Ș I
DOC_NUMERO='0000000010'

Dacă schimbăm ordinea câmpurilor în Clauza WHERE, putem observa că


timpul este mai mare.

SELECT DOC_CODSUC,DOC_TIPDOC,DOC_NUMERO,DOC_TIPTRA,DOC_CODIGO
DIN DPDOCCLI
UNDĂ DOC_TIPDOC='FAV' Ș I
DOC_NUMERO='0000000010' Ș I
DOC_CODSUC='000001'

Cum putem optimiza toate procesele sistemelor AdaptaPro. Dacă observăm că


o consultare este lentă, trebuie să activăm urmărirea SQL, din orice formular, domeniu de
icon, clic dreapta, apare un meniu de opț iuni, printre care se află: Activare urmă de
ejecución (Indica en que programa y línea se esta ejecutando el sistema) y Traza SQL
(salvează în disc ultima interogare care este în execuț ie) [Link] în folderul c:\dpadmwin

Manualul utilizatorului Capitolul VI. Pag: 78


Programare

Acest fiș ier poate fi citit cu NOTEPAD ș i copiat, apoi cu MySQLFRONT lipit,
caută indecș ii din tabel ș i ordonează câmpurile din CLAUZA WHERE în funcț ie de
acelaș i ordinea a indicilor ș i verificarea timpului de răspuns. Apoi, că interogarea este
optimizată, trebuie să deschidă programul sursă, LBX sau Raport ș i să-i schimbe Ordinea la
câmpurile clauzei WHERE ș i apoi executaț i programul ș i cu siguranț ă veț i observa
timpuri de răspuns.

În cazul în care este necesar ș i foarte important, este să se creeze noi indici (Nu
RECOMANDĂM) pentru a optimiza interogările, datorită acestei soluț ii veț i putea face ca
baza de date este mai lentă în momentul inserării, modificării sau ș tergerii unui registru.
Este important să epuizezi ultima resursă în condiț iile WHERE înainte de a adăuga un
indice nou.

Pentru cazurile de design al rapoartelor, recomandăm aplicarea aceleaș i reguli, adăugând


câmpuri preferabil în aceeaș i ordine ca indicele bazelor de date, deș i aceasta
nu contribuie mult deoarece utilizatorul nu este obligat să completeze toate câmpurile
de Rango ș i Criteriu ș i, în mod logic, nu vor fi filtrate de câmpurile care sunt goale.

La DataPro ne gândim să creăm un program care să ordoneze câmpurile clauzei


UNDE conform indicilor înregistraț i în dicț ionarul de date, de fiecare dată când se execută un
informe, deoarece condiț iile acestuia pot varia la fiecare execuț ie. Abia
să reuș im să dezvoltăm această soluț ie care va fi implementată în sistem.

Cu toate acestea, întreaga platformă tehnologică care este implicată cu


baza de date are o incidenț ă mare asupra performanț ei sale: Printre ele se numără: Hardware
del server, Sistem de Operare al Serverului, exclusivitate a serverului pentru baza de
Date, bază de date optimizată pentru ș i în server. Reț ea, switch, cabluri, trafic în
re ț ea locală, PC unde sunt aplica ț iile, Sisteme de Operare unde sunt
aplicaț ii.

Articol redactat de: Juan Navas (CEO AdaptaPro)

SUGESTII (Bazate pe experienț e în domeniu)


implementare
Paș i pentru a exporta tabelele principale către o altă bază de date.

1. Crearea unei companii, selectarea companiei. În acest punct se generează baza de date cu tabele goale.

2. Programare, procese, exporta ț i tabelele de configurare, rula ț i "Început", apoi


întrebaț i "exportaț i datele ca exemplu", indicaț i "Da". Acest proces generează tabele în format
DBF în folderul c:\dpadmwin\ejemplo

Manualul utilizatorului Capitolul VI. Pag: 79


Programare

3. Comprimă toate tabelele DBF. Într-un fi ș ier numit "[Link]"

4. Selecta ț i compania care con ț ine datele ce vor fi exportate, executa ț i procesul indicat
en el paso número dos. Ahora todas las tablas contienen información. Comprimir en una
noua tabelă "[Link]", următoarele tabele: DPINV, DPGRU, DPMARCAS, DPIVATIP
DPCLIENTES, DPCTA DPACTIVIDAD_E, DPCLICLA DPPRECIOTIP,
DPPROVEEDOR, DPPROCLA, DPCTABANCO, DPBANCOS ș i DPCAJA.

5. Dispunem de două fi ș iere „[Link]” ș i „[Link]”.

6. Instala ț i sistemul pe site-ul de destina ț ie, intern pe un alt PC. Ș tergeț i con ț inutul de pe
carpeta c:\dpadmwin\ejemplo, localizaț i-vă în această folder, mai întâi decompressaț i fiș ierul
[Link] în ș i al doilea dezarchivaț i fiș ierul [Link]

7. Apoi, accesa ț i sistemul, defini ț ii ale sistemului, procese, importa ț i exemple. Acest
procesul citeș te tabelele DBF ș i adaugă datele în tabelele bazei de date. Dacă se generează
un mesaj de integritate, consulta ț i în dic ț ionarul de date „Programare, tabele,
consultaț i ierarhizarea tabelelor ș i căutaț i tabelele legate "Părinte" ale tabelelor
indicadas en el punto 4 y agregarla en dicha la lista, repetir el proceso indicado en el punto

8. Atunci când instala ț i sistemul pe o unitate diferită de C:\ în timpul instalării, instalarea
a funcț ionat perfect ș i, exceptând imaginile din meniu, pentru a corecta asta
am făcut câteva interogări SQL care corectează unitatea de destinaț ie:

SGE

UPDATE DPMENU SET MNU_BMP=MID(MNU_BMP, 13, 70) WHERE


STÂNGA(MNU_BMP, 12)='c:/dpadmwin/'

Nomina

UPDATE DPMENU SET MNU_BMP=MID(MNU_BMP, 12, 70) WHERE


STÂNGA(MNU_BMP, 11)='c:/dpnmwin/'

Aportado por : Oscar Londoño

Practici pentru a crea tabele ș i funcț ionalităț i prin intermediul


Asistente DpXbase:

Manualul Utilizatorului Capitolul VI. Pag: 80


Programare

Practica pentru crearea tablourilor legate, Răsfoieș te (Prin LBX)


„ListBox”), formular de date ș i acces prin meniul sistemului„

Creând o nouă funcț ionalitate pentru sistem, unde vor fi create două tabele relaț ionate
în mod ierarhic (Mărci ș i Vehicule). Prin intermediul asistentului DpXbase, utilizatorul
va trebui să creeze următoarele tabele:

Accesa ț i aplica ț ia „Programare ș i DpXbase”, utiliza ț i op ț iunea „Tabele”, se prezintă


un browser cu toate tabelele sistemului, utilizaț i opț iunea Inclus ș i Introduceț i-le
următoarele date:

Número : 7000
Table MYMARCA
Descriere: Mărci Vehicule (Se referă la numele la plural)
BD: Selectează "Múltiple", această op ț iune permite ca această tabelă să fie creată în fiecare
una dintre companii când utilizatorul intră în companie, sistemul efectuează o revizuire a
structura de date ș i creează tabelul (În acest caz, nu este necesară participarea unui
expert DBA pentru a crea tabelele în fiecare companie cu integrarea lor respectivă
referenț ial). Opț iunea „Configurare”
Aplicaț ie: Programare ș i Dicț ionar de Date.
Singular: Marca de Vehicul

Structura tabelului de mărci

Câmp Tip Ancho Zecimal Descripción Cheie Primară


o Cheie Primară
MAR_CODIGO Carácter 10 0 Cod PRIMAR
CHEIE NU
NUL
MAR_DESCRI Carácter 40 0 Descripción
MAR_ACTIVO Lógico 1 0 Activ
MAR_MEMO Memo 0 0 Memorandum

Din nou, selectaț i Opț iunea Tabele ș i apăsaț i butonul „Includere”, se prezintă
formular pentru a crea tabelele ș i câmpurile. Introduceț i datele în câmpurile următoare:

Număr : 7001
Tabla AUTOVEHICULUL MEU
Descripción: Vehículos (Se refiere al nombre en plural)

Manualul utilizatorului Capitolul VI. Pag: 81


Programare

BD Selectaț i „Multiple”, această opț iune permite ca această tabelă să fie creată în fiecare
una dintre companii, atunci când utilizatorul intră în companie, sistemul efectuează o revizuire a
structură de date ș i creează tabelul (În acest caz, nu este necesară participarea unui
expert DBA pentru a crea tabelele în fiecare companie cu integritatea respectivă
referenț ial). Opț iunea „Configurare
Aplica ț ie: Programare ș i Dic ț ionar de Date.
Singular : Vehículo (Se refiere al nombre singular de la tabla)

Structura Tabelului Vehicule:

Câmp Tipo Lăț ime Zecimal Descripción Cheie Primară


cheia primară
VEI_PLACA Caracter 10 0 Placa PRIMAR
CHEIA NU
NUL
VEI_ACTIV Logic 1 Activ
VEI_NOMBRE Caracter 40 0 Descripción
VEI_AÑO Numérico 4 0 Año
VEI_FCHADQ Date (Fecha) 10 0 Fecha de
Achiziț ie
VEI_VALOR Numeric 12 2 Valoare de
Cumpără
VEI_MEMO Memorandum0 0 Comentarios
VEI_CODMAR C 10 0 Marcă
VEI_ORIGEN C 1 Naț ional o
Importat

După crearea tabelului, este necesar să creaț i opț iunile pentru câmpul următor: Prin
opț iunea Tabele afiș ează toate tabelele, caută tabelul 7000 ș i selectează al 7-lea buton
„Opț iuni de câmpuri”, localizaț i câmpul: VEI_ORIGEN ș i adăugaț i două înregistrări:

Opț iune
Naț ional
Importat

Manualul utilizatorului Capitolul VI. Pag: 82


Programare

Cu această funcț ionalitate, va permite asistentului de creare DpXbase să creeze un control selector
de tip „ComboBox” care îi va permite utilizatorului să selecteze „Naț ional sau Importat”, aș a
mismo, utilizatorul poate adăuga ca criteriu utilizarea câmpului
„VEI_ORIGEN” ș i sistemul va prezenta opț iuni: Naț ional, Importat sau Gol (Gol nu
nu realiza niciun filtru)

INTEGRITATE REFERENȚIALĂ (Relaț ie) ÎNTRE TABELA


Este necesar să creăm integritatea referenț ială între tabel, pentru asta vom crea relaț ia
electronică între MYMARCA cu MYVEHICULO

De la "Fiș iere", situată în "Programare ș i DpXbase", selectaț i opț iunea "Legătură


între tabeluri” ș i alege opț iunea Include:

Tabla Solicitante:
Tabela : MYMARCA
Campos:MAR_CODIGO

Tabla Înregistrată:
Tabla : MYVEHICULO
Campos:VEI_CODMAR

Marcar: Ș terge, Actualizează ș i Generare din BD

Cu aceste indicaț ii, sistemul creează instrucț iunile SQL pentru a genera integritatea.
referenț ial. Dacă o marcă este eliminată, „toate înregistrările vehiculelor” sunt de asemenea
eliminaț i. În cazul în care marca îș i schimbă codul, vehiculele asociate de asemenea
vor fi modificate.

(Este important de precizat că ambele câmpuri trebuie să aibă acelaș i tip de date ș i aceeaș i
(longitudine) pentru acest caz ambele de tip caracter ș i de 10 caractere fiecare

ÎNLEC VIRTUAL ÎNTRE VEHICULE Ș I Mărci.

Acest tip de legătură nu afectează integritatea referenț ială, este o funcț ionalitate care facilitează
creaț ie automată de programe DpXbase ș i generarea de ranguri ș i criterii prin intermediul
generator de rapoarte, reuș ind să solicite câmpul „MARCA” ș i să afiș eze numele de
marca. Când se generează un program DpXBase se creează un control de tip BMPGET ș i
control SAY contentivo al numelui mărcii. Când sistemul solicită marca,

Manualul utilizatorului Capitolul VI. Pag: 83


Programare

prezintă un buton care cheamă LBX-ul conț inând marca ș i când utilizatorul selectează
marca ș i este validată, se afiș ează numele mărcii. Această funcț ionalitate economiseș te timp de
programare ș i depanare a sistemului.

Pentru a crea un link virtual, este necesar să accesaț i „Fiș iere”, situat în „Programare.
y DpXbase”, selectaț i opț iunea “Legătură între tabele”, ș i selectaț i opț iunea Includere:

Tabla Solicitante:
Tabla : MYVEHICULO
Campos:VEI_CODMAR

Tabla Înș irată:


Tabela : MYMARCAS
Campos:MAR_CODIGO
Campo de Referinț ă: MAR_DESCRI

În câmpurile de integritate referinț ă nu se selectează nicio activitate deoarece


această relaț ie nu va afectează fizic tabelele MYMARCA sau MYVEHICULO.

Crearea unor formulare scrise în DpXbase prin intermediul Asistentului


de dezvoltare.
MYMARCA

Din opț iunea Tabel, localizaț i tabela 7000 (MYMARCA) ș i selectaț i al ș aselea buton
(Creare listBox/Browse de Navigare).

Se prezintă un formular compus din două liste, prima lista câmpurilor tabelului ș i
a doua cu câmpurile selectate pentru listă. Utilizatorul trebuie să selecteze
următoarele câmpuri: MAR_CODIGO, MAR_DESCRI ș i MAR_ACTIVO. Toate trebuie
rămân în această ordine, câmpul cheii primare trebuie să fie întotdeauna în prima coloană.
Selectaț i butonul „Salvează” ș i se generează fiș ierul forms\
de la instrucț iunile browserului).

Crearea programului în DPXBASE pentru formularul de încărcare a datelor din tabel


MYMARCA.

Din nou, din opț iunea Tabel, localizaț i tabelul 7000 (MYMARCA) ș i selectaț i-l
al saselea buton (Creare listBox/Browsare de Navigare) si se prezinta selectorul de campuri, in
pe bara de butoane se află al treilea buton "Creare program pentru a crea formular".

Manualul Utilizatorului Capitolul VI. Pag: 84


Programare

prezintă un nou formular compus din două liste de câmpuri, prima conț ine
câmpurile din tabel, iar al doilea formular conț ine câmpurile care să fie utilizate în
formular. Utilizatorul trebuie să selecteze următoarele câmpuri în aceea ș i ordine:
MAR_CODIGO, MAR_DESCRI, MAR_ACTIVO ș i MAR_MEMO, apoi trebuie să apasa
primul buton „Formular”, iar sistemul creează programul sursă scris în DpXbase
conț inutiv de toate instrucț iunile pentru a include, a consulta sau a modifica Mărci.

Pentru a executa „LISTBOX”-ul tabelului MYMARCA este necesar să includem un nou


opț iune în tabelul DPMEMU, din Fiș iere, accesati opț iunea "Meniul Principal de
Acces
opț iune, selectaț i butonul „Includere” ș i introduceț i datele în câmpurile următoare:

Aplicaț ie: Programare ș i Dicț ionar de Date.


Poziț ie Orizontală: Fisiere
Poziț ie verticală 80
Titulo o Descripción: Marcas de Vehículo (Si desea utilizar el diccionario de datos debe
indicar {oDp:MYMARCA}
Acț iune sau Execuț ie: DPLBX(„[Link]”)
Condiț ie de Execuț ie: oDp:cUsuario$”001,002” (Se stabileș te condiț ia pentru a activa
opț iunea din meniu, în acest caz utilizatorii 001 ș i 002 pot accesa doar această opț iune

VEHICULUL MEU

De la opț iunea Tabel, localizaț i tabelul 7001(MYVEHICULO) ș i selectaț i al ș aselea buton


(Creare listBox/Browse de Navigare).

Se prezintă un formular compus din două liste, prima fiind câmpurile tabelului ș i
a doua cu câmpurile selectate pentru listă. Utilizatorul trebuie să selecteze următorul
campo:

VEI_PLACA
VEI_NOMBRE
VEI_ACTIVO
VEI_AN
VEI_FCHADQ
VEI_VALOR
VEI_CODMAR

Manualul utilizatorului Capitolul VI. Pag: 85


Programare

VEI_ORIGEN

Toț i trebuie să rămână în această ordine, câmpul cheii primare trebuie să fie întotdeauna în
prima coloană. Selecta ț i butonul „Salvează” ș i se generează fi ș ierul
forms\[Link] (Conț inut al instrucț iunilor Browse).

Crearea Programului în DPXBASE pentru formularul de încărcare a datelor din tabel


MAVEHICULUL MEU.

Din nou, din opț iunea Tab, localizaț i tabela 7001 (MYVEHICULO) ș i selectaț i-o.
al ș aselea buton (Creare listBox/Browse de Navigare) ș i se prezintă selectorul de câmpuri, în
bara de butoane se află al treilea buton „Creează program pentru a crea formular”. Se
prezintă un nou formular compus din două liste de câmpuri, prima conț ine
câmpuri din tabel ș i al doilea formular conț ine câmpurile care pot fi utilizate în
formular. Utilizatorul trebuie să selecteze câmpurile următoare în aceeaș i ordine:

VEI_PLACA
VEI_NOMBRE
VEI_ACTIVO
VEI_AN
VEI_FCHADQ
VEI_VALOR
VEI_CODMAR
VEI_ORIGEN
VEI_MEMO

În cele din urmă apăsaț i primul buton „ Formular”, iar sistemul creează programul sursă
scris în DpXbase conț inând toate instrucț iunile pentru a include, consulta sau modifica
Vehicule.

În acest caz, putem observa că sistemul a adăugat funcț ionalitatea linkului virtual între
Vehicul cu Marcă

Pentru a executa „LISTBOX”-ul din tabela MYMARCA, este necesar să incluză o nouă
opț iunea din tabelul DPMEMU, din Fiș iere, accesaț i opț iunea „Meniul Principal de
În secț iunea "Acces", sunt afiș ate toate opț iunile din meniul sistemului ș i vom adăuga una nouă
opț iune, selectaț i butonul „Includere” ș i introduceț i datele în următoarele câmpuri:

Manualul utilizatorului Capítulo VI. Pag: 86


Programare

Aplicaț ie: Programare ș i Dicț ionar de Date.


Poziț ie Orizontală: Fiș iere
Poziț ie verticală 81
Titulo o Descripción: Vehiculos (Si desea utilizar el diccionario de datos debe indicar
{oDp:MYVEHICULO})
Acț iune sau Executare: DPLBX(„[Link]”)
Condiț ie de Executare: oDp:cUsuario$”001,002” (Se pune condiț ia pentru a activa
opț iunea din meniul, în acest caz utilizatorii 001 ș i 002 pot accesa doar această opț iune

În cele din urmă pentru a exporta din dicț ionarul de date, toate noile funcț ionalităț i. De la
opț iunea „Altele”, exportaț i structura de date, se prezintă formular, conț inând toate
tabelele de date, selectaț i „toate”, prin intermediul celui de-al treilea buton este posibil să filtraț i tabelele
creaț i dintr-un interval de date, se afiș ează tabelele MYMARCA ș i MYVEHICULO,
executa primul buton, prezintă un nou formular pentru a indica dosarul unde se
vor păstra toate tabelele într-un fi ș ier numit [Link],

PD: În formularul de meniu „Textele vertical ș i orizontal sunt inversate”, în


practica cursului este necesar să schimbe poziț iile ambelor texte.

Crearea de PLUGIN pentru instalarea componentelor dicț ionarului


de date.

Este necesar să descărcaț i programul innosetup de pe internet (Acest program


pentru a crea instalatoare este gratuit, fără plată). Programul de execuț ie se
rula [Link], după executare este necesar să deschizi fi ș ierul
c:\plugin\[Link], apoi indicati fisierele si parametrii, salvati si
executa. Se genere programul de instalare c:\plugin\output\[Link]

Carpetă Conț inut


C:\PLUGIN Carpeta principală
C:\PLUGIN\DATADBF Se păstrează toate componentele ale
dicț ionar de date
DPTABLAS
DPMENU
DPPROGRA
DPCAMPOS
DPCAMPOSOP
DPLINK

Manualul utilizatorului Capitolul VI. Pg: 87


Programare

C:\PLUGIN\DPXBASE Se păstrează toate programele compilate


(*.dxb) en:

C:\PLUGIN\OUTPUT În această mapă se generează programul


[Link]

C:\PLUGIN\FORME Format de formulare ș i fiș iere LBX pentru


Listă de selecț ie

C:\PLUGIN\SCRIPT Fiș iere de programe sursă scrise în


DpXbase.

Fiș iere pentru generarea PLUGIN-ului

Carpeta Conț inut


[Link] Conț inutul scriptului fiș ierelor care
vor conforma pluginul, include
destinul fiș ierelor ș i altele
parametrii pentru programul de
instalare.
Licenț [Link] Conț ine condiț iile ș i informaț iile care
dore ș te să indice creatorul programului
[Link]

Españ[Link] Contiene las instrucciones en español

Ș i dacă utilizatorul nu dispune de aceste fiș iere, va trebui să le comenteze cu „;” în


fi ș ier [Link] pentru ca compilatorul să omită aceste fi ș iere ș i
instrucț iunile programului [Link] vor fi emise în limba engleză. Pentru
inactivas aceste fi ș iere trebuie să pune ț i „;” punct ș i virgulă la începutul
instrucț iune.
LicenseFile=\plugin\[Link]
MessagesFile=\plugin\[Link]

În continuare, conț inutul fiș ierului [Link]

; Script generat de Asistentul pentru Scripturi Inno Setup.


Linile inutile sunt dezinactivate cu ;
[Setup]
AppName=PlugIn AdaptaPro 19/07/2013
AppVerName=PlugIn para Actualizar Sistema AdaptaPro 5.0

Manualul utilizatorului Capitolul VI. Pag: 88


Programare

AppPublisher=Instalador creado por (Programador)


AppPublisherURL=[Link]
AppSupportURL=[Link]
AppUpdatesURL=[Link]
DefaultDirName=c:\dpadmwin\
OutputBaseFilename=plugin
DefaultGroupName=Datapro
Compression=bzip/9
LicenseFile=\plugin\[Link]
MessagesFile=\plugin\[Link]

[Languages]
Name: "spanish"; MessagesFile: "compiler:Languages\[Link]"

[Tasks]
Name: "desktopicon"; Description: Creare incono de &birou icono"; GroupDescription:
"Additional icons:"; MinVersion: 4,4

[Files]
Source: "c:\plugin\datadbf\*.*"; DestDir: "{app}\plugin"; CopyMode: alwaysoverwrite
Source: "c:\plugin\forms\*.*"; DestDir: "{app}\forms"; CopyMode: alwaysoverwrite
Source: "c:\plugin\dpxbase\*.*"; DestDir: "{app}\dpxbase"; CopyMode: alwaysoverwrite
Source: "c:\plugin\*.*"; DestDir: "{app}\innosetup"; CopyMode: alwaysoverwrite
Source: "c:\plugin\datadbf\*.*"; DestDir: "c:\plugin\datadbf"; CopyMode: alwaysoverwrite
Source: "c:\plugin\forms\*.*"; DestDir: "c:\plugin\forms"; CopyMode: alwaysoverwrite
Source: "c:\plugin\dpxbase\*.*"; DestDir: "c:\plugin\dpxbase"; CopyMode: alwaysoverwrite
Source: "c:\plugin\*.*"; DestDir: "c:\kanguro"; CopyMode: alwaysoverwrite

[Rulaț i]
Filename: "{app}\[Link]"; Description: Executa aDaptaPro Sistem de Gestion
Empresarial"; Steaguri: acumș teaptă postinstalare sareț ie dacă este silenț ios

// Programa : DPEXPADAPTA
// Fecha/Hora : 13/12/2011 21:50:51
// Scop : Localizarea Programelor Adaptate
// Creat de : Juan Navas
// Apelat de: Programare
// Aplicación :
// Tabla :

#INCLUDE "[Link]"

FUNCȚ IA PRINCIPALĂ()
LOCAL aTablas

CursorWait()

MsgRun("Leyendo Adaptaciones","Por Favor Espere",;


{||aTablas:=LEERADAPTA()}

ÎNAPOI NIL

FUNCȚ IE LEERADAPTA()
LOCAL aTablas:={},I,cTable,oTable,aFiles:={},cPass,aTotal:={}
LOCAL cDir:="DPEXPADAPTA"
LOCAL cFileZip:=cDir+"[Link]"

AADD(aTablas,{"DPBOTBAR" ,"BOT_ALTER" ,"BOT_CODIGO" ,0 })


AADD(aTablas,{"DPCAMPOSOP" ,"OPC_ALTER" ,"OPC_TABLE ,OPC_CAMPO,OPC_TITULO" ,0 })

Manualul Utilizatorului Capitolul VI. Pag: 89


Programare

AADD(aTablas,{"DPCAMPOS" ,"CAM_ALTER" ,"CAM_TABLE ,CAM_NAME " ,0 })


AADD(aTablas,{"DPLINK" ,"LNK_ALTER" ,"LNK_TABLES,LNK_TABLED,LNK_FIELDS,LNK_FIELDD",0})
AADD(aTablas,{"DPINDEX" ,"IND_ALTER" ,"IND_TABLA ,IND_INDICE" ,0})
AADD(aTablas,{"DPCOMPARATIVOS","COM_ALTERA","COM_CODIGO",0})
AADD(aTablas,{"DPTABLAS" ,"TAB_ALTER" ,"TAB_NOMBRE" ,0})
AADD(aTablas,{ "DPREPORTES", "REP_ALTERA", "REP_CODIGO", 0 })
AADD(aTablas,{"DPGRUREP" ,"GRR_ALTER" ,"GRR_CODIGO" ,0})
AADD(aTablas,{"DPPROGRA" ,"PRG_ALTER" ,"PRG_CODIGO" ,0})
AADD(aTablas,{"DPVISTAS" ,"VIS_ALTER" ,"VIS_CODIGO" ,0})
AADD(aTablas,{"DPTRIGGERS" ,"TRG_ALTER" ,"TRG_CODIGO" ,0})

lMkDir(cDir)

aFiles:=DIRECTOR(cDir+"*.*")
AEVAL(aFiles,{|aFile| ferase(cDir+aFile[1])})

aFiles:={}

PENTRU I=1 PÂNĂ LA LEN(aTablas)

Verifică dacă tabela are modificări

cTable:=cDir+"\"+aTablas[I,1]+".DBF"
FERASE(cTable)

DACA EJECUTAR("DBISTABLE",oDp:cDsnConfig,aTablas[I,1])

oTable:=OpenTable("SELECT * DE LA +aTablas[I,1]+ UNDE +aTablas[i,2]+"=1" GRUP PRIN


+aTablas[i,3])
oTable:CTODBF(cTable)

aTablas[I,4]:=oTable:RecCount()

oTable:FINALIZE()

AADD(aFiles,cTable)

ENDIF

URMĂTORUL I

aTotal:=ATOTALES(aTablas)

HB_ZipFile( cFileZip, aFiles, 9,,.T., cPass, .F., .F. )

MensajeErr("Fiș ierul " + cFileZip + " Generat cu " + LSTR(aTotal[4]) + " Adaptări")

// ViewArray(aTablas)

ÎNTOARCE aTablas
// EOF

Exerciț iu practic de programare în DpXbase:

Manualul utilizatorului Capitolul VI. Pag: 90


Programare

Ob ț ineț i datele Contribuabilului conform următorului text ob ț inut


de pe pagina Web a Seniat.
<?xml version="1.0" encoding="ISO-8859-1"?> <rif:Rif xmlns:rif="rif"
xmlns:xsi="[Link]
rif:numeroRif="J312344202"><rif:Nombre>SERVICIOS INFORMATICOS DATAPRO
C.A. (SERVICII INFORMATICE DATAPRO,
C.A)</rif:Nombre><rif:AgenteRetencionIVA>NU</rif:AgenteRetencionIVA><rif:
ContribuyenteIVA>SI</rif:ContribuyenteIVA><rif:Tasa>75</rif:Tasa></rif:Ri
f>

Pentru a manipula șirurile de caractere în acest caz și a obține diversele valori: Contribuabil, condiție, % de
retenția de TVA necesită utilizarea următoarelor funcții și expresii:

AT("C","ABCD") Determină poziția literei C în șir


ABCD. Generând ca rezultat 3
“C”$”ABC” Această expresie comparativă indică dacă caracterul
„C” se găsește în șirul „ABCD”. Valoarea sa
es .T.(Logic)
STÂNGA(„ABCD”,2) Obține două caractere din partea stângă sau
începutul șirului, în acest caz obține „AB”.
DREAPTA("ABCD",2) Obțineți două caractere din bucla Dreaptă
de la lanț sau de la final, în acest caz
returnează „CD”
SUBS("ABCD",2,2) Obține de la al doilea caracter cele două
caracterele următoare, în acest caz este „BC”
STRTRAN("ABCD","B","2") Caută în șirul "ABCD", în conținutul de
„B” și îl înlocuiește cu „2”, rămânând
expresie ca: A2CD.
UPPE("abcd") Muestra la cadena en mayúsculas “ABCD”
lower("abdc") abcd
CVar:="1A", ISALPHA(cVAR")) Determină dacă un șir începe cu
caractere, în acest caz returnează .F. "Fals", dacă
cadena a fost cVar:=”A1”, returnează .F.
LEN("ABCD") Determină lungimea unui șir, în acest
caz este “ABCD”

Pentru mai multe informaț ii despre funcț iile Xbase ș i DpXbase, puteț i consulta următorul link:

[Link]

Exemplu în program scris în DpXbase:

Manualul utilizatorului Capitolul VI. Pag: 91


Programare

Utilizăm: Ș iruri, Câmpuri Memo, Funcț ii pentru ș iruri, citirea fiș ierului text
(TXT)

// Programă : LEERRIF
// Fecha/Hora : 16/07/2013 16:12:42
// Scop: Citirea RIF-ului Clientului ș i obț inerea datelor fiscale
// Creat de : Juan Navas
// Apelat de:
// Aplicación :
// Tabla :

#INCLUDE "[Link]"

PROCE MAIN(cRif)
LOCAL cUrl,cTemp
LOCAL cWeb:="[Link]
LOCAL nAt,I,aData:={},cMemo:=""

DEFAULT cRif:="J312344202"

cUrl:="[Link] // Prepara la Dirección URL con


Rif

cTemp:="TEMP\[Link]" // Archivo Temporal donde sera guardado el resultado de la página

FERASE(cTemp) // Ș terge fiș ierul, necesar pentru a determina dacă este protejat sau deschis.

Dacă fiș ierul(cTemp)


MesajEroare("Fiș ierul " + cTempo + " este protejat sau este deschis")
ÎNTOARCE .F.
ENDIF

// Verifică programul [Link] (Există)


Dacă nu există fiș ierul "BIN\[Link]"
MensajeErr("Programa BIN\[Link] nu există")
ÎNTORCE .F.
ENDIF

// CursorWait() Cursorul arată Ceasul cu Nisip


// WsaStartUp() Solicita conectivitatea internet pe PC/OS
// WaitRun() Execută un program al OS (Sistem de Operare) ș i aș teaptă să îș i încheie execuț ia
// MsgRun() Măreș te o fereastră de dialog, cu titlu ș i execută un proces sau un bloc de cod

MsgRun("Conectando cu " + cWeb, "Vă rugăm să aș teptaț i.. ",{|| (CursorWait() ,;


WsaStartUp() ,;
Aș teptaț iRulaț i("BIN\\DPFTP " + cUrl) )}

// Si fiș ierul temporar nu există, probabil nu există conectivitate cu [Link] sau domeniul,
poate fi colapsat
DACĂ !FIȘ IER(cTemp)

// Determină IP-ul serverului


cIp := GETHOSTBYNAME(cWeb) // Determină la adresa IP

Când nu există domeniu, nu generează IP, iar valoarea sa este [Link]


Dacă "0.0.0"$cIp
MensajeErr("No hay Conexión Internet o "+cWeb+" no fué Encontrada")
ALTFEL
MesajEroare("Nu a fost posibil să se execute " + cUrl)
ENDIF

ÎNTOARCE .F.

Manualul utilizatorului Capítulo VI. Pag: 92


Programare

ENDIF

// Citeș te fiș ierul text, cMemo conț ine valoarea sa


cMemo:=MemoRead("TEMP\[Link]")

// Caută textul în variabila cMemo


nAt :=AT("rif:numeroRif",cMemo)

Dacă nu există poziț ie a textului, nu există.

DACA nAt=0
// Avem nevoie doar de prima linie a Memo-ului, este convertită într-un aranjament
cMemo:=_VECTOR(cMemo,CHR(10))[1] // Transformă în Arregism ș i ia primul element, CHR(10) împarte
Linii
MensajeErr(cMemo,"RIF no Validado")
ÎNTORCE .F.
ENDIF

Obț inem datele contribuabilului, de la rif:numărulRif


cMemo:=SUBS(cMemo,nAt,LEN(cMemo))

Ș tergem textul: rif:numeroRif "Nu mai este necesar"


cMemo:=STRTRAN(cMemo,"rif:numeroRif=","")

Îndepărtăm ghilimelele inutile.


cMemo:=STRTRAN(cMemo, ["], "")

// Genera un aranjament din valorile comune " ><" în fiecare câmp


aData:=_VECTOR(cMemo,"><")

// ViewArray(aData) // Eliminati comentariile pentru a vedea continutul

Parcurgem aranjamentul pentru a obț ine fiecare câmp cu valoarea sa


PENTRU I=1 PANA LA LEN(aData)

// Determinarea poziț iei de > (Sfârș itul câmpului în format XML)


nAt:=AT(">", aData[I])

Dacă nAt>0
Se obț in datele până la sfârș itul câmpului
aData[I]:=SUBS(aData[I],nAt+1,LEN(aData[I]))
ENDIF

// Determinaț i poziț ia de < (Începutul câmpului în format XML)


nAt:=AT("<",aData[I])

DACA nAt>0
// Obț ine datele de la începutul câmpului
aData[I]:=LEFT(aData[I],nAt-1)
ENDIF

NEXT I

Numele contribuabilului este repetat ș i încercuit între paranteze, exemplu: Contribuabil


(Contribuabil)
// Ubicar poziț ia de (
nAt:=AT("(",adata[2])

Dacă nAt>0
// Si este găsit (, doar luăm caracterele de la început până la ( minus 1 pentru a nu include (
aData[2]:=STÂNGA(adata[2],nAt-1)
ENDIF

// În cele din urmă, sunt afiș ate datele contribuabilului


? "RIF:"+aData[1],"Contribuyente:"+aData[2],"Agente retención: "+aData[3],"Contribuyente de IVA: "+aData[4],"%

Manualul utilizatorului Capitolul VI. Pag: 93


Programare

Retención: "+aData[5]

ÎNTOARCE .T.

/*
<?xml version="1.0" encoding="ISO-8859-1"?>
<rif:Rif xmlns:rif="rif" xmlns:xsi="[Link]
rif:numeroRif="J312344202">
<rif:Nombre>SERVICIOS INFORMATICOS DATAPRO C.A. (SERVICIO INFORMATICOS DATAPRO, C.A)</rif:Nombre>
<rif:AgenteRetencionIVA>NO</rif:AgenteRetencionIVA>
<rif:ContribuyenteIVA>SI</rif:ContribuyenteIVA>
<rif:Tasa>75</rif:Tasa>
</rif:Rif>
*/
// EOF

Glosario de Términos
UDF: Funcț ie definită de utilizator. Definiț ie acordată definiț iilor create de utilizator.

CURSOR
Răspuns primit într-un plan bidimensional (Linii ș i Coloane) dintr-o interogare SQL.

DSN: Nume sursă de date. Numele conexiunilor ODBC cu serverele de baze de date,
predefinite în sursele de date ODBC din Instrumentele administrative ale panoului de control
Control de Windows.

CLASE: Codul sursă sau partitura acțiunilor unui obiect, conține: clasa părinte (opțional dacă
heredat dintr-un alt obiect), metode care indică ce face obiectul și Date care indică ce are
obiect. Trebuie să aibă neapărat o metodă constructor denumită NEW() și un Destructor
denumit END().

METODĂ. Metoda clasei. Conformă funcțiile sau activitățile pe care le desfășoară obiectul, într-o formă
analógica poate fi comparată cu funcțiile statice ale unui program care pot fi doar
a folosi din același program în care a fost declarată. Pentru a utiliza metoda unei clase, trebuie să fie
apelând numele obiectului, urmat de două puncte și în cele din urmă numele metodei cu
parametrii lor respectivi. Exemplu: oObiect:Metoda(uPar1,uPar2,uParn). Metodă Virtuală, a fost
o definiție suplimentară implementată în DpXbase.

DATE: Valorile sau conținuturile Obiectului se reprezintă prin nume valide, cum ar fi variabilele.
De asemenea, poate fi definit ca „Ce are obiectul”. Exemplu: Obiect:xData.

Manualul utilizatorului Capítulo VI. Pag: 94


Programare

OBIECT: Componentă abstractă care realizează activități conform sarcinilor definite în metode
și valori stocate în memorie (date). Obiectul permite a lucra de mai multe ori în formă
simultane (Instanțe). O clasă poate fi definită pe baza unei alte clase, profitând de tot
partitura (hereditate).

FUNC ȚIE: Definirea unui program compus din parametrii, declara ț ia variabilelor,
instrucțiuni, apeluri la alte funcții și care returnează o valoare. Funcția trebuie să fie identificată
cu un nume și trebuie să primească parametrii din instrucțiunea care o execută: Exemplu:
Suma(10,20).

FUNCTIE Sumar(nValor1,nValor2)
RETURN nValor1+nValor2

ENLAZARE: Definiția procesului final pentru generarea unui program executabil sau DLL
unde se utilizează programele obiect produse de compilare și bibliotecile care le conțin
funcțiile invocate de programele sursă.

COMPILARE: Procesul de conversie a fiș ierului obiect (OBJ) pe baza instrucț iunilor scrise
în formă (umană) de un programator.

DLLS: Bibliotecă dinamică de link-uri. Programe compilate și legate în aceleași moduri ca și o


program executabil cu diferența că este încărcat o singură dată în memorie și funcțiile sale pot
să fie apelate sau utilizate din mai multe programe executabile. O altă utilizare a fișierelor DLL poate
a fi compus din resurse compuse din designuri de controale: Combobox, text, checkbox, etc

Manualul utilizatorului Capitolul VI. Pag: 95

S-ar putea să vă placă și