Почему пропадают файлы после согласования и не присваиваются номера в 1С:Документооборот: подробный разбор проблемы

Системный администратор 1С v8.3 (Управляемые формы)
← На главную

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

Особенно загадочно то, что у пользователей нет прав на удаление файлов, а в меню Еще — Показать удаленные пусто. Проблема носит плавающий («выборочный») характер: один документ проводится и нумеруется корректно, а точно такой же документ через пять минут дает сбой.

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

Причина 1. Нарушение логической и физической целостности базы данных (Решение через ТиИ)

Практический опыт показывает, что в большинстве случаев «рандомные» сбои при генерации файлов и работе нумераторов связаны с накоплением ошибок в таблицах базы данных (особенно при использовании файлового варианта базы или при высокой нагрузке на СУБД в клиент-серверном варианте). Кэш таблиц, индексы или связи между справочниками могут повредиться.

Именно поэтому стандартная процедура Тестирование и исправление (ТиИ) является главным средством решения данной проблемы. Во время проведения этой процедуры платформа выполняет следующие действия:

  1. Реиндексация таблиц: Полностью перестраивает индексы всех таблиц базы данных, что мгновенно устраняет сбои при поиске и записи данных, связанных с нумерацией документов и справочником Файлы.
  2. Проверка логической целостности: Находит внутренние логические несоответствия (например, когда карточка файла ссылается на несуществующую версию или наоборот).
  3. Проверка ссылочной целостности: Выявляет «битые» ссылки. При обнаружении некорректных связей система может очистить их или восстановить объекты.
  4. Сжатие таблиц (дефрагментация): Уменьшает физический размер базы данных и ускоряет выполнение дисковых операций чтения/записи.

Для запуска тестирования необходимо открыть базу в режиме Конфигуратор, перейти в меню Администрирование — Тестирование и исправление, установить рекомендуемые настройки (в первую очередь реиндексацию и проверку целостности) и запустить процесс. Перед этим обязательно нужно создать резервную копию базы данных!

Причина 2. Зависание регламентного задания «Обработка произошедших бизнес-событий»

В конфигурации 1С:Документооборот присвоение номеров и запуск связанных процессов часто происходят асинхронно, то есть через механизм бизнес-событий. За это отвечает регламентное задание ОбработкаПроизошедшихБизнесСобытий. Если это задание зависает, работает некорректно или прерывается из-за ошибки в коде, система перестает корректно регистрировать события.

Выясним причину сбоя по шагам:

  1. Перейдем в функции технического специалиста (или через функции администрирования) и откроем регистр сведений ПроизошедшиеБизнесСобытия.
  2. Проанализируем записи в этом регистре. Обратим внимание на колонку НеУдалосьОбработать.
  3. Если напротив зависших бизнес-процессов стоит этот флаг, значит, при попытке обработать событие (например, зарегистрировать документ или создать по шаблону файл во время старта процесса) произошла критическая ошибка.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПроизошедшиеБизнесСобытия.Период КАК ВремяСобытия,
    |	ПроизошедшиеБизнесСобытия.БизнесСобытие КАК Событие,
    |	ПроизошедшиеБизнесСобытия.Источник КАК ДокументИсточник,
    |	ПроизошедшиеБизнесСобытия.НеУдалосьОбработать КАК ОшибкаОбработки
    |ИЗ
    |	РегистрСведений.ПроизошедшиеБизнесСобытия КАК ПроизошедшиеБизнесСобытия
    |ГДЕ
    |	ПроизошедшиеБизнесСобытия.НеУдалосьОбработать = ИСТИНА";

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        ЗаписьЖурналаРегистрации("БизнесСобытия.Ошибка",
            УровеньЖурналаРегистрации.Предупреждение, , ,
            "Сбой обработки события " + Выборка.Событие + " для документа: " + Выборка.ДокументИсточник);
    КонецЦикла;
КонецЕсли;

Причина 3. Конфликт регламентного задания «Очистка ненужных файлов»

В составе Библиотеки стандартных подсистем (БСП), используемой в 1С:ДО, есть фоновое задание по очистке неактуальных файлов. В ряде релизов платформы и конфигурации из-за программной ошибки может возникать конфликт дублирующихся ссылок:

Когда файл генерируется по шаблону, в справочнике Файлы могут временно создаваться две карточки (два уникальных идентификатора UUID), ссылающиеся на один и тот же физический файл на диске в томе хранения данных. Если в ходе изменения статуса документа или отмены одной из задач одна карточка помечается системой на удаление, то регламентное задание по очистке файлов физически стирает файл с диска. Активная карточка внутри документа остается, но сам файл внутри нее пропадает, и при попытке открыть его программа выдает ошибку доступа.

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

Причина 4. Взаимоблокировки в СУБД и транзакционный откат

Симптомы вида «то создается, то нет» и «номера не присваиваются выборочно» указывают на классические конфликты блокировок (Lock Conflicts) на уровне СУБД (MS SQL Server или PostgreSQL). В момент старта процесса согласования система открывает транзакцию, в рамках которой:

Если в этот же момент другое фоновое задание (например, автоматический расчет прав доступа или построение индекса полнотекстового поиска) накладывает исключительную блокировку на связанные таблицы, транзакция записи документа и генерации файла аварийно откатывается. Пользователь может не увидеть явной ошибки на экране, поскольку система пытается выполнить операцию в фоновом режиме, но транзакция прерывается, и созданный файл «исчезает» (так как запись о нем не зафиксировалась в базе данных).

В этом случае помогает перезапуск службы сервера 1С:Предприятие для очистки серверного кэша и сброса зависших сеансов блокировок.

Причина 5. Человеческий фактор (Прикрепление файлов к задачам)

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

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

← На главную