Изменения

Перейти к: навигация, поиск

Руководство программиста

24 296 байт добавлено, 16 январь
Объект TBase
== Основные положения ==
В систему «Курьерская служба 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.
'''Pos(s, substr[,start]) ''' – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Параметр start - это позиция старта поиска, не обязательный параметр, по умолчанию равен 1. Поиск не чувствителен к регистру.
'''Param(s, i) ''' – возвращает i-й элемент строки s, разделенной запятыми на элементы.
'''ParamsCount(s) ''' - возвращает количество элементов строки s, разделенной запятыми на элементы.
Left'''SetParam(s, p, i [,full] ) ''' возвращает заменяет на значение p i первых символов -й элемент строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключенразделенной запятыми на элементы.
Mid'''Left(s, i[, jfull] ) - ''' – возвращает подстроку из i первых символов строки s начиная с . Параметр i символа , может быть строкой, тогда он считается разделителем и длиной j символовфункция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.
Right'''Mid(s, i [,full]j) ''' - возвращает i последних символов строки подстроку из s. Параметр начиная с i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, символа и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.длиной j символов
Reverse'''Right(s, i [,full]) - ''' – возвращает строку i последних символов строки s задом-наперед. Полезно например для поиска Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца функций Pos()строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.
Char'''Reverse(is) ''' - возвращает символ строку s задом-наперед. Полезно например для поиска с кодом iконца функций Pos().
Ord'''Char(si) ''' – возвращает код первого символа строки sсимвол с кодом i.
Replace'''Ord(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - ''' – возвращает строку код первого символа строки s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.
RemSpace'''Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) ''' - возвращает сроку строку s без начальных , в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и конечных запятых замены всегда должны быть в паре и пробелових может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, а также начальных точекпо умолчанию включен.
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валютыRemSpace(s)'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены– возвращает сроку s без начальных и конечных запятых и пробелов, используются региональные настройки в переменныха также начальных точек.
NumToStrSimple'''SumStr(f [, captions, language]) ''' – Возвращает сумму f, написанную прописью, по умолчанию '''без с добавлением валюты'''. Параметры идентичны функции SUMSTRНеобязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.
FullNameToShort'''NumToStrSimple(Namef [, captions, language]) ''' – Возвращает фамилию и инициалы сумму f, написанную прописью, по полному ФИО Nameумолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.
MonthName1'''FullNameToShort(mName) ''' – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падежефамилию и инициалы по полному ФИО Name.
MonthName2'''MonthName1(m) ''' – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном именительном падеже.
StrForXML'''MonthName2(sm) - Подготавливает строку к парсингу как xml: Если находит ''' – Возвращает имя месяца с номером m с большой буквы на русском языке в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречаетсяродительном падеже.
FixedIntToStr'''StrForXML(i, len[, char]s) ''' - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - Возвращает целое число i дополненное слева символами char (поперекодирует ее из utf-умолчанию 8 в win- "0") до длины len1251, убирает начальный знак вопроса, если такой встречается.
'''FixedIntToStr(i, len[, char])''' - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len. '''Translate(format, [param1, param2, ...]) ''' - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно.  '''ExtractFileName(FilePath)''' - возвращает имя файла с расширением из полного пути к файлу FilePath.
====Функции перекодировки====
'''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 соответственно.
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.
FormatTextJSON'''SQLFloat(sf) ''' – Приводит число с плавающей точкой к виду, пригодному для SQL- переводит строку в формат JSONзапроса, экранирует служебные символыт.е. к тексту с разделителем дробной части – точка.
'''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 – возвращает текущую дату
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.'''CurrDate''' – возвращает текущую дату
Today '''CurrMillisecond''' - возвращает текущую дату в числовом форматеВозвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.
Day(dt) – '''Today''' - возвращает день месяца даты dtтекущую дату в числовом формате.
Month'''Day(dt) ''' – возвращает месяц года день месяца даты dt.
Year'''Month(dt) ''' – возвращает год месяц года даты dt.
FirstDayOfMonth'''Year(dt) ''' Возвращает первый день месяца в формате DD.MM.YYYY для возвращает год даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( 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 до ближайшего меньшего по модулю целого числа.
ROUNDDN'''Money(f, CouldBeEmpty, ZeroFill, MakeSpace) – округляет ''' - Округляет число f , до ближайшего меньшего по модулю целого числадвух знаков после запятой.CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.''Подсказка: для простого округления используется функция int()''
Money'''Abs(f, CouldBeEmpty, ZeroFill, MakeSpace) ''' - Округляет число возвращает модуль числа f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.
''Подсказка: для простого округления используется функция int'Mod(x, y)''' - возвращает остаток от деления целочисленного числа x на целочисленное число y.
=== Константы ===
'''Null ''' – Возвращает пустое значение. Да, True, Нет, False – константы, соответствующие булевым значениям.
'''Да''', '''True''', '''Нет''', '''False''' – константы, соответствующие булевым значениям.
=== Прочие функции ===
 
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.
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-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:
== Объект TBaseUtils ==
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008»«MEASOFT». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.
Функции:
'''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])''' '''PrintBlanc(Codes, BlancNumber)''' - печатать форму из раздела "Заполнить бланк". Codes - коды корреспонденций, BlancNumber - номер формы из раздела "Бланки для корреспонденции" (3) '''GetItemByName(Name)''' '''GetA4Printer([GetPrinterPort=False])''' - возвращает имя принтера выбранного для печати документов. GetPrinterPort - попытаться по имени принтера найти порт принтера.  '''GetStickerPrinter([GetPrinterPort=False])''' - возвращает имя принтера выбранного для печати стикеров. GetPrinterPort - попытаться по имени принтера найти порт принтера.
execsimplescript'''GetDuplexPrinter(Caption, Text[GetPrinterPort=False]) ''' - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значениявозвращает имя принтера выбранного для двусторонней печати, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarNесли принтер не выбран, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окнепустую строку.
FillAdvPriceReport'''PrintAttachPDFPage(ExcelCode, AddressCodesFileName, StartLinePage, StartCol, [ShowSumPrice,InsertColumns,ShowAll]Printer) ''' - добавляет отчёт по дополнительным услугампечатает страницу из вложенного файла PDF. В AddressCodes Code - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услугвложения (attachment) или путь к файлу, по умолчанию выключено. InsertColumns Page - раздвинуть таблицу перед вставкой отчетаномер страницы, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll Printer - показать все дополнительные услуги0 = принтер A4, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов1 = принтер этикеток.
PrintSticker'''AttachPDFToText(CodesCode, [ToBoxes=FalseTextFileName])''' - преобразует файл PDF из вложений в текст. Code - код вложения (attachment) или путь к файлу, TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.
GetItemByName'''GhostScript(NameGScript, Code)''' — функция для выполнения консольных команд утилиты [https://ghostscript.readthedocs.io/en/latest/Use.html ghostscript]. Где, GScript — строка с командами Ghostscript; Code — код вложения или путь к PDF-файлу, предназначенному для обработки. В командах доступен специальный тег %MeasoftInFile%, который автоматически заменяется на путь к предварительно загруженному файлу (Code). Если в команде необходимо указать путь для сохранения результата обработки, используйте тег %MeasoftOutFile%. В этом случае функция на основании параметра Code автоматически сформирует имя временного выходного файла. После успешного выполнения команд функция возвращает путь к сгенерированному выходному файлу - %MeasoftOutFile%.
GetA4Printer '''GetActiveForm([SkipFormName])''' - возвращает код активной формы в программе где происходит сканирование. SkipFormName - не обязательны параметр, имя принтера выбранного для печати документовформы которую нужно пропустить при определении интерфейса. '''Список интерфейсов''': 0 - неопределенный; 1 - прием корреспонденции на склад; 2 - АПД; 3 - комплектация адресов (ShelfingForm); 4 - доска приема; 9 - вкладка «Манифесты»; 10 - Инвентаризация корреспонденции; 11 - АПК; 12 - вкладка «Адреса»; 13 - вкладка «Выдача»; 14 - вкладка «Склад»; 15 - Список номенклатуры; 16 - Инвентаризация склада; 17 - Приходная накладная; 18 - Списание товара; 19 - Карточка корреспонденции.
GetStickerPrinter '''AddAddressScanLog(Code[, StrBarCode, IsManual, FromInterface, ExtraInfo])''' - возвращает имя принтера выбранного добавляет событие сканирование для печати стикеровкорреспонденции с кодом Code. Необязательные параметры: StrBarCode - сканируемый ШК корреспонденции (по умолчанию пустой), IsManual - галка ручного сканирования (по умолчанию false), FromInterface - код интерфейса сканирования (StateType=81, по умолчанию 0 - неопределенный), ExtraInfo - текстовый комментарий события.
GetDuplexPrinter '''RuleName(alias)''' - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращиет пустую строкуВыдает полный путь в дерева прав по псевдониму права.
PrintAttachPDFPage'''ShowText(CodeCaption:string, FileName, Page, PrinterValue:string) ''' - печатает страницу из вложенного файла PDFпоказывает пользователю окно с заголовком Caption и с многострочным полем со значением Value. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикетокМожет быть полезен при отображении логов выполненной операции.
AttachPDFToText'''ShowScanError(Codemsg [, Speek, Color, [TextFileNameAbort]) ''' - преобразует файл PDF из вложений в текствыдает пользователю окно с текстом msg блокируя последующие действия сканирования. Code Если Speek - код вложения (attachment)истинно, то сообщение проговаривается голосовым движком, TextFileName по умолчанию выключено. Color - имя текстового файлацелочисленное число цвета, в который записывается результат будет окрашен фон сообщения (если не указанпо умолчанию = -1, используется временный файлстандартный). Возвращает текст в виде строкиAbort - прервать выполнение скрипта, не показывая ошибку.
GetActiveForm '''CheckRule(alias)''' - возвращает код активной формы в программефункция проверки разрешения у текущего пользователя системы, где происходит сканирование: 0 alias - неопределенный; псевдоним права. Возвращает 1 - прием корреспонденции на склад; 2 - АПД; 3 - комплектация адресов , если право есть и 0, если права нет. Пример: if(CheckRule('RSE'), ShowMessage('У пользователя есть право изменять счета'), ShowMessage(ShelfingForm'У пользователя нет права изменять счета')); 4- доска приема
'''GetKurierMoney(KurierCode, DateEnd, NonCash)''' - возвращает баланс курьера с кодом KurierCode на дату DateEnd. NonCash - булевый флаг, если истинно, то будет рассчитан безнальный баланс;
'''Функции, работающие только в импорте БД из эксель:'''
Source - код заказчика
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel". == Объект TFieldObject ==Создается только автоматически. Объект для доступа к записям, используется в картах и дополнительных услугах (addressrecord) и событиях карточки корреспонденции (fieldlist). Методы объекта: '''_GetTableInfo''' - возвращает данные о полях и примеры данных объекта.
'''RuleName(alias)_Self''' - Выдает полный путь в дерева прав по псевдониму прававозвращает ссылку на объект.
'''CheckRule_Set(aliasfieldname, fieldvalue [, DoUpdateForm])''' - функция проверки разрешения у текущего пользователя системы, alias - псевдоним праваЕсли базовый объект строка. Устаналивает для поля fieldname значение fieldvalue. Возвращает 1DoUpdateForm по уолчанию false, если право есть указать true то обновление поля будет не только в объекте но и 0, если права нетпользовательском интерфейсе. ПримерОбновление работает только в карточке корреспнденции для ограниченного набора полей: if(CheckRule('RSE')vlog, mode, type, date_put, time_put, message, ShowMessage('У пользователя есть право изменять счета')kurier, ShowMessage('У пользователя нет права изменять счета'));state1.
== Объект TFieldObject ==Объект для доступа к записям'''_Set(keyfield, используется в картах и допkeyvalue, filed, value)''' - Если базовый объект таблица (addressrecord.boxes). Работает перегруженная версия метода _set, cначала происходит поиск строки по ключу, далее меняется значение указанного столбца.услугахkeyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Пример, отключение услуги база:
_GETTABLEINFO addressrecord.advprice._Set('priceconf', 1, 'active', 'F') priceconf - возвращает данные о полях и примеры данных объектаполе где записан код услуги; 1 - услуга База; active - поле показывающее включение услуги.
== Объект 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 ===
=== Недавние изменения ===
{|
||'''Изменено:'''
|2026.0.0.550 Доработка функций интерпретатора GetA4Printer, GetStickerPrinter, GetDuplexPrinter.
|-
||'''Изменено:'''
|2026.0.0.547 Доработка функций ATTACHPDFTOTEXT и PRINTATTACHPDFPAGE, добавлена возможность указать путь к файлу
|-
||'''Добавлено:'''
|2025.0.0.539 Добавлена поддержка отладчика AttachDebugger
|-
||'''Добавлено:'''
|2025.0.0.534 Добавлена поддержка оператора CASE и класса TFunc
|-
|}
=== Версия 2021.0.0.57 от 18.06.2019 ===
{|
||'''Добавлено:'''
549
правок

Навигация