# Смарт-действия и скрипты — Решение проблем
Справочник по типовым проблемам смарт-действий, Lua-скриптов и HTTP-интеграций в 1Форме. Для линии поддержки: симптом → проверки → решение → когда эскалировать в 1Ф. Разделы: Lua API, не срабатывающие смарты, внешние сервисы, баги редактора AdminSPA.
## 1. Lua-скрипты
Секции организованы по типам проблем: **Симптом**, **Что проверить**, **Решение**, **Когда обращаться в поддержку 1Ф**. Самая частая тема обращений — Lua-скрипты.
### 1.1 Ошибка выполнения Lua-скрипта — 1.2 Как использовать метод HTTP:post_files в Lua
**Симптом:** «ошибка выполнения LUA», «исключение не перехватывается pcall()», «401 ошибка при работе в Lua».

**Что проверить:**

- Текст ошибки — точная формулировка из лога
- Контекст скрипта — какой метод вызывается
- Версия системы — API Lua может отличаться между версиями
- Авторизация — если Lua обращается к внешнему сервису, корректны ли реквизиты подключения

**Когда обращаться в поддержку:** если ошибка в самом API Lua (не в пользовательском коде) — обратиться в поддержку 1Ф.

**Симптом:** «нужен пример HTTP:post_files», «как отправить файл через Lua».

**Решение:** метод `HTTP:post_files(url, files, headers)` отправляет файлы через multipart/form-data. Файлы передаются как массив объектов с полями `name`, `content`, `filename`. Примеры — в документации Lua API.
### 1.3 CreateFileVersionCopy не работает из Lua — 1.5 Различное поведение SMART и Lua
**Симптом:** «не работает CreateFileVersionCopy через Lua».

**Что проверить:**

- Параметры вызова — FileID, TaskID
- Права — может ли пользователь создавать версии
- Версия системы

**Когда обращаться в поддержку:** если параметры корректны — баг API.

**Симптом:** «как подписать задачу через Lua?»

**Решение:** используется метод `Task:sign(signId, resolution, comment)`. Требует корректный ID подписи и права текущего пользователя.

**Симптом:** «смарт и Lua дают разный результат для одного и того же действия».

**Что проверить:**

- Контекст выполнения — смарт выполняется в контексте системы, Lua — может выполняться в контексте пользователя
- Порядок — смарт-действия выполняются последовательно, Lua может обходить очередь
- Транзакции — смарт обёрнут в транзакцию, Lua может работать вне неё

**Когда обращаться в поддержку:** если поведение объективно разное — обратиться в поддержку 1Ф с точным описанием обоих сценариев.
### 1.6 Подключение библиотек Lua через include / репозиторий Lua
**Симптом:** «ошибка при подключении библиотеки Lua через include», «как использовать репозиторий Lua-скриптов?»

**Что проверить:**

- Имя библиотеки — точное совпадение с именем скрипта в репозитории
- Доступность репозитория Lua — настроен ли на площадке
- Синтаксис include — `require("имя")` или `include("имя")` в зависимости от версии

**Когда обращаться в поддержку:** если include вызывает ошибку при выполнении при корректном имени — обратиться в поддержку 1Ф.

**Симптом:** «HTTP:send_http_request перестал работать», «Lua HTTP-запрос возвращает ошибку».

**Что проверить:**

- Версия системы — метод мог измениться между версиями
- Параметры вызова — URL, метод, заголовки, тело
- Доступность внешнего сервиса с сервера 1Формы
- Лог ошибок — точный текст исключения

**Когда обращаться в поддержку:** если параметры корректны, сервис доступен, но метод возвращает ошибку — обратиться в поддержку 1Ф.

**Симптом:** «SMART:execute_action('SetPriority') не принимает значение», «execute_action игнорирует параметр».

**Что проверить:**

- Допустимые значения параметра — enum или числовой ID
- Версия системы — набор допустимых значений может отличаться
- Синтаксис вызова — формат передачи параметра

