Дополнительные возможности — различия между версиями

Материал из Меасофт
Перейти к: навигация, поиск
(Настройка вида маркера)
(Скрипты)
 
(не показано 79 промежуточных версий 9 участников)
Строка 1: Строка 1:
 
== Настройка для печатной документации ==
 
== Настройка для печатной документации ==
  
CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".
+
'''CustomGivnAct''' - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская".
 
Объявленные переменные
 
Объявленные переменные
 
%code% - коды записей в выдаче которые необходимо распечатать
 
%code% - коды записей в выдаче которые необходимо распечатать
Строка 10: Строка 10:
 
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".
 
Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".
  
OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов  (через запятую).
+
'''OnBeforePrintNakls''' - Вызывается перед печатью накладных, содержит %code% - коды всех адресов  (через запятую).
  
OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов  (через запятую).
+
'''OnAfterPrintNakls''' - Вызывается после печати накладных, содержит %code% - коды всех адресов  (через запятую).
  
OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.
+
'''OnBeforePrintOneNakl''' - Вызывается перед печатью накладной, содержит %code% - код адреса.
  
OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.
+
'''OnAfterPrintOneNakl''' - Вызывается после печати накладной, содержит %code% - код адреса.
  
OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.
+
'''OnBeforePrintSticker''' - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.
 +
 
 +
'''OnAfterItemPrint''' - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.
 +
 
 +
'''PrintCustomSticker''' - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек".  %ACopyNo% - номер копии, нумерация с 1. %KolvoStr% - Стандартный текст "текущее место/всего мест", с учетом возможной печати этикетки на одно место из нескольких. Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.
 +
 
 +
'''PrintItemSticker''' - Вызывается перед печатью наклейки из карточки номенклатуры, для возможности распечатать уникальную наклейку для номенклатуры по заложенным в допвозможности условиям. Содержит %clientbar% - ШК наклейки. Если наклейка распечатана из допвозможности возвращает true, в противном случае false и будет распечатана стандартная наклейка, заложенная в системе
 +
 
 +
'''ChangeSchetDetailQuery''' - Вызывается формировании / пересчете счета. Возвращает строку разбитую через CRLF на две. Первая строка заменяет поля в запросе по детализации счета, вторая меняет строку группировки. Обязательные поля: zakazcnt - кол-во заказов, price - стоимость курьерских услуг, cnt - количество, pr - общая стоимость курьерских услуг.
 +
 
 +
'''OnAutoPrintManSticker''' - вызывается перед автопечатью сопроводительного документа к манифесту при заполнении номера пломбы (такая возможность включается уставкой печатаемой формы в переменной AutoPrintManSticker), содержит %code% - код манифеста, %mnf_date% - дату манифеста, %transporter% - код перевозчика, %store% - код филиала-получателя манифеста. Если доп.возможность возвращает true - автопечать происходит, false - нет.
 +
 
 +
'''OnBeforePrintAddresses''' - Вызывается из формы печати ведомостей/наклеек после нажатия на кнопку "ОК", содержит %code% - коды всех адресов  (через запятую).
  
 
== Настройка всплывающих окон==
 
== Настройка всплывающих окон==
  
OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи.
+
'''OnGivnStateChanged''' - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId%  указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.
 +
 
 +
'''OnAfterGivnStateChanged''' - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId%  указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)
 +
 
 +
'''OnBeforeAddressSave''' - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). . Если результат функции -1, то происходит отмена сохранения без ошибки (abort).
 +
 
 +
'''OnBeforeBaseSave''' - Вызывается перед сохранением изменений в карточке срочного заказа. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог таблицы base). Теги %date_put%, %time_put%, %message% - содержат дату вручения, время вручения и инфо о доставке соответственно. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).
 +
 
 +
'''OnAfterAddressSave''' - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".
 +
 
 +
'''OnBarScan''' - Скриптовая обработка штрих-кода перед поиском
 +
 
 +
'''AfterAddressAcceptance''' - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции).  Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. При вызове из интерфейса доски приема либо приема корреспонденции передается дополнительный тег %NewMass%, который содержит массу проставленную весами, содержит -1 если проставление массы отключено.
 +
 
 +
'''BeforeAddressAcceptance''' - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code)  . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.
 +
 
 +
'''OnAddToShippingPlace''' - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка
 +
 
 +
'''GetTypeShippingPlace''' - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит  %сode% - код адреса.
 +
 
 +
'''OnBeforePlanToManifest''' - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.
 +
 
 +
'''OnBeforeScanToManifest''' - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса
 +
 
 +
'''OnBeforePlanning''' - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций. 
 +
 
 +
'''OnAfterPlanning'''- событие после планирования планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) фактически запланированных корреспонденций. 
 +
 
 +
'''DAILY''' - задание выполняемое один раз в день
 +
 
 +
'''OnGivnKurierStateChanged''' - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.
  
OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи.
+
'''OnBeforeGivnStatus''' - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код  адреса
  
OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах).  
+
'''OnBeforeClientSave''' - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).
  
OnBarScan
+
'''OnAfterClientSave''' - событие срабатывает после сохранения изменений в карточке клиента. Код выполняется в транзакции. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит сохранённую информацию о карточке клиента, а так же все её пользовательские поля с предыдущими значениями, которые можно получить через функцию _Former('VarCode', значение, 'VarValue')
  
DAILY - задание выполняемое один раз в день
+
'''OnBeforeBasePutCheck''' - событие срабатывает при проставлении галки на вкладке срочных заказов. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В параметре <nowiki>%code%</nowiki> указан код срочного заказа, а в параметре <nowiki>%BasePutCheckType%</nowiki> указан тип проставления: 0 - если галка, 1 - если плюс. Если результат функции -1, то отмена выполняемой функции (abort).
 +
 
 +
