# Подписи и согласование — Решение проблем

Данное руководство описывает типовые проблемы, возникающие при работе с механизмами подписей и согласования в 1Форме, и методы их решения. Документ структурирован по категориям ошибок, включая неполадки при переходе задач, проблемы с ЭЦП (сертификатами) и динамическими подписями. Инструкция предназначена для инженеров технической поддержки, выполняющих первичную диагностику и эскалацию инцидентов.

**Как пользоваться этим документом**

Секции организованы по типам проблем. Для каждой:

1. **Симптом** — что описывает клиент
2. **Что проверить** — шаги диагностики
3. **Решение** — что сделать
4. **Эскалация** — когда обращаться в поддержку 1Ф

## 1. Подпись не запрашивается / задача не уходит на согласование

Проблемы, связанные с тем, что подпись не запрашивается или задача не уходит на согласование, являются частой темой обращений.

**1.1 Подпись не запросилась при переходе**

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

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

- Подпись на переходе — настроена ли на вкладке «Подписи на переходе» для этого конкретного перехода
- Флаг «Активна» — не отключена ли подпись
- Условие запроса — если настроено условие (по ДП или смарт-фильтру), проверить что оно выполняется
- «Не запрашивать повторно» / «Запрашивать подпись 1 раз» — если флаг включён и подпись уже была получена ранее, повторный запрос не создаётся
- Обязательность — необязательная подпись не запрашивается автоматически

**Решение:**

- Проверить настройки перехода в AdminSPA: Категория → Маршрут → Переход → вкладка «Подписи на переходе»
- Проверить условия запроса — раскрыть строку подписи и посмотреть вкладку «Условия запроса»
- Если «Не запрашивать повторно» — проверить историю подписей в задаче (Лист согласования)

**Эскалация:** если настройки корректны, подпись активна, условие выполняется, но подпись всё равно не запрашивается.

**1.2 Задача «зависла» в статусе «На подписи»**

**Симптом:** задача показывает статус «На подписи — {статус}», но подписей в карточке нет, или все подписи уже обработаны.

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

- Лист согласования — есть ли необработанные подписи
- Необязательные подписи — если на переходе только необязательные подписи и никто не запросил ни одну, задача ждёт кнопки «Подписи не требуются»
- Динамический маршрут — если используется SP, она может не вернуть подписей для текущего этапа

**Решение:**

- Если все подписи обработаны, но статус не сменился — попросить обновить страницу (F5)
- Если проблема с необязательными подписями — объяснить механику, предложить нажать «Подписи не требуются»
- Проверить в журнале ошибок (Журналы → Ошибки)

**Эскалация:** если подписей нет, а задача не двигается — с ID задачи и ID категории.

**1.3 Задача не отправляется на согласование конкретному акцептанту**

**Симптом:** «задача не отправляется на согласование Инициатора», «подпись не запросилась у нужного человека».

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

- Алгоритм определения акцептанта — по группам, по ДП, по руководителю, по смарт-выражению, по оргструктуре
- Параметр «Акцептант определяется по» — заказчик / исполнитель / ответственный исполнитель / запросивший
- Для алгоритма «По группам» — входит ли базовый пользователь в нужную группу, назначен ли акцептант для этой группы
- Для алгоритма «По ДП» — заполнен ли ДП, есть ли соответствие в таблице
- Для алгоритма «По руководителю» — есть ли руководитель в оргструктуре, правильная ли ступень

**Решение:**

- Проверить настройки подписи на переходе — алгоритм и базовый пользователь
- Для «По группам»: AdminSPA → подпись → алгоритм → таблица «группа — акцептант»
- Для «По ДП»: проверить значение ДП в задаче и соответствие в таблице настроек подписи

### 1.4 Подпись создана без акцептантов

**Симптом:** в карточке задачи есть подпись, у которой не указан ни один акцептант, — задача стоит в статусе «На подписи», подписать её некому.

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

- Алгоритм определения акцептанта и базового пользователя — в настройках подписи на переходе
- Для «По руководителю» — есть ли у базового пользователя руководители выше него: если пользователь сам занимает руководящую должность, другие руководители этого подразделения считаются его коллегами по горизонтали и в акцептанты не попадают — подпись уходит выше
- Для «По руководителю» — ступень выше глубины оргструктуры подпись не обнуляет: в этом случае она запрашивается у руководителей верхнего доступного яруса
- Для «По группам» и «По параметру (ДП)» — попадает ли базовый пользователь в таблицу соответствий и заполнен ли «Акцептант по умолчанию»

**Решение:**

- Если руководителей выше пользователя нет вовсе — подпись без акцептантов ожидаема, а не сбой: такому пользователю алгоритм «По руководителю» не подходит, и подпись настраивают по другому алгоритму — например, «По группам» с явно указанным акцептантом
- Если руководитель есть, а подпись пуста — проверить состав оргструктуры пользователя: его руководители могли не попасть в выборку как коллеги по горизонтали

**Эскалация:** если руководители в оргструктуре есть, настройки подписи корректны, а подпись всё равно создаётся без акцептантов — с ID задачи, ID подписи и составом руководителей пользователя.

## 2. Ошибки при подписании / акцепте

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