**Когда обращаться в поддержку:** если значение валидно по документации, но не принимается — возможная ошибка — обратиться в поддержку 1Ф.

---
## 2. Смарт-действия — не срабатывают
Частая тема обращений.
### 2.1 Смарт-действие не срабатывает — 2.2 Автоматизация не обновляет ДП Таблица
**Симптом:** «смарт-действие не выполняется», «автоматизация не работает».

**Что проверить:**

- Событие-триггер — правильно ли выбрано событие (создание, изменение, переход)
- Условия (фильтр) — выполняется ли условие для данной задачи
- Активность — включено ли правило
- Категория — привязано ли к нужной категории
- Лог смарт-выполнения — есть ли записи

**Симптом:** «после отработки автоматизации ДП Таблица не обновляется».

**Что проверить:**

- Тип действия — какое действие меняет таблицу
- Денормализация — обновляется ли
- Кеш — обновить страницу после выполнения
### 2.3 Подтверждение перехода игнорируется при автоматизации
**Симптом:** «настроено подтверждение перед переходом, но если переход делается автоматизацией — подтверждение не запрашивается».

**Решение:** ожидаемое поведение — автоматизация выполняется без участия интерфейса, поэтому подтверждения пропускаются. Если нужна проверка — использовать условие в смарт-правиле.

**Симптом:** «при смарт-отмене на комментарии не выводится сообщение об ошибке».

**Что проверить:**

- Настройка текста ошибки в смарт-правиле
- Контекст — отмена на комментарии vs на переходе (разные механизмы)
### 2.5 Смена текста в «Большом тексте с форматированием» автоматизацией
**Симптом:** «автоматизация меняет текст в БТсФ, но изменение видно только после перезагрузки страницы».

**Решение:** после изменения ДП смартом компонент интерфейса может не обновиться автоматически: значение применяется в БД, но интерфейс не всегда получает сигнал об обновлении конкретного ДП. Помогает обновление страницы.

**Симптом:** «смарт-действия на переходе отработали, но задача осталась в старом состоянии», «переход не выполняется».

**Что проверить:**

- Лог автоматизации — есть ли ошибка после выполнения действий
- Условия перехода — все ли обязательные поля заполнены
- Смарт-отмена — нет ли другого правила, отменяющего переход
- Права — может ли исполнитель совершать этот переход

**Когда обращаться в поддержку:** если все условия выполнены, действия отработали, но переход не записался — обратиться в поддержку 1Ф.
### 2.7 Ошибка смарт-действия «Создать задачу»
**Симптом:** «ошибка при выполнении действия "Создать задачу"», «задача не создаётся автоматизацией».

**Что проверить:**

- Обязательные ДП целевой категории — все ли заполнены в настройке действия
- Права — может ли пользователь создавать задачи в целевой категории
- Шаблон — корректен ли шаблон создания

**Когда обращаться в поддержку:** если настройка корректна — обратиться в поддержку 1Ф.

**Симптом:** «автоматизация срабатывает не в заданный интервал», «странное поведение настройки интервала».

**Что проверить:**

- Формат интервала — корректны ли единицы (минуты, часы, дни)
- Часовой пояс сервера vs пользователя
- Нет ли нескольких правил с пересекающимися интервалами
### 2.9 Программное добавление орг. единицы в ДП «Выбор пользователей»
**Симптом:** «из смарта нельзя добавить орг. единицу в поле "Выбор пользователей"», «опция "Разрешить добавлять орг. единицы" не работает программно».

**Что проверить:**

- Тип значения — передаётся ли ID орг. единицы в правильном формате
- Настройка ДП — включена ли опция «Разрешить добавлять орг. единицы»

**Когда обращаться в поддержку:** если настройка включена, но через смарт не добавляется — возможное ограничение — обратиться в поддержку 1Ф.

**Симптом:** «как создать пользователя через смарт с ФИО на нескольких языках?»