'''OnAfterCreateSpecialSMA''' - событие срабатывает после создания нового АПД для клиента. Код выполняется вне транзакции, потому есть возможность показывать диалоговые окна. В качестве единственного параметра %code% передается код созданного АПД.
 +
 
 +
'''OnBeforeReturnIncome'''  - Событие перед приемом возврата на вкладке выдача. Код выполняется вне транзакции. Содержит %Code% - код адреса. Если функция возвращает значение больше 0, то это будет массой возврата корреспонденции, а если это значение больше массы корреспонденции, то будет использовано в качестве массы места
 +
 
 +
'''OnBeforeCreatePickup'''  - Событие перед созданием забора правой кнопкой мыши в списке заказов. Код выполняется вне транзакции. Содержит %Code% - код заказа. %FromCompany% - компания, у которой осуществляется забор (поле target), %FromAddress% - адрес забора
  
 
== Настройка документов ==
 
== Настройка документов ==
CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказе установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"
+
'''CustomAddressPrnForm2''' - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"
 +
 
 +
'''GetTypeShippingPlace'''  - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code%  - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.
 +
 
 +
'''OnShelvingBarScan''' - Обработка отсканированного штрих-кода при комплектации.
 +
 
 +
'''AdditionalStringForSMA''' - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными.
 +
 
 +
'''CustomBillDetaling''' - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.
 +
 
 +
'''OnSchetChanged'''  - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code
 +
 
 +
'''ExceptionsForAPK'''  - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый  - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.
 +
  пример кода по умолчанию, фильтр только по второму запросу,  вложение с названием "Доставка"  - не попадает в АПК
 +
  <NOWIKI><?>
 +
  SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' ');
 +
  $ExcStr</NOWIKI>
  
GetTypeShippingPlace  - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code%  - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.
+
  пример для изменения фильтрации сразу у двух запросов:
 +
  <NOWIKI><?>
 +
    SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');
 +
    SET($WHERE2, ''); rem('условие отбора возврата товаров');
 +
    $WHERE1 + CHAR(13) + CHAR(10) + $WHERE2</NOWIKI>
  
OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.
+
'''OnOrderCountCalc''' -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)
  
AdditionalStringForSMA - Дополнительные условия разделения актов на нал. и безнал.
+
'''OnGetZakazCount''' - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %DatePut% - дата доставки (добавлено для альтернативных видов подсчета, может быть null); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.
  
CustomBillDetaling - Кастомная детализация счета
+
'''OnSMABarcodeScan''' - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)
  
OnSchetChanged  - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code
+
'''OnPaintSMAColumns''' - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах).  Функция должна возвращать строку следующей структуры:
 +
Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется)
 +
 
 +
'''CustomZPDetail''' - кастомное дополнение к детализации зарплаты (Специальная надбавка). Вызывается из скриптовой детализации зарплаты. Предназначено для расчета и вывода в детализацию значения какой-либо специальной надбавки, определенной пользователем. Входящие параметры: %code% - код платежа в таблице kurier_pays, %kurier% - код курьера. Возвращает строку, где через запятую указаны Название надбавки и ее значение. Если эта строка не содержит двух параметров - ничего не выводится.
 +
.
  
 
== Настройка вида маркера ==
 
== Настройка вида маркера ==
 
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br />  
 
Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные". <br />  
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник, 2 - треугольник, 3 - увеличенный треугольник, чтобы  квадрат не мог его перекрыть, 4 - квадрат, все остальное круг. В окружении доступен объект Table2Map, в формуле нужно использовать поля только этого объекта т.к. он вызывается при событии рисования, любое обращение к базе приведет к значительному замедлению.<br/>
+
 
 +
В функции передается объект Table2Map типа [[Руководство программиста#Объект TFieldObject|TFieldObject]]. Получить поля с примерами значений из него можно например так:
 +
showmessage(table2map._GETTABLEINFO)
 +
(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).
 +
 
 +
Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.
 +
 
 +
Так же текущее состояние окна карты доступно через переменные:
 +
 
 +
$PlanDate - Выбранная дата, на которую планируется.
 +
 
 +
$KurierCode - Код выделенного курьера.
 +
 
 +
$MetroCode - Код выделенной станции метро (маршрута).
 +
 
 +
 
 +
Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:
 +
 
 +
set($s, try(
 +
  error('вот тут ошибка, которую вы увидите в виде сообщения');
 +
));
 +
if($s, showmessage($s), '');
 +
 
 +
 
 +
 
 +
'''MapObjectFigure''' - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник (острым концом вниз), 2 - треугольник, 3 - увеличенный перевернутый треугольник (острым концом вниз), чтобы  квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.<br/>
 
Например:
 
Например:
 
  if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))
 
  if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный треугольник, иначе - квадрат.
+
Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный перевернутый треугольник, иначе - квадрат.
  
 
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.
 
'''MapObjectColor''' - Доп. возможность позволяет установить цвет маркера на карте.
 
При помощи данных параметров можно создать условия отображения маркеров.<br/>
 
При помощи данных параметров можно создать условия отображения маркеров.<br/>
 +
 +
Для доступа к настройкам доступны переменные:
 +
 +
$Color
 +
 +
$DefaultColor
 +
 +
$PlanedColor
 +
 +
$SelectedPlanedColor
 +
 +
$GetKurierColor
 +
 
Например:  
 
Например:  
 
  if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)
 
  if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)
 
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.
 
Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.
 +
 +
 +
== Речь диктора ==
 +
 +
'''OnGivnVoice''' - выполняется после изменения статуса выдачи. Параметр <nowiki>%code%</nowiki> содержит код выдачи, <nowiki>%State%</nowiki> содержит код устанавливаемого статуса, <nowiki>%OldState%</nowiki> - код старого статуса (0 если не было). Позволяет отключать стандартный звук ОК, если возвращает не 0.
 +
 +