**2.1 Ошибка «Object reference not set» при подписании**

**Симптом:** при нажатии кнопки резолюции — ошибка NullReferenceException или «Object reference not set to an instance of an object».

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

- Обязательные ДП подписи — все ли заполнены (задаются на вкладке «Обязательные ДП» в настройках подписи на переходе)
- Акцептант — определился ли корректно (если акцептант пуст, может быть null reference)
- Версия системы — известная проблема в некоторых версиях

**Эскалация:** с полным текстом ошибки, ID задачи, ID подписи (из журнала).

**2.2 Ошибка при наличии нескольких акцептантов**

**Симптом:** подпись запрошена у нескольких акцептантов, при резолюции одного из них — ошибка.

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

- Настройку «Каждому акцептанту отдельную копию» — если выключена, все акцептанты работают с одной подписью
- Не обработал ли другой акцептант подпись раньше
- Состояние гонки (одновременный доступ) — два акцептанта нажали одновременно

**Эскалация:** если ошибка воспроизводится стабильно.

**2.3 Ошибка CheckForMCHD при подписании**

**Симптом:** при подписании с ЭЦП — ошибка `CheckForMCHD`.

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

- Настроена ли МЧД (машиночитаемая доверенность) на переходе
- Действителен ли сертификат и доверенность
- Доступен ли сервис проверки МЧД

**Эскалация:** всегда — это ошибка интеграции с внешним сервисом.

**2.4 Повторный вызов на подписание уже акцептованной подписи**

**Симптом:** пользователю повторно приходит запрос на подписание подписи, которую он уже обработал.

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

- Настройку «Не запрашивать повторно» — включена ли
- Не является ли это новым циклом маршрута (задача прошла круг и вернулась на тот же переход)
- Динамический маршрут — SP может повторно включить подпись

**Решение:**

- Если это новый цикл — ожидаемое поведение (если не включено «Не запрашивать повторно»)
- Включить «Не запрашивать повторно» или «Запрашивать подпись 1 раз» при необходимости

**2.5 Повторный почтовый ответ по уже обработанной подписи**

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

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

**2.6 Резолюция не выносится с сообщением о пустом комментарии**

**Симптом:** подписант нажимает резолюцию, у которой включён флаг «Причина обязательна», оставляет поле пустым и получает сообщение «Пожалуйста, заполните комментарий к резолюции». Резолюция не применяется, подпись остаётся в списке.

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

- Включён ли флаг «Причина обязательна» у типа резолюции (справочник типов резолюций) либо «Запрашивать комментарий при подписании» у подписи
- Длину комментария: слишком короткий текст и текст из одних пробелов комментарием не считаются
- Версию стенда: до 2.268.699 то же самое отвечало сообщением «Пожалуйста, заполните причину», это не ошибка

**Решение:** ввести комментарий в окне резолюции и повторить действие.

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

## 3. ЭЦП / КЭП / УКЭП

Проблемы с электронной подписью, КЭП, УКЭП и сертификатами КриптоПро рассматриваются в этой секции.

**3.1 Ошибка при подписании с КЭП/УКЭП**

**Симптом:** при подписании файлов электронной подписью — ошибка. Может быть ошибка плагина, ошибка сертификата, ошибка сервера.

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

- Тип СКЗИ: КриптоПро/РуТокен, PayControl или DSSCryptoPro
- Установлен ли плагин КриптоПро CSP (для веб)
- Не истёк ли сертификат
- Не отозван ли сертификат
- Соответствует ли ИНН сертификата настройкам (если настроен фильтр по ИНН юрлица)

**Решение:**

- Попросить проверить срок действия сертификата
- Для КриптоПро: проверить установку плагина, версию браузера
- Если ошибка детализации нет — запросить скриншот и полный текст ошибки

**Эскалация:** с текстом ошибки, типом СКЗИ, ID задачи, ID категории.

**3.2 Истёк сертификат ЭЦП**

**Симптом:** «Закончилось время действия сертификата», пользователь не может подписать.

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

- Дата окончания сертификата
- Есть ли у пользователя другой действующий сертификат

**Решение:**

- Перевыпуск сертификата через УЦ (удостоверяющий центр) — это делает сам клиент
- После перевыпуска — установить новый сертификат в систему

**3.3 Массовое подписание ЭЦП не работает**

**Симптом:** при массовом подписании — ошибка или подписываются не все файлы.

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

- Тип СКЗИ — массовое подписание работает только с КриптоПро/РуТокен
- Все ли файлы доступны
- Выбран ли сертификат (при первом использовании)

**Решение:**

- Проверить что используется КриптоПро (PayControl и DSSCryptoPro не поддерживают массовое подписание)
- При первом массовом подписании — выбрать сертификат

**3.4 Подписание файлов УКЭП зависает при использовании S3-хранилища (MinIO)**

**Симптом:** при попытке подписать файл УКЭП на стенде с файловым хранилищем S3 (MinIO) окно подписания зависает на 0%, по таймауту появляется сообщение об ошибке. Ошибок в журнале 1Ф нет, проверка соединения S3-провайдера возвращает «Успех».

