В процессе документооборота часто возникает ситуация, когда пользователи создают карточку документа, но забывают прикрепить к ней сам скан-копию или файл оригинала. Это приводит к задержкам в согласовании и хаосу в архиве. Рассмотрим подробнее, как реализовать жесткий контроль наличия файлов в системе 1С:Документооборот, используя как стандартные настройки, так и возможности программирования.
Многие администраторы системы начинают с настройки флага Обязательно наличие скан-копии в карточке Вида документа. Проанализируем ситуацию: почему это часто не срабатывает? В версии 2.1 данный флаг носит скорее информационный характер. Он подсвечивает иконку в журнале и позволяет строить отчеты по недостающим оригиналам, но сам по себе он не блокирует выполнение задач или старт процесса, если это не предусмотрено логикой маршрутизации.
Выясним причину эффективности другого механизма — Ролей файлов. Именно этот инструмент позволяет задать жесткое условие. Разберем по шагам, как это настроить:
Вида документа.Теперь система при попытке запуска документа по маршруту проверит наличие файла именно с этой ролью. Это исключает риск того, что пользователь прикрепит «пустышку» — система будет требовать соответствия конкретной заданной роли.
Если штатных настроек ролей недостаточно или требуется более сложная логика (например, проверка только для определенных подразделений), мы можем использовать условия маршрутизации на встроенном языке. Рассмотрим пример кода, который проверяет наличие файлов, связанных с документом (предметом процесса).
Для реализации создадим новое условие маршрутизации со следующим типом объекта: ВнутренниеДокументы. В поле выражения на встроенном языке проанализируем следующий запрос:
Запрос = Новый Запрос("ВЫБРАТЬ
| Файлы.ВладелецФайла
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайла
| И Файлы.ПометкаУдаления = Ложь");
Запрос.УстановитьПараметр("ВладелецФайла", Предмет);
РезультатЗапроса = Запрос.Выполнить();
Результат = НЕ РезультатЗапроса.Пустой();
В данном коде переменная Предмет — это ссылка на текущий документ. Мы обращаемся к справочнику Файлы, проверяем, есть ли там записи, где владельцем является наш документ, и убеждаемся, что файл не помечен на удаление. Если результат запроса не пустой, значит, файл прикреплен, и система позволит продолжить процесс.
Проанализируем еще один мощный стандартный механизм — Правила проверки данных, доступный в разделе «Настройка и администрирование». Этот способ позволяет выводить предупреждение или ошибку в момент записи документа или выполнения действия.
С помощью правил проверки можно настроить контроль для объекта Внутренний документ. Мы можем задать условие, аналогичное вышеописанному запросу, но на уровне всей системы. Важное преимущество этого метода заключается в том, что мы можем настроить «жесткость» проверки: либо просто предупреждать пользователя («Вы забыли прикрепить файл»), либо блокировать кнопку «Записать и закрыть» до момента добавления вложения.
Если вы работаете в новой редакции 3.0, механизмы контроля стали еще гибче. Разберем основные нововведения:
Скрипты проверок. Это позволяет программисту написать логику проверки один раз и подключать её к разным видам документов без внесения изменений в конфигурацию.Рассмотрим ситуацию: в Виде документа настроен обязательный файл, но документ создается по шаблону, в который уже вложен пустой бланк в формате .docx. В этом случае стандартная проверка «на наличие любого файла» сработает некорректно — система увидит бланк шаблона и решит, что условие выполнено.
Чтобы избежать этой ошибки, рекомендуем использовать более сложные скрипты проверки, которые сравнивают размер текущего файла с размером шаблона или проверяют реквизит ФайлИзменен. Также можно настроить проверку на наличие текстового слоя (если в системе используется сервис распознавания), чтобы убедиться, что прикреплен настоящий скан, а не пустая картинка.
Иногда файл должен появиться не в начале процесса, а на определенном этапе (например, скан подписанного договора после задачи «Подписать у директора»). В этом случае мы настраиваем проверку не при старте процесса, а перед выполнением конкретной задачи. В настройках шаблона комплексного процесса для действия «Исполнить» или «Зарегистрировать» можно прописать скрипт, который проверит наличие файла в карточке документа перед тем, как исполнитель нажмет кнопку «Выполнено».
Резюмируем: Для простого запрета используйте механизм Ролей файлов с флагом «Обязательный». Для гибкого контроля на разных этапах — используйте условия маршрутизации или правила проверки данных с использованием запросов к справочнику Файлы.