**Решение:** при создании пользователя через смарт-действие локализованные поля (ФИО) задаются через параметры действия. Формат зависит от версии — уточнить в документации по действию «Создать пользователя».
### 2.11 Как остановить выполнение смарта — 2.12 Смарт-действие «Удалить исполнителей» по условию
**Симптом:** «как прервать работающий смарт?», «смарт зациклился, как остановить?»

**Решение:** остановка через AdminSPA: Автоматизация → найти правило → отключить. Для циклических смартов: отключить правило, дождаться завершения текущего цикла. Принудительная остановка — через перезапуск пула приложения (согласование с администратором).

**Симптом:** «как через смарт удалить исполнителей, которые в отпуске?», «автоматическое удаление исполнителей по условию».

**Решение:** комбинация смарт-фильтра (условие на статус пользователя / отпуск) + действие «Удалить исполнителя». Для массового удаления — Lua-скрипт с перебором исполнителей.
**Симптом:** «в действии "Инициировать произвольное событие" нет контекста пользователя-инициатора», «хочу передать инициатора в произвольное событие».

**Что проверить:**

- Версия системы — контекст инициатора может быть добавлен в новых версиях
- Обходной путь — передать UserID через ДП

**Когда обращаться в поддержку:** запрос на доработку — обратиться в поддержку 1Ф.

---
### 2.13 Строки ДП «Таблица» не записываются смарт-действием
**Симптом:** пакет отработал, но строки в табличном ДП не появились или не изменились; в ленте задачи — сообщение об ошибке.

**Что проверить:**

- «SQL-скрипт содержит конструкцию, запрещённую в смарт-действии» — в SQL попало изменяющее слово: `INSERT`, `UPDATE` и `DELETE` запрещены в действии «Добавить строки ДП Таблица», а `DROP`, `TRUNCATE`, `GRANT` и `ALTER` — во всех трёх действиях.
- «В результате SQL нет колонок вида c{columnId}» — строки в выборке есть, но ни одна колонка не названа по идентификатору колонки таблицы.
- «Результат SQL содержит неизвестную колонку таблицы c{номер}» — такого идентификатора колонки нет в настройках этого табличного ДП.
- «Результат SQL сопоставляет и 'c5', и 'c05' с колонкой таблицы 5» — в выборке две колонки с одним номером в разной записи.
- Отказ без текста про SQL — на площадке включён общий запрет SQL в смартах; действия работают только при выключенном запрете.
- Действия нет в списке — площадка в сертифицируемой редакции (1F Certificate Edition): в неё не входят «Добавить строки» и «Удалить строки».
- Ошибка про несуществующий идентификатор строки у действия «Изменить строки» — в первой колонке выборки стоит не идентификатор строки таблицы, а, например, `TaskID` или `ExtParamID`.
- Строки не видны сразу — обновите страницу задачи: табличный ДП обновляется по сигналу, а не мгновенно.

### 2.13 Смарт-выражение читает старое значение ДП после смарт-действия
**Симптом:** «правило сработало из другого правила, а в выражении старое значение», «смарт-действие изменило параметр, но следующее правило видит прежнее значение».

**Что проверить:**

- версию системы: дефект проявлялся в сборках с 2.268.662 по 2.268.692 включительно, в исправленных сборках не воспроизводится;
- настроена ли на площадке отдельная строка подключения для смарт-выражений — без неё дефект не проявляется;
- идёт ли чтение того параметра, который изменён в этом же каскаде правил или сохранением пачки;
- читается ли значение из денормализованной таблицы категории или из значений параметров — дефект затрагивал оба случая.

**Решение:** обновить систему до исправленной сборки. На дефектных сборках — в правиле-потребителе брать параметр события «Новое значение» вместо чтения значения из базы; это работает только для того параметра, сменой которого запущено правило.

**Когда обращаться в поддержку 1Ф:** если после обновления старое значение всё ещё читается — приложить версию системы, категорию и номера правил.


### 2.14 Скрипт не обрабатывает контекст после переименования или сохранения

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

**Что проверить:**