**Причина:** в CORS-конфигурации бакета MinIO отсутствуют необходимые заголовки `1formaauth` и `language` в `AllowedHeaders`. Браузер блокирует preflight-запрос подписания из-за политики CORS.

**Решение:**

- Проверить CORS-конфигурацию бакета MinIO (через `mc admin config set <alias> cors` или bucket policy).
- В `AllowedHeaders` добавить заголовки `1formaauth` и `language`, либо установить `"AllowedHeaders":["*"]`.

**Эскалация:** если после корректировки CORS проблема сохраняется — в поддержку 1Ф с указанием ID задачи, имени стенда, бакета MinIO и текущей конфигурации CORS.

**3.5 PIN аппаратного токена: сохранённый PIN не подходит или плагин не отвечает при сбросе**

**Симптом:** пользователь отмечал в диалоге «Запомнить пин-код», но при подписании после перезагрузки страницы или нового входа PIN спрашивается заново, либо появляется сообщение «Плагин Рутокен не ответил при сбросе сохранённого PIN-кода. Повторите попытку.». Другой вариант: вход с сохранённым PIN не проходит и блокирует подпись.

Что проверить первым: держит ли плагин Рутокен выполненный вход на устройство — пока вход жив, диалог ввода PIN не показывается, и это штатное поведение, а не пропавшая функция. Если пользователь ждёт диалог, а его нет, повторного ввода не требуется: подпись проходит сразу.

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

- Действительно ли началась новая сессия страницы (перезагрузка, новая вкладка, повторный вход): запоминание PIN действует только в пределах одной сессии страницы
- Отвечает ли плагин Рутокен — не занят ли он другим окном браузера или другим приложением
- Не работают ли на одном рабочем месте несколько пользователей по очереди без перезагрузки страницы

**Решение:**

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

**Эскалация:** если подпись блокируется одним и тем же сохранённым PIN-кодом и перезагрузка страницы не помогает — в поддержку 1Ф с указанием модели токена, версии плагина Рутокен, браузера и ID задачи.

### Certificate Edition: недоступная функциональность (с 2.268.353)

**Симптом:** клиент жалуется, что у него «не работает DSS» / «не открывается журнал DSS» / «нет формы Контур.Cloud», хотя в документации функциональность описана.

**Что проверить:** какая сборка развёрнута на стенде. Если это ФСТЭК-сборка `UniForm.Barebone` (Certificate Edition), то облачные провайдеры ЭП исключены физически: модуль `UniForm.Module.Eds` и `Valhalla.CryptoPro.CA` не входят в solution. Формы автоадминки `dsscryptopro-service-settings`, `kontur-cloud-*`, журнал транзакций DSS отсутствуют в навигации — это не баг и не сломанные права. Локальная подпись через плагин КриптоПро CSP / РуТокен работает штатно.

**Решение:** объяснить клиенту, что DSS КриптоПро, Контур.Cloud и УЦ КриптоПро в Certificate Edition не поставляются; локальный КриптоПро/РуТокен доступен.

## 4. Динамические подписи

Проблемы с ручным запросом подписей и динамическим маршрутом (хранимыми процедурами) описаны ниже.

**4.1 Ошибка при запросе динамической подписи**

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

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

- Право «Запрашивать динамическую подпись» у группы пользователя
- Флаг «Может быть динамической» в настройках подписи
- Не находится ли задача в терминальном статусе (динамические подписи нельзя запросить в терминальном)

**Решение:**

- Проверить права группы: AdminSPA → Группы → {группа} → вкладка «Подписи»
- Проверить настройки подписи — флаг «Может быть динамической»

**4.2 Динамический маршрут (SP) не возвращает подписи**

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

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

- Имя хранимой процедуры в настройках перехода
- Параметры SP (TaskID, StepID, RequestingUserID, Stage) — передаются ли корректно
- Флаг «Кешировать полный маршрут согласования» — если включён, изменения в SP вступят в силу только при следующем согласовании

**Эскалация:** всегда — требуется проверка SQL.

**4.3 Матрица согласования — нельзя добавить сотрудника**

**Симптом:** при настройке матрицы согласования (справочник для динамического маршрута) не удаётся добавить сотрудника.

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

- Есть ли у пользователя учётная запись в системе
- Формат данных в справочнике — UserID через запятую

## 5. Отзыв и отклонение подписей

Отзыв согласования и отклонение подписей могут приводить к некорректным переходам задач или скрытию кнопок в интерфейсе.

**5.1 Непонятное поведение после отзыва согласования**

**Симптом:** после отзыва согласования задача в непонятном статусе — подписи обработаны, но статус не тот.

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

- Настройки отзыва в категории: кому разрешено отзывать (исполнители, акцептанты, заказчики, запросившие)
- Какой статус ожидается — при отзыве задача возвращается на статус до начала согласования
- Не было ли нескольких параллельных отзывов

**Решение:**

- Проверить историю задачи (лента) — кто и когда отозвал
- Проверить настройки категории: AdminSPA → Категория → Подписи → настройки отзыва

**5.2 Неправильный переход при отклонении подписи**

**Симптом:** при отклонении подписи задача переходит не в тот статус, который ожидался.

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