'''OnDashboardManifestVoice''' - выполняется после сканирования адреса в интерфейсе приёма манифестов. Параметр <nowiki>%code%</nowiki> содержит код корреспонденции. Позволяет отключать стандартную диктовку программой (код курьера, вес и т.д.), если возвращает не 0.
  
 
== Настройка мобильного приложения ==
 
== Настройка мобильного приложения ==
ExceptionsForAPK  - можно настроить исключения для включения в АПК . Возвращает часть sql запроса при отборе вложений
 
  пример кода по умолчанию,  вложение с названием "Доставка"  - не попадает в АПК
 
  <NOWIKI><?>
 
  SET($ExcStr,' and bx.Name not like ''%Доставка%'' ');
 
  $ExcStr</NOWIKI>
 
  
 
== Скрипты ==
 
== Скрипты ==
OnEveryStartApp - выполняется при запуске программы.
+
'''OnEveryStartApp''' - выполняется при запуске программы.
 +
 
 +
'''OnEveryCloseApp''' - выполняет при закрытии программы.
 +
 
 +
'''OnBarScan''' - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.
 +
 
 +
'''OnMapBeforeGeolocation''' - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist.
 +
Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.
 +
<NOWIKI><?>
 +
if(station=0,
 +
  _set('lon', null);
 +
  _set('lat', null);
 +
  _set('searchCoordinate', 'F');
 +
,0)</NOWIKI>
 +
 
 +
 
 +
'''OnSyncInsert''' - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.
 +
 
 +
'''OnSyncUpdate''' - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.
 +
 
 +
Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться.
 +
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:
 +
<NOWIKI>
 +
 
 +
<?>
 +
rem(ticket 23584, 23583);
 +
