Пользовательскиe sql-скрипты
Содержание
Общие сведения
Пользовательские скрипты - это файлы *.sql, которые содержат текст с набором SQL-команд. Данные файлы следует размещать в папке ARTICUL\Addons - для платформонезависимых скриптов, ARTICUL\Addons\mssql - для MSSQL-скриптов, ARTICUL\Addons\sqlite - для SQLite-скриптов, ARTICUL\Addons\msacc - для MSAccess-скриптов. При наличии одноименных файлов в ARTICUL\Addons и подпапке текущего типа БД приоритет будет у последней. Артикул активирует меню "Сервис/Выполнить пользовательский скрипт", если при запуске обнаруживает хотя бы один такой файл. Синтаксис и оформление таких скриптов производится также, как в окне "Выполнение SQL команд" (меню "Сервис/Выполнить SQL запрос", Ctrl+Alt+S). После выполнения скрипта данные на закладке "Инвойс" главного окна Артикула будут полностью обновлены для немедленого отображения возможных внесенных в инвойс изменений.
Оформление
Для MSSQL и SQLite поддерживаются специальные комментарии, однако для MSAccess никакие комментарии не поддерживаются:
- Caption - определяет наименование запускающего данный скрипт пункта меню:
-- Caption: "Наименование"=>"Примечание3" (для выделенных товаров)
- Hint - определяет подсказку запускающего данный скрипт пункта меню:
-- Hint: Перенос значения колонки "Наименование" в колонку "Примечание3"
Если скрипт не содержит специальных комментариев, то наименование пункта меню будет образовано из имени файла без расширения.
Синтаксис
В тексте запросов допускается использовать (неограниченное кол-во раз) следующие входные параметры:
- :sInvNum - номер текущего инвойса.
- :nPOListID - идентификатор текущей/выделенной записи товара в инвойсе, если скрипт содержит данный параметр и на закладке "Инвойс" выделено несколько товаров, то скрипт будет выполнен один раз для каждого выделенного товара.
- :nPOListWhere - текущий набор условий фильтров для товаров инвойса.
Перед непосредственным выполнением скрипта каждый такой параметр будет заменен на соотв-щую sql-константу (строковую или числовую), либо целое sql-выражение, как в случае с :nPOListWhere.
Рекомендуется заканчивать каждое SQL-предложение символом ";". Не смотря на то что в большинстве случаев будет работать и без этого, но иногда могут возникнуть проблемы. Для MSAccess еще и каждое SQL-предложение должно находится на отдельной строке, за которой следует строка, которая содержит только "GO".
Примеры
- MSSQL:
-- Caption: "Наименование"=>"Примечание3" (для выделенных товаров)
-- Hint: Перенос значения колонки "Наименование" в колонку "Примечание3"
update POList set Memo3=Name where ID=:nPOListID;
update POList set Memo3='Из колонки Наименование:'+Memo3 where ID=:nPOListID;
- SQLite:
-- Caption: "Наименование"=>"Примечание3" (для выделенных товаров)
-- Hint: Перенос значения колонки "Наименование" в колонку "Примечание3"
update POList set Memo3=Name where ID=:nPOListID;
update POList set Memo3='Из колонки Наименование:'||Memo3 where ID=:nPOListID;
- MSAccess:
update POList set Memo3=Name where ID=:nPOListID;
GO
update POList set Memo3='Из колонки Наименование:'+Memo3 where ID=:nPOListID;