https://wiki.courierexe.ru/api.php?action=feedcontributions&user=Sammy&feedformat=atomМеасофт - Вклад участника [ru]2024-03-28T22:03:36ZВклад участникаMediaWiki 1.30.0https://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14958Руководство программиста2024-03-21T09:48:32Z<p>Sammy: /* Объект TBaseUtils */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr [,start]) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Параметр start - это позиция старта поиска, не обязательный параметр, по умолчанию равен 1. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
SetParam(s, p, i) – заменяет на значение p i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding [, append])- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Если append = true, то производится дописывание данных в файл, а не перезаписывание (не обязательный, по умолчанию выключен).<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - Дополнительные заголовки HTTP запроса, передается в виде списка параметров через запятую и всегда образуют пару: 1 параметр - название заголовка, 2 параметр - значение. Если значение содержит запятую то его нужно экранировать в двойные кавычки. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в миллисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
LastHttpError - Выводит последний запрос выполненный с ошибкой в функции HttpPost. Содержит подробную информацию по запросу и ответу.<br />
<br />
LastHttpResponse - Выводит последний запрос и ответ от сервера после выполнения Http-запроса в функции HttpPost.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Если TranslateHeader истинно, то заголовки таблицы будут автоматически переведены.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{| class="wikitable"<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|-<br />
|OnGetText<br />
|Функция подменяет текстовый вывод значения поля при выгрузке в эксель. Первый параметр это имя поля, которое надо подменить. Второй параметр это то что необходимо вывести. Работает только с текстовыми полями. <br />
'''''Пример использования''''' <br />
DB.OnGetText('Зона', IF((DB.FieldByName('-Lat') ! 0) * (DB.FieldByName('-Lon') ! 0),<br />
GetPolygonByLatLon(DB.FieldByName('-Lat'), DB.FieldByName('-Lon'), 'TYPE = 1 AND IFNULL(zone, 0) > 0 AND PRICE = ' + DB.FieldByName('-price'), 'zone')<br />
,<br />
''<br />
));<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Для кода 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)<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator][,Correction])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1.<br />
Поле Correction позволяет указать данные для корректировочного чека, используется в системе Штрих-М. По умолчанию пустая строка. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''GetRouteCode(AddressText, TownCode, LatLon[, Lon])''' - для адреса AddressText в городе с кодом TownCode (из таблицы Town) по географическим координатам lat, lon возвращает код роута (записи, хранящей координаты адреса в городе). Если роут не найден (для адреса в городе не найдено записи с указанными координатами) - создает новый роут и возвращает его код, если роут найден (был создан ранее) - обновляет у роута координаты. Если параметр Lon задан, то параметр LatLon должен содержать одну координату, иначе LatLon должен содержать строку вида 'lat, lon'.<br />
В случае ошибки возвращает Null.<br />
<br />
Пример:<br><br />
Set($res, GetRouteCode(address, townto, '55.114034, 36.592397'));<br><br />
Set($res, GetRouteCode('Троицк, Полковника милиции Курочкина ул., 11', 1, '37.467446, 55.740537'));<br><br />
Set($res, GetRouteCode('Обнинск, Маркса пр., 20', TownByName('Обнинск'), 55.114034, 36.592397));<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''CalcClientCnt(client_code, date, is_intown)''' - функция расчета количество доставленных корреспонденций у клиента с кодом client_code за предыдущий месяц от даты date (Или за текущий месяц, подробнее смотри переменную UseCurrentMonthCount) среди внутригородских (is_intown = true) либо междугородних (is_intown = false) корреспонденций.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
'''Функции общего назначения''':<br />
<br />
'''ExecSimpleScript(Caption, Text)''' - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
'''FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll])''' - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов.<br />
<br />
'''PrintSticker(Codes, [ToBoxes=False])'''<br />
<br />
'''GetItemByName(Name)'''<br />
<br />
'''GetA4Printer''' - возвращает имя принтера выбранного для печати документов<br />
<br />
'''GetStickerPrinter''' - возвращает имя принтера выбранного для печати стикеров<br />
<br />
'''GetDuplexPrinter''' - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращает пустую строку<br />
<br />
'''PrintAttachPDFPage(Code, FileName, Page, Printer)''' - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
'''AttachPDFToText(Code, [TextFileName])''' - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
'''GetActiveForm''' - возвращает код активной формы в программе, где происходит сканирование.<br />
'''Список интерфейсов''': <br />
0 - неопределенный; <br />
1 - прием корреспонденции на склад; <br />
2 - АПД; <br />
3 - комплектация адресов (ShelfingForm); <br />
4 - доска приема; <br />
9 - вкладка «Манифесты»; <br />
10 - Инвентаризация корреспонденции; <br />
11 - АПК; <br />
12 - вкладка «Адреса»; <br />
13 - вкладка «Выдача»; <br />
14 - вкладка «Склад».<br />
<br />
'''RuleName(alias)''' - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
'''CheckRule(alias)''' - функция проверки разрешения у текущего пользователя системы, alias - псевдоним права. Возвращает 1, если право есть и 0, если права нет. <br />
Пример: if(CheckRule('RSE'), ShowMessage('У пользователя есть право изменять счета'), ShowMessage('У пользователя нет права изменять счета'));<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
ClientTown - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
== Объект TMessage ==<br />
Объект используется для скриптовой обработки письма в [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, отправитель письма, тему письма, дата получения и список прикрепленных файлов.<br />
<br />
'''Message.Text''' - возвращает очищенный от HTML-тегов текст письма.<br />
<br />
'''Message.HTMLText''' - возвращает оригинальный текст письма со всеми HTML-тегами.<br />
<br />
'''Message.Sender''' - возвращает email-адрес отправителя письма.<br />
<br />
'''Message.AttachmentsCount''' - возвращает количество вложенных файлов.<br />
<br />
'''Message.DateTime''' - возвращает дату и время получения письма.<br />
<br />
'''Message.Subject''' - возвращает тему письма.<br />
<br />
'''Message.GetAttachmentDataString(Number)''' - возвращает вложенный файл под номером Number в виде строки.<br />
<br />
'''Message.GetAttachmentName(Number)''' - возвращает имя вложенного файла под номером Number.<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14944Дополнительные возможности2024-02-29T16:34:12Z<p>Sammy: /* Настройка всплывающих окон */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
'''PrintItemSticker''' - Вызывается перед печатью наклейки из карточки номенклатуры, для возможности распечатать уникальную наклейку для номенклатуры по заложенным в допвозможности условиям. Содержит %clientbar% - ШК наклейки. Если наклейка распечатана из допвозможности возвращает true, в противном случае false и будет распечатана стандартная наклейка, заложенная в системе<br />
<br />
== Настройка всплывающих окон==<br />
<br />
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). . Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnBeforeBaseSave''' - Вызывается перед сохранением изменений в карточке срочного заказа. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог таблицы base). Теги %date_put%, %time_put%, %message% - содержат дату вручения, время вручения и инфо о доставке соответственно. Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском<br />
<br />
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
'''OnAfterPlanning'''- событие после планирования планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) фактически запланированных корреспонденций. <br />
<br />
'''DAILY''' - задание выполняемое один раз в день<br />
<br />
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
'''OnAfterClientSave''' - событие срабатывает после сохранения изменений в карточке клиента. Код выполняется в транзакции. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит сохранённую информацию о карточке клиента, а так же все её пользовательские поля с предыдущими значениями, которые можно получить через функцию _Former('VarCode', значение, 'VarValue')<br />
<br />
'''OnBeforeBasePutCheck''' - событие срабатывает при проставлении галки на вкладке срочных заказов. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В параметре <nowiki>%code%</nowiki> указан код срочного заказа, а в параметре <nowiki>%BasePutCheckType%</nowiki> указан тип проставления: 0 - если галка, 1 - если плюс. Если результат функции -1, то отмена выполняемой функции (abort).<br />
<br />
'''OnAfterCreateSpecialSMA''' - событие срабатывает после создания нового АПД для клиента. Код выполняется вне транзакции, потому есть возможность показывать диалоговые окна. В качестве единственного параметра %code% передается код созданного АПД.<br />
<br />
== Настройка документов ==<br />
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
'''GetTypeShippingPlace''' - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
'''OnSchetChanged''' - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
'''ExceptionsForAPK''' - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется)<br />
<br />
'''CustomZPDetail''' - кастомное дополнение к детализации зарплаты (Специальная надбавка). Вызывается из скриптовой детализации зарплаты. Предназначено для расчета и вывода в детализацию значения какой-либо специальной надбавки, определенной пользователем. Входящие параметры: %code% - код платежа в таблице kurier_pays, %kurier% - код курьера. Возвращает строку, где через запятую указаны Название надбавки и ее значение. Если эта строка не содержит двух параметров - ничего не выводится.<br />
.<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник (острым концом вниз), 2 - треугольник, 3 - увеличенный перевернутый треугольник (острым концом вниз), чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный перевернутый треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
'''OnEveryStartApp''' - выполняется при запуске программы.<br />
<br />
'''OnEveryCloseApp''' - выполняет при закрытии программы.<br />
<br />
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source><br />
<br />
'''OnAfterPreassemblyScan''' - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.<br />
<br />
'''OnGeocodeScript''' - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:<br />
*$address - адрес для геокодирования;<br />
*$town - код города;<br />
*$street и $home - упрощенный адрес;<br />
<br />
Скрипт должен вернуть следующие переменные : <br />
*$lon и $lat - координаты ;<br />
*$goodaddress - нормализованный адрес (не обязательно);<br />
<br />
<source lang="sql"><br />
<?> <br />
set($response, HTTPPOST('http://XXXXXXXX',<br />
'{"query":'+ FormatTextJSON($address)+ '}', <br />
'','','','',<br />
'post', 'application/json', 10000));<br />
<br />
if($response!'',<br />
new('TJSON', 'json');<br />
set($e, try(<br />
json.SetText($response);<br />
json.OpenChild('geo_data');<br />
json.OpenChild('mid');<br />
set($lat, sqlfloat(json.ChildNodeValue('lat')));<br />
set($lon, sqlfloat(json.ChildNodeValue('lon')));<br />
));<br />
if($e, error('Ошибка в разборе ответа: '+$e), '');<br />
, error('Пришел пустой ответ от геокодера')<br />
);<br />
</source><br />
<br />
'''OnFilterAddressRecalc''' - Позволяет отфильтровать коды адресов, для которых можно пересчитать стоимость. Событие происходит перед расчетом стоимости доставки из интерфейса программы для: актов, счетов, заказов, и т.д. Не работает для пересчета запускаемого из самой карточки корреспонденции. <br />
%codes% - коды адресов для пересчета стоимости доставки. Формат: (1,2,3,...). %RecalcUserCode% - код пользователя запустившего пересчет (актуально для отложенных пересчетов). <br />
Функция должна вернуть коды адресов, допущенных к пересчету в формате: (1,2,3,...)<br />
<br />
<source lang="sql"><br />
<?><br />
rem('2023-12-04 Sergey. Отключаем перерасчет стоимости доставки у корреспонденций в статусе - проверено,<br />
если у пользователя нет права Счета-изменять. Тикет 79954.<br />
Блокировка работает в связке с тикетом 77995.');<br />
new('TSelfADO', 'DB');<br />
DB.OPEN('SELECT a.code FROM courier.address a<br />
LEFT JOIN courier.users u ON u.code=%RecalcUserCode%<br />
LEFT JOIN courier.`userrules` ur ON ur.`GroupId`=u.grup AND ur.`RuleType`=1 AND ur.newruleid =78 -- RSA<br />
WHERE ((a.state1<>8) OR (a.state1=8 AND ur.state="T")) AND a.code in %code%');<br />
DB.ParseForIn('CODE')<br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14915Руководство программиста2024-02-05T19:21:16Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr [,start]) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Параметр start - это позиция старта поиска, не обязательный параметр, по умолчанию равен 1. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
SetParam(s, p, i) – заменяет на значение p i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding [, append])- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Если append = true, то производится дописывание данных в файл, а не перезаписывание (не обязательный, по умолчанию выключен).<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - Дополнительные заголовки HTTP запроса, передается в виде списка параметров через запятую и всегда образуют пару: 1 параметр - название заголовка, 2 параметр - значение. Если значение содержит запятую то его нужно экранировать в двойные кавычки. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в миллисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
LastHttpError - Выводит последний запрос выполненный с ошибкой в функции HttpPost. Содержит подробную информацию по запросу и ответу.<br />
<br />
LastHttpResponse - Выводит последний запрос и ответ от сервера после выполнения Http-запроса в функции HttpPost.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Если TranslateHeader истинно, то заголовки таблицы будут автоматически переведены.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{| class="wikitable"<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|-<br />
|OnGetText<br />
|Функция подменяет текстовый вывод значения поля при выгрузке в эксель. Первый параметр это имя поля, которое надо подменить. Второй параметр это то что необходимо вывести. Работает только с текстовыми полями. <br />
'''''Пример использования''''' <br />
DB.OnGetText('Зона', IF((DB.FieldByName('-Lat') ! 0) * (DB.FieldByName('-Lon') ! 0),<br />
GetPolygonByLatLon(DB.FieldByName('-Lat'), DB.FieldByName('-Lon'), 'TYPE = 1 AND IFNULL(zone, 0) > 0 AND PRICE = ' + DB.FieldByName('-price'), 'zone')<br />
,<br />
''<br />
));<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Для кода 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)<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator][,Correction])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1.<br />
Поле Correction позволяет указать данные для корректировочного чека, используется в системе Штрих-М. По умолчанию пустая строка. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''GetRouteCode(AddressText, TownCode, LatLon[, Lon])''' - для адреса AddressText в городе с кодом TownCode (из таблицы Town) по географическим координатам lat, lon возвращает код роута (записи, хранящей координаты адреса в городе). Если роут не найден (для адреса в городе не найдено записи с указанными координатами) - создает новый роут и возвращает его код, если роут найден (был создан ранее) - обновляет у роута координаты. Если параметр Lon задан, то параметр LatLon должен содержать одну координату, иначе LatLon должен содержать строку вида 'lat, lon'.<br />
В случае ошибки возвращает Null.<br />
<br />
Пример:<br><br />
Set($res, GetRouteCode(address, townto, '55.114034, 36.592397'));<br><br />
Set($res, GetRouteCode('Троицк, Полковника милиции Курочкина ул., 11', 1, '37.467446, 55.740537'));<br><br />
Set($res, GetRouteCode('Обнинск, Маркса пр., 20', TownByName('Обнинск'), 55.114034, 36.592397));<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''CalcClientCnt(client_code, date, is_intown)''' - функция расчета количество доставленных корреспонденций у клиента с кодом client_code за предыдущий месяц от даты date среди внутригородских (is_intown = true) либо междугородних (is_intown = false) корреспонденций.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
'''Функции общего назначения''':<br />
<br />
'''ExecSimpleScript(Caption, Text)''' - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
'''FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll])''' - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов.<br />
<br />
'''PrintSticker(Codes, [ToBoxes=False])'''<br />
<br />
'''GetItemByName(Name)'''<br />
<br />
'''GetA4Printer''' - возвращает имя принтера выбранного для печати документов<br />
<br />
'''GetStickerPrinter''' - возвращает имя принтера выбранного для печати стикеров<br />
<br />
'''GetDuplexPrinter''' - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращает пустую строку<br />
<br />
'''PrintAttachPDFPage(Code, FileName, Page, Printer)''' - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
'''AttachPDFToText(Code, [TextFileName])''' - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
'''GetActiveForm''' - возвращает код активной формы в программе, где происходит сканирование.<br />
'''Список интерфейсов''': <br />
0 - неопределенный; <br />
1 - прием корреспонденции на склад; <br />
2 - АПД; <br />
3 - комплектация адресов (ShelfingForm); <br />
4 - доска приема; <br />
9 - вкладка «Манифесты»; <br />
10 - Инвентаризация корреспонденции; <br />
11 - АПК; <br />
12 - вкладка «Адреса»; <br />
13 - вкладка «Выдача»; <br />
14 - вкладка «Склад».<br />
<br />
'''RuleName(alias)''' - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
'''CheckRule(alias)''' - функция проверки разрешения у текущего пользователя системы, alias - псевдоним права. Возвращает 1, если право есть и 0, если права нет. <br />
Пример: if(CheckRule('RSE'), ShowMessage('У пользователя есть право изменять счета'), ShowMessage('У пользователя нет права изменять счета'));<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
ClientTown - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
== Объект TMessage ==<br />
Объект используется для скриптовой обработки письма в [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, отправитель письма, тему письма, дата получения и список прикрепленных файлов.<br />
<br />
'''Message.Text''' - возвращает очищенный от HTML-тегов текст письма.<br />
<br />
'''Message.HTMLText''' - возвращает оригинальный текст письма со всеми HTML-тегами.<br />
<br />
'''Message.Sender''' - возвращает email-адрес отправителя письма.<br />
<br />
'''Message.AttachmentsCount''' - возвращает количество вложенных файлов.<br />
<br />
'''Message.DateTime''' - возвращает дату и время получения письма.<br />
<br />
'''Message.Subject''' - возвращает тему письма.<br />
<br />
'''Message.GetAttachmentDataString(Number)''' - возвращает вложенный файл под номером Number в виде строки.<br />
<br />
'''Message.GetAttachmentName(Number)''' - возвращает имя вложенного файла под номером Number.<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14914Руководство программиста2024-02-05T19:17:40Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr [,start]) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Параметр start - это позиция старта поиска, не обязательный параметр, по умолчанию равен 1. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
SetParam(s, p, i) – заменяет на значение p i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding [, append])- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Если append = true, то производится дописывание данных в файл, а не перезаписывание (не обязательный, по умолчанию выключен).<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - Дополнительные заголовки HTTP запроса, передается в виде списка параметров через запятую и всегда образуют пару: 1 параметр - название заголовка, 2 параметр - значение. Если значение содержит запятую то его нужно экранировать в двойные кавычки. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в миллисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
LastHttpError - Выводит последний запрос и ошибку в выполнении Http-запроса в функции HttpPost.<br />
<br />
LastHttpResponse - Выводит последний запрос и ответ от сервера после выполнения Http-запроса в функции HttpPost.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Если TranslateHeader истинно, то заголовки таблицы будут автоматически переведены.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1][, TranslateHeader=False]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{| class="wikitable"<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|-<br />
|OnGetText<br />
|Функция подменяет текстовый вывод значения поля при выгрузке в эксель. Первый параметр это имя поля, которое надо подменить. Второй параметр это то что необходимо вывести. Работает только с текстовыми полями. <br />
'''''Пример использования''''' <br />
DB.OnGetText('Зона', IF((DB.FieldByName('-Lat') ! 0) * (DB.FieldByName('-Lon') ! 0),<br />
GetPolygonByLatLon(DB.FieldByName('-Lat'), DB.FieldByName('-Lon'), 'TYPE = 1 AND IFNULL(zone, 0) > 0 AND PRICE = ' + DB.FieldByName('-price'), 'zone')<br />
,<br />
''<br />
));<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Для кода 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)<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator][,Correction])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1.<br />
Поле Correction позволяет указать данные для корректировочного чека, используется в системе Штрих-М. По умолчанию пустая строка. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''GetRouteCode(AddressText, TownCode, LatLon[, Lon])''' - для адреса AddressText в городе с кодом TownCode (из таблицы Town) по географическим координатам lat, lon возвращает код роута (записи, хранящей координаты адреса в городе). Если роут не найден (для адреса в городе не найдено записи с указанными координатами) - создает новый роут и возвращает его код, если роут найден (был создан ранее) - обновляет у роута координаты. Если параметр Lon задан, то параметр LatLon должен содержать одну координату, иначе LatLon должен содержать строку вида 'lat, lon'.<br />
В случае ошибки возвращает Null.<br />
<br />
Пример:<br><br />
Set($res, GetRouteCode(address, townto, '55.114034, 36.592397'));<br><br />
Set($res, GetRouteCode('Троицк, Полковника милиции Курочкина ул., 11', 1, '37.467446, 55.740537'));<br><br />
Set($res, GetRouteCode('Обнинск, Маркса пр., 20', TownByName('Обнинск'), 55.114034, 36.592397));<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''CalcClientCnt(client_code, date, is_intown)''' - функция расчета количество доставленных корреспонденций у клиента с кодом client_code за предыдущий месяц от даты date среди внутригородских (is_intown = true) либо междугородних (is_intown = false) корреспонденций.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
'''Функции общего назначения''':<br />
<br />
'''ExecSimpleScript(Caption, Text)''' - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
'''FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll])''' - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов.<br />
<br />
'''PrintSticker(Codes, [ToBoxes=False])'''<br />
<br />
'''GetItemByName(Name)'''<br />
<br />
'''GetA4Printer''' - возвращает имя принтера выбранного для печати документов<br />
<br />
'''GetStickerPrinter''' - возвращает имя принтера выбранного для печати стикеров<br />
<br />
'''GetDuplexPrinter''' - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращает пустую строку<br />
<br />
'''PrintAttachPDFPage(Code, FileName, Page, Printer)''' - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
'''AttachPDFToText(Code, [TextFileName])''' - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
'''GetActiveForm''' - возвращает код активной формы в программе, где происходит сканирование.<br />
'''Список интерфейсов''': <br />
0 - неопределенный; <br />
1 - прием корреспонденции на склад; <br />
2 - АПД; <br />
3 - комплектация адресов (ShelfingForm); <br />
4 - доска приема; <br />
9 - вкладка «Манифесты»; <br />
10 - Инвентаризация корреспонденции; <br />
11 - АПК; <br />
12 - вкладка «Адреса»; <br />
13 - вкладка «Выдача»; <br />
14 - вкладка «Склад».<br />
<br />
'''RuleName(alias)''' - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
'''CheckRule(alias)''' - функция проверки разрешения у текущего пользователя системы, alias - псевдоним права. Возвращает 1, если право есть и 0, если права нет. <br />
Пример: if(CheckRule('RSE'), ShowMessage('У пользователя есть право изменять счета'), ShowMessage('У пользователя нет права изменять счета'));<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
ClientTown - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
== Объект TMessage ==<br />
Объект используется для скриптовой обработки письма в [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, отправитель письма, тему письма, дата получения и список прикрепленных файлов.<br />
<br />
'''Message.Text''' - возвращает очищенный от HTML-тегов текст письма.<br />
<br />
'''Message.HTMLText''' - возвращает оригинальный текст письма со всеми HTML-тегами.<br />
<br />
'''Message.Sender''' - возвращает email-адрес отправителя письма.<br />
<br />
'''Message.AttachmentsCount''' - возвращает количество вложенных файлов.<br />
<br />
'''Message.DateTime''' - возвращает дату и время получения письма.<br />
<br />
'''Message.Subject''' - возвращает тему письма.<br />
<br />
'''Message.GetAttachmentDataString(Number)''' - возвращает вложенный файл под номером Number в виде строки.<br />
<br />
'''Message.GetAttachmentName(Number)''' - возвращает имя вложенного файла под номером Number.<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B3%D0%BE_%D0%BC%D0%B5%D1%81%D1%82%D0%B0&diff=14888Настройка параметров рабочего места2023-12-12T15:37:50Z<p>Sammy: /* Подключение рабочего места к серверу */</p>
<hr />
<div>= Подключение рабочего места к серверу =<br />
Чтобы настроить подключение к серверу, на рабочем столе компьютера в контекстном меню ярлыка MeaSoft выберите '''Свойства'''. Откроется окно «Свойства»:<br />
<br />
[[Файл:Props.png|none]]<br />
<br />
В поле '''Объект''' укажите параметры подключения к серверу. Доступны следующие параметры:<br />
* <code>-s</code> — имя или IP-адрес сервера;<br />
* <code>-p</code> — порт сервера;<br />
* <code>-u</code> — имя пользователя для подключения к серверу;<br />
* <code>-w</code> — пароль для подключения к серверу;<br />
* <code>-aluser</code> — имя пользователя для автоматического входа в программу;<br />
* <code>-alpass</code> — пароль для автоматического входа в программу;<br />
* <code>-name</code> — имя экземпляра программы. Для защиты от двойного запуска используется имя экземпляра. На одном компьютере невозможно запустить два экземпляра MeaSoft c одинаковыми именами. Чтобы одновременно работать с разными базами, вы можете в этом параметре у разных ярлыков указать разные имена;<br />
* <code>-aSkipApiSync1</code> — запрещает программе быть ответственной за синхронизацию с личным кабинетом. Используйте параметр на компьютерах с отключенным интернетом, чтобы синхронизация не тратила на них время.<br />
<br />
'''Примечание'''. Чтобы синхронизация с ЛК работала, хотя бы один компьютер должен быть подключен к интернету и на нем должен быть запущен MeaSoft.<br />
<br />
Пример параметров командной строки:<br />
-sServer -p3306 -uOffice -wpassword<br />
<br />
= Настройка рабочего места =<br />
Чтобы изменить настройки программы для конкретного пользователя, в главном меню выберите '''Настройка''' > '''Параметры'''.<br />
<br />
Параметры сгруппированы по вкладкам: <br />
* [[#Ввод|Ввод]]<br />
* [[#Отображения|Отображения]]<br />
* [[#Подключения|Подключения]]<br />
* [[#Оборудование|Оборудование]] <br />
* [[#Печать|Печать]]<br />
<br />
== Ввод ==<br />
<br />
[[Файл:Параметры.png|none]]<br />
<br />
'''Ограничить номера интервалом'''. Интервал номеров корреспонденции, назначенный оператору. Обеспечивает автоматический контроль нумерации при одновременном вводе корреспонденции несколькими операторами в один заказ.<br />
<br />
'''Выдача'''. Определяет возможные режимы работы на вкладке '''Выдача'''.<br />
<br />
'''NumLock включен всегда'''. Ввод с числового блока клавиатуры.<br />
<br />
'''Расположение'''. Выберите из выпадающего списка филиал, где работает пользователь.<br />
<br />
== Отображение ==<br />
<br />
[[Файл:Параметры отображение.png|none]]<br />
<br />
'''Ограничить кол-во заказов'''. Укажите максимальное количество отображаемых записей на вкладке '''Заказы'''.<br />
<br />
'''Огранич. адресов по умолчанию'''. Укажите максимальное количество отображаемых записей на вкладке '''Адреса'''.<br />
<br />
'''Показывать фото сотрудников'''. Если флажок установлен, фото сотрудников отображаются на вкладке '''Выдача''' и в карточках сотрудников.<br />
<br />
'''Показывать оставшийся срок доставки'''. Если флажок установлен и отключена переменная '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Отображать режим как текст''', на вкладках '''Выдача''' и '''Адреса''' в столбце '''Режим''' отображается оставшийся срок доставки.<br />
<br />
'''Показывать "невидимые" адреса'''. Если флажок установлен, пользователь видит скрытые заказы, то есть такие, для которых в карточке заказа снят флажок '''Видимый'''.<br />
<br />
'''При сканировании удост.'''. Установите действие по умолчанию при сканировании удостоверения сотрудника. Возможные значения: '''Открыть выдачу''', '''Показать зарплату''', '''Выдавать деньги'''.<br />
<br />
'''Выборка по умолчанию'''. Выберите статус отправления по умолчанию в [[Учет корреспонденции#Фильтр|фильтре]] адресов.<br />
<br />
'''Сглаживать цвета метро'''. Если флажок установлен, цвета станций метро в списке выглядят менее контрастно.<br />
<br />
'''Кол-во пунктов меню в столбце'''. Установите количество пунктов меню в столбце при их группировке.<br />
<br />
'''Группировать пункты меню, если их больше'''. Укажите число пунктов меню, которые нужно группировать при отображении. В этом случае пункты меню группируются, чтобы количество отображаемых элементов не превышало указанное число. К примеру, в курьерской службе работает более 220 курьеров. На вкладке '''Адреса''' в контекстном меню '''Запланировать на курьеров''' имена группируются по алфавиту. <br />
<br />
'''Использовать статус со слов курьера в выдаче'''. Если флажок установлен, статус со слов курьера записывается в поле '''Инфо о доставке''' в карточке корреспонденции.<br />
<br />
'''Подсветка курьеров по переносам в выдаче'''. Если флажок установлен, на вкладке '''Выдача''' в списке сотрудников курьеры с недоставленными отправлениями, по которым был перенос доставки, отображаются фиолетовым цветом.<br />
<br />
== Подключения ==<br />
<br />
Вкладка предназначена для настройки локального подключения к почтовому и proxy-серверу, отличному от [[Настройка_глобальных_параметров#Настройка системы|глобальных настроек]].<br />
<br />
[[Файл:Параметры подключение.png|none]]<br />
<br />
'''Использовать локальные настройки почты'''. Если флажок установлен, для компьютера используются другие настройки почтового сервера. Используется, если именно с этого ПК письма должны уходить с другого почтового адреса. Установите [[Настройка_глобальных_параметров#Пример настройки для Яндекс.Почты|параметры подключения]] и укажите логин и пароль для используемого почтового ящика.<br />
<br />
'''Использовать локальные настройки proxy'''. Если флажок установлен, для компьютера используются другие настройки proxy. Например, это используется, если компьютер находится не в офисной сети. Установите proxy-сервер и параметры авторизации.<br />
<br />
== Оборудование ==<br />
[[Файл:Параметры оборудование.png|none]]<br />
<br />
'''Использовать COM-сканер'''. Если флажок установлен, сканер подключается через физический или виртуальный COM-порт. В поле '''Порт''' выберите используемый порт.<br />
<br />
'''Использовать весы'''. Если флажок установлен, отправления можно взвесить с помощью подключенных к компьютеру весов.<br />
<br />
'''Тип весов'''. Выберите тип подключенных весов из значений выпадающего списка. Поддерживаемые модели см. в разделе «[[Оборудование#Настройка весов|Настройка весов]]».<br />
<br />
'''Порт'''. Укажите номер порта, используемого весами.<br />
<br />
'''Порядок цены деления'''. Настройка порядка цены деления весов. Доступные значения: '''0''' — 1 грамм; '''1''' — 10 грамм; '''2''' — 100 грамм. Например, если весы показывают в 10 раз меньше, чем на самом деле, установите значение '''1'''.<br />
<br />
'''Использовать терминал сбора данных'''. Если флажок установлен, используется мобильное приложение [[Кладовщик — мобильное приложение для Android|Кладовщик]].<br />
<br />
== Печать ==<br />
<br />
[[Файл:Параметры печать.png|none]]</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B3%D0%BE_%D0%BC%D0%B5%D1%81%D1%82%D0%B0&diff=14887Настройка параметров рабочего места2023-12-12T15:37:36Z<p>Sammy: /* Подключение рабочего места к серверу */</p>
<hr />
<div>= Подключение рабочего места к серверу =<br />
Чтобы настроить подключение к серверу, на рабочем столе компьютера в контекстном меню ярлыка MeaSoft выберите '''Свойства'''. Откроется окно «Свойства»:<br />
<br />
[[Файл:Props.png|none]]<br />
<br />
В поле '''Объект''' укажите параметры подключения к серверу. Доступны следующие параметры:<br />
* <code>-s</code> — имя или IP-адрес сервера;<br />
* <code>-p</code> — порт сервера;<br />
* <code>-u</code> — имя пользователя для подключения к серверу;<br />
* <code>-w</code> — пароль для подключения к серверу;<br />
* <code>-aluser</code> — имя пользователя для автоматического входа в программу;<br />
* <code>-alpass</code> — пароль для автоматического входа в программу;<br />
* <code>-name</code> — имя экземпляра программы. Для защиты от двойного запуска используется имя экземпляра. На одном компьютере невозможно запустить два экземпляра MeaSoft c одинаковыми именами. Чтобы одновременно работать с разными базами, вы можете в этом параметре у разных ярлыков указать разные имена;<br />
* <code>-aSkipApiSync1</code> — запрещает программе быть ответственной за синхронизацию с личным кабинетом. Используйте параметр на компьютерах с отключенным интернетом, чтобы синхронизация не тратила на них время.<br />
<br />
'''Примечание'''. Чтобы синхронизация с ЛК работала, хотя бы один компьютер должен быть подключен к интернету и на нем должен быть запущен MeaSoft.<br />
<br />
Пример параметров командной строки:<br />
-sServer -p3308 -uOffice -wpassword<br />
<br />
= Настройка рабочего места =<br />
Чтобы изменить настройки программы для конкретного пользователя, в главном меню выберите '''Настройка''' > '''Параметры'''.<br />
<br />
Параметры сгруппированы по вкладкам: <br />
* [[#Ввод|Ввод]]<br />
* [[#Отображения|Отображения]]<br />
* [[#Подключения|Подключения]]<br />
* [[#Оборудование|Оборудование]] <br />
* [[#Печать|Печать]]<br />
<br />
== Ввод ==<br />
<br />
[[Файл:Параметры.png|none]]<br />
<br />
'''Ограничить номера интервалом'''. Интервал номеров корреспонденции, назначенный оператору. Обеспечивает автоматический контроль нумерации при одновременном вводе корреспонденции несколькими операторами в один заказ.<br />
<br />
'''Выдача'''. Определяет возможные режимы работы на вкладке '''Выдача'''.<br />
<br />
'''NumLock включен всегда'''. Ввод с числового блока клавиатуры.<br />
<br />
'''Расположение'''. Выберите из выпадающего списка филиал, где работает пользователь.<br />
<br />
== Отображение ==<br />
<br />
[[Файл:Параметры отображение.png|none]]<br />
<br />
'''Ограничить кол-во заказов'''. Укажите максимальное количество отображаемых записей на вкладке '''Заказы'''.<br />
<br />
'''Огранич. адресов по умолчанию'''. Укажите максимальное количество отображаемых записей на вкладке '''Адреса'''.<br />
<br />
'''Показывать фото сотрудников'''. Если флажок установлен, фото сотрудников отображаются на вкладке '''Выдача''' и в карточках сотрудников.<br />
<br />
'''Показывать оставшийся срок доставки'''. Если флажок установлен и отключена переменная '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Отображать режим как текст''', на вкладках '''Выдача''' и '''Адреса''' в столбце '''Режим''' отображается оставшийся срок доставки.<br />
<br />
'''Показывать "невидимые" адреса'''. Если флажок установлен, пользователь видит скрытые заказы, то есть такие, для которых в карточке заказа снят флажок '''Видимый'''.<br />
<br />
'''При сканировании удост.'''. Установите действие по умолчанию при сканировании удостоверения сотрудника. Возможные значения: '''Открыть выдачу''', '''Показать зарплату''', '''Выдавать деньги'''.<br />
<br />
'''Выборка по умолчанию'''. Выберите статус отправления по умолчанию в [[Учет корреспонденции#Фильтр|фильтре]] адресов.<br />
<br />
'''Сглаживать цвета метро'''. Если флажок установлен, цвета станций метро в списке выглядят менее контрастно.<br />
<br />
'''Кол-во пунктов меню в столбце'''. Установите количество пунктов меню в столбце при их группировке.<br />
<br />
'''Группировать пункты меню, если их больше'''. Укажите число пунктов меню, которые нужно группировать при отображении. В этом случае пункты меню группируются, чтобы количество отображаемых элементов не превышало указанное число. К примеру, в курьерской службе работает более 220 курьеров. На вкладке '''Адреса''' в контекстном меню '''Запланировать на курьеров''' имена группируются по алфавиту. <br />
<br />
'''Использовать статус со слов курьера в выдаче'''. Если флажок установлен, статус со слов курьера записывается в поле '''Инфо о доставке''' в карточке корреспонденции.<br />
<br />
'''Подсветка курьеров по переносам в выдаче'''. Если флажок установлен, на вкладке '''Выдача''' в списке сотрудников курьеры с недоставленными отправлениями, по которым был перенос доставки, отображаются фиолетовым цветом.<br />
<br />
== Подключения ==<br />
<br />
Вкладка предназначена для настройки локального подключения к почтовому и proxy-серверу, отличному от [[Настройка_глобальных_параметров#Настройка системы|глобальных настроек]].<br />
<br />
[[Файл:Параметры подключение.png|none]]<br />
<br />
'''Использовать локальные настройки почты'''. Если флажок установлен, для компьютера используются другие настройки почтового сервера. Используется, если именно с этого ПК письма должны уходить с другого почтового адреса. Установите [[Настройка_глобальных_параметров#Пример настройки для Яндекс.Почты|параметры подключения]] и укажите логин и пароль для используемого почтового ящика.<br />
<br />
'''Использовать локальные настройки proxy'''. Если флажок установлен, для компьютера используются другие настройки proxy. Например, это используется, если компьютер находится не в офисной сети. Установите proxy-сервер и параметры авторизации.<br />
<br />
== Оборудование ==<br />
[[Файл:Параметры оборудование.png|none]]<br />
<br />
'''Использовать COM-сканер'''. Если флажок установлен, сканер подключается через физический или виртуальный COM-порт. В поле '''Порт''' выберите используемый порт.<br />
<br />
'''Использовать весы'''. Если флажок установлен, отправления можно взвесить с помощью подключенных к компьютеру весов.<br />
<br />
'''Тип весов'''. Выберите тип подключенных весов из значений выпадающего списка. Поддерживаемые модели см. в разделе «[[Оборудование#Настройка весов|Настройка весов]]».<br />
<br />
'''Порт'''. Укажите номер порта, используемого весами.<br />
<br />
'''Порядок цены деления'''. Настройка порядка цены деления весов. Доступные значения: '''0''' — 1 грамм; '''1''' — 10 грамм; '''2''' — 100 грамм. Например, если весы показывают в 10 раз меньше, чем на самом деле, установите значение '''1'''.<br />
<br />
'''Использовать терминал сбора данных'''. Если флажок установлен, используется мобильное приложение [[Кладовщик — мобильное приложение для Android|Кладовщик]].<br />
<br />
== Печать ==<br />
<br />
[[Файл:Параметры печать.png|none]]</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B3%D0%BE_%D0%BC%D0%B5%D1%81%D1%82%D0%B0&diff=14886Настройка параметров рабочего места2023-12-12T15:35:09Z<p>Sammy: /* Подключение рабочего места к серверу */</p>
<hr />
<div>= Подключение рабочего места к серверу =<br />
Чтобы настроить подключение к серверу, на рабочем столе компьютера в контекстном меню ярлыка MeaSoft выберите '''Свойства'''. Откроется окно «Свойства»:<br />
<br />
[[Файл:Props.png|none]]<br />
<br />
В поле '''Объект''' укажите параметры подключения к серверу. Доступны следующие параметры:<br />
* <code>-s</code> — имя или IP-адрес сервера;<br />
* <code>-p</code> — порт сервера;<br />
* <code>-u</code> — имя пользователя для подключения к серверу;<br />
* <code>-w</code> — пароль для подключения к серверу;<br />
* <code>-aluser</code> — имя пользователя для автоматического входа в программу;<br />
* <code>-alpass</code> — пароль для автоматического входа в программу;<br />
* <code>-name</code> — имя экземпляра программы. Для защиты от двойного запуска используется имя экземпляра. На одном компьютере невозможно запустить два экземпляра MeaSoft c одинаковыми именами. Чтобы одновременно работать с разными базами, вы можете в этом параметре у разных ярлыков указать разные имена;<br />
* <code>-aSkipApiSync1</code> — запрещает программе быть ответственной за синхронизацию с личным кабинетом. Используйте параметр на компьютерах с отключенным интернетом, чтобы синхронизация не тратила на них время.<br />
<br />
'''Примечание'''. Чтобы синхронизация с ЛК работала, хотя бы один компьютер должен быть подключен к интернету и на нем должен быть запущен MeaSoft.<br />
<br />
Пример параметров командной строки:<br />
C:\courier\courier.exe -sServer -p3308 -uOffice -wpassword<br />
<br />
тут указано:<br />
путь к программе: C:\courier\courier.exe<br />
адрес сервера:Server<br />
порт:3308<br />
логин:Office<br />
пароль:password<br />
<br />
= Настройка рабочего места =<br />
Чтобы изменить настройки программы для конкретного пользователя, в главном меню выберите '''Настройка''' > '''Параметры'''.<br />
<br />
Параметры сгруппированы по вкладкам: <br />
* [[#Ввод|Ввод]]<br />
* [[#Отображения|Отображения]]<br />
* [[#Подключения|Подключения]]<br />
* [[#Оборудование|Оборудование]] <br />
* [[#Печать|Печать]]<br />
<br />
== Ввод ==<br />
<br />
[[Файл:Параметры.png|none]]<br />
<br />
'''Ограничить номера интервалом'''. Интервал номеров корреспонденции, назначенный оператору. Обеспечивает автоматический контроль нумерации при одновременном вводе корреспонденции несколькими операторами в один заказ.<br />
<br />
'''Выдача'''. Определяет возможные режимы работы на вкладке '''Выдача'''.<br />
<br />
'''NumLock включен всегда'''. Ввод с числового блока клавиатуры.<br />
<br />
'''Расположение'''. Выберите из выпадающего списка филиал, где работает пользователь.<br />
<br />
== Отображение ==<br />
<br />
[[Файл:Параметры отображение.png|none]]<br />
<br />
'''Ограничить кол-во заказов'''. Укажите максимальное количество отображаемых записей на вкладке '''Заказы'''.<br />
<br />
'''Огранич. адресов по умолчанию'''. Укажите максимальное количество отображаемых записей на вкладке '''Адреса'''.<br />
<br />
'''Показывать фото сотрудников'''. Если флажок установлен, фото сотрудников отображаются на вкладке '''Выдача''' и в карточках сотрудников.<br />
<br />
'''Показывать оставшийся срок доставки'''. Если флажок установлен и отключена переменная '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Отображать режим как текст''', на вкладках '''Выдача''' и '''Адреса''' в столбце '''Режим''' отображается оставшийся срок доставки.<br />
<br />
'''Показывать "невидимые" адреса'''. Если флажок установлен, пользователь видит скрытые заказы, то есть такие, для которых в карточке заказа снят флажок '''Видимый'''.<br />
<br />
'''При сканировании удост.'''. Установите действие по умолчанию при сканировании удостоверения сотрудника. Возможные значения: '''Открыть выдачу''', '''Показать зарплату''', '''Выдавать деньги'''.<br />
<br />
'''Выборка по умолчанию'''. Выберите статус отправления по умолчанию в [[Учет корреспонденции#Фильтр|фильтре]] адресов.<br />
<br />
'''Сглаживать цвета метро'''. Если флажок установлен, цвета станций метро в списке выглядят менее контрастно.<br />
<br />
'''Кол-во пунктов меню в столбце'''. Установите количество пунктов меню в столбце при их группировке.<br />
<br />
'''Группировать пункты меню, если их больше'''. Укажите число пунктов меню, которые нужно группировать при отображении. В этом случае пункты меню группируются, чтобы количество отображаемых элементов не превышало указанное число. К примеру, в курьерской службе работает более 220 курьеров. На вкладке '''Адреса''' в контекстном меню '''Запланировать на курьеров''' имена группируются по алфавиту. <br />
<br />
'''Использовать статус со слов курьера в выдаче'''. Если флажок установлен, статус со слов курьера записывается в поле '''Инфо о доставке''' в карточке корреспонденции.<br />
<br />
'''Подсветка курьеров по переносам в выдаче'''. Если флажок установлен, на вкладке '''Выдача''' в списке сотрудников курьеры с недоставленными отправлениями, по которым был перенос доставки, отображаются фиолетовым цветом.<br />
<br />
== Подключения ==<br />
<br />
Вкладка предназначена для настройки локального подключения к почтовому и proxy-серверу, отличному от [[Настройка_глобальных_параметров#Настройка системы|глобальных настроек]].<br />
<br />
[[Файл:Параметры подключение.png|none]]<br />
<br />
'''Использовать локальные настройки почты'''. Если флажок установлен, для компьютера используются другие настройки почтового сервера. Используется, если именно с этого ПК письма должны уходить с другого почтового адреса. Установите [[Настройка_глобальных_параметров#Пример настройки для Яндекс.Почты|параметры подключения]] и укажите логин и пароль для используемого почтового ящика.<br />
<br />
'''Использовать локальные настройки proxy'''. Если флажок установлен, для компьютера используются другие настройки proxy. Например, это используется, если компьютер находится не в офисной сети. Установите proxy-сервер и параметры авторизации.<br />
<br />
== Оборудование ==<br />
[[Файл:Параметры оборудование.png|none]]<br />
<br />
'''Использовать COM-сканер'''. Если флажок установлен, сканер подключается через физический или виртуальный COM-порт. В поле '''Порт''' выберите используемый порт.<br />
<br />
'''Использовать весы'''. Если флажок установлен, отправления можно взвесить с помощью подключенных к компьютеру весов.<br />
<br />
'''Тип весов'''. Выберите тип подключенных весов из значений выпадающего списка. Поддерживаемые модели см. в разделе «[[Оборудование#Настройка весов|Настройка весов]]».<br />
<br />
'''Порт'''. Укажите номер порта, используемого весами.<br />
<br />
'''Порядок цены деления'''. Настройка порядка цены деления весов. Доступные значения: '''0''' — 1 грамм; '''1''' — 10 грамм; '''2''' — 100 грамм. Например, если весы показывают в 10 раз меньше, чем на самом деле, установите значение '''1'''.<br />
<br />
'''Использовать терминал сбора данных'''. Если флажок установлен, используется мобильное приложение [[Кладовщик — мобильное приложение для Android|Кладовщик]].<br />
<br />
== Печать ==<br />
<br />
[[Файл:Параметры печать.png|none]]</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B5%D0%B3%D0%BE_%D0%BC%D0%B5%D1%81%D1%82%D0%B0&diff=14885Настройка параметров рабочего места2023-12-12T15:34:02Z<p>Sammy: /* Подключение рабочего места к серверу */</p>
<hr />
<div>= Подключение рабочего места к серверу =<br />
Чтобы настроить подключение к серверу, на рабочем столе компьютера в контекстном меню ярлыка MeaSoft выберите '''Свойства'''. Откроется окно «Свойства»:<br />
<br />
[[Файл:Props.png|none]]<br />
<br />
В поле '''Объект''' укажите параметры подключения к серверу. Доступны следующие параметры:<br />
* <code>-s</code> — имя или IP-адрес сервера;<br />
* <code>-p</code> — порт сервера;<br />
* <code>-u</code> — имя пользователя для подключения к серверу;<br />
* <code>-w</code> — пароль для подключения к серверу;<br />
* <code>-aluser</code> — имя пользователя для автоматического входа в программу;<br />
* <code>-alpass</code> — пароль для автоматического входа в программу;<br />
* <code>-name</code> — имя экземпляра программы. Для защиты от двойного запуска используется имя экземпляра. На одном компьютере невозможно запустить два экземпляра MeaSoft c одинаковыми именами. Чтобы одновременно работать с разными базами, вы можете в этом параметре у разных ярлыков указать разные имена;<br />
* <code>-aSkipApiSync1</code> — запрещает программе быть ответственной за синхронизацию с личным кабинетом. Используйте параметр на компьютерах с отключенным интернетом, чтобы синхронизация не тратила на них время.<br />
<br />
'''Примечание'''. Чтобы синхронизация с ЛК работала, хотя бы один компьютер должен быть подключен к интернету и на нем должен быть запущен MeaSoft.<br />
<br />
Пример параметров командной строки:<br />
C:\courier\courier.exe -sServer -p3308 -uOffice -wpassword<br />
<br />
тут указано:<br />
путь к программе: C:\courier\courier.exe<br />
адрес севера:Server<br />
порт:3308<br />
логин:Office<br />
пароль:password<br />
<br />
= Настройка рабочего места =<br />
Чтобы изменить настройки программы для конкретного пользователя, в главном меню выберите '''Настройка''' > '''Параметры'''.<br />
<br />
Параметры сгруппированы по вкладкам: <br />
* [[#Ввод|Ввод]]<br />
* [[#Отображения|Отображения]]<br />
* [[#Подключения|Подключения]]<br />
* [[#Оборудование|Оборудование]] <br />
* [[#Печать|Печать]]<br />
<br />
== Ввод ==<br />
<br />
[[Файл:Параметры.png|none]]<br />
<br />
'''Ограничить номера интервалом'''. Интервал номеров корреспонденции, назначенный оператору. Обеспечивает автоматический контроль нумерации при одновременном вводе корреспонденции несколькими операторами в один заказ.<br />
<br />
'''Выдача'''. Определяет возможные режимы работы на вкладке '''Выдача'''.<br />
<br />
'''NumLock включен всегда'''. Ввод с числового блока клавиатуры.<br />
<br />
'''Расположение'''. Выберите из выпадающего списка филиал, где работает пользователь.<br />
<br />
== Отображение ==<br />
<br />
[[Файл:Параметры отображение.png|none]]<br />
<br />
'''Ограничить кол-во заказов'''. Укажите максимальное количество отображаемых записей на вкладке '''Заказы'''.<br />
<br />
'''Огранич. адресов по умолчанию'''. Укажите максимальное количество отображаемых записей на вкладке '''Адреса'''.<br />
<br />
'''Показывать фото сотрудников'''. Если флажок установлен, фото сотрудников отображаются на вкладке '''Выдача''' и в карточках сотрудников.<br />
<br />
'''Показывать оставшийся срок доставки'''. Если флажок установлен и отключена переменная '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Отображать режим как текст''', на вкладках '''Выдача''' и '''Адреса''' в столбце '''Режим''' отображается оставшийся срок доставки.<br />
<br />
'''Показывать "невидимые" адреса'''. Если флажок установлен, пользователь видит скрытые заказы, то есть такие, для которых в карточке заказа снят флажок '''Видимый'''.<br />
<br />
'''При сканировании удост.'''. Установите действие по умолчанию при сканировании удостоверения сотрудника. Возможные значения: '''Открыть выдачу''', '''Показать зарплату''', '''Выдавать деньги'''.<br />
<br />
'''Выборка по умолчанию'''. Выберите статус отправления по умолчанию в [[Учет корреспонденции#Фильтр|фильтре]] адресов.<br />
<br />
'''Сглаживать цвета метро'''. Если флажок установлен, цвета станций метро в списке выглядят менее контрастно.<br />
<br />
'''Кол-во пунктов меню в столбце'''. Установите количество пунктов меню в столбце при их группировке.<br />
<br />
'''Группировать пункты меню, если их больше'''. Укажите число пунктов меню, которые нужно группировать при отображении. В этом случае пункты меню группируются, чтобы количество отображаемых элементов не превышало указанное число. К примеру, в курьерской службе работает более 220 курьеров. На вкладке '''Адреса''' в контекстном меню '''Запланировать на курьеров''' имена группируются по алфавиту. <br />
<br />
'''Использовать статус со слов курьера в выдаче'''. Если флажок установлен, статус со слов курьера записывается в поле '''Инфо о доставке''' в карточке корреспонденции.<br />
<br />
'''Подсветка курьеров по переносам в выдаче'''. Если флажок установлен, на вкладке '''Выдача''' в списке сотрудников курьеры с недоставленными отправлениями, по которым был перенос доставки, отображаются фиолетовым цветом.<br />
<br />
== Подключения ==<br />
<br />
Вкладка предназначена для настройки локального подключения к почтовому и proxy-серверу, отличному от [[Настройка_глобальных_параметров#Настройка системы|глобальных настроек]].<br />
<br />
[[Файл:Параметры подключение.png|none]]<br />
<br />
'''Использовать локальные настройки почты'''. Если флажок установлен, для компьютера используются другие настройки почтового сервера. Используется, если именно с этого ПК письма должны уходить с другого почтового адреса. Установите [[Настройка_глобальных_параметров#Пример настройки для Яндекс.Почты|параметры подключения]] и укажите логин и пароль для используемого почтового ящика.<br />
<br />
'''Использовать локальные настройки proxy'''. Если флажок установлен, для компьютера используются другие настройки proxy. Например, это используется, если компьютер находится не в офисной сети. Установите proxy-сервер и параметры авторизации.<br />
<br />
== Оборудование ==<br />
[[Файл:Параметры оборудование.png|none]]<br />
<br />
'''Использовать COM-сканер'''. Если флажок установлен, сканер подключается через физический или виртуальный COM-порт. В поле '''Порт''' выберите используемый порт.<br />
<br />
'''Использовать весы'''. Если флажок установлен, отправления можно взвесить с помощью подключенных к компьютеру весов.<br />
<br />
'''Тип весов'''. Выберите тип подключенных весов из значений выпадающего списка. Поддерживаемые модели см. в разделе «[[Оборудование#Настройка весов|Настройка весов]]».<br />
<br />
'''Порт'''. Укажите номер порта, используемого весами.<br />
<br />
'''Порядок цены деления'''. Настройка порядка цены деления весов. Доступные значения: '''0''' — 1 грамм; '''1''' — 10 грамм; '''2''' — 100 грамм. Например, если весы показывают в 10 раз меньше, чем на самом деле, установите значение '''1'''.<br />
<br />
'''Использовать терминал сбора данных'''. Если флажок установлен, используется мобильное приложение [[Кладовщик — мобильное приложение для Android|Кладовщик]].<br />
<br />
== Печать ==<br />
<br />
[[Файл:Параметры печать.png|none]]</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A1%D1%82%D0%B0%D1%82%D1%83%D1%81%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C&diff=14884Статусная модель2023-12-07T11:54:54Z<p>Sammy: /* Статусы трекинга */</p>
<hr />
<div>=Виды статусов =<br />
Основные виды статусов, связанные с доставкой отправлений:<br />
* статус корреспонденции — пользовательский статус отправления, отображается в [[Карточка корреспонденции#Общие поля|карточке корреспонденции]]. Значения можно добавлять и изменять в справочнике '''Статусы''' > '''15 Статусы корреспонденции''';<br />
* статус срочного заказа — системный статус выполнения [[Срочные заказы#Вкладка «Срочные»|срочного заказа]]. Статусы определены в справочнике '''Статусы''' > '''3 Статусы для срочных'''. Вы можете изменить название статуса и цвет, которым окрашена соответствующая строка в таблице. Количество статусов изменить нельзя;<br />
* статус клиента — дополнительные статусы отправления, настраиваются по просьбе клиента в случае использования своего набора статусов. Подробнее см. раздел [[Клиенты и партнеры#Основное|«Клиенты и партнеры»]];<br />
* статус манифеста — системные статусы, хранятся в справочнике '''Статусы''' > '''43 Системные''' > '''63 Статусы манифестов'''. Статусы нельзя изменять, можно выбрать их цвета. Подробнее см. в разделе [[Манифесты#Статусы манифеста|«Статусы манифеста»]];<br />
* статус со слов курьера — статус доставки, который сообщает курьер, отображается на вкладке [[Выдача корреспонденции курьерам#Вкладка «Выдача»|'''Выдача''']]. Значения статуса хранятся в справочнике '''Статусы''' > '''43 Системные''' > '''64 Статусы со слов курьера'''. Если включена переменная '''Справочники''' > '''Переменные''' > '''Выдача''' > '''Использовать статус со слов курьера в первую очередь''', то в карточке корреспонденции в поле '''Инфо о доставке''' копируется примечание, которое курьер указал в мобильном приложении при проставлении статуса недоставки, и вне зависимости от статуса выдачи всегда будет проставлен тот, который указан в статусе со слов курьера;<br />
* статус выдачи — статус доставки, которые [[Выдача корреспонденции курьерам#Статус выдачи|устанавливает]] менеджер в офисе при приемке работы курьера, отображается на вкладке [[Выдача корреспонденции курьерам#Вкладка «Выдача»|'''Выдача''']]. Значения статуса хранятся в справочнике '''Справочники''' > '''Статусы''' > '''8 Статусы выдачи'''. Пользователи могут только переименовывать и назначать цвета статусов выдачи;<br />
* статусы трекинга — системные статусы, устанавливаются автоматически, пользователь не может их изменить. Значения статуса хранятся в справочнике '''Справочники''' > '''Статусы''' > '''43 Системные''' > '''1 Статусы трекинга'''.<br />
<br />
==Статусы трекинга ==<br />
<br />
Статусы трекинга отображаются:<br />
* в карточке отправления — '''Функции''' > '''История статусов''';<br />
* в ответах на запрос по [[API#Запрос статуса заказов|API]];<br />
* в [[Личный кабинет курьерской службы#Отслеживание заказа по номеру|трекинге]] заказа в личном кабинете;<br />
* в информации по заказу в ЛК клиента, в офисной системе можно вывести столбец со статусами на вкладке '''Адреса'''.<br />
<br />
В таблице ниже указаны события, при наступлении каждого из которых устанавливается определенный статус трекинга.<br />
<br />
{|class = "wikitable" style = "width: 80%;"<br />
!Код статуса<br />
!Название<br />
!В каких случаях устанавливается статус<br />
|-<br />
|AWAITING_SYNC||Ожидает синхронизации||Служба доставки еще не получила данные заказа<br />
|-<br />
|NEW||Новый||Добавлено отправление на вкладке '''Адреса'''<br />
|-<br />
|NEWPICKUP||Создан забор||Добавлено отправление на вкладке '''Адреса''' типа «забор» (номер 0)<br />
|-<br />
|PICKUP||Забран у отправителя||Если отправлению типа «забор» установили статус «Доставлено» или доставочную кор-ию приняли через мобильное приложение по забору или в мобильном приложении в заявке на забор установлен статус «Получено».<br />
|-<br />
|WMSASSEMBLED||Скомплектован на складе фулфилмента||На складе ответственного хранения скомплектовали отправление<br />
|-<br />
|WMSDISASSEMBLED|| Разукомплектован на склад фулфилмента||На складе ответственного хранения разукомплектовали отправление<br />
|-<br />
|ACCEPTED||Получен складом||Отправление [[Прием корреспонденции на склад#Прием корреспонденции|принято]] на склад<br />
|-<br />
|CUSTOMSPROCESS||Производится таможенный контроль||Установлен статус отправления, указанный в переменной '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Статусы таможенного контроля в процессе'''. Подробнее см. раздел [[Манифесты#Таможенное оформление отправления|«Таможенное оформление отправления»]]<br />
|-<br />
|CUSTOMSFINISHED|| Таможенный контроль произведен||Установлен статус отправления, указанный в переменной '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Статусы пройденного таможенного контроля'''. Подробнее см. раздел [[Манифесты#Таможенное оформление отправления|«Таможенное оформление отправления»]]<br />
|-<br />
|CONFIRM||Согласована доставка||Установлен статус отправления, указанный в переменной '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Статусы успешного согласования доставки'''<br />
|-<br />
|UNCONFIRM||Не удалось согласовать доставку||Установлен статус отправления, указанный в переменной '''Справочники''' > '''Переменные''' > '''Корреспонденция''' > '''Статусы НЕ успешного согласования доставки'''.<br />
|-<br />
|DEPARTURING||Планируется отправка||Отправление запланировано в манифест<br />
|-<br />
|DEPARTURE||Отправлено со склада||В манифесте указали дату отправки и отсканировали отправление в мешок<br />
|-<br />
|INVENTORY||Инвентаризация||Отправление отсканировано в интерфейсе функции [[Функции#Инвентаризация корреспонденции|«Инвентаризация корреспонденции»]]<br />
|-<br />
|PICKUPREADY||Готов к выдаче||Если получатель — ПВЗ, и отправление принято на ПВЗ<br />
|-<br />
|DELIVERY||Выдан курьеру на доставку||Отправление выдается курьеру, статус в выдаче — «На руках»<br />
|-<br />
|COURIERDELIVERED||Доставлен (предварительно)||Отправлению установлен статус со слов курьера '''Доставлено''' или статус в выдаче '''Доставлено'''<br />
|-<br />
|COURIERPARTIALLY||Частично со слов курьера||Установлен статус со слов курьера «Частично доставлено»<br />
|-<br />
|COURIERCANCELED||Отказ со слов курьера ||Установлен статус со слов курьера «Не доставлено»<br />
|-<br />
|COURIERRETURN||Возвращено курьером (курьер вернул на склад)||Курьер не смог доставить отправление получателю и вернул заказ обратно на склад. Это промежуточный статус, после которого оператор выясняет, нужно ли еще раз доставлять заказ или это окончательная недоставка. Статус отправления в выдаче «Не доставлено» или «Не доставлено по причине»<br />
|-<br />
|DATECHANGE||Перенос||Изменена плановая дата доставки. На проставляется, если у корреспонденции только один статус "Новый"<br />
|-<br />
|COMPLETE||Доставлен||В карточке отправления указаны дата и время вручения<br />
|-<br />
|PARTIALLY||Доставлен частично||В карточке отправления указаны дата и время вручения, но есть возвраты вложений<br />
|-<br />
|CANCELED||Не доставлен (Возврат/Отмена)||В карточке отправления указана только дата вручения, без времени<br />
|-<br />
|RETURNING||Планируется возврат||Отправление отсканировано в интерфейсе [[Акты_передачи_денег_и_корреспонденции#Акты передачи корреспонденции (АПК)|АПК]]<br />
|-<br />
|RETURNED||Возвращен||В АПК указали дату отправки<br />
|-<br />
|LOST||Утрачен||В карточке корреспонденции установлен флажок '''Утрачено'''<br />
|-<br />
|PARTLYRETURNING||Планируется возврат остатков||Заказ с частичной доставкой добавлен в АПК<br />
|-<br />
|PARTLYRETURNED||Остаток возвращен||По АПК проставлена дата возврата для заказа с частичной доставкой<br />
|-<br />
|TRANSACCEPTED||Прибыл на склад перевозчика||При проставлении даты доставки в манифесте<br />
|-<br />
|PICKUPTRANS||Забран у перевозчика||При проставлении даты получения в манифесте<br />
|}</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14883Дополнительные возможности2023-12-04T15:44:22Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
'''PrintItemSticker''' - Вызывается перед печатью наклейки из карточки номенклатуры, для возможности распечатать уникальную наклейку для номенклатуры по заложенным в допвозможности условиям. Содержит %clientbar% - ШК наклейки. Если наклейка распечатана из допвозможности возвращает true, в противном случае false и будет распечатана стандартная наклейка, заложенная в системе<br />
<br />
== Настройка всплывающих окон==<br />
<br />
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). . Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnBeforeBaseSave''' - Вызывается перед сохранением изменений в карточке срочного заказа. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог таблицы base). Теги %date_put%, %time_put%, %message% - содержат дату вручения, время вручения и инфо о доставке соответственно. Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском<br />
<br />
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
'''DAILY''' - задание выполняемое один раз в день<br />
<br />
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
'''OnBeforeBasePutCheck''' - событие срабатывает при проставлении галки на вкладке срочных заказов. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В параметре <nowiki>%code%</nowiki> указан код срочного заказа, а в параметре <nowiki>%BasePutCheckType%</nowiki> указан тип проставления: 0 - если галка, 1 - если плюс. Если результат функции -1, то отмена выполняемой функции (abort).<br />
<br />
== Настройка документов ==<br />
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
'''GetTypeShippingPlace''' - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
'''OnSchetChanged''' - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
'''ExceptionsForAPK''' - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется)<br />
<br />
'''CustomZPDetail''' - кастомное дополнение к детализации зарплаты (Специальная надбавка). Вызывается из скриптовой детализации зарплаты. Предназначено для расчета и вывода в детализацию значения какой-либо специальной надбавки, определенной пользователем. Входящие параметры: %code% - код платежа в таблице kurier_pays, %kurier% - код курьера. Возвращает строку, где через запятую указаны Название надбавки и ее значение. Если эта строка не содержит двух параметров - ничего не выводится.<br />
.<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник (острым концом вниз), 2 - треугольник, 3 - увеличенный перевернутый треугольник (острым концом вниз), чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный перевернутый треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
'''OnEveryStartApp''' - выполняется при запуске программы.<br />
<br />
'''OnEveryCloseApp''' - выполняет при закрытии программы.<br />
<br />
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source><br />
<br />
'''OnAfterPreassemblyScan''' - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.<br />
<br />
'''OnGeocodeScript''' - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:<br />
*$address - адрес для геокодирования;<br />
*$town - код города;<br />
*$street и $home - упрощенный адрес;<br />
<br />
Скрипт должен вернуть следующие переменные : <br />
*$lon и $lat - координаты ;<br />
*$goodaddress - нормализованный адрес (не обязательно);<br />
<br />
<source lang="sql"><br />
<?> <br />
set($response, HTTPPOST('http://XXXXXXXX',<br />
'{"query":'+ FormatTextJSON($address)+ '}', <br />
'','','','',<br />
'post', 'application/json', 10000));<br />
<br />
if($response!'',<br />
new('TJSON', 'json');<br />
set($e, try(<br />
json.SetText($response);<br />
json.OpenChild('geo_data');<br />
json.OpenChild('mid');<br />
set($lat, sqlfloat(json.ChildNodeValue('lat')));<br />
set($lon, sqlfloat(json.ChildNodeValue('lon')));<br />
));<br />
if($e, error('Ошибка в разборе ответа: '+$e), '');<br />
, error('Пришел пустой ответ от геокодера')<br />
);<br />
</source><br />
<br />
'''OnFilterAddressRecalc''' - Позволяет отфильтровать коды адресов, для которых можно пересчитать стоимость. Событие происходит перед расчетом стоимости доставки из интерфейса программы для: актов, счетов, заказов, и т.д. Не работает для пересчета запускаемого из самой карточки корреспонденции. <br />
%codes% - коды адресов для пересчета стоимости доставки. Формат: (1,2,3,...). %RecalcUserCode% - код пользователя запустившего пересчет (актуально для отложенных пересчетов). <br />
Функция должна вернуть коды адресов, допущенных к пересчету в формате: (1,2,3,...)<br />
<br />
<source lang="sql"><br />
<?><br />
rem('2023-12-04 Sergey. Отключаем перерасчет стоимости доставки у корреспонденций в статусе - проверено,<br />
если у пользователя нет права Счета-изменять. Тикет 79954.<br />
Блокировка работает в связке с тикетом 77995.');<br />
new('TSelfADO', 'DB');<br />
DB.OPEN('SELECT a.code FROM courier.address a<br />
LEFT JOIN courier.users u ON u.code=%RecalcUserCode%<br />
LEFT JOIN courier.`userrules` ur ON ur.`GroupId`=u.grup AND ur.`RuleType`=1 AND ur.newruleid =78 -- RSA<br />
WHERE ((a.state1<>8) OR (a.state1=8 AND ur.state="T")) AND a.code in %code%');<br />
DB.ParseForIn('CODE')<br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14882Дополнительные возможности2023-12-04T15:43:12Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
'''PrintItemSticker''' - Вызывается перед печатью наклейки из карточки номенклатуры, для возможности распечатать уникальную наклейку для номенклатуры по заложенным в допвозможности условиям. Содержит %clientbar% - ШК наклейки. Если наклейка распечатана из допвозможности возвращает true, в противном случае false и будет распечатана стандартная наклейка, заложенная в системе<br />
<br />
== Настройка всплывающих окон==<br />
<br />
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). . Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnBeforeBaseSave''' - Вызывается перед сохранением изменений в карточке срочного заказа. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог таблицы base). Теги %date_put%, %time_put%, %message% - содержат дату вручения, время вручения и инфо о доставке соответственно. Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском<br />
<br />
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
'''DAILY''' - задание выполняемое один раз в день<br />
<br />
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
'''OnBeforeBasePutCheck''' - событие срабатывает при проставлении галки на вкладке срочных заказов. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В параметре <nowiki>%code%</nowiki> указан код срочного заказа, а в параметре <nowiki>%BasePutCheckType%</nowiki> указан тип проставления: 0 - если галка, 1 - если плюс. Если результат функции -1, то отмена выполняемой функции (abort).<br />
<br />
== Настройка документов ==<br />
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
'''GetTypeShippingPlace''' - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
'''OnSchetChanged''' - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
'''ExceptionsForAPK''' - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется)<br />
<br />
'''CustomZPDetail''' - кастомное дополнение к детализации зарплаты (Специальная надбавка). Вызывается из скриптовой детализации зарплаты. Предназначено для расчета и вывода в детализацию значения какой-либо специальной надбавки, определенной пользователем. Входящие параметры: %code% - код платежа в таблице kurier_pays, %kurier% - код курьера. Возвращает строку, где через запятую указаны Название надбавки и ее значение. Если эта строка не содержит двух параметров - ничего не выводится.<br />
.<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник (острым концом вниз), 2 - треугольник, 3 - увеличенный перевернутый треугольник (острым концом вниз), чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный перевернутый треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
'''OnEveryStartApp''' - выполняется при запуске программы.<br />
<br />
'''OnEveryCloseApp''' - выполняет при закрытии программы.<br />
<br />
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source><br />
<br />
'''OnAfterPreassemblyScan''' - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.<br />
<br />
'''OnGeocodeScript''' - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:<br />
*$address - адрес для геокодирования;<br />
*$town - код города;<br />
*$street и $home - упрощенный адрес;<br />
<br />
Скрипт должен вернуть следующие переменные : <br />
*$lon и $lat - координаты ;<br />
*$goodaddress - нормализованный адрес (не обязательно);<br />
<br />
<source lang="sql"><br />
<?> <br />
set($response, HTTPPOST('http://XXXXXXXX',<br />
'{"query":'+ FormatTextJSON($address)+ '}', <br />
'','','','',<br />
'post', 'application/json', 10000));<br />
<br />
if($response!'',<br />
new('TJSON', 'json');<br />
set($e, try(<br />
json.SetText($response);<br />
json.OpenChild('geo_data');<br />
json.OpenChild('mid');<br />
set($lat, sqlfloat(json.ChildNodeValue('lat')));<br />
set($lon, sqlfloat(json.ChildNodeValue('lon')));<br />
));<br />
if($e, error('Ошибка в разборе ответа: '+$e), '');<br />
, error('Пришел пустой ответ от геокодера')<br />
);<br />
</source><br />
<br />
'''OnFilterAddressRecalc''' - Позволяет отфильтровать коды адресов, для которых можно пересчитать стоимость. Событие происходит перед расчетом стоимости доставки из интерфейса программы для: актов, счетов, заказов, и т.д. Не работает для пересчета запускаемого из самой карточки корреспонденции. <br />
%codes% - коды адресов для пересчета стоимости доставки. Формат: (1,2,3,...). %RecalcUserCode% - код пользователя запустившего пересчет (актуально для отложенных пересчетов). <br />
Функция должна вернуть коды адресов, допущенных к пересчету в формате: (1,2,3,...)<br />
<source lang="sql"><br />
<?><br />
rem('2023-12-04 Sergey. Отключаем перерасчет стоимости доставки у корреспонденций в статусе - проверено,<br />
если у пользователя нет права Счета-изменять. Тикет 79954.<br />
Блокировка работает в связке с тикетом 77995.');<br />
new('TSelfADO', 'DB');<br />
DB.OPEN('SELECT a.code FROM courier.address a<br />
LEFT JOIN courier.users u ON u.code=%RecalcUserCode%<br />
LEFT JOIN courier.`userrules` ur ON ur.`GroupId`=u.grup AND ur.`RuleType`=1 AND ur.newruleid =78 -- RSA<br />
WHERE ((a.state1<>8) OR (a.state1=8 AND ur.state="T")) AND a.code in %code%');<br />
DB.ParseForIn('CODE')</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%93%D0%BE%D1%80%D0%BE%D0%B4%D0%B0&diff=14881Города2023-11-30T11:29:19Z<p>Sammy: </p>
<hr />
<div>Предназначен для просмотра и добавления городов и населенных пунктов с привязкой к регионам страны.<br />
<br />
[[Файл:mezh001.png|500px|none]]<br />
<br />
В выпадающем списке '''Страна''' выберите страну. В левой части окна отобразится список ее регионов, в правой — список населенных пунктов региона.<br />
<br />
Чтобы добавить новую запись в список городов, нажмите F3.<br />
<br />
Удалять и изменять записи в этом справочнике невозможно.<br />
<br />
Добавленные таким образом города, сразу появятся в интерфейсе программы, но будут недоступны в личном кабинете и его АПИ.<br />
База городов личного кабинета общая для всех наших клиентов, по этому города в нее заносятся только вручную, и только по запросу в поддержку.</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9E%D1%82%D1%87%D0%B5%D1%82%D1%8B&diff=14874Отчеты2023-11-16T16:31:10Z<p>Sammy: /* Деньги к приходу от курьеров */</p>
<hr />
<div>= Назначение =<br />
Отчеты содержат информацию о выполненных действиях и результатах проведённой работы. Формируются в виде документов Microsoft Excel или представляют данные в системном окне.<br />
<br />
Чтобы просмотреть список отчетов, перейдите в пункт основного меню '''Отчеты'''. Для удобства навигации отчеты разбиты на тематические группы.<br />
<br />
= Клиенты =<br />
<br />
== Задолженности клиентов ==<br />
<br />
В открывшемся окне в качестве параметров отчета установите период, за который необходимо сформировать отчет.<br />
<br />
Если установлен флажок '''С учетом оплаченности''', в отчет не попадут корреспонденции, по которым был выставлен и оплачен счет и установлен флажок '''Оплата получателем'''. <br />
<br />
Если по корреспонденциям выставлен АПД (акт передачи денег) и он оплачен (без счета, введена дата оплаты), то такие корреспонденции попадут в отчет.<br />
<br />
== Оборот по клиентам помесячно ==<br />
<br />
В открывшемся окне в качестве параметров отчета установите период (дата заказа), за который необходимо сформировать отчет, и нажмите '''ОК'''. Программа выгрузит таблицу в формате MS Excel, содержащую следующие данные: компания, договор, менеджер, последний заказ и стоимость оказанных услуг по каждому месяцу из указанного периода.<br />
<br />
Стоимость оказанных услуг — стоимость доставки минус размер скидки, если указана в карточке клиента, на вкладке '''«Финансы»'''.<br />
<br />
'''«Сообщение»''' — значение берется из одноименного поля, в карточке клиента, на вкладке '''«Основное»'''.<br />
<br />
== Количество доставок по клиентам помесячно ==<br />
<br />
Отчет выводит количество заказанных доставок по всем клиентам по месяцам. <br />
<br />
Доставками считаются отправления с флажком '''Туда''' и обратные поездки с флажком '''Возврат''' с ненулевой ценой доставки.<br />
<br />
Отправления отбираются по датам заказов, а не доставки. Состояние доставки — дата и время вручения — не учитывается.<br />
<br />
== Количество новых клиентов помесячно ==<br />
<br />
Отчет показывает количество записей, созданных в таблице клиентов помесячно в течение указанного года.<br />
<br />
В открывшемся окне в качестве параметра отчета установите год и нажмите '''ОК'''. <br />
<br />
== Статистика % доставок по клиентам ==<br />
В открывшемся окне укажите даты начала и окончания периода (дата создания заказа) и нажмите '''OK'''. <br />
* '''Компания''' — имя клиента, указанного в заказе.<br />
* '''Всего''' — количество всех созданных корреспонденций в заказах.<br />
* '''Полностью доставлено''' — корреспонденции, у которых указаны дата и время вручения и нет возвратов во вложениях.<br />
* '''Частично доставлено''' — корреспонденции, у которых указаны дата и время вручения, но есть возвраты во вложениях.<br />
* '''Не доставлено''' — корреспонденции, у которых указана только дата вручения.<br />
* '''Доставляется''' — корреспонденции, у которых нет даты и времени вручения.<br />
<br />
== Долги перед Интернет-магазинами ==<br />
В этом отчете представлена информация по задолженности курьерской службы перед клиентами.<br />
<br />
Отчет строится по данным неоплаченных АПД и корреспонденций, не вошедших в АПД, в том числе междугородних отправлений, оплата которым не подтверждена.<br />
<br />
== Возвраты на складе ==<br />
Отчет показывает общее количество вложений в возвратах в разрезе клиентов. Возврат — это отправление, в котором проставлена дата вручения, но оно еще не возвращено отправителю.<br />
<br />
Факт возврата определяется по проставлению даты отправки в АПК.<br />
<br />
= Сотрудники =<br />
<br />
== Дни рождения сотрудников ==<br />
<br />
Отчет содержит список работающих сотрудников, у которых в указанном месяце день рождения.<br />
<br />
[[Файл:Дни рождения сотрудников.png|none]]<br />
<br />
== Работающие сотрудники ==<br />
Отчет содержит несколько отчетов по работающим сотрудникам. Для формирования отчета требуется наличие прав '''Отчеты''' > '''Аналитические''' и '''Сотрудники''' > '''Курьеры'''> '''Видеть'''.<br />
<br />
[[Файл:Отчет по работающим курьерам.png]]<br />
<br />
Выберите тип отчета и диапазон дат и нажмите на кнопку '''Сформировать отчет'''.<br />
<br />
=== Статистика и адреса/телефоны ===<br />
формирует список курьеров с разбивкой по менеджерам, работавших за указанный период, с указанием дат приема на работу, увольнения, количества отработанных дней, доставленных единиц корреспонденции и простых писем.<br />
<br />
Простое письмо — это условная единица измерения объема работы курьера. Количество простых писем автоматически вычисляется системой с учетом сложности заданий.<br />
<br />
=== Количество доставок по дням ===<br />
Формирует список курьеров, работавших за указанный период, с указанием дат приема на работу, увольнения, количества доставленных единиц корреспонденции по дням, количества отработанных дней (рассчитывается по датам вручения в карточках корреспонденции), среднего количества доставленных единиц корреспонденции в день. Задание «обратно» считается как отдельная доставка. То есть туда-обратно — 2 адреса.<br />
<br />
Назначение цвета:<br />
* розовый — в графике у курьера выходной: отпуск, больничный, отгул и т. д.<br />
* красный — в графике курьера рабочий день, но за день он ничего не доставил.<br />
<br />
=== Учет рабочего времени ===<br />
Формирует список курьеров, работавших за указанный период, с указанием общего количества отработанных за данный период часов, среднего количества часов в день, количества отработанных дней (здесь день считается отработанным, если в графике проставлены факт. время прихода или факт. время ухода), количества дней, в которые курьер находился в отпуске, на больничном, в отгуле, в простое.<br />
<br />
=== Уникальных доставок по дням ===<br />
Формирует список курьеров, работавших за указанный период, с указанием дат приема на работу, увольнения, количества единиц корреспонденции, доставленных по уникальным адресам по дням (ориентируется на дату вручения), количества отработанных дней, среднего количества доставок по уникальным адресам в день. Отчет считает по «Адресам», отправления «не доставленные по причине» (где дата вручения не пустая, а время вручения пустое) считаются как доставки (предполагается, что курьер туда ездил, но не доставил). Задание «обратно» считается как отдельная доставка. То есть туда-обратно — 2 адреса.<br />
<br />
Назначение цвета:<br />
* розовый — в графике у курьера выходной: отпуск, больничный, отгул и т. д.<br />
* красный — в графике курьера рабочий день, но за день он ничего не доставил.<br />
<br />
=== Эффективность работы в разрезе срочности ===<br />
формирует список курьеров, работавших за указанный период, с указанием количества выданных им единиц корреспонденции для каждого режима срочности, количества находящихся на руках, недоставленных, недоставленных по причине и доставленных.<br />
<br />
=== Эффективность работы в разрезе срочности и районов ===<br />
формирует список курьеров, работавших за указанный период, с указанием количества выданных им единиц корреспонденции для каждого режима срочности и каждого района, количества находящихся на руках, недоставленных, недоставленных по причине и доставленных.<br />
<br />
=== Производительность операторов ===<br />
формирует список пользователей с указанием количества введенной корреспонденции, внесенных изменений и введенной информации о доставке.<br />
<br />
== Расчеты с сотрудниками ==<br />
Открывает окно начисления и выдачи заработной платы сотрудникам. Подробнее смотрите раздел «[[Зарплата]]».<br />
<br />
== Зарплата агентства ==<br />
Отчеты — Сотрудники — Зарплата агентства<br />
<br />
Формирует детализированную зарплатную ведомость по агентам (менеджерам по продажам). Агентами считаются все сотрудники, которым назначен процент от оборота клиентов, независимо от их должности (см. раздел [[Клиенты]]).<br />
<br />
== Отчет дежурному ==<br />
Отчеты — Сотрудники — Отчет дежурному<br />
<br />
На основании данных графиков сотрудников формирует список сотрудников, которые должны прийти на работу в указанный день.<br />
<br />
== Заканчивающиеся графики ==<br />
<br />
В открывшемся окне установите дату, при необходимости снимите флажок '''Разбить по менеджерам''' и нажмите '''ОК'''. <br />
<br />
Сформируется отчет со списком сотрудников, чей график закончился или закончится в течение пяти дней, начиная с даты, которую вы ввели в качестве параметра отчета.<br />
<br />
== Заканчивающиеся договоры ==<br />
Отчет позволяет получить информацию о сотрудниках компании, у которых остался 1 месяц до конца трудового договора или дата завершения трудового договора не указана.<br />
<br />
Для формирования отчета в основном меню выберите '''Отчеты''' > '''Сотрудники''' > '''Заканчивающиеся договоры'''. Откроется новое окно, в нем выберите дату. Если установлен флажок '''Разбить по менеджерам''', список сотрудников группируется по курирующим менеджерам.<br />
<br />
== Посещаемость ==<br />
<br />
В открывшемся окне выберите дату и фамилию менеджера из выпадающего списка.<br />
<br />
В таблице ниже сформируется список курьеров, прикрепленных к данному менеджеру, с указанием данных из карточки сотрудника и его графика.<br />
<br />
Если время прихода больше текущего времени, то поля '''Приход''' и '''Факт. приход''' подсвечиваются розовым цветом.<br />
<br />
Подробнее см. раздел [[Функции#Допуск курьеров к работе|«Допуск курьеров к работе»]].<br />
<br />
== Бонусы/штрафы курьеров ==<br />
<br />
[[Файл:Штрафы бонусы курьеров.png]]<br />
<br />
В открывшемся окне укажите период отчета и выберите фамилию менеджера из выпадающего списка.<br />
<br />
В таблице ниже сформируется список курьеров, прикрепленных к указанному менеджеру, у которых в течение отчетного периоды были штрафы или бонусы.<br />
<br />
С помощью контекстного меню таблицы вы можете выполнить следующие действия:<br />
* открыть карточку бонуса/штрафа (или двойным щелчком мыши);<br />
* показать карточку корреспонденции;<br />
* показать хронологию выдачи.<br />
<br />
Внизу окна указано количество записей в таблице и общая сумма бонусов/штрафов.<br />
<br />
С помощью кнопки [[Файл:Выгрузить отчет.png]] рядом с полем выбора менеджера вы можете выгрузить отчет в MS Excel.<br />
<br />
== Процент возврата корреспонденции ==<br />
<br />
Отчет формируется за месяц, в него попадают все сотрудники с должностью «Курьер» и не стоящим флагом '''VIP'''. <br />
<br />
Отчет показывает следующие значения:<br />
<br />
*'''Неуд.''' — количество неудачных дней. Неудачным считается день, в который курьер не доставил больше 20 (а если выдано 15 единиц и менее — то 15) процентов от выданной корреспонденции;<br />
*'''Всего''' — количество отработанных дней. Отработанным здесь считается день, на который была выдана корреспонденция в «[[Выдача корреспонденции курьерам|выдаче]]»;<br />
*'''% неуд''' — процентное соотношение неудачных дней к общему количеству отработанных дней;<br />
*'''-''', '''+''' — количество оценок «-» и «+» соответственно (см. [[Графики работы сотрудников|График работы]]).<br />
<br />
== Бонусы/штрафы менеджеров ==<br />
<br />
Отчет формируется аналогично отчету [[#Бонусы/штрафы курьеров|Бонусы/штрафы курьеров]].<br />
<br />
==Автомобили, выданные курьерам==<br />
<br />
Отчет содержит информацию о выданных курьерам автомобилях за период. Информация об автомобиле берется из '''Справочники''' > '''Автомобили'''.<br />
<br />
Если установлен флажок '''Только на руках''', то в отчет попадут только непринятые автомобили.<br />
<br />
==Отчет по километражу==<br />
<br />
Формируется отчет за указанный период в разрезе курьеров. Отчет отображает расстояние в километрах, пройденное курьером за каждый день выбранного периода, общий километраж и общую сумму выданных денег по статье расходов «Бензин».<br />
<br />
Километраж рассчитывается по данным [[MeaSoft App#Трекинг курьеров|мобильного приложения для курьеров]]. Километраж можно просмотреть в функции '''[[Функции#Трекинг курьеров|Трекинг курьеров]]'''.<br />
<br />
Чтобы определить, какой тип платежа отвечает за выплату курьерам за бензин, измените переменную PayTypePetrol ('''Справочники''' > '''Переменные''' > '''Прочие'''), в которой указывается номер типа платежа из '''Справочники''' > '''Статусы''' > '''2 Типы платежей сотрудникам'''.<br />
<br />
==Сводный график сотрудников==<br />
<br />
Отчет выводит график работы сотрудников за указанный период.<br />
<br />
= Денежные задания =<br />
<br />
;Денежное задание<br />
: Отправление, в котором поле '''Сумма р.''' не пустое и значение больше 0 либо стоимость услуг оплачивает отправитель или получатель.<br />
<br />
Пункт главного меню '''Отчеты''' > '''Денежные задания''' включает в себя несколько отчетов по денежным заданиям различного назначения.<br />
<br />
=== Денежные задания-1 ===<br />
Формируется отчет по заданиям с наложенным платежом на дату заказа в разрезе менеджеров и клиентов.<br />
<br />
В отчет попадают отправления, в которых:<br />
* дата создания заказа совпадает с датой, выбранной при формировании отчета;<br />
* поле '''Сумма р.''' не пустое;<br />
* поле '''Дата вручения''' пустое;<br />
* в поле '''Вручил курьер''' указан менеджер, закрепленный за [[Районы|районом]], в который попадает отправление. Если за районом нет закрепленного менеджера, то это поле должно быть пустое.<br />
<br />
=== Денежные задания-2 ===<br />
Формируется отчет по отправлениям, отображенным на вкладке '''Адреса'''.<br />
<br />
В поле «Возврат» отображается комментарий из поля '''Поручение''' после слова «забрать». Если такого слова нет, то комментарий игнорируется.<br />
<br />
=== Денежные задания-3 ===<br />
Формируется отчет по отправлениям, отображенным на вкладке '''Адреса'''.<br />
<br />
В отчете можно увидеть адрес получателя, значение поля '''Вложение''', стоимость доставки и значение поля '''Сумма р'''. Если в поле '''Сумма р.''' значения нет или оно равно 0, то строка в отчете выделяется серым.<br />
<br />
=== Денежные задания-4 ===<br />
Формируется отчет, в который попадают все выданные, недоставленные (статус выдачи — '''На руках''') и денежные корреспонденции.<br />
<br />
Столбец «Чек. безнал» имеет значение «Да», если тип оплаты отправления «Картой при получении» или «Платежная система».<br />
<br />
=== По курьерам и клиентам ===<br />
Формируется отчет по отправлениям, отображенным на вкладке '''Адреса''' в разрезе запланированных курьеров и клиентов. Для каждого клиента и курьера отображается общая сумма наложенного платежа, количество корреспонденций и уникальных адресов.<br />
<br />
=== Принятые деньги за период ===<br />
Формируется отчет по отправлениям за выбранный период, у которых проставлен статус выдачи '''Доставлено''' или введена информация о доставке (дата/время вручения и курьер).<br />
<br />
Чтобы сформировать отчет:<br />
# Выберите период дат приема отправлений на вкладке '''Выдача ''' — когда был установлен статус выдачи '''Доставлено''' или указана дата ввода информации о доставке в карточке корреспонденции.<br />
# Выберите, по какому критерию группировать данные: по менеджерам, курьерам, клиентам, датам, адресам.<br />
# При необходимости установите флажки дополнительной группировки '''По датам''', '''По филиалам''', укажите филиал.<br />
# Нажмите '''ОК'''.<br />
<br />
Сформируется отчет в формате Microsoft Excel в разрезе выбранной группировки с информацией о полученных денежных средствах за выбранный период, разделенных на агентскую сумму нал./безнал. и стоимость доставки нал./безнал.<br />
<br />
Чтобы суммы попали в столбцы «Стоимость доставки, нал.» и «Стоимость доставки, безнал.», в карточке заказа должен быть установлен флажок '''Оплата наличными'''.<br />
<br />
Если в карточке корреспонденции установлен флажок '''Оплата получ.''', то флажок '''Оплата наличными''' в карточке заказа обязательно должен быть установлен, иначе разделения суммы наложенного платежа со стоимостью доставки не будет.<br />
<br />
В столбце «Стоимость доставки, нал.» отражаются еще и суммы по наличным платежам, принятым кассиром. Период отчета в этом случае учитывает дату принятия платежа. Если отчет строится по определенному филиалу, то в платеже обязательно должен быть указан номер заказа. По нему будет определяться филиал, с которым работает заказчик.<br />
<br />
=== Деньги к приходу от курьеров ===<br />
Формируется отчет в разрезе курьеров по дате выдачи, который покажет, сколько надо принять денег с курьера. В отчет попадает только доставленные отправления, у которых статус выдачи или статус со слов курьера '''Доставлено'''.<br />
<br />
'''Сумма по маршруту''' — показывает общую сумму, которую курьер должен взять с получателей. Учитываются флажки '''Оплата получ.''' в карточке корреспонденции и '''Оплата наличными''' в карточке заказа.<br />
<br />
'''Выдано под отчет''' — сумма [[Учет наличных по бухгалтерии#Выдать деньги из бухгалтерии|выданных курьеру денег]] из бухгалтерии. Учитываются только акты, выданные на дату, за которую строится отчет или выданные раньше но еще у курьера на руках.<br />
<br />
'''Расчеты с клиентами''' — деньги, которые курьер отдаст получателям. Например, курьеру могут выдать доставку денег по АПД. У таких корреспонденций поле '''Сумма р.''' содержит отрицательное значение.<br />
<br />
'''Документы''' — перечисление выданных АПД: номер акта, компания, перевозимая сумма денег.<br />
<br />
'''Итого к сдаче''' — количество наличных денег, которые курьер должен сдать менеджеру.<br />
<br />
=== Баланс наличных на руках у менеджера ===<br />
Отчет аналогичен отчету из пункта главного меню «[[Учет наличных по бухгалтерии#Принять деньги от сотрудника в бухгалтерию|Принять деньги от сотрудника в бухгалтерию]]». Разница в том, что нельзя изменить менеджера.<br />
<!--=== Почта России (форма 103) ===<br />
Формируется файл Excel для корреспонденций, которые отображены на вкладке '''Адреса''', по форме 103 Почты России.<br />
--><br />
<br />
= Корреспонденция =<br />
<br />
Большинство отчетов формируются по выборке корреспонденции на вкладке '''Адреса'''.<br />
<br />
=== Выгрузка в MS Excel ===<br />
Чтобы начать экспорт, на вкладке '''Адреса''' нажмите F9. Откроется окно формирования отчета.<br />
<br />
Для формирования отчета нажмите '''ОК'''.<br />
<br />
Флажок '''Отправить по E-Mail''' доступен при следующих условиях:<br />
* в выборке корреспонденции только от одного клиента;<br />
* в карточке клиента введен хотя бы один адрес электронной почты;<br />
* указаны [[Настройка глобальных параметров#Настройка подключения к почтовому серверу|настройки соединения с сервером исходящей почты]];<br />
* в карточке [[Пользователи#Создание пользователя|текущего пользователя]] введен адрес электронной почты (вкладка '''Настройки''', поле '''E-mail''').<br />
Если флажок установлен, отчет не отображается пользователю, а сразу отправляется по электронной почте и сохраняется на жестком диске во временной папке. Имя файла присваивается автоматической транслитерацией названия клиента.<br />
<br />
'''Код клиента''' — поле '''Шифр''' в карточке корреспонденции.<br />
<br />
=== Жалобы получателей ===<br />
В открывшемся окне укажите даты начала и окончания периода (дата создания заказа) и нажмите '''OK'''.<br />
<br />
В отчете можно увидеть информацию о заказе, выбранную жалобу (карточка корреспонденции, вкладка '''Прочее''') и пользователя, который зафиксировал эту жалобу.<br />
<br />
* '''Заказ''' — номер заказа с вкладки '''Заказы'''.<br />
* '''Конверт''' — номер корреспонденции с вкладки '''Адреса''', столбец «Номер».<br />
<br />
= Межгород =<br />
<br />
== Соблюдение сроков доставки ==<br />
В открывшемся окне укажите даты начала и окончания периода и нажмите '''OK'''. Период зависит от поля '''Дата ввода''' в карточке корреспонденции.<br />
<br />
В отчет попадают все корреспонденции, у которых установлена станция метро '''МЕЖ-ГОРОД'''.<br />
<br />
Аналогичный отчет для филиала можно запустить из [[Филиалы|карточки филиала]] — '''Функции''' > '''Отчет о доставках'''.<br />
<br />
* '''Накладная''' — штрихкод клиента или номер вида «номер заказа-номер корреспонденции»;<br />
* '''Регион / Город''' — город получателя;<br />
* '''Перевозчик''' — если корреспонденция была отправлена манифестом, то указывается перевозчик;<br />
* '''Заказчик''' — заказчик корреспонденции;<br />
* '''Агент''' — если отправлена манифестом, указывается ответственный филиал из манифеста;<br />
* '''Дата заказа''' — дата заказа из карточки корреспонденции;<br />
* '''Дата отправки''' — если отправлена манифестом, максимальная дата отправки из манифеста;<br />
* '''Дата план.''' — дата доставки план. из карточки корреспонденции;<br />
* '''Дата прибытия в город''' — если отправлена манифестом, максимальная дата доставки. Если ее нет, то планируемая дата доставки;<br />
* '''Дата доставки''' — поле '''Дата вручения''' из карточки корреспонденции;<br />
* '''Дата внесения данных''' — поле '''Дата ввода''' в карточке корреспонденции;<br />
* '''Срок доставки''' — разница между датой доставки и датой прибытия в город. Разница включает только рабочие дни;<br />
* '''Срок отчета''' — разница между датой доставки и датой ввода. Разница включает только рабочие дни;<br />
* '''Агентская цена''' — поле '''Агентская цена''' в карточке корреспонденции;<br />
* '''Доп. расходы''' — поле '''Доп. расходы''' в карточке корреспонденции (вкладка '''Межгород''');<br />
* '''Штраф за срок доставки''' — вычисляется штраф агенту, значение поля '''Штраф за день просрочки доставки, %''' указывается в карточке филиала.<br />
*: Штраф = МАКС(«Срок доставки» — 1, 0) * «Штраф за день просрочки доставки, %» * «Агентская цена»;<br />
* '''Штраф за срок отчета»''' — вычисляется штраф агенту, значение поля '''Штраф за день просрочки отчета, %''' указывается в карточке филиала.<br />
*: Штраф = МАКС(«Срок отчета» — 1, 0) * «Штраф за день просрочки отчета, %» * «Агентская цена»;<br />
* '''Итого к оплате''' — итого к оплате агенту с учетом штрафов. Вычисляется по формуле = «Агентская цена» + «Доп. расходы» — МИН («Штраф за срок доставки» + «Штраф за срок отчета», «Агентская цена»).<br />
<br />
=Бухгалтерия=<br />
<br />
См. раздел [[Учет наличных по бухгалтерии|«Учет наличных по бухгалтерии»]].</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D1%82%D1%87%D0%B5%D1%82%D1%8B&diff=14839Пользовательские отчеты2023-09-01T12:47:55Z<p>Sammy: </p>
<hr />
<div>Для управления пользователями выберите пункт «Дополнительные возможности» меню «Отчеты» главного меню программы. Откроется окно дополнительных возможностей.<br />
<br />
Для создания новой дополнительной возможности выберите пункт «Создать» в контекстном меню и введите название новой дополнительной возможности. После этого Вы переходите к редактированию исходного текста пользовательской функции.<br />
<br />
Синтаксис дополнительных возможностей:<br /><br />
Код дополнительной возможности состоит из 2-х или более частей, разделяемых пустой строкой.<br /><br />
Первая часть – описание формы ввода данных пользователем. Если она отсутствует (форма не нужна), то перед второй частью все-равно должна быть пустая строка.<br /><br />
Описание формы состоит из описаний полей ввода – одно поле на одной строке. Описание каждого поля ввода состоит из четырех параметров, разделяемых запятыми:<br />
#input – должно присутствовать всегда – признак объявления поля ввода.<br />
#Имя переменной, которой будет присвоен результат – рекомендуется использовать символ доллара в начале переменной для однозначной идентификации<ref>Заполнение запроса значениями происходит функцией replace, поэтому нельзя допускать, чтобы название одной переменной было подстрокой названия другой переменной. Например, если Вы создаете 2 переменные: $date и $date1, переменная $date1 может оказаться неработоспособной, поскольку ее название включает в себя название другой переменной</ref>.<br />
#Название поля ввода – текстовая строка, которая будет выведена на форме.<br />
#Тип поля ввода. Возможные значения: <br />
::INT – вводит целое число<br />
::STR – вводит строку<br />
::CUSTSTR – вводит строку, но не экранирует ее при подстановке в запрос<br />
::FLOAT – вводит число с плавающей точкой<br />
::CHECK – вводит булево значение (отображается на форме в виде галочки)<br />
::DATE – вводит дату<br />
::TIME – вводит время<br />
::COMBO - вводит текст с возможностью выбора из выпадающего списка<br />
::COMBOLIST - вводит текст из выпадающего списка<br />
::UPDOWN - вводит целое число со стрелками уменьшения/увеличения<br />
::FILESTR - вводит имя файла для открытия файла<br />
::SAVEFILESTR - вводит имя файла для сохранения файла<br />
::CHECKLISTBOX - выводит список с галками<br />
::MEMO- многострочное поле для ввода текста<br />
5. Значение по-умолчанию<br />
<br />
Пример объявления формы:<br />
{|<br />
|<pre>input, $zakaz, Введите номер заказа, int, 555 <br />
input, $date1, Введите дату начала, date<br />
input, $date2, Введите дату конца, date</pre><br />
|<br />
|}<br />
Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы - для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.<br /> <br />
Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел или с новой строки пишется запрос, в котором можно использовать переменные, введенные в первой части, а также зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров<ref>Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи. Поля, имена которых начинаются на тире (-) не будут выведены. Это удобно использовать для полей технического назначения, например, для сортировки</ref>. В строке Report через пробел можно указать название ярлыка листа. Если в нем запятые - текст нужно взять в одинарные кавычки. Если в доп. возможности несколько блоков Report, отчеты будут выведены в один документ Excel на разные листы.<br />
<br />
Пример полного текста дополнительной возможности:<br />
{|<br />
|<pre><br />
input, $zakaz, Введите номер заказа, int <br />
input, $date1, Введите дату начала, date<br />
input, $date2, Введите дату конца, date<br />
<br />
report 'Ярлык листа для отчета'<br />
select 0 as '№ п/п_recno', target as 'Компания', name as 'ФИО'<br />
from address <br />
where zakaz=$zakaz<br />
and date_put between $date1 and $date2</pre><br />
|<br />
|} <br />
Данный код выводит диалоговое окно для ввода пользователем исходных данных, и потом выводит отчет о корреспонденции из указанного заказа, доставленной в указанный промежуток времени.<br />
<br />
Пример использования %AddressQuery% (обратите внимание, что перед текстом должна быть пустая строка, обозначающая начало второй части текста):<br />
{|<br />
|<pre><br />
<br />
report select 0 as '№ п/п_recno', 'Электротовары и аксессуары к ним' as 'Характер груза', case when k.car is not null <br />
then (select concat('Водитель: ',c.number, ' ', ct.name) from cars c join car_types ct on c.type=ct.code where c.code=k.car) <br />
else concat('Пеший: ', k.name) end as 'Вид транспорта', case when (a.number=0) and (a.strbarcode<><nowiki>''</nowiki>) then a.strbarcode<br />
else concat(a.zakaz, '-', a.number) end as 'Номер курьерской накладной', a.address as 'Пункт назначения',<br />
a.rur as 'Страховая сумма в руб.'<br />
from (%addressQuery%) a join kurier k on a.tokurier=k.code</pre><br />
|<br />
|}<br />
Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля.<br />
<br />
Описание таблиц: Описание основных таблиц системы находится в таблице `schema`.`logfields`, общий список таблиц можно посмотреть выполнив запрос «show tables from courier», а структуру конкретной таблицы – «describe table <table_name>»<br />
<br />
<br />
<br />
Пример использования типов полей ввода Combo и Combolist.<br />
<br />
Пример использования Combolist для выбора значения из выпадающего списка приведен ниже:<br />
<br />
{|<br />
|<pre><br />
input, $variable, Выберите клиента, combolist, SELECT company FROM CLIENTS where date_p>now() or Date_P is null order by COMPANY<br />
<br />
<?><br />
showmessage($variable);</pre><br />
|<br />
|}<br />
<br />
Пример использования Combo, позволяющего осуществлять выбор из выпадающего списка путем текстового ввода значения приведен ниже:<br />
<br />
{|<br />
|<pre><br />
input, $combo1, Выберите клиента, combo, SELECT company FROM CLIENTS where date_p>now() or Date_P is null order by COMPANY<br />
<br />
<?><br />
showmessage($combo1);</pre><br />
|<br />
|}<br />
<br />
Пример построения предустановленного списка значений вместо запроса рассмотрен в следующем примере. Значения списка необходимо перечислить через запятую. Пример синтаксиса рассмотрен ниже:<br />
<br />
{|<br />
|<pre><br />
input, $combo1, Выберите клиента, combo, 'Выбор 1, Выбор 2, ''Выбор с , запятой'', ''Выбор с ''' апострофом'''</pre><br />
|<br />
|} <br />
<br />
Пример использования символа 'запятой' в исходном коде рассмотрен на примере ее использования дважды в коде. Первое - в названии поля ввода, второе - в самом Select-запросе для разделения двух полей "company" и "code".<br />
<br />
{|<br />
|<pre><br />
input, $combo1, 'Выберите клиента, какого хотите!', combo, 'SELECT company, code FROM CLIENTS where date_p>now() or Date_P is null order by COMPANY, code'<br />
<br />
<?><br />
showmessage('Выбрали клиента с кодом:'+$combo1.codes);</pre><br />
|<br />
|} <br />
<br />
<br />
=Примечания=<br />
<references/></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14751Дополнительные возможности2023-06-21T07:47:28Z<p>Sammy: /* Настройка всплывающих окон */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
'''PrintItemSticker''' - Вызывается перед печатью наклейки из карточки номенклатуры, для возможности распечатать уникальную наклейку для номенклатуры по заложенным в допвозможности условиям. Содержит %clientbar% - ШК наклейки. Если наклейка распечатана из допвозможности возвращает true, в противном случае false и будет распечатана стандартная наклейка, заложенная в системе<br />
<br />
== Настройка всплывающих окон==<br />
<br />
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). . Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnBeforeBaseSave''' - Вызывается перед сохранением изменений в карточке срочного заказа. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог таблицы base). Теги %date_put%, %time_put%, %message% - содержат дату вручения, время вручения и инфо о доставке соответственно. Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском<br />
<br />
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
'''DAILY''' - задание выполняемое один раз в день<br />
<br />
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
== Настройка документов ==<br />
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
'''GetTypeShippingPlace''' - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
'''OnSchetChanged''' - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
'''ExceptionsForAPK''' - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется).<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
'''OnEveryStartApp''' - выполняется при запуске программы.<br />
<br />
'''OnEveryCloseApp''' - выполняет при закрытии программы.<br />
<br />
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source><br />
<br />
'''OnAfterPreassemblyScan''' - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.<br />
<br />
'''OnGeocodeScript''' - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:<br />
*$address - адрес для геокодирования;<br />
*$town - код города;<br />
*$street и $home - упрощенный адрес;<br />
<br />
Скрипт должен вернуть следующие переменные : <br />
*$lon и $lat - координаты ;<br />
*$goodaddress - нормализованный адрес (не обязательно);<br />
<br />
<source lang="sql"><br />
<?> <br />
rem(2023-05-16 Подключение к геокодеру далли, тикет 75769);<br />
set($response, HTTPPOST('http://x.wizbox.ru/AhanterCleanseAddress',<br />
'{"query":'+ FormatTextJSON($address)+ '}', <br />
'','','','',<br />
'post', 'application/json', 10000));<br />
<br />
if($response!'',<br />
new('TJSON', 'json');<br />
set($e, try(<br />
json.SetText($response);<br />
json.OpenChild('geo_data');<br />
json.OpenChild('mid');<br />
set($lat, sqlfloat(json.ChildNodeValue('lat')));<br />
set($lon, sqlfloat(json.ChildNodeValue('lon')));<br />
));<br />
if($e, error('Ошибка в разборе ответа: '+$e), '');<br />
, error('Пришел пустой ответ от геокодера')<br />
);<br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%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%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B8_%D0%BA%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D0%BA%D0%BE%D0%B2&diff=14694Настройка модуля печати кассовых чеков2023-05-23T16:21:28Z<p>Sammy: /* Настройка чековой службы */</p>
<hr />
<div>Модуль интеграции с фискальным регистратором (печати кассовых чеков) предназначен для обеспечения возможности взаимодействия системы MeaSoft с фискальными регистраторами. Он представляет собой [http://ru.wikipedia.org/wiki/Службы_Windows службу Windows], которая подключается к БД системы и к фискальному регистратору.<br />
<br />
Одна установка службы поддерживает один регистратор.<br />
<br />
MeaSoft поддерживает неограниченное количество регистраторов, в том числе и зарегистрированных на одно юридическое лицо. Чтобы подключить несколько регистраторов, установите соответствующее количество модулей интеграции с ФР.<br />
<br />
Модуль печати кассовых чеков состоит из следующих файлов:<br />
* CheckServiceExe.exe — исполняемый файл службы;<br />
* CheckServiceExe.ini — конфигурационный файл;<br />
* CheckServiceExe.log — файл журнала. Если его нет, создается при запуске службы.<br />
<br />
= Применение =<br />
<br />
Чековая служба нужна, если:<br />
* установлена касса Штрих-М — для печати чеков в офисной системе и мобильном приложении курьера.<br />
:При закрытии заказа курьером в мобильном приложении для печати чеков нужен [[Настройка модуля автоматизации|модуль автоматизации]], который будет отправлять чеки, поскольку прямой связи мобильного приложения с Штрих-М нет; <br />
* установлена касса LIFE PAY — для ручной печати чека из офисного приложения.<br />
<br />
Для печати чека через LIFE PAY и Штрих-Нано-Ф при закрытии заказа курьером в мобильном приложении чековая служба не нужна.<br />
<br />
'''Примечание'''. Касса Штрих-М работает с чековой службой только при подключении через COM-порт или USB и одновременно передает данные в ОФД. При подключении через USB на компьютере настраивается виртуальный COM-порт.<br />
<br />
= Установка чековой службы=<br />
<br />
# Скопируйте файл CheckServiceExe.exe в любую папку на компьютере:<br />
#* для кассы Штрих-М — на тот компьютер, к которому физически подключена касса;<br />
#* для кассы LIFE PAY – на любой компьютер, потому что у LIFE PAY облачная фискализация.<br />
# Создайте ярлык для файла CheckServiceExe.exe.<br />
# В свойствах ярлыка на вкладке '''Ярлык''' в поле '''Объект''' после имени файла добавьте <code>/install</code>:[[Файл:Установка чековой службы.png|none]]<br />
# Сохраните и запустите ярлык от имени администратора. В результате служба появится в списке служб. Для просмотра списка в контекстном меню '''Мой компьютер''' выберите '''Управление''' > '''Службы'''.<br />
# В папке с чековой службой создайте INI-файл или загрузите шаблоны: [https://courierexe.ru/download/checkservice/lifepay/CheckServiceExe.ini LIFE PAY], [https://courierexe.ru/download/checkservice/shtrih/CheckServiceExe.ini Штрих-М].<br />
# Откройте INI-файл, укажите [[#Настройка чековой службы |параметры]] для своей базы и сохраните изменения.<br />
# В контекстном меню элемента '''Мой компьютер''' выберите '''Управление''' > '''Службы''', убедитесь, что режим запуска службы установлен в положение «Автоматически», и запустите чековую службу. Если установка и настройка прошли успешно, то первый чек будет сразу распечатан на кассе. <br />
<br />
Если чек не печатается, смотрите причины в файле логов чековой службы CheckServiceExe.log. Он находится в папке чековой службы. Подробнее см. раздел «[[Устранение неполадок]]».<br />
<br />
Можно установить несколько независимых экземпляров службы на одну систему, переименовав exe-файл. Название службы в Windows, файлы настроек и логов будут иметь соответствующие имена.<br />
<br />
= Настройка чековой службы =<br />
Откройте файл CheckServiceExe.ini любым текстовым редактором, например [http://ru.wikipedia.org/wiki/Блокнот_(программа) блокнотом].<br />
<br />
В разделе <nowiki>[COMMON]</nowiki> измените или добавьте следующие параметры:<br />
<br />
{|class="wikitable" style="width: 80%;" "background-color:#ffffff;"<br />
!style="width: 20%;"|Параметр<br />
!style="width: 40%;"| Штрих-М<br />
!style="width: 40%;"| LIFE PAY<br />
|-<br />
|<code>Param</code><br>Дополнительные параметры фискального регистратора<br />
|Пример: <code>Param=30, 6</code><br>Обязательный параметр, значения указываются через запятую. <br>Первое значение — пароль пользователя ФР, по умолчанию 30. Второе значение — скорость работы ФР. Чтобы узнать скорость, используйте утилиту «Тест драйвера», которая поставляется с кассой: откройте утилиту, нажмите на кнопку '''Настройка свойств''' > '''Поиск оборудования'''. Отобразится подключенный ФР и его <spoiler text="скорость работы">Принимаемые значения параметра '''Скорость порта''':<br>1 — 4800 кбит/с,<br> 2 — 9600 кбит/с,<br> 3 — 19200 кбит/с,<br> 4 — 38400 кбит/с,<br> 5 — 57600 кбит/с,<br> 6 — 115200 кбит/с.<br>Значение параметра скорости должно совпадать с установленным режимом самого фискального регистратора. По умолчанию он настроен на скорость 115200, однако иногда этот параметр необходимо уменьшить для повышения стабильности работы регистратора. Также были случаи сброса скорости в положение 4800 пользователями, что возможно при включении ФР с зажатой кнопкой промотки чековой ленты (см. [http://courierexe.ru/download/ext_manual/Shtrih_user_manual.pdf руководство пользователя]). Таким образом, начальная настройка в этом режиме исключит вероятность отказа системы из-за ошибочного сброса настройки в ФР. Скорость работы в ФР можно задать в утилите «Тест драйвера» в окне «Настройка свойств» кнопкой '''Установить параметры'''.<br>Например, чтобы установить для модуля настройки подключения к ФР следующие параметры: пароль доступа — 30, скорость порта — 4800, укажите строку: <br> Param=30, 1</spoiler>.<br />
|Пример: <code>Param=91defdc4556fc182680982e1b2am8d6f, 79011111111,,64</code><br>Необязательный параметр. Если значения указаны в [[Фирмы#Добавление фискального регистратора|фискальном регистраторе]], можно оставить строку в таком виде: <code>#Param=</code><br>Первое значение — 32-значный АПИ-ключ из ЛК LIFE PAY.<br>Второе значение — номер телефона без +, на который зарегистрирован ЛК LIFE PAY. <br>Третье значение — по умолчанию пустое, но можно указать путь к АПИ лайфпей (тикет 76001). Укажите путь https://sapi.life-pay.ru/cloud-print/ - для ФФД 1.05 И 1.1.<br>Четвертое значение — агентский признак, если есть.<br />
|-<br />
|<code>Port</code><br>Номер [http://ru.wikipedia.org/wiki/Последовательный_порт COM-порта] фискального регистратора. Если регистратор подключен через [http://ru.wikipedia.org/wiki/USB USB-порт], драйвер эмулятора порта все равно создает виртуальный COM-порт, номер которого устанавливается в его свойствах (в [http://ru.wikipedia.org/wiki/Диспетчер_устройств диспетчере устройств]), а также номер порта меняется в зависимости от разъема USB, к которому подключено устройство.<br />
|Пример: <code>Port=5</code><br>Обязательный параметр.<br />
|Пример: <code>Port=1 </code><br>Необязательный параметр, можно указывать значение 1.<br />
|-<br />
|<code>CashRegister</code><br><rspoiler text="Код фискального регистратора">Чтобы его узнать, выберите в главном меню системы пункт '''Справочники''' > '''Фирмы''', откройте карточку фирмы, на которую зарегистрирован фискальный регистратор, перейдите на закладку '''Устройства''', убедитесь, что в выпадающем списке выбрано значение '''Фискальные регистраторы'''. В списке фискальных регистраторов вы увидите код. Если запись для регистратора еще не создана или вы планируете установить дополнительную кассу, добавьте новый ФР.</rspoiler> в базе данных.<br />
|colspan="2" |Пример: <code>CashRegister=2 </code> <br> Обязательный параметр.<br> <spoiler text="Что еще можно указать">Можно указывать наборы обслуживаемых ФР двумя способами:<br />
* через запятую или тире или их комбинации указать несколько кодов;<br />
* условие SQL-запроса. Например <code>AND cr.DeviceType=3</code> для всех доступных ФР LIFE PAY.<br />
<br />
Тогда они все будут обслуживаться одним объектом подключения к ФР. Что это значит: для Штрих-М у объекта открыт COM-порт при старте, и поменяться он не может. Все чеки пойдут в один ФР. Для LIFE PAY — в созданный объект передается поле '''Серийный номер''', откуда он берет авторизацию, т.о. чеки могут отправляться в различные аккаунты. Главное, что тип кассы у всех ФР должен быть один — служба не сможет переключиться например с LIFE PAY на ApiShip.</spoiler><br />
|-<br />
|<code>ServerName</code><br>Имя или IP-адрес сервера, на котором находится БД MeaSoft. Сервер должен быть доступен по сети с компьютера, к которому подключена касса.<br />
|colspan="2" |Пример: <code>ServerName=srv01 </code> <br> Обязательный параметр.<br />
|-<br />
|<code>DatabaseName</code><br>Имя базы данных (по умолчанию «courier»)<br />
|colspan="2" |Пример: <code>DataBaseName=courier</code> <br>Обязательный параметр.<br />
|-<br />
|<code>UserName</code><br>Имя пользователя базы данных<br />
|colspan="2" |Пример: <code>UserName=check</code> <br>Обязательный параметр. Пользователя check нужно создать для определения запросов чековой службы, для этого обратитесь в техподдержку.<br />
|-<br />
|<code>Password</code><br>Пароль пользователя базы данных<br />
|colspan="2" |Пример: <code>Password=password </code> <br>Обязательный параметр.<br />
|-<br />
|<code>DBPort</code><br>Порт базы данных<br />
|colspan="2" |Пример: <code>DBPort =3306 </code> <br>Обязательный параметр. По умолчанию 3306. Проверить порт можно в любом ярлыке офисной программы.<br />
|-<br />
|<code>Device</code><br />
|1 — ФР Штрих-М (по умолчанию),<br> 2 — чековый принтер Штрих-М (протокол Epson ESC/P)<br />
|3 — сервис фискализации LIFE PAY <br> 9 - WebKassa<br />
|-<br />
|<code>AgentFlags</code><br>Флаги тега 1057 для передачи в кассу при агентском чеке<br />
|colspan="2" | Пример: <code>AgentFlags=4</code><br>Обязательный параметр, если курьерская служба — платежный агент. Чтобы не передавать признаки платежного агента (если в кассе нет этого признака), укажите 0. Если параметр не указан, передается значение по умолчанию 4. <spoiler text="Возможные значения"><br />
* 1 — банковский платежный агент,<br />
* 2 — банковский платежный субагент,<br />
* 4 — платежный агент,<br />
* 8 — платежный субагент,<br />
* 16 — поверенный,<br />
* 32 — комиссионер,<br />
* 64 — агент.<br />
</spoiler><br />
|-<br />
|<code>PrintKurier</code><br />
|colspan="2" |1 — печать ФИО курьера на чеке.<br />
|-<br />
|<code>PrintSeller</code><br />
|colspan="2" |1 — печать заказчика на чеке.<br> Если включено, печатается юр. наименование, ИНН и телефон клиента.<br>В [[Клиенты и партнеры#Реквизиты|карточке клиента]] на вкладке '''Реквизиты''' должно быть заполнено поле '''Полное название'''.<br> Этот параметр никак не связан с тегами фискального документа 1225 и 1226 и просто выводит текстом на бумагу дополнительный текст там, где это возможно.<br />
|-<br />
|<code>PrintCashier</code><br>Печатать имя кассира на чеке (тег 1021). По умолчанию 1.<br />
|colspan="2" |1 — кассир берется из строки чека,<br>0 — не печатается,<br> другое число — код нужного сотрудника.<br>Можно писать подзапрос вида <code>if(a.cl=1, 5, 6)</code>.<br />
|-<br />
|<code>EmailPriority</code><br />
|colspan="2" |1 — отправка чека по e-mail приоритетнее, чем SMS.<br />
|-<br />
|<code>AddStr</code><br />
|colspan="2" | Пользовательская строка, которая печатается на всех чеках.<br />
|-<br />
|}<br />
<br />
= Настройка ФР Штрих-М =<br />
[[Файл:ShtrihTableList.png|thumb|100px|right]]<br />
'''Внимание.''' Для использования программы «Тест драйвера» нужно остановить службу «CheckService».<br />
<br />
=== Обрезка чека ===<br />
Обрезка чеков настраивается в таблице 1 фискального регистратора, параметр «Отрезка чека». Установите значение 1 чтобы ФР полностью отрезал каждый чек, или 2, чтобы он частично надрезал, чтобы чеки все-равно были лентой. Наша система не посылает на ККМ команду обрезки чека во избежание двойной обрезки.<br />
<br />
=== Отчет по секциям ===<br />
[[Файл:ShtrihZReportSect.png|thumb|100px|right]]<br />
В системе предусмотрено разнесение различных фискальных операций по секциям фискального регистратора. По-умолчанию суточные отчеты (X и Z-отчеты) отображают общие суммы по всем секциям. В ФР есть возможность сделать разбивку этих отчетов по секциям. Для этого в таблице 1 фискального регистратора, параметр «Тип суточного отчета» установите в значение 1.<br />
<br />
=== Проверка корректности регистрации в ОФД ===<br />
<gallery style="float: right" mode="nolines"><br />
Номер фиск документа.png<br />
Читаем отчет регистрации.png<br />
</gallery><br />
Для удовлетворения большинства потребностей наших клиентов в правильной фискализации в соответствии с 54-ФЗ, необходимо иметь [[Оборудование#Фискальный регистратор|ФР]] с фискальным накопителем (ФН) поддерживающие версию фискальный документ (ФД) версии 1.05. Так же необходимо зарегистрировать ФР в ОФД с признаком агента (тег 1057), так как курьерские службы обычно выступают в качестве платежного агента. Для соблюдения всех этих требований нужно обратиться в организацию, обслуживающую ваш фискальный регистратор с соответствующей просьбой. В некоторых случаях для поддержки может понадобиться перепрошивка ФР, замена ФН, перерегистрация в ОФД.<br />
После этих операций, можно убедиться, что все признаки, нас интересующие, установлены корректно. Для этого сначала нужно узнать номер документа фискализации. В программе «Тест драйвера» слева откроем раздел «11. ФН», в закладках «Фискализация ФН», нажмем кнопку «Запрос итогов фискализации» (см. скрин-шот). В результирующем отчете видим номер фискального документа о фискализации.<br />
Затем идем на закладку «Данные», Вводим номер документа, ставим галку «Показ. номера тегов», и нажимаем «Прочитать документ». В результирующем тексте убеждаемся в использовании версии ФД 1.05 — теги 1209 «Версия ФФД» и 1189 «Версия ФФД ККМ» должны иметь значения 2, тег 1057 «Призн. плат. агента» — должен быть, вероятно, 4 (это регистр битов, значение «4» соответствует установленному биту 2 «Платежный агент»).<br />
<br />
'''Внимание'''. Данные фискального документа хранятся в фискальном накопителе 30 дней, после этого срока посмотреть документ регистрации (перерегистрации) в ФН будет невозможно.<br />
<br />
=== Проверка корректности передачи тегов в ОФД ===<br />
<gallery style="float: right" mode="nolines"><br />
Shtrih LastDoc.png<br />
Shtrih check tags.png<br />
</gallery><br />
Убедиться в корректности передаваемых в ОФД значений тегов можно следующим образом: Сначала узнаем номер фискального документа — его можно посмотреть в чеке (как бумажном, так и электронном), или в приложении «Тест драйвера» в разделе «11. ФН», в закладках «Состояние ФН», нажмем кнопку «Запрос статуса ФН» и посмотрим «Номер последнего ФД» (см. скрин-шот). Далее на закладке «Данные» введем этот номер в поле «№Док.», и нажмем «Прочитать документ». В результирующем тексте убеждаемся в отправке тегов 1008, 1057, 1073, 1171, 1215 и прочих (см. скрин-шот).<br />
<br />
Теги 1225 и 1226 (Наименование и ИНН поставщика) поддерживаются Штрих-М в прошивке от 24.10.2018 и версией чековой службы от 19.03.2019<br />
<br />
К сожалению, эти передаваемые данные далеко не всегда отображаются в бумажном и/или электронном чеках, это зависит от самого ФР и/или ОФД соответственно. Однако по данной инструкции мы можем убедиться, что со своей стороны передали все данные, необходимые для соответствия 54-ФЗ.<br />
<br />
= Удаление службы=<br />
Для корректного удаления службы запустите исполняемый файл CheckServiceExe.exe с параметром командной строки <code>/uninstall</code>.<br />
<br />
= Примечания =<br />
Поскольку при запуске служба открывает подключение к фискальному регистратору, и использует его все время своей работы, другие программы (например «Тест драйвера» и т. д.) при попытке подключения выдадут ошибку «Невозможно открыть порт, он используется другим приложением». Чтобы избежать этого, остановите службу модуля на время использования других программ.<br />
<br />
= Устранение неполадок =<br />
1. В случае сбоя работы кассы ошибку можно посмотреть в файле CheckServiceExe.log<br />
<br />
2. Для включения логирования от драйвера Штрих-М в чековой надо установить флаг fDriver.LogOn:= true. По умолчанию false<br />
<br />
3. Ошибки условно можно разделить на 3 категории:<br />
{|<br />
!Ошибка<br />
!Симптомы<br />
!Возможные причины<br />
!Способы устранения<br />
|-<br />
|Нет связи с сервером<br />
|Касса не печатает, в логе сообщения вида «Unknown MySQL server host ''» или «Can’t connect to MySQL server on…».<br />
|Неверно настроено подключение к серверу, не работает сервер, сеть.<br />
|Проверить настройки подключения в файле CheckServiceExe.ini, проверить доступность сервера с этого компьютера.<br />
|-<br />
|Нет связи с фискальным регистратором<br />
|Касса не печатает, в логе сообщения вида «Нет связи код: −1, Режим: 0, Подрежим: 0»<br />
|ФР Выключен, ФР подключен не к тому разъему, ФР настроен не на ту скорость<br />
|Проверьте, что ФР включен, подключен к компьютеру, именно в тот порт, в котором он настраивался. Попробуйте отключить службу чеков, открыть программу «Тест драйвера», выполнить поиск оборудования. Если она находит ФР — сравнить настройки подключения, найденные тестом драйвера с тем, что прописано в CheckServiceExe.ini. В единичных случаях проблема может заключаться в драйвере переходника COM-USB, попробуйте удалить этот переходник в диспетчере устройств windows, и попросить его поискать устройства заново.<br />
|-<br />
|Некорректная работа фискального регистратора.<br />
|Касса печатает заголовок чека, потом ошибку, потом надпись «Чек аннулирован», и так бесконечно по кругу.<br />
|Аппаратная ошибка ФР, некорректный чек, сформированный системой.<br />
|Если текст ошибки, который печатается на чеке (он же сохраняется и в лог-файл) содержит информацию об [http://ru.wikipedia.org/wiki/ЭКЛЗ ЭКЛЗ] (например «ЭКЛЗ: Неверные дата или время код: 168, Режим: 3, Подрежим: 0») — нужно обратиться в компанию, с которой у вас заключен договор о поддержке кассы, сообщить им текст ошибки. В остальных случаях — обратиться в службу поддержки MeaSoft для выяснения причины и ее устранения.<br />
|-<br />
|Ошибка при формировании отчета без гашения (X-отчет)<br />
|Касса печатает X-отчет бесконечно по кругу. В протоколе работы чековой службы выдается сообщение «Команда не поддерживается в данном режиме код: 115, Режим: 6, Подрежим: 0».<br />
|В кассовом аппарате не установлены дата и время.<br />
|Необходимо через драйвер ФР установить текущую дату и время, затем cохранить настройку. В остальных случаях — обратиться в службу поддержки MeaSoft для выяснения причины и ее устранения.<br />
|}<br />
<br />
4. [https://docs.google.com/spreadsheets/d/19Mn5syH70XwFdg6Pe2fhYM17SNHGuOJDvQEQXHxSz54/edit#gid=0 Список ошибок протокола Штрих и их решение]<br />
<br />
= Печать чеков =<br />
<br />
=== При предоплате ===<br />
Если продавец передаёт предоплаченный товар курьерской службе, чек на предоплату формирует продавец. Курьерская служба должна оформить чек на передачу товара, так как ККТ обязано использовать лицо, осуществляющее расчёты с покупателем (п. 1 ст. 4.3 54-ФЗ).<br />
<br />
Поскольку передача заказа в зачёт предоплаты относится к расчётам и этим занимается курьер, пробить кассовый чек должен именно он.<br />
<br />
В таком случае покупатель получает два чека: первый чек выдаётся, когда клиент вносит предоплату, а второй чек — когда он получает товар. Подробнее см. [https://astral.ru/articles/ofd/12791 в статье].<br />
<br />
=== В офисном приложении ===<br />
Чековая служба не запрашивает печать бумажного чека, если заказ доставлен курьером: бумажный чек тратит бумагу, и если бумага закончится, то печать чеков остановится. А эту бумагу курьер все равно получателю отдать не сможет.<br />
<br />
Если клиент находится перед вами, в офисе, то чек печатается — соблюдается одно из условий:<br />
* вы отмечаете доставленным отправление, у которого выбрана доставка в пункт выдачи, совпадающий с текущим ответственным филиалом;<br />
* вы принимаете оплату за доставку заказа от заказчика, в этом случае вы вносите платеж на вкладке '''Заказы''' в карточке заказа.<br />
<br />
=== LIFE PAY: отличия между чеками в офисном и мобильном приложении ===<br />
{|class="wikitable" align="none" style="width: 80%; background-color:#ffffff;<br />
!style="width: 20%|Отличие<br />
!style="width: 40%|Офисное приложение<br />
!style="width: 40%|Мобильное приложение<br />
|-<br />
|Авторизация. Тег <code>login</code>||Общий номер телефона<br><br>Его можно указать в ini-файле чековой службы или 2-м параметром в поле '''Cерийный номер''' в карточке ФР в программе.<br>Чекопечатающее устройство (ЧПУ) в этом случае не предполагается, а авторизация нужна.||Мобильный телефон курьера<br><br>По этому параметру LIFE PAY определяет, на какой чековый принтер отправлять копию чека.<br />
|-<br />
|Имя кассира. Тег <code>cashier_name</code>||Параметр <code>PrintCashier</code> в ini-файле<br><br>Если включено, передается ФИО сотрудника, инициировавшего печать.<br>Офисные сотрудники обычно официально трудоустроены, поэтому поле заполняется.||Не указывается<br><br>В большинстве случаев курьеры не оформлены официально, показывать налоговой их не нужно.<br />
|-<br />
| Режим печати чека. Тег <code>mode</code>.||Печать на бумаге на ФР и отправка SMS или по электронной почте<br><br>В офисе предполагается, что это самовывоз — покупатель стоит перед вами, и вы пробиваете чек и сразу из ФР его отдаете покупателю||Отправка SMS или по электронной почте<br><br>Когда курьер доставляет заказ, он печатает бумажный чек на ЧПУ. Бумажные чеки в отсутствие ЧПУ в офисе [[#Печать чеков в офисном приложении|не печатаются]]. Фискализировать чек, не отправляя его ни на бумагу, ни на ФР, ни по почте/SMS, невозможно, это аппаратно не позволяет делать ФР. Можно на уровне ОФД отключить SMS, если они не нужны, и вам достаточно бумажного чека из ЧПУ.<br />
|}<br />
<br />
Потенциально могут быть еще небольшие различия в заполнении данных агента, поставщика. Если есть пожелания к конкретным полям, обращайтесь.<br />
<br />
= Отключение печати бумажных чеков =<br />
<br />
Чтобы отключить печать бумажных чеков на фискальном регистраторе Штрих-М:<br />
# Отключите чековую службу, чтобы она не мешала работе программы «Тест драйвера ФР». Для этого в контекстном меню элемента «Этот компьютер» выберите '''Управление'''. Откроется оснастка Windows «Управление компьютером». В панели слева разверните узел «Службы и приложения», выберите элемент «Службы», выделите в списке службу '''CheckService''' и нажмите '''Остановить службу'''.[[Файл:Настройка ФР управление.png|none|900 px]]<br />
# Запустите программу «Тест драйвера ФР».<br />
# Нажмите на кнопку '''Настройка свойств'''. Откроется окно «Свойства».[[Файл:Настройка ФР драйвер.png|none]]<br />
# Нажмите на кнопку '''Проверка связи''', чтобы проверить связь с кассой. Если в поле '''Код ошибки''' отобразился модуль кассы, все хорошо. Если отобразилась ошибка, например «Нет связи», в этом окне в поле '''Подключение''' выберите значение '''Локально''', в поле '''COM порт''' выберите порт, к которому подключена касса. Посмотреть номер порта можно через диспетчер устройств.<br />
# Нажмите на кнопку '''Таблицы'''. Откроется окно «Таблицы».<br />
# Найдите в списке таблицу 17 «Региональные настройки» и дважды щелкните по элементу. Откроется окно «Региональные настройки».<br />
# В строке «Поле 7. Rus не печатать документ» установите значение 2 и нажмите ENTER.<br />
# Закройте все окна программы «Тест драйвера ФР». <br />
# Включите чековую службу.<br />
<br />
Печать бумажных чеков отключена, при этом чеки отправляются в ОФД. <br />
<br />
Чтобы отключить печать чеков на других ФР, заклейте датчик кассовой ленты скотчем, бумажную ленту достаньте.<br />
<br />
= Ошибки фискализации =<br />
<br />
[https://docs.google.com/spreadsheets/d/19Mn5syH70XwFdg6Pe2fhYM17SNHGuOJDvQEQXHxSz54/edit#gid=0 Список ошибок протокола Штрих и их решение]<br />
<br />
При вызове функций драйвера Штрих-М нельзя указывать круглые скобки, получаем исключение. Неправильно fDriver.FNSendSTLVTagOperation(); правильно fDriver.FNSendSTLVTagOperation;<br />
<br />
== Ошибка программирования реквизита 1226 ==<br />
Ошибка тега 1226 означает, что не был передан ИНН поставщика.<br />
<br />
ИНН передается, если:<br />
# Передан признак агента.<br />
# ИНН поставщика указан в карточке клиента в Measoft или в контейнере вложения в [[API#Описание элементов для оформления заказа|API-запросе]] (параметр <code>suppINN</code>).<br />
# Наименование поставщика указано в карточке клиента в Measoft (поле '''[[Клиенты и партнеры#Реквизиты|Полное наименование]]''') или в контейнере вложения в API-запросе (параметр <code>suppcompany</code>).<br />
<br />
Приоритет имеет значение, указанное в контейнере вложения.<br />
<br />
== Ошибка программирования реквизита 1171 ==<br />
Ошибка тега 1171 означает, что не был передан номер телефона поставщика.<br />
<br />
Номер телефона поставщика должен быть указан в контейнере вложения [[API#Описание элементов для оформления заказа|API-запросе]] (параметр <code>suppphone</code>), карточке отдела или карточке клиента MeaSoft, на вкладке '''Реквизиты''' в поле '''Тел'''.<br />
<br />
Приоритет имеет значение, указанное в контейнере вложения.<br />
<br />
== Ошибка программирования реквизита 1222 ==<br />
Тег 1222 необходимо передавать совместно с тегом 1223 и только для версий ФФД 1.2 и выше. <br />
Тег 1222 передается командой FNSendTagOperation, тег 1223 формируется командами FNBeginSTLVTag и FNSendSTLVTagOperation. <br />
В тег 1223 могут быть вложены теги тег 1073 "телефон платежного агента" и тег 1026 "наименование оператора перевода". Телефон обязан передаваться в формате +7цццццццццц без скобок, тире и пробелов</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%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%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B8_%D0%BA%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D0%BA%D0%BE%D0%B2&diff=14693Настройка модуля печати кассовых чеков2023-05-23T16:20:47Z<p>Sammy: /* Настройка чековой службы */</p>
<hr />
<div>Модуль интеграции с фискальным регистратором (печати кассовых чеков) предназначен для обеспечения возможности взаимодействия системы MeaSoft с фискальными регистраторами. Он представляет собой [http://ru.wikipedia.org/wiki/Службы_Windows службу Windows], которая подключается к БД системы и к фискальному регистратору.<br />
<br />
Одна установка службы поддерживает один регистратор.<br />
<br />
MeaSoft поддерживает неограниченное количество регистраторов, в том числе и зарегистрированных на одно юридическое лицо. Чтобы подключить несколько регистраторов, установите соответствующее количество модулей интеграции с ФР.<br />
<br />
Модуль печати кассовых чеков состоит из следующих файлов:<br />
* CheckServiceExe.exe — исполняемый файл службы;<br />
* CheckServiceExe.ini — конфигурационный файл;<br />
* CheckServiceExe.log — файл журнала. Если его нет, создается при запуске службы.<br />
<br />
= Применение =<br />
<br />
Чековая служба нужна, если:<br />
* установлена касса Штрих-М — для печати чеков в офисной системе и мобильном приложении курьера.<br />
:При закрытии заказа курьером в мобильном приложении для печати чеков нужен [[Настройка модуля автоматизации|модуль автоматизации]], который будет отправлять чеки, поскольку прямой связи мобильного приложения с Штрих-М нет; <br />
* установлена касса LIFE PAY — для ручной печати чека из офисного приложения.<br />
<br />
Для печати чека через LIFE PAY и Штрих-Нано-Ф при закрытии заказа курьером в мобильном приложении чековая служба не нужна.<br />
<br />
'''Примечание'''. Касса Штрих-М работает с чековой службой только при подключении через COM-порт или USB и одновременно передает данные в ОФД. При подключении через USB на компьютере настраивается виртуальный COM-порт.<br />
<br />
= Установка чековой службы=<br />
<br />
# Скопируйте файл CheckServiceExe.exe в любую папку на компьютере:<br />
#* для кассы Штрих-М — на тот компьютер, к которому физически подключена касса;<br />
#* для кассы LIFE PAY – на любой компьютер, потому что у LIFE PAY облачная фискализация.<br />
# Создайте ярлык для файла CheckServiceExe.exe.<br />
# В свойствах ярлыка на вкладке '''Ярлык''' в поле '''Объект''' после имени файла добавьте <code>/install</code>:[[Файл:Установка чековой службы.png|none]]<br />
# Сохраните и запустите ярлык от имени администратора. В результате служба появится в списке служб. Для просмотра списка в контекстном меню '''Мой компьютер''' выберите '''Управление''' > '''Службы'''.<br />
# В папке с чековой службой создайте INI-файл или загрузите шаблоны: [https://courierexe.ru/download/checkservice/lifepay/CheckServiceExe.ini LIFE PAY], [https://courierexe.ru/download/checkservice/shtrih/CheckServiceExe.ini Штрих-М].<br />
# Откройте INI-файл, укажите [[#Настройка чековой службы |параметры]] для своей базы и сохраните изменения.<br />
# В контекстном меню элемента '''Мой компьютер''' выберите '''Управление''' > '''Службы''', убедитесь, что режим запуска службы установлен в положение «Автоматически», и запустите чековую службу. Если установка и настройка прошли успешно, то первый чек будет сразу распечатан на кассе. <br />
<br />
Если чек не печатается, смотрите причины в файле логов чековой службы CheckServiceExe.log. Он находится в папке чековой службы. Подробнее см. раздел «[[Устранение неполадок]]».<br />
<br />
Можно установить несколько независимых экземпляров службы на одну систему, переименовав exe-файл. Название службы в Windows, файлы настроек и логов будут иметь соответствующие имена.<br />
<br />
= Настройка чековой службы =<br />
Откройте файл CheckServiceExe.ini любым текстовым редактором, например [http://ru.wikipedia.org/wiki/Блокнот_(программа) блокнотом].<br />
<br />
В разделе <nowiki>[COMMON]</nowiki> измените или добавьте следующие параметры:<br />
<br />
{|class="wikitable" style="width: 80%;" "background-color:#ffffff;"<br />
!style="width: 20%;"|Параметр<br />
!style="width: 40%;"| Штрих-М<br />
!style="width: 40%;"| LIFE PAY<br />
|-<br />
|<code>Param</code><br>Дополнительные параметры фискального регистратора<br />
|Пример: <code>Param=30, 6</code><br>Обязательный параметр, значения указываются через запятую. <br>Первое значение — пароль пользователя ФР, по умолчанию 30. Второе значение — скорость работы ФР. Чтобы узнать скорость, используйте утилиту «Тест драйвера», которая поставляется с кассой: откройте утилиту, нажмите на кнопку '''Настройка свойств''' > '''Поиск оборудования'''. Отобразится подключенный ФР и его <spoiler text="скорость работы">Принимаемые значения параметра '''Скорость порта''':<br>1 — 4800 кбит/с,<br> 2 — 9600 кбит/с,<br> 3 — 19200 кбит/с,<br> 4 — 38400 кбит/с,<br> 5 — 57600 кбит/с,<br> 6 — 115200 кбит/с.<br>Значение параметра скорости должно совпадать с установленным режимом самого фискального регистратора. По умолчанию он настроен на скорость 115200, однако иногда этот параметр необходимо уменьшить для повышения стабильности работы регистратора. Также были случаи сброса скорости в положение 4800 пользователями, что возможно при включении ФР с зажатой кнопкой промотки чековой ленты (см. [http://courierexe.ru/download/ext_manual/Shtrih_user_manual.pdf руководство пользователя]). Таким образом, начальная настройка в этом режиме исключит вероятность отказа системы из-за ошибочного сброса настройки в ФР. Скорость работы в ФР можно задать в утилите «Тест драйвера» в окне «Настройка свойств» кнопкой '''Установить параметры'''.<br>Например, чтобы установить для модуля настройки подключения к ФР следующие параметры: пароль доступа — 30, скорость порта — 4800, укажите строку: <br> Param=30, 1</spoiler>.<br />
|Пример: <code>Param=91defdc4556fc182680982e1b2am8d6f, 79011111111,,64</code><br>Необязательный параметр. Если значения указаны в [[Фирмы#Добавление фискального регистратора|фискальном регистраторе]], можно оставить строку в таком виде: <code>#Param=</code><br>Первое значение — 32-значный АПИ-ключ из ЛК LIFE PAY.<br>Второе значение — номер телефона без +, на который зарегистрирован ЛК LIFE PAY. <br>Третье значение — по умолчанию пустое (, но можно указать путь к АПИ лайфпей (тикет 76001). Укажите путь https://sapi.life-pay.ru/cloud-print/ - для ФФД 1.05 И 1.1.<br>Четвертое значение — агентский признак, если есть.<br />
|-<br />
|<code>Port</code><br>Номер [http://ru.wikipedia.org/wiki/Последовательный_порт COM-порта] фискального регистратора. Если регистратор подключен через [http://ru.wikipedia.org/wiki/USB USB-порт], драйвер эмулятора порта все равно создает виртуальный COM-порт, номер которого устанавливается в его свойствах (в [http://ru.wikipedia.org/wiki/Диспетчер_устройств диспетчере устройств]), а также номер порта меняется в зависимости от разъема USB, к которому подключено устройство.<br />
|Пример: <code>Port=5</code><br>Обязательный параметр.<br />
|Пример: <code>Port=1 </code><br>Необязательный параметр, можно указывать значение 1.<br />
|-<br />
|<code>CashRegister</code><br><rspoiler text="Код фискального регистратора">Чтобы его узнать, выберите в главном меню системы пункт '''Справочники''' > '''Фирмы''', откройте карточку фирмы, на которую зарегистрирован фискальный регистратор, перейдите на закладку '''Устройства''', убедитесь, что в выпадающем списке выбрано значение '''Фискальные регистраторы'''. В списке фискальных регистраторов вы увидите код. Если запись для регистратора еще не создана или вы планируете установить дополнительную кассу, добавьте новый ФР.</rspoiler> в базе данных.<br />
|colspan="2" |Пример: <code>CashRegister=2 </code> <br> Обязательный параметр.<br> <spoiler text="Что еще можно указать">Можно указывать наборы обслуживаемых ФР двумя способами:<br />
* через запятую или тире или их комбинации указать несколько кодов;<br />
* условие SQL-запроса. Например <code>AND cr.DeviceType=3</code> для всех доступных ФР LIFE PAY.<br />
<br />
Тогда они все будут обслуживаться одним объектом подключения к ФР. Что это значит: для Штрих-М у объекта открыт COM-порт при старте, и поменяться он не может. Все чеки пойдут в один ФР. Для LIFE PAY — в созданный объект передается поле '''Серийный номер''', откуда он берет авторизацию, т.о. чеки могут отправляться в различные аккаунты. Главное, что тип кассы у всех ФР должен быть один — служба не сможет переключиться например с LIFE PAY на ApiShip.</spoiler><br />
|-<br />
|<code>ServerName</code><br>Имя или IP-адрес сервера, на котором находится БД MeaSoft. Сервер должен быть доступен по сети с компьютера, к которому подключена касса.<br />
|colspan="2" |Пример: <code>ServerName=srv01 </code> <br> Обязательный параметр.<br />
|-<br />
|<code>DatabaseName</code><br>Имя базы данных (по умолчанию «courier»)<br />
|colspan="2" |Пример: <code>DataBaseName=courier</code> <br>Обязательный параметр.<br />
|-<br />
|<code>UserName</code><br>Имя пользователя базы данных<br />
|colspan="2" |Пример: <code>UserName=check</code> <br>Обязательный параметр. Пользователя check нужно создать для определения запросов чековой службы, для этого обратитесь в техподдержку.<br />
|-<br />
|<code>Password</code><br>Пароль пользователя базы данных<br />
|colspan="2" |Пример: <code>Password=password </code> <br>Обязательный параметр.<br />
|-<br />
|<code>DBPort</code><br>Порт базы данных<br />
|colspan="2" |Пример: <code>DBPort =3306 </code> <br>Обязательный параметр. По умолчанию 3306. Проверить порт можно в любом ярлыке офисной программы.<br />
|-<br />
|<code>Device</code><br />
|1 — ФР Штрих-М (по умолчанию),<br> 2 — чековый принтер Штрих-М (протокол Epson ESC/P)<br />
|3 — сервис фискализации LIFE PAY <br> 9 - WebKassa<br />
|-<br />
|<code>AgentFlags</code><br>Флаги тега 1057 для передачи в кассу при агентском чеке<br />
|colspan="2" | Пример: <code>AgentFlags=4</code><br>Обязательный параметр, если курьерская служба — платежный агент. Чтобы не передавать признаки платежного агента (если в кассе нет этого признака), укажите 0. Если параметр не указан, передается значение по умолчанию 4. <spoiler text="Возможные значения"><br />
* 1 — банковский платежный агент,<br />
* 2 — банковский платежный субагент,<br />
* 4 — платежный агент,<br />
* 8 — платежный субагент,<br />
* 16 — поверенный,<br />
* 32 — комиссионер,<br />
* 64 — агент.<br />
</spoiler><br />
|-<br />
|<code>PrintKurier</code><br />
|colspan="2" |1 — печать ФИО курьера на чеке.<br />
|-<br />
|<code>PrintSeller</code><br />
|colspan="2" |1 — печать заказчика на чеке.<br> Если включено, печатается юр. наименование, ИНН и телефон клиента.<br>В [[Клиенты и партнеры#Реквизиты|карточке клиента]] на вкладке '''Реквизиты''' должно быть заполнено поле '''Полное название'''.<br> Этот параметр никак не связан с тегами фискального документа 1225 и 1226 и просто выводит текстом на бумагу дополнительный текст там, где это возможно.<br />
|-<br />
|<code>PrintCashier</code><br>Печатать имя кассира на чеке (тег 1021). По умолчанию 1.<br />
|colspan="2" |1 — кассир берется из строки чека,<br>0 — не печатается,<br> другое число — код нужного сотрудника.<br>Можно писать подзапрос вида <code>if(a.cl=1, 5, 6)</code>.<br />
|-<br />
|<code>EmailPriority</code><br />
|colspan="2" |1 — отправка чека по e-mail приоритетнее, чем SMS.<br />
|-<br />
|<code>AddStr</code><br />
|colspan="2" | Пользовательская строка, которая печатается на всех чеках.<br />
|-<br />
|}<br />
<br />
= Настройка ФР Штрих-М =<br />
[[Файл:ShtrihTableList.png|thumb|100px|right]]<br />
'''Внимание.''' Для использования программы «Тест драйвера» нужно остановить службу «CheckService».<br />
<br />
=== Обрезка чека ===<br />
Обрезка чеков настраивается в таблице 1 фискального регистратора, параметр «Отрезка чека». Установите значение 1 чтобы ФР полностью отрезал каждый чек, или 2, чтобы он частично надрезал, чтобы чеки все-равно были лентой. Наша система не посылает на ККМ команду обрезки чека во избежание двойной обрезки.<br />
<br />
=== Отчет по секциям ===<br />
[[Файл:ShtrihZReportSect.png|thumb|100px|right]]<br />
В системе предусмотрено разнесение различных фискальных операций по секциям фискального регистратора. По-умолчанию суточные отчеты (X и Z-отчеты) отображают общие суммы по всем секциям. В ФР есть возможность сделать разбивку этих отчетов по секциям. Для этого в таблице 1 фискального регистратора, параметр «Тип суточного отчета» установите в значение 1.<br />
<br />
=== Проверка корректности регистрации в ОФД ===<br />
<gallery style="float: right" mode="nolines"><br />
Номер фиск документа.png<br />
Читаем отчет регистрации.png<br />
</gallery><br />
Для удовлетворения большинства потребностей наших клиентов в правильной фискализации в соответствии с 54-ФЗ, необходимо иметь [[Оборудование#Фискальный регистратор|ФР]] с фискальным накопителем (ФН) поддерживающие версию фискальный документ (ФД) версии 1.05. Так же необходимо зарегистрировать ФР в ОФД с признаком агента (тег 1057), так как курьерские службы обычно выступают в качестве платежного агента. Для соблюдения всех этих требований нужно обратиться в организацию, обслуживающую ваш фискальный регистратор с соответствующей просьбой. В некоторых случаях для поддержки может понадобиться перепрошивка ФР, замена ФН, перерегистрация в ОФД.<br />
После этих операций, можно убедиться, что все признаки, нас интересующие, установлены корректно. Для этого сначала нужно узнать номер документа фискализации. В программе «Тест драйвера» слева откроем раздел «11. ФН», в закладках «Фискализация ФН», нажмем кнопку «Запрос итогов фискализации» (см. скрин-шот). В результирующем отчете видим номер фискального документа о фискализации.<br />
Затем идем на закладку «Данные», Вводим номер документа, ставим галку «Показ. номера тегов», и нажимаем «Прочитать документ». В результирующем тексте убеждаемся в использовании версии ФД 1.05 — теги 1209 «Версия ФФД» и 1189 «Версия ФФД ККМ» должны иметь значения 2, тег 1057 «Призн. плат. агента» — должен быть, вероятно, 4 (это регистр битов, значение «4» соответствует установленному биту 2 «Платежный агент»).<br />
<br />
'''Внимание'''. Данные фискального документа хранятся в фискальном накопителе 30 дней, после этого срока посмотреть документ регистрации (перерегистрации) в ФН будет невозможно.<br />
<br />
=== Проверка корректности передачи тегов в ОФД ===<br />
<gallery style="float: right" mode="nolines"><br />
Shtrih LastDoc.png<br />
Shtrih check tags.png<br />
</gallery><br />
Убедиться в корректности передаваемых в ОФД значений тегов можно следующим образом: Сначала узнаем номер фискального документа — его можно посмотреть в чеке (как бумажном, так и электронном), или в приложении «Тест драйвера» в разделе «11. ФН», в закладках «Состояние ФН», нажмем кнопку «Запрос статуса ФН» и посмотрим «Номер последнего ФД» (см. скрин-шот). Далее на закладке «Данные» введем этот номер в поле «№Док.», и нажмем «Прочитать документ». В результирующем тексте убеждаемся в отправке тегов 1008, 1057, 1073, 1171, 1215 и прочих (см. скрин-шот).<br />
<br />
Теги 1225 и 1226 (Наименование и ИНН поставщика) поддерживаются Штрих-М в прошивке от 24.10.2018 и версией чековой службы от 19.03.2019<br />
<br />
К сожалению, эти передаваемые данные далеко не всегда отображаются в бумажном и/или электронном чеках, это зависит от самого ФР и/или ОФД соответственно. Однако по данной инструкции мы можем убедиться, что со своей стороны передали все данные, необходимые для соответствия 54-ФЗ.<br />
<br />
= Удаление службы=<br />
Для корректного удаления службы запустите исполняемый файл CheckServiceExe.exe с параметром командной строки <code>/uninstall</code>.<br />
<br />
= Примечания =<br />
Поскольку при запуске служба открывает подключение к фискальному регистратору, и использует его все время своей работы, другие программы (например «Тест драйвера» и т. д.) при попытке подключения выдадут ошибку «Невозможно открыть порт, он используется другим приложением». Чтобы избежать этого, остановите службу модуля на время использования других программ.<br />
<br />
= Устранение неполадок =<br />
1. В случае сбоя работы кассы ошибку можно посмотреть в файле CheckServiceExe.log<br />
<br />
2. Для включения логирования от драйвера Штрих-М в чековой надо установить флаг fDriver.LogOn:= true. По умолчанию false<br />
<br />
3. Ошибки условно можно разделить на 3 категории:<br />
{|<br />
!Ошибка<br />
!Симптомы<br />
!Возможные причины<br />
!Способы устранения<br />
|-<br />
|Нет связи с сервером<br />
|Касса не печатает, в логе сообщения вида «Unknown MySQL server host ''» или «Can’t connect to MySQL server on…».<br />
|Неверно настроено подключение к серверу, не работает сервер, сеть.<br />
|Проверить настройки подключения в файле CheckServiceExe.ini, проверить доступность сервера с этого компьютера.<br />
|-<br />
|Нет связи с фискальным регистратором<br />
|Касса не печатает, в логе сообщения вида «Нет связи код: −1, Режим: 0, Подрежим: 0»<br />
|ФР Выключен, ФР подключен не к тому разъему, ФР настроен не на ту скорость<br />
|Проверьте, что ФР включен, подключен к компьютеру, именно в тот порт, в котором он настраивался. Попробуйте отключить службу чеков, открыть программу «Тест драйвера», выполнить поиск оборудования. Если она находит ФР — сравнить настройки подключения, найденные тестом драйвера с тем, что прописано в CheckServiceExe.ini. В единичных случаях проблема может заключаться в драйвере переходника COM-USB, попробуйте удалить этот переходник в диспетчере устройств windows, и попросить его поискать устройства заново.<br />
|-<br />
|Некорректная работа фискального регистратора.<br />
|Касса печатает заголовок чека, потом ошибку, потом надпись «Чек аннулирован», и так бесконечно по кругу.<br />
|Аппаратная ошибка ФР, некорректный чек, сформированный системой.<br />
|Если текст ошибки, который печатается на чеке (он же сохраняется и в лог-файл) содержит информацию об [http://ru.wikipedia.org/wiki/ЭКЛЗ ЭКЛЗ] (например «ЭКЛЗ: Неверные дата или время код: 168, Режим: 3, Подрежим: 0») — нужно обратиться в компанию, с которой у вас заключен договор о поддержке кассы, сообщить им текст ошибки. В остальных случаях — обратиться в службу поддержки MeaSoft для выяснения причины и ее устранения.<br />
|-<br />
|Ошибка при формировании отчета без гашения (X-отчет)<br />
|Касса печатает X-отчет бесконечно по кругу. В протоколе работы чековой службы выдается сообщение «Команда не поддерживается в данном режиме код: 115, Режим: 6, Подрежим: 0».<br />
|В кассовом аппарате не установлены дата и время.<br />
|Необходимо через драйвер ФР установить текущую дату и время, затем cохранить настройку. В остальных случаях — обратиться в службу поддержки MeaSoft для выяснения причины и ее устранения.<br />
|}<br />
<br />
4. [https://docs.google.com/spreadsheets/d/19Mn5syH70XwFdg6Pe2fhYM17SNHGuOJDvQEQXHxSz54/edit#gid=0 Список ошибок протокола Штрих и их решение]<br />
<br />
= Печать чеков =<br />
<br />
=== При предоплате ===<br />
Если продавец передаёт предоплаченный товар курьерской службе, чек на предоплату формирует продавец. Курьерская служба должна оформить чек на передачу товара, так как ККТ обязано использовать лицо, осуществляющее расчёты с покупателем (п. 1 ст. 4.3 54-ФЗ).<br />
<br />
Поскольку передача заказа в зачёт предоплаты относится к расчётам и этим занимается курьер, пробить кассовый чек должен именно он.<br />
<br />
В таком случае покупатель получает два чека: первый чек выдаётся, когда клиент вносит предоплату, а второй чек — когда он получает товар. Подробнее см. [https://astral.ru/articles/ofd/12791 в статье].<br />
<br />
=== В офисном приложении ===<br />
Чековая служба не запрашивает печать бумажного чека, если заказ доставлен курьером: бумажный чек тратит бумагу, и если бумага закончится, то печать чеков остановится. А эту бумагу курьер все равно получателю отдать не сможет.<br />
<br />
Если клиент находится перед вами, в офисе, то чек печатается — соблюдается одно из условий:<br />
* вы отмечаете доставленным отправление, у которого выбрана доставка в пункт выдачи, совпадающий с текущим ответственным филиалом;<br />
* вы принимаете оплату за доставку заказа от заказчика, в этом случае вы вносите платеж на вкладке '''Заказы''' в карточке заказа.<br />
<br />
=== LIFE PAY: отличия между чеками в офисном и мобильном приложении ===<br />
{|class="wikitable" align="none" style="width: 80%; background-color:#ffffff;<br />
!style="width: 20%|Отличие<br />
!style="width: 40%|Офисное приложение<br />
!style="width: 40%|Мобильное приложение<br />
|-<br />
|Авторизация. Тег <code>login</code>||Общий номер телефона<br><br>Его можно указать в ini-файле чековой службы или 2-м параметром в поле '''Cерийный номер''' в карточке ФР в программе.<br>Чекопечатающее устройство (ЧПУ) в этом случае не предполагается, а авторизация нужна.||Мобильный телефон курьера<br><br>По этому параметру LIFE PAY определяет, на какой чековый принтер отправлять копию чека.<br />
|-<br />
|Имя кассира. Тег <code>cashier_name</code>||Параметр <code>PrintCashier</code> в ini-файле<br><br>Если включено, передается ФИО сотрудника, инициировавшего печать.<br>Офисные сотрудники обычно официально трудоустроены, поэтому поле заполняется.||Не указывается<br><br>В большинстве случаев курьеры не оформлены официально, показывать налоговой их не нужно.<br />
|-<br />
| Режим печати чека. Тег <code>mode</code>.||Печать на бумаге на ФР и отправка SMS или по электронной почте<br><br>В офисе предполагается, что это самовывоз — покупатель стоит перед вами, и вы пробиваете чек и сразу из ФР его отдаете покупателю||Отправка SMS или по электронной почте<br><br>Когда курьер доставляет заказ, он печатает бумажный чек на ЧПУ. Бумажные чеки в отсутствие ЧПУ в офисе [[#Печать чеков в офисном приложении|не печатаются]]. Фискализировать чек, не отправляя его ни на бумагу, ни на ФР, ни по почте/SMS, невозможно, это аппаратно не позволяет делать ФР. Можно на уровне ОФД отключить SMS, если они не нужны, и вам достаточно бумажного чека из ЧПУ.<br />
|}<br />
<br />
Потенциально могут быть еще небольшие различия в заполнении данных агента, поставщика. Если есть пожелания к конкретным полям, обращайтесь.<br />
<br />
= Отключение печати бумажных чеков =<br />
<br />
Чтобы отключить печать бумажных чеков на фискальном регистраторе Штрих-М:<br />
# Отключите чековую службу, чтобы она не мешала работе программы «Тест драйвера ФР». Для этого в контекстном меню элемента «Этот компьютер» выберите '''Управление'''. Откроется оснастка Windows «Управление компьютером». В панели слева разверните узел «Службы и приложения», выберите элемент «Службы», выделите в списке службу '''CheckService''' и нажмите '''Остановить службу'''.[[Файл:Настройка ФР управление.png|none|900 px]]<br />
# Запустите программу «Тест драйвера ФР».<br />
# Нажмите на кнопку '''Настройка свойств'''. Откроется окно «Свойства».[[Файл:Настройка ФР драйвер.png|none]]<br />
# Нажмите на кнопку '''Проверка связи''', чтобы проверить связь с кассой. Если в поле '''Код ошибки''' отобразился модуль кассы, все хорошо. Если отобразилась ошибка, например «Нет связи», в этом окне в поле '''Подключение''' выберите значение '''Локально''', в поле '''COM порт''' выберите порт, к которому подключена касса. Посмотреть номер порта можно через диспетчер устройств.<br />
# Нажмите на кнопку '''Таблицы'''. Откроется окно «Таблицы».<br />
# Найдите в списке таблицу 17 «Региональные настройки» и дважды щелкните по элементу. Откроется окно «Региональные настройки».<br />
# В строке «Поле 7. Rus не печатать документ» установите значение 2 и нажмите ENTER.<br />
# Закройте все окна программы «Тест драйвера ФР». <br />
# Включите чековую службу.<br />
<br />
Печать бумажных чеков отключена, при этом чеки отправляются в ОФД. <br />
<br />
Чтобы отключить печать чеков на других ФР, заклейте датчик кассовой ленты скотчем, бумажную ленту достаньте.<br />
<br />
= Ошибки фискализации =<br />
<br />
[https://docs.google.com/spreadsheets/d/19Mn5syH70XwFdg6Pe2fhYM17SNHGuOJDvQEQXHxSz54/edit#gid=0 Список ошибок протокола Штрих и их решение]<br />
<br />
При вызове функций драйвера Штрих-М нельзя указывать круглые скобки, получаем исключение. Неправильно fDriver.FNSendSTLVTagOperation(); правильно fDriver.FNSendSTLVTagOperation;<br />
<br />
== Ошибка программирования реквизита 1226 ==<br />
Ошибка тега 1226 означает, что не был передан ИНН поставщика.<br />
<br />
ИНН передается, если:<br />
# Передан признак агента.<br />
# ИНН поставщика указан в карточке клиента в Measoft или в контейнере вложения в [[API#Описание элементов для оформления заказа|API-запросе]] (параметр <code>suppINN</code>).<br />
# Наименование поставщика указано в карточке клиента в Measoft (поле '''[[Клиенты и партнеры#Реквизиты|Полное наименование]]''') или в контейнере вложения в API-запросе (параметр <code>suppcompany</code>).<br />
<br />
Приоритет имеет значение, указанное в контейнере вложения.<br />
<br />
== Ошибка программирования реквизита 1171 ==<br />
Ошибка тега 1171 означает, что не был передан номер телефона поставщика.<br />
<br />
Номер телефона поставщика должен быть указан в контейнере вложения [[API#Описание элементов для оформления заказа|API-запросе]] (параметр <code>suppphone</code>), карточке отдела или карточке клиента MeaSoft, на вкладке '''Реквизиты''' в поле '''Тел'''.<br />
<br />
Приоритет имеет значение, указанное в контейнере вложения.<br />
<br />
== Ошибка программирования реквизита 1222 ==<br />
Тег 1222 необходимо передавать совместно с тегом 1223 и только для версий ФФД 1.2 и выше. <br />
Тег 1222 передается командой FNSendTagOperation, тег 1223 формируется командами FNBeginSTLVTag и FNSendSTLVTagOperation. <br />
В тег 1223 могут быть вложены теги тег 1073 "телефон платежного агента" и тег 1026 "наименование оператора перевода". Телефон обязан передаваться в формате +7цццццццццц без скобок, тире и пробелов</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%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%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B8_%D0%BA%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D1%8B%D1%85_%D1%87%D0%B5%D0%BA%D0%BE%D0%B2&diff=14692Настройка модуля печати кассовых чеков2023-05-23T16:07:06Z<p>Sammy: /* Настройка чековой службы */</p>
<hr />
<div>Модуль интеграции с фискальным регистратором (печати кассовых чеков) предназначен для обеспечения возможности взаимодействия системы MeaSoft с фискальными регистраторами. Он представляет собой [http://ru.wikipedia.org/wiki/Службы_Windows службу Windows], которая подключается к БД системы и к фискальному регистратору.<br />
<br />
Одна установка службы поддерживает один регистратор.<br />
<br />
MeaSoft поддерживает неограниченное количество регистраторов, в том числе и зарегистрированных на одно юридическое лицо. Чтобы подключить несколько регистраторов, установите соответствующее количество модулей интеграции с ФР.<br />
<br />
Модуль печати кассовых чеков состоит из следующих файлов:<br />
* CheckServiceExe.exe — исполняемый файл службы;<br />
* CheckServiceExe.ini — конфигурационный файл;<br />
* CheckServiceExe.log — файл журнала. Если его нет, создается при запуске службы.<br />
<br />
= Применение =<br />
<br />
Чековая служба нужна, если:<br />
* установлена касса Штрих-М — для печати чеков в офисной системе и мобильном приложении курьера.<br />
:При закрытии заказа курьером в мобильном приложении для печати чеков нужен [[Настройка модуля автоматизации|модуль автоматизации]], который будет отправлять чеки, поскольку прямой связи мобильного приложения с Штрих-М нет; <br />
* установлена касса LIFE PAY — для ручной печати чека из офисного приложения.<br />
<br />
Для печати чека через LIFE PAY и Штрих-Нано-Ф при закрытии заказа курьером в мобильном приложении чековая служба не нужна.<br />
<br />
'''Примечание'''. Касса Штрих-М работает с чековой службой только при подключении через COM-порт или USB и одновременно передает данные в ОФД. При подключении через USB на компьютере настраивается виртуальный COM-порт.<br />
<br />
= Установка чековой службы=<br />
<br />
# Скопируйте файл CheckServiceExe.exe в любую папку на компьютере:<br />
#* для кассы Штрих-М — на тот компьютер, к которому физически подключена касса;<br />
#* для кассы LIFE PAY – на любой компьютер, потому что у LIFE PAY облачная фискализация.<br />
# Создайте ярлык для файла CheckServiceExe.exe.<br />
# В свойствах ярлыка на вкладке '''Ярлык''' в поле '''Объект''' после имени файла добавьте <code>/install</code>:[[Файл:Установка чековой службы.png|none]]<br />
# Сохраните и запустите ярлык от имени администратора. В результате служба появится в списке служб. Для просмотра списка в контекстном меню '''Мой компьютер''' выберите '''Управление''' > '''Службы'''.<br />
# В папке с чековой службой создайте INI-файл или загрузите шаблоны: [https://courierexe.ru/download/checkservice/lifepay/CheckServiceExe.ini LIFE PAY], [https://courierexe.ru/download/checkservice/shtrih/CheckServiceExe.ini Штрих-М].<br />
# Откройте INI-файл, укажите [[#Настройка чековой службы |параметры]] для своей базы и сохраните изменения.<br />
# В контекстном меню элемента '''Мой компьютер''' выберите '''Управление''' > '''Службы''', убедитесь, что режим запуска службы установлен в положение «Автоматически», и запустите чековую службу. Если установка и настройка прошли успешно, то первый чек будет сразу распечатан на кассе. <br />
<br />
Если чек не печатается, смотрите причины в файле логов чековой службы CheckServiceExe.log. Он находится в папке чековой службы. Подробнее см. раздел «[[Устранение неполадок]]».<br />
<br />
Можно установить несколько независимых экземпляров службы на одну систему, переименовав exe-файл. Название службы в Windows, файлы настроек и логов будут иметь соответствующие имена.<br />
<br />
= Настройка чековой службы =<br />
Откройте файл CheckServiceExe.ini любым текстовым редактором, например [http://ru.wikipedia.org/wiki/Блокнот_(программа) блокнотом].<br />
<br />
В разделе <nowiki>[COMMON]</nowiki> измените или добавьте следующие параметры:<br />
<br />
{|class="wikitable" style="width: 80%;" "background-color:#ffffff;"<br />
!style="width: 20%;"|Параметр<br />
!style="width: 40%;"| Штрих-М<br />
!style="width: 40%;"| LIFE PAY<br />
|-<br />
|<code>Param</code><br>Дополнительные параметры фискального регистратора<br />
|Пример: <code>Param=30, 6</code><br>Обязательный параметр, значения указываются через запятую. <br>Первое значение — пароль пользователя ФР, по умолчанию 30. Второе значение — скорость работы ФР. Чтобы узнать скорость, используйте утилиту «Тест драйвера», которая поставляется с кассой: откройте утилиту, нажмите на кнопку '''Настройка свойств''' > '''Поиск оборудования'''. Отобразится подключенный ФР и его <spoiler text="скорость работы">Принимаемые значения параметра '''Скорость порта''':<br>1 — 4800 кбит/с,<br> 2 — 9600 кбит/с,<br> 3 — 19200 кбит/с,<br> 4 — 38400 кбит/с,<br> 5 — 57600 кбит/с,<br> 6 — 115200 кбит/с.<br>Значение параметра скорости должно совпадать с установленным режимом самого фискального регистратора. По умолчанию он настроен на скорость 115200, однако иногда этот параметр необходимо уменьшить для повышения стабильности работы регистратора. Также были случаи сброса скорости в положение 4800 пользователями, что возможно при включении ФР с зажатой кнопкой промотки чековой ленты (см. [http://courierexe.ru/download/ext_manual/Shtrih_user_manual.pdf руководство пользователя]). Таким образом, начальная настройка в этом режиме исключит вероятность отказа системы из-за ошибочного сброса настройки в ФР. Скорость работы в ФР можно задать в утилите «Тест драйвера» в окне «Настройка свойств» кнопкой '''Установить параметры'''.<br>Например, чтобы установить для модуля настройки подключения к ФР следующие параметры: пароль доступа — 30, скорость порта — 4800, укажите строку: <br> Param=30, 1</spoiler>.<br />
|Пример: <code>Param=91defdc4556fc182680982e1b2am8d6f, 79011111111,,64</code><br>Необязательный параметр. Если значения указаны в [[Фирмы#Добавление фискального регистратора|фискальном регистраторе]], можно оставить строку в таком виде: <code>#Param=</code><br>Первое значение — 32-значный АПИ-ключ из ЛК LIFE PAY.<br>Второе значение — номер телефона без +, на который зарегистрирован ЛК LIFE PAY. <br>Третье значение — по умолчанию пустое, но можно указать путь к АПИ лайфпей (тикет 76001).<br>Четвертое значение — агентский признак, если есть.<br />
|-<br />
|<code>Port</code><br>Номер [http://ru.wikipedia.org/wiki/Последовательный_порт COM-порта] фискального регистратора. Если регистратор подключен через [http://ru.wikipedia.org/wiki/USB USB-порт], драйвер эмулятора порта все равно создает виртуальный COM-порт, номер которого устанавливается в его свойствах (в [http://ru.wikipedia.org/wiki/Диспетчер_устройств диспетчере устройств]), а также номер порта меняется в зависимости от разъема USB, к которому подключено устройство.<br />
|Пример: <code>Port=5</code><br>Обязательный параметр.<br />
|Пример: <code>Port=1 </code><br>Необязательный параметр, можно указывать значение 1.<br />
|-<br />
|<code>CashRegister</code><br><rspoiler text="Код фискального регистратора">Чтобы его узнать, выберите в главном меню системы пункт '''Справочники''' > '''Фирмы''', откройте карточку фирмы, на которую зарегистрирован фискальный регистратор, перейдите на закладку '''Устройства''', убедитесь, что в выпадающем списке выбрано значение '''Фискальные регистраторы'''. В списке фискальных регистраторов вы увидите код. Если запись для регистратора еще не создана или вы планируете установить дополнительную кассу, добавьте новый ФР.</rspoiler> в базе данных.<br />
|colspan="2" |Пример: <code>CashRegister=2 </code> <br> Обязательный параметр.<br> <spoiler text="Что еще можно указать">Можно указывать наборы обслуживаемых ФР двумя способами:<br />
* через запятую или тире или их комбинации указать несколько кодов;<br />
* условие SQL-запроса. Например <code>AND cr.DeviceType=3</code> для всех доступных ФР LIFE PAY.<br />
<br />
Тогда они все будут обслуживаться одним объектом подключения к ФР. Что это значит: для Штрих-М у объекта открыт COM-порт при старте, и поменяться он не может. Все чеки пойдут в один ФР. Для LIFE PAY — в созданный объект передается поле '''Серийный номер''', откуда он берет авторизацию, т.о. чеки могут отправляться в различные аккаунты. Главное, что тип кассы у всех ФР должен быть один — служба не сможет переключиться например с LIFE PAY на ApiShip.</spoiler><br />
|-<br />
|<code>ServerName</code><br>Имя или IP-адрес сервера, на котором находится БД MeaSoft. Сервер должен быть доступен по сети с компьютера, к которому подключена касса.<br />
|colspan="2" |Пример: <code>ServerName=srv01 </code> <br> Обязательный параметр.<br />
|-<br />
|<code>DatabaseName</code><br>Имя базы данных (по умолчанию «courier»)<br />
|colspan="2" |Пример: <code>DataBaseName=courier</code> <br>Обязательный параметр.<br />
|-<br />
|<code>UserName</code><br>Имя пользователя базы данных<br />
|colspan="2" |Пример: <code>UserName=check</code> <br>Обязательный параметр. Пользователя check нужно создать для определения запросов чековой службы, для этого обратитесь в техподдержку.<br />
|-<br />
|<code>Password</code><br>Пароль пользователя базы данных<br />
|colspan="2" |Пример: <code>Password=password </code> <br>Обязательный параметр.<br />
|-<br />
|<code>DBPort</code><br>Порт базы данных<br />
|colspan="2" |Пример: <code>DBPort =3306 </code> <br>Обязательный параметр. По умолчанию 3306. Проверить порт можно в любом ярлыке офисной программы.<br />
|-<br />
|<code>Device</code><br />
|1 — ФР Штрих-М (по умолчанию),<br> 2 — чековый принтер Штрих-М (протокол Epson ESC/P)<br />
|3 — сервис фискализации LIFE PAY <br> 9 - WebKassa<br />
|-<br />
|<code>AgentFlags</code><br>Флаги тега 1057 для передачи в кассу при агентском чеке<br />
|colspan="2" | Пример: <code>AgentFlags=4</code><br>Обязательный параметр, если курьерская служба — платежный агент. Чтобы не передавать признаки платежного агента (если в кассе нет этого признака), укажите 0. Если параметр не указан, передается значение по умолчанию 4. <spoiler text="Возможные значения"><br />
* 1 — банковский платежный агент,<br />
* 2 — банковский платежный субагент,<br />
* 4 — платежный агент,<br />
* 8 — платежный субагент,<br />
* 16 — поверенный,<br />
* 32 — комиссионер,<br />
* 64 — агент.<br />
</spoiler><br />
|-<br />
|<code>PrintKurier</code><br />
|colspan="2" |1 — печать ФИО курьера на чеке.<br />
|-<br />
|<code>PrintSeller</code><br />
|colspan="2" |1 — печать заказчика на чеке.<br> Если включено, печатается юр. наименование, ИНН и телефон клиента.<br>В [[Клиенты и партнеры#Реквизиты|карточке клиента]] на вкладке '''Реквизиты''' должно быть заполнено поле '''Полное название'''.<br> Этот параметр никак не связан с тегами фискального документа 1225 и 1226 и просто выводит текстом на бумагу дополнительный текст там, где это возможно.<br />
|-<br />
|<code>PrintCashier</code><br>Печатать имя кассира на чеке (тег 1021). По умолчанию 1.<br />
|colspan="2" |1 — кассир берется из строки чека,<br>0 — не печатается,<br> другое число — код нужного сотрудника.<br>Можно писать подзапрос вида <code>if(a.cl=1, 5, 6)</code>.<br />
|-<br />
|<code>EmailPriority</code><br />
|colspan="2" |1 — отправка чека по e-mail приоритетнее, чем SMS.<br />
|-<br />
|<code>AddStr</code><br />
|colspan="2" | Пользовательская строка, которая печатается на всех чеках.<br />
|-<br />
|}<br />
<br />
= Настройка ФР Штрих-М =<br />
[[Файл:ShtrihTableList.png|thumb|100px|right]]<br />
'''Внимание.''' Для использования программы «Тест драйвера» нужно остановить службу «CheckService».<br />
<br />
=== Обрезка чека ===<br />
Обрезка чеков настраивается в таблице 1 фискального регистратора, параметр «Отрезка чека». Установите значение 1 чтобы ФР полностью отрезал каждый чек, или 2, чтобы он частично надрезал, чтобы чеки все-равно были лентой. Наша система не посылает на ККМ команду обрезки чека во избежание двойной обрезки.<br />
<br />
=== Отчет по секциям ===<br />
[[Файл:ShtrihZReportSect.png|thumb|100px|right]]<br />
В системе предусмотрено разнесение различных фискальных операций по секциям фискального регистратора. По-умолчанию суточные отчеты (X и Z-отчеты) отображают общие суммы по всем секциям. В ФР есть возможность сделать разбивку этих отчетов по секциям. Для этого в таблице 1 фискального регистратора, параметр «Тип суточного отчета» установите в значение 1.<br />
<br />
=== Проверка корректности регистрации в ОФД ===<br />
<gallery style="float: right" mode="nolines"><br />
Номер фиск документа.png<br />
Читаем отчет регистрации.png<br />
</gallery><br />
Для удовлетворения большинства потребностей наших клиентов в правильной фискализации в соответствии с 54-ФЗ, необходимо иметь [[Оборудование#Фискальный регистратор|ФР]] с фискальным накопителем (ФН) поддерживающие версию фискальный документ (ФД) версии 1.05. Так же необходимо зарегистрировать ФР в ОФД с признаком агента (тег 1057), так как курьерские службы обычно выступают в качестве платежного агента. Для соблюдения всех этих требований нужно обратиться в организацию, обслуживающую ваш фискальный регистратор с соответствующей просьбой. В некоторых случаях для поддержки может понадобиться перепрошивка ФР, замена ФН, перерегистрация в ОФД.<br />
После этих операций, можно убедиться, что все признаки, нас интересующие, установлены корректно. Для этого сначала нужно узнать номер документа фискализации. В программе «Тест драйвера» слева откроем раздел «11. ФН», в закладках «Фискализация ФН», нажмем кнопку «Запрос итогов фискализации» (см. скрин-шот). В результирующем отчете видим номер фискального документа о фискализации.<br />
Затем идем на закладку «Данные», Вводим номер документа, ставим галку «Показ. номера тегов», и нажимаем «Прочитать документ». В результирующем тексте убеждаемся в использовании версии ФД 1.05 — теги 1209 «Версия ФФД» и 1189 «Версия ФФД ККМ» должны иметь значения 2, тег 1057 «Призн. плат. агента» — должен быть, вероятно, 4 (это регистр битов, значение «4» соответствует установленному биту 2 «Платежный агент»).<br />
<br />
'''Внимание'''. Данные фискального документа хранятся в фискальном накопителе 30 дней, после этого срока посмотреть документ регистрации (перерегистрации) в ФН будет невозможно.<br />
<br />
=== Проверка корректности передачи тегов в ОФД ===<br />
<gallery style="float: right" mode="nolines"><br />
Shtrih LastDoc.png<br />
Shtrih check tags.png<br />
</gallery><br />
Убедиться в корректности передаваемых в ОФД значений тегов можно следующим образом: Сначала узнаем номер фискального документа — его можно посмотреть в чеке (как бумажном, так и электронном), или в приложении «Тест драйвера» в разделе «11. ФН», в закладках «Состояние ФН», нажмем кнопку «Запрос статуса ФН» и посмотрим «Номер последнего ФД» (см. скрин-шот). Далее на закладке «Данные» введем этот номер в поле «№Док.», и нажмем «Прочитать документ». В результирующем тексте убеждаемся в отправке тегов 1008, 1057, 1073, 1171, 1215 и прочих (см. скрин-шот).<br />
<br />
Теги 1225 и 1226 (Наименование и ИНН поставщика) поддерживаются Штрих-М в прошивке от 24.10.2018 и версией чековой службы от 19.03.2019<br />
<br />
К сожалению, эти передаваемые данные далеко не всегда отображаются в бумажном и/или электронном чеках, это зависит от самого ФР и/или ОФД соответственно. Однако по данной инструкции мы можем убедиться, что со своей стороны передали все данные, необходимые для соответствия 54-ФЗ.<br />
<br />
= Удаление службы=<br />
Для корректного удаления службы запустите исполняемый файл CheckServiceExe.exe с параметром командной строки <code>/uninstall</code>.<br />
<br />
= Примечания =<br />
Поскольку при запуске служба открывает подключение к фискальному регистратору, и использует его все время своей работы, другие программы (например «Тест драйвера» и т. д.) при попытке подключения выдадут ошибку «Невозможно открыть порт, он используется другим приложением». Чтобы избежать этого, остановите службу модуля на время использования других программ.<br />
<br />
= Устранение неполадок =<br />
1. В случае сбоя работы кассы ошибку можно посмотреть в файле CheckServiceExe.log<br />
<br />
2. Для включения логирования от драйвера Штрих-М в чековой надо установить флаг fDriver.LogOn:= true. По умолчанию false<br />
<br />
3. Ошибки условно можно разделить на 3 категории:<br />
{|<br />
!Ошибка<br />
!Симптомы<br />
!Возможные причины<br />
!Способы устранения<br />
|-<br />
|Нет связи с сервером<br />
|Касса не печатает, в логе сообщения вида «Unknown MySQL server host ''» или «Can’t connect to MySQL server on…».<br />
|Неверно настроено подключение к серверу, не работает сервер, сеть.<br />
|Проверить настройки подключения в файле CheckServiceExe.ini, проверить доступность сервера с этого компьютера.<br />
|-<br />
|Нет связи с фискальным регистратором<br />
|Касса не печатает, в логе сообщения вида «Нет связи код: −1, Режим: 0, Подрежим: 0»<br />
|ФР Выключен, ФР подключен не к тому разъему, ФР настроен не на ту скорость<br />
|Проверьте, что ФР включен, подключен к компьютеру, именно в тот порт, в котором он настраивался. Попробуйте отключить службу чеков, открыть программу «Тест драйвера», выполнить поиск оборудования. Если она находит ФР — сравнить настройки подключения, найденные тестом драйвера с тем, что прописано в CheckServiceExe.ini. В единичных случаях проблема может заключаться в драйвере переходника COM-USB, попробуйте удалить этот переходник в диспетчере устройств windows, и попросить его поискать устройства заново.<br />
|-<br />
|Некорректная работа фискального регистратора.<br />
|Касса печатает заголовок чека, потом ошибку, потом надпись «Чек аннулирован», и так бесконечно по кругу.<br />
|Аппаратная ошибка ФР, некорректный чек, сформированный системой.<br />
|Если текст ошибки, который печатается на чеке (он же сохраняется и в лог-файл) содержит информацию об [http://ru.wikipedia.org/wiki/ЭКЛЗ ЭКЛЗ] (например «ЭКЛЗ: Неверные дата или время код: 168, Режим: 3, Подрежим: 0») — нужно обратиться в компанию, с которой у вас заключен договор о поддержке кассы, сообщить им текст ошибки. В остальных случаях — обратиться в службу поддержки MeaSoft для выяснения причины и ее устранения.<br />
|-<br />
|Ошибка при формировании отчета без гашения (X-отчет)<br />
|Касса печатает X-отчет бесконечно по кругу. В протоколе работы чековой службы выдается сообщение «Команда не поддерживается в данном режиме код: 115, Режим: 6, Подрежим: 0».<br />
|В кассовом аппарате не установлены дата и время.<br />
|Необходимо через драйвер ФР установить текущую дату и время, затем cохранить настройку. В остальных случаях — обратиться в службу поддержки MeaSoft для выяснения причины и ее устранения.<br />
|}<br />
<br />
4. [https://docs.google.com/spreadsheets/d/19Mn5syH70XwFdg6Pe2fhYM17SNHGuOJDvQEQXHxSz54/edit#gid=0 Список ошибок протокола Штрих и их решение]<br />
<br />
= Печать чеков =<br />
<br />
=== При предоплате ===<br />
Если продавец передаёт предоплаченный товар курьерской службе, чек на предоплату формирует продавец. Курьерская служба должна оформить чек на передачу товара, так как ККТ обязано использовать лицо, осуществляющее расчёты с покупателем (п. 1 ст. 4.3 54-ФЗ).<br />
<br />
Поскольку передача заказа в зачёт предоплаты относится к расчётам и этим занимается курьер, пробить кассовый чек должен именно он.<br />
<br />
В таком случае покупатель получает два чека: первый чек выдаётся, когда клиент вносит предоплату, а второй чек — когда он получает товар. Подробнее см. [https://astral.ru/articles/ofd/12791 в статье].<br />
<br />
=== В офисном приложении ===<br />
Чековая служба не запрашивает печать бумажного чека, если заказ доставлен курьером: бумажный чек тратит бумагу, и если бумага закончится, то печать чеков остановится. А эту бумагу курьер все равно получателю отдать не сможет.<br />
<br />
Если клиент находится перед вами, в офисе, то чек печатается — соблюдается одно из условий:<br />
* вы отмечаете доставленным отправление, у которого выбрана доставка в пункт выдачи, совпадающий с текущим ответственным филиалом;<br />
* вы принимаете оплату за доставку заказа от заказчика, в этом случае вы вносите платеж на вкладке '''Заказы''' в карточке заказа.<br />
<br />
=== LIFE PAY: отличия между чеками в офисном и мобильном приложении ===<br />
{|class="wikitable" align="none" style="width: 80%; background-color:#ffffff;<br />
!style="width: 20%|Отличие<br />
!style="width: 40%|Офисное приложение<br />
!style="width: 40%|Мобильное приложение<br />
|-<br />
|Авторизация. Тег <code>login</code>||Общий номер телефона<br><br>Его можно указать в ini-файле чековой службы или 2-м параметром в поле '''Cерийный номер''' в карточке ФР в программе.<br>Чекопечатающее устройство (ЧПУ) в этом случае не предполагается, а авторизация нужна.||Мобильный телефон курьера<br><br>По этому параметру LIFE PAY определяет, на какой чековый принтер отправлять копию чека.<br />
|-<br />
|Имя кассира. Тег <code>cashier_name</code>||Параметр <code>PrintCashier</code> в ini-файле<br><br>Если включено, передается ФИО сотрудника, инициировавшего печать.<br>Офисные сотрудники обычно официально трудоустроены, поэтому поле заполняется.||Не указывается<br><br>В большинстве случаев курьеры не оформлены официально, показывать налоговой их не нужно.<br />
|-<br />
| Режим печати чека. Тег <code>mode</code>.||Печать на бумаге на ФР и отправка SMS или по электронной почте<br><br>В офисе предполагается, что это самовывоз — покупатель стоит перед вами, и вы пробиваете чек и сразу из ФР его отдаете покупателю||Отправка SMS или по электронной почте<br><br>Когда курьер доставляет заказ, он печатает бумажный чек на ЧПУ. Бумажные чеки в отсутствие ЧПУ в офисе [[#Печать чеков в офисном приложении|не печатаются]]. Фискализировать чек, не отправляя его ни на бумагу, ни на ФР, ни по почте/SMS, невозможно, это аппаратно не позволяет делать ФР. Можно на уровне ОФД отключить SMS, если они не нужны, и вам достаточно бумажного чека из ЧПУ.<br />
|}<br />
<br />
Потенциально могут быть еще небольшие различия в заполнении данных агента, поставщика. Если есть пожелания к конкретным полям, обращайтесь.<br />
<br />
= Отключение печати бумажных чеков =<br />
<br />
Чтобы отключить печать бумажных чеков на фискальном регистраторе Штрих-М:<br />
# Отключите чековую службу, чтобы она не мешала работе программы «Тест драйвера ФР». Для этого в контекстном меню элемента «Этот компьютер» выберите '''Управление'''. Откроется оснастка Windows «Управление компьютером». В панели слева разверните узел «Службы и приложения», выберите элемент «Службы», выделите в списке службу '''CheckService''' и нажмите '''Остановить службу'''.[[Файл:Настройка ФР управление.png|none|900 px]]<br />
# Запустите программу «Тест драйвера ФР».<br />
# Нажмите на кнопку '''Настройка свойств'''. Откроется окно «Свойства».[[Файл:Настройка ФР драйвер.png|none]]<br />
# Нажмите на кнопку '''Проверка связи''', чтобы проверить связь с кассой. Если в поле '''Код ошибки''' отобразился модуль кассы, все хорошо. Если отобразилась ошибка, например «Нет связи», в этом окне в поле '''Подключение''' выберите значение '''Локально''', в поле '''COM порт''' выберите порт, к которому подключена касса. Посмотреть номер порта можно через диспетчер устройств.<br />
# Нажмите на кнопку '''Таблицы'''. Откроется окно «Таблицы».<br />
# Найдите в списке таблицу 17 «Региональные настройки» и дважды щелкните по элементу. Откроется окно «Региональные настройки».<br />
# В строке «Поле 7. Rus не печатать документ» установите значение 2 и нажмите ENTER.<br />
# Закройте все окна программы «Тест драйвера ФР». <br />
# Включите чековую службу.<br />
<br />
Печать бумажных чеков отключена, при этом чеки отправляются в ОФД. <br />
<br />
Чтобы отключить печать чеков на других ФР, заклейте датчик кассовой ленты скотчем, бумажную ленту достаньте.<br />
<br />
= Ошибки фискализации =<br />
<br />
[https://docs.google.com/spreadsheets/d/19Mn5syH70XwFdg6Pe2fhYM17SNHGuOJDvQEQXHxSz54/edit#gid=0 Список ошибок протокола Штрих и их решение]<br />
<br />
При вызове функций драйвера Штрих-М нельзя указывать круглые скобки, получаем исключение. Неправильно fDriver.FNSendSTLVTagOperation(); правильно fDriver.FNSendSTLVTagOperation;<br />
<br />
== Ошибка программирования реквизита 1226 ==<br />
Ошибка тега 1226 означает, что не был передан ИНН поставщика.<br />
<br />
ИНН передается, если:<br />
# Передан признак агента.<br />
# ИНН поставщика указан в карточке клиента в Measoft или в контейнере вложения в [[API#Описание элементов для оформления заказа|API-запросе]] (параметр <code>suppINN</code>).<br />
# Наименование поставщика указано в карточке клиента в Measoft (поле '''[[Клиенты и партнеры#Реквизиты|Полное наименование]]''') или в контейнере вложения в API-запросе (параметр <code>suppcompany</code>).<br />
<br />
Приоритет имеет значение, указанное в контейнере вложения.<br />
<br />
== Ошибка программирования реквизита 1171 ==<br />
Ошибка тега 1171 означает, что не был передан номер телефона поставщика.<br />
<br />
Номер телефона поставщика должен быть указан в контейнере вложения [[API#Описание элементов для оформления заказа|API-запросе]] (параметр <code>suppphone</code>), карточке отдела или карточке клиента MeaSoft, на вкладке '''Реквизиты''' в поле '''Тел'''.<br />
<br />
Приоритет имеет значение, указанное в контейнере вложения.<br />
<br />
== Ошибка программирования реквизита 1222 ==<br />
Тег 1222 необходимо передавать совместно с тегом 1223 и только для версий ФФД 1.2 и выше. <br />
Тег 1222 передается командой FNSendTagOperation, тег 1223 формируется командами FNBeginSTLVTag и FNSendSTLVTagOperation. <br />
В тег 1223 могут быть вложены теги тег 1073 "телефон платежного агента" и тег 1026 "наименование оператора перевода". Телефон обязан передаваться в формате +7цццццццццц без скобок, тире и пробелов</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14684Дополнительные возможности2023-05-16T16:23:36Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском<br />
<br />
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
'''DAILY''' - задание выполняемое один раз в день<br />
<br />
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
== Настройка документов ==<br />
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
'''GetTypeShippingPlace''' - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
'''OnSchetChanged''' - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
'''ExceptionsForAPK''' - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется).<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
'''OnEveryStartApp''' - выполняется при запуске программы.<br />
<br />
'''OnEveryCloseApp''' - выполняет при закрытии программы.<br />
<br />
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source><br />
<br />
'''OnAfterPreassemblyScan''' - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.<br />
<br />
'''OnGeocodeScript''' - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:<br />
*$address - адрес для геокодирования;<br />
*$town - код города;<br />
*$street и $home - упрощенный адрес;<br />
<br />
Скрипт должен вернуть следующие переменные : <br />
*$lon и $lat - координаты ;<br />
*$goodaddress - нормализованный адрес (не обязательно);<br />
<br />
<source lang="sql"><br />
<?> <br />
rem(2023-05-16 Подключение к геокодеру далли, тикет 75769);<br />
set($response, HTTPPOST('http://x.wizbox.ru/AhanterCleanseAddress',<br />
'{"query":'+ FormatTextJSON($address)+ '}', <br />
'','','','',<br />
'post', 'application/json', 10000));<br />
<br />
if($response!'',<br />
new('TJSON', 'json');<br />
set($e, try(<br />
json.SetText($response);<br />
json.OpenChild('geo_data');<br />
json.OpenChild('mid');<br />
set($lat, sqlfloat(json.ChildNodeValue('lat')));<br />
set($lon, sqlfloat(json.ChildNodeValue('lon')));<br />
));<br />
if($e, error('Ошибка в разборе ответа: '+$e), '');<br />
, error('Пришел пустой ответ от геокодера')<br />
);<br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=14683Заглавная страница2023-05-16T16:19:02Z<p>Sammy: </p>
<hr />
<div>__NOTOC__<br />
Эта страница — оглавление документации к системе [http://courierexe.ru MeaSoft]. Мы постоянно дополняем и улучшаем описания функциональности. Все вопросы и предложения направляйте в службу технической поддержки. <br />
<br />
Опубликованная документация описывает текущую версию системы. Если у вас установлена одна из предыдущих версий, то [http://courierexe.ru/contacts.htm обратитесь к нам] для обновления. Обновление может быть платным. Историю изменений программы смотрите на [https://home.courierexe.ru/whatsnew специальной странице].<br />
<br />
Спасибо, что пользуетесь системой MeaSoft и принимаете участие в ее развитии!<br />
<!--<br />
= Коллеги! На наш сервер в настоящий момент осуществляется [https://ru.wikipedia.org/wiki/DoS-%D0%B0%D1%82%D0%B0%D0%BA%D0%B0 DDOS атака]. Приносим извинения за временную недоступность наших сервисов. Мы активно работаем над отражением. Надеемся, скоро наладим. Благодарим за понимание. = --><br />
<br />
==Содержание==<br />
<br />
<table style="width: 100%;"><br />
<tr><br />
<td style="text-align:right; padding-top: 20px">[[File:general.png|50px]]</td><br />
<td style="text-align:left; padding-top: 20px"><h3>Общий раздел</h3></td><br />
<td style="text-align:right; padding-top: 20px">[[File:operator.png|50px]]</td><br />
<td style="text-align:left; padding-top: 20px"><h3>Работа с заказами</h3></td><br />
<td style="text-align:right; padding-top: 20px">[[File:admin.png|50px]]</td><br />
<td style="text-align:left; padding-top: 20px"><h3>Настройка системы</h3></td><br />
</tr><br />
<tr><br />
<td colspan="2" style="vertical-align:top; padding-left: 20px"><br />
<ul><br />
<li>[[Как с нами работать]]</li><br />
<li>[[Справки о налоговом резидентстве]]</li><br />
<li>[https://home.courierexe.ru/whatsnew История изменений]</li><br />
<li>[[Файлы для загрузки]]</li><br />
<li>[[Видео уроки|Видеоуроки]]</li><br />
<li>[https://courierexe.userecho.com/ Часто задаваемые вопросы]</li><br />
<li>[[План изучения MeaSoft]]</li><br />
<li>[[English Help]]</li><br />
</ul><br />
</td><br />
<td colspan="2" style="vertical-align:top; padding-left: 20px"><br />
<ul><br />
<li>[[Знакомство с программой|Знакомство с программой]]</li><br />
<li>[[Учет корреспонденции]]</li><br />
<li>[[Работа с заказами]]</li><br />
<li>[[Модуль «Карта»#Виды планирования|Планирование доставок на карте]]</li><br />
<li>[[Печать ведомостей и наклеек]]</li><br />
<li>[[Выдача корреспонденции курьерам]]</li><br />
<li>[[Манифесты]]</li><br />
<li>[[Доска приема]]</li><br />
<li>[[Документы]]</li><br />
<ul><br />
<li>[[Приходные кассовые ордера]]</li><br />
<li>[[Путевые листы]]</li><br />
<li>[[Счета|Работа со счетами]]</li><br />
<li>[[Акты передачи денег и корреспонденции]]</li><br />
</ul><br />
<li>[[Учет наличных по бухгалтерии]]</li><br />
<li>[[Биллинг курьеров]]</li><br />
<li>[[Работа со срочными заказами]]</li><br />
<li>[[Импорт баз данных|Импорт заказов из Excel]]</li><br />
<li>[[Модуль складского учета|Складской учет]]</li><br />
<li>[[Работа с Почтой России]]</li><br />
<li>[[Отчеты]]</li><br />
<li>[[Задания]]</li><br />
<li>[[Честный ЗНАК]]</li><br />
<li>[[Функции|Функции]]</li><br />
</ul><br />
</td><br />
<td colspan="2" style="vertical-align:top; padding-left: 20px"><br />
<ul><br />
<li>[[Начало использования]]</li><br />
<li>[[Настройка глобальных параметров|Глобальные параметры]]</li><br />
<li>[[Настройка параметров рабочего места|Рабочее место]]</li><br />
<br />
<li>[[Быстрый старт]]</li><br />
<li>[[Клиенты и партнеры]]</li><br />
<li>[[Сотрудники]]</li><br />
<li>[[Пользователи]]</li><br />
<li>[[Модуль «Карта»#Настройка|Модуль «Карта»]]</li><br />
<li>[[Тарифы]]</li><br />
<li>[[Работа с пунктами самовывоза (ПВЗ)|Пункты самовывоза (ПВЗ)]]</li><br />
<li>[[Зарплата]]</li><br />
<li>[[Собеседования]]</li><br />
<li>[[Тикеты]]</li><br />
<li>[[Справочники]]</li><br />
<li>[[Охрана]]</li><br />
<li>[[Устранение неполадок]]</li><br />
<li>[[Оборудование]]</li><br />
<li>[[Дополнительные модули]]</li><br />
<ul><br />
<li>[[Настройка модуля печати кассовых чеков|Модуль печати кассовых чеков]]</li><br />
<li>[[Настройка модуля автоматизации|Модуль автоматизации]]</li><br />
<li>[[Модуль «Кросс-докинг»]]</li><br />
<li>[[Модуль отправки SMS-сообщений]]</li><br />
<li>[[Модуль репликации данных]]</li><br />
</ul><br />
<li>[[Интеграция с другими системами]]</li><br />
</ul><br />
</td><br />
</tr><br />
<tr><br />
<td style="text-align:right; padding-top: 20px">[[File:developer.png|50px]]</td><br />
<td style="text-align:left; padding-top: 20px"><h3>Для разработчиков</h3></td><br />
<td style="text-align:right; padding-top: 20px">[[File:cabinet.png|50px]]</td><br />
<td style="text-align:left; padding-top: 20px"><h3>Сервисы</h3></td><br />
<td style="text-align:right; padding-top: 20px">[[File:mobile.png|50px]]</td><br />
<td style="text-align:left; padding-top: 20px"><h3>Мобильные приложения</h3></td><br />
</tr><br />
<tr><br />
<td colspan="2" style="vertical-align:top; padding-left: 20px"><br />
<ul><br />
<li>[[Руководство программиста]]</li><br />
<li>[[API|API-интеграция]]</li><br />
<li>[[Пользовательские отчеты]]</li><br />
<li>[[Пользовательские поля]]</li><br />
<li>[[Работа c linux]]</li><br />
<li>[[Интеграция с CWMS]]</li><br />
<li>[[Дополнительные возможности]]</li><br />
</ul><br />
</td><br />
<td colspan="2" style="vertical-align:top; padding-left: 20px"><br />
<ul><br />
<li>[[Личный кабинет клиента]]</li><br />
<li>[[Личный кабинет курьерской службы]]</li><br />
<li>[[Личный кабинет курьера]]</li><br />
<li>[[M-POINT]]</li><br />
<li>[[Веб-сервисы]]</li><br />
<li>[[MeaShip]]</li><br />
</ul><br />
</td><br />
<td colspan="2" style="vertical-align:top; padding-left: 20px"><br />
<ul><br />
<li>[[Мобильное приложение курьера для Android|Приложение курьера для Android]]</li><br />
<li>[[Мобильное приложение курьера для IPhone|Приложение курьера для iOS]]</li><br />
<li>[[Мобильное приложение кладовщика для Android|Приложение кладовщика для Android]]</li><br />
</ul><br />
</td><br />
</tr><br />
</table><br />
<br />
==Наши контакты==<br />
<br />
<div style="font-size: 13px; overflow: hidden; min-width: 400px;"><br />
<div style="overflow:hidden; margin-bottom: 20px;"><br />
<div style="width: 40%; float: left;"><br />
<div style="padding-left: 90px;"><br />
<div style="width: 90px; float:left; margin-left: -90px;"> <br />
</div><br />
<br />
<div style="float: left;"><br />
<h3> Техническая поддержка </h3><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> <b>По будням </b> обращайтесь с 8:00 до 21:00 по московскому времени. </p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> <b>По выходным</b> помогаем вам с 10:00 до 18:00. </p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> Email: [mailto:support@courierexe.ru support@courierexe.ru] </p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> Телефон: +7 (495) 987-17-12, 8 (800) 707-90-35 </p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> Skype: courierexe, courierexe3, courierexe4 </p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> <br />
<spoiler text="Подробнее о поддержке">Перед обращением в поддержку, пожалуйста, поищите решение проблемы в этой документации и в сообществе пользователей [http://courierexe.userecho.com courierexe.userecho.com]. В сообществе вы можете оставить свой вопрос и мы обязательно на него ответим!<br />
<br />
Если вы не нашли ответ и не оставили свой вопрос, то позвоните нам по телефону или Skype. Мы спросим ваше имя и название компании, которую представляете. Также будьте готовы оставить телефон для связи и заранее установите программу для подключения к вашему компьютеру: [https://download.teamviewer.com/download/TeamViewer_Setup.exe TeamViewer] или [https://anydesk.com Any Desk].</spoiler> </p><br />
</div><br />
<br />
<div style="float: left;"><br />
<h3> Социальные сети </h3><br />
<p style="padding: 0; margin: 0; line-height: 19px;"> Мы доступны в социальных сетях! Там мы пишем об изменениях в системе и проводим голосования. Планируем публиковать обучающие видео. </p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"> [https://vk.com/measoft ВКонтакте] </p><br />
<br />
</div><br />
</div><br />
</div><br />
<br />
<div style="width: 43%; float: right;"><br />
<div style="padding-left: 90px;"><br />
<div style="width: 90px; float:left; margin-left: -90px;"> <br />
</div><br />
<div style="float: left; width: 100%;"><br />
<h3> Сообщество пользователей</h3><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"><br />
[http://courierexe.userecho.com courierexe.userecho.com]<br />
</p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"><br />
Здесь вы можете предложить свою идею по улучшению или обсудить работу сервиса с другими<br />
пользователями.<br />
</p><br />
<p style="padding: 0; margin: 0; line-height: 19px;"><br />
<br />
<br />
[https://t.me/measoft Telegram-канал]<br />
</p><br />
<br />
<p style="padding: 0; margin: 0; line-height: 19px;"><br />
Подпишитесь на наш канал и будьте уверены, что не пропустите важную для вашей работы<br><br />
новую функциональность! Обсуждайте обновления с другими пользователями и расскажите,<br><br />
что вы думаете о работе сервиса.<br />
</p><br />
</div><br />
</div><br />
</div><br />
<br />
</div></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14661Руководство программиста2023-04-20T10:25:41Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - Дополнительные заголовки HTTP запроса, передается в виде списка параметров через запятую и всегда образуют пару: 1 параметр - название заголовка, 2 параметр - значение. Если значение содержит запятую то его нужно экранировать в двойные кавычки. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в миллисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
LastHttpError - Выводит последнюю ошибку в выполнении Http-запроса в функции HttpPost.<br />
<br />
LastHttpResponse - Выводит последний ответ от сервера после выполнения Http-запроса в функции HttpPost.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{| class="wikitable"<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|-<br />
|OnGetText<br />
|Функция подменяет текстовый вывод значения поля при выгрузке в эксель. Первый параметр это имя поля, которое надо подменить. Второй параметр это то что необходимо вывести. Работает только с текстовыми полями. <br />
'''''Пример использования''''' <br />
DB.OnGetText('Зона', IF((DB.FieldByName('-Lat') ! 0) * (DB.FieldByName('-Lon') ! 0),<br />
GetPolygonByLatLon(DB.FieldByName('-Lat'), DB.FieldByName('-Lon'), 'TYPE = 1 AND IFNULL(zone, 0) > 0 AND PRICE = ' + DB.FieldByName('-price'), 'zone')<br />
,<br />
''<br />
));<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator][,Correction])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1.<br />
Поле Correction позволяет указать данные для корректировочного чека, используется в системе Штрих-М. По умолчанию пустая строка. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
GetDuplexPrinter - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращиет пустую строку<br />
<br />
PrintAttachPDFPage(Code, FileName, Page, Printer) - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
AttachPDFToText(Code, [TextFileName]) - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
GetActiveForm - возвращает код активной формы в программе, где происходит сканирование: 0 - неопределенный; 1 - прием корреспонденции на склад; 2 - АПД; 3 - комплектация адресов (ShelfingForm); 4- доска приема<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
== Объект TMessage ==<br />
Объект используется для скриптовой обработки письма в [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, отправитель письма, тему письма, дата получения и список прикрепленных файлов.<br />
<br />
'''Message.Text''' - возвращает очищенный от HTML-тегов текст письма.<br />
<br />
'''Message.HTMLText''' - возвращает оригинальный текст письма со всеми HTML-тегами.<br />
<br />
'''Message.Sender''' - возвращает email-адрес отправителя письма.<br />
<br />
'''Message.AttachmentsCount''' - возвращает количество вложенных файлов.<br />
<br />
'''Message.DateTime''' - возвращает дату и время получения письма.<br />
<br />
'''Message.Subject''' - возвращает тему письма.<br />
<br />
'''Message.GetAttachmentDataString(Number)''' - возвращает вложенный файл под номером Number в виде строки.<br />
<br />
'''Message.GetAttachmentName(Number)''' - возвращает имя вложенного файла под номером Number.<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14660Руководство программиста2023-04-20T10:24:40Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - Дополнительные заголовки HTTP запроса, передается в виде списка параметров через запятую: 1 параметр - название заголовка, 2 параметр - значение. Если значение содержит запятую то его нужно экранировать в двойные кавычки. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в миллисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
LastHttpError - Выводит последнюю ошибку в выполнении Http-запроса в функции HttpPost.<br />
<br />
LastHttpResponse - Выводит последний ответ от сервера после выполнения Http-запроса в функции HttpPost.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{| class="wikitable"<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|-<br />
|OnGetText<br />
|Функция подменяет текстовый вывод значения поля при выгрузке в эксель. Первый параметр это имя поля, которое надо подменить. Второй параметр это то что необходимо вывести. Работает только с текстовыми полями. <br />
'''''Пример использования''''' <br />
DB.OnGetText('Зона', IF((DB.FieldByName('-Lat') ! 0) * (DB.FieldByName('-Lon') ! 0),<br />
GetPolygonByLatLon(DB.FieldByName('-Lat'), DB.FieldByName('-Lon'), 'TYPE = 1 AND IFNULL(zone, 0) > 0 AND PRICE = ' + DB.FieldByName('-price'), 'zone')<br />
,<br />
''<br />
));<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator][,Correction])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1.<br />
Поле Correction позволяет указать данные для корректировочного чека, используется в системе Штрих-М. По умолчанию пустая строка. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
GetDuplexPrinter - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращиет пустую строку<br />
<br />
PrintAttachPDFPage(Code, FileName, Page, Printer) - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
AttachPDFToText(Code, [TextFileName]) - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
GetActiveForm - возвращает код активной формы в программе, где происходит сканирование: 0 - неопределенный; 1 - прием корреспонденции на склад; 2 - АПД; 3 - комплектация адресов (ShelfingForm); 4- доска приема<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
== Объект TMessage ==<br />
Объект используется для скриптовой обработки письма в [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, отправитель письма, тему письма, дата получения и список прикрепленных файлов.<br />
<br />
'''Message.Text''' - возвращает очищенный от HTML-тегов текст письма.<br />
<br />
'''Message.HTMLText''' - возвращает оригинальный текст письма со всеми HTML-тегами.<br />
<br />
'''Message.Sender''' - возвращает email-адрес отправителя письма.<br />
<br />
'''Message.AttachmentsCount''' - возвращает количество вложенных файлов.<br />
<br />
'''Message.DateTime''' - возвращает дату и время получения письма.<br />
<br />
'''Message.Subject''' - возвращает тему письма.<br />
<br />
'''Message.GetAttachmentDataString(Number)''' - возвращает вложенный файл под номером Number в виде строки.<br />
<br />
'''Message.GetAttachmentName(Number)''' - возвращает имя вложенного файла под номером Number.<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8&diff=14414Файлы для загрузки2022-11-21T08:42:25Z<p>Sammy: </p>
<hr />
<div>На этой странице собраны документы, которые можно загрузить и использовать при настройке системы.<br />
<br />
== Популярные документы ==<br />
* [https://www.courierexe.ru/download/Univer_disc_UPD5_new.xls Стандартный] счет для России со скидкой, УПД и поддержкой валют для версий системы от 2008.0.0.1152. [https://www.courierexe.ru/download/UPD_2021_back_compatible.xls Для старых версий]<br />
<br />
* [https://www.courierexe.ru/download/prnforms/std_ms_171001.xls Многострочный (поддерживает вывод поля «Наименование» из карточки счета)]<br />
<br />
* [https://courierexe.ru/download/nakl.pdf Расширенная накладная в формате PDF]<br />
<br />
* [https://courierexe.ru/download/BNKSEEK.DBF Справочник банков]. Вы можете скачать и обновить справочник банков в системе.<br />
<br />
== Примеры составления документов ==<br />
<br />
=== Документы для клиентов ===<br />
Добавлять в «Справочники» — «Печатные формы» — «Документы для клиентов». После добавления, выйдите из программы и зайдите снова, документ появится в меню по кнопке «Печать» в карточке клиента.<br />
<br />
* [https://courierexe.ru/download/samples/dogovor.doc Пример договора (Word)] Данный документ показывает, как нужно оформить договор для автоматического заполнения программой.<br />
* [https://courierexe.ru/download/samples/dogovor2.doc Пример договора 2 (Word)] Такой же, как предыдущий, плюс загружает реквизиты курьерской службы из фирмы клиента.<br />
* [https://courierexe.ru/download/samples/dogovor3.doc Пример договора 3 (Word)] Склоняет должности (сам) и ФИО руководителей — через сервис morpher.ru — бесплатно до 100 склонений (50 договоров) в день.<br />
<br />
=== Документы для курьеров ===<br />
Добавлять в «Справочники» — «Печатные формы» — «Документы для курьеров». После добавления, выйдите из программы и зайдите снова, документ появится в меню по кнопке «Печать» в карточке курьера.<br />
<br />
* [https://courierexe.ru/download/samples/dogovor_courier.doc Пример договора (Word)] Данный документ показывает, как нужно оформить договор для автоматического заполнения программой.<br />
* [https://courierexe.ru/download/samples/doveren_courier.xls Пример доверенности (Excel)] Данный документ показывает, как нужно оформить договор для автоматического заполнения программой.<br />
<br />
=== Примеры шаблонов загрузки ===<br />
* [https://courierexe.ru/download/samples/load_report.xml Пример шаблона] для загрузки отчетов о доставке от контрагентов. Загружает информацию о доставке из Excel-отчетов. Добавлять в шаблоны импорта БД из эксель. В окне «Условие загрузки» можно настраивать, из каких полей какие значения брать.<br />
<br />
=== Примеры скриптов для доп. возможностей ===<br />
Добавлять в меню «Отчеты» — «Дополнительные возможности»<br />
<br />
* [https://courierexe.ru/download/samples/XML_Load.xml Пример обработки] для загрузки xml-файла. Загружает заказы с товарными вложениями из xml. Добавлять в «Дополнительные возможности».<br />
* [https://courierexe.ru/download/userfunc/toy_load.xml Загрузка XML в формате Той.ру]<br />
* [https://courierexe.ru/download/userfunc/sms_analit.xml Отчет «Аналитика SMS»] Отчет для анализа эффективности составления SMS, контроля расходов на SMS-рассылки.<br />
* [https://courierexe.ru/download/userfunc/changed_rur_report.xml Отчет «Изменения суммы в отправлениях»] Отчет для анализа изменений сумм заказов.<br />
* [https://courierexe.ru/download/userfunc/profit_per_city.xml Отчет «Рентабельность отправок по городам»] Отчет для анализа рентабельности междугородных перевозок.<br />
* [https://courierexe.ru/download/userfunc/old_given_report.xml Отчет «Задержка на руках курьеров»] Отчет для анализа отправлений, не сданных курьерами. В версии 818 от 07.11.2017 было убрано поле «Неотч.» на вкладке «Сотрудники», служившее этой цели. Вместо него предлагается использовать данный отчет.<br />
* [https://courierexe.ru/download/userfunc/store_remains_w_reserv.xml Отчет «Остаток с учетом резерва»] Отчет в виде списка складской номенклатуры в формате Excel с полями «Кол-во товара в резерве» и «Кол-во на складе».<br />
* [https://courierexe.ru/download/userfunc/zone_price_load.xml Загрузка тарифов по зонам] позволяет загрузить междугородные тарифы из файла [https://courierexe.ru/download/userfunc/zone_price_load_example.xls такого формата].<br />
* [https://courierexe.ru/download/userfunc/courier_late_report.xml Отчет по опозданиям курьеров] Выводит доставки, по которым курьер установил статус позже срока окончания доставки, с дополнительной аналитикой.<br />
* [https://courierexe.ru/download/userfunc/clients_weekly.xml Отчет «Оборот по клиентам помесячно и понедельно»] Аналогичный стандартному «Отчеты» — «Клиенты» — «Оборот по клиентам помесячно», но позволяющий вывести оборот за каждую неделю. При формировании отчета по неделям, анализируется динамика роста оборота.<br />
* [https://courierexe.ru/download/userfunc/prin_sozd_39246.xml Отчет «Принятые не набитые накладные»]. При приемке у курьера отправлений забранных, но еще не внесенных в систему (через Доску приема) создаются накладные, которых нигде не видно до их ввода оператором. Этот отчет позволяет их посмотреть и не потерять.<br />
* [https://courierexe.ru/download/userfunc/tickettimereport.xml Отчет «Анализ трудозатрат»]. Позволяет анализировать время, затраченное на решение тикетов в различных разрезах.<br />
<br />
==== Импорт входящих отчетов партнеров ====<br />
* [https://courierexe.ru/download/userfunc/load_incom_act.xml Универсальная загрузка отчета подрядчика] Создает входящий АПД по отчету. Обязательно требуется настройка под конкретный формат входящего документа. Попробуйте посмотреть в тексте, если не получается — обратитесь в тех. поддержку.<br />
* [https://courierexe.ru/download/userfunc/PickPoint_report_load.xml Загрузка отчета PickPoint] Создает входящий АПД по отчету PickPoint [https://courierexe.ru/download/userfunc/PickPoint_report_demo.xls такого формата]. Работает только при передаче заказов в PickPoint с помощью [[Интеграция с другими системами|штатной интеграции]].<br />
* [https://courierexe.ru/download/userfunc/SDEK_report_load.xml Загрузка отчета СДЭК] Создает входящий АПД по отчету СДЭК [https://courierexe.ru/download/userfunc/SDEK_report_demo.xls такого формата]. Работает начиная с версии 626 от 29.01.2016 и только при передаче заказов в СДЭК с помощью [[Интеграция с другими системами|штатной интеграции]].<br />
<br />
==== Импорт выписок по эквайрингу ====<br />
* [https://courierexe.ru/download/userfunc/bank_load/Sber_import.xml Загрузка реестра Сбербанк] Загружает реестр платежей по эквайрингу Сбербанка [https://courierexe.ru/download/userfunc/bank_load/sber_sample.xlsx такого формата]. Устанавливает галку «Оплачено», записывает код транзакции. Выводит результирующий файл с отметками — что загружено, что — нет, и почему.<br />
<br />
== Печатные формы для корреспонденции ==<br />
Чтобы добавить печатную форму:<br />
# Откройте '''Справочники''' > '''Печатные формы''' и в левой части окна выберите '''Бланки для корреспонденции'''.<br />
# В правой части окна в контекстном меню выберите '''Добавить''' и введите название формы.<br />
# Выделите новую форму в списке и в контекстном меню выберите '''Загрузить из файла'''.<br />
<br />
'''Формы для скачивания'''<br />
<br />
{| class="wikitable"<br />
!style="width: 30%;"|Бланк<br />
!style="width: 70%;"|Пояснение<br />
|-<br />
|[https://courierexe.ru/download/samples/post-sticker.doc Шаблон наклейки] для «Почты России»<br />
|Предназначен для наклеечного термопринтера. Выводит «Кому», «Куда» и индекс «правильным» шрифтом. Для правильного отображения индекса нужно установить шрифт [https://courierexe.ru/download/PECHKIN.TTF «Печкин»].<br />
|-<br />
|[https://courierexe.ru/download/samples/from-sticker.doc Шаблон наклейки] «От кого»<br />
|Предназначен для наклеечного термопринтера. Выводит «От кого» и «Откуда» по данным отправителя.<br />
|-<br />
|[https://courierexe.ru/download/samples/PD4.xls Форма '''ПД-4'''] для оплаты через Сбербанк<br />
|Может составляться как на полную стоимость — товар+доставка, так и только на доставку. Может сразу отправляться по e-mail.<br />
|-<br />
|[https://courierexe.ru/download/MarketPlace_v1.txt Форма] для маркетплейсов (например Wildberries, OZON, AliExpress)<br />
|Для каждого маркетплейса создайте отдельного клиента. В карточке номенклатуры товара в поле '''Поставщик''' укажите маркетплейс, в поле '''Артикул''' — штрихкод маркетплейса (запросите у маркетплейса). При печати бланка нужно выбрать, штрихкод какого маркетплейса использовать.<br />
|-<br />
|}<br />
<br />
== Шаблоны рассылки из адресов ==<br />
* [https://courierexe.ru/download/samples/OFD.txt Отправка ссылки на электронный чек]. Работает при фискализации через LIFEPAY. Добавлять в '''Справочники''' > '''Печатные формы''' > '''Шаблоны SMS получателю в адресах''' (или e-mail получателю).<br />
*: '''Примечание'''. В шаблон «зашиты» форматы ссылок на популярные ОФД. Они могут изменяться. Поэтому если ссылка не работает, попробуйте обновить, если не помогает — обратитесь в поддержку.<br />
* [https://courierexe.ru/download/samples/OFD_Send.txt Отправка ссылки на электронный чек 2.0]. Работает при любой фискализации, для систем начиная с версии 1058 от 20.01.2020. Добавлять в '''Справочники''' > '''Печатные формы''' > '''Шаблоны SMS получателю в адресах''' (или e-mail получателю).<br />
<br />
== Печатные формы для манифестов ==<br />
Добавлять в «Справочники» — «Печатные формы» — «Документы для манифестов». После добавления закройте программу, откройте заново, и документ появится на закладке «Манифесты», в контекстном меню «Сопр. документы» к манифесту.<br />
<br />
* [https://courierexe.ru/download/manifest/IMlogisticsManifest.xls '''IM Logistics''' реестр] Префикс штрих-кода должен находиться в поле «Источник информации» карточки клиента. Порядковый номер заказа в поле «Штрих-код клиента».<br />
<br />
* [https://courierexe.ru/download/manifest/IMSticker.xls '''IM Logistics''' печать наклеек ] Для добавления логотипа загрузите файл с расширением bmp, jpg или gif, и с названием «logo» в прикрепленные файлы к клиенту «IM Logistics». Префикс штрих-кода должен находиться в поле «Источник информации» карточки клиента. Порядковый номер заказа в поле «Штрих-код клиента». Печать наклеек производится на наклеечном термо-принтере.<br />
<br />
* [https://courierexe.ru/download/manifest/RPS.xls '''РПС (Русская почтовая служба)''' реестр]<br />
<br />
* [https://courierexe.ru/download/manifest/flippost.xls '''Флиппост''' реестр]<br />
<br />
* [https://courierexe.ru/download/manifest/topdelivery_sticker.xls '''TopDelivery''' печать наклеек] Данная обработка печатает наклейки по правилам TopDelivery ТОЛЬКО после передачи заказов через [[Интеграция с другими системами|штатную интеграцию с TopDelivery]]. Обязательно впишите в файле префикс штрих-кодов, назначенный вам в TopDelivery. Работает ТОЛЬКО начиная с версии программы 2008.0.0.570 от 05.08.2015. [https://courierexe.ru/download/manifest/TopDelSticker.txt '''Версия 2'''] (работает начиная с версии 2008.0.0.744 от 03.02.2017).<br />
<br />
* [https://courierexe.ru/download/manifest/CSE.xls '''КСЭ (Курьер сервис экспресс)''' реестр ] Данная обработка формирует реестр по правилам «Курьер сервис экспресс». Обязательно заполните форму на листе «Данные»! Работает ТОЛЬКО начиная с версии программы 2008.0.0.550 от 21.05.2015. Обратите внимание на наличие [[Интеграция с другими системами|интеграции]].<br />
<br />
* [https://courierexe.ru/download/manifest/torg_12_manifest_1.xls '''ТОРГ-12''' вариант 1] Формируется один документ с одной строкой на манифест.<br />
<br />
* [https://courierexe.ru/download/manifest/torg_12_manifest_2.xls '''ТОРГ-12''' вариант 2] Формируется один документ с одной строкой на каждый заказ в манифесте.<br />
<br />
* [https://courierexe.ru/download/manifest/Glavpunkt_CSV.xls '''Главпункт''' экспорт реестра в CSV] Можно выделить много манифестов и выгрузить все.<br />
<br />
* [https://courierexe.ru/download/manifest/Glavpunkt.xls '''Главпункт''' реестра в XLS].<br />
<br />
* [https://courierexe.ru/download/manifest/Maxipost_reestr.xls '''Максипост''' реестр], [https://courierexe.ru/download/manifest/Maxipost_act.xls Акт приема-передачи]. Обратите внимание на возможность автоматического присвоения системой нумерации отправлений по диапазону подрядчика.<br />
<br />
* [https://courierexe.ru/download/manifest/SamZaberu_reestr.xls '''Сам Заберу''' реестр]. В качестве акта приема-передачи использовать [https://courierexe.ru/download/manifest/torg_12_manifest_2.xls ТОРГ-12 вариант 2]<br />
<br />
* [http://courierexe.ru/download/manifest/Logsys_reestr.xls '''Logsis''' реестр] Формируется один документ с одной строкой на каждый заказ в манифесте. Перед загрузкой в систему необходима настройка.<br />
<br />
* [https://courierexe.ru/download/manifest/professionel.xls '''Профессионал''' реестр]. Для компании <nowiki>https://www.pro-cour.ru/</nowiki><br />
<br />
* [https://courierexe.ru/download/manifest/dost_guru.xls '''Доставка-гуру''' реестр]. Для компании Доставка-гуру.<br />
<br />
* [https://courierexe.ru/download/manifest/sdek.txt '''Наклейка СДЭК'''] с кодом подрядчика.<br />
<br />
=== Печатные формы этикеток при комплектации в манифесты ===<br />
Текст нужно вставить в поле «Скрипт для выполнения в манифестах» на закладке «Дополнительно» карточки филиала. Позволяет формировать этикетки для маркировки отправлений в процессе комплектации манифеста.<br />
<br />
* [https://courierexe.ru/download/manifest/onscan/SDEK.txt '''Наклейка СДЭК'''].<br />
<br />
* [https://courierexe.ru/download/manifest/onscan/5Post.txt '''Наклейка 5Пост''']. Во второй строке текста нужно внести номер, присвоенный вашей компании.<br />
<br />
* [https://courierexe.ru/download/manifest/onscan/TopDelivery.txt '''Наклейка TopDelivery''']. Во второй строке текста нужно внести номер, присвоенный вашей компании.<br />
<br />
* [https://courierexe.ru/download/manifest/onscan/RusPost.txt '''Наклейка Почта России'''].<br />
<br />
== Печатные формы для актов передачи корреспонденции ==<br />
Добавлять в «Справочники» — «Печатные формы» — «Документы для актов передачи корреспонденции». После добавления закройте программу, откройте заново, и документ появится в контекстном меню «Сопроводительные документы» к акту передачи корреспонденции.<br />
<br />
* [https://courierexe.ru/download/samples/torg_12_apk.xls ТОРГ-12]<br />
<br />
== Получение списка названий полей для использования в печатных формах ==<br />
Система позволяет производить выгрузку необходимой информации из определенных полей (например, из карточки клиента или из карточки сотрудника) в печатную форму документа в формате MS Word или MS Excel. Делается это при помощи названия поля, заключенного в теги '''<Name>'''. Например, при составлении документа «Договор клиента» требуется подстановка названия фирмы из карточки клиента в исходный документ. C полным списком доступных полей можно ознакомиться путем создания новой записи в определенном разделе печатных форм (например, «Документы для клиентов») и загрузке в него [https://courierexe.ru/download/samples/echo.doc файла в формате MS Office с содержимым — командой '''%echo%''']. Система при построении этой печатной формы выдаст полный список доступных полей и их названий. Полученные названия полей можно использовать при построении различных пользовательских печатных форм.<br />
<br />
== Отчеты для контролирующих органов == <br />
<br />
=== Отчет для организаций с почтовой лицензией ===<br />
<br />
...<br />
<br />
== Локализация для разных стран ==<br />
<br />
=== Казахстан ===<br />
* [https://www.courierexe.ru/download/prnforms/kazah_VAT.xls Счет для Казахстана с НДС]. Добавлять в '''Справочники''' > '''Печатные формы''' > '''Счета'''.<br />
<br />
=== Украина ===<br />
* [https://www.courierexe.ru/download/prnforms/ukraine.xls Счет для Украины] ОДНОСТРОЧНЫЙ. Добавлять в '''Справочники''' > '''Печатные формы''' > '''Счета'''.<br />
<br />
=== Белоруссия ===<br />
* [https://www.courierexe.ru/download/prnforms/bel_std.xls Белорусский счет], [https://www.courierexe.ru/download/prnforms/bel_std_sk.xls Белорусский счет со скидкой], [https://www.courierexe.ru/download/prnforms/bel_std_ms.xls Белорусский многострочный счет (поддерживает вывод поля «Наименование» из карточки счета)]<br />
* [https://www.courierexe.ru/download/prnforms/belpack/zakaz-poruch.xls Бланк заказ-поручение]. Нужно добавить в '''Справочники''' > '''Печатные формы''' > '''Документы при выдаче курьеру''' (4-й пункт снизу). Он появится (возможно, нужно перевойти в программу) на вкладке '''Выдача''', кнопка '''Печать''' > '''Сопроводительные документы'''. Формирует для всех заказов, выданных курьеру «Заказ-Поручение». Адрес вашей компании берется из карточки в '''Справочники''' > '''Филиалы'''. Номер путевого листа формируется при формировании [[Путевые листы|путевого листа]], поэтому запускать этот бланк правильно после путевого листа.<br />
*[https://www.courierexe.ru/download/prnforms/TTNBEL.xlsx ТТН + приложение]<br />
*[https://www.courierexe.ru/download/prnforms/PUTBEL.xlsx Путевой лист]</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14294Руководство программиста2022-11-02T15:28:51Z<p>Sammy: /* Объект TADO */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{| class="wikitable"<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|-<br />
|OnGetText<br />
|Функция подменяет текстовый вывод значения поля при выгрузке в эксель. Первый параметр это имя поля, которое надо подменить. Второй параметр это то что необходимо вывести. Работает только с текстовыми полями. <br />
'''''Пример использования''''' <br />
DB.OnGetText('Зона', IF((DB.FieldByName('-Lat') ! 0) * (DB.FieldByName('-Lon') ! 0),<br />
GetPolygonByLatLon(DB.FieldByName('-Lat'), DB.FieldByName('-Lon'), 'TYPE = 1 AND IFNULL(zone, 0) > 0 AND PRICE = ' + DB.FieldByName('-price'), 'zone')<br />
,<br />
''<br />
));<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns,ShowAll]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. ShowAll - показать все дополнительные услуги, по умолчанию false и показывает только услуги с начислениями. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
GetDuplexPrinter - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращиет пустую строку<br />
<br />
PrintAttachPDFPage(Code, FileName, Page, Printer) - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
AttachPDFToText(Code, [TextFileName]) - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14293Дополнительные возможности2022-11-02T15:27:36Z<p>Sammy: </p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском<br />
<br />
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
'''DAILY''' - задание выполняемое один раз в день<br />
<br />
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
== Настройка документов ==<br />
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
'''GetTypeShippingPlace''' - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
'''OnSchetChanged''' - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
'''ExceptionsForAPK''' - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется).<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
'''OnEveryStartApp''' - выполняется при запуске программы.<br />
<br />
'''OnEveryCloseApp''' - выполняет при закрытии программы.<br />
<br />
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14247Дополнительные возможности2022-09-08T16:02:49Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
OnAfterItemPrint - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
PrintCustomSticker - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
OnAfterAddressSave - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
OnBarScan - Скриптовая обработка штрих-кода перед поиском<br />
<br />
AfterAddressAcceptance - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
BeforeAddressAcceptance - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
OnAddToShippingPlace - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
GetTypeShippingPlace - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
OnBeforePlanToManifest - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
OnBeforeScanToManifest - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
OnBeforePlanning - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
DAILY - задание выполняемое один раз в день<br />
<br />
OnGivnKurierStateChanged - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
OnBeforeGivnStatus - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
OnBeforeClientSave - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
== Настройка документов ==<br />
CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
GetTypeShippingPlace - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
AdditionalStringForSMA - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
CustomBillDetaling - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
OnSchetChanged - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
ExceptionsForAPK - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
OnOrderCountCalc -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
OnGetZakazCount - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
OnSMABarcodeScan - событие вызывается при сканирвании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
OnPaintSMAColumns - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется).<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
OnEveryStartApp - выполняется при запуске программы.<br />
<br />
OnEveryCloseApp - выполняет при закрытии программы.<br />
<br />
OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
OnMapBeforeGeolocation - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
OnCalcSalary - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
OnTicketSetCusr - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
OnCreateAddressForActDelivery - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<source lang="sql"><br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);<br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14246Дополнительные возможности2022-09-08T16:01:10Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
OnAfterItemPrint - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
PrintCustomSticker - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
OnAfterAddressSave - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
OnBarScan - Скриптовая обработка штрих-кода перед поиском<br />
<br />
AfterAddressAcceptance - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
BeforeAddressAcceptance - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
OnAddToShippingPlace - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
GetTypeShippingPlace - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
OnBeforePlanToManifest - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
OnBeforeScanToManifest - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
OnBeforePlanning - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
DAILY - задание выполняемое один раз в день<br />
<br />
OnGivnKurierStateChanged - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
OnBeforeGivnStatus - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
OnBeforeClientSave - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
== Настройка документов ==<br />
CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
GetTypeShippingPlace - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
AdditionalStringForSMA - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
CustomBillDetaling - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
OnSchetChanged - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
ExceptionsForAPK - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
OnOrderCountCalc -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
OnGetZakazCount - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
OnSMABarcodeScan - событие вызывается при сканирвании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
OnPaintSMAColumns - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется).<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
OnEveryStartApp - выполняется при запуске программы.<br />
<br />
OnEveryCloseApp - выполняет при закрытии программы.<br />
<br />
OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
OnMapBeforeGeolocation - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
OnCalcSalary - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
OnTicketSetCusr - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
OnCreateAddressForActDelivery - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save. <br />
<br />
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.<br />
<?><br />
if((client=3360)*(ActType=2),<br />
rem(Ticket 70827, 2022-09-07 Anatoly and Sergey);<br />
set($addresscode, fieldlist._save);<br />
query('insert boxes (address, pos, name) <br />
select '+$addresscode+' AS address, @q := @q + 1 AS pos, <br />
CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`<br />
FROM addressfld af<br />
JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p<br />
WHERE <br />
af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');<br />
,0);</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=14245Дополнительные возможности2022-09-08T15:43:08Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
OnAfterItemPrint - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
PrintCustomSticker - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
OnAfterAddressSave - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
OnBarScan - Скриптовая обработка штрих-кода перед поиском<br />
<br />
AfterAddressAcceptance - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
BeforeAddressAcceptance - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
OnAddToShippingPlace - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
GetTypeShippingPlace - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
OnBeforePlanToManifest - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
OnBeforeScanToManifest - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
OnBeforePlanning - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
DAILY - задание выполняемое один раз в день<br />
<br />
OnGivnKurierStateChanged - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
OnBeforeGivnStatus - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
OnBeforeClientSave - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).<br />
<br />
== Настройка документов ==<br />
CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
GetTypeShippingPlace - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
AdditionalStringForSMA - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
CustomBillDetaling - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
OnSchetChanged - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
ExceptionsForAPK - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
OnOrderCountCalc -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
OnGetZakazCount - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
OnSMABarcodeScan - событие вызывается при сканирвании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)<br />
<br />
OnPaintSMAColumns - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры:<br />
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется).<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
OnEveryStartApp - выполняется при запуске программы.<br />
<br />
OnEveryCloseApp - выполняет при закрытии программы.<br />
<br />
OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
OnMapBeforeGeolocation - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
OnCalcSalary - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
OnTicketSetCusr - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)<br />
<br />
OnCreateAddressForActDelivery - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта.</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=14244Руководство программиста2022-09-08T15:40:42Z<p>Sammy: /* Объект TBaseUtils */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
FirstDayOfMonth(dt) – Возвращает первый день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( FirstDayOfMonth( CurrDate() ) );<br />
<br />
LastDayOfMonth(dt) – Возвращает последний день месяца в формате DD.MM.YYYY для даты dt в формате DD.MM.YYYY. Пример вызова: Error( LastDayOfMonth( CurrDate() ) );<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0], [DefaultHolidayVarNum=1]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней(по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1],[DefaultHolidayVarNum=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным. Параметр DefaultHolidayVarNum - использовать для расчета справочник: 1 - выходных дней (по умолчанию); 2 - выходных дней для доставки по городу; 3 - выходных дней для доставки<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
GetDefaultPrinter - Возвращает имя текущего активного принтера.<br />
<br />
SetDefaultPrinter(Printer) – Запоминает предыдущий активный принтер и устанавливает новый текущий принтер. Printer - имя принтера. При необходимости нескольких последовательных вызовов SetDefaultPrinter рекомендуется между вызовами использовать RestoreDefaultPrinter.<br />
<br />
RestoreDefaultPrinter - Устанавливает активным принтер, который был текущим перед последним вызовом SetDefaultPrinter.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Работа функции может быть изменена системной доп. возможностью OnCreateAddressForActDelivery.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
'''VoiceReadStr(str)''' – Озвучивает фразу str голосовым уведомлением доступными словами из базы. Может содержать тег "{break_off}" для того, чтобы сделать эту фразу не пропускаемой в очереди воспроизведения.<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
GetDuplexPrinter - возвращает имя принтера выбранного для двусторонней печати, если принтер не выбран, возвращиет пустую строку<br />
<br />
PrintAttachPDFPage(Code, FileName, Page, Printer) - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
AttachPDFToText(Code, [TextFileName]) - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с уровнем (pricelevel) меньше текущего.<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D1%82%D1%87%D0%B5%D1%82%D1%8B&diff=14207Пользовательские отчеты2022-07-08T10:22:13Z<p>Sammy: </p>
<hr />
<div>Для управления пользователями выберите пункт «Дополнительные возможности» меню «Отчеты» главного меню программы. Откроется окно дополнительных возможностей.<br />
<br />
Для создания новой дополнительной возможности выберите пункт «Создать» в контекстном меню и введите название новой дополнительной возможности. После этого Вы переходите к редактированию исходного текста пользовательской функции.<br />
<br />
Синтаксис дополнительных возможностей:<br /><br />
Код дополнительной возможности состоит из 2-х или более частей, разделяемых пустой строкой.<br /><br />
Первая часть – описание формы ввода данных пользователем. Если она отсутствует (форма не нужна), то перед второй частью все-равно должна быть пустая строка.<br /><br />
Описание формы состоит из описаний полей ввода – одно поле на одной строке. Описание каждого поля ввода состоит из четырех параметров, разделяемых запятыми:<br />
#input – должно присутствовать всегда – признак объявления поля ввода.<br />
#Имя переменной, которой будет присвоен результат – рекомендуется использовать символ доллара в начале переменной для однозначной идентификации<ref>Заполнение запроса значениями происходит функцией replace, поэтому нельзя допускать, чтобы название одной переменной было подстрокой названия другой переменной. Например, если Вы создаете 2 переменные: $date и $date1, переменная $date1 может оказаться неработоспособной, поскольку ее название включает в себя название другой переменной</ref>.<br />
#Название поля ввода – текстовая строка, которая будет выведена на форме.<br />
#Тип поля ввода. Возможные значения: <br />
::INT – вводит целое число<br />
::STR – вводит строку<br />
::CUSTSTR – вводит строку, но не экранирует ее при подстановке в запрос<br />
::FLOAT – вводит число с плавающей точкой<br />
::CHECK – вводит булево значение (отображается на форме в виде галочки)<br />
::DATE – вводит дату<br />
::TIME – вводит время<br />
::COMBO - вводит текст с возможностью выбора из выпадающего списка<br />
::COMBOLIST - вводит текст из выпадающего списка<br />
::UPDOWN - вводит целое число со стрелками уменьшения/увеличения<br />
::FILESTR - вводит имя файла для открытия файла<br />
::SAVEFILESTR - вводит имя файла для сохранения файла<br />
::CHECKLISTBOX - выводит список с галками<br />
::MEMO- многострочное поле для ввода текста<br />
5. Значение по-умолчанию<br />
<br />
Пример объявления формы:<br />
{|<br />
|<pre>input, $zakaz, Введите номер заказа, int, 555 <br />
input, $date1, Введите дату начала, date<br />
input, $date2, Введите дату конца, date</pre><br />
|<br />
|}<br />
Каждая последующая часть является выполнением запросов к БД. Выполнение запросов бывает 2-х видов: “Query” – просто выполнение запросов без возврата таблицы - для запросов типа insert, update, delete, и “Report” – выполнение запроса и выгрузка результатов его выполнения в Excel.<br /> <br />
Каждая часть с запросом должна начинаться с одного из этих ключевых слов – Query или Report, а дальше через пробел или с новой строки пишется запрос, в котором можно использовать переменные, введенные в первой части, а также зарезервированное выражение «%AddressQuery%», которое подставляет значение SQL-запроса из таблицы адресов на закладке «Адреса», для использования введенных пользователем фильтров<ref>Если запрос «select» возвращает поле, имя которого заканчивается на «_recno», при выгрузке в Excel значения этого поля будут заменены порядковым номером записи. Поля, имена которых начинаются на тире (-) не будут выведены. Это удобно использовать для полей технического назначения, например, для сортировки</ref>. В строке Report через пробел можно указать название ярлыка листа. Если в нем запятые - текст нужно взять в одинарные кавычки. Если в доп. возможности несколько блоков Report, отчеты будут выведены в один документ Excel на разные листы.<br />
<br />
Пример полного текста дополнительной возможности:<br />
{|<br />
|<pre><br />
input, $zakaz, Введите номер заказа, int <br />
input, $date1, Введите дату начала, date<br />
input, $date2, Введите дату конца, date<br />
<br />
report 'Ярлык листа для отчета'<br />
select 0 as '№ п/п_recno', target as 'Компания', name as 'ФИО'<br />
from address <br />
where zakaz=$zakaz<br />
and date_put between $date1 and $date2</pre><br />
|<br />
|} <br />
Данный код выводит диалоговое окно для ввода пользователем исходных данных, и потом выводит отчет о корреспонденции из указанного заказа, доставленной в указанный промежуток времени.<br />
<br />
Пример использования %AddressQuery% (обратите внимание, что перед текстом должна быть пустая строка, обозначающая начало второй части текста):<br />
{|<br />
|<pre><br />
<br />
report select 0 as '№ п/п_recno', 'Электротовары и аксессуары к ним' as 'Характер груза', case when k.car is not null <br />
then (select concat('Водитель: ',c.number, ' ', ct.name) from cars c join car_types ct on c.type=ct.code where c.code=k.car) <br />
else concat('Пеший: ', k.name) end as 'Вид транспорта', case when (a.number=0) and (a.strbarcode<><nowiki>''</nowiki>) then a.strbarcode<br />
else concat(a.zakaz, '-', a.number) end as 'Номер курьерской накладной', a.address as 'Пункт назначения',<br />
a.rur as 'Страховая сумма в руб.'<br />
from (%addressQuery%) a join kurier k on a.tokurier=k.code</pre><br />
|<br />
|}<br />
Данный код выгружает корреспонденцию, выбранную пользователем в «Адресах», добавляя поле нумерации строк, текстовое поле с фиксированным значением, а также поле, в котором указывается пеший курьер доставляет, или водитель, и, если водитель – то указывается марка и гос. номер автомобиля.<br />
<br />
Описание таблиц: Описание основных таблиц системы находится в таблице log.logfields, общий список таблиц можно посмотреть выполнив запрос «show tables from courier», а структуру конкретной таблицы – «describe table <table_name>»<br />
<br />
<br />
<br />
Пример использования типов полей ввода Combo и Combolist.<br />
<br />
Пример использования Combolist для выбора значения из выпадающего списка приведен ниже:<br />
<br />
{|<br />
|<pre><br />
input, $variable, Выберите клиента, combolist, SELECT company FROM CLIENTS where date_p>now() or Date_P is null order by COMPANY<br />
<br />
<?><br />
showmessage($variable);</pre><br />
|<br />
|}<br />
<br />
Пример использования Combo, позволяющего осуществлять выбор из выпадающего списка путем текстового ввода значения приведен ниже:<br />
<br />
{|<br />
|<pre><br />
input, $combo1, Выберите клиента, combo, SELECT company FROM CLIENTS where date_p>now() or Date_P is null order by COMPANY<br />
<br />
<?><br />
showmessage($combo1);</pre><br />
|<br />
|}<br />
<br />
Пример построения предустановленного списка значений вместо запроса рассмотрен в следующем примере. Значения списка необходимо перечислить через запятую. Пример синтаксиса рассмотрен ниже:<br />
<br />
{|<br />
|<pre><br />
input, $combo1, Выберите клиента, combo, 'Выбор 1, Выбор 2, ''Выбор с , запятой'', ''Выбор с ''' апострофом'''</pre><br />
|<br />
|} <br />
<br />
Пример использования символа 'запятой' в исходном коде рассмотрен на примере ее использования дважды в коде. Первое - в названии поля ввода, второе - в самом Select-запросе для разделения двух полей "company" и "code".<br />
<br />
{|<br />
|<pre><br />
input, $combo1, 'Выберите клиента, какого хотите!', combo, 'SELECT company, code FROM CLIENTS where date_p>now() or Date_P is null order by COMPANY, code'<br />
<br />
<?><br />
showmessage('Выбрали клиента с кодом:'+$combo1.codes);</pre><br />
|<br />
|} <br />
<br />
<br />
=Примечания=<br />
<references/></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=13950Руководство программиста2022-04-19T14:08:15Z<p>Sammy: /* Экранирование */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
FormatTextBlob(s) - строка s содержит файл, функция перекодирует переданную строку в байты, используется для заполнения полей формата blob.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). <br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл SrcPath в архив и располагает его по пути ZipPath. - ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
PrintAttachPDFPage(Code, FileName, Page, Printer) - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
AttachPDFToText(Code, [TextFileName]) - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=13949Руководство программиста2022-04-15T09:25:04Z<p>Sammy: /* Объект TADO */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel. Для работы без установленного MS Excel предусмотрен объект TDirectExcel. <br />
<br />
<br />
'''''Ввод данных'''''<br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
<br />
'''''Ячейки'''''<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
<br />
'''''Строки'''''<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
<br />
'''''Столбцы'''''<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
<br />
'''''Листы'''''<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа. Если лист с таким номером не существует - он будет создан (и все листы до него). Нумерация начинается с 1.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
<br />
'''''Форматирование'''''<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
NumberFormat(x1, y1, x2, y2, Format) - Устанавливает формат вывода чисел в указанном диапазоне ячеек. Например, если Format='0.00' - числа будут выводиться c обязательными 2 знаками после десятичного разделителя.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
<br />
'''''Цвета'''''<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
<br />
'''''Копи-паст'''''<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
<br />
'''''Изображения'''''<br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
<br />
'''''Вывод'''''<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр copies - количество копий, по умолчанию равен 1.<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
<br />
'''''Пример использования'''''<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|-<br />
|GetSQL<br />
|Для отладки. Возвращает последний SQL запрос переданный в методы Open, Query, GetSQLValue<br />
|-<br />
|ExportExcel<br />
|Для отладки. Выгружает в эксель содержимое датасета. Можно использовать в незнакомом окружении для понимания передаваемых полей в : шаблонах, печатных формах и т.д. Аналог команды %echo% в шаблонах, на случай если она не сработает.<br />
|}<br />
<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). <br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл SrcPath в архив и располагает его по пути ZipPath. - ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
PrintAttachPDFPage(Code, FileName, Page, Printer) - печатает страницу из вложенного файла PDF. Code - код вложения (attachment), Page - номер страницы, Printer - 0 = принтер A4, 1 = принтер этикеток. <br />
<br />
AttachPDFToText(Code, [TextFileName]) - преобразует файл PDF из вложений в текст. Code - код вложения (attachment), TextFileName - имя текстового файла, в который записывается результат (если не указан, используется временный файл). Возвращает текст в виде строки.<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%92%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B&diff=13786Веб-сервисы2022-03-24T11:16:41Z<p>Sammy: /* Форма отзывов */</p>
<hr />
<div>Все ссылки на дополнительные сервисы содержат '''экстра_код'''. Экстра код — это ваш уникальный [[Личный кабинет курьерской службы#Подключение|код курьерской службы]].<br />
<br />
Дополнительными сервисами может воспользоваться любой клиент курьерской службы. Для этого ему не нужно иметь доступ в [[личный кабинет]], достаточно перейти по нужной ссылке.<br />
<br />
== Калькулятор ==<br />
Сервис предназначен для расчета стоимости доставки, работает аналогично [[Личный кабинет клиента#Калькулятор|калькулятору]] в личном кабинете.<br />
<br />
Калькулятор доступен по ссылке вида '''home.courierexe.ru/экстра_код/calculator'''. Экстра-код можно посмотреть [[Интеграция с другими системами#Тарификация и выбор подрядчика и его тарифа клиентом|по ссылке]].<br />
[[Файл:калькулятор.png|none|450 px]]<br />
<br />
== Трекинг по номеру ==<br />
Позволяет отслеживать статус заказа по его номеру. Сервис доступен по ссылке вида '''home.courierexe.ru/экстра_код/tracking'''. При поиске заказа выводится таблица с подробностями. Поля таблицы настраиваются в [[Личный кабинет курьерской службы#Настройка личного кабинета клиента|личном кабинете курьерской службы]] на вкладке '''Поля трекинга по номеру'''.<br />
<br />
Чтобы получить информацию о заказе, введите его номер в поле '''Код''' и нажмите на кнопку '''Найти'''.<br />
<br />
[[Файл:трекинг.png|none|900px]]<br />
<br />
== Отзывы ==<br />
Сервис позволяет запрашивать у клиентов отзывы о работе курьерской службы, в том числе о заказах, о работе курьера, о работе менеджера и т. д.<br />
<br />
=== Настройка получения отзывов ===<br />
Например, запрос отзыва у получателя о работе курьера, доставившего заказ, работает следующим образом. Мы добавляем в карточку клиента пользовательское поле — флажок '''Оценка курьера'''. Если флажок установлен, по доставленным заказам этого клиента в определенном статусе запускается автоматическая смс-рассылка с ссылкой на форму голосования. Результаты можно вывести в отчеты и в карточку курьера. Требуется подключение [[Модуль отправки SMS-сообщений|модуля отправки смс-уведомлений]].<br />
<br />
Чтобы автоматизировать работу сервиса, отправьте обращение в нашу службу поддержки с ответами на следующие вопросы:<br />
# Кто кому будет ставить оценку или оставлять отзыв?<br>Например, это будет получатель, который оценивает работу курьера.<br />
# Выберите тип отзыва:<br />
#* оценка (в том числе в виде звёздочек);<br />
#* комментарий;<br />
#* оценка и комментарий;<br />
#* отзыв типа хорошо/плохо.[[Файл:Отзыв1.PNG|none|450 px]]<br />
# Когда отправлять смс получателю: когда заполнен статус доставки со слов курьера (предварительный статус доставки) или указана информация о доставке по заказу в карточке корреспонденции (окончательный статус доставки)?<br />
# Пришлите текст смс для оценки качества работы. Учтите, что длина одного смс-сообщения — 160 символов латиницей или 70 символов кириллицей. <br>Пример: «Здравствуйте. Оцените, пожалуйста, работу курьера <ссылка>»<br />
# Добавить в карточку курьера пользовательское поле — флажок '''Не оценивать курьера'''?<br>Если флажок установлен, по заказам, доставленным этим курьером, рассылки не будет. Это нужно, чтобы исключить служебных курьеров из смс-рассылки.<br />
# Как вы хотите получать статистику для оценки качества работы? <br>Вы можете скачать и импортировать в '''Отчеты''' > '''Дополнительные возможности''':<br />
#* отчет о рейтинге курьера, который будет показывать оценку в разрезе курьера за указанный период. Поля отчета: «Курьер», «Средняя оценка», «Количество оценок». [https://www.courierexe.ru/download/Report1.xml Скачать];<br />
#* сводный отчет по оценкам качества за период по доставленным корреспонденциям. Поля отчета: «Шифр», «Курьер», «Оценка», «Комментарий к оценке». [https://www.courierexe.ru/download/Report2.xml Скачать].<br />
#: Если вам нужен другой отчет, пришлите пример шаблона такого отчета с описанием полей.<br />
# Добавить в карточку курьера поле '''Рейтинг курьера'''? Оно показывает среднюю оценку работы курьера за последние 3 месяца:[[Файл:Оценка курьера.png|none|500 px]]<br />
<br />
=== Форма отзывов (голосование) ===<br />
Для работы сервиса используется ссылка на форму вида '''home.courierexe.ru/экстра-код/opinions''' с параметрами:<br />
<br />
* '''code''' — внутренний код сущности, которой дается оценка, в системе. Обязательный параметр.<br />
* '''rate''' — <rspoiler text="оценка">При наличии параметра rate оценка проставляется сразу и в форме не запрашивается. Обычно создаются две ссылки, одной из которых присвоено значение rate = 1, а другой — rate = 5. Таким образом формируется тип отзыва «хорошо/плохо», когда у клиента на выбор только две оценки. Возможно как с запросом комментария, так и без него. </rspoiler>. Для заказов параметр должен быть равен коду из справочника [[Справочники#Жалобы клиентов|Жалобы]]. Для остальных типов — целое число от 1 до 5.<br />
* '''type''' — тип сущности, которой дается оценка. По умолчанию 3 (заказ).<br />
* '''note''' — признак ввода комментария. По умолчанию 1.<br />
* '''star''' — признак вывода в виде звёздочек. По умолчанию 1.<br />
* '''hash''' — значение хэша ссылки. Хэш генерируется функцией [[Руководство программиста#Хеширование|SignatureUrl]]. Обязательный параметр.<br />
* '''field''' — Пользовательское поле, для указания типа отзыва.<br />
<br />
Примеры запросов (без хэша):<br />
<br />
home.courierexe.ru/экстра-код/opinions?code=123456 Запрос оценки в виде звёздочек и комментария для адреса (type = 3, note = 1, star = 1).<br />
home.courierexe.ru/экстра-код/opinions?code=123456&rate=1 Запрос комментария для адреса (оценка уже проставлена).<br />
home.courierexe.ru/экстра-код/opinions?code=123456&star=0 Запрос оценки в виде списка и комментария для адреса.<br />
home.courierexe.ru/экстра-код/opinions?code=123456&type=12 Запрос оценки сотрудника в виде звёздочек с комментарием.<br />
home.courierexe.ru/экстра-код/opinions?code=123456&rate=1&note=0 Оценка выставлена, комментарий не запрашивается, сразу выводится сообщение о выставленной оценке.<br />
<br />
Для уменьшения длины ссылки можно использовать короткую форму записи метода и параметров (наименования параметров сокращаются до одной буквы):<br />
<br />
home.courierexe.ru/экстра-код/'''o'''?'''c'''=123456&'''r'''=1&'''n'''=1&'''t'''=3<br />
<br />
== Информирование системы о поступивших заказах ==<br />
[[Файл:информ.новые_заказы.png|right|300px|thumb|Подключение окна уведомлений о заказах]]<br />
<br />
В системе MeaSoft есть возможность включить автоматические уведомления о заказах, поступающих из [[Личный кабинет клиента|ЛК клиента]]/[[API|API-интерфейса]]. Для этого в основном меню выберите «Настройка» → «Пользователи» → карточка пользователя → «Настройка», '''поставьте галку''' '''«Показывать окно поступивших заказов»''' и нажмите «ОК».<br />
<br />
В результате у выбранного пользователя в системе MeaSoft каждые 10 минут будет появляться окно со списком новых заказов и двумя кнопками: «Перейти (Прочитан)» и «Закрыть».<br />
<br />
Чтобы временно скрыть окно, нажмите кнопку «'''Закрыть'''».<br />
<br />
Чтобы открыть список новых заказов на вкладке «Адреса», нажмите кнопку «'''Перейти'''». После этого кнопка «Перейти» сменится на «Прочитан».<br />
<br />
Чтобы очистить список заказов из окна уведомлений, нажмите кнопку «'''Прочитан'''».<br />
<br />
== Внешний интерфейс сотрудников (Staff) ==<br />
Интерфейс позволяет без входа в систему MeaSoft совершать следующие действия:<br />
* вносить информацию о доставке заказов по накладным — [[#Адреса|Адреса]];<br />
* добавлять и редактировать собеседования — [[#Собеседования|Собеседования]];<br />
* получать заказы на обзвон — [[#Колл-центр|Колл-центр]];<br />
* вести учет по приглашенным клиентам — [[#Приглашенные|Приглашенные]].<br />
<br />
Сервис доступен по ссылке вида '''home.courierexe.ru/экстра_код/staff'''.<br />
<br />
Сотрудник должен быть зарегистрирован в системе MeaSoft как [[Пользователи#Создать нового пользователя|пользователь]]. Для входа в Staff используются те же логин и пароль, что и для входа в систему MeaSoft.<br />
<br />
Количество доступных разделов зависит от прав пользователя.<br />
<br />
=== Адреса ===<br />
Пункт основного меню '''Адреса''' позволяет удаленному сотруднику вносить в корреспонденции информацию о доставке из отсканированных накладных. По умолчанию отображается список заказов в виде таблицы.<br />
<br />
Чтобы внести информацию о доставке, нажмите на строку заказа. Откроется окно, вверху которого скан накладной, а внизу — форма для внесения данных. Заполните ее и нажмите кнопку '''Сохранить'''. Заказ исчезнет из списка адресов.<br />
<br />
Таблица заказов содержит следующие столбцы:<br />
<br />
'''#''' — внутренний код в Staff.<br />
<br />
'''Фирма''' — компания получателя.<br />
<br />
'''Адрес''' — адрес получателя.<br />
<br />
'''Заказ''' — номер заказа с вкладки '''Заказы'''.<br />
<br />
'''Номер''' — значение столбца '''Номер''' с вкладки '''Адреса'''.<br />
<br />
'''Шифр''' — шифр корреспонденции.<br />
<br />
Вверху справа можно выполнить поиск корреспонденции.<br />
<br />
Заказ попадает в список на вкладке '''Адреса''', если:<br />
* он не старше 2 месяцев;<br />
* в поле '''Инфо о доставке''' введено слово «Скан»;<br />
* к заказу прикреплен [[Функции|скан накладной]] с заполненной информацией о доставке. Имя файла должно быть «scan.jpg».<br />
<br />
=== Собеседования ===<br />
Пункт основного меню '''Собеседования''' предназначен для добавления и редактирования [[Собеседования|собеседований]].<br />
<br />
Вверху справа можно отфильтровать собеседования по дате, имени кандидата. Правее можно выбрать столбцы, которые будут отображаться в таблице, и количество записей собеседований, выводимых на странице.<br />
<br />
Чтобы добавить собеседование, нажмите на кнопку '''Добавить''', в открывшемся окне внесите необходимую информацию и нажмите '''Сохранить'''.<br />
<br />
Чтобы отредактировать собеседование, нажмите на соответствующую строку и в открывшемся окне внесите необходимые изменения.<br />
<br />
=== Колл-центр ===<br />
Позволяет удаленному сотруднику получать задачи на обзвон клиентов по вопросам доставки заказов. Заказы попадают в проекты, созданные в [[Личный кабинет курьерской службы#Колл-центр|ЛК курьерской службы]]. Проект соответствует условию, по которому фильтруются попадающие в него заказы. Например, проект по обзвону клиентов с изменившейся датой доставки.<br />
<br />
Раздел '''Колл-центр''' для оператора выглядит следующим образом:<br />
<br />
[[Файл:Колл-центр для оператора.png|none|1100 px]]<br />
<br />
<br />
Чтобы получить задачу на обзвон, нажмите на кнопку '''Получить заказ'''. Откроется окно следующего вида:<br />
<br />
[[Файл:Проект для оператора.png|none|1100 px]]<br />
<br />
Слева отображается название проекта и скрипт звонка, справа — форма для просмотра и редактирования данных заказа.<br />
<br />
Если вы дозвонились по указанному в форме номеру, внесите информацию в форму, переведите заказ в соответствующий статус и нажмите на кнопку '''Сохранить'''. Если в результате меняется плановая дата или район доставки, у заказа сбрасывается плановый курьер.<br />
<br />
Если дозвониться не удалось, нажмите на кнопку '''Не дозвонились'''. Через 1 час заказ снова появляется в очереди задач проекта.<br />
<br />
При нажатии на кнопку '''Отмена''' заказ сразу возвращается в очередь задач.<br />
<br />
Полученная сотрудником задача исчезает из очереди. Если по полученной задаче в течение получаса не совершается никаких действий, она принудительно возвращается в очередь.<br />
<br />
=== Приглашенные ===<br />
Пункт основного меню '''Приглашенные''' предназначен для удаленных сотрудников, которые получают вознаграждение за приведенных клиентов. Здесь они могут видеть таблицу со списком приглашенных клиентов и размером своего вознаграждения за их заказы. Вверху справа можно отфильтровать клиентов по дате. Нажатие на строку таблицы открывает окно с детализацией заказов.<br />
<br />
В системе MeaSoft такой сотрудник должен быть назначен [[Сотрудники#Виды сотрудников|агентом]], а также указан менеджером на вкладке '''Основное''' в <rspoiler text="карточке клиента">«Клиенты» → карточка клиента → вкладка «Основное» → поле «Менеджер» </rspoiler>, которого он привёл. Там же в поле '''% менеджера''' указывается размер вознаграждения агента в виде процента от заказов.<br />
<br />
== Геокодирование ==<br />
[[Модуль «Карта»#Геокодирование|Геокодирование]] выполняется запросом к серверу на адрес:<br />
<br />
http://home.courierexe.ru/geocoder<br />
<br />
GET-параметры:<br />
<br />
* '''geocoder''' — в данном параметре может использоваться как полный адрес для разбора, так и в составе других параметров<br />
* '''town''' — город<br />
* '''address''' — адрес<br />
* '''street''' — улица<br />
* '''home''' — номер дома<br />
* '''extracode''' — дополнительный параметр, зависит от клиента<br />
<br />
<br />
Результатом является ответ в формате XML, например:<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<ymaps><br />
<GeoObjectCollection><br />
<featureMember><br />
<GeoObject><br />
<metaDataProperty><br />
<GeocoderMetaData><br />
<kind>house</kind><br />
</GeocoderMetaData><br />
</metaDataProperty><br />
<name>ул. Сталеваров, 20</name><br />
<Point><br />
<pos>37.8389496 55.754736</pos><br />
<kind>house</kind><br />
<zipcode>house</zipcode><br />
<distance>house</distance><br />
</Point><br />
</GeoObject><br />
</featureMember><br />
</GeoObjectCollection><br />
</ymaps><br />
</source><br />
<br />
Параметры ответа:<br />
<br />
* '''name''' — найденный адрес<br />
* '''pos''' — геокоординаты — долгота и широта<br />
* '''kind''' — найденный элемент является домом, если значение house<br />
* '''zipcode''' — индекс найденного объекта<br />
* '''distance''' — расстояние до МКАД/КАД в метрах<br />
<br />
<br />
Ответ в случае, если адрес не геокодирован<br />
<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<ymaps><br />
<error><br />
<status>429</status><br />
<message>Coordinates aren't found</message><br />
</error><br />
</ymaps><br />
</source></div>Sammyhttps://wiki.courierexe.ru/index.php?title=%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&diff=13566Настройка модуля автоматизации2022-02-10T15:29:53Z<p>Sammy: /* Импорт данных */</p>
<hr />
<div>== Подходы в выборе алгоритма для построения автоматической e-mail/смс рассылки ==<br />
<br />
В этой статье будут рассмотрены общие рекомендательные принципы и подходы для эффективного выбора алгоритма настройки автоматической рассылки в системе КС2008. Перед формированием заявки для настройки автоматической e-mail или смс рассылки пользователю системы крайне желательно ознакомиться с данной инструкцией.<br />
<br />
'''1. Не рассылать одновременно e-mail и смс уведомление.'''<br />
<br />
Массовая автоматическая рассылка в системе может быть реализована двумя способами – e-mail или смс информирование. Для каждого нового задания рекомендуется выбирать лишь один и из этих способов. Не следует перегружать клиента избыточной или регулярно повторяющейся информацией. <br />
По нашей практике: смс уведомления наиболее востребованы для уведомления получателя, что к нему едет курьер. Можно в этом же сообщении отправить телефон курьера, чтобы получатель мог напрямую в течение дня у курьера уточнить - когда именно тот планирует приехать. <br />
E-mail уведомления более востребованы для рассылки клиентам информации с вложениями в виде прикрепляемых файлов с отчетами.<br />
<br />
'''2. Предусмотреть набор типов рассылки в карточке клиента (пользовательские поля для клиентов).'''<br />
<br />
Система предусматривает возможность создания списка рассылок в карточке клиента в виде галок. Этот функционал позволяет включить клиента в рассылку или отключить от нее, а также настроить тарификацию необходимых рассылок в виде дополнительных услуг, предоставляемых клиенту. <br />
<br />
'''3. Периодичность рассылки и ее рабочее время.'''<br />
<br />
Алгоритм выполнения определенного задания рассылки может быть организован с заданной периодичностью. В связи с тем, что заданий для рассылки в системе может быть несколько – необходимо оптимально распределить время их выполнения. Принципиально необходимо решить – отправлять e-mail уведомление по каждому событию или разово, единым реестром в конце дня, недели и т.д. Пример: e-mail рассылка отчета о доставках выполняется утром в 9:00 за предыдущий день. Выбор периодичности обязательно должен учитывать и интересы клиента – будет клиент просматривать множество писем с информацией или одно письмо с итоговой информацией в виде реестра.<br />
<br />
Настройка рабочего времени рассылки (или часовой диапазон) больше применимы для смс информирования. Эта настройка призвана разделять рабочее время и время отдыха. Таким образом, клиент не получит смс в 6 часов утра или в 11 часов вечера. Стандартно в системе принято условие для смс-рассылки с 8 до 10 вечера (по местному времени), но по желанию клиента этот диапазон может быть изменен.<br />
<br />
'''4. Продумать текст рассылки, ее алгоритм, способ, а потом обращаться для настройки.'''<br />
<br />
Необходимо тщательно продумать текст сообщения для рассылки, выбрать его тему (как правило, относится к e-mail рассылке). Специальные теги в системе позволят добавить в них информацию, например о номере документа или периоде его формирования.<br />
<br />
'''5. Узнать у клиента, какие рассылки ему требуются.'''<br />
<br />
Хорошей практикой перед запросом для настройки рассылки может стать предварительный опрос клиентов – какая рассылка действительно необходима клиенту? необходима ли она ему вообще? сколько для клиента будет стоить эта услуга ? Как и при каких условиях клиент сможет отписаться от рассылки?<br />
<br />
'''6. Длина и кодировка смс рассылки (ссылка).'''<br />
<br />
Известно, что длина смс сообщения влияет на его стоимость. Уменьшить длину поможет выбор типа кодировки сообщения: кириллица или транслитерация. Перед планированием смс-рассылки необходимо в системе выполнить примерный анализ предполагаемых расходов в сутки/месяц. Это поможет сразу построить эффективную модель задания и избавить от последующих изменений и корректировок в скрипте задания. <br />
Более подробно этот вопрос рассмотрен в статье по ссылке: Почему мои сообщения не доставлены? Почему уходит много денег? http://wiki.courierexe.ru/index.php?title=Модуль_отправки_SMS-сообщений<br />
<br />
'''7. Подготовительная работа в системе перед настройкой e-mail или смс-рассылки.'''<br />
<br />
Необходимо заранее выбрать и настроить в системе почтовый адрес, от лица которого, будет производиться отправка писем. Для смс-рассылки необходимо выбрать провайдера услуг, выполнить настройку его подключения к системе и произвести тестовую отправку сообщения в ручном режиме.<br />
<br />
'''8. Статусная модель для заказов в ЛК – как альтернатива рассылке отчета о доставках.'''<br />
<br />
Любой клиент КС2008 сможет воспользоваться отслеживанием своих заказов посредством личного кабинета (этот функционал доступен в пакете [[Личный кабинет#Подключение|“Премиум”]]). Статусная модель позволяет клиенту в режиме реального времени узнать состояние (статус) выполнения заказа, что, несомненно, является весомым преимуществом по сравнению с почтовым уведомлением.<br />
<br />
'''9. Спам фильтры и блокировка уведомлений на стороне клиента.'''<br />
<br />
Для e-mail рассылки с большими объемами всегда существует проблема. Большинство почтовых серверов могут начать воспринимать сообщения из рассылки как спам, и бОльшая часть почты будет проигнорирована получателем или же попадать в соответствующие папки. Не редкость, когда получателю надоедает регулярно повторяющаяся информация, и он самостоятельно блокирует нежелательную почту как спам. Со временем, почтовый адрес компании, являющийся отправителем писем, может попасть в глобальный черный список антиспам систем и заработать глобальную блокировку.<br />
<br />
== Модуль автоматизации (интеграции) ==<br />
<br />
Модуль автоматизации (интеграции с внешними системами) предназначен для выполнения периодических заданий импорта/экспорта/обработки данных. Модуль представляет из себя Службу Windows, которая каждые 10 секунд проверяет, наличие заданий в таблице scheduler.jobs с прошедшим временем следующего выполнения, и выполняет эти задания.<br />
<br />
Заданиями для модуля интеграции (модуля автоматизации) могут быть примеры таких заданий, как:<br />
<br />
- Оборудование: Автопечать продажных/возвратных чеков, автоматическое ежедневное формирование Z-отчета для фискальных регистраторов;<br />
<br />
- Отчеты: Всевозможные e-mail оповещения в формате Excel (например, отчет о доставке);<br />
<br />
- SMS оповещения: автоматические SMS рассылки для клиентов/курьеров;<br />
<br />
- Интеграция: Процесс обмена заказами и их статусами с другими компаниями (например, курьерскими службами, интернет магазинами);<br />
<br />
- Автоматический экспорт-импорт информации с БД систем других производителей (например, WMS-системами "системами управления складом").<br />
<br />
'''Документация ниже не предлагает всем пользователям системы самостоятельно настраивать задания данного модуля. Наоборот, мы рекомендуем обращаться за настройкой к нам. Однако документация ПОЗВОЛЯЕТ при желании и наличии специалистов выполнить настройку самостоятельно'''<br />
<br />
== Установка ==<br />
== Настройка ==<br />
параметры ini файла:<br />
<br />
SMTPProtocol - тип протокола отправки почты: 0 - SMTP, 1 - SSL, 2 - TLS<br />
<br />
== Создание заданий ==<br />
<br />
Задания описываются в текстовом виде в поле TEXT таблицы jobs.<br />
В одном тексте может быть несколько заданий, разделенных пустой строкой, за исключением случая, когда текст начинается с префикса интерпретатора ("<?>").<br />
Задание может быть следующих видов: Интерпретируемый код, Импорт данных, Выполнение запроса (возможно, с экспортом результата).<br />
<br />
== Интерпретируемый код ==<br />
Если задание начинается с префикса интерпретатора, то весь последующий код обрабатывается им.<br />
<br />
<br />
== Импорт данных ==<br />
input, OperNo, FileType, Param1, Param2, Param3, Param4, Param5, Param6<br />
<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|input <br />
|Признак типа задания - импорт данных<br />
|-<br />
|OperNo<br />
|Номер действия. Значения: 0 - загрузка по FTP, SFTP. 1 - Получение почты.<br />
|-<br />
|FileType<br />
|Тип файла. Принимает значения:<br />
<br />
0 - Формат "Йота"<br />
<br />
1 - Формат "Сони"<br />
<br />
2 - Формат "Омни"<br />
<br />
3 - [[Описание стандартного протокола интеграции|Стандартный формат заказов]]<br />
<br />
4 - [[Описание стандартного протокола интеграции|Стандартный формат отчетов]]<br />
<br />
5 - Пользовательская процедура импорта<br />
<br />
6 - Пользовательская процедура импорта, без загрузки файла<br />
<br />
|-<br />
|Param1<br />
|Полный путь к папке на FTP-сервере (вместе с именем сервера) (для SFTP используйте sftp://имя_сервера)<br />
|-<br />
|Param2<br />
|Имя пользователя FTP-сервера<br />
|-<br />
|Param3<br />
|Пароль FTP-сервера<br />
|-<br />
|Param4<br />
|Маска имен файлов, подлежащих загрузке<br />
|-<br />
|Param5<br />
|Код клиента (поле courier.clients.code), для привязки загруженных заказов<br />
|-<br />
|Param6<br />
|Активное соединение FTP. Для использования активного режима укажите active<br />
|}<br />
<br />
При задании "1" - Импорт почты система получает почту по всем аккаунтам из таблицы Accounts и загружает их в таблицы messages и attachment<br />
<br />
== Экспорт данных ==<br />
query, OperNo, FileType, Param1, Param2, Param3, Param4, Param5, Param6<br />
QueryText<br />
<br />
Модуль выполняет запрос QueryText, и передает результат его выполнения функции отправки, описанной в первой строке задания.<br />
<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|query<br />
|Признак типа задания - экспорт данных<br />
|-<br />
|OperNo<br />
|<br />
Номер действия. Значения: <br />
0 - Только выполнение запроса.<br />
1 - Отправка по электронной почте<br />
2 - Выгрузка файла на FTP, SFTP-сервер<br />
<!-- 3 - Выгрузка заказов в систему "Аксиомус"<br />
4 - Проверка статусов с системе "Аксиомус"<br />
5 - Синхронизация с системой "Эмпрана"<br />
6 - Отправка складских остатков в систему "Эмпрана" --><br />
7 - Отправка сообщений из тикетов <spoiler text="Параметры">FileType=2 - отключает отправку писем на входящие сообщения.</spoiler><br />
|-<br />
|FileType<br />
|<br />
Тип файла. Принимает значения:<br />
1 - Формат CSV <br />
2 - Формат "Сони"<br />
3 - Формат XLS<br />
4 - формат CSV (с заголовками)<br />
5 - загрузка файла и запуск скрипта<br />
6 - запуск скрипта (без загрузки файла)<br />
|}<br />
<br />
Значения параметров 1-6 зависят от типа операции:<br />
<br />
'''Тип операции - 0:'''<br />
Не используются.<br />
<br />
'''Тип операции - 1:'''<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|Param1<br />
|Адрес e-mail для отправки <br />
|-<br />
|Param2<br />
|Тема сообщения. Если пусто - "CourierAutoReport"<br />
|-<br />
|Param3<br />
|Текст сообщения. Если пусто - "see attachment"<br />
|-<br />
|Param4<br />
|Маска имени файла. Доступны шаблоны %DT%, %D%, %T% - Дата/время в форматах YYYYMMDDHHMMSS, YYYYMMDD, HHMMSS соответственно. Если пусто - используется ДатаВремя<br />
|-<br />
|Param5<br />
|Не используется<br />
|-<br />
|Param6<br />
|Не используется<br />
|}<br />
<br />
'''Тип операции - 2:'''<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|Param1<br />
|Полный путь к папке на FTP-сервере (вместе с именем сервера) (для SFTP используйте "sftp://имя_сервера...")<br />
|-<br />
|Param2<br />
|Имя пользователя FTP-сервера<br />
|-<br />
|Param3<br />
|Пароль FTP-сервера<br />
|-<br />
|Param4<br />
|Маска имен файла. Доступны шаблоны %DT%, %D%, %T% - Дата/время в форматах YYYYMMDDHHMMSS, YYYYMMDD, HHMMSS соответственно. Если пусто - используется ДатаВремя<br />
|-<br />
|Param5<br />
|Активное соединение FTP. Для использования активного режима укажите active<br />
|-<br />
|Param6<br />
|Не обязательный параметр, полный путь к папке на FTP-сервере для сохранения копии <br />
|}<br />
<br />
<!--<br />
'''Типы операции - 3, 4:'''<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|Param1<br />
|Имя пользователя системы "Аксиомус"<br />
|-<br />
|Param2<br />
|Пароль системы "Аксиомус"<br />
|-<br />
|Param3<br />
|Не используется<br />
|-<br />
|Param4<br />
|Не используется<br />
|-<br />
|Param5<br />
|Не используется<br />
|-<br />
|Param6<br />
|Не используется<br />
|}<br />
<br />
'''Тип операции - 5:'''<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|Param1<br />
|Адрес сервера системы "Эмпрана"<br />
|-<br />
|Param2<br />
|Имя пользователя системы "Эмпрана"<br />
|-<br />
|Param3<br />
|Пароль системы "Эмпрана"<br />
|-<br />
|Param4<br />
|Код клиента (поле courier.clients.code), для привязки загруженных заказов<br />
|-<br />
|Param5<br />
|Символьный код города системы "Эмпрана"<br />
|-<br />
|Param6<br />
|Не используется<br />
|}<br />
<br />
'''Тип операции - 6:'''<br />
{|<br />
!Параметр<br />
!Описание<br />
|-<br />
|Param1<br />
|Адрес сервера системы "Эмпрана"<br />
|-<br />
|Param2<br />
|Имя пользователя системы "Эмпрана"<br />
|-<br />
|Param3<br />
|Пароль системы "Эмпрана"<br />
|-<br />
|Param4<br />
|Код клиента (поле courier.clients.code), для привязки загруженных заказов<br />
|-<br />
|Param5<br />
|Символьный код города системы "Эмпрана"<br />
|-<br />
|Param6<br />
|Не используется<br />
|}<br />
<br />
Обязательно указать запрос! Например, select 1!<br />
<br />
'''Тип операции - 7:'''<br />
<br />
Параметры не используются!<br />
<br />
Обязательно указать запрос! Например, select 1! --><br />
<br />
== Примеры использования ==<br />
<br />
<br />
=== Импорт заказов в стандартном формате с FTP-сервера ===<br />
<br />
<br />
input, 0, 4, myftphost.ru/upload/folder/, MyUserName, MyPassword, *_orders.csv, 123, active<br />
<br />
=== Экспорт заказов в CSV-файле на FTP-сервер ===<br />
<br />
query, 0<br />
replace scheduler.sent (code, sent, source, rectype)<br />
select a.code, 'F', b.source, 2 <br />
from <br />
courier.address a join zakaz b on a.zakaz=b.code left join scheduler.sent s on s.code=a.code and s.source=b.source and s.rectype=2<br />
where a.ldtime>=date_sub(now(), interval 7 day)<br />
and s.code is null<br />
and b.source=123<br />
<br />
query, 2, 1, myftphost.ru/upload/foulder/, MyUserName, MyPassword, MY-ORD-%DT%<br />
select a.code, a.strbarcode, a.target, a.name, a.address, a.phone, a.rur<br />
from scheduler.sent s join courier.address a on s.code=a.code <br />
where s.sent='F' and s.source=123 and s.rectype=2<br />
<br />
query, 0<br />
update scheduler.sent set sent='T' where sent='F' and source=123 and rectype=2<br />
<br />
Данное задание состоит из 3-х подзаданий. В первом - запрос собирает коды корреспонденции, измененной за последние 7 дней, но не добавленных в очередь отправки в таблице sent. Во втором происходит формирование CSV-файла с заказами, у которых стоит отметка, что они не отправлены (sent.sent='F'), и отправка файла на FTP-сервер. В последнем подзадании запрос отмечает всю корреспонденцию отправленной. Если на втором этапе, при отправке файла произойдет ошибка, то этот, третий запрос не будет выполнен, заказы останутся в состоянии "не отправлен", и в следующий раз будет предпринята повторная попытка их отправки.</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=13513Руководство программиста2022-01-27T13:18:47Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). <br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл SrcPath в архив и располагает его по пути ZipPath. - ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=13512Руководство программиста2022-01-27T13:17:24Z<p>Sammy: /* Объект TBase */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). <br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл SrcPath в архив и располагает его по пути ZipPath. - ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=13511Руководство программиста2022-01-27T13:16:16Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
RuleName(alias) - Выдает полный путь в дерева прав по псевдониму права.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0, width=0, height=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки, width, height (не работает для DirectExcel) - ширина и высота области рисунка в пойнтах-единицах Excel <br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). <br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID (для провайдера iVoice - идентификатор сценария (кампании)). Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдеров BitCall и iVoice. Для BitCall по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием). Для iVoice по умолчанию подразумевается параметр 'response', при этом будет возвращен JSON с ответами абонента на заданные вопросы (в зависимости от сценария)<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл SrcPath в архив и располагает его по пути ZipPath. - ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9E%D0%B1%D0%BE%D1%80%D1%83%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&diff=13166Оборудование2021-12-02T10:02:58Z<p>Sammy: /* Выбор серверного оборудования */</p>
<hr />
<div>== Аппаратные требования к рабочей станции ==<br />
* Работа под управлением ОС Windows 32/64 Bit: Win7, Win8; Win10.<br />
* Установленный и активированный пакет Microsoft Office 2007 или выше '''кроме «Office 2010 Starter»'''.<br />
* Процессор: любой, удовлетворяющий рабочим требованиям линейки ОС Windows.<br />
* Оперативное запоминающее устройство (ОЗУ): от 2 Gb и выше.<br />
* Запоминающее устройство HDD: от 30 GB и выше.<br />
* Сетевой интерфейс: проводной/беспроводной Ethernet интерфейс.<br />
* Монитор: диагональ, обеспечивающая разрешающую способность экрана не менее 1024*768 пикселей.<br />
* Периферийные порты ввода-вывода USB, RS232 (при необходимости наличия таковых): для подключения периферийного оборудования (сканер штрихкодов, <br>фискальный регистратор, термопринтер).<br />
* Клавиатура, манипулятор мышь.<br />
<br />
== Выбор сервера для системы ==<br />
<br />
=== Выбор серверного оборудования ===<br />
Система MeaSoft нетребовательна к аппаратным ресурсам сервера.<br />
<br />
Что касается '''производительности''', то для небольшой компании, человек 10 в офисе, как правило, производительности бытового ноутбука, установленного в качестве сервера, будет более, чем достаточно. То есть серверную часть можно установить на любую машину, за которой работает пользователь. Для компаний до 20 сотрудников мы рекомендуем использовать бытовой компьютер, но «назначенный» сервером, то есть чтобы он стоял отдельно работал круглосуточно, и им никто не пользовался в качестве рабочей станции. Для компаний более 20 человек — лучше использовать именно серверное оборудование, хотя у нас есть установка, где на бытовом Core i3 одновременно работает 80 человек.<br />
<br />
'''Объем диска''': Изначально при установке БД занимает около 1 Gb. Далее она увеличивается в зависимости от использования. Если компания доставляет 20000 отправлений в месяц, через 3 года объем базы будет 10 Gb с одной оговоркой: Больше всего места в БД занимают файлы, такие, как архив отсканированных накладных, отправленные по почте отчеты и счета, и т. д. Здесь, если компания использует эти возможности, она за год может накопить и 100 и 200 Gb. Так же необходимо учитывать некоторый объем свободного места, необходимый для создания резервных копий, а так же для работы самой ОС.<br />
<br />
Самое главное требование системы к серверу — это его '''надежность'''. Надо понимать, что при поломке сервера приостановится работа всей компании. В худшем случае — можно потерять данные, введенные с момента последней резервной копии. Для сокращения возможных рисков, нужно стараться, по возможности, делать сервер максимально надежным:<br />
<br />
* Мы не рекомендуем устанавливать сервер на ноутбук, так как его форм-фактор предполагает некоторую степень мобильности. Есть соблазн взять его куда-то с собой. А при перемещении велик риск его потери, кражи, его можно уронить и разбить. Еще один фактор низкой надежности ноутбуков — они часто умирают от пролитого на них чая/кофе/пива.<br />
* Мы не рекомендуем устанавливать серверную часть на компьютер, за которым работает пользователь. Здесь главный фактор риска — это заражение компьютера вирусами, которые пользователь, по неграмотности, скачивает из интернета, приносит на флешках и т. д. Антивирус никакой от этого не спасает.<br />
* Мы рекомендуем устанавливать на серверный компьютер [https://ru.wikipedia.org/wiki/RAID Raid-1] массивы для снижения вероятности выхода из строя/потери данных в случае поломки жесткого диска. Однако нужно понимать, что это тоже не панацея: жесткие диски достаточно часто выходят из строя все одновременно, например, при поломке блока питания, когда напряжение «пробивает» через него и приводит к выгоранию всех компонентов компьютера, В случае стихийных бедствий и несчастных случаев (прорывы в трубах, например), или просто от того, что 2 HDD одной модели, купленные одновременно имеют одинаковый ресурс наработки на отказ.<br />
* Мы рекомендуем устанавливать [https://ru.wikipedia.org/wiki/Источник_бесперебойного_питания ИБП] на сервер для предохранения его от скачков напряжения в сети и/или аварийного завершения работы при отключении питания.<br />
* Мы рекомендуем использовать специализированное серверное оборудование, так как оно по определению гораздо надежнее, вплоть до резервирования блоков питания. Но такое оборудование достаточно дорогое, и его использование носит исключительно рекомендательный характер.<br />
<br />
Некоторые наши клиенты не удовлетворяются вышеизложенными рекомендациями по выбору серверного оборудования и просят нас предоставить формальные требования к серверу. Вот они:<br />
<br />
1. Работа под управлением ОС Windows 2012 Server R2;<br><br />
2. Процессор: многоядерный, удовлетворяющий требованиям ОС;<br><br />
3. Оперативное запоминающее устройство (ОЗУ): от 4 GB;<br><br />
4. Запоминающее устройство HDD: от 360 Gb, Raid-1;<br><br />
5. Сетевой интерфейс: проводной Ethernet интерфейс — 100 Mbit.;<br><br />
6. Монитор, с разрешением минимум 1024*768;<br><br />
7. Клавиатура microsoft минимум 103 клавиши;<br><br />
8. Мышь оптическая;<br><br />
9. Колонки активные минимум 2 Вт;<br><br />
10. Коврик для мыши силиконовый :-)<br><br />
<br />
=== Выбор серверной операционной системы ===<br />
Серверная часть MeaSoft работает практически на любой операционной системе. Исключение — модуль интеграции с внешними системами.<br />
<br />
При выборе ОС нужно рассмотреть все плюсы и минусы. Обычно выбор стоит между Windows и Linux.<br />
<br />
Windows — платная система. Серверная Windows стоит 40-45 т.р. Система прекрасно работает, например, на Windows 7 (желательно только не домашнюю версию), которая стоит в разы меньше. Ограничение на количество подключений к ней не имеет отношения к нашей системе.<br />
<br />
Linux — «бесплатная» система. Почему в кавычках? Потому что стоимость владения им гораздо выше: для администрирования системы linux необходим системный администратор с глубокими познаниями этой ОС, а такие специалисты стоят в 2 раза дороже, чем администраторы Windows.<br />
<br />
Таким образом даже «дорогая» серверная Windows окупается за пару месяцев. Linux можно выбирать только в том случае, если в вашей компании и так уже работает несколько системных администраторов Linux, которые смогут решать возможные проблемы с ней. Наша компания оказывает необходимую для работы системы помощь в администрировании windows-серверов, но с linux эта функция полностью ложится на заказчика. Почему мы говорим, что должно быть несколько администраторов в случае с Linux? Потому что в случае увольнения единственного администратора, как правило, компанию ждут времена несчастий, пока не найдется новый ТОЛКОВЫЙ системный администратор.<br />
<br />
Резюме: Выбирайте Linux только в том случае, если вы точно уверены в том, что делаете. В противном случае — только Windows.<br />
<br />
=== Размещение сервера ===<br />
Для классической архитектуры системы, когда офис-склад консолидированы в одном месте, мы рекомендуем размещение сервера в офисе. То есть в точке максимального использования системы. Это обеспечивает максимальную скорость и надежность. При этом при необходимости удаленного доступа к системе — достаточно, имея внешний статичный IP-адрес, «пробросить» порт 3306 на сервер.<br />
<br />
В последнее время все больше популярность приобретает размещение сервера «в облаке». На самом деле формально — это, конечно, не [https://ru.wikipedia.org/wiki/Облачное_хранилище_данных облако] в широком понимании, а [https://ru.wikipedia.org/wiki/VPS сервер], физический или виртуальный, находящийся в дата-центре. При выборе такого варианта установки программы следует учесть ряд факторов:<br />
* '''Скорость доступа''' Наша система очень чувствительна к скорости доступа. Некоторые операции могут вызывать несколько обращений к серверу, и увеличение времени одного обращения на несколько миллисекунд существенно снижает общую производительность системы на рабочем месте. При размещении сервера в дата-центрах Европы, например, скорость доступа ([https://ru.wikipedia.org/wiki/Ping ping]) из Москвы составляет 50-60 мс. Это — на грани возможности использования программы. При размещении в дата-центре того же города, где находятся пользователи, время доступа — порядка 3-5 мс. Для сравнения — доступ по локальной сети — менее 1 мс.<br />
* '''Надежность интернет-канала''' Нужно понимать, что в случае размещения сервера в интернете система не будет работать у вас в офисе и/или на складе в случае отсутствия доступа в интернет. Желательно обеспечить резервирование канала, причем, желательно, не 3G-«свистком» (см. следующие 2 пункта).<br />
* '''Пропускная способность интернет-канала''' При разработке системы мы стараемся минимизировать объемы информации, передаваемые между рабочим местом и сервером. Но если доступ происходит через интернет, на одном канале работает несколько человек, на котором работает и программа и телефоны, а кто-то смотрит видео в ютубе, а кто-нибудь еще придумает пользоваться торрентами — работа остановится.<br />
* '''Стабильность интернет-канала''' При доступе к серверу не должны теряться пакеты. Если на канале происходят потери — программа будет закрываться с сообщением о том, что произошла потеря соединения с сервером. Потери пакетов можно проанализировать командой ping -t <имя_сервера, например ya.ru>.<br />
* '''Надежность дата-центра''' Теоретически — в дата-центре обеспечивается резервирование и электропитания, и каналов передачи данных. Естественно, в них стоят и промышленные климатические системы, поддерживающие заданную рабочую температуру всего оборудования. Но на практике часто бывает, что сервер оказывается недоступным на время от нескольких минут до нескольких дней. Техподдержка (если ее телефон вообще отвечает, а часто как раз в эти моменты она не работает — либо потому, что телефония работает на том же канале, который у них и «упал», либо потому, что тысячи пользователей серверов, обнаружив неполадки, начали им одновременно звонить) скажет «да, в вашем сегменте технические неполадки, мы устраняем», и больше сделать вы ничего не сможете. В случае, если сервер стоит у вас в офисе — вы сами принимаете моментальные меры. Вплоть до того, что можно вынуть из сгоревшего сервера жесткий диск, подключить к другому компьютеру, и восстановить работу системы.<br />
* '''Стоимость''' При размещении на linux-VDS серверах стоимость на текущий момент — [http://firstvds.ru/products/vds_vps_hosting 600-900 руб/мес], Windows — [https://masterhost.ru/service/hosting/vps/ 4000 руб/мес]. По поводу выбора ОС читайте соответствующий раздел этой же статьи.<br />
<br />
Отсюда вывод:<br />
Мы рекомендуем устанавливать сервер «в облаке» только в случае сильно распределенной структуры компании. Когда максимальную скорость и надежность нужно обеспечить множеству удаленных пользователей, а не в одном конкретном месте.<br />
<br />
== Доступ для установки системы ==<br />
<br />
Для установки системы программисту MeaSoft требуется доступ к вашему серверу с правами администратора. В процессе установки потребуется устанавливать службы, запускать и останавливать их, а также производить запуск приложений от имени администратора. Доступ можно предоставить одним из способов:<br />
* по [https://remontka.pro/microsoft-remote-desktop/ RDP] — передайте нам IP-адрес сервера, порт (если он отличается от стандартного), логин и пароль для подключения;<br />
* через [https://www.teamviewer.com/ru/info/remote-desktop/ TeamViewer] — установите и запустите программу на сервере и передайте нам ID и пароль подключения.<br />
<br />
== Рекомендованное периферийное оборудование ==<br />
<br />
=== Сканер штрихкодов ===<br />
Рекомендуются к приобретению сканеры, официально ввезенные в вашу страну, адаптированные для местного рынка, имеющие здесь официальных поставщиков.<br />
<br />
Мы рекомендуем:<br />
* Zebex Z-3000 (CCD-сканер) — дешевый;<br />
* Honeywell (Metrologic) 5145 Eclipse — лазерный;<br />
* Honeywell (Metrologic) DS6707 — image, позволяет сканировать 2D-штрихкоды;<br />
* Honeywell (Metrologic) 1202g Voyager BT — радиосканер, позволяет сканировать на расстоянии от компьютера.<br />
<br />
Рекомендуются к приобретению сканеры с типом подключения USB HID.<br />
<br />
Если вы определились с моделью сканера, то тип подключения не играет существенной роли: наша программа позволяет работать с любой из списка поддерживаемых моделей (проводной или беспроводной). Выбор интерфейса, скорее всего, зависит от наличия и доступности соответствующего порта на компьютере пользователя (так, интерфейс RS-232 предполагает наличие COM-порта, а интерфейс KBW, как правило, PS/2). Очевидным является тот факт, что наиболее универсальным будет сканер, работающий через интерфейс USB (USB HID).<br />
<br />
Проводной или беспроводной сканер имеет такое же примерно значение, как проводная или беспроводная мышь: если вам нужно работать удаленно от управляющего устройства (компьютера), то для этого стоит выбирать беспроводную модель. Все беспроводные модели сканеров (обычно работающие через технологию Bluetooth) имеют аккумуляторные батареи и зарядные устройства, которые часто выполнены в виде базовой станции (приемно-передающего устройства) с функцией зарядки переносной части сканера.<br />
<br />
При выборе сканера обратите внимание на то, что при типе подключения USB HID (рекомендуется) или «разрыв клавиатуры» сканер требует некоторой настройки. [[#Подключение и настройка сканеров штрихкодов|В разделе ниже]] приведены программирующие листы для различных моделей сканеров. Если вы покупаете сканер не из списка, для которого есть программирующий лист, будьте готовы к тому, что потребуется создание такого листа. Для его создания нужно полное руководство по программированию конкретного сканера на русском или английском языках. С этим часто бывают проблемы, если вы покупаете сканеры с доставкой из Китая — они, как правило, настолько китайские, что у них нет ни документации, ни сайта производителя. В таком случае остается уповать только на везение.<br />
<br />
=== Термопринтер ===<br />
Поддерживаются любые термо- и термо-трансферные принтеры.<br><br />
Рекомендуется термопринтер Zebra ZD410 — у него ширина печатающей головки 60 мм, поэтому ленту такой же ширины сложно вставить неправильно. Очень прост в обслуживании и заправке ленты. <br><br />
'''ВНИМАНИЕ!''' При покупке следует учитывать, что термопринтеры не комплектуются USB-шнуром и этикетками, поэтому их необходимо приобрести отдельно. Рекомендуем этикетки размером 58×40 мм.<br />
<br />
=== Весы ===<br />
Поддерживаются весы фирмы «МЕРА», которые поддерживают протоколы «ОКА» или «9 байт» или «Mera Avto». По нашим сведениям этот протоколы ОКА и Mera Avto поддерживают те весы, у которых есть цифровая клавиатура 0-9. Но лучше — уточняйте у продавца. Протокол «9 байт» в силу своей низкоуровневой работы с COM-портом может не работать через USB-переходники.<br><br />
Рекомендуем весы Мера ВП-3/30 — небольшие, точные, не дорогие.<br><br />
При покупке весов обратите внимание на то, что они могут подключаться к COM-порту, который отсутствует на многих компьютерах. Для весов существуют провода в USB-порт, эмулирующие COM-порт. Так же в продаже имеются переходники, а так же платы расширения компьютеров, позволяющие добавить COM-порты.<br />
Инструкцию по настройке и подключению весов смотрите в этой статье ниже.<br />
<br />
=== Фискальный регистратор ===<br />
В рамках 54-ФЗ поддерживается и рекомендуется работа с сервисом удаленной фискализации LIFE PAY.<br />
<br />
Поддерживаются все фискальные регистраторы фирмы «Штрих-М»<br />
<br />
Рекомендуется ШТРИХ-LIGHT-ФР-К (cамый бюджетный)<br />
<br />
При покупке ФР обратите внимание на то, что они могут подключаться к COM-порту, который отсутствует на многих компьютерах. Для них существуют провода в USB-порт, эмулирующие COM-порт. Также в продаже имеются переходники и платы расширения компьютеров, позволяющие добавить COM-порты.<br />
<br />
=== Банковский POS-терминал ===<br />
[https://ru.wikipedia.org/wiki/POS-%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D0%BB POS-терминал].<br />
Мобильное приложение поддерживает интеграцию с сервисами IBox, LIFE PAY, а также поддерживается работа с независимыми POS-терминалами.<br />
<br />
=== Планшетный сканер ===<br />
Применяется для сканирования ведомостей с подписью, после чего полученные документы вы можете прикрепить в программе к соответствующей корреспонденции.<br><br />
Рекомендуются сканеры с автоматической подачей.<br><br />
При выборе устройства обратите внимание на следующие характеристики:<br />
* Скорость сканирования;<br />
* Наличие функции обнаружения подачи двух листов;<br />
* Двухстороннее сканирование;<br />
* Количество сканирований до отказа.<br />
<br />
=== Монитор ноутбука/нетбука/компьютера ===<br />
Рабочее место пользователя для работы с MeaSoft должно оснащаться монитором с разрешающей способностью экрана не менее 1024*768 пикселей. При работе на портативных устройствах, таких как нетбуки, у которых разрешение ниже рекомендуемого, в экран могут не помещаться некоторые окна.<br />
<br />
=== Штрихкодовая линейка-угол ===<br />
Штрихкодовая линейка-угол применяется для обмера габаритов отправления. Обмер можно производить при приеме корреспонденции на склад (F10 на вкладке «Заказы»). Каждое деление (1, 5 или 10 миллиметров) линейки промаркировано своим штрихкодом. Прикладывая товар к линейке и сканируя штрихкод, соответствующий краю товара, получаем размеры. Чтобы включить поддержку штрихкодированной линейки, нужно в окне приема, нажать кнопку «Настройки» и установить галку «Включить поддержку штрихкодированной линейки». Для работы с линейкой удобнее использовать лазерные сканеры, у них полоса считывания наводится точно на нужный штрихкод. Реализована поддержка производителя [http://cortes.ru/shtrihcode/barcodeline.php Кортес]. Перед покупкой нужно проверять модель на совместимость с системой. Система поддерживает следующий формат ШК:<br><br />
Длина ШК 7 символов, начинается всегда на «29», например: 291XXXX, 292XXXX, 293XXXX<br><br />
где: XXXX — значение в милиметрах, 3-й знак — направление измерения от 1 до 3, то есть координата (длина, ширина, высота).<br />
<br />
=== Терминал сбора данных ===<br />
Терминал сбора данных (ТСД) под управлением Android может работать совместно с MeaSoft как сканер штрихкодов. Для этого установите на ТСД наше приложение [[Мобильное приложение кладовщика для Android|Кладовщик]] и в настройках приложения выберите режим сканера '''Аппаратный сканер'''.<br />
<br />
== Подключение и настройка сканеров штрихкодов ==<br />
MeaSoft поддерживает все виды [http://ru.wikipedia.org/wiki/Сканер_штрихкода сканеров штрихкодов], поэтому при выборе сканера следует учитывать особенности штрихкодов, которыми заказчики маркируют корреспонденцию. В частности, контактные светодиодные сканеры можно использовать для считывания штрихкодов длиной не более 5-7 см (в зависимости от модели сканера), а для двухмерных штрихкодов необходим image-сканер.<br />
<br />
При подключении в разрыв клавиатуры или в порт USB в режиме эмуляции разрыва клавиатуры требуется небольшая дополнительная настройка сканера. Для этого существуют специальные программирующие листы (см. ниже) для разных моделей сканеров, на которых напечатаны штрихкоды в определенной последовательности. Просканируйте их в том порядке, в котором они расположены на листе. Как правило, для сканеров одной фирмы подходят одни и те же штрихкоды.<br />
В результате этих действий при каждом сканировании перед штрихкодом вставляется определенный префикс, наличие которого для программы является признаком того, что данная последовательность символов введена с помощью сканера. Для использования в качестве префикса в программе зарезервирована клавиша с буквой «ё», что накладывает некоторое ограничение: невозможно ввести с клавиатуры символы «ё», «Ё», «`», «~».<br />
<br />
В данном разделе приведены программирующие листы для популярных моделей сканеров штрихкодов. Если в этом списке не оказалось модели вашего сканера, попробуйте использовать лист от другой модели того же производителя. Сообщите, пожалуйста, нам, мы внесем изменения в список моделей, для которых подходит этот лист. Если никакой лист не подошел — сообщите, пожалуйста, об этом нам, мы подготовим лист для вашего сканера.<br />
<br />
{| class="wikitable" style="width: 60%<br />
!style="width: 30%;"|Бренд<br />
!style="width: 70%;"|Модель<br />
|-<br />
|Argox<br />
|[https://www.courierexe.ru/download/scaner/Argox.doc ArgoScan 8000/8110/8120/8150/8250/8310/8312, argox as-8020cl (usb))]<br />
|-<br />
|Champtek<br />
|[https://www.courierexe.ru/download/scaner/Champtek.doc Champtek]<br />
|-<br />
|Cino<br />
|[https://www.courierexe.ru/download/scaner/Cino.doc F680BT]<br />
|-<br />
|Cipherlab<br />
|[https://www.courierexe.ru/download/scaner/Cipherlab_1021_(simple).doc 1021 (simple)]<br>[https://www.courierexe.ru/download/scaner/Cipherlab_1021_(simple)_and_back.doc 1021 с переключением обратно]<br>[https://www.courierexe.ru/download/scaner/Cipherlab_1560,_1562,_1070_(bluetooth).doc 1560, 1562, 1070 (bluetooth)]<br />
|-<br />
|Metrologic/Eclipse/Honeywell/Motorola/Symbol/Youjie<br />
|[https://www.courierexe.ru/download/scaner/Honeywell_Xenon_1900.doc Xenon 1900, Voyager 1202g, YJ4600]<br>[https://www.courierexe.ru/download/scaner/Metrologic,_Eclipse,_Honeywell,_ms9520,_ms9540.doc MS5145, MS9520, MS9540, HH440]<br>[https://www.courierexe.ru/download/scaner/Symbol_ls1203,_LS2208.doc LS1203, LS2208] (подходит для li4278, Zebra DS2278)<br>[https://www.courierexe.ru/download/scaner/Symbol_ds6707.doc DS6707]<br>[https://www.courierexe.ru/download/scaner/honeywell_1452g.docx Honeywell Voyager 1452G]<br>[https://www.courierexe.ru/download/scaner/honeywell_1472g.docx Honeywell 1472g]<br />
|-<br />
|PayTor<br />
|[https://www.courierexe.ru/download/scaner/Paytor%20DS%201009.docx DS 1009]<br />
|-<br />
|Proton<br />
|[https://www.courierexe.ru/download/scaner/Proton.doc Proton]<br />
[https://www.courierexe.ru/download/scaner/Proton_2.doc IMS3190, беспроводной)]<br />
|-<br />
|Datalogic<br />
|[https://www.courierexe.ru/download/scaner/PSC,_Datalogic_QS2500.doc PSC, Datalogic QS2500]<br>[https://www.courierexe.ru/download/scaner/qd2100.doc QD2100]<br>[https://www.courierexe.ru/download/scaner/qd2100.doc QD2100]<br />
[https://www.courierexe.ru/download/scaner/QuickScanMobile.doc Mobile: QM2100, M2]<br />
|-<br />
|Scanport<br />
|[https://www.courierexe.ru/download/scaner/Scanport_T600.bmp T600]<br />
|-<br />
|Zebex<br />
|[https://www.courierexe.ru/download/scaner/Zebex_4.bmp Zebex]<br />
|-<br />
|Godex<br />
|[https://www.courierexe.ru/download/scaner/godex.doc GS550U]<br />
|-<br />
|Mercury<br />
|[https://www.courierexe.ru/download/scaner/mercury.doc CL-200]<br>[https://www.courierexe.ru/download/scaner/Mercury_1100PL.docx 1100PL]<br />
|-<br />
|Если у вас китайский безымянный (беспроводной?) сканер, попробуйте этот лист<br />
|[https://www.courierexe.ru/download/scaner/Vioteh.doc Vioteh VT2208R, Dudian CT980N, bp8150s, Heroje B120G]<br />
|-<br />
|Vioteh<br />
|[https://www.courierexe.ru/download/scaner/VT2205_VT2209.docx VT2205 VT2209]<br />
|-<br />
|Heroje<br />
|[https://www.courierexe.ru/download/scaner/Heroje_H018.doc H018]<br />
|-<br />
|Производитель Китай под российским брендом АТОЛ.<br><br />
Cканер не рекомендуется к покупке. Атол выпускает несколько разных версий сканера под одной моделью SB1101. К сожалению, не все модели поддаются настройке.<br />
|[https://www.courierexe.ru/download/scaner/Atol_SB_1101.docx SB 1101]<br>[https://www.courierexe.ru/download/scaner/Atol_SB_1103.docx 1103]<br />
|-<br />
|Radall<br />
|[https://www.courierexe.ru/download/scaner/Radall_RD-h8_2d.docx RD-h8 2d]<br />
|-<br />
|NETUM<br />
|[https://www.courierexe.ru/download/scaner/NETUM_W6.docx W6]<br />
|-<br />
|DBS<br />
|[https://www.courierexe.ru/download/scaner/DBS_HC-3208SR.docx HC-3208SR]<br />
|-<br />
|Winson<br />
|[https://www.courierexe.ru/download/scaner/Winson_WNL_WNC_6003_6083.docx WNL/WNC 6003, 6083, 5083]<br />
|-<br />
|Global-pos<br />
|[https://www.courierexe.ru/download/scaner/GP-9400B.docx Global-pos GP-9400B]<br />
|-<br />
|Mertech<br />
|[https://courierexe.ru/download/scaner/Mertech_cl-2300.docx CL-2300]<br />
|-<br />
|Bluetooth-кольцо<br />
|[https://courierexe.ru/download/scaner/GP-1901B.docx GP-1901B]<br />
|-<br />
|}<br />
<!-- [https://www.courierexe.ru/download/scaner/Honeywell_hh400.docx Honeywell hh400] --><br />
<br />
'''Примечание'''. Для некоторых беспроводных моделей сканеров штрихкодов перед началом работы требуется обязательно выполнить привязку базовой станции сканера с переносным мобильным считывателем — отсканировать наклейку штрихкода на базовой станции переносной частью сканера. В частности, этот алгоритм касается сканеров фирмы Zebex.<br />
<br />
Cписок '''неподдерживаемого системой оборудования''':<br />
* CT10 Barcode Scanner (Производитель CILICO Electronics Co., Ltd Китай);<br />
* Аlanda 2.4G Barcode Scanner (производитель Китай).<br />
* Birch bd — 388 iiib (производитель Китай);<br />
<br />
Это оборудование не позволяет установить требуемый префикс для работы с MeaSoft. Список далеко не полный.<br />
<br />
'''Мы рекомендуем покупать сканеры, официально ввезенные в Россию, адаптированные для российского рынка, имеющие здесь официальных поставщиков.'''<br />
<br />
При выборе сканера обратите внимание на то, что при типе подключения USB HID (этот режим рекомендуется) или «разрыв клавиатуры» сканер требует некоторой настройки. В разделе описания выше приведены программирующие листы для различных моделей сканеров. Если вы покупаете сканер не из списка, для которого уже есть программирующий лист, будьте готовы к тому, что потребуется создание такого листа. Для его создания нужно полное руководство по программированию конкретного сканера на русском или английском языках. С наличием инструкции очень часто возникают проблемы, если вы покупаете сканеры с доставкой из Китая — они, как правило, настолько не адаптированы к работе, что у них нет ни документации, ни сайта производителя. В таком случае остается уповать только на везение.<br />
<br />
Если ваш новый сканер не поддерживается нашей системой, можно попытаться выяснить, может ли он работать в режиме эмуляции COM-порта. Наличие возможности работы в таком режиме — последний шанс использовать купленное оборудование:<br />
# Переведите сканер в режим USB virtual COM по инструкции.<br />
# Установите бесплатные драйверы COM-порта Nuvoton.<br />
# В MeaSoft программе выберите '''Настройка''' > '''Параметры''' > '''Оборудование''' > '''Использовать COM-сканер''', укажите номер виртуального COM-порта, созданного драйвером (см. в диспетчере устройств Windows).<br />
Обратите внимание, что при переключении сканера в другой USB-порт может меняться номер COM-порта, и настройку программы нужно делать заново.<br />
<br />
== Настройка весов ==<br />
<br />
=== Общие сведения ===<br />
MeaSoft поддерживает работу с различными видами весов. На данный момент подключение всех видов весов к компьютеру осуществляется как через COM-порт, так и USB. В случае подключение через USB, на компьютер необходимо установить драйвер USB-COM конвертера. Драйвер поставляется производителем весов, либо переходника, через который вы подключаете весы. После установки драйвера в «Диспетчере устройств» вашего компьютера должен появиться новый COM-порт, через который и будет осуществляться дальнейшее взаимодействие с весами. Обратите внимание: При подключении USB-шнура к другому USB-разъему компьютера зачастую происходит изменение номера COM-порта, который привязан к шнуру. В этом случае потребуется указание в программе нового номера порта.<br />
<br />
Весы нужно подключить к компьютеру, и активировать использование весов в программе в разделе «Настройка» — «Параметры» — «Оборудование». Там нужно установить флажок '''Использовать весы''', выбрать тип весов и указать нужный COM-порт.<br />
<br />
После успешного подключения весов откройте карточку корреспонденции (или окно «Прием» в заказах). Возле поля «Масса» появится кнопка весов. Для того, чтобы программа показывала вес с весов кнопка должна быть нажата.<br />
<br />
Особенности настройки различных моделей весов приведены ниже.<br />
<br />
=== Настройка весов МЕРА ===<br />
Для связи с весами мера система использует протоколы «9байт», «ОКА» и «MERA-AUTO» и «Сетевые».<br />
<br />
Какой выбрать:<br />
* 9байт — установлен в весах по умолчанию. Он позволяет передавать нестабильный вес, что хорошо влияет на скорость работы оператора. Однако это протокол использует низкоуровневую работу с COM-портом, что может не поддерживаться USB-COM переходниками. Выбирайте этот протокол если весы подключены к настоящему, аппаратному COM-порту. Так же этот протокол, вероятно, единственный, который можно использовать в весах, у которых нет цифровой клавиатуры (см. ниже — без нее весы просто невозможно переключить на другой протокол);<br />
* ОКА — во многих моделях весов не поддерживает передачу нестабильного веса, так что работать с ним — медленнее, чем возможно. Но этот протокол поддерживают все весы «МЕРА» с цифровой клавиатурой;<br />
* MERA-AUTO — наиболее продвинутый, рекомендованный производителем протокол. Позволяет передавать нестабильный вес. Однако весы нужно на него переключать (см. ниже), также он поддерживается не всеми весами;<br />
* Сетевые — для весов, подключающихся не к COM-порту, а непосредственно к локальной сети.<br />
<br />
Выбор протокола в весах: воспользуйтесь выдержкой из их [http://courierexe.ru/download/scale/mera/MERA-VTP_VT-1A_2007.pdf руководства пользователя] или [http://courierexe.ru/download/scale/mera/servmanpvm2007.pdf другой версии руководства]:<br />
<br />
9.1 Выбор протокола<br />
9.1.1 Удерживая нажатой кнопку «5» клавиатуры терминала, кратковременным нажатием кнопки «[[Файл:PowerOn.png]]» включить весы. <br />
Используя ту же клавиатуру набрать код 39654 и затем нажать клавишу ввода «[[Файл:Enter.png]]» или «T» (Тара). <br />
При правильно выполненном действии будет активизирован режим настройки и на дисплее появится сообщение «_____9». <br />
9.1.2 Последовательно нажать кнопки «1» и «4» и ввести кодовый номер требуемого протокола '' '''(для протокола "9байт" - «0», "ОКА" - «1», "MERA-AUTO" - «5»)''' '' из таблицы кодов нажатием одной из кнопок «0»…«9». <br />
9.1.3 Нажатием кнопки «9» зафиксировать результат. <br />
<br />
<br />
'''Обратите внимание''' на то, что в этой инструкции подразумевается наличие полной цифровой клавиатуры с кнопками «0».."9". Если у ваших весов такой клавиатуры нет — они не поддерживают изменение протокола, и переключить их не удастся.<br />
<br />
В программе нажмите «Настройка» — «Параметры» — «Оборудование». Поставьте галку «Использовать весы», выберите протокол и порт весов. После настройки обязательно перезагрузите программу и весы.<br />
<br />
Для проверки работоспособности подключения можно использовать официальную [http://courierexe.ru/download/scale/mera/Oka.exe программу МЕРА]. Обратите внимание, что эта программа не будет работать, если открыта программа MeaSoft с включенным использованием весов, и наоборот. В один момент времени к весам может подключаться только одна программа.<br />
<br />
=== Настройка весов НЕВА ===<br />
По нашему опыту работы с весами «НЕВА» складывается интересная ситуация: производитель заявляет, что все модели их весов работают по разным протоколам. Протокол зависит от модели «пульта» — такой штуки, с индикатором и кнопками. При этом по конкретной модели пульта они передали протокол, который не соответствует действительности. В итоге конкретные весы, имевшиеся в наличии, к программе подключены (методом [https://ru.wikipedia.org/wiki/Обратная_разработка обратного инжиниринга] протокола), в списке видов весов в настройке оборудования они присутствуют, но мы не можем дать никаких гарантий того, что конкретные весы, приобретенные вами, будут работать с программой. Мы не рекомендуем этот тип весов к приобретению, но если они у вас уже есть и система с ними не работает — звоните, будем думать, что с этим можно сделать.<br />
<br />
=== Настройка весов МАССА-К ===<br />
Для поддержки весов Масса-К в системе предусмотрена поддержка «Протокола № 2». Этот протокол по умолчанию включен в весовых терминалах [http://courierexe.ru/download/scale/massa/TB_A_r6.2_2017.pdf А/ТВ] и [http://courierexe.ru/download/scale/massa/TB_T_r3.2_2016.pdf Т/ТВ]<br />
<br />
<br />
=== Настройка порядка цены деления для весов ===<br />
В случае ошибочного определения веса (когда порядок величины в несколько раз меньше или больше реального веса) в программе предусмотрена возможность коррекции значения.<br />
Данная возможность добавлена в новых версиях программы (начиная с 596) в связи с тем, что в протоколе ОКА вес может передаваться как в граммах, так и в десятках грамм в зависимости от предела измерения весов.<br />
<br />
Настройка порядка цены деления весов осуществляется через главное меню программы '''«Настройка»-«Параметры»'''-закладку '''«Оборудование»''' поле '''«Порядок цены деления»'''. Доступные значения поля '''«Порядок цены деления»''':<br />
<br />
'''0''' — 1 грамм;<br />
<br />
'''1''' — 10 грамм;<br />
<br />
'''2''' — 100 грамм.<br />
<br />
Таким образом, если весы показывают в 10 раз меньше, чем на самом деле, необходимо установить '''«Порядок цены деления»''' равным одному.<br />
<br />
=== Настройка измерительного прибора ExpressCube ===<br />
Оборудование должно работать при простом подключении (как описано в разделе «Общие сведения»).<br />
<br />
=== Настройка измерительного прибора InSize ===<br />
<br />
== Настройка фискальных регистраторов ==<br />
Все фискальные регистраторы должны вноситься в справочник '''[[Фирмы]]'''. Для корректной работы ФР необходимо регистрировать ее в налоговой с нужным признаком агента, а потом прописывать его в системе.<br />
<br />
=== Стационарные Штрих-М ===<br />
<br />
=== Облачные LIFE PAY ===<br />
<br />
== Мобильные устройства курьеров ==<br />
Процесс выбора оборудования, установки и настройки приложения для мобильного устройства курьера подробно рассмотрен в статьях «[[Мобильное приложение курьера для Android]]» и «[[Мобильное приложение курьера для IPhone]]».</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=13010Руководство программиста2021-11-02T16:00:51Z<p>Sammy: /* Объект TZip */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево , 1 – по центру , 2 – прижато вправо), VAlign - Вертикальное выравнивание (0 – прижато к верху , 1 – по центру , 2 – прижато к низу).<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
Объект можно создать отдельно, не создавая объект TPrinter. В таком случае объект создастся как ссылка на текущий холст принтера (принтер должен быть запущен и начат новый документ). Такой подход используется в доп. возможности PrintCustomSticker<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName][, PriorityCountry])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [DeliveryDateMode=0, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; DeliveryDateMode: 0 - установить план. дату доставки текущим рабочим днем, 1 - установить план. дату доставки следующим рабочим днем, 2 - установить план. дату доставки равной планируемой дате оплаты АПД; Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). <br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
'''SelDistAddr(s)''' – Возвращает строку для вставки в select запрос, для вывода поля с упрощенным адресом. Принимает один необязательный строковый параметр - алиас таблицы из которой будет упрощаться поле address, по умолчанию "a"<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл SrcPath в архив и располагает его по пути ZipPath. - ZipPath содержит имя файла в архиве, при необходимости можно указать каталог; <br />
<br />
AddFromStr(Data, /*ZipPath*/) - '''параметр ZipPath временно не работает'''. Добавляет файл из строки Data в архив и располагает его по пути ZipPath. -ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=12911Дополнительные возможности2021-10-20T16:43:19Z<p>Sammy: /* Настройка всплывающих окон */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
OnAfterItemPrint - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
PrintCustomSticker - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек". Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратнные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.<br />
<br />
OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
OnAfterAddressSave - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
OnBarScan - Скриптовая обработка штрих-кода перед поиском<br />
<br />
AfterAddressAcceptance - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
BeforeAddressAcceptance - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
OnAddToShippingPlace - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
GetTypeShippingPlace - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
OnBeforePlanToManifest - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.<br />
<br />
OnBeforeScanToManifest - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса<br />
<br />
OnBeforePlanning - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. <br />
<br />
DAILY - задание выполняемое один раз в день<br />
<br />
OnGivnKurierStateChanged - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера.В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
OnBeforeGivnStatus - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
== Настройка документов ==<br />
CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
GetTypeShippingPlace - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
AdditionalStringForSMA - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными. <br />
<br />
CustomBillDetaling - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
OnSchetChanged - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
ExceptionsForAPK - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
OnOrderCountCalc -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
OnGetZakazCount - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
OnEveryStartApp - выполняется при запуске программы.<br />
<br />
OnEveryCloseApp - выполняет при закрытии программы.<br />
<br />
OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
OnMapBeforeGeolocation - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
OnCalcSalary - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
OnTicketSetCusr - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%83%D1%87%D0%B5%D1%82%D0%B0&diff=12850Модуль складского учета2021-10-04T11:36:37Z<p>Sammy: /* Добавление упаковки в заказ */</p>
<hr />
<div>= Назначение =<br />
<br />
Модуль складского учета предназначен для автоматизации ответственного хранения товара на складе курьерской службы. '''Склад''' поставляется отдельным модулем и не входит в базовую версию. Функционал программы по организации складского учета не заменяет полноценную WMS и реализован для работы небольшого склада. Установка модуля складского учета добавляет пункт меню '''Склад''' и вкладку '''Склад'''.<br />
<br />
= Список номенклатуры =<br />
<br />
Для учета товаров на складе используется [[Терминология#Складской учет |номенклатура]]. Чтобы посмотреть складские позиции, выберите в меню '''Склад''' пункт '''Номенклатура'''. Откроется окно «Список номенклатуры»:<br />
<br />
[[Файл:Список_номенклатуры.png|none|500px]]<br />
<br />
В верхней части окна находятся фильтры складских остатков:<br />
* фильтр по поставщикам;<br />
* фильтр по складам;<br />
* '''Только в наличии'''. Если флажок установлен, выводится номенклатура с остатком больше 0;<br />
* '''Архив'''. Если флажок установлен, отображается номенклатура, отмеченная флажком '''Архив'''.<br />
<br />
В нижней части окна отображается количество единиц номенклатуры в таблице.<br />
<br />
= Карточка номенклатуры =<br />
<br />
Чтобы создать карточку единицы номенклатуры, в списке номенклатуры нажмите F3 или в контекстном меню выберите '''Создать'''. Откроется окно «Единица номенклатуры»:<br />
<br />
[[Файл:Единица номенклатуры 1.png|520px|none]]<br />
<br />
'''Наименование'''. Наименование не должно совпадать с ранее внесенными в программу.<br />
<br />
'''Штрих-код'''. Штрихкод производителя, указывается, если есть.<br />
<br />
'''Штрих-код упаковки'''. Для приема товара <rspoiler text="ящиками">Под упаковкой понимается ящик, коробка, мешок, пакет, в которых производитель поставляет товары при оптовых продажах. В упаковке находятся несколько единиц одного товара.</rspoiler>, указывается, если есть.<br />
<br />
'''Кол-во в упаковке'''. Количество единиц товара в одной упаковке.<br />
<br />
'''Розничная цена'''. Стоимость товара в розничной продаже. <spoiler text=Подробнее>В программе по умолчанию нет учета розничной и закупочной цены. Чтобы вести учет осуществлялся, включите переменную <mparam <br />
text="Указывать во вложениях розничную цену единицы номенклатуры" code="BoxSelfSell/></spoiler><br />
'''Закупочная цена'''. Стоимость закупки товара.<br />
<br />
'''Масса'''. Масса товара указывается в килограммах.<br />
<br />
'''Примечание'''. Если габариты и масса были с значением 0, а потом были изменены на другие, то программа произведет перерасчет данных по всем недоставленным заказам, в которые входит товар. При изменении габаритов и массы меняется объемный вес, что влияет на стоимость доставки.<br />
<br />
'''№'''. Номер номенклатуры, присваивается автоматически.<br />
<br />
'''Страна происхождения'''. Страна производства товара. Используется для [[#Печатные формы при комплектации|печати на наклейках]].<br />
<br />
'''Полка'''. Номер полки хранения товара. Отображается при [[#Комплектация|комплектации]].<br />
<br />
'''Способ отгрузки'''. Поле неактивно, так как реализован только один способ: «FIFO» — товар, поступающий первым, первым и отгружается. <br />
<br />
'''Точка дозаказа'''. Остаток товара, при котором требуется [[#Заказ товара|дозаказать товар]]. <br />
<br />
'''Количество дозаказа'''. Количество товара для дозаказа. <br />
<br />
'''Ставка НДС'''. Процент ставки НДС. Поле не может быть пустым. Если товар не облагается НДС, поставьте значение 0.<br />
<br />
'''Наличие всего'''. Остаток товара на всех складах. Справа кнопка [[Файл:Кнопка_вниз.png|20px]] открывает окно с остатками по складам.<br />
<br />
'''Кол-во в паллете'''. Количество товара, помещающегося на одной паллете.<br />
<br />
'''Порядок округления паллет'''. Количество знаков после запятой от -6 до 6, где 0 — это округление до м&sup3;, а 6 — округление до см&sup3;.<br />
<br />
'''Тип номенклатуры'''. Возможные значения:<br />
* '''Товар''' — объект, предоставленный поставщиком для передачи получателю;<br />
* '''Расходные материалы''' — материалы, которые расходуются в процессе использования сотрудниками курьерской службы и не подлежат возврату. Например, жидкости для автомобиля, проездные, полиэтиленовые пакеты, визитки, ручки и т.д.;<br />
* '''Инвентарь''' — номенклатура, используемая курьерской службой для <rspoiler text="внутренних нужд">Кепки, рюкзаки, тетрадки, сумки и т.д.</rspoiler>. Подробнее см. в разделе [[#Инвентарь и расходные материалы|«Инвентарь и расходные материалы»]];<br />
* '''Упаковка''' — номенклатура является упаковкой, а не товаром, например конверт, сейф-пакет или тубус. Подробнее см. раздел [[#Упаковка|«Упаковка»]];<br />
* '''Инвентарь для выдачи''' — номенклатура, используемая курьерской службой для отображения выданного инвентаря на вкладке '''Выдача'''. Подробнее см. раздел [[#Инвентарь для выдачи|«Инвентарь для выдачи»]].<br />
<br />
'''Архив'''. Если флажок установлен, неиспользуемая номенклатура скрывается из общего списка номенклатуры. Удалить номенклатуру нельзя, так как данные по ней могут входить в отчеты. Номенклатура с нулевым остатком автоматически становится архивной, если по ней не было операций в течение одного года.<br />
<br />
'''Учет серийных номеров'''. Если флажок включен, ведется учет движения товара в разрезе серийных номеров. Подробнее см. раздел [[#Учет серийных номеров|«Учет серийных номеров»]]. Вы не можете изменить состояние флажка при остатке больше 0. <br />
<br />
'''Возврат на склад'''. Если флажок установлен, товар при возврате автоматически становится на приход с типом прихода '''Возврат от покупателя'''. Причина возврата может быть любая, кроме '''Брак'''. Подробнее о возвратах см. раздел [[Возврат|«Возврат»]]. Не устанавливайте флажок для сложных технических устройств: возврат происходит на отдельный склад или хранится отдельно от нового товара. Например, если получатель пользуется телефоном, а потом возвращает его, то товару требуется возврат к заводским настройкам. Курьерская служба принимает телефон и хранит отдельно от других товаров. При формировании [[Возврат#Акт передачи корреспонденции |акта возврата корреспонденции]] магазину программа предложит добавить телефон в акт.<br />
<br />
'''Есть QR-код'''. Если флажок установлен, товар имеет маркировку «Честный ЗНАК». Подробнее см. в разделе [[Маркировка|«Маркировка»]]. <br />
<br />
'''Поставщик'''. Организация, поставляющая товар.<br />
<br />
'''Артикул'''. Идентификатор товара у поставщика. Артикула товара может не быть. Кнопка [[Файл:Кнопка_вверх.png|20px]] открывает окно с информацией по поставщикам и артикулам товара. Чтобы изменить артикул товара и добавить нового поставщика, используйте контекстное меню. Если товар предоставляют несколько поставщиков, то поле '''Поставщик''' становится не активным.<spoiler text="Дополнительный функционал">Справочник '''Поставщик для товара''' может использоваться для перекодировки различных систем учета. В качестве виртуального поставщика можно использовать программу.</spoiler> <br />
'''Примечание''', '''Примечание-2'''. Поля для заметок.<br />
<br />
Функции:<br />
*"Поставщики" - дублирует действие кнопки [[Файл:Кнопка_вверх.png|20px]] рядом с полем "Артикул".<br />
*"Остатки по складам" - дублирует действие кнопки [[Файл:Кнопка_вниз.png|20px]] рядом с полем "Наличие всего".<br />
*"Операции" – отображает историю действий с товаром на складе: приход, расход. <br />
*"Проведено для корреспонденции" - отчет по доставленным товарам. <spoiler text="Поля отчета">Компания, заказ, номер, дата вручения, время вручения, инфо о доставке.</spoiler> <br />
*"Входит в корреспонденцию" - отчет по доставленным товарам и товарам, входящим во "Вложения" корреспонденций.<spoiler text="Поля отчета">Компания, номер заказа, шифр, количество в заказе, количество в частичных возвратах, дата вручения, время вручения, инфо о доставке.</spoiler> <br />
*"Входит в корреспонденцию расширенная форма" - объединяет данные "Проведено для корреспонденции" и "Входит в корреспонденцию" и дублирует условия предыдущего отчета. <spoiler text="Добавляются поля">Единица номенклатуры, дата заказа, отправитель, ФИО, адрес, телефон, дата забора, получатель, ФИО, адрес, телефон, вложение, поручение, даты выдачи, дата доставки, время доставки, доставивший курьер, отсканированные серийные номера, дата возврата, признак возврата.</spoiler><br />
*"Операции по С/Н" - отчет по движению товара с конкретным [[#Учет серийных номеров |серийным номером]]. Доступен, если стоит галка "Учет серийных номеров". <br />
*"Остатки по поставщикам и складам" - формируется отчет, в котором указываются поставщики и остатки товара на каждом складе курьерской службы.<br />
*"Серийные номера в наличии"- открывает окно "Серийные номера по единице номенклатуры" с серийными номерами товаров, находящимися на складе.<br />
Кнопки:<br />
*Печать - [[#Печатные формы при комплектации|печатает]] наклейку для товара.<br />
*[[Основные принципы работы в программе#Кнопки в программе|Стандартные кнопки]]<br />
<br />
= Заказ товара =<br />
<br />
В карточке товара необходимо заполнить два поля: “Точка дозаказа” и “Количество дозаказа”. “Точка дозаказа” определяет, при каком остатке на складе нужно дозаказывать товар, а “Количество дозаказа” - в каком количестве.<br />
<br />
Заказ товара осуществляется [[Пользователи |ответственным за склад]] сотрудником - кладовщиком. Для назначения кладовщика в карточке пользователя необходимо поставить галку в поле “Ответственный за склад”. <br />
<br />
При первом запуске программы за день проверяются остатки товаров на складе. Если остатки меньше точки дозаказа, кладовщик получит оповещение во вкладке “Задания” о необходимости закупить товар.<br />
<br />
=Постановка на приход=<br />
<br />
[[Файл:Приходная_накладная.png |right|300px|thumb|Приходная накладная]]<br />
Для приема товара на складе используются приходные накладные. Они находятся в меню "Склад" -> "Приходные накладные". Вы можете посмотреть накладные от конкретного поставщика за определенный период, применив соответствующие фильтры. <br />
<br />
==Создать накладную==<br />
<br />
[[Файл:Приходные накладные.png|300px|right|thumb|Приходные накладные]]<br />
Чтобы создать приходную накладную, выберите пункт контекстного меню "Создать". В открывшемся окне заполните поля “Дата”, “Номер у поставщика”, “Приход на склад” и “Поставщик”. Затем нажмите кнопку "Начать оформление". Появятся дополнительные поля “Комментарий” и “Количество”.<br />
<br />
В поле “Количество” укажите количество принимаемого товара. Далее отсканируйте его штрихкод или добавьте товар вручную. Для ручного ввода в <rspoiler text="контекстном меню">Для вызовы контекстного меню кликните правой кнопкой мыши в окне создания накладной</rspoiler> выберите пункт "Добавить вручную". В открывшемся списке выделите нужный товар и нажмите "Enter".<br />
<br />
==Работа с накладными==<br />
<br />
Чтобы открыть накладную, выделите её в общем списке и и в контекстном меню выберите пункт "Открыть". <br />
<br />
Чтобы добавить или удалить товар, воспользуйтесь соответствующими кнопками контекстного меню. <br />
<br />
Для печати Акта о приеме-передаче товарно-материальных ценностей для поставщика в верхней части экрана нажмите на кнопку "Печать".<br />
<br />
Чтобы распечатать наклейки для принимаемого товара, выделите нужный товар и в контекстном меню выберите "Печатать наклейки". <br />
<br />
Если товар проходил таможню и нужно указать номер [https://ru.wikipedia.org/wiki/Грузовая_таможенная_декларация грузовой таможенной декларации], выделите нужный товар и в контекстном меню выберите "Указать ГТД".<br />
<br />
Для печати акта приема-передачи по форме МХ-1 выделите накладную и в контекстном меню выберите "Сформировать форму МХ-1". Чтобы отправить Акт приема-передачи по электронной почте, выберите "Отправить по почте форму МХ-1".<br />
<br />
Для удаления накладной выделите её и в контекстном меню выберите пункт “Удалить”. Накладная удалится, если не было действий с товарами по складу.<br />
<br />
Обратите внимание, что существуют <spoiler text="ограничения редактирования накладных">Для редактирования накладной пользователю должны быть предоставлены [[Пользователи|права]]. Также по накладной не должно быть <rspoiler text="расходных операций">Т.е. товары не должны выдаваться курьерам, списываться или перебрасываться со склада</rspoiler>. Чтобы ограничить период, за который можно вносить исправления в накладную, воспользуйтесь переменной - <mparam code="DaysForUpdateStoreDс"/>.</spoiler><br />
<br />
= Списание/переброска =<br />
<br />
Списание - это изъятие товаров со складских остатков. Переброска - это списание товаров с одного склада и прием товаров на другом складе. <br />
<br />
Для списания товара выберите пункт меню "Склад" -> "Списание товара" и пункт контекстного меню "Создать". Для переброски товара выберите пункт меню "Склад" -> "Переброска товара" и создайте документ. В случае переброски товара, выберите склад с которого и склад на который производится перемещение товара. Если для списания/переброски будет указан поставщик, то все действия будут производиться только с товарами поставщика. Оформление документов списания/переброски товара производятся аналогично постановке на приход. <br />
<br />
Также, вы можете выслать по электронной почте <rspoiler text="документы">Форма МХ-3.</rspoiler>, как и в приходной накладной.<br />
<br />
= Оформление заказов =<br />
<br />
[[Файл:Добавление товара.png|right|300px|thumb|Добавление позиций]]<br />
При использовании модуля "Склад" необходимо, чтобы товары со склада в закладке "Вложения" карточки корреспонденции были привязаны к справочнику номенклатуры. При ручном вводе информации, выберите товар из [[Учет корреспонденции#Вложения|списка номенклатуры]]. При загрузке данных из [[Импорт баз данных#Пример создания простого шаблона для загрузки вложений|Excel]], с помощью [[API]] или из [[Личный кабинет|Личного кабинета]], для корректной привязки товаров из номенклатуры поставщика и курьерской службы, необходимо использовать артикулы. При загрузке данных из Excel, для поиска единицы номенклатуры по артикулу, в шаблоне загрузки необходимо использовать функцию [[Руководство программиста#Объект TBase|"GetItemByCode"]]. При использовании API, артикул товара необходимо указать в [[API#Описание элементов для оформления заказа|тэге Item]]. Если данные вводятся через Личный кабинет, то товар выбирается из списка номенклатуры, аналогичного существующему в системе.<br />
<br />
= Комплектация =<br />
<br />
Позволяет собрать заказы на складе для последующей выдачи курьеру. Чтобы приступить к сборке, на вкладке '''Склад''' выберите режим '''Комплектация заказов'''.<br />
<br />
[[Файл:Склад предварительная сборка.png |1000px|none]]<br />
<br />
Слева в таблице отображаются отправления для комплектации. Условия отображения:<br />
* планируемая дата доставки в карточке корреспонденции должна быть меньше или равна указанной в фильтре '''Дата доставки'''. Если установлен флажок '''Только на дату''', то в таблице отображаются только те заказы, у которых планируемая дата доставки совпадает с указанной датой;<br />
* товары во вложениях в карточке корреспонденции учитываются по складскому контуру;<br />
* в карточке корреспонденции не указана дата вручения;<br />
* в карточке корреспонденции установлен статус, предполагающий готовность к сборке. Например, он может означать, что вы дозвонились получателю и договорились о дате доставки. Статусы выбираются в переменной <mparam code="PreAssemblyState"/>;<br />
* заказ не находится на руках у курьера;<br />
* заказ не входит в манифест или последний манифест, в который он входит, принят в том же филиале, в котором производилась сборка этого заказа;<br />
* по корреспонденции не оформлялись возвраты.<br />
<br />
Комплектацию заказов в программе производите следующим образом: <rspoiler text="выберите">Выберите из таблицы слева или отсканируйте штрихкод заказа.</rspoiler> заказ. В правой верхней таблице отобразятся товары, предназначенные для сборки в заказ. Возьмите товар из <rspoiler text="места хранения">Место хранения товара указывается в верхней правой таблице в столбце '''Полка'''.</rspoiler>, <rspoiler text="переместите товар">Используйте один из следующих способов:<br>&bull; укажите количество собираемого товара в соответствующем поле и отсканируйте его штрихкод;<br>&bull; отсканируйте штрихкод каждого товара;<br>&bull; для ручного ввода штрихкода нажмите CTRL+ALT+B.</rspoiler> в сборку. Скомплектованные товары отобразятся в правой нижней таблице.<br />
<br />
Поддерживается использование нескольких сканеров одновременно для сборки одной корреспонденции. Сканеры могут быть подключены к одному компьютеру или к разным, аппаратно или по сети. В качестве сканера можно использовать смартфон с установленным приложением [[Мобильное приложение кладовщика для Android|Кладовщик]].<br />
<br />
Комплектация по складу может происходить разными способами: <br />
* если курьерская служба использует маленький склад: выберите заказ, возьмите товары с мест их хранения на складе, <rspoiler text="сканируйте штрихкоды">Чтобы скомплектовать заказ по системе.</rspoiler>, сложите товары в коробку или мешок, <rspoiler text="распечатайте ведомость">Для этого нажмите на '''Печать''', выберите '''Ведомость''' и '''Печать на адреса: Только выбранные'''.</rspoiler>, вложите ведомость в коробку или мешок. Скомплектованный заказ поместите на полку для выдачи курьеру;<br />
* если в курьерской службе используется склад большего размера: работник склада <rspoiler text="печатает наклейки">'''Печать''' > '''Наклейки''' > '''Печать на адреса: Только не собранные'''.</rspoiler> на все заказы к сборке, затем сканирует любую наклейку. В левой таблице автоматически выбирается заказ, а в правой верхней таблице отображаются товары к сборке, с полкой хранения, а также столбцом <rspoiler text="Всего в сборках">В полях столбца показывается количество товара, необходимого для комплектации по всем заказам.</rspoiler>. Работник склада собирает все товары для заказов и привозит в зону сборки. Далее он комплектует заказы, приклеивает наклейку на коробки или мешки и откладывает их на полку;<br />
* складской работник может комплектовать заказы, группируя товары по району доставки. Для этого распечатайте <rspoiler text="список товаров">'''Печать''' > '''Список товаров''' > '''Печать на адреса:"Только не собранные"''' и выберите '''Группировка по: Району'''.</rspoiler>. Далее кладовщик собирает заказы по конкретному району со склада. Затем в левой таблице нажимает на заголовок '''Район''', выделяет заказы, относящиеся к одному району. Затем распечатывает наклейки на заказы для выделенного района. Далее кладовщик сканирует наклейку и комплектует заказ.<br />
<br />
Чтобы удалить строку с товарами из нижней таблицы, выберите пункт контекстного меню '''Удалить из сборки'''.<br />
<br />
Строки с собранными заказами окрашиваются зеленым цветом. Если в карточке корреспонденции указана дата доставки, но по ней есть сформированная сборка, не находящаяся на руках у курьера, то строка с заказом будет окрашена красным цветом.<br />
<br />
На данный момент существует несколько [[#Кейсы |кейсов]] по оптимизации работы крупных складов.<br />
<br />
== Печатные формы при комплектации == <br />
<br />
Чтобы распечатать документы, используемые при комплектации заказа, на вкладке '''Склад''' в правом верхнем углу нажмите на кнопку '''Печать'''. Откроется окно «Печать»:<br />
<br />
[[Файл:Печать склад.png|none|300px|]]<br />
<br />
'''Наклейка''' — печатная форму со штрихкодом, наименованием, страной происхождения товара.<br />
<br />
'''Ведомость''' — дублирует информацию наклейки.<br />
<br />
'''Бланк''' — это заранее загруженный в программу [[Файлы для загрузки#Печатные формы для корреспонденции |шаблон]], который заполняется информацией из единицы номенклатуры по указанным условиям. Бланки можно использовать для отправлений, которые оформляются по определенной форме, например для Почты России.<br />
<br />
'''Список товаров''' — формируется перечень товаров для кладовщика. Список можно группировать по району или по названию. Руководствуясь этим списком, кладовщик может предварительно собрать весь товар в зоне сборки.<br />
<br />
Подробнее о ведомостях и наклейках см. раздел [[Печать ведомостей и наклеек|«Печать ведомостей и наклеек»]].<br />
<br />
'''Печатать на адреса''' — позволяет выбрать условие для печати форм из выпадающего списка. Возможные значения:<br />
* '''Все''' — распечатать формы для всех заказов к сборке;<br />
* '''Только собранные''' — распечатать формы только для собранных заказов;<br />
* '''Только несобранные''' — распечатать формы для несобранных заказов;<br />
* '''Только выбранные''' — распечатать формы только для выделенных заказов.<br />
<br />
Выбранное значение становится значением по умолчанию.<br />
<br />
= Типы номенклатуры = <br />
<br />
Кроме товаров, на складе могут храниться следующие типы объектов:<br />
* [[#Инвентарь и расходные материалы|расходные материалы]]. Возврат на склад не требуется, могут быть выданы курьеру независимо от корреспонденции. Факт выдачи отображается на вкладке '''Склад''' в течение 30 дней.<br />
* [[#Инвентарь и расходные материалы|инвентарь]]. Должен быть возвращен на склад до увольнения курьера. Может быть выдан независимо от корреспонденции. Факт выдачи инвентаря отображается на вкладке '''Склад''' до моменты его возврата.<br />
*[[#Расчет упаковки|упаковка]]. При сканировании автоматически добавляется в заказ и проводится по складу. Если '''Упаковка''' единственный тип вложений в заказе, перед выдачей требуется сборка отправления.<br />
* [[#Инвентарь для выдачи|инвентарь для выдачи]]. При выдаче объекта такого типа документ о его передаче курьеру автоматически проводится через вкладку '''Выдача''', а при приеме от курьера — автоматически закрывается на вкладке '''Выдача''' со статусом '''Доставлено'''.<br />
<br />
== Инвентарь и расходные материалы ==<br />
<br />
Чтобы выдать инвентарь или расходные материалы:<br />
# На вкладке '''Склад''' выберите режим '''Выдача инвентаря''' и действие '''Выдача'''.<br />
# Выберите курьера из таблицы слева или отсканируйте удостоверение.<br />
# Укажите количество выдаваемого инвентаря и отсканируйте или введите вручную его штрихкод.<br />
# Распечатайте [[#Внутренний акт приема-передачи|Акт приема-передачи материальных ценностей]].<br />
<br />
В результате инвентарь или расходные материалы переданы курьеру и списаны со складских остатков.<br />
<br />
Чтобы принять от курьера инвентарь:<br />
# На вкладке '''Склад''' выберите режим '''Выдача инвентаря''' и действие '''Прием'''. <br />
# Выберите курьера из таблицы слева или отсканируйте удостоверение.<br />
# Сканируйте или введите вручную штрихкод инвентаря.<br />
<br />
Если количество окажется больше, чем было выдано курьеру, то появится сообщение об ошибке.<br />
<br />
== Инвентарь для выдачи ==<br />
<br />
Чтобы выдать объект с типом '''Инвентарь для выдачи''':<br />
# На вкладке '''Выдача''' или '''Склад''' в режиме '''Выдача''' выберите курьера из таблицы слева или отсканируйте удостоверение.<br />
# Отсканируйте или введите вручную штрихкод с системной этикетки, распечатанной из карточки номенклатуры.<br />
В результате на вкладке '''Выдача''' появляется автоматически сформированный документ о выдаче инвентаря курьеру, на вкладке '''Склад''' создаются складские проводки.<br />
<br />
Чтобы принять от курьера объект с типом '''Инвентарь для выдачи''', используйте один из следующих способов:<br />
* на вкладке '''Выдача''' установите статус документа о выдаче инвентаря '''Доставлено''';<br />
* на вкладке '''Выдача''' или '''Склад''' в режиме '''Прием''' отсканируйте системный штрихкод инвентаря. Для документа о выдаче инвентаря автоматически установится статус '''Доставлено'''.<br />
Возвратные складские проводки формируются автоматически.<br />
<br />
== Упаковка ==<br />
<br />
С упаковкой можно работать следующими способами:<br />
* добавление упаковки в заказ кладовщиком по факту комплектации;<br />
* автоматический расчет набора упаковочных материалов исходя из имеющегося ассортимента и габаритов товаров.<br />
<br />
=== Добавление упаковки в заказ ===<br />
<br />
При комплектации заказа в него можно сразу добавлять использованную упаковку. Для этого отсканируйте штрихкод номенклатуры с типом '''Упаковка'''. Упаковка добавляется во вложения и места собираемой корреспонденции и проводится по складу.<br />
<br />
Вложения с упаковкой влияют на расчет массы отправления. Если есть упаковки, то объемный вес считается по габаритам использованных упаковок, а масса упаковки добавляется к массе товаров.<br />
<br />
Добавленные упаковки можно удалять с вкладки '''Cклад'''. Для этого нужно исключить упаковку из сборки, и она автоматически удаляется из вложений карточки корреспонденции.<br />
<br />
Стоимость, указанная в карточке номенклатуры, не учитывается в сумме наложенного платежа.<br />
<br />
=== Расчет упаковки ===<br />
<br />
Расчет упаковки осуществляется только для товаров прямоугольной формы. <br />
<br />
Чтобы в программе происходил расчет, заведите единицу номенклатуры с типом '''Упаковка''' и укажите <rspoiler text="габариты упаковки">Длина, ширина, высота.</rspoiler>. Достаточно завести несколько единиц номенклатуры для разных видов упаковок, а затем использовать их в программе.<br />
<br />
Чтобы рассчитать упаковку, на вкладке '''Адреса''' выделите корреспонденцию и в контекстном меню выберите пункт '''Дополнительные функции''' > '''Рассчитать упаковку'''. Программа сравнивает объем заказа с объемом упаковки. В результате необходимое количества конвертов или коробок автоматически добавляется в карточку корреспонденции, на вкладке '''Вложения'''. Кладовщик увидит требуемый набор упаковки, и при комплектации она списывается со склада, что позволяет вести ее учет.<br />
<!-- <spoiler text="Как производится подбор упаковки>Данная функция реализовывалась для конкретной задачи — выбора конвертов, в которые можно положить набор журналов. В общем случае это очень сложная комбинаторная задача - программа должна в каждую доступную упаковку попробовать "положить" товары, "покрутив" их во всех 3-х плоскостях, и попробовав все их комбинации на плоскости и штабелями друг на друге. И сделать это не только в каждой упаковке, но и во всех их комбинациях и с разным числом одинаковых упаковок. Если есть, например, 5 видов упаковок, и 5 вложений в отправлении, нам будут доступны миллионы, если не миллиарды возможных комбинаций. Поэтому при подборе упаковки программа действует по упрощенному алгоритму, имея в виду именно журналы и конверты: Она выбирает только упаковки, длина и ширина которых лежат в диапазоне от 103% до 220% максимальных длины и ширины упаковываемых объектов, пробует укладывать их в упаковку только в 2 слоя, "вращая" каждое вложение в плоскости. Так же она использует множество других допущений, например, начинает с самой большой упаковки, чтобы гарантировано в нее поместились самые большие вложения.</spoiler>--><br />
<br />
= Внутренний акт приема-передачи =<br />
<br />
Это документ, который используется для внутренних операций в курьерской службе, например для выдачи инвентаря курьерам. Чтобы распечатать акт приема-передачи на инвентарь, нажмите кнопку "Печать" при [[#Инвентарь и расходные материалы | выдаче инвентаря]] и выберите принтер. В распечатанный акт курьер ставит подпись и получает инвентарь. Таким же образом печатаются акты приема-передачи на товар. <br />
<br />
Если акт для курьера был распечатан, то при повторной попытке печати акта программа выдаст ошибку. Чтобы посмотреть акты перейдите в меню '''Склад''' > '''Акты приема/передачи курьерам'''. Чтобы открыть документ, используйте кнопку ENTER, чтобы распечатать его, нажмите на кнопку '''Печать'''.<br />
<br />
= Отчеты по складу =<br />
<br />
Чтобы выбрать отчет, перейдите в меню '''Склад''' > '''Отчеты''':<br />
* «Остатки на дату» — отчет по складским остаткам, выберите дату и поставщика;<br />
* «Продажи за период» — отчет составляется по товарам, проданным за определенный промежуток времени;<br />
* «Расформированные заказы» — отчет о расформированных заказах. Для формирования отчета указывается пользователь и промежуток времени;<br />
* «Серийные номера по клиенту» — отчет по товару от конкретного поставщика, с серийными номерами.<br />
* «Время сборки заказов» — отчет по количеству времени, которое затрачивает работник склада на сборку заказа;<br />
* «Сводный отчет по товарам клиента» — отчет по всем товарам поставщика, хранящимся на складе. В отчете представлена информация по товарам, передвижению, получателям;<br />
* «Оборотная ведомость по товарам» — отчет по обороту товара на складе, для формирования отчета выберите период и склад;<br />
* «Отчет по стоимости хранения» — отчет по стоимости хранения товара клиента на складе курьерской службы.<br />
<br />
= Резерв товаров на складе=<br />
<br />
Резерв — это количество товаров, входящих во вложения корреспонденции, отвечающей одновременно следующим условиям:<br />
* не была скомплектована;<br />
* не заполнена дата вручения;<br />
* находится в одном из статусов, указанных в переменной <mparam code="LetterStates"/>.<br />
<br />
При изменении статуса корреспонденции, например менеджер дозвонился до клиента и договорился о доставке, товары из вложений будут резервироваться. <br />
<br />
У пользователя есть два варианта просмотра остатков с учетом резерва: <br />
* из карточки корреспонденции. Для этого включите переменную <mparam code="ShowRemainsInAddress"/>. Во вложениях карточки корреспонденции появится столбец '''Наличие''', в ячейках столбца будет отображаться остаток товара по складу минус резерв; <br />
* из [[Личный кабинет#Складской учет|личного кабинета]].<br />
<br />
= Расчет стоимости хранения =<br />
<br />
Данная функция позволяет рассчитать стоимость хранения товаров клиента на складе курьерской службы.<br />
<br />
Чтобы рассчитать стоимость хранения, выберите пункт меню '''Склад''' > '''Расчет стоимости хранения''' и укажите временной интервал.<br />
<br />
Количество товара на складе умножается на стоимость хранения палето-места и на количество дней. Стоимость хранения задается в [[Тарифы клиентов#Прочее |тарифах]]. MeaSoft оформляет заказы на получившиеся суммы для клиентов склада, чтобы суммы попадали в акты передачи денег или в счета.<br />
<br />
Подробнее о <spoiler text="расчете стоимости хранения"> <br />
Стоимость хранения формируется следующим образом:<br />
# На конец каждого дня из выбранного диапазона рассчитывается остаток каждого товара на складах курьерской службы.<br> Рассчитывается объем одной единицы товара. Для этого в карточке номенклатуры должны быть указаны габариты. Если габариты не указаны, то для определения объема хранимого товара общий остаток номенклатуры в штуках делится на значение поля '''Кол-во в паллете''' и округляется до значения, указанного в поле '''Порядок округления паллет'''. По умолчанию значение этого поля 1, т.е. округление производится до 1 знака после запятой. Диапазон значений поля от -6 до 6. Значение 0 означает округление до единиц м3, значение 6 — округление до см3. Округление всегда производится в большую сторону.<br>Если значение поля равно 2, а полученное фактическое значение объема равно 1,00002 м3, оно будет округлено до 1,01 м3, фактическое значение 1,001 также будет округлено до 1,01. Значение 1,25 округляться не будет, а 1,253 округляется до 1,26;<br />
# Количество товара умножается на объем одной единицы. Это действие производится для всех единиц номенклатуры, имеющих ненулевой объем и ненулевой остаток за каждый день диапазона.<br />
# Полученные объемы суммируются, чтобы получить объем хранимого на складе товара за каждый день.<br />
# Полученный объем сравнивается со значением переменной <mparam code="MinStoreValue"/>. Если рассчитанный объем меньше значения переменной, то в качестве хранимого объема используется значение переменной. Если рассчитанный объем больше значения переменной, то он округляется до порядка, указанного в переменной <mparam code="RoundForStoreHouse"/>.<br />
# Полученный объем умножается на стоимость суточного хранения 1 м3. Если поле не заполнено, стоимость хранения 0.<br />
# Полученные значения суммируются и вносятся в поле '''Стоимость доставки''' карточки корреспонденции.<br />
Результат расчета стоимости хранения — сформированные заказы для клиентов курьерской службы.</spoiler>Чтобы посмотреть созданные заказы:<br />
# На вкладке '''Адреса''' нажмите на кнопку '''Фильтр'''.<br />
# В фильтре установите значение поля '''Дата зак.''' и флажок '''Доставлено''', снимите флажок '''Не доставлено''' и нажмите на кнопку '''ОК'''.<br />
# В таблице добавьте столбец '''Инфо о дост.''' и отсортируйте по нему.<br />
Заказы, созданные для учета стоимости хранения, в столбце '''Инфо о дост.''' отмечены надписью «Стоимость складского хранения за период».<br />
<br />
Если в программе активированы дополнительные услуги, полученная сумма отображается в карточке корреспонденции на вкладке '''Услуги''' как стоимость услуги «Ручной ввод».<br />
<br />
= Учет серийных номеров =<br />
<br />
Функция, позволяющая учитывать движение товара в <rspoiler text="разрезе">Система создаст привязку товара с уникальным серийным номером и будет "знать" о приходе и расходе. Пользователь может узнать, какие серийные номера остались на складских остатках и куда был доставлен товар с конкретным серийным номером.</rspoiler> [[Терминология#Складской учет|серийных номеров]]. В качестве серийного номера также используется <rspoiler text="IMEI">Международный идентификатор мобильного оборудования</rspoiler> или <rspoiler text="ICCID">Уникальный серийный номер SIM-карты</rspoiler>. Функция применяется для товаров с уникальным идентификатором и сложных технических товаров. Чтобы включить учет, перейдите в номенклатуру и поставьте галку "Учет серийных номеров". При приеме на склад, с учетом серийных номеров, программа показывает поле для выбора товара из выпадающего списка. Чтобы добавить товар, выберите его или сканируйте штрихкод поставщика, затем сканируйте серийный номер, строка добавится в нижнюю таблицу. У нас есть кейс по приему сим-карт от [[#Учет серийных номеров сим-карт при приходе|сотовых операторов]]. При остальных операциях по складу требуется только ввод серийного номера.<br />
[[Файл:Серийные номера в приходной накладной.png|300px|right|thumb|Серийные номера]]<br />
<br />
Вы можете посмотреть информацию по серийным номерам и сформировать отчеты на разных этапах работы:<br />
*Для просмотра и изменения серийных номеров в приходной накладной, выберите пункт контекстного меню "Посмотреть серийные номера", откроется окно. Фильтр - "Только в наличии" включает отображение товаров с серийным номером и остатком по складу больше 0. Изменить серийный номер возможно только из приходной накладной, для этого используйте двойной щелчок на серийном номере, у товаров с нулевым остатком по складу изменить серийный номер нельзя. Чтобы посмотреть серийные номера в документах списания и переброски, используйте тот же пункт контекстного меню.<br />
*Чтобы посмотреть, какие действия производились с товаром на складе выберите <rspoiler text="Операции">"Единица номенклатуры" -> "Функции" -> "Операции".</rspoiler><br />
*Чтобы посмотреть по каким заказам был доставлен товар с серийным номером, выберите <rspoiler text="Проведено для корреспонденции">"Функции" -> "Проведено для корреспонденции". В отчете отображаются номера заказов в которые входил товар.</rspoiler>.<br />
*Чтобы сформировать полный отчет по товару, выберите <rspoiler text="Входит в корреспонденцию (расширенная форма)">"Единица номенклатуры" -> "Функции" -> ""Входит в корреспонденцию (расширенная форма)".</rspoiler>.<br />
*Для формирования отчета по действиям с конкретным товаром на складе, выберите <rspoiler text="Операции по С/Н">"Единица номенклатуры" -> "Функции" -> "Операции по С/Н" и введите серийный номер, откроется новое окно "Движение товара".</rspoiler>.<br />
*Чтобы просмотреть, какие серийные номера остались в курьерской службе, выберите <rspoiler text="Серийные номера в наличии">"Единица номенклатуры" -> "Функции" -> "Серийные номера в наличии".</rspoiler>.<br />
<br />
= Кейсы =<br />
<br />
== Учет серийных номеров сим-карт при приходе ==<br />
<br />
Сим-карты поставляются в коробках по 250 шт., в коробке они лежат по <rspoiler text="порядку"> В идентификаторе сим-карты порядковый номер - вторая цифра справа, последняя цифра - контрольная сумма. Т.о. если принимать 5 сим-карт, то выглядеть они будут следующим образом: 100000000000000000008, 100000000000000000016, 100000000000000000024, 100000000000000000032, 100000000000000000040.</rspoiler> и на каждой коробке присутствует информация о диапазоне номеров сим-карт. Мы создали [[Терминология#Прочее|скрипт]], который позволял пользователю выбрать тип сим-карт и указать первый номер сим-карты в диапазоне, далее программа автоматически создавала серийные номера, с контрольной суммой и ставила на приход 250 сим-карт. Выдача сим-карт осуществляется стандартным образом - сканирование серийного номера сим-карты. Программа запоминает какие сим-карты вошли в заказ и кому они предназначаются.<br />
<br />
== Передача данных о доставке оператору ==<br />
Оператор предоставлял не активные сим-карты. Чтобы произвести активацию, оператору нужна информация о доставленных сим-картах. Нами был создан скрипт, передающий данные в автоматическом режиме. Работает скрипт следующим образом: курьер отмечает в мобильном приложении, что он доставил сим-карты, информация попадает на сервер и отправляется на электронную почту оператору. Затем оператор производит активацию номеров.<br />
<br />
== Pick to light ==<br />
<br />
Это WMS-система, которая позволяет проводить складские операции исключая бумажные носители. Все операции происходят в электронном виде. Кладовщик сканирует штрихкод заказа. На полках хранения расположены световые индикаторы. Они показывают работнику склада откуда забрать товар. Дисплей рядом с индикатором отображает количество. Складской работник берет необходимое количество товара и нажимает на клавишу. Система понимает, что товар взят и автоматически списывает его со складских остатков.<br />
<br />
Система Pick to light позволяет проводить операции отбора, сортировки и инвентаризации.<br />
<br />
[https://www.youtube.com/watch?v=tPIQpKi_-Ko&t=243s Пример работы системы].<br />
<br />
== Put to light ==<br />
<br />
WMS-система, которая похоже на Pick to light. Также используются световые индикаторы на полках/ячейках склада. Отличаются системы лишь направленностью. В Put to light, после сканирования заказа, дисплей около светового индикатора показывает какое количество товара следует положить в ту или иную коробку/мешок.<br />
<br />
[https://www.youtube.com/watch?v=CFcH8Dm15aE&t=168s Пример работы системы].<br />
<br />
== Использование роботов ==<br />
<br />
В компании Amazon для складских операций используются роботы — kiva robot. Данные роботы способны поднимать вес до 1,5 тонны. Функционируют kiva от аккумуляторов, которые необходимо заряжать каждый час, зарядка длится 5 минут. WMS-система управляет роботами и минимизирует человеческий труд. <br />
<br />
[https://www.youtube.com/watch?v=6KRjuuEVEZs&t=2s Как это работает].<br />
<br />
<br />
= Планы по дополнению статьи =<br />
#Подробно описать просмотр информации и составление отчетов по [[#Учет серийных номеров |серийным номерам]].<br />
#Описание инвентаризации.</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%83%D1%87%D0%B5%D1%82%D0%B0&diff=12849Модуль складского учета2021-10-04T11:36:00Z<p>Sammy: /* Добавление упаковки в заказ */</p>
<hr />
<div>= Назначение =<br />
<br />
Модуль складского учета предназначен для автоматизации ответственного хранения товара на складе курьерской службы. '''Склад''' поставляется отдельным модулем и не входит в базовую версию. Функционал программы по организации складского учета не заменяет полноценную WMS и реализован для работы небольшого склада. Установка модуля складского учета добавляет пункт меню '''Склад''' и вкладку '''Склад'''.<br />
<br />
= Список номенклатуры =<br />
<br />
Для учета товаров на складе используется [[Терминология#Складской учет |номенклатура]]. Чтобы посмотреть складские позиции, выберите в меню '''Склад''' пункт '''Номенклатура'''. Откроется окно «Список номенклатуры»:<br />
<br />
[[Файл:Список_номенклатуры.png|none|500px]]<br />
<br />
В верхней части окна находятся фильтры складских остатков:<br />
* фильтр по поставщикам;<br />
* фильтр по складам;<br />
* '''Только в наличии'''. Если флажок установлен, выводится номенклатура с остатком больше 0;<br />
* '''Архив'''. Если флажок установлен, отображается номенклатура, отмеченная флажком '''Архив'''.<br />
<br />
В нижней части окна отображается количество единиц номенклатуры в таблице.<br />
<br />
= Карточка номенклатуры =<br />
<br />
Чтобы создать карточку единицы номенклатуры, в списке номенклатуры нажмите F3 или в контекстном меню выберите '''Создать'''. Откроется окно «Единица номенклатуры»:<br />
<br />
[[Файл:Единица номенклатуры 1.png|520px|none]]<br />
<br />
'''Наименование'''. Наименование не должно совпадать с ранее внесенными в программу.<br />
<br />
'''Штрих-код'''. Штрихкод производителя, указывается, если есть.<br />
<br />
'''Штрих-код упаковки'''. Для приема товара <rspoiler text="ящиками">Под упаковкой понимается ящик, коробка, мешок, пакет, в которых производитель поставляет товары при оптовых продажах. В упаковке находятся несколько единиц одного товара.</rspoiler>, указывается, если есть.<br />
<br />
'''Кол-во в упаковке'''. Количество единиц товара в одной упаковке.<br />
<br />
'''Розничная цена'''. Стоимость товара в розничной продаже. <spoiler text=Подробнее>В программе по умолчанию нет учета розничной и закупочной цены. Чтобы вести учет осуществлялся, включите переменную <mparam <br />
text="Указывать во вложениях розничную цену единицы номенклатуры" code="BoxSelfSell/></spoiler><br />
'''Закупочная цена'''. Стоимость закупки товара.<br />
<br />
'''Масса'''. Масса товара указывается в килограммах.<br />
<br />
'''Примечание'''. Если габариты и масса были с значением 0, а потом были изменены на другие, то программа произведет перерасчет данных по всем недоставленным заказам, в которые входит товар. При изменении габаритов и массы меняется объемный вес, что влияет на стоимость доставки.<br />
<br />
'''№'''. Номер номенклатуры, присваивается автоматически.<br />
<br />
'''Страна происхождения'''. Страна производства товара. Используется для [[#Печатные формы при комплектации|печати на наклейках]].<br />
<br />
'''Полка'''. Номер полки хранения товара. Отображается при [[#Комплектация|комплектации]].<br />
<br />
'''Способ отгрузки'''. Поле неактивно, так как реализован только один способ: «FIFO» — товар, поступающий первым, первым и отгружается. <br />
<br />
'''Точка дозаказа'''. Остаток товара, при котором требуется [[#Заказ товара|дозаказать товар]]. <br />
<br />
'''Количество дозаказа'''. Количество товара для дозаказа. <br />
<br />
'''Ставка НДС'''. Процент ставки НДС. Поле не может быть пустым. Если товар не облагается НДС, поставьте значение 0.<br />
<br />
'''Наличие всего'''. Остаток товара на всех складах. Справа кнопка [[Файл:Кнопка_вниз.png|20px]] открывает окно с остатками по складам.<br />
<br />
'''Кол-во в паллете'''. Количество товара, помещающегося на одной паллете.<br />
<br />
'''Порядок округления паллет'''. Количество знаков после запятой от -6 до 6, где 0 — это округление до м&sup3;, а 6 — округление до см&sup3;.<br />
<br />
'''Тип номенклатуры'''. Возможные значения:<br />
* '''Товар''' — объект, предоставленный поставщиком для передачи получателю;<br />
* '''Расходные материалы''' — материалы, которые расходуются в процессе использования сотрудниками курьерской службы и не подлежат возврату. Например, жидкости для автомобиля, проездные, полиэтиленовые пакеты, визитки, ручки и т.д.;<br />
* '''Инвентарь''' — номенклатура, используемая курьерской службой для <rspoiler text="внутренних нужд">Кепки, рюкзаки, тетрадки, сумки и т.д.</rspoiler>. Подробнее см. в разделе [[#Инвентарь и расходные материалы|«Инвентарь и расходные материалы»]];<br />
* '''Упаковка''' — номенклатура является упаковкой, а не товаром, например конверт, сейф-пакет или тубус. Подробнее см. раздел [[#Упаковка|«Упаковка»]];<br />
* '''Инвентарь для выдачи''' — номенклатура, используемая курьерской службой для отображения выданного инвентаря на вкладке '''Выдача'''. Подробнее см. раздел [[#Инвентарь для выдачи|«Инвентарь для выдачи»]].<br />
<br />
'''Архив'''. Если флажок установлен, неиспользуемая номенклатура скрывается из общего списка номенклатуры. Удалить номенклатуру нельзя, так как данные по ней могут входить в отчеты. Номенклатура с нулевым остатком автоматически становится архивной, если по ней не было операций в течение одного года.<br />
<br />
'''Учет серийных номеров'''. Если флажок включен, ведется учет движения товара в разрезе серийных номеров. Подробнее см. раздел [[#Учет серийных номеров|«Учет серийных номеров»]]. Вы не можете изменить состояние флажка при остатке больше 0. <br />
<br />
'''Возврат на склад'''. Если флажок установлен, товар при возврате автоматически становится на приход с типом прихода '''Возврат от покупателя'''. Причина возврата может быть любая, кроме '''Брак'''. Подробнее о возвратах см. раздел [[Возврат|«Возврат»]]. Не устанавливайте флажок для сложных технических устройств: возврат происходит на отдельный склад или хранится отдельно от нового товара. Например, если получатель пользуется телефоном, а потом возвращает его, то товару требуется возврат к заводским настройкам. Курьерская служба принимает телефон и хранит отдельно от других товаров. При формировании [[Возврат#Акт передачи корреспонденции |акта возврата корреспонденции]] магазину программа предложит добавить телефон в акт.<br />
<br />
'''Есть QR-код'''. Если флажок установлен, товар имеет маркировку «Честный ЗНАК». Подробнее см. в разделе [[Маркировка|«Маркировка»]]. <br />
<br />
'''Поставщик'''. Организация, поставляющая товар.<br />
<br />
'''Артикул'''. Идентификатор товара у поставщика. Артикула товара может не быть. Кнопка [[Файл:Кнопка_вверх.png|20px]] открывает окно с информацией по поставщикам и артикулам товара. Чтобы изменить артикул товара и добавить нового поставщика, используйте контекстное меню. Если товар предоставляют несколько поставщиков, то поле '''Поставщик''' становится не активным.<spoiler text="Дополнительный функционал">Справочник '''Поставщик для товара''' может использоваться для перекодировки различных систем учета. В качестве виртуального поставщика можно использовать программу.</spoiler> <br />
'''Примечание''', '''Примечание-2'''. Поля для заметок.<br />
<br />
Функции:<br />
*"Поставщики" - дублирует действие кнопки [[Файл:Кнопка_вверх.png|20px]] рядом с полем "Артикул".<br />
*"Остатки по складам" - дублирует действие кнопки [[Файл:Кнопка_вниз.png|20px]] рядом с полем "Наличие всего".<br />
*"Операции" – отображает историю действий с товаром на складе: приход, расход. <br />
*"Проведено для корреспонденции" - отчет по доставленным товарам. <spoiler text="Поля отчета">Компания, заказ, номер, дата вручения, время вручения, инфо о доставке.</spoiler> <br />
*"Входит в корреспонденцию" - отчет по доставленным товарам и товарам, входящим во "Вложения" корреспонденций.<spoiler text="Поля отчета">Компания, номер заказа, шифр, количество в заказе, количество в частичных возвратах, дата вручения, время вручения, инфо о доставке.</spoiler> <br />
*"Входит в корреспонденцию расширенная форма" - объединяет данные "Проведено для корреспонденции" и "Входит в корреспонденцию" и дублирует условия предыдущего отчета. <spoiler text="Добавляются поля">Единица номенклатуры, дата заказа, отправитель, ФИО, адрес, телефон, дата забора, получатель, ФИО, адрес, телефон, вложение, поручение, даты выдачи, дата доставки, время доставки, доставивший курьер, отсканированные серийные номера, дата возврата, признак возврата.</spoiler><br />
*"Операции по С/Н" - отчет по движению товара с конкретным [[#Учет серийных номеров |серийным номером]]. Доступен, если стоит галка "Учет серийных номеров". <br />
*"Остатки по поставщикам и складам" - формируется отчет, в котором указываются поставщики и остатки товара на каждом складе курьерской службы.<br />
*"Серийные номера в наличии"- открывает окно "Серийные номера по единице номенклатуры" с серийными номерами товаров, находящимися на складе.<br />
Кнопки:<br />
*Печать - [[#Печатные формы при комплектации|печатает]] наклейку для товара.<br />
*[[Основные принципы работы в программе#Кнопки в программе|Стандартные кнопки]]<br />
<br />
= Заказ товара =<br />
<br />
В карточке товара необходимо заполнить два поля: “Точка дозаказа” и “Количество дозаказа”. “Точка дозаказа” определяет, при каком остатке на складе нужно дозаказывать товар, а “Количество дозаказа” - в каком количестве.<br />
<br />
Заказ товара осуществляется [[Пользователи |ответственным за склад]] сотрудником - кладовщиком. Для назначения кладовщика в карточке пользователя необходимо поставить галку в поле “Ответственный за склад”. <br />
<br />
При первом запуске программы за день проверяются остатки товаров на складе. Если остатки меньше точки дозаказа, кладовщик получит оповещение во вкладке “Задания” о необходимости закупить товар.<br />
<br />
=Постановка на приход=<br />
<br />
[[Файл:Приходная_накладная.png |right|300px|thumb|Приходная накладная]]<br />
Для приема товара на складе используются приходные накладные. Они находятся в меню "Склад" -> "Приходные накладные". Вы можете посмотреть накладные от конкретного поставщика за определенный период, применив соответствующие фильтры. <br />
<br />
==Создать накладную==<br />
<br />
[[Файл:Приходные накладные.png|300px|right|thumb|Приходные накладные]]<br />
Чтобы создать приходную накладную, выберите пункт контекстного меню "Создать". В открывшемся окне заполните поля “Дата”, “Номер у поставщика”, “Приход на склад” и “Поставщик”. Затем нажмите кнопку "Начать оформление". Появятся дополнительные поля “Комментарий” и “Количество”.<br />
<br />
В поле “Количество” укажите количество принимаемого товара. Далее отсканируйте его штрихкод или добавьте товар вручную. Для ручного ввода в <rspoiler text="контекстном меню">Для вызовы контекстного меню кликните правой кнопкой мыши в окне создания накладной</rspoiler> выберите пункт "Добавить вручную". В открывшемся списке выделите нужный товар и нажмите "Enter".<br />
<br />
==Работа с накладными==<br />
<br />
Чтобы открыть накладную, выделите её в общем списке и и в контекстном меню выберите пункт "Открыть". <br />
<br />
Чтобы добавить или удалить товар, воспользуйтесь соответствующими кнопками контекстного меню. <br />
<br />
Для печати Акта о приеме-передаче товарно-материальных ценностей для поставщика в верхней части экрана нажмите на кнопку "Печать".<br />
<br />
Чтобы распечатать наклейки для принимаемого товара, выделите нужный товар и в контекстном меню выберите "Печатать наклейки". <br />
<br />
Если товар проходил таможню и нужно указать номер [https://ru.wikipedia.org/wiki/Грузовая_таможенная_декларация грузовой таможенной декларации], выделите нужный товар и в контекстном меню выберите "Указать ГТД".<br />
<br />
Для печати акта приема-передачи по форме МХ-1 выделите накладную и в контекстном меню выберите "Сформировать форму МХ-1". Чтобы отправить Акт приема-передачи по электронной почте, выберите "Отправить по почте форму МХ-1".<br />
<br />
Для удаления накладной выделите её и в контекстном меню выберите пункт “Удалить”. Накладная удалится, если не было действий с товарами по складу.<br />
<br />
Обратите внимание, что существуют <spoiler text="ограничения редактирования накладных">Для редактирования накладной пользователю должны быть предоставлены [[Пользователи|права]]. Также по накладной не должно быть <rspoiler text="расходных операций">Т.е. товары не должны выдаваться курьерам, списываться или перебрасываться со склада</rspoiler>. Чтобы ограничить период, за который можно вносить исправления в накладную, воспользуйтесь переменной - <mparam code="DaysForUpdateStoreDс"/>.</spoiler><br />
<br />
= Списание/переброска =<br />
<br />
Списание - это изъятие товаров со складских остатков. Переброска - это списание товаров с одного склада и прием товаров на другом складе. <br />
<br />
Для списания товара выберите пункт меню "Склад" -> "Списание товара" и пункт контекстного меню "Создать". Для переброски товара выберите пункт меню "Склад" -> "Переброска товара" и создайте документ. В случае переброски товара, выберите склад с которого и склад на который производится перемещение товара. Если для списания/переброски будет указан поставщик, то все действия будут производиться только с товарами поставщика. Оформление документов списания/переброски товара производятся аналогично постановке на приход. <br />
<br />
Также, вы можете выслать по электронной почте <rspoiler text="документы">Форма МХ-3.</rspoiler>, как и в приходной накладной.<br />
<br />
= Оформление заказов =<br />
<br />
[[Файл:Добавление товара.png|right|300px|thumb|Добавление позиций]]<br />
При использовании модуля "Склад" необходимо, чтобы товары со склада в закладке "Вложения" карточки корреспонденции были привязаны к справочнику номенклатуры. При ручном вводе информации, выберите товар из [[Учет корреспонденции#Вложения|списка номенклатуры]]. При загрузке данных из [[Импорт баз данных#Пример создания простого шаблона для загрузки вложений|Excel]], с помощью [[API]] или из [[Личный кабинет|Личного кабинета]], для корректной привязки товаров из номенклатуры поставщика и курьерской службы, необходимо использовать артикулы. При загрузке данных из Excel, для поиска единицы номенклатуры по артикулу, в шаблоне загрузки необходимо использовать функцию [[Руководство программиста#Объект TBase|"GetItemByCode"]]. При использовании API, артикул товара необходимо указать в [[API#Описание элементов для оформления заказа|тэге Item]]. Если данные вводятся через Личный кабинет, то товар выбирается из списка номенклатуры, аналогичного существующему в системе.<br />
<br />
= Комплектация =<br />
<br />
Позволяет собрать заказы на складе для последующей выдачи курьеру. Чтобы приступить к сборке, на вкладке '''Склад''' выберите режим '''Комплектация заказов'''.<br />
<br />
[[Файл:Склад предварительная сборка.png |1000px|none]]<br />
<br />
Слева в таблице отображаются отправления для комплектации. Условия отображения:<br />
* планируемая дата доставки в карточке корреспонденции должна быть меньше или равна указанной в фильтре '''Дата доставки'''. Если установлен флажок '''Только на дату''', то в таблице отображаются только те заказы, у которых планируемая дата доставки совпадает с указанной датой;<br />
* товары во вложениях в карточке корреспонденции учитываются по складскому контуру;<br />
* в карточке корреспонденции не указана дата вручения;<br />
* в карточке корреспонденции установлен статус, предполагающий готовность к сборке. Например, он может означать, что вы дозвонились получателю и договорились о дате доставки. Статусы выбираются в переменной <mparam code="PreAssemblyState"/>;<br />
* заказ не находится на руках у курьера;<br />
* заказ не входит в манифест или последний манифест, в который он входит, принят в том же филиале, в котором производилась сборка этого заказа;<br />
* по корреспонденции не оформлялись возвраты.<br />
<br />
Комплектацию заказов в программе производите следующим образом: <rspoiler text="выберите">Выберите из таблицы слева или отсканируйте штрихкод заказа.</rspoiler> заказ. В правой верхней таблице отобразятся товары, предназначенные для сборки в заказ. Возьмите товар из <rspoiler text="места хранения">Место хранения товара указывается в верхней правой таблице в столбце '''Полка'''.</rspoiler>, <rspoiler text="переместите товар">Используйте один из следующих способов:<br>&bull; укажите количество собираемого товара в соответствующем поле и отсканируйте его штрихкод;<br>&bull; отсканируйте штрихкод каждого товара;<br>&bull; для ручного ввода штрихкода нажмите CTRL+ALT+B.</rspoiler> в сборку. Скомплектованные товары отобразятся в правой нижней таблице.<br />
<br />
Поддерживается использование нескольких сканеров одновременно для сборки одной корреспонденции. Сканеры могут быть подключены к одному компьютеру или к разным, аппаратно или по сети. В качестве сканера можно использовать смартфон с установленным приложением [[Мобильное приложение кладовщика для Android|Кладовщик]].<br />
<br />
Комплектация по складу может происходить разными способами: <br />
* если курьерская служба использует маленький склад: выберите заказ, возьмите товары с мест их хранения на складе, <rspoiler text="сканируйте штрихкоды">Чтобы скомплектовать заказ по системе.</rspoiler>, сложите товары в коробку или мешок, <rspoiler text="распечатайте ведомость">Для этого нажмите на '''Печать''', выберите '''Ведомость''' и '''Печать на адреса: Только выбранные'''.</rspoiler>, вложите ведомость в коробку или мешок. Скомплектованный заказ поместите на полку для выдачи курьеру;<br />
* если в курьерской службе используется склад большего размера: работник склада <rspoiler text="печатает наклейки">'''Печать''' > '''Наклейки''' > '''Печать на адреса: Только не собранные'''.</rspoiler> на все заказы к сборке, затем сканирует любую наклейку. В левой таблице автоматически выбирается заказ, а в правой верхней таблице отображаются товары к сборке, с полкой хранения, а также столбцом <rspoiler text="Всего в сборках">В полях столбца показывается количество товара, необходимого для комплектации по всем заказам.</rspoiler>. Работник склада собирает все товары для заказов и привозит в зону сборки. Далее он комплектует заказы, приклеивает наклейку на коробки или мешки и откладывает их на полку;<br />
* складской работник может комплектовать заказы, группируя товары по району доставки. Для этого распечатайте <rspoiler text="список товаров">'''Печать''' > '''Список товаров''' > '''Печать на адреса:"Только не собранные"''' и выберите '''Группировка по: Району'''.</rspoiler>. Далее кладовщик собирает заказы по конкретному району со склада. Затем в левой таблице нажимает на заголовок '''Район''', выделяет заказы, относящиеся к одному району. Затем распечатывает наклейки на заказы для выделенного района. Далее кладовщик сканирует наклейку и комплектует заказ.<br />
<br />
Чтобы удалить строку с товарами из нижней таблицы, выберите пункт контекстного меню '''Удалить из сборки'''.<br />
<br />
Строки с собранными заказами окрашиваются зеленым цветом. Если в карточке корреспонденции указана дата доставки, но по ней есть сформированная сборка, не находящаяся на руках у курьера, то строка с заказом будет окрашена красным цветом.<br />
<br />
На данный момент существует несколько [[#Кейсы |кейсов]] по оптимизации работы крупных складов.<br />
<br />
== Печатные формы при комплектации == <br />
<br />
Чтобы распечатать документы, используемые при комплектации заказа, на вкладке '''Склад''' в правом верхнем углу нажмите на кнопку '''Печать'''. Откроется окно «Печать»:<br />
<br />
[[Файл:Печать склад.png|none|300px|]]<br />
<br />
'''Наклейка''' — печатная форму со штрихкодом, наименованием, страной происхождения товара.<br />
<br />
'''Ведомость''' — дублирует информацию наклейки.<br />
<br />
'''Бланк''' — это заранее загруженный в программу [[Файлы для загрузки#Печатные формы для корреспонденции |шаблон]], который заполняется информацией из единицы номенклатуры по указанным условиям. Бланки можно использовать для отправлений, которые оформляются по определенной форме, например для Почты России.<br />
<br />
'''Список товаров''' — формируется перечень товаров для кладовщика. Список можно группировать по району или по названию. Руководствуясь этим списком, кладовщик может предварительно собрать весь товар в зоне сборки.<br />
<br />
Подробнее о ведомостях и наклейках см. раздел [[Печать ведомостей и наклеек|«Печать ведомостей и наклеек»]].<br />
<br />
'''Печатать на адреса''' — позволяет выбрать условие для печати форм из выпадающего списка. Возможные значения:<br />
* '''Все''' — распечатать формы для всех заказов к сборке;<br />
* '''Только собранные''' — распечатать формы только для собранных заказов;<br />
* '''Только несобранные''' — распечатать формы для несобранных заказов;<br />
* '''Только выбранные''' — распечатать формы только для выделенных заказов.<br />
<br />
Выбранное значение становится значением по умолчанию.<br />
<br />
= Типы номенклатуры = <br />
<br />
Кроме товаров, на складе могут храниться следующие типы объектов:<br />
* [[#Инвентарь и расходные материалы|расходные материалы]]. Возврат на склад не требуется, могут быть выданы курьеру независимо от корреспонденции. Факт выдачи отображается на вкладке '''Склад''' в течение 30 дней.<br />
* [[#Инвентарь и расходные материалы|инвентарь]]. Должен быть возвращен на склад до увольнения курьера. Может быть выдан независимо от корреспонденции. Факт выдачи инвентаря отображается на вкладке '''Склад''' до моменты его возврата.<br />
*[[#Расчет упаковки|упаковка]]. При сканировании автоматически добавляется в заказ и проводится по складу. Если '''Упаковка''' единственный тип вложений в заказе, перед выдачей требуется сборка отправления.<br />
* [[#Инвентарь для выдачи|инвентарь для выдачи]]. При выдаче объекта такого типа документ о его передаче курьеру автоматически проводится через вкладку '''Выдача''', а при приеме от курьера — автоматически закрывается на вкладке '''Выдача''' со статусом '''Доставлено'''.<br />
<br />
== Инвентарь и расходные материалы ==<br />
<br />
Чтобы выдать инвентарь или расходные материалы:<br />
# На вкладке '''Склад''' выберите режим '''Выдача инвентаря''' и действие '''Выдача'''.<br />
# Выберите курьера из таблицы слева или отсканируйте удостоверение.<br />
# Укажите количество выдаваемого инвентаря и отсканируйте или введите вручную его штрихкод.<br />
# Распечатайте [[#Внутренний акт приема-передачи|Акт приема-передачи материальных ценностей]].<br />
<br />
В результате инвентарь или расходные материалы переданы курьеру и списаны со складских остатков.<br />
<br />
Чтобы принять от курьера инвентарь:<br />
# На вкладке '''Склад''' выберите режим '''Выдача инвентаря''' и действие '''Прием'''. <br />
# Выберите курьера из таблицы слева или отсканируйте удостоверение.<br />
# Сканируйте или введите вручную штрихкод инвентаря.<br />
<br />
Если количество окажется больше, чем было выдано курьеру, то появится сообщение об ошибке.<br />
<br />
== Инвентарь для выдачи ==<br />
<br />
Чтобы выдать объект с типом '''Инвентарь для выдачи''':<br />
# На вкладке '''Выдача''' или '''Склад''' в режиме '''Выдача''' выберите курьера из таблицы слева или отсканируйте удостоверение.<br />
# Отсканируйте или введите вручную штрихкод с системной этикетки, распечатанной из карточки номенклатуры.<br />
В результате на вкладке '''Выдача''' появляется автоматически сформированный документ о выдаче инвентаря курьеру, на вкладке '''Склад''' создаются складские проводки.<br />
<br />
Чтобы принять от курьера объект с типом '''Инвентарь для выдачи''', используйте один из следующих способов:<br />
* на вкладке '''Выдача''' установите статус документа о выдаче инвентаря '''Доставлено''';<br />
* на вкладке '''Выдача''' или '''Склад''' в режиме '''Прием''' отсканируйте системный штрихкод инвентаря. Для документа о выдаче инвентаря автоматически установится статус '''Доставлено'''.<br />
Возвратные складские проводки формируются автоматически.<br />
<br />
== Упаковка ==<br />
<br />
С упаковкой можно работать следующими способами:<br />
* добавление упаковки в заказ кладовщиком по факту комплектации;<br />
* автоматический расчет набора упаковочных материалов исходя из имеющегося ассортимента и габаритов товаров.<br />
<br />
=== Добавление упаковки в заказ ===<br />
<br />
При комплектации заказа в него можно сразу добавлять использованную упаковку. Для этого отсканируйте штрихкод номенклатуры с типом '''Упаковка'''. Упаковка добавляется во вложения и места собираемой корреспонденции и проводится по складу.<br />
<br />
Вложения с упаковкой влияют на расчет массы отправления. Если есть упаковки, то объемный вес считается по габаритам использованных упаковок. Масса упаковки добавляется к массе заказов.<br />
<br />
Добавленные упаковки можно удалять с вкладки '''Cклад'''. Для этого нужно исключить упаковку из сборки, и она автоматически удаляется из вложений карточки корреспонденции.<br />
<br />
Стоимость, указанная в карточке номенклатуры, не учитывается в сумме наложенного платежа.<br />
<br />
=== Расчет упаковки ===<br />
<br />
Расчет упаковки осуществляется только для товаров прямоугольной формы. <br />
<br />
Чтобы в программе происходил расчет, заведите единицу номенклатуры с типом '''Упаковка''' и укажите <rspoiler text="габариты упаковки">Длина, ширина, высота.</rspoiler>. Достаточно завести несколько единиц номенклатуры для разных видов упаковок, а затем использовать их в программе.<br />
<br />
Чтобы рассчитать упаковку, на вкладке '''Адреса''' выделите корреспонденцию и в контекстном меню выберите пункт '''Дополнительные функции''' > '''Рассчитать упаковку'''. Программа сравнивает объем заказа с объемом упаковки. В результате необходимое количества конвертов или коробок автоматически добавляется в карточку корреспонденции, на вкладке '''Вложения'''. Кладовщик увидит требуемый набор упаковки, и при комплектации она списывается со склада, что позволяет вести ее учет.<br />
<!-- <spoiler text="Как производится подбор упаковки>Данная функция реализовывалась для конкретной задачи — выбора конвертов, в которые можно положить набор журналов. В общем случае это очень сложная комбинаторная задача - программа должна в каждую доступную упаковку попробовать "положить" товары, "покрутив" их во всех 3-х плоскостях, и попробовав все их комбинации на плоскости и штабелями друг на друге. И сделать это не только в каждой упаковке, но и во всех их комбинациях и с разным числом одинаковых упаковок. Если есть, например, 5 видов упаковок, и 5 вложений в отправлении, нам будут доступны миллионы, если не миллиарды возможных комбинаций. Поэтому при подборе упаковки программа действует по упрощенному алгоритму, имея в виду именно журналы и конверты: Она выбирает только упаковки, длина и ширина которых лежат в диапазоне от 103% до 220% максимальных длины и ширины упаковываемых объектов, пробует укладывать их в упаковку только в 2 слоя, "вращая" каждое вложение в плоскости. Так же она использует множество других допущений, например, начинает с самой большой упаковки, чтобы гарантировано в нее поместились самые большие вложения.</spoiler>--><br />
<br />
= Внутренний акт приема-передачи =<br />
<br />
Это документ, который используется для внутренних операций в курьерской службе, например для выдачи инвентаря курьерам. Чтобы распечатать акт приема-передачи на инвентарь, нажмите кнопку "Печать" при [[#Инвентарь и расходные материалы | выдаче инвентаря]] и выберите принтер. В распечатанный акт курьер ставит подпись и получает инвентарь. Таким же образом печатаются акты приема-передачи на товар. <br />
<br />
Если акт для курьера был распечатан, то при повторной попытке печати акта программа выдаст ошибку. Чтобы посмотреть акты перейдите в меню '''Склад''' > '''Акты приема/передачи курьерам'''. Чтобы открыть документ, используйте кнопку ENTER, чтобы распечатать его, нажмите на кнопку '''Печать'''.<br />
<br />
= Отчеты по складу =<br />
<br />
Чтобы выбрать отчет, перейдите в меню '''Склад''' > '''Отчеты''':<br />
* «Остатки на дату» — отчет по складским остаткам, выберите дату и поставщика;<br />
* «Продажи за период» — отчет составляется по товарам, проданным за определенный промежуток времени;<br />
* «Расформированные заказы» — отчет о расформированных заказах. Для формирования отчета указывается пользователь и промежуток времени;<br />
* «Серийные номера по клиенту» — отчет по товару от конкретного поставщика, с серийными номерами.<br />
* «Время сборки заказов» — отчет по количеству времени, которое затрачивает работник склада на сборку заказа;<br />
* «Сводный отчет по товарам клиента» — отчет по всем товарам поставщика, хранящимся на складе. В отчете представлена информация по товарам, передвижению, получателям;<br />
* «Оборотная ведомость по товарам» — отчет по обороту товара на складе, для формирования отчета выберите период и склад;<br />
* «Отчет по стоимости хранения» — отчет по стоимости хранения товара клиента на складе курьерской службы.<br />
<br />
= Резерв товаров на складе=<br />
<br />
Резерв — это количество товаров, входящих во вложения корреспонденции, отвечающей одновременно следующим условиям:<br />
* не была скомплектована;<br />
* не заполнена дата вручения;<br />
* находится в одном из статусов, указанных в переменной <mparam code="LetterStates"/>.<br />
<br />
При изменении статуса корреспонденции, например менеджер дозвонился до клиента и договорился о доставке, товары из вложений будут резервироваться. <br />
<br />
У пользователя есть два варианта просмотра остатков с учетом резерва: <br />
* из карточки корреспонденции. Для этого включите переменную <mparam code="ShowRemainsInAddress"/>. Во вложениях карточки корреспонденции появится столбец '''Наличие''', в ячейках столбца будет отображаться остаток товара по складу минус резерв; <br />
* из [[Личный кабинет#Складской учет|личного кабинета]].<br />
<br />
= Расчет стоимости хранения =<br />
<br />
Данная функция позволяет рассчитать стоимость хранения товаров клиента на складе курьерской службы.<br />
<br />
Чтобы рассчитать стоимость хранения, выберите пункт меню '''Склад''' > '''Расчет стоимости хранения''' и укажите временной интервал.<br />
<br />
Количество товара на складе умножается на стоимость хранения палето-места и на количество дней. Стоимость хранения задается в [[Тарифы клиентов#Прочее |тарифах]]. MeaSoft оформляет заказы на получившиеся суммы для клиентов склада, чтобы суммы попадали в акты передачи денег или в счета.<br />
<br />
Подробнее о <spoiler text="расчете стоимости хранения"> <br />
Стоимость хранения формируется следующим образом:<br />
# На конец каждого дня из выбранного диапазона рассчитывается остаток каждого товара на складах курьерской службы.<br> Рассчитывается объем одной единицы товара. Для этого в карточке номенклатуры должны быть указаны габариты. Если габариты не указаны, то для определения объема хранимого товара общий остаток номенклатуры в штуках делится на значение поля '''Кол-во в паллете''' и округляется до значения, указанного в поле '''Порядок округления паллет'''. По умолчанию значение этого поля 1, т.е. округление производится до 1 знака после запятой. Диапазон значений поля от -6 до 6. Значение 0 означает округление до единиц м3, значение 6 — округление до см3. Округление всегда производится в большую сторону.<br>Если значение поля равно 2, а полученное фактическое значение объема равно 1,00002 м3, оно будет округлено до 1,01 м3, фактическое значение 1,001 также будет округлено до 1,01. Значение 1,25 округляться не будет, а 1,253 округляется до 1,26;<br />
# Количество товара умножается на объем одной единицы. Это действие производится для всех единиц номенклатуры, имеющих ненулевой объем и ненулевой остаток за каждый день диапазона.<br />
# Полученные объемы суммируются, чтобы получить объем хранимого на складе товара за каждый день.<br />
# Полученный объем сравнивается со значением переменной <mparam code="MinStoreValue"/>. Если рассчитанный объем меньше значения переменной, то в качестве хранимого объема используется значение переменной. Если рассчитанный объем больше значения переменной, то он округляется до порядка, указанного в переменной <mparam code="RoundForStoreHouse"/>.<br />
# Полученный объем умножается на стоимость суточного хранения 1 м3. Если поле не заполнено, стоимость хранения 0.<br />
# Полученные значения суммируются и вносятся в поле '''Стоимость доставки''' карточки корреспонденции.<br />
Результат расчета стоимости хранения — сформированные заказы для клиентов курьерской службы.</spoiler>Чтобы посмотреть созданные заказы:<br />
# На вкладке '''Адреса''' нажмите на кнопку '''Фильтр'''.<br />
# В фильтре установите значение поля '''Дата зак.''' и флажок '''Доставлено''', снимите флажок '''Не доставлено''' и нажмите на кнопку '''ОК'''.<br />
# В таблице добавьте столбец '''Инфо о дост.''' и отсортируйте по нему.<br />
Заказы, созданные для учета стоимости хранения, в столбце '''Инфо о дост.''' отмечены надписью «Стоимость складского хранения за период».<br />
<br />
Если в программе активированы дополнительные услуги, полученная сумма отображается в карточке корреспонденции на вкладке '''Услуги''' как стоимость услуги «Ручной ввод».<br />
<br />
= Учет серийных номеров =<br />
<br />
Функция, позволяющая учитывать движение товара в <rspoiler text="разрезе">Система создаст привязку товара с уникальным серийным номером и будет "знать" о приходе и расходе. Пользователь может узнать, какие серийные номера остались на складских остатках и куда был доставлен товар с конкретным серийным номером.</rspoiler> [[Терминология#Складской учет|серийных номеров]]. В качестве серийного номера также используется <rspoiler text="IMEI">Международный идентификатор мобильного оборудования</rspoiler> или <rspoiler text="ICCID">Уникальный серийный номер SIM-карты</rspoiler>. Функция применяется для товаров с уникальным идентификатором и сложных технических товаров. Чтобы включить учет, перейдите в номенклатуру и поставьте галку "Учет серийных номеров". При приеме на склад, с учетом серийных номеров, программа показывает поле для выбора товара из выпадающего списка. Чтобы добавить товар, выберите его или сканируйте штрихкод поставщика, затем сканируйте серийный номер, строка добавится в нижнюю таблицу. У нас есть кейс по приему сим-карт от [[#Учет серийных номеров сим-карт при приходе|сотовых операторов]]. При остальных операциях по складу требуется только ввод серийного номера.<br />
[[Файл:Серийные номера в приходной накладной.png|300px|right|thumb|Серийные номера]]<br />
<br />
Вы можете посмотреть информацию по серийным номерам и сформировать отчеты на разных этапах работы:<br />
*Для просмотра и изменения серийных номеров в приходной накладной, выберите пункт контекстного меню "Посмотреть серийные номера", откроется окно. Фильтр - "Только в наличии" включает отображение товаров с серийным номером и остатком по складу больше 0. Изменить серийный номер возможно только из приходной накладной, для этого используйте двойной щелчок на серийном номере, у товаров с нулевым остатком по складу изменить серийный номер нельзя. Чтобы посмотреть серийные номера в документах списания и переброски, используйте тот же пункт контекстного меню.<br />
*Чтобы посмотреть, какие действия производились с товаром на складе выберите <rspoiler text="Операции">"Единица номенклатуры" -> "Функции" -> "Операции".</rspoiler><br />
*Чтобы посмотреть по каким заказам был доставлен товар с серийным номером, выберите <rspoiler text="Проведено для корреспонденции">"Функции" -> "Проведено для корреспонденции". В отчете отображаются номера заказов в которые входил товар.</rspoiler>.<br />
*Чтобы сформировать полный отчет по товару, выберите <rspoiler text="Входит в корреспонденцию (расширенная форма)">"Единица номенклатуры" -> "Функции" -> ""Входит в корреспонденцию (расширенная форма)".</rspoiler>.<br />
*Для формирования отчета по действиям с конкретным товаром на складе, выберите <rspoiler text="Операции по С/Н">"Единица номенклатуры" -> "Функции" -> "Операции по С/Н" и введите серийный номер, откроется новое окно "Движение товара".</rspoiler>.<br />
*Чтобы просмотреть, какие серийные номера остались в курьерской службе, выберите <rspoiler text="Серийные номера в наличии">"Единица номенклатуры" -> "Функции" -> "Серийные номера в наличии".</rspoiler>.<br />
<br />
= Кейсы =<br />
<br />
== Учет серийных номеров сим-карт при приходе ==<br />
<br />
Сим-карты поставляются в коробках по 250 шт., в коробке они лежат по <rspoiler text="порядку"> В идентификаторе сим-карты порядковый номер - вторая цифра справа, последняя цифра - контрольная сумма. Т.о. если принимать 5 сим-карт, то выглядеть они будут следующим образом: 100000000000000000008, 100000000000000000016, 100000000000000000024, 100000000000000000032, 100000000000000000040.</rspoiler> и на каждой коробке присутствует информация о диапазоне номеров сим-карт. Мы создали [[Терминология#Прочее|скрипт]], который позволял пользователю выбрать тип сим-карт и указать первый номер сим-карты в диапазоне, далее программа автоматически создавала серийные номера, с контрольной суммой и ставила на приход 250 сим-карт. Выдача сим-карт осуществляется стандартным образом - сканирование серийного номера сим-карты. Программа запоминает какие сим-карты вошли в заказ и кому они предназначаются.<br />
<br />
== Передача данных о доставке оператору ==<br />
Оператор предоставлял не активные сим-карты. Чтобы произвести активацию, оператору нужна информация о доставленных сим-картах. Нами был создан скрипт, передающий данные в автоматическом режиме. Работает скрипт следующим образом: курьер отмечает в мобильном приложении, что он доставил сим-карты, информация попадает на сервер и отправляется на электронную почту оператору. Затем оператор производит активацию номеров.<br />
<br />
== Pick to light ==<br />
<br />
Это WMS-система, которая позволяет проводить складские операции исключая бумажные носители. Все операции происходят в электронном виде. Кладовщик сканирует штрихкод заказа. На полках хранения расположены световые индикаторы. Они показывают работнику склада откуда забрать товар. Дисплей рядом с индикатором отображает количество. Складской работник берет необходимое количество товара и нажимает на клавишу. Система понимает, что товар взят и автоматически списывает его со складских остатков.<br />
<br />
Система Pick to light позволяет проводить операции отбора, сортировки и инвентаризации.<br />
<br />
[https://www.youtube.com/watch?v=tPIQpKi_-Ko&t=243s Пример работы системы].<br />
<br />
== Put to light ==<br />
<br />
WMS-система, которая похоже на Pick to light. Также используются световые индикаторы на полках/ячейках склада. Отличаются системы лишь направленностью. В Put to light, после сканирования заказа, дисплей около светового индикатора показывает какое количество товара следует положить в ту или иную коробку/мешок.<br />
<br />
[https://www.youtube.com/watch?v=CFcH8Dm15aE&t=168s Пример работы системы].<br />
<br />
== Использование роботов ==<br />
<br />
В компании Amazon для складских операций используются роботы — kiva robot. Данные роботы способны поднимать вес до 1,5 тонны. Функционируют kiva от аккумуляторов, которые необходимо заряжать каждый час, зарядка длится 5 минут. WMS-система управляет роботами и минимизирует человеческий труд. <br />
<br />
[https://www.youtube.com/watch?v=6KRjuuEVEZs&t=2s Как это работает].<br />
<br />
<br />
= Планы по дополнению статьи =<br />
#Подробно описать просмотр информации и составление отчетов по [[#Учет серийных номеров |серийным номерам]].<br />
#Описание инвентаризации.</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=12418Руководство программиста2021-07-28T10:08:28Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp,sftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=12326Руководство программиста2021-06-30T10:23:56Z<p>Sammy: /* Объект TBaseUtils */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
'''CalcSalary(DateTo, [Filter=0, KurierCode = 0, ManagerCode = 0])''' - Полный расчет зарплаты курьерам. DateTo - дата до которой создается начисление. Условия отбора курьеров для начисления. Filter - роль сотрудника: 0 - Все, 1 - курьеры, 2 - менеджеры; KurierCode - код курьера, ограничить расчет зарплаты одним курьером;ManagerCode - код курьера, ограничить расчет зарплаты курьерами указанного менеджера. Внимание фильтры Filter, KurierCode и ManagerCode накладываются друг на друга. Результатом функции является SubSQL с информацией по созданным начислениям. <br />
поля ответа: код курьера, код менеджера, начислено, бонусы, штрафы, аванс, итого;<br />
select kurier, manager, profit, bonus, shtraf, prepay, total [union select ...]<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=12325Руководство программиста2021-06-30T10:14:59Z<p>Sammy: /* Объект TBaseUtils */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
'''PreCalcSalary(kurier, addressCodes)''' - Рассчитывает предварительную зарплату. Kurier - код курьера, используется для определения тарифа. addressCodes - коды адресов, через запятую для которых необходимо посчитать зарплату. Результаты расчета будут записаны в таблицу kurierpaydetail, так как расчет предварительный то записи не будут прикреплены к конкретному начислению. <br />
<br />
select a.code, kpd.price as "туда", kpd2.price as "обратно" from address a <br />
left join kurierpaydetail kpd on kpd.sourcetable=3 and kpd.sourcecode=a.code and kpd.rectype = 1 <br />
left join kurierpaydetail kpd2 on kpd2.sourcetable=3 and kpd2.sourcecode=a.code and kpd2.rectype = 2<br />
where a.code in (...)<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=12278Руководство программиста2021-06-17T16:07:54Z<p>Sammy: /* Недавние изменения */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TExcel добавлен метод ColumnDelete.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=12277Руководство программиста2021-06-17T16:07:15Z<p>Sammy: /* Объект TExcel */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
ColumnDelete(i[, count]) - Удаляет count (по-умолчанию - 1) столбцов начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=12252Руководство программиста2021-06-10T13:05:54Z<p>Sammy: /* Строковые функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
Translate(format, [param1, param2, ...]) - Функция перевода строки format в язык пользователя. Строка format может содержать параметры %s, %d - строка и число соответственно. <br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&diff=12090Дополнительные возможности2021-05-26T12:23:34Z<p>Sammy: /* Скрипты */</p>
<hr />
<div>== Настройка для печатной документации ==<br />
<br />
CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".<br />
Объявленные переменные<br />
%code% - коды записей в выдаче которые необходимо распечатать<br />
%docdate% - дата установленная в выдаче<br />
%dockurier% - ФИО курьера показанного в выдаче<br />
%dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)<br />
<br />
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".<br />
<br />
OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).<br />
<br />
OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.<br />
<br />
OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.<br />
<br />
OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.<br />
<br />
OnAfterItemPrint - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.<br />
<br />
== Настройка всплывающих окон==<br />
<br />
OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)<br />
<br />
OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). Тег %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото". Если результат функции -1, то происходит отмена сохранения без ошибки (abort). <br />
<br />
OnAfterAddressSave - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".<br />
<br />
OnBarScan - Скриптовая обработка штрих-кода перед поиском<br />
<br />
AfterAddressAcceptance - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. <br />
<br />
BeforeAddressAcceptance - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.<br />
<br />
OnAddToShippingPlace - событие после добавление корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка<br />
<br />
GetTypeShippingPlace - событие перед добавление корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит %сode% - код адреса.<br />
<br />
DAILY - задание выполняемое один раз в день<br />
<br />
OnGivnKurierStateChanged - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера.В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.<br />
<br />
OnBeforeGivnStatus - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса<br />
<br />
== Настройка документов ==<br />
CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"<br />
<br />
GetTypeShippingPlace - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.<br />
<br />
OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.<br />
<br />
AdditionalStringForSMA - Дополнительные условия разделения актов на нал. и безнал.Содержит %code%, где передано значение типа акта: "nal" - наличный, "bnal"- безналичный.<br />
<br />
CustomBillDetaling - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.<br />
<br />
OnSchetChanged - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code<br />
<br />
ExceptionsForAPK - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.<br />
пример кода по умолчанию, фильтр только по второму запросу, вложение с названием "Доставка" - не попадает в АПК<br />
<NOWIKI><?><br />
SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); <br />
$ExcStr</NOWIKI><br />
<br />
пример для изменения фильтрации сразу у двух запросов:<br />
<NOWIKI><?><br />
SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');<br />
SET($WHERE2, ''); rem('условие отбора возврата товаров');<br />
$WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI><br />
<br />
OnOrderCountCalc -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)<br />
<br />
OnGetZakazCount - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.<br />
<br />
== Настройка вида маркера ==<br />
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br /> <br />
<br />
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:<br />
showmessage(table2map._GETTABLEINFO)<br />
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).<br />
<br />
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.<br />
<br />
Так же текущее состояние окна карты доступно через переменные:<br />
<br />
$PlanDate - Выбранная дата, на которую планируется.<br />
<br />
$KurierCode - Код выделенного курьера.<br />
<br />
$MetroCode - Код выделенной станции метро (маршрута).<br />
<br />
<br />
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:<br />
<br />
set($s, try( <br />
error('вот тут ошибка, которую вы увидите в виде сообщения');<br />
));<br />
if($s, showmessage($s), '');<br />
<br />
<br />
<br />
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/><br />
Например:<br />
if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))<br />
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат. <br />
<br />
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.<br />
При помощи данных параметров можно создать условия отображения маркеров.<br/><br />
<br />
Для доступа к настройкам доступны переменные:<br />
<br />
$Color<br />
<br />
$DefaultColor<br />
<br />
$PlanedColor<br />
<br />
$SelectedPlanedColor<br />
<br />
$GetKurierColor<br />
<br />
Например: <br />
if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)<br />
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.<br />
<br />
== Настройка мобильного приложения ==<br />
<br />
== Скрипты ==<br />
OnEveryStartApp - выполняется при запуске программы.<br />
<br />
OnEveryCloseApp - выполняет при закрытии программы.<br />
<br />
OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.<br />
<br />
OnMapBeforeGeolocation - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist. <br />
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.<br />
<NOWIKI><?><br />
if(station=0, <br />
_set('lon', null);<br />
_set('lat', null);<br />
_set('searchCoordinate', 'F');<br />
,0)</NOWIKI><br />
<br />
<br />
OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.<br />
<br />
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. <br />
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:<br />
<NOWIKI><br />
<br />
<?><br />
rem(ticket 23584, 23583); <br />
if( ('%tablename%'='address'), <br />
query('UPDATE address a <br />
JOIN trace t ON t.address=a.code AND t.state=1 <br />
JOIN zakaz z ON z.code=a.zakaz<br />
SET <br />
a.mode = IF(z.source=646, 3, 2)<br />
WHERE <br />
a.code = %code%<br />
AND a.station=65535<br />
AND (<br />
(z.source=646 AND a.mode<>3) OR <br />
(A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR<br />
(A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)<br />
)')<br />
, '');</NOWIKI><br />
;<br />
<br />
OnCalcSalary - Событие происходит после начисления зарплаты курьеру. %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты: %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение; %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.<br />
<br />
OnTicketSetCusr - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)</div>Sammyhttps://wiki.courierexe.ru/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0&diff=11973Руководство программиста2021-04-29T14:43:57Z<p>Sammy: /* Прочие функции */</p>
<hr />
<div><br />
== Основные положения ==<br />
<br />
В систему «Курьерская служба 2008» встроен внутренний интерпретируемый язык программирования. Среда состоит из базовой функциональности, и дополнительно создаваемых объектов. Некоторые объекты автоматически создаются средой перед запуском интерпретатора для предоставления доступа к контексту, в котором работает скрипт. Все типы данных приводятся друг к другу автоматически, иногда при необходимости можно использовать функции приведения типов. <br />
<br />
Как интерпретатор приводит типы:<br />
<br />
1. При использовании значения как параметр функции интерпретатор автоматически приводит значение к типу, необходимому функции.<br />
<br />
2. При операциях сложения, а также логических операциях, операнды приводятся к строке если хотя бы один из них имеет тип «строка». Например:<br />
3.3+5 -> 8.3<br />
‘3.3’+5 -> ‘3.35’<br />
подобную проблему можно решить принудительно преобразовав тип:<br />
float(‘3.3’)+5 -> 8.3<br />
<br />
3. При операциях умножения, деления и вычитания операнды приводятся к числу с плавающей точкой, однако если результат выполнения операции получается целым числом, то он приводится к целочисленному типу.<br />
<br />
Как работают функции приведения типов:<br />
<br />
1. При преобразовании строки к числу: функция «читает» строку до первого символа, не позволяющего создать число с плавающей точкой, при этом разделителем целой и дробной частей может быть как точка так и запятая. Если приведение производится к целочисленному типу, то после этого происходит округление. Например:<br />
float('3.6qwerty735') -> 3.6<br />
int('3.6qwerty735') -> 4<br />
<br />
2. При преобразовании к булевому типу ложью считается пустая строка либо число 0, все остальное - истина<br />
<br />
3. При преобразовании булевого типа к числу истина преобразуется в 1, ложь – в 0. Такое преобразование позволяет использовать сложение и умножение в качестве логических «ИЛИ» и «И» соответственно:<br />
if((5=5)+(6=7), <a>, [b]) – условие истинно, выполнится код «a».<br />
<br />
4. При преобразовании булевого типа к строке сначала происходит преобразование к числу:<br />
(5=5)+'qwerty' -> ‘1qwerty’<br />
<br />
== Описание синтаксиса ==<br />
<br />
Команды разделяются точкой с запятой. Параметры функций разделяются запятыми. Каждая команда (даже цикл while) является функцией, возвращающей некоторое значение. Результатом выполнения составной команды (последовательности функций, разделенных точкой с запятой), является результат выполнения последней функции. Имена переменных, функций, объектов, а также их свойств и методов не чувствительны к регистру.<br />
Константы: константы бывают целочисленными, дробными и строковыми. Значения целочисленных и дробных констант указываются «как есть» (в этом случае разделитель целой и дробной частей – точка), шестнадцатеричные значения начинаются с символа «$» и, если первая цифра – буква, она упреждается цифрой 0, а строковые – в одинарных кавычках. При этом, если внутри строковой константы встречается символ одинарной кавычки он должен быть задвоен, для указания интерпретатору того, что он не является признаком конца константы.<br />
Операции сравнения: >, <, =, ! - Больше, меньше, равно, не равно соответственно.<br />
Логические операции: + (ИЛИ), * (И).<br />
Арифметические операции: +, -, *, /<br />
Операция конкатенации строк: +<br />
<br />
<br />
<br />
=== Функциональность базового объекта ===<br />
<br />
SET($a, a) – присваивает переменной (1-й параметр) значение второго параметра. При отсутствии переменной – создает ее. Имена переменных должны начинаться с символа «$», а следующий символ не должен быть цифрой. Возвращает новое значение переменной. Функция используется только для задания значений переменных. Не допускается использования для задания значений свойств объектов. Для этого используются соответствующие методы этих объектов.<br />
<br />
IF(a,b,c) или IF(a,b) – Условный оператор. В первом случае возвращает b, если a истинно (не равно нулю или пустой строке), иначе – c. Во втором случае – возвращает a, если оно истинно, иначе – b.<br />
<br />
WHILE(a, b) – Оператор цикла. Выполняет b пока a истинно:<br />
set($i, 10);<br />
set($sum, 0);<br />
while($i>0, set($sum, $sum+$i); set($i, $i-1));<br />
$sum<br />
Результат – 55<br />
<br />
FOR($a, b, c, d) – Оператор цикла. Выполняет d пока $a последовательно присваиваются значения от b до с включительно:<br />
set($sum, 0);<br />
for($i, 1, 10, set($sum, $sum+$i));<br />
$sum<br />
Результат – 55<br />
<br />
NEW(ClassName, InstanceName) – Создает экземпляр класса ClassName, назначает ему имя InstanceName. Возвращает порядковый номер созданного объекта. Доступ к свойствам и методам объектов осуществляется по имени объекта и имени свойства/метода, разделенным точкой. Именем объекта может быть и пустая строка, тогда доступ к его свойствам и методам будет осуществляться без указания имени, и, в случае совпадения имен свойств и/или методов со стандартными или свойствами/методами других объектов, использоваться будут соответствующие свойства/методы объекта, созданного ранее, а также такой объект невозможно уничтожить до окончания выполнения скрипта. Все объекты созданные во время выполнения скрипта уничтожаются автоматически после окончания его выполнения.<br />
<br />
FREE(InstanceName) – Уничтожает объект с именем InstanceName. Возвращает 0. В случае отсутствия объекта с заданным именем вызывает ошибку.<br />
<br />
ShowObjects – Возвращает список созданных объектов – названия классов и имена.<br />
<br />
ERROR(message) – Вызывает ошибку с текстом message.<br />
<br />
SHOWMESSAGE(message) – Отображает диалоговое окно с текстом message, останавливает выполнение скрипта до закрытия окна пользователем.<br />
<br />
SimpleAskUser(Message) – Выводит диалоговое окно с текстом Message и кнопками «Да» и «Нет». Возвращает 1, если пользователь нажал кнопку «Да», иначе – 0.<br />
<br />
TRY(a) – Выполняет a в «защищенном от ошибки» режиме. Если в процессе выполнения a возникает ошибка, возвращает текст ошибки, иначе – 0 (ложь).<br />
<br />
REM(….) – Код в скобках игнорируется (комментарий).<br />
<br />
EXEC(FileName, Params, Wait, WindowState) – Запускает внешнее приложение FileName с параметрами Params. Если Wait истинно – ожидает завершение процесса. Для WindowState доступны следующие числовые значения:<br />
0 - SW_HIDE<br />
1 - SW_SHOWNORMAL (по-умолчанию)<br />
3 - SW_MAXIMIZE<br />
6 - SW_MINIMIZE<br />
Функция возвращает истину если приложение запущено успешно. Иначе – Ложь.<br />
В случае успеха, при параметре Wait – истина кладет в переменную $LastResult код завершения приложения.<br />
<br />
=== Строковые функции ===<br />
<br />
UpCase(s) – возвращает строку s в верхнем регистре.<br />
<br />
LCase(s) – возвращает строку s в нижнем регистре.<br />
<br />
Len(s) – возвращает количество символов в строке s.<br />
<br />
Pos(s, substr) – возвращает номер первого символа первого включения подстроки substr в строку s, возвращает 0, если включения подстроки отсутствуют. Поиск не чувствителен к регистру.<br />
<br />
Param(s, i) – возвращает i-й элемент строки s, разделенной запятыми на элементы.<br />
<br />
ParamsCount(s) - возвращает количество элементов строки s, разделенной запятыми на элементы.<br />
<br />
Left(s, i [,full] ) – возвращает i первых символов строки s. Параметр i, может быть строкой, тогда он считается разделителем и функция, возвращает строку слева от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Mid(s, i, j) - возвращает подстроку из s начиная с i символа и длиной j символов<br />
<br />
Right(s, i [,full]) – возвращает i последних символов строки s. Параметр i, может быть строкой, тогда он считается разделителем, функция ищет разделитель с конца строки, и возвращает строку справа от разделителя. Параметр full разрешает функции вернуть всю строку s, если по параметру i ничего не нашли, параметр не обязательный, по умолчанию выключен.<br />
<br />
Reverse(s) - возвращает строку s задом-наперед. Полезно например для поиска с конца функций Pos().<br />
<br />
Char(i) – возвращает символ с кодом i.<br />
<br />
Ord(s) – возвращает код первого символа строки s.<br />
<br />
Replace(s, strFind1, strReplace1, [ strFind2, strReplace2, ... ], [caseInsensetive]) - возвращает строку s, в которой все включения строк strFind заменены строкой strReplace. Параметры поиска и замены всегда должны быть в паре и их может быть несколько. caseInsensetive - неучитывать регистр, не обязательный параметр, по умолчанию включен.<br />
<br />
RemSpace(s) – возвращает сроку s без начальных и конечных запятых и пробелов, а также начальных точек.<br />
<br />
SumStr(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''с добавлением валюты'''. Необязательные параметры captions - позволяет изменить название валюты, формат строки может зависеть от текущего языка(посмотреть формат можно в "Справочники"-"Статусы"-"32 Валюты", в разделе "Дополнительная информация"). Language - код языка на котором необходимо вывести сумму прописью. По умолчанию если не обязательные параметры опущены, используются региональные настройки в переменных.<br />
<br />
NumToStrSimple(f [, captions, language]) – Возвращает сумму f, написанную прописью, по умолчанию '''без валюты'''. Параметры идентичны функции SUMSTR.<br />
<br />
FullNameToShort(Name) – Возвращает фамилию и инициалы по полному ФИО Name.<br />
<br />
MonthName1(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в именительном падеже.<br />
<br />
MonthName2(m) – Возвращает имя месяца с номером m с большой буквы на русском языке в родительном падеже.<br />
<br />
StrForXML(s) - Подготавливает строку к парсингу как xml: Если находит в строке подстроку "UTF-8" - перекодирует ее из utf-8 в win-1251, убирает начальный знак вопроса, если такой встречается.<br />
<br />
FixedIntToStr(i, len[, char]) - Возвращает целое число i дополненное слева символами char (по-умолчанию - "0") до длины len.<br />
<br />
====Функции перекодировки====<br />
DecodeStr(s, charset) - Производит перекодировку строки s в кодировку CP1251. Кодировка строки s должна быть заранее известна и может быть :<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866, UNICODE. Имя кодировки следует передавать в точности без лишних символов.<br />
<br />
EncodeStr(s, charset) - Производит перекодировку строки s в кодировку charset. Кодировка строки s должна быть CP1251, возможны следующие варианты перекодировки:<br />
KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866. Имя кодировки следует передавать в точности без лишних символов. UNICODE не работает с версии 2021, в ней строки по умолчанию в кодировке unicode.<br />
<br />
Функции EncodeBase64(s), DecodeBase64(s), UrlEncode(s), UTF8Encode(s), UTF8Decode(s), Str2UTF(s) - устарели, используйте EncodeStr, DecodeStr.<br />
<br />
====Транслитерация====<br />
<br />
Translit(s) - транслитерация строки русского текста s латиницей<br />
<br />
UnTranslit(s) - транслитерация строки s с латиницы на русский.<br />
<br />
==== Экранирование ====<br />
<br />
QUOTEDSTR(s) – квотирует строку s символом «\» (обратный слеш). Возвращает строку s, помещенную между символами одинарной кавычки, при этом все вхождения в строку s символов: «\», «"» и «'» экранируются квотирующим символом, а символы #0, #10 и #13 заменяются на \0, \n и \r соответственно.<br />
<br />
FormatTextXML(s) - квотирует строку s для использования в XML. Производит замены спец. символов для корректности XML-синтаксиса.<br />
<br />
FormatTextJSON(s) - переводит строку в формат JSON, экранирует служебные символы.<br />
<br />
====Хеширование ====<br />
<br />
HMACHash256(key, text) - создаёт хэш по алгоритму SHA256 для проверки целостности сообщения, key - секретный ключ, text - хэшируемое сообщение<br />
<br />
MD5Hash(text) - создаёт хеш по алгоритму MD5<br />
<br />
SignatureUrl(url) - Подписывает переданный URL. Функция возвратит переданный URL с добавленным в конце параметром, в котором будет записана подпись.<br />
<br />
=== Функции работы с датой и временем ===<br />
<br />
CurrTime – возвращает текущее время<br />
<br />
CurrDate – возвращает текущую дату<br />
<br />
CurrMillisecond - Возвращает количество миллисекунд прошедших с начала текущего года. Используется для точного расчета временных интервалов.<br />
<br />
Today - возвращает текущую дату в числовом формате.<br />
<br />
Day(dt) – возвращает день месяца даты dt.<br />
<br />
Month(dt) – возвращает месяц года даты dt.<br />
<br />
Year(dt) – возвращает год даты dt.<br />
<br />
DaysInMonth(month, year) – Возвращает количество дней в указанном месяце.<br />
<br />
IncDay(dt, [count=1]) – Возвращает дату, увеличенную на count дней.<br />
<br />
SQLDate(dt) – Пытается конвертировать dt в дату, вернуть в формате «'YYYY-MM-DD'» (с апострофами), если не удается – возвращает «NULL».<br />
<br />
SQLDateToDate(dt) – Переводит дату из SQL-формата в обычный.<br />
<br />
DAYSBETWEEN(dt1, dt2) – Возвращает количество дней между датами dt1 и dt2. В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimeBetween(t1, t2) - Возвращает количество минут между временем t1 и t2. Если t1 > t2 то будет показано количество минут между t2 и t1. Параметр t может быть как в формате "HH:MM", так и в числовом. Если один из параметров не удалось привести к числовому типу возвращает -1000.<br />
<br />
WorkDaysBetween(dt1, dt2, [DecreaseFirstDay=0]) - Возвращает количество рабочих дней между датами dt1 и dt2. Параметр DecreaseFirstDay уменьшает dt1 на указанное количество дней (по умолчанию 0). В случае ошибки приведения dt1 или dt2 к дате возвращает -1000.<br />
<br />
TimePeriod(time1, time2) - Оформляет временной период. Возвращаемое значение зависит от наличия значения в параметрах. Возможные варианты: "time1 - time2" , "С time1" , "ДО time2".<br />
<br />
StrDateToFloat(s, [time=false]) - Переводит строку с датой s в числовой тип. Если параметр time включен, то в строке s должно быть указано время. Дата должна быть в формате "DD.MM.YYYY", а время "HH:NN". Если строку перевести не удалось возвращает 0<br />
<br />
IsAWorkDay(dt) - Когда день dt является рабочим, возвращает true. Если произошла ошибка приведения даты возвращает -1000.<br />
<br />
IncWorkDay(dt, [count=1]) - Прибавляет count рабочих дней к дате dt. Возвращает дату в числовом формате, если произошла ошибка приведения даты возвращает -1000. По умолчанию параметр count равен 1 и не является обязательным.<br />
<br />
Sleep(n) - Задержка выполнения на n миллисекунд.<br />
<br />
=== Функции приведения типов ===<br />
<br />
INT(v) – возвращает значение типа “целое”, приводя вариантное значение v к числовому типу, а затем округляя его. В том числе используется как функция округления.<br />
<br />
FLOAT(v) – возвращает значение типа “число”, приводя вариантное значение v к числовому типу, переводя в число цепочку символов до первого нецифрового символа (либо точки или запятой).<br />
<br />
STR(v) – возвращает значение типа “строка”, приводя вариантное значение v к строковому типу.<br />
<br />
Date(v) – возвращает дату, либо пустую строку, если не удается конвертировать v в дату<br />
<br />
Time(v) – возвращает время, либо пустую строку, если не удается конвертировать v во время. Понимает числовое представление времени.<br />
<br />
=== Математические функции ===<br />
<br />
ROUNDUP(f) – округляет число f до ближайшего большего по модулю целого числа.<br />
<br />
ROUNDDN(f) – округляет число f до ближайшего меньшего по модулю целого числа.<br />
<br />
Money(f, CouldBeEmpty, ZeroFill, MakeSpace) - Округляет число f, до двух знаков после запятой. CouldBeEmpty - заменить число меньше 0,0001 на пустую строку. ZeroFill - Следить чтобы после запятой было два знака, если будет один, то добавить ноль. MakeSpace - Разделить разряды пробелом.<br />
<br />
''Подсказка: для простого округления используется функция int()''<br />
<br />
=== Константы ===<br />
<br />
<br />
Null – Возвращает пустое значение.<br />
<br />
Да, True, Нет, False – константы, соответствующие булевым значениям.<br />
<br />
<br />
=== Прочие функции ===<br />
<br />
SQLFloat(f) – Приводит число с плавающей точкой к виду, пригодному для SQL-запроса, т.е. к тексту с разделителем дробной части – точка.<br />
<br />
SetPhoneParams(CountryCode, TownCode) – Устанавливает глобальные настройки кода телефонных кодов страны и города соответственно. По-умолчанию код страны – 7, код города – 495.<br />
<br />
PhonesCount(s) – Возвращает количество корректных телефонных номеров, найденных в строке s.<br />
<br />
GetPhone(s[, n]) – Возвращает n-й корректный телефонный номер, найденный в строке s. Нумерация начинается с 1.<br />
<br />
GetEmail(s) – Возвращает все корректные адреса email, найденный в строке s, разделенные запятыми (т.е. готовыми к передаче в функцию SendEmail).<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY).<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject[, FileName]) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера (также к имени сервера можно добавить протокол ssl:// или tls://), порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
GenEan(ID, Code) – Формирует штрих-код EAN 13 Состоящий из идентификатора типа сущности ID и кода сущности Code, Выравнивает до 13-ти символов, первый – «2», последний – контрольная сума.<br />
<br />
CheckEan(s) - Проверяет строку s, что она является кодом EAN13.<br />
<br />
SaveToFile(FileName,s, encoding = '')- Создает текстовый файл по пути, указанному в FileName (если по указанному пути существует файл с указанным именем, он удаляется и создается новый) и производит запись строки s в созданный текстовый файл. encoding - название кодировки, по умолчанию сохраняет в кодировке ANSI. Доступные названия кодировок: KOI8-R, ISO-8859-5, UTF-8, URL, BASE64, QUOTED-PRINTABLE, CP866.<br />
<br />
StrFromFile(FileName) - Читает файл FileName, возвращает в виде строки. При ошибке чтения вызывает ошибку.<br />
<br />
DownloadAttachment(code, [savefilepath, tablename='attachment', fieldBlob='file', fieldLDtime='ldtime', fieldUID='uid']) - Функция выкачивает аттачмент из базы, по внутреннему коду - Code, всегда возвращает содержимое файла в виде строки, а также может сохранить файл по указанному пути в параметре savefilepath. По умолчанию, функция настроена на таблицу attachment. Code - внутренний код вложения, tablename - название таблицы, fieldBlob - название поля с содержимым файла, fieldLDtime - название поля с временем последнего изменения строки (для работы кэша). Функция использует кэш и умеет выкачивать файлы зауженные на внешние серверы (http, ftp, measoft). Для выкачивания с сервера measoft обязательно необходимо указывать параметр fieldUID.<br />
<br />
DeleteFile(FileName) - Удаляет файл FileName с диска, возвращает истину, если операция прошла успешно и ложь - в противном случае.<br />
<br />
HTTPPOST(host, PostParams, Proxy, ContentType, HTTPUser, HTTPPass, Method, CustomHeader, Reconnects) - Отправляет HTTP запрос по адресу host с данными PostParams. Proxy - объект Proxy, задающий прокси-сервер (по-умолчанию - пусто - не использовать прокси). ContentType - Заголовок ContentType. По-умолчанию - "application/x-www-form-urlencoded; Charset=UTF-8". HTTPUser и HTTPPass - данные для http-авторизации на сервере. Method - метод отправки запроса, по-умолчанию - "POST". CustomHeader - дополнение к заголовку, передается в виде списка параметров через запятую: 1 параметр - добавляет в заголовок SOAPAction, 2 параметр - Authorization. Reconnects - Количество попыток подключения (по-умолчанию - 2), если больше 100 - это таймаут единственной попытки подключения в милисекундах.<br />
Функция возвращает ответ сервера. <br><br />
''Обратите внимание:'' Для имитации отправки данных html-формы методом POST может понадобиться перед передаваемыми параметрами добавить "Data=".<br />
<br />
FTPPUT(host, User, Pass, FileName[, Active]) - Отправляет файл на FTP/SFTP-сервер. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
FTPGET(host, User, Pass, SourceFileName, DestFileName[, Active]) - Загружает файл SourceFileName с FTP/SFTP-сервера, сохраняет его в файл DestFileName. Параметр Host может иметь в себе путь к папке. По-умолчанию работает в пассивном режиме.<br />
<br />
GetTempDir - Возвращает путь к временной папке.<br />
<br />
ApplicationDir - Возвращает путь к файлу программы.<br />
<br />
Interpretate(script) - Интерпретирует скрипт указанный в script. Выполнение происходит в текущем инстансе.<br />
<br />
== Объект TExcel ==<br />
<br />
Предназначен для доступа к данным документов MS Excel. Требует установленного приложения MS Excel.<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
SetFileName(aFileName) – Задает значение свойства FileName.<br />
<br />
Open - Открывает файл с именем, заданным свойством FileName. Если имя файла не задано - создает чистую книгу.<br />
<br />
OpenFile(aFileName) – Выполняет функции SetFileName и Open. <br />
<br />
LoadFromDB(DB[, Headered=true][, Col=1][, Row=1]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Если Headered истинно (по-умолчанию), таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются.<br />
<br />
MyDB.Open('select * from kurier');<br />
xl.LoadFromDB(MyDB.Self);<br />
xl.DoNotDestroy(true);<br />
xl.SetVisible(true);<br />
<br />
Post2Sheet(DB[, Headered=true][, Col=1][, Row=1]) - Почти полный аналог LoadFromDB. В отличии от LoadFromDB если есть открытый файл, выгрузка данных будет выполнена прямо в него.<br />
<br />
Align(x1, y1, x2, y2 [,HAlign, VAlign]) - Устанавливает выравнивание данных в указанном диапазоне. HAlign - горизонтальное выравнивание (0 – прижато влево, 1 – вправо, 2 – по центру), VAlign - Вертикальное выравнивание.<br />
<br />
SetBorders(x1, y1, x2, y2) – Устанавливает границы прямоугольника. Если координаты опущены, или 0 – устанавливает границы всей используемой области.<br />
<br />
DoNotDestroy(b) – При уничтожении объекта TExcel (а он уничтожается, как и все остальные объекты автоматически при завершении выполнения скрипта), приложение Excel уничтожается вместе с ним. DoNotDestroy(true) отключает уничтожение приложения.<br />
<br />
SetVisible(b) – Устанавливает видимость приложения Excel для пользователя. По-умолчанию – false (не видимо).<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
Cell(x, y, text) – Возвращает значение ячейки, заданной координатами x, y. Необязательный булевый параметр text, в случае истинности, указывает на необходимость возврата данных с учетом формата ячейки, т.е. то, что пользователь видит на экране. Обратите внимание, что если в ячейке число, и ширина столбца не достаточна для отображения, Excel выводит "#####", что и будет возвращено программе, если text=ИСТИНА. Поэтому перед таким использованием рекомендуется выполнить функцию AutoFit.<br />
<br />
SetCell(x, y, v[, x2, y2]) – Устанавливает значение ячейки, заданной координатами x и y, в значение v. Если заданы параметры x2, y2 - объединяет (merge) диапазон ячеек заданных координатами, устанавливает значение объединенной ячейки.<br />
<br />
SetSheet(No) – Устанавливает номер текущего листа.<br />
<br />
SetSheetName(Name) - Устанавливает название текущего листа.<br />
<br />
Close – Закрывает текущий файл.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
ColCount - Возвращает количество столбцов в листе.<br />
<br />
SheetsCount – Возвращает количество листов в книге.<br />
<br />
AutoFit – Устанавливает автоматическую ширину столбцов.<br />
<br />
RowAutoFit - Устанавливает автоматическую высоту строк.<br />
<br />
RowInsert(i[, count]) - Вставляет count (по-умолчанию - 1) строк НАД строкой с номером i.<br />
<br />
RowDelete(i[, count]) - Удаляет count (по-умолчанию - 1) строк начиная с номера i.<br />
<br />
SheetDelete(i) - Удаляет лист с номером i.<br />
<br />
SetRowHeight(r, h[, cnt]) – Устанавливает высоту cnt строк (по-умолчанию 1) начиная со строки r в h пикселей.<br />
<br />
SetColWidth (c, w) – Устанавливает ширину столбца c в w символов.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки. Функция закрывает текущий файл, и не может использоваться для файлов, закрытие которых запрещено.<br />
<br />
SetRowFontColor(Row,Color) - Устанавливает цвет шрифта в строке Row. Color - целое значение (RGB)<br />
<br />
SetRowColor(Row,Color) - Устанавливает цвет фона в строке Row. Color - целое значение (RGB)<br />
<br />
SetColumnFontColor(Col,Color) - Устанавливает цвет шрифта в столбце Col. Color - целое значение (RGB) <br />
<br />
SetColumnColor(Col,Color) - Устанавливает цвет фона в столбце Col. Color - целое значение (RGB)<br />
<br />
SetCellFontColor(Row,Col,Color) - Устанавливает цвет шрифта в ячейке с координатами [Row,Col]. Color - целое значение, равное номеру цвета в палитре (ColorIndex,не RGB)<br />
<br />
SetCellColor(Row,Col,Color) - Устанавливает цвет фона в ячейке с координатами [Row,Col]. Color - целое значение (RGB)<br />
<br />
GetRowFontColor(Row)- Возвращает RGB значение цвета шрифта строки Row<br />
<br />
GetRowColor(Row)- Возвращает RGB значение цвета фона строки Row<br />
<br />
GetColumnFontColor(Col)- Возвращает RGB значение цвета шрифта столбца Col<br />
<br />
GetColumnColor(Col)- Возвращает RGB значение цвета фона столбца Col <br />
<br />
GetCellFontColor(Row,Col) - Возвращает номер цвета шрифта в палитре (ColorIndex) в ячейке с координатами [Row,Col]<br />
<br />
GetCellColor(Row,Col) - Возвращает RGB значение цвета фона в ячейке с координатами [Row,Col]<br />
<br />
WrapText(x1, y1, x2, y2, value) – Устанавливает перенос текста прямоугольника в значение value. Если координаты опущены, или 0 – устанавливает границы всей используемой области. Для Value значение по-умолчанию - true.<br />
<br />
SetOrientation(value) - Устанавливает ориентацию страницы. True (по-умолчанию) - альбомная (ландшафтная), Ложь - портретная.<br />
<br />
Copy(x1, y1, x2, y2) - Копирует в буфер экселя<br />
<br />
Cut(x1, y1, x2, y2) - Вырезает в буфер экселя<br />
<br />
Paste(x1, y1) - Вставляет из буфера экселя. Команды copy-paste неразрывны, если что нибудь сделать в промежутке между ними, например вставить значение в ячейку, то копирование сброситься. (Последовательность использования: copy - paste, cut - paste)<br />
<br />
PasteStyle(x1, x2, y1, y2) - Вставляет только оформление из буфера экселя (Последовательность использования: Copy - PasteStyle)<br />
<br />
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 будет поменяется только начертание курсив и будет отменено подчеркивание (если оно было). <br />
<br />
InsertPicture(TPicture, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет рисунок на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
InsertFirmLogo(FirmCode, [x=1, y=1, DispX=0, DispY=0]) - Функция вставляет логотип фирмы с кодом FirmCode на текущий активный лист. x, y - координаты ячейки, относительно которых размещается рисунок, DispX, DispY - смещение рисунка относительно верхнего левого угла этой ячейки.<br />
<br />
SheetFitPageWidth - устанавливает режим масштабирования печати, чтобы печатная форма помещалась в ширину на один лист.<br />
<br />
PrintOut([copies]) - Печатает текущий лист на принтере по умолчанию. Параметр, copies - количество копий, по умолчанию равен 1.<br />
<br />
CopySheetAfter([SheetFrom[, SheetAfter]]) - Копирует лист SheetFrom (по-умолчанию - текущий), создавая новый лист после листа SheetAfter (по-умолчанию - совпадает с копируемым).<br />
<br />
Save(filename) - Сохраняет в файл filename. Если файл существует, в - основной системе он будет перезаписан, в других проектах - вызовет ошибку "Файл уже существует".<br />
<br />
Пример использования:<br />
<br />
new('TExcel', 'myxl');<br />
myxl.OpenFile('c:\asdf.xlsx');<br />
set($sum, 0);<br />
while (myxl.EOF=0, <br />
set($sum, $sum+int(myxl.c));<br />
myxl.next );<br />
$sum<br />
<br />
''Возвращает сумму всех числовых данных столбца C файла 'c:\asdf.xlsx'''<br />
<br />
== Объект TDirectExcel ==<br />
Объект позволяет работать с файлами Excel напрямую, без установленного пакета MsOffice. Применяется в сервисах и при отсутствии экселя. Он максимально совместим с объектом TExcel, однако некоторые методы могут быть не реализованы. <br />
<br />
== Объект TCSVFile ==<br />
Предназначен для доступа к данным документов CSV. Разделителем столбцов является символ точка с запятой ;<br />
<br />
Функции:<br />
<br />
FileName – Возвращает имя текущего файла.<br />
<br />
OpenFile(FileName) – Открывает файл FileName.<br />
<br />
LoadFromDB(DB[, Headered=false]) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO.<br />
<br />
LoadFromText(s) - Загружает таблицу из строки s.<br />
<br />
RecNo – Возвращает номер текущей строки. Нумерация строк начинается с 1.<br />
<br />
SetRecNo(aRecNo) – Устанавливает значение свойства RecNo.<br />
<br />
A..ZZ – Возвращает значение соответствующего поля текущей строки. Может вызываться с целочисленным аргументом, указывающим на сдвиг относительно текущей строки. Например: AC(-1) – вернет значение столбца AC предыдущей строки. Если номер строки окажется вне допустимых значений вернет пустую строку.<br />
<br />
First – Делает первую запись листа текущей.<br />
<br />
Next – Увеличивает значение свойства RecNo на единицу в случае, если конец файла не достигнут. Иначе – выставляет свойство EOF в истину.<br />
<br />
EOF – Возвращает признак достижения конца файла.<br />
<br />
RecordCount – Возвращает количество строк в листе.<br />
<br />
SendEmail(Server, Port, User, Pass, AddressFrom, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). <br />
<br />
SendEmail(EmailFromStr, AddressTo, MsgText, Subject) – Отправляет письмо по e-mail с указанными параметрами. В случае ошибки отправки вызывает ошибку (рекомендуется использовать совместно с TRY). EmailFromStr – строка, содержащая данные для отправки письма – адрес SMTP-сервера, порт, логин, пароль и email отправителя, разделенные символом переноса строки.<br />
<br />
SaveToFile(Filename) - Сохраняет в файл с именем filename.<br />
<br />
== Объект TADO ==<br />
<br />
Предназначен для доступа к базам данных.<br />
<br />
Функции:<br />
{|<br />
!Функция<br />
!Описание<br />
|-<br />
|Connect(ConnectionString)<br />
|Подключает к источнику данных. ConnectionString – Строка подключения ADO.<br />
|-<br />
|ConnectMySQL(DBServer, DBPort, DBUser, DBPass, DBName)<br />
|Подключает к базе данных MySQL.<br />
|-<br />
|Open(Query)<br />
|Открывает набор данных выполнив запрос Query.<br />
|-<br />
|FieldByNo(i)<br />
|Возвращает значение поля с номером i. Нумерация полей – с нуля.<br />
|-<br />
|FieldName(i)<br />
|Возвращает имя поля с номером i.<br />
|-<br />
|FieldCount<br />
|Возвращает количество полей.<br />
|-<br />
|RecordCount<br />
|Возвращает количество записей.<br />
|-<br />
|RecNo<br />
|Возвращает номер текущей записи. ''ВНИМАНИЕ! В зависимости от способа подключения к БД нумерация может начинаться как с 0 так и с 1!''<br />
|-<br />
|EOF<br />
|Возвращает признак достижения конца набора данных. Становится истиной когда выполняется команда Next на последней записи.<br />
|-<br />
|Next<br />
|Переход на следующую запись набора.<br />
|-<br />
|First<br />
|Переход на первую запись набора.<br />
|-<br />
|Last<br />
|Переход на последнюю запись набора.<br />
|-<br />
|FieldByName(FieldName)<br />
|Возвращает значение поля по имени. Также возможно указание имени поля как свойства объекта.<br />
|-<br />
|Field(Table, ID, FieldName)<br />
|Возвращает значение поля FieldName записи с кодом ID таблицы Table. Набор данных, если он открыт, при этом не закрывается. Первичный ключ таблицы должен называться «code». Гарантированно работает только с MYSQL!!!<br />
|-<br />
|GetSQLValue(Query)<br />
|Выполняет SQL-запрос. Текст запроса должен начинаться с первого символа строки (перед запросом не должно быть пробелов, переносов строк, комментариев и т.д.). Если запрос Insert – возвращает ID вставленной записи. Если запрос – Update, Delete, Replace, Set, Start, Commit, Rollback – возвращает количество измененных записей (RowsAffected), иначе – Select – значение первого поля первой строки результата как текст.<br />
|-<br />
|FillText(s)<br />
|Возвращает строку s с замененными названиями полей между знаками процента на соответствующие значения текущей записи. Так же в строке возможно использование интерпретируемого кода, заключенного между тегами "<?>" и ">". При интерпретации система сначала производит замену полей с процентами на значения, потом интерпретирует код. ''Внимание! Функция не создает отельный контекст интерпретатора, а использует существующий, в нем доступны все объекты и переменные, вызывающего скрипта.'' Дополнительно автоматически создается объект TSelfADO, подключенный к той же БД, что и контекст, вызвавший функцию, с пустым именем, а так же с именем "dataset".<br />
|-<br />
|Query(Query)<br />
|Синоним GetSQLValue.<br />
|-<br />
|Close<br />
|Закрывает набор данных.<br />
|-<br />
|Self<br />
|Возвращает указатель на подключение к БД для использования в других объектах.<br />
|-<br />
|ParseForIn([FieldName='code']) <br />
|Возвращает через запятую значения всех строк в указанном столбце. По умолчанию, используется столбец с именем code.<br />
|}<br />
<br />
Пример использования – см. TSelfADO<br />
<br />
== Объект TSelfADO ==<br />
<br />
<br />
Наследник объекта TADO. Служит для подключения к «родной» для программы, в которой выполняется скрипт, базе данных. Обладает всеми свойствами и методами объекта TADO, кроме Connect. Иногда автоматически создается системой для обеспечения простого доступа к базе данных, а также иногда создается системой с уже открытым набором данных для передачи обрабатываемого системой набора данных в скрипт. В этом случае для скрипта недоступны функции Open и Close.<br />
<br />
<br />
Пример использования:<br />
<br />
rem('Копируем данные из "родной" базы данных в базу MSSQL.');<br />
new('TSelfADO', 'MyDB');<br />
new('TADO', 'MSSQL');<br />
MSSQL.Connect('Provider=SQLOLEDB.1;Password=myPassword;Persist Security Info=True;User ID=myUsername;Initial Catalog=myDataBase;Data Source=myServerAddress');<br />
MyDB.Open('select code, name, passport from kurier where code>'+Int(MSSQL.Query('select max(code) from kurier'))+' order by code');<br />
While(MyDB.EOF=0,<br />
MSSQL.Query('insert kurier (code, name, passport) VALUES ('+MyDB.Code+', '+QuotedStr(MyDB.Name)+', '+QuotedStr(MyDB.Passport)+')');<br />
MyDB.Next;<br />
);<br />
<br />
== Объект TPrinter ==<br />
<br />
<br />
Предназначен для доступа к принтерам.<br />
<br />
Функции:<br />
<br />
BeginDoc – Начинает новый документ.<br />
<br />
EndDoc – Закрывает документ<br />
<br />
PageHeight – Возвращает высоту страницы в пикселях<br />
<br />
PageWidth – Возвращает ширину страницы в пикселях<br />
<br />
PageNumber – Возвращает номер текущей страницы документа<br />
<br />
Orientation – Возвращает текущую ориентацию страницы (0 – портретная, 1 – ландшафтная)<br />
<br />
Printing – Возвращает истину если документ открыт<br />
<br />
SetOrientation(Orientation) – Устанавливает ориентацию страницы. При необходимости начинает новый документ, новую страницу.<br />
<br />
ShowDialog – Показывает пользовательский диалог печати. Возвращает истину, если пользователь нажал "OK".<br />
<br />
NewPage – Начинает новую страницу<br />
<br />
Canvas – Предоставляет доступ к объекту TCanvas, связанному с принтером.<br />
<br />
PrinterNames – Возвращает список принтеров, установленных в системе, разделенный переносами строк<br />
<br />
PrintersCount – Возвращает количество установленных в системе принтеров<br />
<br />
SetPrinter(Printer) – Устанавливает текущий принтер. Если передана строка – ищет принтер по названию, иначе – по номеру. Нумерация начинается с 0.<br />
<br />
PrintTable(Y, Table) – Выводит на печать таблицу Table типа TTable, начиная с координаты Y. При необходимости таблица печатается на нескольких страницах. Возвращает координату Y конца таблицы.<br />
<br />
== Объект TCanvas ==<br />
<br />
<br />
Предоставляет доступ к холсту объекта для прорисовки изображения.<br />
<br />
Функции:<br />
<br />
DPIX – Возвращает разрешение холста по горизонтали в точках на дюйм<br />
<br />
DPIY – Возвращает разрешение холста по вертикали в точках на дюйм<br />
<br />
TextOut(x, y, s[, x1, y1, x2, y2]) – Выводит строку s начиная с точки с координатами x и y. Если указаны параметры x1, y1, x2, y2 – то выводимый текст ограничивается заданным прямоугольником.<br />
<br />
TextOutEx(x1, y1, x2, y2, Alignment, Font, s, Indent) – Выводит строку s в прямоугольнике с координатами x1, y1, x2, y2. По горизонтали строка выравнивается в соответствии с Alignment (0 – прижато влево, 1 – вправо, 2 – по центру), по вертикали выравнивается по центру. Используя шрифт Font (см описание ниже). Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату X фактического окончания текста (правой стороны – если строка прижата влево, и левой – в остальных случаях)<br />
<br />
MLTextOut(x1, y1, x2, y2, Alignment, VAlignment, Font, s, Heigth, Indent) – Выводит многострочный текст s в прямоугольнике с координатами x1, y1, x2, y2 с переносом по словам. По горизонтали строки выравниваются в соответствии с Alignment, по вертикали – в соответствии с VAlignment (0 – прижато вверх, 1 – по центру, 2 – прижато вниз). Используя шрифт Font (см описание ниже). Heigth – высота строки. Если опущено или равно нулю – высота определяется автоматически в соответствии с выбранным шрифтом. Indent – отступ по горизонтали, расстояние в пикселях между границей прямоугольника и текстом. Функция возвращает координату Y фактического окончания текста (нижней границы последней строки текста. ''ВНИМАНИЕ! Функция использует координаты прямоугольника для позиционирования текста, однако она не ограничивает его верхней и нижней границами этого прямоугольника!''<br />
<br />
DrawPic(x1, y1, x2, y2, Pic, Style, Alignment, Mode) – Прорисовывает изображение Pic (ссылка на изображение TPicture.Self) в прямоугольник заданный координатами x1-y2. Style – стиль масштабирования. 0 – растянуть изображение до границ прямоугольника не сохраняя пропорции, 1 – вписать изображение в прямоугольник сохраняя пропорции – вероятно, останутся поля по вертикали или горизонтали, 2 – вписать сохраняя пропорции, обрезав при необходимости изображение по вертикали или горизонтали. Alignment – выравнивание по горизонтали. Работает только в случае если style=1 и при растягивании изображения получились вертикальные поля. 0 – разместить по центру, 1 – прижать влево, 2 – прижать вправо. Функция возвращает координату X правой стороны изображения кроме случая, когда Style=1 и Alignment=2 – в этом случае возвращается координата левой стороны изображения. Mode - способ наложения изображения. 0 (по-умолчанию) - копирование как есть. 1 - Наложение операцией AND (применяется для получения эффекта прозрачности изображения), 2 - наложение операцией XOR (Применяется для возможности повторной операцией убрать изображение), 3 - Наложение операцией OR.<br />
<br />
FillRect(x1, y1, x2, y2) – Рисует прямоугольник '''без границ''' и закрашивает цветом BrashColor<br />
<br />
Rect(x1, y1, x2, y2) – Рисует прямоугольник '''c границами''', задаваемыми текущим пером, и закрашивает цветом BrashColor <br />
<br />
SetFont(Font) – Устанавливает шрифт по-умолчанию.<br />
<br />
SetPen(Width, Color) - Устанавливает параметры "ручки" - толщину и цвет. Если любой параметр опустить, соответствующее значение не будет изменено.<br />
<br />
SetBrush(Color, Style) - Устанавливает параметры заливки - цвет и стиль. Если любой параметр опустить, соответствующее значение не будет изменено. Стили заливки: 0 - сплошная, 1 - отсутствует (прозрачная), 2-7 - различные виды штриховки (горизонтальные, вертикальные, в клеточку и т.д.).<br />
<br />
TextHeight(s) – Возвращает высоту текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
TextWidth(s) – Возвращает ширину текста s в пикселях без учета многострочности, с учетом текущего шрифта.<br />
<br />
<br />
<br />
<br />
<br />
Использование шрифта (Font): У объекта TCanvas есть «глобальные» установки шрифта. Однако для некоторых функций возможно указание шрифта, отличающегося от глобального. Параметры шрифта – это текстовая строка, состоящая из 6-ти параметров, разделенных запятыми: Название, размер, жирный, курсив, подчеркнутый, цвет. Например:<br />
<br />
'Times New Roman, 8, Y, N, N, 255'<br />
<br />
Любой параметр можно опустить, и тогда вместо него будет использовано значение по-умолчанию: шрифт: arial, размер – 10, не жирный, не курсив, не подчеркнутый, цвет – черный. Например: ', 7' – указывает, что по-умолчанию нужно взять все параметры кроме размера шрифта. Также можно вместо всей строки указать тире ('-') или пустую строку, и шрифт будет использоваться «глобальный».<br />
<br />
== Объект TPicture ==<br />
<br />
Предоставляет функции для работы с графическими изображениями форматов BMP, GIF, JPEG и PNG, а также для формирования штрих-кодов. Обратите внимание, прозрачность изображений не поддерживается, однако в методе TCanvas.DrawPic есть параметр Mode, призванный создавать эффект прозрачности.<br />
<br />
Функции:<br />
<br />
LoadFromFile(FileName) – Загружает изображение из файла FileName. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromDB(DB, Query) – Загружает изображение из базы данных. DB – ссылка на подключение к базе данных TADO.Self, Query – текст запроса. Запрос должен вернуть в первом поле первой строки BLOB-поле с изображением, все остальные данные возвращаемые запросом игнорируются. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
LoadFromStr($s) – Загружает изображение из строки $s. Возвращает истину, если операция прошла успешно, иначе – ложь.<br />
<br />
CreateBar(Width, Height, BarCode, Textless, Type) – Формирует штрих-код шириной Width и высотой Height с типом кодирования Type. BarCode – текст штрих-кода. Булево значение Textless указывает, что в штрих-коде не должно быть человеко-читаемых символов если истинно. Type указывает тип кодирования: 0 (по-умолчанию) CODE128, 1 - EAN-13, 2 - Interleaved 2-5, 3-DataMatrix, 4-QRCode.<br />
Штрихкод должен быть: Для EAN-13 цифровым 12 или 13 символов (13-й, контрольная сумма рассчитывается автоматически), для CODE128 - должен иметь состоять из допустимого для этого кодирования набора символов. Для Interleaved - должен состоять из четного числа цифр, контрольная сумма автоматически не рассчитывается. Если для Interleaved кода указано значение из 14-ти знаков, подпись цифр выводится в формате Почты России.<br />
Внимание! Для кодов EAN-13 и Interleaved ширина штрих-кода Width не является точным значением получаемого на выходе изображения. Ширина изображения рассчитывается как максимальное кратное минимально возможной ширине, но не меньше минимально возможной. Конечную ширину можно получить в соответствующем свойстве объекта. Для кода CODE128 штрих-код на выходе может оказаться пустым, если указанной ширины штрих-кода не достаточно для его формирования.<br />
Функция возвращает 1 в случае успеха, или текст ошибки, если такая произошла.<br />
<br />
SetSize(Width, Height) - Устанавливает размер изображения.<br />
<br />
AsString([ImageFormat]) - Возвращает изображение в виде строки с двоичными данными. ImageFormat принимает значения 1 - Bitmap (по-умолчанию), 2 - jpeg, 3 - png, 4 - gif.<br />
<br />
Width – Возвращает ширину изображения.<br />
<br />
Height – Возвращает высоту изображения.<br />
<br />
Rotate(Angle) – Поворачивает изображение по часовой стрелке на угол Angle. Угол указывается в градусах и может принимать любые значения.<br />
<br />
Self – Ссылка на объект с изображением, используется в качестве параметра для функций, работающих с изображениями из данного объекта.<br />
<br />
Canvas - ссылка на объект TCanvas холста изображения.<br />
<br />
== Объект TTable ==<br />
<br />
Предоставляет функции для работы с таблицами. Удобен для печати таблицы на принтере. Алгоритм таков: Загружаем датасет в таблицу, настраиваем ее (шрифты, штрих-коды и т.д.), потом выводим на принтер функцией TPrinter.PrintTable.<br />
<br />
Функции:<br />
<br />
LoadFromDB(DB) – Загружает таблицу из набора данных, открытого в объекте DB типа TADO. Таблица загружается вместе с заголовками. Если название поля содержит подстроку «_RecNo» - данная подстрока не попадет в заголовок, а все значения поля будут заменены на порядковый номер записи в наборе данных, начиная с «1». В одной таблице допускается не более одного поля с порядковой нумерацией. Поля, названия которых начинаются в символа "-" не выгружаются. Заголовок – это первая строка таблицы.<br />
<br />
Cell(С, R) – Возвращает значение ячейки таблицы с координатами (C, R). Нумерация строк и столбцов начинается с 1.<br />
<br />
SetCell(С, R, Value) – Устанавливает значение ячейки таблицы с координатами (C, R) в Value. Нумерация строк и столбцов начинается с 1.<br />
<br />
RowCount – Возвращает количество строк в таблице.<br />
<br />
ColCount – Возвращает количество столбцов в таблице.<br />
<br />
SetTitleFont(Font) – Задает шрифт заголовка таблицы (первой строки).<br />
<br />
SetFont(Font) – Задает шрифт всей таблицы кроме заголовка.<br />
<br />
SetColFont(C, Font) - Устанавливает шрифт столбца C.<br />
<br />
SetIndent(Indent) – Задает отступ от границы ячейки до текста в процентах от ширины страницы. По-умолчанию значение 0.3<br />
<br />
SetWidth(С, Width) – Задает значение ширины столбца C в процентах от ширины страницы.<br />
<br />
SetMinRowHeght (Heght) – Задает значение минимальной высоты строки в пикселях. <br />
<br />
SetBarCode(Col, Type) - Указывает, что данные из столбца Col должны печататься в виде штрих-кода. Тип штрих-кода - Type. Значение '''"1" - EAN13'''. Для кода EAN13 первая строка данных в ячейке должна иметь вид "тип штрих-кода, номер", например "7, 123" (без кавычек, конечно). В этом случае система сформирует штрих-код: "2700000001233". Первая цифра - всегда 2, далее - указанный тип штрих-кода, нули, чтобы получилось 13 символов, номер, указанный в таблице, и один символ - контрольная сумма. Значение '''"2" - CODE128''' (с версии 734). Данные из первой строки ячейки таблицы печатаются в штрих-коде "как есть". Для всех видов штрих-кода (с версии 734) последующие строки печатаются под штрих-кодом в виде текста.<br />
<br />
SetMultiHeader(Active) - Включает печать заголовка при переносе таблицы на несколько страниц. По умолчанию отключено.<br />
<br />
SetCustomHeader(script) - Включает печать пользовательского заголовка. Script - это код интерпретатора, который должен печатать заголовок на канву. Печать таблицы может происходить на нескольких листах, по этому скрипт будет вызван для каждого листа. При использовании этого метода, автоматически инициализируются переменные: $TablePageNo - номер страницы, нумерация начинается с нуля; $TableY - координата по оси Y, от которой рисуется заголовок. Чтобы таблица была под заголовком необходимо значение переменной $TableY увеличить на высоту заголовка.<br />
<br />
Self – Ссылка на объект с таблицей, используется в качестве параметра для функций, работающих с таблицами из данного объекта.<br />
<br />
Пример:<br />
<?><br />
NEW('TPrinter', 'Prn');<br />
If(prn.ShowDialog,<br />
NEW('TTable', 'Tbl'); <br />
NEW('TSelfADO', 'MyDB'); <br />
MyDB.Open('SELECT concat("7", ", ", a.code, "\r\n", a.client_id, "\r\n", a.zakaz, "-", a.number) as "Штрих-код", a.target AS "Заказик", address, phone, vlog, poruch FROM address a order by code desc limit 10');<br />
Tbl.LoadFromDB(MyDB.Self); <br />
Tbl.SetBarcode(1, 1);<br />
Tbl.SetCustomHeader( <br />
if($TablePageNo>0,<br />
Prn.Canvas.TextOut(Prn.Canvas.DPIX*0.1, $TableY, 'Продолжение таблицы');<br />
set($TableY, $TableY + Prn.Canvas.TextHeight('H'));<br />
,0)<br />
);<br />
Prn.BeginDoc; <br />
Prn.PrintTable(0, Tbl.Self); <br />
Prn.EndDoc<br />
, );<br />
<br />
== Объект TBaseUtils ==<br />
<br />
Предоставляет функции, базирующиеся на БД системы «Курьерская служба 2008». По-умолчанию, при создании подключается к основной базе данных модуля, в котором выполняется скрипт, если такая определена контекстом, однако это можно изменить, см SetConnection.<br />
<br />
Функции:<br />
<br />
'''MakeAddress(s[,town])''' – возвращает значение, полученное путем преобразований адреса s для приведения его к внутреннему формату программы. В процессе преобразования до нескольких раз происходит замена буквосочетаний по таблице замены (ее редактирование доступно по нажатию кнопки «Автозамена» в интерфейсе импорта БД из Excel системы (см. Руководство пользователя)), поиск улиц по базе КЛАДР с точностью до одного знака, и некоторые другие операции, нацеленные на исправление ошибок в написании адреса.<br />
<br />
С версии программы 2008.0.0.615, при вызове функции в формулах загрузки реестра, в первую очередь происходит проверка строки s на условия:<br />
* в строке s записано число; <br />
* строка s начинается с "ПВЗ ". <br />
Если одно из этих условий выполняется, то функция пытается установить пункт самовывоза - т.е она сама в загружаемой карточке корреспонденции укажет: адрес ПВЗ, город ПВЗ и установит галку самовывоз. <br/>Правила поиска ПВЗ:<br />
* Если s число - считаем его внутренним кодом филиала;<br />
* Если s начинается с "ПВЗ " - Например в адресе передана строка "ПВЗ На Ленинском проспекте", то искать будем филиал с названием "На Ленинском проспекте" который подчиненный, активный, с галкой ПВЗ и в городе town. Если город не указан, то ищем филиал во всех городах, и считаем его найденным если найдем только один филиал. <br />
* Если филиалы найти не удалось, функция makeaddress работает как обычно и выполняет преобразование адреса.<br />
<br />
Если адрес не содержит русских букв, только латиница, и курьерская служба находится в одной из стран Россия, Белоруссия, Казахстан или Украина, и город-получатель (второй параметр, town) находится так же в одной из этих стран, функция автоматически делает транслитерацию адреса на русский язык.<br />
<br />
<br />
''SetConnection(DB) – Подключает объект к базе данных DB, где DB – ссылка на объект TADO.Self.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
''SetTown(Town) – Устанавливает код текущего города (используется в некоторых функциях объекта) в значение Town. По-умолчанию текущий город – 1.'' '''ВРЕМЕННО НЕ РАБОТАЕТ!'''<br />
<br />
'''SetIndexLength(Length)''' – Устанавливает длину почтового индекса. По-умолчанию – 6.<br />
<br />
'''GetIndex(Address)''' – Возвращает почтовый индекс из адреса.<br />
<br />
'''GetStreet(Address)''' - Возвращает улицу до первой запятой.<br />
<br />
'''GetHome(Address)''' - Возвращает номер дома до второй запятой, но не более пяти символов.<br />
<br />
'''GetKurierByStation(station, Mass, Cash, Date_Putn)'''<br />
<br />
'''TownByIndex(Index[, PriorityName])''' – Возвращает код города по индексу. В случае ошибки поиска – код текущего города. Если нашлось несколько населенных пунктов, и указано приоритетное название - выбирается населенный пункт, название которого начинается с PriorityName (если есть).<br />
<br />
'''TownByName(Name[,NotNeedCL=False, City=0])''' – Возвращает код города по имени. В случае ошибки поиска – возвратит код текущего города. Если параметр NotNeedCL (параметр не обязательный) установить в TRUE, тогда функция возвратит 0, если город не удалось найти. Параметр City (код региона) позволяет ограничить поиск одной областью (не обязательный, по умолчанию не используется).<br />
<br />
'''FillClientInfo(Excel, client, Sheet, Row, Col)''' – Выводит в эксель информацию о клиенте с кодом client на лист sheet начиная со строки row и столбца col.<br />
<br />
'''SavePrintFormToFile(FormType, FormNumber)''' - Сохраняет на диске файл печатной формы и возвращает путь к нему<br />
<br />
'''CreateTrans(Address[, Store][, Operator])''' - Формирует запись для печати кассового чека для корреспонденции с кодом Address, для выбора кассового аппарата используется код склада Store. Если Store не указано - при исполнении в среде клиентского модуля системы использует склад, указанный пользователем в окне [[Настройка параметров рабочего места|"Настройка" - "Параметры"]], в остальных модулях - код текущего склада из [[Настройка глобальных параметров|переменной]] "CL" ("Текущий филиал"). Поле Operator позволяет указать кассира (передается код справочника сотрудников). Если не указан, в основной системе будет использован код авторизованного пользователя, в других модулях - 1. Возвращает идентификаторы записей чеков. Может вернуть пустую строку, если чек создавать не понадобилось, один или несколько кодов через запятую, если создано несколько чеков. В случае ошибки вызывает ошибку, поэтому рекомендуется использовать с функцией Try.<br />
<br />
'''CreateReturnTrans(Address)''' - формирует запись для печати чека возврата для корреспонденции с кодом Address. Чек возврата печатается на полную сумму и с теми же атрибутами, что и чек продажи. Возвращает идентификатор записи чека возврата. В случае ошибки вызывает ошибку, поэтому, как и с CreateTrans, рекомендуется использовать с функцией Try.<br />
<br />
'''CalcTownDeliveryDays(Source, Mode, TownTo, TownFrom)''' - возвращает количество дней необходимых на доставку отправления, только для межгорода. Source - код клиента, Mode - режим срочности, TownFrom - код города отправителя, TownTo - код города получателя.<br />
<br />
'''CalcDeliveryDate(Source, Mode, TownTo, TownFrom, Date_Beg, Time_beg)''' - Возвращает планируемую дату доставки с учетом сроков доставки. Работает при городской и междугородней доставке. Для межгорода сроки доставки берутся из зон. Для городской доставки, из дополнительных параметров статуса (17 статус, 1 параметр в доп. информации) Если рассчитать дату планируемой доставки не удалось, возвращает пустую строку. Параметры: Source - код клиента, Mode - режим срочности, TownTo - город получатель, TownFrom - город отправитель, date_beg - дата заказа (может быть передана строкой в формате DD.MM.YYYY или в числовом), time_beg - время заказа. <br />
<br />
'''GenSpecialSMA(DirectExcel, Code)''' - функция для генерации отчета о доставке по акту передачи денег. Первый параметр - указатель на TDirectExcel, второй параметр - код акта передачи денег. АПД выводится на текущий лист объекта TDirectExcel.<br />
<br />
'''CreateSpecialSMA(ClientCode, DateTo)''' - Функция создает исходящий акт передачи денег (АПД). Требует ClientCode - код клиента, DateTo - дату акта. Функция возвращает коды созданных актов. Если возвращаемых параметров два, значит функция пыталась создать два АПД: первым, идет код АПД с наличной оплатой, а вторым с безналичной. Примеры возвращаемого результата: '0'- акт не был создан, отсутствуют корреспонденции; '124' - код созданного акта; '0,0' - пытались создать два акта, но отсутствуют данные; '4556,0' - создан только наличный АПД; '0,445' - создан только безнал.; '4556,445' - созданы нал. и безнал.<br />
<br />
'''CreateAddressForActDelivery(ActCode, [Delivery_Tomorrow=False, Delivery=True])''' - Функция создает корреспонденцию на доставку акта. ActCode - код акта; Delivery_Tomorrow - установить план. дату доставки следующим рабочим днем или сегодня (по умолчанию , сегодня); Delivery - создать корр. на доставку АПД или создать корреспонденцию на забор АПД (по умолчанию, доставка АПД). Возвращает код созданного адреса.<br />
<br />
'''CreateAddressTransferAct(ClientCode, Store, DateTo, [AdditionalParam])''' - Функция создает исходящий акт передачи корреспонденции (АПК). Требует ClientCode - код клиента, Store - код филиала, для которого будет создан акт, DateTo - дату, до которой в акт попадут возвраты, AdditionalParam - дополнительный строковый параметр для передачи в системную доп. возможность ExceptionsForAPK, позволяющий отобрать в акт, например, только полные возвраты. Возвращает код созданного акта. ВНИМАНИЕ: при создании АПК используется системная функция ExceptionsForAPK. Если в ней используются интерактивные функции (вывод сообщений, диалоговые окна, выполнение скриптов), то акт сформирован не будет, а функция CREATEADDRESSTRANSFERACT вернет ошибку. <br />
<br />
'''GetPolygonByAddress(Address, TownCode, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попал адрес. Если полигон найти не удалось, функция возвратит пустую строку. Address - адрес корреспонденции текстом; TownCode - код города; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByAddress(addressrecord.address, if((addressrecord.number=0)*(addressrecord.strbarcode=<nowiki>''</nowiki>), addressrecord.townfrom, addressrecord.townto), '`schema`=1') - пытаемся найти вхождение адреса в полигоны 1 схемы, при выборе города учитывается корр. на забор, у нее нужно использовать город-отправитель (а для обычной корр. нужен город-получатель).<br />
<br />
'''GetPolygonByLatLon(Lat, Lon, where[, field='code'])''' - функция возвращает значение связанное с полигоном в который попали GPS координаты. Если полигон найти не удалось, функция возвратит пустую строку. Lat - широта текстом; Lon - долгота текстом; where - SQL условие; field - необязательный параметр, определяет возвращаемое значение при найденном полигоне, по умолчанию равен "code".<br />
<br />
Пример:<br />
GetPolygonByLatLon('55.769064','37.590713','zone is not null and price=0') - пытаемся найти вхождение координат в полигоны, где задана зона, для всех клиентских и курьерских зон.<br />
<br />
'''GetLatLonByAddress(AddressText, TownCode)''' - возвращает географические координаты вида lat,lon указанного в AddressText адреса. Поиск производится в городе, имеющем код TownCode в таблице Town.<br />
<br />
'''CalcAgentPrice(AddressCode, AgentCode, TownFrom, TownTo, Mode, [, Count=1])''' - функция возвращает стоимость доставки рассчитанную по тарифу агента. AddressCode - код адреса, AgenCode - код филиала (агента), TownFrom - код города отправителя, TownTo - код города получателя, Mode - режим срочности, count - тарифная сетку от указанного количества отправлений (по умолчанию 1)<br />
<br />
'''SetAddrKol_vo(address, getkol_vo)''' - функция делает прием корреспонденции в текущем ответственном филиале. address - внутренний код адреса, getkol_vo - количество принимаемых мест, может принимать значения: "kol_vo" - принять все места, "getKol_vo+1" - принять еще одно место, "число" - сделать количество принятых мест равным указанному числу.<br />
<br />
'''GetBasePrice''' - возвращает базовую стоимость доставки посчитанную по тарифной сетке клиента в зависимости от :кол-ва заказов,зоны,типа,срочности,массы, расстояния. В системах с выключенными доп. услугами также считает проценты от суммы и страховки. <br />
Описание параметров:<br />
<br />
*ds - ссылка на объект датасета с основными параметрами расчета цены. Значение по умолчанию доступно в формулах тарифа и доп. услуг, через вызов "dataset._self".<br />
Описание некоторых полей датасета:<br />
pmoney - процент от суммы;<br />
pmoneycard - процент от суммы при оплате картой;<br />
pricecode - код прайса (таблица Price) ;<br />
distarea - район метро получателя (актуально при отключённом едином районировании, как правило район от 200 до 299 является признаком области);<br />
region - признак области при включенном едином районировании;<br />
distareaFrom и regionFrom - аналог distarea, region только для отправителя;<br />
pcncode - код записи таблицы pricecnt "количество от";<br />
Запрос содержит поля таблицы pricelinesnew - начальная стоимость по тарифной сетки, найденные без учета массы,только по типу срочности и режиму.<br />
Запрос содержит поля таблицы price.<br />
<br />
*addressrecord - ссылка на объектную модель карточки корреспонденции, следует использовать уже созданную addressrecord._self<br />
*count - количество корреспонденций от клиента. (может показывать кол-во корреспонденции в текущем заказе или за прошлый месяц, в зависимости от выбранной схемы подсчета заказов в тарифе)<br />
*type - тип корреспонденции;<br />
*mode - режим доставки;<br />
*wait - количество минут ожидания (не учитывается при доп. услугах, есть системная услуга "ожидание");<br />
*mass - масса отправления; <br />
*rur - сумма передаваемых денег (не учитывается при доп. услугах, есть системная услуга "процент от суммы");<br />
*inshprice - сумма страховки (не учитывается при доп. услугах, есть системная услуга "процент от объявленной стоимости");<br />
*distance - расстояние до места доставки, обычно поле заполняется при доставке в область (регион в едино районировании). Дополнительная наценка к стоимости доставки;<br />
*forward - направление доставки: true - туда; false - обратно;<br />
*Collection - признак заборной корреспонденции: true - забор, false - доставка (В тарифе есть возможность указать стоимость для забора);<br />
*TownFrom - код города отправителя;<br />
*TownTo - код города получателя.<br />
<br />
В тарифе есть возможность указать формулу, которая может влиять на базовый расчет. Формула может объявить служебные переменные, которые:<br />
*$FormulaReplace - если true – возвращаемое значение полностью заменяет базовый расчет;<br />
*$FormulaKoeff - коэффициент на который будет помножена базовая стоимость.<br />
Также внутри формулы объявлены следующие объекты dataset, addressrecord и переменные:<br />
*$ForceIntown - Переменная становится истиной, если междугородний расчет был отменен, т.к. адрес попал в нарисованную зону на карте.<br />
*а также: $forward, $distance, $Count, $Collection, $Wait, $FormulaKoeff, $PriceCode - описание есть выше.<br />
<br />
Для направления "туда", Функция GetBasePrice вызывается через доп. услугу "База" (при включенных доп. услугах), для направления "Обратно" всегда вызывается напрямую (т.к. доп. услуги работают только в для направления "туда").<br />
На расчет этой функции влияют следующие переменные: "Финансы" -> "Расчет стоимости по адресу", "Финансы" -> "Зона клиента по умолчанию", "Финансы" -> "Подсчет кол-ва отправлений за месяц".<br />
<br />
'''CalcAddressPrice(AddressCode, [,ZakazCount])''' - полностью пересчитывает стоимость доставки корреспонденции по тарифу клиента. AddressCode - внутренний код адреса, ZakazCount - не обязательный параметр, кол-во заказов от клиента.<br />
<br />
'''GetStationCode(s [,town])''' – возвращает код станции метро, ассоциированный в системе с адресом s. В случае невозможности идентифицировать станцию метро – возвращает 0. <br />
Когда включено районирование по карте, необходим второй параметр "town" - код города в котором нужно искать адрес. Возвращает код района если удалось его найти; код станции меж-города - если адрес удалось геокодировать, но район не нашли; код 0 - когда не удалось геокодировать адрес.<br />
<br />
'''RecalcSpecialSMA(ActCode)''' - пересчитать акт передачи денег (АПД). Также, у корреспонденций входящих в АПД будет пересчитана стоимость доставки. Для Входящего АПД сумма акта не пересчитывается. Параметр ActCode - внутренний код акта, коды можно перечислять через запятую.<br />
<br />
'''UserCode''' - Возвращает код текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserName''' - Возвращает имя текущего пользователя из таблицы «Пользователи» (users).<br />
<br />
'''UserPass''' - Возвращает пароль текущего пользователя.<br />
<br />
'''UserBaseCode''' – Возвращает код текущего пользователя из таблицы «Сотрудники» (kurier).<br />
<br />
'''UserEmail''' - Возвращает e-mail текущего пользователя.<br />
<br />
'''CurrentTown''' – Возвращает код текущего города (из таблицы town).<br />
<br />
'''CurrentCity''' – Возвращает код текущего региона (из таблицы city).<br />
<br />
'''CurrentLocation''' – Возвращает код текущего филиала (из таблицы store).<br />
<br />
'''FillExcelDoc'''(Excel, Dataset, FormType, FormNumber) - Выполняет указанную печатную форму в объекте excel. Dataset объект с данными для скрипта в печатной форме, может быть null. Dataset передавать можно так db.self, тогда переданный dataset внутри печатной формы будет доступен по имени dataset. Например:<br />
<br />
new('TExcel', 'excel');<br />
FillExcelDoc(excel.self, null, 12, 1);<br />
excel.DoNotDestroy(true);<br />
excel.SetVisible(true);<br />
''Покажет эксель с выполненной печатной формой''<br />
<br />
'''ValutaSign''' – Возвращает название валюты для суммы.<br />
<br />
'''SendToMeasoft(xml)''' - Отправляет запрос в клиентское API Measoft. Автоматически добавляет начальный "<?xml version="1.0" encoding="utf-8"?>".<br />
<br />
'''InsertFirmAtt(excel, sheet, firmcode)''' - Вставляем на лист эксель по коду фирмы: печать, подпись, подпись бухгалтера, логотип. Тэги <STAMP>, <DIR>, <BUH>, <LOGO> соответственно. После тега можно указать размеры изображения в символах Microsoft Excel. Формат записи: <STAMP> 16, 16<br />
<br />
== Объект TINIFile ==<br />
<br />
Предоставляет функции работы с ini-файлами. В некоторых контекстах создается автоматически для предоставления доступа к настроечному файлу модуля, выполняющего скрипт.<br />
<br />
Функции:<br />
<br />
IniParam(s[,section='common']) – Существует только если имя экземпляра объекта пустое. Возвращает значение параметра s ini-файла секции «common», изменить секцию можно не обязательным параметром section. В случае отсутствия параметра в файле возвращает пустую строку. <br />
<br />
Param(s) – Синоним IniParam с тем отличием, что существует только если имя объекта непустое.<br />
<br />
SetText(s) - Загружает ini файл из строки s. Если в файле нет секции «common», то принудительно объявляет ее в начале.<br />
<br />
== Объект TSMS ==<br />
<br />
Предназначен для отправки SMS, а также проверки статуса их доставки.<br />
<br />
Функции:<br />
<br />
SetProxy(Server, Port, User, Pass) - Устанавливает настройки прокси-сервера.<br />
<br />
Connect(Provider, Host, User, Pass, SenderName, SMSPrefix) – Подключает объект к провайдеру provider, используя адрес Host, имя пользователя User и пароль Pass. Значение SMSPrefix предназначено для того, чтобы провайдер мог различить сообщения от разных филиалов, если этими филиалами используется одно подключение. Если необходимости разделять сообщения нет - значение SMSPrefix можно не указывать.<br />
Для провайдера доступны значения 'mirsms', 'sms16', 'websms', 'epochta', 'zanzara', 'SMSManager', 'f1sms', 'BitCall', 'mirsmsGET', 'AMD' и другие, либо можно указать числовые значения номера протокола, от 1 до <rspoiler text="20">Набор провайдеров все время дополняется, количество и номера можно смотреть в Справочники - Переменные - Подключения - SMS</rspoiler> соответственно. Эти значения соответствуют значениям переменной SMSProtocol таблицы "Value".<br />
<br />
SendSMS(Phone, Text, [ID]) – Отправляет SMS с текстом Text на телефон Phone. Для некоторых провайдеров необходим уникальный идентификатор сообщения ID. Возвращает ID провайдера для последующей проверки статуса доставки.<br />
<br />
CheckSMS(ProviderID) – Проверяет состояние доставки сообщения с идентификатором ProviderID. Возвращает: 0 – доставляется, 1 – успешно доставлено, 2 – не доставлено.<br />
<br />
ReceiveSMS(InboxID, DateFrom, DateTo, NewOnly) - Получает входящие SMS, с ящика InboxID (идентификатор выдаётся провайдером). DateFrom, DateTo - задается временной интервал в котором были приняты сообщения(формат 08.04.2013 18:00:00 'DD.MM.YYYY HH:NN:SS'). Чтобы получать только новые сообщение поле NewOnly должно быть True. Возвращает XML с сообщениями.<br />
<br />
ExtraResult([ParamName='']) - Вызывается после CheckSMS, возвращает дополнительную информацию по последнему статусу смс. В настоящее время работает только для провайдера BitCall, по умолчанию возвращает кнопки, нажатые абонентом во время работы с голосовым меню. Если в paramname указать 'IdentifyText' то будет возвращен JSON с ответами абонента на заданные вопросы(используется в случае звонков с индивидуальным сценарием).<br />
<br />
Log - Возвращает последний HTTP запрос и ответ от сервера смс.<br />
<br />
== Объект TXML ==<br />
<br />
Предназачен для парсинга XML-данных.<br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст XML документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию. Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля.<br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
AttribCount – Возвращает количество атрибутов текущего элемента.<br />
<br />
AttribName(i) – Возвращает имя атрибута с номером i.<br />
<br />
Attrib(V) – Ищет атрибут и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
== Объект TJSON ==<br />
<br />
Предназачен для парсинга JSON-данных. <br />
<br />
Функции:<br />
<br />
SetText(S) – Задает текст JSON документа для парсинга, делает текущим корневой элемент.<br />
<br />
NodeValue – Возвращает значение текущего элемента.<br />
<br />
NodeName – Возвращает имя текущего элемента.<br />
<br />
OpenChild(V) – Ищет дочерний элемент и делает его текущим. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Возвращает значение найденного элемента, или пустую строку, если элемент не найден. Нумерация элементов начинается с нуля. <br />
<br />
ChildrenCount – Возвращает количество дочерних элементов.<br />
<br />
ChildNodeValue(V) – Ищет дочерний элемент и возвращает его значение. Если V – число – ищет по номеру, если V – текст – ищет по названию (регистрозависимый поиск). Можно проверять наличие элементов, если элемента нет, вернется пустая строка.<br />
<br />
OpenParent – Делает текущим родительский элемент. Возвращает значение найденного элемента.<br />
<br />
Reset – Делает текущим корневой элемент, возвращает его значение.<br />
<br />
isArray - Возвращает true, если текущий элемент является массивом (доступ к дочерним элементам возможен только по индексу, нумерация элементов начинается с нуля)<br />
<br />
==Объект TZip==<br />
Предназначен для работы с Zip архивом. <br />
<br />
SetZip(s) - Загружает архив в объект из строки s;<br />
<br />
GetZip - Возвращает архив в виде строки;<br />
<br />
AddFromFile(SrcPath, ZipPath) - Добавляет файл SrcPath в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
AddFromStr(Data, ZipPath) - Добавляет файл из строки Data в архив и располагает его по пути ZipPath. ZipPath содержит имя файла в архиве, при необходимости можно указать каталог;<br />
<br />
LoadFromFile(path) - Загружает архив из файла path;<br />
<br />
SaveToFile(path) - Сохраняет архив в файл path;<br />
<br />
Count - Возвращает кол-во файлов в архиве;<br />
<br />
DataByIndex(index) - Возвращает распакованный файл в виде строки. Index - номер файла в архиве;<br />
<br />
DataByName(ZipPath) - Возвращает распакованный файл в виде строки. ZipPath - путь к файлу в архиве, может содержать каталоги;<br />
<br />
FileName(index) - По номеру файла, функция возвращает полный путь файла в архиве.<br />
<br />
==Объект TBase==<br />
<br />
Функции общего назначения:<br />
<br />
execsimplescript(Caption, Text) - Выполняет скрипт "Дополнительных возможностей". Возвращаемые значения, введенные пользователем устанавливает в переменные $scriptvar1..$scriptvarN, Значения кодов списочных переменных - в переменных $scriptvar1codes..$scriptvarNcodes. Функция возвращает истину, если пользователь нажал "OK" в диалоговом окне.<br />
<br />
FillAdvPriceReport(Excel, AddressCodes, StartLine, StartCol, [ShowSumPrice,InsertColumns]) - добавляет отчёт по дополнительным услугам. В AddressCodes - указаны коды адресов через запятую, каждый код это отдельная строка отчета. Адреса будут показаны в порядке перечисления их в AddressCodes. Если в отчет нужно добавить пустую строку, то можно указать код адреса -1000. StartLine, StartCol - верхний левый угол выгружаемой таблицы. ShowSumPrice - добавить столбец итоговый столбец с суммой всех услуг, по умолчанию выключено. InsertColumns - раздвинуть таблицу перед вставкой отчета, позволяет встраивать отчет посередине выгрузки, по умолчанию выключено. Функция возвращает количество использованных столбцов.<br />
<br />
PrintSticker(Codes, [ToBoxes=False])<br />
<br />
GetItemByName(Name)<br />
<br />
GetA4Printer - возвращает имя принтера выбранного для печати документов<br />
<br />
GetStickerPrinter - возвращает имя принтера выбранного для печати стикеров<br />
<br />
<br />
'''Функции, работающие только в импорте БД из эксель:'''<br />
<br />
ReplaceAddress<br />
<br />
GetItemByCode - Поиск товара по артикулу. Внимание: в пределах одного клиента может быть несколько товаров с одинаковыми артикулами. В этом случае функция найдет последний заведенный товар.<br />
<br />
GetPrice<br />
<br />
GetNewNumber - используется при импорте реестра, возвращает номер конверта в загружаемом заказе<br />
<br />
GetNewPos - используется при импорте реестра, возвращает порядковый номер вложения<br />
<br />
GetNewPackagePos- используется при импорте реестра, возвращает порядковый номер места<br />
<br />
<br />
Zakaz - возвращает номер заказа куда происходит импорт реестра<br />
<br />
addresscode - используется при импорте реестра, код созданного адреса<br />
<br />
Source - код заказчика<br />
<br />
'''ClientTown''' - Узнаем город клиента, через филиал с которым он работает. Сам клиент берется из заказа указанного в окне "Импорт БД из Excel".<br />
<br />
== Объект TFieldObject ==<br />
Объект для доступа к записям, используется в картах и доп.услугах.<br />
<br />
_GETTABLEINFO - возвращает данные о полях и примеры данных объекта.<br />
<br />
<br />
== Применение языка формул ==<br />
'''в различных контекстах системы «Курьерская служба 2008» и сопутствующих проектах'''<br />
<br />
<br />
=== Курьерская служба 2008 ===<br />
<br />
<br />
==== Дополнительная информация на чеке ====<br />
<br />
В карточке клиента на закладке «Касса» имеется поле для ввода текста, который будет отображаться на кассовых чеках, печатаемых для корреспонденции от данного клиента. В поле может быть введен как просто текст, так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TSelfDB с открытым набором данных со строчкой корреспонденции, заказа и клиента, на которую печатается чек<br />
<br />
TBaseSupport<br />
<br />
TBaseValue<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Так же система записывает в переменную $CashRegisterID вычисленный код фискального регистратора, на котором предполагается печать чека.<br />
<br />
Результат работы скрипта печатается на создаваемом чеке, если скрипт не возвращает значение “-1” (число или текст) – в этом случае система чек не создает. Подразумевается, что либо скриптом было принято решение об отсутствии необходимости формирования чека, либо скрипт взял эту функцию на себя.<br />
<br />
==== Заполнение шаблонов печатных форм ====<br />
<br />
<br />
<br />
==== Дополнительные возможности ====<br />
<br />
<br />
<br />
==== Импорт БД из Excel ====<br />
В окружении интерпретатора создается объект ZakazRecord, он является списком со значениями таблицы zakaz. Именно в этот заказ будут загружены данные. Из этого объекта также доступно :<br><br />
*ZakazRecord.userfields - пользовательские поля заказа;<br />
*ZakazRecord.Clients - данные таблицы clients;<br />
*ZakazRecord.Clients.userfields - пользовательские поля заказчика.<br />
<br />
==== Прайс лист клиента ====<br />
<br />
Формула возвращает сумму в валюте клиента для каждой поездки (туда или обратно) единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Помимо стандартных объектов, система создает объект AddressRecord, в котором, как свойства, доступны все поля текущей записи. Так же она выставляет значение переменной $Forward в 1 (истина), если необходимо произвести расчет для направления "Туда" и 0 (ложь) - если обратно. ВНИМАНИЕ! Как и во всех остальных местах, после формулы нельзя ставить ";", иначе скрипт вернет 0!<br />
<br />
Например:<br />
<br />
if(int(AddressRecord.Time_Put_Max)>19, 100, 0)<br />
<br />
''Прибавляет 100 рублей в случае, если максимальный срок доставки 20 часов или более''<br />
<br />
if(pos(AddressRecord.Address, 'Аренда')>0, <br />
set($FormulaReplace, 1); <br />
1500<br />
, 0)<br />
<br />
''В случае наличия подстроки "Аренда" в адресе заменяет штатное ценообразование на 1500 рублей''<br />
<br />
Объект AddressRecord может предоставить доступ к связанным таблицам :<br />
* addressrecord.boxes<br />
* addressrecord.packages<br />
* addressrecord.clients<br />
* addressrecord.price<br />
* addressrecord.advprice<br />
* addressrecord.userfields<br />
* addressrecord.addressfld<br />
* addressrecord.clients.userfields<br />
* addressrecord.price.userfields<br />
* addressrecord.zakaz<br />
* addressrecord.zakaz.userfields<br />
<br />
Чтобы получить доступ к полю VarCode из таблицы userfields необходимо записать AddressRecord.Userfields.VarCode. В присоединённой таблице может быть несколько записей чтобы получить к ним доступ предусмотрены функции _First, _EOF, _Next, _RecordCount, _Set.<br />
<br />
Пример: <br />
set($value1, 0); set($value2, 0);<br />
while(AddressRecord.userfields._EOF=0,<br />
if(AddressRecord.userfields.varCode=1, <br />
set($value1, if(AddressRecord.userFields.VarValue='Праздничная упаковка', 150, 0)), ''''''');<br />
if(AddressRecord.userfields.varCode=2, <br />
set($value2, AddressRecord.userFields.VarValue), ''''''');<br />
AddressRecord.userFields._Next;<br />
);<br />
int($value1) + int($value2)<br />
<br />
Пример делающий тоже самое что и выше но через поиск Locate:<br />
set($value1, if(addressrecord.userfields.VarValue('VarCode', 1)='Праздничная упаковка', 150, 0));<br />
set($value2, int(addressrecord.userfields.VarValue('VarCode', 2)));<br />
$value1 + $value2<br />
<br />
<br />
В скрипте доступны переменные: <br />
«$FormulaKoeff» - это коэффициент на который умножится конечная цена (по умолчанию равна 1);<br />
«$PriceCode» - код прайса;<br />
«$CurrentPriceConf» - код услуги;<br />
«$BasePrice» - стоимость всех услуг с взведённой галкой "+ к Базовой".<br />
<br />
Для вызова функции CalcBasePrice (Расчёт базовой цены) в скрипте объявленны переменные: $Count,$Collection,$Distance,$Wait.<br />
<br />
Существует поиск по ключевому полю (поиск регистронезависимый), например чтобы найти в таблице advprice введённое значение для текущей услуги, нужно сделать такую запись addressrecord.advprice.value('priceconf', $CurrentPriceConf) - Первый параметр это ключевое поле, второй искомое значение. Если запись найдётся будет возвращено значение поле value, если нет функция вернёт значение 0.<br />
<br />
Пример <br />
if(addressrecord.advprice.active('priceconf', 3)='T', addressrecord.advprice.price, 0)<br />
<br />
''Смотрим включена ли услуга и если да, возвращаем рассчитанную стоимость<br />
<br />
Чтобы изменить значение записанное в объект addressrecord, нужно воспользоваться методом _set(keyfield, keyvalue, filed, value). Параметр keyfield - ключевое поле, keyvalue - искомое значение, filed - имя столбца, value - новое значение столбца. Сначала происходит поиск строки по ключу, далее меняется значение указанного столбца.<br />
Пример, отключение услуги база:<br />
addressrecord.advprice._Set('priceconf', 1, 'active', 'F')<br />
priceconf - поле где записан код услуги;<br />
1 - услуга База;<br />
active - поле показывающее включение услуги.<br />
<br />
Также существует упрощенный метод _set, с двумя параметрами filed, value - он используется в шаблонах загрузки или в системных доп. возможностях где доступен объект addressrecord.<br />
<br />
==== Зарплата курьеров ====<br />
<br />
Формула возвращает сумму в основной валюте для каждой единицы корреспонденции, которая добавляется к штатному ценообразованию. Если формула установила в значение «Истина» переменную «$FormulaReplace», то значение, возвращаемое формулой заменяет штатное ценообразование. Переменные «$FormulaTablKoeff» и «$FormulaMoneyKoeff» позволяют установить повышающий или понижающий коэффициент на стоимость доставки (по тарифной сетке) и услуги соответственно (процент от суммы, процент от стоимости доставки, ожидание). Переменная «$UsingZoneName» и «$KurierZone» содержат название и код зоны соответственно, есть возможность поменять название зоны для отчета.<br />
<br />
=== Планировщик ===<br />
<br />
В поле текста задания может быть введен как текст с командами планировщика (см ниже), так и интерпретируемый скрипт, начинающийся с признака скрипта: «<?>». В контексте выполнения скрипта система создает объекты:<br />
<br />
TIniFile, Указывает на настроечный ini-файл планировщика.<br />
<br />
Все объекты создаются с пустыми именами.<br />
<br />
Для записи в лог планировщика нужно использовать функцию Print<br />
<br />
=== Репликатор ===<br />
<br />
== Прочее ==<br />
ReplaceAddress(target, address) – Возвращает адрес последней доставки корреспонденции получателю target по адресу address от текущего клиента. При отсутствии такой доставки, возвращает address.<br />
<br />
GetPrice –возвращает рассчитанное значение цены, на основе прайс-листа клиента и данных о корреспонденции.<br />
<br />
GetKurierByStation(i) – возвращает код курьера, ассоциированного со станцией метро с кодом i.<br />
<br />
GetNewNumber – Возвращает не занятый номер единицы корреспонденции в текущем заказе.<br />
<br />
==История изменений==<br />
<br />
=== Недавние изменения ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция InsertFirmAtt.<br />
|-<br />
||'''Добавлено:'''<br />
||В объект TExcel добавлен метод Align.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция CheckEan<br />
|-<br />
||'''Добавлено:'''<br />
|В объект функцию FillAdvPriceReport добавлены параметры ShowSumPrice,InsertColumns<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TSMS добавлен метод Log.<br />
|-<br />
||'''Добавлено:'''<br />
|Добавлена функция Money.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция ValutaSign.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция GetPolygonByLatLon.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TTable добавлена функция SetMultiHeader, SetCustomHeader.<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DownloadAttachment<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию SetRowHeight объекта TExcel добавлен параметр cnt.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция AsString.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция SetSize.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TADO добавлена функция ParseForIn.<br />
|-<br />
||'''Изменено:'''<br />
|В объект TBaseUtils из TBase перенесена функция FillExcelDoc.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция CalcAddressPrice<br />
|-<br />
||'''Изменено:'''<br />
|Все функции класса TBaseSupport перенесены в TBaseUtils. Класс TBaseSupport больше не существует.<br />
|-<br />
||'''Добавлено:'''<br />
|В функции RowInsert и RowDelete объекта TExcel добавлен параметр count.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция SendToMeaSoft<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils функция RecalcSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Новая функция Reverse<br />
|}<br />
<br />
=== Версия 849 &nbsp; 22.02.2018 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|В функцию TBaseUtils.TownByIndex добавлен параметр PriorityName<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TBase добавлена функция GetNewPackagePos<br />
|-<br />
||'''Добавлено:'''<br />
|В объекте TSMS доработан метод ExtraResult, добавлен параметр ParamName<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBase добавлена функция CalcAgentPrice<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateAddressForActDelivery<br />
|-<br />
||'''Изменено:'''<br />
|Функция CalcTownDeliveryDate заменена на CalcDeliveryDate<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TBaseUtils добавлена функция CreateSpecialSMA<br />
|-<br />
||'''Добавлено:'''<br />
|Функция SignatureUrl<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена функция LoadFromStr.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetPen.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TCanvas добавлена функция SetBrush.<br />
|-<br />
||'''Добавлено:'''<br />
|В объект TPicture добавлена поддержка чтения в формате PNG.<br />
|-<br />
||'''Добавлено:'''<br />
|В функцию TCanvas.DrawPic параметр Mode<br />
|-<br />
||'''Добавлено:'''<br />
|Свойство TPicture.Canvas<br />
|-<br />
||'''Добавлено:'''<br />
|Функция DeleteFile<br />
|}<br />
<br />
=== Версия 758 &nbsp; 29.03.2017 ===<br />
{|<br />
||'''Добавлено:'''<br />
|Функция GetPolygonByAddress<br />
|-<br />
||'''Добавлено:'''<br />
|Функция ParamsCount<br />
|-<br />
||'''Добавлено:'''<br />
|Объект TZip<br />
|-<br />
||'''Изменено:'''<br />
|Функции CreateEAN и Create128 заменены одной функцией CreateBar, полностью совместимой с Create128, но добавлена поддержка EAN-13 и Interleaved 2-5 (для Почты России). В системе функции оставлены для обратной совместимости, но более не являются документированными и рекомендованными к использованию.<br />
|-<br />
||'''Добавлено:'''<br />
|Параметр text в функцию Cell объекта TExcel<br />
|-<br />
||'''Добавлено:'''<br />
|Функция UrlEncode <br />
|-<br />
||'''Добавлено:'''<br />
|Функция IncDay теперь может принимать параметр count<br />
|-<br />
||'''Добавлено:'''<br />
|Функции FtpGet, FtpPut, TTable.SetCell()<br />
|}<br />
<br />
=== Версия 452 &nbsp; 26.02.2014 ===<br />
<br />
{|<br />
||'''Добавлено:'''<br />
|Функция Time<br />
|-<br />
||'''Добавлено:'''<br />
|Функция FixedIntToStr<br />
|-<br />
||'''Добавлено:'''<br />
|Функция TimePeriod<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена функция приёма смс - ReceiveSMS<br />
|-<br />
|'''Добавлено:'''<br />
|Функция STR2UTF<br />
|-<br />
|'''Добавлено:'''<br />
|Функция SAVETOFILE<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.SetSheetName<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "FILESTR"<br />
|-<br />
|'''Добавлено:'''<br />
|Расширены возможности объекта addressrecord в формулах тарифов<br />
|}<br />
<br />
=== Версия 308 &nbsp; 24.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В функции загрузки таблиц из TADO добавлено условие, что поля, названия которых начинаются с "-" не выгружаются. Таким образом можно скрывать служебные поля из результирующего набора.<br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowAutoFit <br />
|-<br />
|'''Добавлено:'''<br />
|Функция TExcel.RowInsert <br />
|}<br />
<br />
=== Версия 300 &nbsp; 01.11.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В объекте TCSVFile добавилась возможность запрашивать значения не только текущей записи через параметр сдвига<br />
|-<br />
|'''Добавлено:'''<br />
|В пользовательские отчеты добавлен тип "UPDOWN"<br />
|-<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлен объект TCSVFile<br />
|}<br />
<br />
=== Версия 266 &nbsp; 14.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|В интерпретатор добавлена поддержка массивов<br />
|}<br />
<br />
=== Версия 265 &nbsp; 11.09.2012 ===<br />
<br />
{|<br />
|'''Добавлено:'''<br />
|Функция CreateTrans в интерпретатор<br />
|-</div>Sammy