if( ('%tablename%'='address'),
 +
  query('UPDATE address a
 +
    JOIN trace t ON t.address=a.code AND t.state=1
 +
    JOIN zakaz z ON z.code=a.zakaz
 +
  SET
 +
    a.mode = IF(z.source=646, 3, 2)
 +
  WHERE
 +
    a.code = %code%
 +
    AND a.station=65535
 +
    AND (
 +
    (z.source=646 AND a.mode<>3) OR
 +
    (A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR
 +
    (A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)
 +
    )')
 +
, '');</NOWIKI>
 +
;
 +
 
 +
'''OnCalcSalary''' - Событие происходит после начисления зарплаты курьеру.  %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты:  %profit%  -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение;  %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.
 +
 
 +
'''OnTicketSetCusr''' - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)
 +
 
 +
'''OnCreateAddressForActDelivery''' - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client%  - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей.  Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save.
 +
 
 +
Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.
 +
<source lang="sql">
 +
<?>
 +
if((client=3360)*(ActType=2),
 +
  rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');
 +
  set($addresscode, fieldlist._save);
 +
  query('insert boxes (address, pos, name)
 +
  select '+$addresscode+' AS address,  @q := @q + 1 AS pos, 
 +
        CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`
 +
  FROM addressfld af
 +
  JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p
 +
  WHERE
 +
    af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');
 +
,0);
 +
</source>
 +
 
 +
'''OnAfterPreassemblyScan''' - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.
 +
 
 +
'''OnGeocodeScript''' - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:
 +
*$address - адрес для геокодирования;
 +
*$town - код города;
 +
*$street и $home  - упрощенный адрес;
 +
 
 +
Скрипт должен вернуть следующие переменные :
 +
*$lon и $lat - координаты ;
 +
*$goodaddress - нормализованный адрес (не обязательно);
 +
 
 +
<source lang="sql">
 +
<?> 
 +
  set($response,  HTTPPOST('http://XXXXXXXX',
 +
    '{"query":'+ FormatTextJSON($address)+ '}',
 +
    '','','','',
 +
    'post', 'application/json', 10000));
 +
 
 +
  if($response!'',
 +
    new('TJSON', 'json');
 +
    set($e, try(
 +
      json.SetText($response);
 +
      json.OpenChild('geo_data');
 +
      json.OpenChild('mid');
 +
      set($lat, sqlfloat(json.ChildNodeValue('lat')));
 +
      set($lon, sqlfloat(json.ChildNodeValue('lon')));
 +
    ));
 +
    if($e, error('Ошибка в разборе ответа: '+$e), '');
 +
  , error('Пришел пустой ответ от геокодера')
 +
  );
 +
</source>
 +
 
 +
'''OnFilterAddressRecalc''' - Позволяет отфильтровать коды адресов, для которых можно пересчитать стоимость. Событие происходит перед расчетом стоимости доставки из интерфейса программы для: актов, счетов, заказов, и т.д. Не работает для пересчета запускаемого из самой карточки корреспонденции.
 +
%codes% - коды адресов для пересчета стоимости доставки. Формат: (1,2,3,...). %RecalcUserCode% - код пользователя запустившего пересчет (актуально для отложенных пересчетов).
 +
Функция должна вернуть коды адресов, допущенных к пересчету в формате: (1,2,3,...)
 +
 
 +
<source lang="sql">
 +
<?>
 +
rem('2023-12-04 Sergey.  Отключаем перерасчет стоимости доставки у корреспонденций в статусе - проверено,
 +
  если у пользователя нет права Счета-изменять. Тикет 79954.
 +
  Блокировка работает в связке с тикетом 77995.');
 +
new('TSelfADO', 'DB');
 +
DB.OPEN('SELECT a.code FROM courier.address a
 +
  LEFT JOIN courier.users u ON u.code=%RecalcUserCode%
 +
  LEFT JOIN courier.`userrules` ur ON ur.`GroupId`=u.grup AND ur.`RuleType`=1 AND  ur.newruleid =78  -- RSA
 +
  WHERE ((a.state1<>8) OR (a.state1=8 AND ur.state="T")) AND a.code in %code%');
 +
DB.ParseForIn('CODE')
 +
</source>
 +
 
 +
 
 +
'''OnRecalcBoldCntInFrame''' - срабатывает в карточке тарифа при перемещении курсора зоны. Возвращает целочисленное значение, равное количеству доставленных корреспонденций у клиента за предыдущий месяц. Срабатывает только при открытии карточки тарифа из карточки клиента. %ClientCode% - код клиента. %ZoneCode% - код зоны.
  
OnEveryCloseApp - выполняет при закрытии программы.
+
'''ChangeStatusColor''' - подменяет цвет фона сообщения в строке статуса в форме приема корреспонденции. Возвращает целочисленное значение - новый цвет фона, 0 - если цвет менять не нужно. Входящие значения: %code% - входящее значение цвета. Остальные переменные - булевского типа - отражают состояние Настроек: %Renum% - Перенумеровывать, %IgnoreDblScan% - Игнорировать ошибки повторного сканирования, %PrintNakl% - Печатать накладные, %Given% - Выдавать отправления, %PrintFiles% - Печатать файлы, %BarLine% - Включить поддержку штрих-кодовой линейки, '%CreateTrans% - формировать кассовые чеки.
  
OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.
+
'''GetLusrSQL''' - переопределяет столбец "Изменивший пользователь" в истории изменений. Должен возвращать часть SQL запроса для столбца lusr. Входящее значение %code% содержит код таблицы, для которой строится SQL-запрос истории.

Текущая версия на 07:15, 10 октября 2024

Настройка для печатной документации

CustomGivnAct - Функция позволяет заменить печатную форму, акта передачи материальных ценностей (печать из выдачи) на пользовательскую. Включить использование этой возможности можно в переменных "Справочники" -> "Переменные" -> "Печать" -> "Акты передачи курьеру" -> "Печатная форма акта: Пользовательская". Объявленные переменные %code% - коды записей в выдаче которые необходимо распечатать %docdate% - дата установленная в выдаче %dockurier% - ФИО курьера показанного в выдаче %dockurierfull% - Значение выбранного элемента в дереве (если есть выбранный узел дерева , иначе фио курьера)

Пользовательская форма акта, будет печататься только по заказам со статусом "На руках".

OnBeforePrintNakls - Вызывается перед печатью накладных, содержит %code% - коды всех адресов (через запятую).

OnAfterPrintNakls - Вызывается после печати накладных, содержит %code% - коды всех адресов (через запятую).

OnBeforePrintOneNakl - Вызывается перед печатью накладной, содержит %code% - код адреса.

OnAfterPrintOneNakl - Вызывается после печати накладной, содержит %code% - код адреса.

OnBeforePrintSticker - Вызывается перед печатью наклейки, содержит %code% - код адреса, %barcode% - ШК наклейки.

OnAfterItemPrint - Вызывается после печати наклейки из карточки номенклатуры. Поддерживает поля ввода - input. Содержит %code% - код номенклатуры item.code, %Naimen% - наименование, %country% - название страны, %Count% - указанное количество копий к печати.

PrintCustomSticker - Функция позволяет установить пользовательскую печатную форму для наклеек (из интерфейса "Печать ведомостей/наклеек"). Вызывается если выбран тип наклейки 15 (переменная StickerForm). Содержит %RectLeft%, %RectTop%, %RectRight%, %RectBottom% - границы прямоугольника на холсте принтера, в которые надо печатать (для поддержки табличной печати на A4), %RecNumber% - номер текущей записи датасета, %CurrentBarCode% - ШК, рассчитанный в зависимости от параметров в интерфейсе "Печать ведомостей/наклеек".  %ACopyNo% - номер копии, нумерация с 1. %KolvoStr% - Стандартный текст "текущее место/всего мест", с учетом возможной печати этикетки на одно место из нескольких. Также содержит весь датасет, использующийся в других типах наклеек. В момент вызова функции, принтер уже запущен и начат документ, объект TPrinter в функции создавать не нужно, необходимо только создать объект TCanvas, он создастся как ссылка на текущий холст принтера.

PrintItemSticker - Вызывается перед печатью наклейки из карточки номенклатуры, для возможности распечатать уникальную наклейку для номенклатуры по заложенным в допвозможности условиям. Содержит %clientbar% - ШК наклейки. Если наклейка распечатана из допвозможности возвращает true, в противном случае false и будет распечатана стандартная наклейка, заложенная в системе

ChangeSchetDetailQuery - Вызывается формировании / пересчете счета. Возвращает строку разбитую через CRLF на две. Первая строка заменяет поля в запросе по детализации счета, вторая меняет строку группировки. Обязательные поля: zakazcnt - кол-во заказов, price - стоимость курьерских услуг, cnt - количество, pr - общая стоимость курьерских услуг.

OnAutoPrintManSticker - вызывается перед автопечатью сопроводительного документа к манифесту при заполнении номера пломбы (такая возможность включается уставкой печатаемой формы в переменной AutoPrintManSticker), содержит %code% - код манифеста, %mnf_date% - дату манифеста, %transporter% - код перевозчика, %store% - код филиала-получателя манифеста. Если доп.возможность возвращает true - автопечать происходит, false - нет.

OnBeforePrintAddresses - Вызывается из формы печати ведомостей/наклеек после нажатия на кнопку "ОК", содержит %code% - коды всех адресов (через запятую).

Настройка всплывающих окон

OnGivnStateChanged - Вызывается в транзакции при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора). Переменная %RetNotScanned% принимает значение true, если при установленной переменной "Запрашивать возвратные документы при приеме" = "Требовать маркировки наклейкой" пользователь не стал сканировать наклейку.

OnAfterGivnStateChanged - Вызывается после транзакции, при изменении статуса выдачи. В параметре %code% указан код выдачи. В %pickupDocId% указан код на таблицу docs, документ приема забранных корреспонденций у курьера (доска приема при закрытии забора)

OnBeforeAddressSave - Вызывается перед сохранением изменений в карточке корреспонденции. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог addressrecord в доп. услугах). . Если результат функции -1, то происходит отмена сохранения без ошибки (abort).

OnBeforeBaseSave - Вызывается перед сохранением изменений в карточке срочного заказа. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметра передан объект fieldlist (объект полный аналог таблицы base). Теги %date_put%, %time_put%, %message% - содержат дату вручения, время вручения и инфо о доставке соответственно. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).

OnAfterAddressSave - Вызывается после сохранения карточки корреспонденции в транзакции. Тег %code% - равен коду адреса; %Form3FrameMode% равен 1, если корреспонденция заполняется из интерфейса: "Функции - Ввод заявок по фото".

OnBarScan - Скриптовая обработка штрих-кода перед поиском

AfterAddressAcceptance - Событие после приема корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется не в транзакции и есть возможность показывать диалоговые окна. Содержит %Code% - код адреса, %StrBarCode% - отсканированный штрих-код. При вызове из интерфейса доски приема либо приема корреспонденции передается дополнительный тег %NewMass%, который содержит массу проставленную весами, содержит -1 если проставление массы отключено.

BeforeAddressAcceptance - Событие перед приемом корреспонденции на склад (например,заказы - прием корреспонденции). Код выполняется в транзакции. Содержит %Code% - код адреса; %StrBarCode% - отсканированный штрих-код; %mass% - массу, если значение меньше 0 значит весы выключены; %l%, %w%, %h% - габариты; %MultiBarCode% - истина если это наклейка на место; %SetKolvo% - проставлять принятые места, место может быть уже принято; %ClientCode% - код клиента (clients.code); %PackCode% - код места (packages.code) . Если функция возвращает значение больше 0, то это будет новой массой места или корреспонденции.

OnAddToShippingPlace - событие после добавления корреспонденции в мешок манифеста. Код выполняется в транзакции. Содержит %сode% - код адреса, %BarCode% - штрих код который отсканировали,%ShippingPlace% - код мешка

GetTypeShippingPlace - событие перед добавлением корреспонденции в мешок манифеста. Задача события распределить корреспонденцию между мешками. Результат функции код мешка, в который необходимо поместить корреспонденцию. Содержит  %сode% - код адреса.

OnBeforePlanToManifest - событие перед планированием корреспонденции в манифест. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %AddrList% - список кодов адресов через запятую. Объявление события отменяет системную проверку на возможность доставки адреса филиалом получателя, ее нужно реализовывать в этом событии.

OnBeforeScanToManifest - событие перед добавлением корреспонденции в мешок манифеста. Предназначено для дополнительных проверок. Выполняется до транзакции. Содержит %code% - код манифеста, %Address% - код помещаемого адреса

OnBeforePlanning - событие перед планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) планируемых корреспонденций.

OnAfterPlanning- событие после планирования планированием одного или нескольких отправлений на курьера. Содержит %сode% - код курьера, %AddressCodes% - код(ы) фактически запланированных корреспонденций.

DAILY - задание выполняемое один раз в день

OnGivnKurierStateChanged - событие вызывается после изменений данных со слов курьера (статуса, времени или причины недоставки). Вызывается даже при получении данных из мобильного приложения курьера. В событии запрещено показывать диалоги, т.к. это может остановить синхронизацию данных с ЛК. Содержит %сode% - код выдачи.

OnBeforeGivnStatus - событие срабатывает перед установкой статуса выдачи, не в транзакции. В параметре %code% указан код выдачи, %status% - устанавливаемый статус,%kurier% - код курьера, %date% - дата выдачи, %address% - код адреса

OnBeforeClientSave - событие срабатывает перед сохранением изменений в карточке клиента. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит ещё не сохранённую информацию о карточке клиента, а так же все её пользовательские поля. Если результат функции -1, то происходит отмена сохранения без ошибки (abort).

OnAfterClientSave - событие срабатывает после сохранения изменений в карточке клиента. Код выполняется в транзакции. В качестве параметров переданы %code% (содержит код клиента) и объект fieldlist (полный аналог addressrecord в доп. услугах), который содержит сохранённую информацию о карточке клиента, а так же все её пользовательские поля с предыдущими значениями, которые можно получить через функцию _Former('VarCode', значение, 'VarValue')

OnBeforeBasePutCheck - событие срабатывает при проставлении галки на вкладке срочных заказов. Код выполняется не в транзакции и есть возможность показывать диалоговые окна. В параметре %code% указан код срочного заказа, а в параметре %BasePutCheckType% указан тип проставления: 0 - если галка, 1 - если плюс. Если результат функции -1, то отмена выполняемой функции (abort).

OnAfterCreateSpecialSMA - событие срабатывает после создания нового АПД для клиента. Код выполняется вне транзакции, потому есть возможность показывать диалоговые окна. В качестве единственного параметра %code% передается код созданного АПД.

OnBeforeReturnIncome - Событие перед приемом возврата на вкладке выдача. Код выполняется вне транзакции. Содержит %Code% - код адреса. Если функция возвращает значение больше 0, то это будет массой возврата корреспонденции, а если это значение больше массы корреспонденции, то будет использовано в качестве массы места

OnBeforeCreatePickup - Событие перед созданием забора правой кнопкой мыши в списке заказов. Код выполняется вне транзакции. Содержит %Code% - код заказа. %FromCompany% - компания, у которой осуществляется забор (поле target), %FromAddress% - адрес забора

Настройка документов

CustomAddressPrnForm2 - Кастомная реализация упрощенной печатной формы. В карточке заказа установлена галка Простые, и установлена переменная "Справочники" -> "Переменные" -> "Печать" -> "Упрощенные печатные формы" -> "Тип упрощенной печатной формы: 5"

GetTypeShippingPlace - Выполняется при помещении корреспонденции в мешок манифеста. Содержит %code% - код корреспонденции. Возвращаемое значение это код мешка (shippingpalce.code), если его указать , то это изменит мешок, в который будет помещена корреспонденция.

OnShelvingBarScan - Обработка отсканированного штрих-кода при комплектации.

AdditionalStringForSMA - задает дополнительные условия для формирования АПД (наиболее часто: разделения актов на нал. и безнал, помимо этого практически неограниченные возможности по изменению условий для отбора корреспонденций в акт, учета их доставленности и т.п.) Содержит %code% - код клиента, переменную %ActPayType% со значениями типов оплаты входящих в акт отправлений: "nal" - наличный, "bnal"- безналичный,"all" - все, а ткаже %ActDateTo% - с датой, до которой создается акт. Может возвращать строку, разделенную символами переноса строки. (На 17.09.2021 в возвращаемой строке предусмотрен 1 символ переноса, т.е. строка состоит из двух частей.) В этом случае часть строки до первого переноса будет использоваться в запросе как доп. условие отбора, часть строки после первого символа пеерноса - в качестве дополнительного условия для определения "выполненности" доставки (поле specialsma.Made). С помощью второго модификатора можно сделать например так, чтобы корреспонденции с незаполненными датой/временем вручения считались доставленными.

CustomBillDetaling - Кастомная детализация счета. Установка переменной $CancelCustomDetail в true, включает вывод стандартной детализации. В переменной $schet - код счета по которому строится детализация.

OnSchetChanged - Выполняется при удалении счета и его изменении. Содержит %code% - код счета schet.code

ExceptionsForAPK - Задает дополнительные критерии поиска корреспонденции при формировании акта передачи корреспонденции(АПК). Содержит %Boxes% - псевдоним таблицы вложений используемый в запросе. Функция возвращает !ДВЕ! части sql запроса разделенных CRLF. При отборе в АПК используется два запроса. Первый - отбирает не доставленные заказы и возвраты документов, в него будет подставлено условие слева от разделителя CRLF. Второй запрос отбирает возращенные товары, в него будет подставлено условие справа от разделителя CRLF или вся строка условий если в строке нет разделителя CRLF (оставлено для обратной совместимости, в версии программы до 1115 фильтрация была только во втором запросе). %AdditionalParam% - дополнительный параметр, который можно установить в интерпретаторе при вызове функции CreateAddressTransferAct.

 пример кода по умолчанию, фильтр только по второму запросу,   вложение с названием "Доставка"  - не попадает в АПК
 <?>
   SET($ExcStr,' and %Boxes%.Name not like ''%Доставка%'' '); 
   $ExcStr
 пример для изменения фильтрации сразу у двух запросов:
 <?>
    SET($WHERE1,''); rem('условие отбора не доставленных и возврата документов');
    SET($WHERE2, ''); rem('условие отбора возврата товаров');
    $WHERE1 + CHAR(13) + CHAR(10) + $WHERE2

OnOrderCountCalc -Для расчета стоимости доставки необходимо учитывать кол-во отправлений. Доп. возможность возвращает часть SQL запроса, уточняющий условия поиска. Содержит %code% - равен значению переменной "Считать кол-во отправлений по текущему месяцу" (UseCurrentMonthCount, нет - 0, да - 1)

OnGetZakazCount - подменяет стандартный подсчет количества отправлений для расчета стоимости доставки (в том чисте отменяется вызов доп.возможности OnOrderCountCalc). Должна возвращать кол-во корреспонденций. В процедуру передаются следующие переменные: %CntAccType% - вид подсчета: 0-по заказу, 1-за месяц по клиенту; %code% - код клиента (обязателен для вида подсчета 1); %ZakazDate% - дата заказа; %CountByMonthType% - способ подсчета заказов за месяц (1-по текущему месяцу; 0 - по предыдущему); %UseCurrentUrgency% - 1:подсчитывать только корреспонденцию определенного режима срочности; %Mode% - этот режим срочности (при подсчете по заказу учитываются так же связанные режимы срочности, указанные в параметре 5 режима срочности в таблице статусов); %DatePut% - дата доставки (добавлено для альтернативных видов подсчета, может быть null); %SeparateIntercityDelivery% - 1:не учитывать междугородние доставки; В функцию так же передается объект fieldlist.

OnSMABarcodeScan - событие вызывается при сканировании штрихкода АПК в списке актов. %code% - код АПК (sendmoneyact.code)

OnPaintSMAColumns - вызывается при прорисовке таблицы в форме списка АПД/АПК. В функцию передается DataSet, содержащий поля таблиц SendMoneyAct и Clients, а так же пользовательские поля клиентов, называющиеся ufX, где X - номер поля (в статусах). Функция должна возвращать строку следующей структуры: Поле1_таблицы, Цвет_фона, Поле2_таблицы, Цвет_фона и т.п. Возврат нечетного числа параметров эквивалентен возврату пустой строки (цвет не меняется)

CustomZPDetail - кастомное дополнение к детализации зарплаты (Специальная надбавка). Вызывается из скриптовой детализации зарплаты. Предназначено для расчета и вывода в детализацию значения какой-либо специальной надбавки, определенной пользователем. Входящие параметры: %code% - код платежа в таблице kurier_pays, %kurier% - код курьера. Возвращает строку, где через запятую указаны Название надбавки и ее значение. Если эта строка не содержит двух параметров - ничего не выводится. .

Настройка вида маркера

Настройки находятся в "Отчеты" -> "Дополнительные возможности" - "Системные".

В функции передается объект Table2Map типа TFieldObject. Получить поля с примерами значений из него можно например так:

showmessage(table2map._GETTABLEINFO)

(текст большое сообщения можно скопировать в буфер комбинацией Ctrl-C).

Для доступа к данным пользуйтесь только этим объектом, т.к. любое обращение к базе приведет к значительному снижению скорости работы.

Так же текущее состояние окна карты доступно через переменные:

$PlanDate - Выбранная дата, на которую планируется.

$KurierCode - Код выделенного курьера.

$MetroCode - Код выделенной станции метро (маршрута).


Обратите внимание, что все ошибки, возникающие при отрисовке, подавляются системой. Поэтому, если вы допустите ошибку в скрипте, он просто не будет работать, никаких сообщений вы не увидите. Для отладочных целей можно заменить ошибки на сообщения такой конструкцией:

set($s, try( 
 error('вот тут ошибка, которую вы увидите в виде сообщения');
));
if($s, showmessage($s), );


MapObjectFigure - Доп. возможность позволяет установить вид маркера на карте. Результат определяет фигуру: 1 - перевернутый треугольник (острым концом вниз), 2 - треугольник, 3 - увеличенный перевернутый треугольник (острым концом вниз), чтобы квадрат не мог его перекрыть, 4 - квадрат, 5 - ромб, все остальное круг. Ромб поддерживается с версии 960.
Например:

if(table2map.zabor, 2, if(StrDateToFloat(table2map.DatePeriod) = $PlanDate, 3, 4))

Выводит треугольник, если отправление - забор. Иначе - если дата план отправления равна дате, на которую планируется - увеличенный перевернутый треугольник, иначе - квадрат.

MapObjectColor - Доп. возможность позволяет установить цвет маркера на карте. При помощи данных параметров можно создать условия отображения маркеров.

Для доступа к настройкам доступны переменные:

$Color

$DefaultColor

$PlanedColor

$SelectedPlanedColor

$GetKurierColor

Например:

if((table2map.kurier<20)*(StrDateToFloat(table2map.DatePeriod) = $PlanDate), 16753920, $color)

Не запланированные отправления на текущий день будут отображаться выбранным цветом, иначе - цветом по-умолчанию.


Речь диктора

OnGivnVoice - выполняется после изменения статуса выдачи. Параметр %code% содержит код выдачи, %State% содержит код устанавливаемого статуса, %OldState% - код старого статуса (0 если не было). Позволяет отключать стандартный звук ОК, если возвращает не 0.

OnDashboardManifestVoice - выполняется после сканирования адреса в интерфейсе приёма манифестов. Параметр %code% содержит код корреспонденции. Позволяет отключать стандартную диктовку программой (код курьера, вес и т.д.), если возвращает не 0.

Настройка мобильного приложения

Скрипты

OnEveryStartApp - выполняется при запуске программы.

OnEveryCloseApp - выполняет при закрытии программы.

OnBarScan - выполняется при получении ШК со сканера, в параметре %code% - получаем ШК. Если функция, что-то возвращает, то система будет использовать возвращенный ШК.

OnMapBeforeGeolocation - Вызывается перед отображаем адреса на карте. В функцию передается объект fieldlist.

Пример скрипта, переводящий адреса в НЕ найденные на карте, если станция метро НЕОПЕРЕДЕЛЕННАЯ.
<?>
if(station=0, 
  _set('lon', null);
  _set('lat', null);
  _set('searchCoordinate', 'F');
,0)


OnSyncInsert - Выполняется для каждой добавленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.

OnSyncUpdate - Выполняется для каждой обновленной записи при синхронизации с ЛК. Содержит %tablename% - название синхронизируемой таблицы.

Если при получении новых адресов с ЛК, нужно поменять любое поле в таблице address, то необходимо использовать сразу два события OnSyncInsert и OnSyncUpdate. Адреса без вложений обрабатываются событием OnSyncInsert, адреса с вложениями будут обрабатываться событием OnSyncUpdate. Это связано с механизмом синхронизации, если в событии OnSyncInsert, проапдейтить поле в адресе с вложениями, то данные могут потеряться. 
Когда адрес без вложений, то у него сразу station = 65535 и можно апдейтить. Если с вложениями, то у него сначала station = 65534, а после синхронизации вложений есть отдельный апдейт на 65535. Пример кода, для апдейта поля в адресах, события OnSyncInsert и OnSyncUpdate:


<?>
rem(ticket 23584, 23583); 
if( ('%tablename%'='address'), 
  query('UPDATE address a 
    JOIN trace t ON t.address=a.code AND t.state=1 
    JOIN zakaz z ON z.code=a.zakaz
  SET 
    a.mode = IF(z.source=646, 3, 2)
  WHERE 
    a.code = %code%
    AND a.station=65535
    AND (
     (z.source=646 AND a.mode<>3) OR 
     (A.DATE_PUTN=DATE(t.Statetime) AND a.mode=1) OR
     (A.DATE_PUTN=DATE_ADD(DATE(t.Statetime), INTERVAL 1 DAY) AND TIME(t.Statetime) > "21:59:59" AND a.mode=1)
    )')
, '');

OnCalcSalary - Событие происходит после начисления зарплаты курьеру.  %code% - код созданного начисления kurier_pays.code ; %dateto% - дата до которой рассчитали зарплату; И отдельно части зарплаты:  %profit% -итоговая сумма; %Zarab% - сдельная часть; %Oklad% - оклад; %Friends% - выплаты за приведенных; %Other% - разное; %AgentMoney% - агентское вознаграждение;  %StandingMoney% - Доплата за стаж; %Bonus%, %Shtraf% - бонусы и штрафы.

OnTicketSetCusr - Пользовательский скрипт перед назначением ответственного в тикетах. %code% - код тикета; %Cusr% - код назначаемого пользователя (может быть равно NULL)

OnCreateAddressForActDelivery - Пользовательский скрипт вызывающийся в момент формирования корреспонденции на доставку АПД/АПК. Позволяет существенно доработать формируемую корреспонденцию. %code% - код акта sendmoneyact.code, %Client% - код клиента; %delivery% - флаг определяющий корр. на доставку акта (1, значение по умолчанию) или забор акта. fieldlist - объект с полями адреса (повторяет структуру таблицы address), dataset - объект дополнительными полями функции. Объект fieldlist является классом TMyFieldList и позволяет менять значения полей. Также измененный адрес можно сохранить прямо в событии, или он будет сохранен автоматически после выполнения скрипта. Для сохранения адреса используйте метод _save.

Пример, для клиента с кодом 3360, в корреспонденцию на доставку АПК, добавляем список корреспонденций попавших в него во вложения.
 <?>
 if((client=3360)*(ActType=2),
  rem('Ticket 70827, 2022-09-07 Anatoly and Sergey');
  set($addresscode, fieldlist._save);
  query('insert boxes (address, pos, name) 
   select '+$addresscode+' AS address,  @q := @q + 1 AS pos,  
        CASE WHEN a.client_id <> '' THEN a.client_id WHEN a.strbarcode<>'' THEN a.strbarcode ELSE CONCAT(a.zakaz,"-", a.number) END AS `name`
   FROM addressfld af
   JOIN address a ON a.code=af.`address` ,(SELECT @q := 0 ) p
   WHERE 
    af.`AddrTransferCode` = %code% AND af.`ReceivedInTransfer` > 0');
 ,0);

OnAfterPreassemblyScan - событие происходит после сканирования складского товара в корреспонденцию на вкладке «Склад». %code% - код корреспонденции, %ItemCode% - код товара, %ItemCnt% - количество отсканированного товара.

OnGeocodeScript - скрипт подключения к геокодеру клиента. Используется при включенной переменной "Справочники" -> "Переменные" -> "Подключения" -> "Карты" -> "Геокодирование" -> "Протокол геокодирования: Клиентский (скрипт OnGeocodeScript)". Имеет встроенные переменные:

  • $address - адрес для геокодирования;
  • $town - код города;
  • $street и $home - упрощенный адрес;

Скрипт должен вернуть следующие переменные :

  • $lon и $lat - координаты ;
  • $goodaddress - нормализованный адрес (не обязательно);
<?>  
  set($response,  HTTPPOST('http://XXXXXXXX',
    '{"query":'+ FormatTextJSON($address)+ '}', 
    '','','','',
    'post', 'application/json', 10000));
  
  if($response!'',
    new('TJSON', 'json');
    set($e, try(
      json.SetText($response);
      json.OpenChild('geo_data');
      json.OpenChild('mid');
      set($lat, sqlfloat(json.ChildNodeValue('lat')));
      set($lon, sqlfloat(json.ChildNodeValue('lon')));
    ));
    if($e, error('Ошибка в разборе ответа: '+$e), '');
  , error('Пришел пустой ответ от геокодера')
  );

OnFilterAddressRecalc - Позволяет отфильтровать коды адресов, для которых можно пересчитать стоимость. Событие происходит перед расчетом стоимости доставки из интерфейса программы для: актов, счетов, заказов, и т.д. Не работает для пересчета запускаемого из самой карточки корреспонденции. %codes% - коды адресов для пересчета стоимости доставки. Формат: (1,2,3,...). %RecalcUserCode% - код пользователя запустившего пересчет (актуально для отложенных пересчетов). Функция должна вернуть коды адресов, допущенных к пересчету в формате: (1,2,3,...)

<?>
 rem('2023-12-04 Sergey.  Отключаем перерасчет стоимости доставки у корреспонденций в статусе - проверено,
  если у пользователя нет права Счета-изменять. Тикет 79954.
  Блокировка работает в связке с тикетом 77995.');
 new('TSelfADO', 'DB');
 DB.OPEN('SELECT a.code FROM courier.address a
  LEFT JOIN courier.users u ON u.code=%RecalcUserCode%
  LEFT JOIN courier.`userrules` ur ON ur.`GroupId`=u.grup AND ur.`RuleType`=1 AND  ur.newruleid =78  -- RSA
  WHERE ((a.state1<>8) OR (a.state1=8 AND ur.state="T")) AND a.code in %code%');
 DB.ParseForIn('CODE')


OnRecalcBoldCntInFrame - срабатывает в карточке тарифа при перемещении курсора зоны. Возвращает целочисленное значение, равное количеству доставленных корреспонденций у клиента за предыдущий месяц. Срабатывает только при открытии карточки тарифа из карточки клиента. %ClientCode% - код клиента. %ZoneCode% - код зоны.

ChangeStatusColor - подменяет цвет фона сообщения в строке статуса в форме приема корреспонденции. Возвращает целочисленное значение - новый цвет фона, 0 - если цвет менять не нужно. Входящие значения: %code% - входящее значение цвета. Остальные переменные - булевского типа - отражают состояние Настроек: %Renum% - Перенумеровывать, %IgnoreDblScan% - Игнорировать ошибки повторного сканирования, %PrintNakl% - Печатать накладные, %Given% - Выдавать отправления, %PrintFiles% - Печатать файлы, %BarLine% - Включить поддержку штрих-кодовой линейки, '%CreateTrans% - формировать кассовые чеки.

GetLusrSQL - переопределяет столбец "Изменивший пользователь" в истории изменений. Должен возвращать часть SQL запроса для столбца lusr. Входящее значение %code% содержит код таблицы, для которой строится SQL-запрос истории.