- сборку площадки: до исправления тип контекста брался из адреса редактора и затирался любым сохранением, на исправленной сборке сохранение тип не меняет;
- откуда скрипт открывали и сохраняли — из действия пакета или из вкладки «Скрипты»;
- фактический тип контекста скрипта — только чтением из базы, не по тому, что показывал адрес редактора;
- запускается ли скрипт из пакета: рабочий запуск из пакета тип контекста скрипта не использует, тип передаёт сам пакет;
- обновлялся ли скрипт по API без поля типа — раньше это записывало «без контекста».

**Решение:** обновить площадку до сборки с исправлением и проставить тип явным вызовом `POST /api/admin/smart/scripts/{id}/context-type` (или пунктом «Тип контекста» в редакторе). Для существующего скрипта при обновлении кода по API поле типа можно не передавать вовсе — значение из базы не изменится.

**Когда обращаться в поддержку 1Ф:** если на исправленной сборке скрипт не видит контекст, хотя тип в базе — «задача», а запуск идёт из пакета категории: приложить версию площадки, идентификатор скрипта, способ запуска и запись из журнала автоматизации.
## 3. HTTP-запросы и внешние сервисы
Частая тема обращений.
### 3.1 Таймаут HTTP-запроса из смарта — 3.2 Авторизация через WSDL / внешние сервисы
**Симптом:** «можно ли увеличить таймаут для смарт-действия "Отправить HTTP-запрос"?»

**Решение:** таймаут настраивается в параметрах действия. По умолчанию — 30 секунд. Для длительных операций рекомендуется асинхронная схема (отправка → ответный вызов сервера).

**Симптом:** «проблема с авторизацией через WSDL внешних сервисов к 1Форме», «401 ошибка».

**Что проверить:**

- Настройки UniversalApi / публикации — корректны ли реквизиты подключения
- Тип авторизации — Basic, Token, Certificate
- Доступность адреса сервиса

**Симптом:** «как настроить приём файла от внешнего сервиса?»

**Решение:** через UniversalApi + очередь событий. Внешний сервис вызывает API 1Ф, файл сохраняется через Lua/смарт-действие «Скачать файл».

**Симптом:** «как безопасно хранить реквизиты подключения внешних сервисов в 1Ф?»

**Решение:** рекомендуется хранить в настройках приложения (AppSettings) или в зашифрованных ДП. Прямое хранение в БД без шифрования — не рекомендуется.

---
## 4. Прочие проблемы автоматизации
### 4.1 Некорректная работа todo list при заполнении автоматизацией — 4.3 Ошибка перехода в папку «Файлы автоматизации»
**Симптом:** «todo list работает некорректно, если заполняется смарт-действием».

**Что проверить:**

- Тип действия — каким действием заполняется todo
- Порядок — не конфликтуют ли несколько действий

**Симптом:** «не работает действие "Открыть ссылку"».

**Что проверить:**

- Формат URL — абсолютный или относительный
- Блокировщик всплывающих окон в браузере — может блокировать открытие
- Контекст — действие работает только в пользовательском контексте (не из фоновых задач)

**Симптом:** «ошибка при переходе в Файлы автоматизации на Диске».

**Что проверить:**

- Версия системы — известный баг в некоторых версиях
- Права администратора

**Симптом:** «в виджете SmartHtml не видно название смарта», «SmartHtml отображается без заголовка».

**Что проверить:**

- Настройка виджета — задано ли отображение названия
- Версия системы — возможный баг рендеринга

---
### 4.5 Генерация файла по шаблону завершается ошибкой про формат числа

**Симптом:** действие «Сгенерировать файл по шаблону» (или кнопка «Сгенерировать по шаблону») отказывает с сообщением вида `The input string '"0"' was not in a correct format`; в интерфейсе вместо текста ошибки может быть общая формулировка о сбое пакета действий.

**Что проверить:**