- Параметр «В статус если отклонена подпись» в настройках подписи на переходе
- Параметр «При отклонении выполнить переход» — если указан, выполняется переход со всеми его автоматизациями
- Параметр «При отклонении» — режим: прервать / ожидать всех / продолжить
- Смарт-события — «После отклонения подписи» может инициировать дополнительный переход

**Решение:**

- Проверить все три параметра отклонения в настройках подписи на переходе
- Если есть смарт-события на отклонение — проверить их логику

**5.3 Не работает кнопка «Удалить» подпись**

**Симптом:** акцептант или пользователь не видит кнопку «Удалить» на подписи.

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

- Тип маршрута: статический или динамический
- На статическом маршруте кнопка «Удалить» регулируется правом «Администратор задач»
- На динамическом маршруте — доступна также запросившему подпись
- При необязательной подписи — кнопка «Удалить» доступна всем акцептантам

**Решение:**

- Проверить права пользователя в категории (право «Администратор задач»)
- Проверить обязательность подписи

**5.4 Отзыв одной подписи проходит, а отзыв согласования с несколькими подписями — нет**

**Симптом:** отзыв единственной запрошенной подписи выполняется, а отзыв согласования при двух и более активных подписях завершается ошибкой; в журнале приложения — `Cannot insert duplicate key row in object 'dbo.TaskSignaturesLog' with unique index 'ix__dbo__TaskSignatureStagesLog__TaskID__CommentID'`.

**Что проверить:** структуру индекса — `SELECT is_unique FROM sys.indexes WHERE name = 'ix__dbo__TaskSignatureStagesLog__TaskID__CommentID'` на MS SQL или определение индекса таблицы `TaskSignaturesLog` на PostgreSQL. Индекс должен быть неуникальным: на один комментарий в журнале законно приходится несколько строк, по одной на подпись.

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

**5.5 Кнопка «Отозвать согласование» не отображается в шапке блока «Подписи»**

**Симптом:** в блоке «Подписи» карточки задачи есть подписи, а кнопки с иконкой корзины в шапке блока нет — в панели инструментов задачи пункт «Отозвать согласование» при этом может быть на месте.

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

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

**Решение:**

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

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

## 6. Уведомления и интерфейс подписей

Проблемы с получением уведомлений о подписях и отображением индикаторов в интерфейсе пользователя рассматриваются ниже.

**6.1 Не приходят уведомления о подписях**

**Симптом:** «перестали приходить уведомления на почту о поступлении на подпись».

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

- Персональные настройки уведомлений пользователя — событие «Подписи»
- Системные настройки почты — работает ли отправка в целом
- Настройка категории «Отсылать запросы подписей от имени диспетчера задач» — не мешает ли

**Решение:**

- Проверить персональные настройки: Профиль → Уведомления → «Подписи»
- Проверить что другие уведомления приходят (если нет — проблема с почтой, а не с подписями)

**6.2 Счётчик «Ожидающие вашей подписи» не отображается**

**Симптом:** в панели навигации пропал индикатор «Ожидающие вашей подписи» или показывает 0 при наличии подписей.

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

- Настройки навигации — не скрыт ли индикатор
- Версия системы — индикаторы могут отсутствовать в устаревших версиях
- Кеш браузера — обновить страницу (F5)

**Решение:**

- Обновить страницу
- Проверить настройки навигации (боковое меню)
- Если индикатор есть, но показывает 0 — проверить подписи через раздел «Подписка» в «Мои задачи»

**6.3 Настройки списка подписей не сохраняются**

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

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

- Версия системы — начиная с 2.266 Дракон используется кнопка «Наборы полей»
- Для версий 2.256–2.265 — пользовательский ключ `SignaturesGridSettings`
- Старые версии — настройка колонок не поддерживается

**Решение:**

- Для 2.266+: использовать «Наборы полей» вместо ручной настройки колонок
- Для 2.256–2.265: проверить наличие ключа `SignaturesGridSettings`

**6.4 Проблема с отображением подписей в режиме «Подзадачи»**

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

**Решение:**

- Обновить страницу
- Проверить версию — в некоторых версиях известная проблема с отображением

**6.5 В режиме «Подзадачи» не хватает строки или у строки пустое значение**

**Симптом:** в гриде «Ожидающие вашей подписи» в режиме «Подзадачи» одной из ожидаемых строк нет либо у строки пустое значение в колонке; при этом вид открывается и остальные строки на месте.

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

- Системный лог за время открытия вида на записи `ShowTasksFeed lenient load` — в них указаны имя колонки с пустым значением и идентификатор строки (`TaskID`, `rn`); у отброшенных строк запись отдельная, со словом `skipped row`
- Воспроизводится ли у других акцептантов — это дефект данных в конкретной выборке, а не настроек грида, поэтому сброс вида и «Наборы полей» не помогают

**Решение:**

- Лента подписей загружается снисходительно: пустое значение в колонке, объявленной непустой, не прерывает выдачу. Строка показывается с пустым значением, а строка без `TaskID` или `rn` в выдачу не попадает
- Данные правятся по записи лога — она называет колонку и строку
- Послабление действует только для ленты подписей: у остальных потребителей ленты задач такие данные по-прежнему приводят к отказу

