523
правки
Изменения
→Функциональность базового объекта
== Основные положения ==
В систему «Курьерская служба 2008» «MEASOFT» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов.
Как интерпретатор приводит типы:
=== Функциональность базового объекта ===
'''SET($a, a) ''' – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.
'''IF(a,b,c) ''' или '''IF(a,b) ''' – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.
'''WHILE(a, b) ''' – Оператор цикла. Выполняет b пока a истинно:
set($i, 10);
set($sum, 0);
Результат – 55
'''FOR($a, b, c, d) ''' – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:
set($sum, 0);
for($i, 1, 10, set($sum, $sum+$i));
Результат – 55
'''NEW(ClassName, InstanceName) ''' – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.
'''FREE(InstanceName) ''' – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.
'''ShowObjects ''' – Возвращает список созданных объектов – названия классов и имена.
'''ERROR(message) ''' – Вызывает ошибку с текстом message.
'''SHOWMESSAGE(message) ''' – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.
'''SimpleAskUser(Message) ''' – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.
'''TRY(a) ''' – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).
'''REM(….) ''' – Код в скобках игнорируется (комментарий).
'''EXEC(FileName, Params, Wait, WindowState) ''' – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:
0 - SW_HIDE
1 - SW_SHOWNORMAL (по-умолчанию)
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.
'''CASE''' - Оператор множественного выбора. Позволяет выполнить одно из нескольких действий в зависимости от условий. Синтаксис:
<source>
case(
when(условие1, действие1);
when(условие2, действие2);
...
else(действие_по_умолчанию);
);
</source>
Пример использования:
<source>
set($a, 10);
set($b, 50);
showmessage(
case(
when($a < 5, 50);
when($a < 10, 100);
when($a < 250, 200);
else($a*$b);
)
);
</source>
'''AttachDebugger''' - Команда позволяет подключить открытый [[Отладчик_встроенных_скриптов]] к текущему скрипту. Команда AttachDebugger должна быть '''первой командой''' в скрипте. Добавьте её в самое начало скрипта:
<source lang="json">
<?>
AttachDebugger;
set($a, 10);
set($b, 20);
set($sum, $a + $b);
showmessage($sum);
</source>
'''Как работает:'''
# При выполнении команды AttachDebugger скрипт останавливается.
# Отладчик автоматически подключается к выполняющемуся скрипту.
# Текст скрипта загружается в редактор отладчика.
# Можно ставить точки останова, просматривать переменные и продолжать отладку.
'''Важно:'''
* Отладчик должен быть в режиме отслеживания до того, как скрипт дойдёт до команды AttachDebugger.
* Если режим отслеживания не включён, команда `AttachDebugger` игнорируется.
* В режиме отслеживания может работать только один отладчик.
* Команда AttachDebugger должна быть первой командой в скрипте.
=== Строковые функции ===
'''UpCase(s) ''' – возвращает строку s в верхнем регистре. '''LCase(s)''' – возвращает строку s в нижнем регистре. '''Len(s)''' – возвращает количество символов в строке s.
====Функции перекодировки====
'''DecodeStr(s, charset) ''' - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.
'''EncodeStr(s, charset) ''' - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.
====Транслитерация====
'''Translit(s) ''' - транслитерация строки русского текста s латиницей
'''UnTranslit(s) ''' - транслитерация строки s с латиницы на русский.
==== Экранирование ====
'''QUOTEDSTR(s) ''' – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно. '''SQLFloat(f)''' – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.
'''FormatTextXML(s) ''' - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.
'''FormatTextJSON(s) ''' - переводит строку в формат JSON, экранирует служебные символы.
'''FormatTextBlob(s) ''' - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.
====Хеширование ====
'''HMACHash256(key, text) ''' - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение
'''MD5Hash(text) ''' - создаёт хеш по алгоритму MD5
'''SignatureUrl(url) ''' - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.
=== Функции работы с датой и временем ===
'''CurrTime ''' – возвращает текущее время CurrDate – возвращает текущую дату
'''FirstDayOfMonth(dt)''' – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );'''Полужирное начертание''''''LastDayOfMonth(dt) ''' – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );
'''DaysInMonth(month, year) ''' – Возвращает количество дней в указанном месяце.
'''IncDay(dt, [count=1]) ''' – Возвращает дату, увеличенную на count дней.
'''SQLDate(dt) ''' – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».
'''SQLDateToDate(dt) ''' – Переводит дату из SQL-формата в обычный.
'''DAYSBETWEEN(dt1, dt2) ''' – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.
'''TimeBetween(t1, t2) ''' - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.
'''WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) ''' - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки
'''TimePeriod(time1, time2) ''' - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".
'''StrDateToFloat(s, [time=false]) ''' - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0
'''IsAWorkDay(dt) ''' - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.
'''IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) ''' - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки
'''Sleep'''(n) - Задержка выполнения на n миллисекунд.
=== Функции приведения типов ===
'''INT(v) ''' – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.
'''FLOAT(v) ''' – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).
'''STR(v) ''' – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.
'''Date(v) ''' – возвращает дату, либо пустую строку, если не удается конвертировать v в дату
'''Time(v) ''' – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.
=== Математические функции ===
'''ROUNDUP(f) ''' – округляет число f до ближайшего большего по модулю целого числа.
'''ROUNDDN(f) ''' – округляет число f до ближайшего меньшего по модулю целого числа.
'''Money(f, CouldBeEmpty, ZeroFill, MakeSpace) ''' - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.''Подсказка: для простого округления используется функция int()''
''Подсказка: для простого округления используется функция int'Abs(f)''' - возвращает модуль числа f. '''Mod(x, y)''' - возвращает остаток от деления целочисленного числа x на целочисленное число y.
=== Константы ===
'''Null ''' – Возвращает пустое значение. Да, True, Нет, False – константы, соответствующие булевым значениям.
'''Да''', '''True''', '''Нет''', '''False''' – константы, соответствующие булевым значениям.
=== Прочие функции ===
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.
SaveToFile(FileName,s, encoding = ''[, append])- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Если append = true, то производится дописывание данных в файл, а не перезаписывание (не обязательный, по умолчанию выключен).
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.
LastHttpError - Выводит последнюю ошибку в выполнении Http-запроса последний запрос выполненный с ошибкой в функции HttpPost. Содержит подробную информацию по запросу и ответу.
LastHttpResponse - Выводит последний запрос и ответ от сервера после выполнения Http-запроса в функции HttpPost.
== Объект TExcel ==
'''''Ввод данных'''''
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Если TranslateHeader истинно, то заголовки таблицы будут автоматически переведены.
MyDB.Open('select * from kurier');
xl.SetVisible(true);
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.
OpenFile(aFileName) – Выполняет функции SetFileName и Open.
RecordCount – Возвращает количество строк в листе.
RowAutoFit ([y1, y2]) - Устанавливает автоматическую высоту строк. Аргументы y1 и y2 необязательны и если не указаны, то процедура будет выполнена для всей страницы, в ином случае только для строк от y1 до y2.
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.
GetRowHeight(r) – Возвращает высоту строки r в пикселях.
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.
SetColWidth (c, w) – Устанавливает ширину столбца c в w символовпикселей. GetColWidth (c) – Возвращает ширину столбца c в пикселях.
SetFont(Font[, x1, y1[, x2, y2]]) - Устанавливает шрифт Font для ячеек диапазона. Можно указать координаты только одной ячейки, можно - вообще не указать, тогда будет использован последний выделенный диапазон. Шрифт задается как обычно: 'Arial, 16, T, T, T', порядок параметров: Имя шрифта, размер, жирное начертание, курсивное начертание, одиночное подчеркивание. Если параметры не заданы, то у текущего шрифта они меняться не будут. Примеры: SetFont('Arial, 10, T, F, F', 1,1) - в ячейке A1 будет установлен шрифт Arial жирным начертанием (не курсив и без подчеркивания). SetFont(', , , T, F', 2,1) - в ячейке B1 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было).
SaveValuesOnly - убирает формулы на текущей странице и оставляет лишь их результативные статичные значения.
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.
Для кода DataMatrix можно установить режим для печати скрытых символов с кодами 29(GS) и 232(FCN1), которые требуются для формирования Честного Знака. Для этого необходимо в начале строки указать символ "[" и все разделители 01, 21, 91, 92 так же экранировать этими скобками. Должно получиться [01]02900002317701[21]k3LInNbH_oG0Q[91]EE06[92]YXiyKfiHjE4YE8b+YVMC1O5r8VtpplA3AwcCqrcG9Dk= . При формировании кода, включится режим формирования штрих-кода DataMatrix GS1, в начале будет добавлен символ с кодом 232 (FCN1), а потом будут добавлены разделители с кодом 29 (GS)
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.
== Объект TBaseUtils ==
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008»«MEASOFT». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.
Функции:
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.
'''GetRouteCode(AddressText, TownCode, LatLon[, Lon])''' - для адреса AddressText в городе с кодом TownCode (из таблицы Town) по географическим координатам lat, lon возвращает код роута (записи, хранящей координаты адреса в городе). Если роут не найден (для адреса в городе не найдено записи с указанными координатами) - создает новый роут и возвращает его код, если роут найден (был создан ранее) - обновляет у роута координаты. Если параметр Lon задан, то параметр LatLon должен содержать одну координату, иначе LatLon должен содержать строку вида 'lat, lon'.
В случае ошибки возвращает Null.
Пример:<br>
Set($res, GetRouteCode(address, townto, '55.114034, 36.592397'));<br>
Set($res, GetRouteCode('Троицк, Полковника милиции Курочкина ул., 11', 1, '37.467446, 55.740537'));<br>
Set($res, GetRouteCode('Обнинск, Маркса пр., 20', TownByName('Обнинск'), 55.114034, 36.592397));
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.
'''CalcClientCnt(client_code, date, is_intown [, date_put=CurrDate(), skipajust=false])''' - функция расчета количество доставленных корреспонденций у клиента с кодом client_code за предыдущий месяц от даты date (Или за текущий месяц, подробнее смотри переменную UseCurrentMonthCount) среди внутригородских (is_intown = true) либо междугородних (is_intown = false) корреспонденций, date_put - дата доставки (для альтернативного способа подсчета, включаемого переменной UseDatePutForCalcCnt), skipajust - не учитывать принудительно введенные количества (таблица priceclientadjust типы записей 0 и 1).
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки.
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".
'''CalcTownPrice''' - возвращает базовую стоимость междугородней доставки, посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов, типа, срочности, массы, расстояния.
Описание параметров:
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset.self".
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)
*tp - тип корреспонденции;
*mode - режим доставки;
*mass - масса отправления;
*TownFrom - код города отправителя;
*TownTo - код города получателя.
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).
'''FromEmailStr''' - строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки. '''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber,Print,[printer]) - Выполняет указанную печатную форму в объекте excel. Excel объект можно не указывать, тогда функция сама создаст объект экселя и разрушит его, полезно когда книгу нужно распечатать или отправить по email (на листе данных в ячейке 1,1 укажите ключевое слово email). Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Print - печатает книгу на принтере, после печати объект excel разрушается, при использовании параметра не указываете объект excel. Printer - имя принтера, на котором печатать (по умолчанию пустая строка, что означает "печатать на принтере по умолчанию"). Например:
new('TExcel', 'excel');
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.
'''CalcStorageCost(ClientCodes, DateFrom, DateTo, NeedReport[, Store])''' – рассчитывает стоимость хранения на складе для выбранных клиентов (ClientCodes - коды клиентов через запятую), в период дат с DateFrom до DateTo, с прикреплением к корреспонденции отчета в зависимости от выставленного параметра NeedReport. Может содержать параметр Store - код филиала, по умолчанию пустой (расчет выполняется для всех филиалов). Возвращает коды созданных корреспонденций через запятую.
'''WriteOut(DocId, ItemId, Date, Cnt[, BC])''' – производит списание товара со склада. DocId - код (docs.code) документа списания, ItemId - код товара (item.code), Date - дата операции, Cnt - количество списываемого товара, BC- штрих-код товара, для товара с учетом серийных номеров нужно обязательно указывать серийный номер. Если указан BC, то параметр ItemId игнорируется и поиск номенклатуры происходит исключительно по штрих-коду. В случае успеха, функция возвращает строку вида: код номенклатуры, списанное кол-во.
'''IncomePurch(DocId, ItemId, Date, Cnt[, BC, Location = CurrentLocation])''' – производит приход товара на склад. DocId - код (docs.code) приходной накладной, ItemId - код товара (item.code), Date - дата операции, Cnt - количество приходуемого товара, BC- штрих-код товара, для товара с учетом серийных номеров нужно обязательно указывать серийный номер, Location - код склада (store.code). В случае успеха, функция возвращает строку вида: код номенклатуры, введенное кол-во.
'''CreateLedgerDoc(Date, Client, UserCode, Type[, ExtNumber, Message])''' - создает складской документ и возвращает код этого документа. Date - дата документа. Client - код клиента. UserCode - код пользователя, создавшего документ. Type - тип документа (statetype = 13). ExtNumber - номер у поставщика для документов прихода и расхода. Message - комментарий к документу. Последние два аргумента не обязательные и могут быть пустыми.
== Объект TINIFile ==
==Объект TBase==
'''Функции общего назначения''': '''ExecSimpleScript(Caption, Text)''' - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне. '''FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll])''' - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов. '''PrintSticker(Codes, [ToBoxes=False])'''
'''ShowText(Caption:string, Value:string)''' - показывает пользователю окно с заголовком Caption и с многострочным полем со значением Value. Может быть полезен при отображении логов выполненной операции.
'''ShowScanError(msg [, Speek, Color, Abort])''' - выдает пользователю окно с текстом msg блокируя последующие действия сканирования. Если Speek - истинно, то сообщение проговаривается голосовым движком, по умолчанию выключено. Color - целочисленное число цвета, в который будет окрашен фон сообщения (по умолчанию = -1, стандартный). Abort - прервать выполнение скрипта, не показывая ошибку.
'''CheckRule(alias)''' - функция проверки разрешения у текущего пользователя системы, alias - псевдоним права. Возвращает 1, если право есть и 0, если права нет.
Пример: if(CheckRule('RSE'), ShowMessage('У пользователя есть право изменять счета'), ShowMessage('У пользователя нет права изменять счета'));
'''GetKurierMoney(KurierCode, DateEnd, NonCash)''' - возвращает баланс курьера с кодом KurierCode на дату DateEnd. NonCash - булевый флаг, если истинно, то будет рассчитан безнальный баланс;
'''Функции, работающие только в импорте БД из эксель:'''
Source - код заказчика
== Объект TMessage ==
Создается только автоматически. Объект используется для скриптовой обработки письма в [https://wiki.courierexe.ru/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8#.D0.98.D0.BC.D0.BF.D0.BE.D1.80.D1.82_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85| заданиях импорта данных]. В себе содержит текст письма в очищенном формате и оригинальном формате HTML, отправитель письма, тему письма, дата получения и список прикрепленных файлов.
'''Message.Text''' - возвращает очищенный от HTML-тегов текст письма.
'''Message.GetAttachmentName(Number)''' - возвращает имя вложенного файла под номером Number.
== Объект TStringList ==
Может использоваться для построчной обработки многостраничных файлов либо для организации текстовых данных. Номер строк начинается с 0.
Имеет следующий функционал:
'''Count''' - возвращает количество строк в списке.
'''Add(Value:string)''' - добавляет значение Value в конец списка.
'''SetText(Value:string)''' - устанавливает значение списка в значение Value.
'''Insert(Number:integer, Value:string)''' - добавляет строку Value в позицию Number.
'''Delete(Number:integer)''' - удаляет строку из списка в позиции Number.
'''Clear''' - очищает элементы списка.
'''LoadFromFile(Path:string)''' - загружает текстовый файл по пути Path.
'''Strings(Number:integer)''' - возвращает строку с номером Number.
'''SetString(Number:integer, Value:string)''' - устанавливает значение строки с номером Number в значение Value.
'''Text''' - возвращает полный список строк в виде текста.
'''CommaText([Quoted:boolean])''' - возвращает список значений через запятую. Если Quoted = true, то квотирует элементы списка. По умолчанию равен false.
'''SetCommaText(Value: string)''' - разбивает значение Value на отдельные строки и кладет в список. Разделитель - запятые.
'''IndexOf(Value:string)''' - ищет значение Value среди элементов списка и если находит, то возвращает номер строки. Возвращает -1 если значение не было найдено.
'''Sorted(Value:boolean)''' - устанавливает флаг отсортированности списка в Value. Если Value = true, то сразу же его сортирует. По умолчанию Value = false.
'''Exchange(Pos1:integer, Pos2:integer)''' - меняет элементы списка с позициями Pos1 и Pos2 местами.
'''Duplicates(Value:integer)''' - изменяет параметр управления дубликатами в списке. Если Value = 0 (значение по умолчанию), то список не реагирует на дубликаты. Если Value = 1, то список при добавлении будет игнорировать дубликаты. Если Value = 2, то список будет выдавать исключение, при добавлении дубликата в список.
'''ParamName(Number:integer[, Delimiter:string])''' - возвращает текст до первого знака разделителя Delimiter (по умолчанию "=") из строки с номером Number. Если разделителя в строке нет, то возвращает пустоту.
'''ParamValue(Number:integer[, Delimiter:string])''' - возвращает текст после первого знака разделителя Delimiter (по умолчанию "=") из строки с номером Number. Если разделителя в строке нет, то возвращает всю строку.
== Объект TFunc ==
Объект реализует создание и использование функций в скриптовом языке. Позволяет определять переиспользуемые блоки кода с параметрами.
Важно учитывать, что внтури функции создается свой инстанс интерпретатора и от туда не доступны никакие переменные\объекты кроме переданных в функцию.
Основные методы:
'''New'''(FuncName, Param1, Param2, ..., Body) — создание новой функции.Функция возвращает результат выполнения последней команды в теле функции. Аргументы:
* `FuncName` — имя функции (строка)
* `Param1, Param2, ...` — имена параметров функции (переменные начинаются с `$`, объекты — без префикса)
* `Body` — тело функции (скрипт, выполняемый при вызове)
'''FuncName'''(Arg1, Arg2, ...) — вызов созданной функции по имени. Если в объявлении была указана тип переменная, то и подставлять в аргумент надо обязательно переменную. Будет передано значение этой переменной (переменные словарине поддерживаются!). Если был объявлен объект, то указатель на объект должен быть получен через метод '''_self'''. C функциями поддерживают работу следующие классы: TExcel, TDirectExcel, TCSVFile, TADO, TSelfADO, TPrinter, TCanvas, TPicture, TTable, TINIFile, TSMS, TXML, TJSON, TZip, TStringList, TBaseUtils, а также объект addressrecord (TFieldObject). Результатом работы функции может быть число или строка.
Пример 1, обработка результатов функции:
<source>
<?>
new('TFunc', 'calc');
calc.new('Sum', '$a', '$b',
$a + $b
);
set($x, 10);
set($y, 20);
showmessage(calc.Sum($x, $y));
</source>
Пример 2, передача объекта в функцию:
<source>
<?>
new('TFunc', 'utils');
utils.new('ProcessDB', 'dbConn', '$value',
showmessage($value);
dbConn.open('SELECT * FROM address limit 3 ');
if(dbConn.recordcount > 0,
showmessage('Найдено записей: ' + dbConn.recordcount);
dbConn.first;
while(dbConn.eof = 0,
showmessage(dbConn.fieldbyname('code'));
dbConn.next
)
,0)
);
new('TSelfADO', 'db');
utils.ProcessDB(db._self,'test!');
</source>
== Применение языка формул ==
'''в различных контекстах системы «Курьерская служба 2008» «MEASOFT» и сопутствующих проектах'''
=== Курьерская служба 2008 MEASOFT ===
=== Недавние изменения ===
{|
||'''Добавлено:'''
|2025.0.0.539 Добавлена поддержка отладчика AttachDebugger
|-
||'''Добавлено:'''
|2025.0.0.534 Добавлена поддержка оператора CASE и класса TFunc
|-
|}
=== Версия 2021.0.0.57 от 18.06.2019 ===
{|
||'''Добавлено:'''