- в каком значении ищется HTML-таблица: дополнительный параметр «Большой текст с форматированием», текст задачи, результат смарт-выражения или смарт-скрипта;
- что стоит в атрибутах `cellspacing` и `cellpadding` — значение должно быть целым числом;
- не превышает ли значение разумный диапазон: большие величины не преобразуются и дают ту же ошибку;
- сборку площадки: со сборки 2.268 «Скульптор» такие значения формируются; на более старых сборках ошибка означает, что исправления ещё нет.

**Решение:** привести значения отступов к целым числам либо задать отступы стилем, если точное значение не требуется. Правила — в разделе «Значения с HTML-разметкой» документа «Отчёты и печатные формы — паттерны».

**Когда обращаться в поддержку 1Ф:** если в значении целые числа, а ошибка воспроизводится на сборке с исправлением — приложить текст ошибки из журнала ошибок платформы: в интерфейсе он не показывается.


### 4.6 Пакет отработал, а файл Excel не приложился

**Симптом:** действие «Экспортировать данные в Excel» завершилось, но файла в задаче или в дополнительном параметре нет; в ленте задачи — отказ пакета либо, наоборот, «успех» без вложения.

**Что проверить:**

- имя процедуры — входит ли оно в список `ExportDataToExcelAllowedProcedures`; имя вне списка отклоняется до открытия соединения, и в журнале пакета приходит отказ с указанием настройки;
- на PostgreSQL — существует ли в схеме `dbo` функция с именем из списка, и совпадают ли имена её аргументов с `p_`-именами (`p_taskid`, `p_userid`, `p_mode`), которые передаёт действие;
- не содержит ли выборка вычисляемых текстовых колонок — на PostgreSQL это любая текстовая колонка функции, на MS SQL — колонка-выражение: склейка, `CASE`, `ISNULL`, литерал, параметр, `CAST`; действие в этом случае отказывает с текстом «колонка только для чтения»;
- не падает ли процедура после первого набора — если возвращено несколько наборов, а ошибка возникла после второго, действие считается успешным, в задачу вкладывается файл с первым набором, в журнале ошибок записи нет;
- есть ли в базе объект с именем из списка вообще: процедура, удалённая при переносе конфигурации, даёт отказ, похожий на проблему с соединением.

**Решение:** выбирать в процедуре колонки из таблиц и табличных переменных; текст, собираемый выражением, формировать на стороне пакета; инструкции после выборки вынести из процедуры отдельным действием пакета. Список процедур и имена аргументов на PostgreSQL привести к схеме `dbo` и префиксу `p_`.

**Когда обращаться в поддержку 1Ф:** если имя в списке, объект в базе есть, колонки выбраны из таблиц и текст ошибки всё равно воспроизводится — приложить версию площадки, СУБД, текст ошибки из журнала ошибок платформы и текст процедуры. В интерфейсе текст ошибки не показывается.
### 4.7 В редакторе пакета действий пропали пользовательские (кастомные) действия

**Симптом:** «в редакторе пакета нет наших действий», «список типов действий пустой или отдаёт ошибку», «действие пропало после обновления».

**Что проверить:**

- версию площадки: начиная со сборки 2.268 «Скульптор» сбой загрузки не приводит к потере стандартных групп действий — если пропало всё, проверяйте сборку и запись в журнале ошибок;
- журнал ошибок платформы: запись о сбое загрузки пользовательских действий (причина — подключённые сборки с действиями недоступны на сервере приложения);
- состояние сборок: пользовательские действия поставляются модулем, сборка должна быть физически на сервере приложения и совпадать с профилем;
- отличайте стандартные и пользовательские действия: стандартные при таком сбое продолжают работать, поэтому «в пакете остались только встроенные действия» — тот же самый симптом.

**Решение:** обновить площадку до сборки с исправлением; если сбой повторяется — восстановить доступность сборки с действиями на сервере приложения. Настройки пакетов и правил менять не нужно.

**Когда обращаться в поддержку 1Ф:** если на исправленной сборке при недоступных пользовательских действиях пропадают стандартные группы либо текст ошибки обслуживанию не помогает — приложить версию площадки, текст ошибки из журнала ошибок платформы и имя пакета.

