====== Специальные параметры в скриптах ДС-ВДС ====== Со временем всё больше появляется необходимость в доступе к внутренним данным прорабатываемого скрипта. Например, для определения процента начисления бонусов по заказу. Скриптер позволяет передать в него внешнюю переменную, которую он сможет спокойно использовать, менять её значение, и по результату выполнения скрипта это значение можно получить во внешних обработках. Визуально это примерно так: {{:pasted:20211015-075314.png}} Переменная scriptPercent не объявлена локально. Она попадает в скрипт "извне". После отработки скрипта стоит вывод значения этой переменной. Она используется для отображения [[https://doc.agb.is/calc_info_script|информации о расчёте бонусов за заказ]] ===== Техническая часть ===== Чтобы подобное реализовать, нужно доработать модуль **ScriptFunctions.pas**: - В тип TExtScriptResInfo добавляем нужное поле; {{:pasted:20211015-075714.png}} - В процедуре **TScriptExecutor.PSScriptCompile**, являющейся обработчиком PSSCript.OnCompile, регистрируем название новой переменной: //Sender.AddRegisteredPTRVariable('scriptItogSum', 'double');// - В процедуре **TScriptExecutor.PSScriptExecute**, являющейся обработчиком PSSCript.OnExecute, связываем переменную с полем записи **ExtScriptResInfo**: //PSScript.SetPointerToData('scriptItogSum', @ExtScriptResInfo.scriptItogSum, PSScript.FindBaseType(btDouble));// ==== Базовые типы переменных в скриптах ==== ^ Базовый тип в скриптере ^ Соответствующий тип Delphi ^ | btU8 | Byte | | btS8 | ShortInt | | btU16 | Word | | btS16 | SmallInt | | btU32 | Longword | | btS32 | LongInt | | btS64 | Int64 | | btSingle | Single | | btDouble | Double | | btExtended | Extended | | btVariant | Variant | | btString | String | | btWideString| WideString| | btChar | Char | | btWideChar | WideChar | | || ==== Функции получения данных ==== Весь список возможных функций получения данных: * function VGetUInt(const Src: PIFVariant): Cardinal; * function VGetInt64(const Src: PIFVariant): Int64; * function VGetReal(const Src: PIFVariant): Extended; * function VGetCurrency(const Src: PIFVariant): Currency; * function VGetInt(const Src: PIFVariant): Longint; * function VGetString(const Src: PIFVariant): String; * function VGetAnsiString(const Src: PIFVariant): tbtString; * function VGetWideString(const Src: PIFVariant): tbtWideString; * function VGetUnicodeString(const Src: PIFVariant): tbtunicodestring;