<< Click to Display Table of Contents >> Navigation: WinArhi > Fereastra principala > Oferte si Comenzi deschise > Meniu > Optiuni > Editare Accesorii > Script |
Începând cu WinArhi 8, calculul de preț al accesoriilor și desenarea lor poate fi făcută folosind metode avansate de programare, prin script-uri. Pentru aceasta, trebuie urmați următorii pași:
Prima dată trebuie stabiliți parametrii accesoriului și completată denumirea lor în listă.
Al doilea pas este crearea dialogului de configurare a accesoriului în care se completează parametrii. Acesta este un raport FastReport din lista de rapoarte la care, după adăugarea unei ferestre de dialog, se va șterge pagina raportului.
Atât parametrii ficși cât și cei definiți sunt accesibili în interiorul scriptului. Parametrii generali se vor defini în scriptul CommonUnit. Pentru a face acești parametri să fie vizibili, în scriptul dialogului trebuie pus ca primă linie în script: uses 'CommonUnit';
Atenție !!! Dacă un parametru se declară în script ca funcție și nu ca variabilă atunci această funcție trebuie să ia în considerare ca poate fi apelată fară ca scriptul sa fi pornit, deci toate variabilele (inclusiv tabele) vor fi neinitializate. Tabelele, fiind obiecte, vor avea valoarea nil. Acest apel nu are nevoie de o valoare validă ci doar testeaza tipul.
Parametrul ParamsInit este de tip Boolean fiind True doar la adăugarea accesoriului în ofertă. În acest caz, din script, parametrii definiți trebuie inițializați cu valorile de pornire. Dacă se dorește închiderea dialogului după această inițializare, se folosește DialogPage1.Active := False;
Parametrii modificați de către scriptul dialogului se vor reține împreună cu accesoriul.
Tipul Boolean nu se va folosi ca și tip la parametrii de intrare (parametrii adiționali).
Dacă se introduc parametrii noi, aceștia trebuie inițializați pe o valoare validă chiar dacă ParamsInit este False.
Aceasta se va face de preferință în CommonUnit.
Acest lucru este necesar pentru accesoriile deja create care nu au acești parametrii noi.
Acești parametri definiți sunt de asemenea disponibili și în restul scripturilor care se execută când este necesar.
Celelalte scripturi sunt:
- Script descriere. Folosit pentru descrierea accesoriului conform parametrilor. Această descriere apare pe oferta de preț. De aceea este important sa se tină cont de traducere in acest caz. Altfel, toate variabilele care încep cu TrsText_ vor intra automat în traducerea bazei de date. Important este ca linia sa înceapă cu TrsText_ (spatiile dinainte nu contează). Descrierea trebuie pusă în parametrul Description.
- Scriptul consum și debitare. Folosit pentru introducerea articolelor în bonul de consum și în lista de debitare.
- Script desen. Folosit pentru a afișa un desen pe oferta de preț și în dialogul de configurare. Se vor folosi parametrii accesoriului pe baza cărora, folosind funcțiile de desen, se va crea desenul accesoriului. Condiția de desenare pe fereastră este sa aibă un ochi selectat și să îi fie setat OffsetX și OffsetY.
Trebuie declarate variabilele OffsetX si OffsetY (de tip Double) care determina pozitia desenului accesoriului fata de pozitia desenului ferestrei. De exemplu, daca se doreste desenarea accesoriului la 100mm mai sus fata de fereastra, se seteaza: OffsetY pe 100.
In desen se pot folosi functiile WA_Side('EXT') si WA_Side('INT') care specifica pe care "parte" a ferestrei se vor desena urmatoarele componente ale accesoriului. De exemplu, pentru un rulou se foloseste la inceputul desenarii WA_Side('EXT'), apoi inainte de desenarea actionarii se foloseste WA_Side('INT'), apoi daca mai sunt componente de desenat la exteriorul ferestrei se foloseste din nou WA_Side('EXT').
Trebuie specificata pozitionare accesoriului, in coloana PozitieIntExt. Pozitionarea poate fi Exterior, Integrat sau Interior.
Trebuie specificata pozitia fata de fereastra, in coloana PozitieFataDeFereastra. De exemplu la un rulou, doar la cele suprapuse (nu aplicate), se pune "Sus" iar la un profil ce vine sub fereastra, se pune "Jos".
Trebuie deselectata desenarea culorii termopanului deoarece, in general, interfereaza cu desenul accesoriului si accesoriul nu poate fi desenat corect. Deselectarea se face de aici.
Functii pentru Desen
procedure WA_Line(X1, Y1, X2, Y2: Double
procedure WA_Polygon(X1, Y1, X2, Y2, X3, Y3: Double;
X4: Double = 0; Y4: Double = 0;
X5: Double = 0; Y5: Double = 0;
X6: Double = 0; Y6: Double = 0;
X7: Double = 0; Y7: Double = 0;
X8: Double = 0; Y8: Double = 0)
procedure WA_Circle(X, Y, R: Double)
procedure WA_Rectangle(X1, Y1, X2, Y2: Double)
procedure WA_Brush(Color: String)
procedure WA_Pen(Color: String)
procedure WA_TextOut(X, Y: Double; Text: String)
procedure WA_Font(Size: Integer; Name, Color, Style: String)
procedure WA_DrawImage(X1, Y1, X2, Y2: Integer; FileName: String; KeepAspectRatio: Boolean = True)
procedure WA_Side(Side: String)
- Parametrul Side poate fi INT, EXT sau nimic și definește fața interioară sau exterioară a accesoriului. Functiile de desen apelate dupa aceasta vor fi folosite cănd se desnează fața interioara sau exterioara. Daca Side nu are valoare (sau este altceva decat INT sau EXT) atunci aceste functii vor fi folosite intotdeauna.
- Când se desenează dinspre interior se apelează intăi funcțiile care au rulat dinspre exterior și după aceea cele care au rulat dinspre interior. Când se desenează dinspre exterior este invers.
Functii Consum si Debitare
Ambele funcții întorc prețul articolului adăugat.
function WA_AddCutItem(Code: String;
Length: Double;
NumberOfPieces: Double = 1;
NumberOfCutedPieces: Integer = 0;
Position: String = '''';
Angle1: Double = 90;
Angle2: Double = 90;
ColourCategory: String = '''';
Color: String = '''';
ColorCode: String = '''';
OptimizationNeeded: Boolean = False;
MinOrderQty: Double = 0 //cantitatea la care va fi ajustat totalul per comanda rezultat după optimizare dacă acesta este mai mic
): Double
- Dacă unitatea de măsură este BUC, SET sau PER, atunci în bonul de consum se va pune doar NumberOfPieces, fără Length
La WA_AddCutItem2 față de WA_AddCutItem sa schimbat parametrul OptimizationNeeded
function WA_AddCutItem2(Code: String;
Length: Double;
NumberOfPieces: Double = 1;
NumberOfCutedPieces: Integer = 0;
Position: String = '''';
Angle1: Double = 90;
Angle2: Double = 90;
ColourCategory: String = '''';
Color: String = '''';
ColorCode: String = '''';
OptimizationNeeded: String = '''';//Se completeaza cu 'X' sau 'B' identic cu coloana OptiPtConsum din tabelele profilelor.
MinOrderQty: Double = 0 //cantitatea la care va fi ajustat totalul per comanda rezultat după optimizare dacă acesta este mai mic
): Double
- Dacă unitatea de măsură este BUC, SET sau PER, atunci în bonul de consum se va pune doar NumberOfPieces, fără Length
function WA_AddItem(Code: String;
Quantity: Double;
ColourCategory: String = '''';
Color: String = '''';
ColorCode: String = '''';
X: Word = 0;
Y: Word = 0;
WeightGram: Integer = 0): Double
- ColourCategory poate fi 'parent', caz în care valorile primite in parametrii funcției sunt ignorate și se ia categoria de culoare, codul culorii și denumirea culorii de la accesoriul apelant. De asemenea OptiPtConsum si MinOrderQty din tabelul de culori.
- X și Y se rețin in consum și sunt folosite și la exportul către WinGlass. De asemenea se pot folosi pentru optimizarea de suprafață dacă sunt completate câmpurile OptiPtConsum, Opti_DimColi și celelalte câmpuri cu prefix Opti_ în lista de componente accesorii.
- WeightGram este greutatea în grame per unitate de măsură. Dacă este mai mare ca 0 greutatea din tabelul de bază va fi ignorată și va fi folosită această valoare.
function WA_AddWeldingFrame(
Width, Height: Double;
ProfileCode: String;
ColourCategory: String = '''';
Color: String = '''';
Quantity: Integer = 1)
- Se folosește pentru adăugarea unui cadru în lista de suduri. Acesta se transmit si către CNC-uri. Profilele care aparțin de acest cadru trebuie adăugate înainte de apelul acestei funcții. După apelul acestei funcții următoarele profile adăugate în debitare vor aparține următorului cadru pentru sudură.
Funcții de interogare în scriptul accesoriului
procedure WA_HardwareItemQty(ItemCode: String): Double;
- Întoarce cantitatea articolului din setul de feronerie. Accesoriul trebuie sa fie pus pe un ochi al cercevelei.
procedure WA_HardwareItemTypeQty(ItemType: String): Double;
- Întoarce cantitatea articolelor din setul de feronerie care au tipul ItemType. ItemType caută pe coloana TipArticol. Accesoriul trebuie sa fie pus pe un ochi al cercevelei.
function WA_FalseMullion: Boolean;
- Întoarce True sau False daca exista stulp. Accesoriul trebuie sa fie pus pe un ochi al cercevelei sau ochiul în care se află cerceveaua.
Funcții de interogare în scriptul rapoartelor
procedure WA_AccScriptParamValue(ListaAccScriptIndex: Integer; ParamName: String): Variant
- Întoarce valoarea oricărui parametru al accesoriului cu script. ListaAccScriptIndex se va completa cu câmpul cu același nume din tabelele AccesoriiOferta și AccesoriiProdus
Funcții pentru dialogul de culegere a datelor
procedure WA_DrawSelectedAcc(AfrxImageControl: String)
Funcții generale
InternalName poate fi omis daca nu se doreste deschiderea aceluiasi tabel de doua ori.
InternalName reprezinta instanta interna. Daca se doreste o dublura a aceluiasi tabel atunci trebuie specificat alt InternalName.
FileName poate incepe cu un sub-folder (ex. ''ScriptTabels\TableName.cds''). Radacina este a bazei de date.
function WA_OpenTable(FileName: String; InternalName: String = ''): TClientDataSet
function WA_TranslateTableField(Text: String): String
După crearea unui nou dialog de introducere a datelor în scriptul acestuia trebuie introdus la început:
uses 'CommonUnit';
Variabile in „CommonUnit”:
- Width, Height sunt X-ul si Y-ul accesoriului
- Acestea variabile pot fi modificare automat dacă accesoriul este legat de un ochi al ferestrei. Dacă și alți parametrii interni accesoriului trebuie ajustati după Width si Height atunci tot timpul după ajustare valorile lui Width și Height vor trebui reținute în parametri interni (de ex. paInternalWidth, paInternalHeight) iar ajustarea acestor parametrii interni depedenți de Width și Height va trebui făcută în scripul CommonUnit după inițializările de bază dar inainte de a avea nevoie de ei. Funcția SetWidthHeight este o funcție internă scriptului (adică trebuie să fie scrisă în script) și poate fi denumita cum se dorește și este necesara doar daca alți parametrii din script depind de Width sau Height. Adică in loc de SetWidthHeight() trebuie pus un cod care ajustează ceilalti parametrii ai scripului care depind de Width sau Height. Nu trebuie neaparat să fie o procedură dar este mai simplu cu o procedură care face tot ce trebuie și este folosită peste tot unde este nesesar cum ar fi de ex. dialogul de introducere a datelor. .
//dacă accesoriu este vechi și fără paInternalHeight si paInternalWidth (adică sunt zero)
//și ajustarea automată ar putea strica ceva atunci le preia pur si simplu
//acest lucru nu este necesar la un accesoriu care din start verifică modificarea automată a dimensiunilor
if (paInternalWidth = 0) then
paInternalWidth := Width;
if (paInternalHeight = 0) then
paInternalHeight := Height;
//verificăm dimensiunile și dacă s-eu schimbat apelam procedura de ajustare și reținem noile valorile
if (paInternalWidth <> Width) or (paInternalHeight <> Height) then begin
SetWidthHeight(Width, Height);
paInternalWidth := Width;
paInternalHeight := Height;
end;
- Angle1, Angle2 - unghiurile accesoriului introduse la adăugarea accesoriului
- AccColor - culoarea accesoriului
- DelivOnWnd - dacă se livrează montat pe fereastră
- Dimensions și DimensionsImperial - valoarea care se completează în aceste variabile de tip String va apărea in câmpurile Dimensiuni și DimensiuniEngleza din tabelele AccesoriiProdus și AccesoriiOferta din rapoarte. Valoarea trebuie completată în scripul de consum și variabila trebuie să se regăsească în lista de parametrii a scriptului.
- ParentProfileSeries - seria de profile a părintelui (ferestrei, panoului sau comenzii pe care este accesoriul)
- ParentProfileSubSeries - sub-seria de profile a părintelui (ferestrei, panoului sau comenzii pe care este accesoriul)
- ParentWidth - lățimea ferestrei sau panoului (de tip Double)
- ParentTotalWidth - lățimea ferestrei sau panoului cu tot cu profilele de adaus la toc (de tip Double)
- ParentHeight - lățimea ferestrei sau panoului (de tip Double)
- ParentTotalHeight - lățimea ferestrei sau panoului cu tot cu profilele de adaus la toc (de tip Double)
- ParentBaseColor - culoarea de bază
- ParentIntColor - culoarea aplicată de interior
- ParentExtColor - culoarea aplicată de exterior
- ParentGlass - denumirea termopanului (a unuia)
- ParentGlassThickness - grosimea termopanului (a unuia)
- ParentOutsideOpening - întoarce True daca este deschidere de exterior pentru cerceveaua pe care este accesoriul
- ParentOpeningType - deschiderea cercevelei pe care este accesoriul de tip OD, OS, OBD...
- ParentSashCode - codul cercevelei pe care este accesoriul
- ParentThresholdCode - codul pragului dacă accesoriul este pe toc sau pe o cercevea. În cazul cercevelei este codul pragului de sub cercevea. Daca nu este prag nu va intoarce nici o valoare.
- ParentDownFrameCode - similar cu ParentThresholdCode dar întoarce codul indiferent ce tip de profil este jos.
- ParentDornmass - dimensiunea de dornmass
- ParentHandleHeight - înălțimea mănerului la cota de falț
- ParentIntHandleCode - codul mănerului interior (dacă nu este definit măner de interor atunci întoarce un cod de măner din set)
- ParentExtHandleCode - codul mănerului exterior (dacă nu este definit măner de exterior atunci întoarce un cod de măner din set)
- rho_FactorReflexieExt - se va seta cu valoarea factorului de reflexie din exterior
- tau_FactorTransmisieExt - se va seta cu valoarea factorului de transmisie din exterior
- ParamsInit este True pentru:
1. Dialog introducere date la adăugarea unui accesoriu. Daca este True, atunci trebuie initializati parametrii pe valorile inițiale.
Dacă se dorește închiderea din script a dialogului se apelează DialogPage1.Visible := False;
- WarningMsg - se poate seta cu o valoare care sa apară ca mesaj de avertizare
- ErrorMsg - se poate seta cu o valoare care sa apară ca mesaj de eroare
Variabile in scriptul „Description”:
- Description va fi setată cu descrierea accesoriului conform parametrilor și este completată de scriptul pentru descriere. Aceasta apare pe oferta de preț.
Variabile in scriptul de consum și debitare:
- FinalPrice este prețul final al accesoriului și va trebui calculat de scriptul de calcul al consumului. Aceasta valoare va ajunge și în WA_Pret din formarea prețului la accesorii.
- U_Value - se va seta cu valoarea Ug sau Uf pentru calcularea transmitanței termice. Dacă rămâne 0 este ignorat.
- La accesoriile care sunt adăugate ca adaus de toc. Pentru aceasta accesoriul trebuie să aiba stabilită o poziție față de fereastră ori din lista de accesorii ori la adaugarea accesoriului. Profilul va primi Uf-ul de la accesoriu.
- La accesoriile care sunt legate de termopan (adăugate automat completand campul CodAccesoriu din tabelul de termopane). Termopanul va primi Ug-ul de la accesoriu.
Variabile in scriptul de desen:
- MaxDrawW, MaxDrawH sunt dimensiunile maxime pentru Desen. MaxDrawH poate fi micșorat când scriptul este apelat cu ParamsInit=True;
- CanvasDPI
- ViewFromInside indică că desenul este cu vederea din interior
- OffsetX, OffsetY - folosite pentru a desena accesoriul pe fereastră. De obicei se setează ambele pe valoarea 0. Trebuie însă setate pentru a indica că scriptul trebuie să deseneze pe fereastră.
Daca campul PozitieFataDeFer este „Sus” atunci OffsetY va fi folosit în locul campului C_Total din tabelul de accesorii pentru a determina înălțimea de deasupra ferestrei.
Taste şi combinaţii de taste utilizate la editarea scriptului:
Ctrl + F - pentru căutarea unui text;
F3 - caută urmatorul text.
Taste şi combinaţii de taste utilizate des la editarea tabelelor:
Ctrl + N - copiază linia curentă
Ctrl + Delete - şterge linia curentă
Insert - inserează o linie goală
Ctrl + M - editează câmpul curent
Ctrl + H - şterge câmpul curent
F12 - copiază câmpul curent în câmpul următor