## 5. Баги редактора смарт-правил (AdminSPA)
Проблемы интерфейса AdminSPA при настройке смарт-правил и смарт-выражений.
### 5.1 Дубли и ошибки в дереве смарт-выражений
**Симптом:** «"Текущий пользователь" отображается дважды в дереве», «ошибка при выборе сущности в смарт-выражении», «нет возможности провалиться в контекст при редактировании смарт-выражения».

**Что проверить:**

- Версия AdminSPA — баг может быть исправлен в новой версии
- Тип сущности — на каком элементе дерева возникает проблема
- Браузер — воспроизводится ли в другом браузере

**Когда обращаться в поддержку:** ошибки интерфейса редактора — обратиться в поддержку 1Ф.

**Симптом:** «не работает поиск в редакторе smart автоматизации», «не могу найти правило по имени».

**Что проверить:**

- Версия AdminSPA
- Количество правил — при большом количестве поиск может тормозить
- Фильтры — не установлены ли фильтры, скрывающие результат

**Когда обращаться в поддержку:** ошибка интерфейса — обратиться в поддержку 1Ф.
### 5.3 Некорректное отображение смарта в пакете действий
**Симптом:** «баг при отображении смарта в пакете действий при открытии из общего списка».

**Что проверить:**

- Воспроизводится ли при открытии из контекста категории (не из общего списка)
- Версия AdminSPA

**Когда обращаться в поддержку:** ошибка интерфейса — обратиться в поддержку 1Ф.

**Симптом:** «при попытке создать сценарий тестирования для смарта падает ошибка», «ошибка при тестировании циклического смарта».

**Что проверить:**

- Тип смарта — циклические смарты могут иметь ограничения тестирования
- Версия системы
- Есть ли данные для тестирования — задача, на которой запускается тест

**Когда обращаться в поддержку:** если ошибка воспроизводится стабильно — обратиться в поддержку 1Ф.

**Симптом:** «в таблице БИ в поле "Ссылка для кнопки Создать" можно задать смарт-выражение, отдающее строку вместо URL».

**Что проверить:**

- Тип возвращаемого значения смарт-выражения
- Ожидаемый формат — URL vs произвольная строка

**Когда обращаться в поддержку:** отсутствие валидации — обратиться в поддержку 1Ф.

---
## Чеклист для первичной диагностики — Когда обращаться в поддержку 1Ф
Что уточнить по любой проблеме автоматизации:

1. **Тип проблемы** — Lua, смарт-действие, HTTP/внешний сервис, прочее
2. **Версия системы**
3. **Категория и подкатегория** — к какой привязано правило
4. **Событие-триггер** — на какое событие срабатывает
5. **Текст ошибки** — из лога / экрана
6. **Лог смарт-выполнения** — есть ли записи о попытке выполнения

Обратитесь в поддержку 1Ф в следующих случаях:

- Ошибка в API Lua (не в пользовательском коде)
- Смарт и Lua дают разный результат при одинаковых параметрах
- HTTP-запрос требует таймаут > 30 сек (архитектурный вопрос)
- Ошибки авторизации при вызове UniversalApi
- pcall() не перехватывает исключение
- CreateFileVersionCopy / другие API-методы не работают при корректных параметрах
- Ошибки интерфейса редактора смарт-правил в AdminSPA (дубли, поиск, отображение)
- execute_action не принимает документированное значение параметра
- Действия на переходе выполняются, но переход не записывается
- Ошибки сценариев тестирования смартов

Смежные разделы:

- [Смарт-действия — администрирование](https://help.1forma.ru/domains/smart-actions/admin.md) — формы, события, расписания, журнал автоматизации
- [Справочник смарт-действий](https://help.1forma.ru/domains/smart-actions/actions-reference.md) — все действия и их параметры
- [Типичные ошибки пакетов](https://help.1forma.ru/domains/smart-actions/action-package-pitfalls.md)
- [Смарт-фильтры — администрирование](https://help.1forma.ru/domains/smart-filters/admin.md) — условия и события
