====== Създаване на източник на данни ======
===== Служебни параметри на скриптове =====
Ако източника на данни е IBESCRIPT* той може да получи някои специални входни параметри, с които да си осигури достъп до информация идваща от другаде.
//Забележка: някои от входните параметри се поддържат и от execute block//
Типичен пример за това е скрипт (2), който се извиква от друг скрипт (1) - скрипт (2) може да има достъп до данните или дори входните параметри на скрипт (1). Друг типичен пример е скрипт, който се извиква от документ - скрипта може да получи данните от документа (и дори да върне променени такива).
Списък със служебните параметри и тяхното значение:
==== __dbFilters и __dbFilterValues ====
Първия параметър съдържа път до XML файл, в който се намира списъка с входните филтри на извикващия скрипт (стига да има такъв). Втория съдържа стойностите. Двата параметъра се използва в комбинация.
Пример има в [[kak_da:spravki_scriptove|как да секцията]], виж **Изтегляне на информация от филтрите на справка чрез последващ скрипт**.
==== __dbResult ====
Съдържа път до XML файл, в който се намират данните на извикващата справка (стига да има такава).
Пример има в [[kak_da:spravki_scriptove|как да секцията]], виж **Изтегляне на информация от данните на справка чрез последващ скрипт**.
==== MASTER_DATASOURCE_FILE ====
Файл в който се връща резултата. В тази променлива се подава път до файла, като тя се генерира автоматично.
==== __DATABASE ====
Подава текущата връзка към базата server:database
==== __USERNAME ====
Текущ системен потребител - с който влизаме в Селматик ЕРП
==== __PASSWORD ====
Паролата на текущия системен потребител - с който влизаме в Селматик ЕРП
==== __CURRENT_ROLE_ID ====
ID на ролята на потребителя, който стартира текущият скрипт
==== __CURRENT_ROLE_NAME ====
Име на ролята на потребителя, който стартира текущият скрипт
==== __CURRENT_USER_ID ====
ID на потребителя, който стартира текущият скрипт
==== __CURRENT_USER_NAME ====
Име на потребителя, който стартира текущият скрипт
==== __DATASOURCE_ID ====
Подаване на номера на източника
//Забележка: Този параметър се поддържа и от Execute Block. Виж секцията Пример има в [[kak_da:spravki_scriptove|как да секцията]], виж **Изтегляне на преводи на полета от източника**//
==== __VIEW_ID ====
подаване на номера на изгледа
==== __CLIPBOARD_AS_TEXT ====
Генерираме файл във временната директория, като в него поставяме каквото има в клипборда, като текст.
==== TMP_FILE ====
Генерира име на файл във временната директория
==== Параметри - особености ====
При зареждане на параметрите на скриптовете:
- __RQ - Ако се съдържа ще постави автоматично параметъра за задължителен
- __CHK - Прави параметъра от тип "Да/Не"
- __PSW - Правим параметъра да е тип Парола (Ако е текстов тип ще покаже поле тип парола)
===== Специални имена на полета управляващи поведението и външния вид =====
Ако в резултатния източник на данни има полета с имената описани по-долу, то те управляват поведението на програмата. Например наличието на поле с име ACT$FONT_COLOR сменя цвета на шрифта на реда. Дали полето се вижда в грида или не няма значение, важното е в резултантния източник на данни да има такова поле. Обичайна практика е тези специални колони да се крият от потребителя (в секция "Специални полета" да се постави "Скрито"), с което те въобще не са видими като колони в грида.
Списък на специалните имена на полета:
==== ACT$DOC_ID ====
ID на елемента, който ще се извиква, примерно номер на търговски документ. Използва се съвместно с ACT$DOC_CLASS_NAME.
==== ACT$DOC_CLASS_NAME ====
Присъствието на поле с това име кара системата при двоен клик на реда да отвори прозорец от вида указан в стойността на това поле. \\
По друг начин казано, това дава възможност да се отвори примерно търговски документ с номер взет от ред от справката. \\
Какво да се отвори (примерно търговски документ) се указва в **ACT$DOC_CLASS_NAME**, а кой по-точно (номера му) се указва в **ACT$DOC_ID**.
Актуален списък с възможните имена на класове може да се види чрез създаване на елемент в главното меню с цел "Регистрирани в програмата класове".
Списъка може да се види и [[spravki_new:registered_classes|ето тук]].
Има възможност справките да обработват освен **ACT$DOC_ID** и **ACT$DOC_CLASS_NAME** и още **5 нови комплекта от параметри**. \\
Тези 5 комплекта дават възможност за до 5 отделни действия, в зависимост от колоната/колоните, върху които e дабълкликнато: \\
* **ACT$DOC_ID1, ACT$DOC_ID2... ACT$DOCID5** - в тези пет полета се държи кое ИД да се отвори
* **ACT$DOC_CLASS_NAME1 ... ACT$DOC_CLASS_NAME5** - указва се кой клас да се отвори
* **ACT$DOC_COLS1... ACT$DOC_COLS5** - в тези полета се държи името на колоната или колоните, за които е действието. Имената на колоните се разделят със точка и запетая ( ; ).
При дабъл клик върху ред от справка първо се проверява дали колоната, в която се клика не е изредена в ACT$DOC_COLS1 или ACT$DOC_COLS2 или .. и т.н. в ACT$DOC_COLS5. \\
Ако се намери в някоя от тези колони - в първата, в която се намери, например в **ACT$DOC_COLS2** - се отваря **клас ACT$DOC_CLASS_NAME2**, с **ИД - ACT$DOC_ID2**. \\
Ако не се намери нищо и има дефинирани съществуващите параметри ACT$DOC_ID и ACT$DOC_CLASS_NAME се отваря по стандартния начин.
==== ACT$BACKGROUND_COLOR ====
Цвят на фона, в RGB, шестнайсетично, примерно #FF0000 (чисто червено),
==== ACT$BACKGROUND_COLOR_XOR ====
Алтернативен цвят на фона (редува се през ред с цвета на фона), в RGB, шестнайсетично, примерно #FF0000 (чисто червено),
==== ACT$BACKGROUND_COLOR_COLUMNS ====
Цвят на фона, но с възможност да се каже за конкретна колона, вместо за целия ред. Виж //Относно цвят/размер/шрифт/стил на отделните колони// по-долу.
==== ACT$FONT_COLOR ====
Цвят на шрифта, в RGB, шестнайсетично, примерно #FF0000(чисто червено),
==== ACT$FONT_COLOR_XOR ====
Алтернативен цвят на шрифта (редува се през ред с цвета на шрифта), в RGB, шестнайсетично, примерно #FF0000 (чисто червено),
==== ACT$FONT_COLOR_COLUMNS ====
Цвят на шрифта, но с възможност да се каже за конкретна колона, вместо за целия ред. Виж //Относно цвят/размер/шрифт/стил на отделните колони// по-долу.
==== ACT$FONT_STYLE ====
Стил на шрифта - Bold, Italic, Underline, StrikeOut
Подава се като стринг, примерно __**BI - bold и underline**__, S - Strikeout (зачеркнато), __//**BIUS - всички едновременно**//__
==== ACT$FONT_STYLE_COLUMNS ====
Стил на шрифта, но с възможност да се каже за конкретна колона, вместо за целия ред. Виж //Относно цвят/размер/шрифт/стил на отделните колони// по-долу.
==== ACT$FONT_SIZE ====
Размер на шрифта, в пиксели
==== ACT$FONT_SIZE_COLUMNS ====
Размер на шрифта, но с възможност да се каже за конкретна колона, вместо за целия ред. Виж //Относно цвят/размер/шрифт/стил на отделните колони// по-долу.
==== Кодове на цветовете ====
Удобен начин да се избере код на цвят: чрез http://www.colorpicker.com/
==== Относно цвят/размер/шрифт/стил на отделните колони ====
При задаване например на стил чрез ACT$FONT_STYLE, този стил важи по подразбиране за ВСИЧКИ КОЛОНИ, освен ако няма зададени и ACT$FONT_STYLE_COLUMNS. Тогава стила важи само за изброените в ACT$FONT_STYLE_COLUMNS, **освен ако** в изброяването не е зададено изключение.
Примери:
^ ACT$FONT_STYLE ^ ACT$FONT_STYLE_COLUMNS^Резултат^
| B | Column1;Column2 | В колона 1 и 2 текста ще е BOLD, в останалите - не |
| B | | Във ВСИЧКИ колони текста ще е BOLD|
| B | Column1=I | В колона 1 текста ще е Italic. Обърнете внимание: bold-а се игнорира |
| B | Column1=I;Column2 | В колона 1 текста ще е Italic. В колона 2 ще е bold|
Логиката за останалите Font_Color / Font_Color_Columns, Font_Size/Font_Size_Columns е същата.
//Забележка: Изглежда, че ACT$FONT_COLOR_COLUMNS няма никакъв ефект, ако в нея има само изключения (например Column1=#112233) И не съществува колона ACT$FONT_COLOR.//
===== Справка, която поставя стойности в дадени редове на документ или създава нови редове в документ =====
1. За да може **справка да редактира редове на документ**, в справката трябва да са дефинирани поне 2 вида полета: **"търсещи"** и **"резултатни"**. Търсещите полета определят върху кои редове в документа ще се приложат стойностите на резултатните полета.
Търсещите полета трябва да имат име от вида **LOCATE_<име_на_поле>**, където <име_на_поле> е името на поле от документа. Не е задължително да има търсещи полета - ако няма такива, то резултатните полета ще поставят стойностите си във всички редове на документа. Позволено е да съществуват няколко търсещи полета, като в този случай стойностите на резултатните полета се прилагат върху редовете, които отговарят на стойностите на **всички** търсещи полета.
Резултатните полета не трябва да имат някакво специално име, всички полета, които не са търсещи, се приемат за резултатни. За всяко резултатно поле - ако в документа съществува поле със същото име, тогава неговата стойност се прилага върху редовете в документа, отговарящи на търсещите полета.
Например, за да запишем дадено количество в редовете с даден номер на позиция, трябва справката да има търсещо поле с име LOCATE_ITEM_REF, което съдържа като стойност номера на дадената позиция и резултатно поле с име QTY1, което да съдържа като стойност даденото количество.
2. За да може **справка да добавя редове в документ**, трябва в нея да е дефинирано поле с име **NEW_ROW**. Всеки ред от справката, който съдържа стойност за това поле, различна от нула, ще бъде използван за добавяне на нов ред в документа, като стойностите за всяко поле на новия ред се взимат от съответните полета в справката (полетата с еднакви имена).
Например, за да добавим нов ред в документ с даден номер на позиция и дадено количество, справката трябва да съдържа: \\
- поле NEW_ROW със стойност 1 \\
- поле ITEM_REF със стойност номера на дадената позиция \\
- поле QTY1 със стойност даденото количество \\
3. За да може дадена справка да редактира или добавя редове в документ, трябва връзката към нея в настройките на типа документ да има следните настройки: \\
- Показвай модално - да \\
- Връщай резултат - да \\
- Използвай резултата в - Заглавна част или Детайлна част (избира се къде трябва да се приложи резултата на справката)
Попълване на количество (избрано от потребителя) и цена без ДДС = 10 в текущо избрания ред на документа: \\
''select \\
cast(:"dbDetail.ID" as DM_REF) LOCATE_ID, \\
cast(:ENTER_QTY1 as DM_FLOAT) R_QTY1, \\
cast(10 as DM_FLOAT) PRICE_WO_VAT_BFR_DISCNT \\
from RDB$DATABASE''