**Эскалация:** в поддержку 1Ф с идентификатором акцептанта, временем открытия вида и полным текстом записей `ShowTasksFeed lenient load`. Если таких записей нет, а вид не открывается — это другой дефект, передать текст ошибки из журнала.

**6.6 Инициатору не приходит письмо о результате подписи**

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

Отсутствие письма здесь обычно следствие настроек — почта выключена у получателя или у задачи, пользователь онлайн, нерабочее время, отсутствие, пустой список уведомляемых после раскрытия помощников, снятый признак уведомлений о подписях, — а не ошибка. С 2.268 такие исходы рассылки в журнал ошибок не пишутся: в нём нет ни записи о том, что письмо не ушло никому, ни записей о доставке и постановке в очередь, поэтому искать в журнале ошибок структурированную запись с причиной недоставки не нужно. В журнале остаётся только исключение: если письмо не удалось подготовить или поставить в очередь, там будет запись «Signature resolution mail notification failed» с исходным исключением, а акцепт и комментарий сохраняются.

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

- Персональные настройки получателя: Профиль → Уведомления → событие «Подписи» (включая признак уведомлений о подписях).
- Не инициатор ли получатель, который сам нажал «Принять»: в рассылку он не входит — это самый частый случай.
- Настройки категории: не отключены ли почтовые уведомления; нет ли у задачи признака запрета почты.
- Общую работу почты — приходят ли другие уведомления; если нет, дальше по [Почта — решение проблем](https://help.1forma.ru/domains/mail/support-guide.md#1-smtp-и-доставка-писем), раздел «Не приходят уведомления на почту».
- Очередь отправки (`email-job-send-queue`) и журнал почтовых джобов (`log_mail`) — а не журнал ошибок.

**Решение:** вернуть получателю событие «Подписи», включить почту, снять у задачи признак запрета почты.

**Эскалация:** в поддержку 1Ф с номером задачи, номером подписи, временем акцепта и результатом проверки по списку выше. Полный текст записи журнала прикладывать, только если в журнале есть «Signature resolution mail notification failed».

## 7. Сроки и делегирование

В этой секции описаны правила настройки сроков подписания, а также запросы подписей при делегировании задач и смене участников.

**7.1 Вопросы по срокам подписи**

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

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

- Настройки подписи: «Минимальное время на подписание», «Время на подписание по умолчанию»
- «Срок обязателен» и «Срок можно менять» — флаги в настройках подписи
- Приоритет: срок на переходе > срок по умолчанию > минимальное время
- Срок на переходе не может быть меньше минимального

**Решение:**

- Объяснить иерархию сроков: переход → подпись → минимум
- Для ограничения изменения срока — «Срок можно менять» = выключить

**7.2 Подпись при смене срока / делегировании / смене заказчика**

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

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

- Настройки категории — привязана ли подпись к действию (делегирование, смена заказчика, изменение срока)
- Смарт-выражение для подписи при смене срока — может возвращать -1 для пропуска

**Решение:**

- Проверить AdminSPA → Категория → Подписи → «Подписи, требующие акцепта для действий»
- Если подпись не нужна — убрать привязку в настройках

**7.3 Срок подписи не рассчитывается по производственному календарю**

**Симптом:** запрос подписи (переход маршрута, запрос вручную, динамическая подпись) завершается ошибкой «Недопустимая дата для расчёта рабочего времени по производственному календарю»: подпись не создаётся, задача остаётся в прежнем статусе. При смене срока уже запрошенной подписи и при запросе подписи с готовым сроком, пришедшим извне, та же ситуация даёт текст «Срок подписи не может быть меньше минимального». В обоих случаях это ошибка валидации (HTTP 400), а не внутренняя ошибка сервера.

**Причина:** срок подписи считает функция производственного календаря — к моменту запроса прибавляется время на подписание в рабочих минутах. Календарь не возвращает дату, когда в нём нет заполненных рабочих дней в нужную сторону от даты отсчёта (например, срок уводит расчёт за конец заполненного периода). Пустой результат функции превращается в «нулевую» дату `0001-01-01`, а она не представима в SQL-типе `datetime` — типе колонки `TaskSignatures.SignatureOrderedTime` с диапазоном от `1753-01-01` до `9999-12-31 23:59:59.997`. Такие значения отбраковываются проверкой дважды: на входной дате — до обращения к базе, и на результате функции — до расчёта интервала и вставки подписи. Проверка стоит на обеих функциях календаря: прибавление рабочих минут к дате и расчёт интервала между двумя датами.

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

- Производственный календарь по умолчанию — срок подписи считается именно по нему (конкретный календарь в этот расчёт не передаётся). Календарь должен существовать и быть заполнен на период, в который попадает срок
- Заполненность календаря вперёд: если за датой отсчёта рабочих дней в календаре не осталось, дата не рассчитывается
- Величину времени на подписание — «Время на подписание по умолчанию», «Минимальное время на подписание», срок на переходе, результат смарт-выражения времени на подписание. Аномально большое значение (в том числе полученное от смарта) уводит дату за конец заполненного календаря
- Для ошибки при смене срока — какую дату отправляет клиент: дата вне диапазона `datetime` отбраковывается тем же сообщением, что и срок меньше минимального, поэтому по тексту эти два случая не различаются

**Решение:**

- Дозаполнить производственный календарь по умолчанию на нужный период
- Привести время на подписание (в настройках подписи, на переходе или в смарт-выражении) к значению, попадающему в заполненный период календаря

**Где ошибки не будет:** там, где срок только отображается или используется для решения, нерассчитанная дата не роняет запрос, а оставляет поле пустым — минимально допустимый срок подписи (`MinSignDate`) в данных подписи и плановый срок шага (`StepOrderedTime`) у кнопок перехода. Задача с нерассчитанным сроком шага не помечается просроченной, и действие по просрочке для неё не выполняется; в плане ресурсов расчётная дата окончания не обновляется. Если клиент жалуется на пустой срок вместо ошибки — причина и проверки те же.

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

## 8. Смарт-автоматизация и подписи

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

**8.1 Не сработало смарт-правило при согласовании**

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

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

- Какое именно событие настроено: «После подписания статической подписи» / «После отклонения» и т.д.
- Тип подписи в событии — статическая или динамическая (событие различается!)
- Не было ли ошибки в смарт-пакете — проверить журнал ошибок
- Порядок выполнения: смарт-пакеты «После» выполняются после всех стандартных действий подписи

**Решение:**

- Проверить журнал ошибок на момент подписания
- Убедиться что тип события соответствует типу подписи (статическая / динамическая)
- Проверить условия смарт-правила

**Эскалация:** если журнал ошибок пуст, правило настроено корректно, но не срабатывает.

**8.2 Нет параметров акцептантов в смарт-фильтре**

**Симптом:** в новом редакторе смартов при открытии смарт-фильтра через «Настройки подписи → Условия запроса» отсутствуют параметры, связанные с акцептантами.

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

- Версия системы — это может быть баг новой версии редактора
- Доступны ли параметры акцептантов при открытии смарт-фильтра другим способом

**Эскалация:** с указанием версии системы и пути, через который открывается фильтр.

## 9. Административные задачи, перенос и редактирование настроек подписей

Административные операции включают перенос категорий утилитой миграции, редактирование акцептантов в AdminSPA и интеграцию с Диадок или 1С.

**9.1 Ошибка при переносе подписей утилитой миграции**

**Симптом:** при переносе категории через утилиту миграции — ошибка, связанная с подписями.

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

- Совместимость версий площадок
- Текст ошибки — что именно не перенеслось
- Есть ли на площадке-приёмнике подписи с теми же именами

**Решение:**

- Если подписи уже существуют на приёмнике — утилита может конфликтовать, пересоздать вручную
- Обновить утилиту до последней версии

**Эскалация:** с текстом ошибки, версиями обеих площадок.

**9.2 Проблемы при редактировании списка акцептантов (по группам) в новой админке**

**Симптом:** в новой админке (AdminSPA) не удаётся корректно отредактировать список акцептантов для алгоритма «по группам» — не сохраняется, ошибка, интерфейс зависает.

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

- Версия системы — баг конкретной сборки AdminSPA
- Работает ли редактирование в старой админке (Admin → Подписи)
- Браузер — очистить кеш, попробовать другой

**Решение:**

- Как обходной путь: использовать старую админку для редактирования акцептантов
- Зафиксировать версию, передать в поддержку 1Ф

**Эскалация:** с указанием версии, браузера, скриншотом ошибки.

**9.3 Диадок — подтянулась доверенность не того подписанта**

**Симптом:** при отправке документа в Диадок (подтверждение аннулирования, подписание) — подтянулась доверенность/сертификат другого сотрудника.

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

- Настройки интеграции с Диадок — привязка сертификата к пользователю
- Не указан ли общий сертификат для нескольких пользователей
- Настройки МЧД — соответствие доверенности и подписанта

**Эскалация:** всегда — требуется проверка настроек интеграции Диадок и привязки сертификатов.

**9.4 Синхронизация 1С-1Ф — не установились подписки на события подписей**

**Симптом:** после настройки синхронизации 1С-1Ф подписки на события (смена статуса, подписание) не создались или не срабатывают.

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

- Настройки интеграции 1С-1Ф — включены ли события по подписям
- Журнал интеграции — есть ли ошибки при регистрации подписок
- Доступность точки приёма (callback)

**Эскалация:** всегда — требуется проверка настроек интеграции 1С.

**9.5 На вкладке «Информационные ДП» список пуст, добавленный параметр «не сохраняется»**

**Симптом:** администратор жалуется, что в настройках подписи на переходе на вкладке «Информационные ДП» выбранный дополнительный параметр не появляется в таблице: после «Добавить» список пуст, после «Сохранить» и повторного открытия окна настройка прежняя. Часто к этому же — «в блоке „Подписи“ в задаче информационные параметры не видны». Ошибок при сохранении нет.

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

- Версию SPA на стенде: до 2.268.706 в этом окне были две разные причины — выпадающий список показывал первый доступный параметр вместо выбранного, а таблица вкладки имела нулевую высоту и не рисовалась. На 2.268.706 и новее обе устранены
- Ответ `GET /api/admin/subcat/step/signatures` по этой подписи: непустой ли `stepSignExtParamsIdForInfo`
- Повторяется ли на вкладках «Обязательные ДП» и «Условия запроса» — до 2.268.706 пустой список был на всех трёх, это один и тот же экран
- Тип параметра: «Большой текст с форматированием», «Таблица», «Выбор пользователей», «Адрес», «Дерево» в подписи не отображаются

**Решение:**

- Если версия ниже 2.268.706 — обновление стенда, обходного пути в интерфейсе нет
- Если версия актуальная, а `stepSignExtParamsIdForInfo` приходит непустым — настройка сохранена, проблема в отображении: приложить скриншот и передать в поддержку 1Ф
- Если `stepSignExtParamsIdForInfo` пуст — настройка не дошла до сервера, это дефект фронта: приложить скриншот окна редактирования, номер категории, перехода и подписи
- Отдельно объяснить пользователю штатное поведение: информационные ДП видно согласующему при запросе подписи и в журнале подписей рядом с подписью, а в карточке задачи и в блоке «Подписи» их нет — это не сбой (см. [Подписи — бизнес-логика](https://help.1forma.ru/domains/signatures/business.md))

**Эскалация:** в поддержку 1Ф — версия SPA, ID категории и перехода, скриншот вкладки «Информационные ДП», тело ответа `GET /api/admin/subcat/step/signatures` по подписи.

## 10. Журнал подписей: отображение, печать и спецсимволы

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

**10.1 Дубли пунктов меню в журнале подписей**

**Симптом:** в журнале подписей в контекстном меню колонок дублируются пункты (например, «Автоматическая ширина столбцов» показывается дважды).

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

- Версия системы — баг интерфейса конкретной сборки
- Воспроизводимость — у всех пользователей или у одного

**Решение:**

- Обновить страницу (F5)
- Если воспроизводится стабильно — зафиксировать версию, передать в поддержку 1Ф как баг интерфейса

**10.2 Некорректное отображение журнала подписей для печати**

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

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

- Браузер и его версия — печатные стили могут отличаться
- Масштаб печати — не уменьшен ли
- Ориентация страницы — альбомная может подойти лучше

**Решение:**

- Попробовать альбомную ориентацию, масштаб 80-90%
- Если проблема в вёрстке — передать в поддержку 1Ф с указанием браузера и скриншотом

**10.3 Спецсимволы отображаются как HTML-коды в причине запроса**

**Симптом:** в причине запроса подписи вместо символов (кавычки, амперсанд, угловые скобки) — HTML-сущности (`&amp;`, `&lt;`, `&quot;` и т.п.).

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

- Версия системы — баг экранирования в конкретной сборке
- Откуда копировался текст (из Word, Outlook — могут быть «умные» кавычки)

**Решение:**

- Перенабрать причину вручную (без копирования)
- Если проблема системная (у всех пользователей) — зафиксировать версию, эскалировать

**Эскалация:** если HTML-коды появляются при ручном вводе (не копировании) — баг бэкенда.

## 11. Ошибки при переходе и выполнении LUA-скриптов

При подписании задач могут возникать runtime-ошибки выполнения LUA-скриптов или блокировки переходов в следующий статус.

**11.1 Ошибка LUA-скрипта при попытке подписать**

**Симптом:** при подписании — ошибка с упоминанием LUA (Lua script error, LUA runtime exception).

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

- Есть ли LUA-скрипты в настройках категории (смарт-действия, пакеты действий)
- Не изменялись ли LUA-скрипты недавно
- Журнал ошибок — полный стектрейс

**Эскалация:** всегда — требуется анализ LUA-кода. Передать с ID задачи, ID категории, полным текстом ошибки.

**11.2 Задача не переходит в следующий статус после акцепта всех подписей**

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

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

- Журнал ошибок — есть ли ошибка на момент завершения последней подписи
- Пакеты действий на переходе — не падает ли автоматизация после согласования
- Условия на переходе — все ли выполнены (обязательные ДП, смарт-фильтры)
- Параллельные подписи — не осталась ли необработанная подпись другого типа

**Решение:**

- Проверить журнал ошибок на момент акцепта последней подписи
- Проверить лист согласования — все ли подписи действительно обработаны
- Если ошибка в пакете действий — исправить пакет, перезапустить согласование

**Эскалация:** с ID задачи, текстом ошибки, скриншотом листа согласования.

## 12. Обновление, выгрузка и мониторинг подписей

В данном разделе описаны проблемы с обновлением листа согласования в карточке, выгрузкой отчетов и поиском ожидающих подписей.

**12.1 Изменение подписчиков / заказчиков не отражается в карточке**

**Симптом:** после изменения подписчиков или заказчиков задачи — в карточке (листе согласования) отображаются старые данные.

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

- Обновлена ли страница (F5 / Ctrl+Shift+R)
- Тип подписи — статическая или динамическая (для динамической обновление зависит от SP)
- Не закеширован ли маршрут — флаг «Кешировать полный маршрут согласования»

**Решение:**

- Жёсткое обновление страницы (Ctrl+Shift+R)
- Если динамический маршрут с кешем — отключить кеш или дождаться следующего цикла
- Если данные не обновляются после обновления страницы — эскалировать

**12.2 Запрошенная подпись не отображается в карточке**

**Симптом:** подпись запрошена (есть в ленте / уведомление пришло), но в карточке задачи в листе согласования её нет.

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

- Обновить страницу (F5)
- Права пользователя — видит ли он раздел «Лист согласования»
- Фильтры в листе согласования — не выбран ли конкретный этап

**Решение:**

- Обновить страницу
- Сбросить фильтры листа согласования
- Если подпись не появляется — проверить через журнал, что подпись действительно создана

**Эскалация:** если подпись в журнале есть, а в карточке не отображается.

**12.3 Как выгрузить список согласованных задач / подписей**

**Симптом:** клиент хочет получить отчёт: какие задачи согласованы определёнными сотрудниками, список просроченных подписей, все подписи пользователя.

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

- Есть ли готовый отчёт/грид в категории клиента
- Можно ли использовать грид «Ожидающие вашей подписи» с фильтрами
- Есть ли аналитика по подписям в разделе «Аналитика» категории

**Решение:**

- Для просмотра своих подписей: раздел «Мои задачи» → «Подписи» или фильтр в списке задач
- Для отчёта по конкретным сотрудникам: настроить грид с колонками подписей + экспорт в Excel
- Для просроченных подписей: фильтр по сроку в списке подписей
- Для сложных выгрузок (SQL) — эскалировать в поддержку 1Ф

**Эскалация:** если стандартных средств недостаточно — требуется SQL-отчёт или пользовательский грид.

## 13. Диагностика и правила эскалации инцидентов

Для проведения первичной диагностики инцидентов технической поддержке необходимо собрать ключевую информацию перед эскалацией.

**Чеклист для первичной диагностики**

При любом обращении по подписям соберите базовую информацию:

1. **ID задачи и категории**
2. **Версия системы**
3. **Тип подписи** — статическая или динамическая
4. **Тип проблемы** — не запрашивается, ошибка при акцепте, ЭЦП, уведомления, отзыв
5. **Один пользователь или все**
6. **Скриншот / текст ошибки**
7. **Лист согласования** — что видно в истории подписей задачи

**Сбой вычисления согласующих в журнале ошибок**

Пустой список согласующих возникает по двум разным причинам, и в журнале ошибок они различимы:

- **Сбой вычисления** — при определении согласующих возникло исключение, подписи подставлен пустой список. В журнале есть запись `Acceptors computation failed for signature {SignatureID} in task {TaskID}` с прямым указанием, что это не подпись, настроенная без согласующих. Уточнение в записи показывает шаг: `while requesting the signature` — сбой при запросе подписи, `while building the task signature list` — сбой при построении списка подписей задачи (в этом случае пустым отдаётся только один ряд, остальные подписи возвращаются штатно).
- **Согласующих нет по настройке** — записей в журнале нет: алгоритм отработал и вернул пустой результат (не заполнен ДП, никто не подошёл под условия, пустая группа).

Последствия сбоя вычисления: подпись создаётся и попадает в лист согласования, но согласующие у неё не назначены (кроме случая, когда их назначила автоматизация на событии перед запросом подписи) — подписывать некому, фактически на согласование подпись не уходит. Настройки подписи и перехода при этом корректны, проверки по пп. 1.1 и 1.3 результата не дадут: искать нужно причину исключения. Рядом могут появиться две сопутствующие записи: `Director acceptors computation failed` — цепочка подписей начальников оборвана, сама подпись и основные согласующие сохранены; `Confidentiality check skipped` (уровень Warn) — из-за пустого списка проверка режима «конфиденциально» на этот запрос не выполнялась.

**Эскалация:** любая из перечисленных записей — в поддержку 1Ф с ID задачи, ID подписи и полным текстом записи журнала.

**Когда обращаться в поддержку 1Ф**

Передайте обращение в поддержку 1Ф, если столкнулись с одним из следующих случаев:

- Ошибки при подписании (NullReference, CheckForMCHD, LUA и т.д.)
- Задача «зависла» на подписи без возможности движения
- Проблемы с ЭЦП (КЭП/УКЭП/DSSCryptoPro)
- Динамический маршрут (SP) не работает
- Смарт-правила на подписях не срабатывают при отсутствии ошибок в журнале
- Подписи не запрашиваются при корректных настройках
- Интеграции (Диадок, 1С) — любые проблемы с подписями в интеграциях
- Задача не переходит после акцепта всех подписей (ошибка в пакете действий)

**Связанные документы**

См. также:
- [Подписи — администрирование](https://help.1forma.ru/domains/signatures/admin.md) — настройка подписей, маршрут, ЭЦП, категория
- [Подписи — бизнес-логика](https://help.1forma.ru/domains/signatures/business.md) — алгоритмы акцептантов, резолюции, ЭЦП
- [Решение проблем — категории](https://help.1forma.ru/domains/categories/support-guide.md) — маршрут, переходы, настройки категории
- [Решение проблем — ДП](https://help.1forma.ru/domains/ext-params/support-guide.md) — обязательные ДП, условия по значениям ДП
