При работе с алкогольной продукцией в программе «1С:Розница» пользователи часто сталкиваются с неприятной ситуацией: после успешного сканирования акцизных марок и нажатия кнопки «Завершить проверку» на экране появляется модальное окно «Сохранение результатов проверки. Пожалуйста, подождите». Однако ожидание затягивается на десятки минут, а программа перестает реагировать на действия пользователя. В этой статье мы подробно разберем, почему это происходит, и проанализируем технические аспекты работы платформы 1С, приводящие к такому поведению.
Разберем фундаментальную особенность файлового варианта работы базы данных 1С. В отличие от клиент-серверного варианта, где фоновые задания могут выполняться параллельно на сервере приложений, в файловой базе фоновые задания выполняются последовательно. Это означает, что в один момент времени может работать только одно фоновое задание.
Проанализируем ситуацию: когда вы нажимаете кнопку завершения проверки, система инициирует ФоновоеЗадание для обработки и записи данных о марках. Если в этот момент в базе запущено другое регламентное или фоновое задание (например, автоматический обмен с подключаемым оборудованием, загрузка классификаторов, расчет итогов или даже регламентное удаление помеченных объектов), ваше задание на сохранение марок встает в очередь. Оно получает статус «Запланировано» и будет ждать, пока текущий процесс не завершится. Проблема в том, что окно ожидания на клиенте уже открыто и «ждет» ответа от сервера, который даже не начинал обработку данных.
Рассмотрим порядок действий для диагностики этой причины:
Выясним причину, связанную с внутренним устройством конфигурации. В релизах ветки 2.3.5 разработчики применили механизм обработки данных через ДеревоЗначений, которое заполняется внутри фонового задания. Проблема заключается в том, что при передаче больших структур данных между фоновым заданием и основным сеансом пользователя расходуется значительный объем оперативной памяти.
Посмотрим на пример: если в ТТН содержится большое количество позиций (более 50-100 марок), дерево значений становится «тяжелым». Платформа 1С начинает активно использовать файл подкачки, если оперативной памяти на компьютере недостаточно (менее 8 Гб). Это замедляет процесс в десятки раз, создавая полную иллюзию зависания системы. В сообщениях пользователей часто упоминается, что увеличение объема оперативной памяти до 6-8 Гб полностью решает проблему, так как 1С перестает «свопиться» на жесткий диск.
Проанализируем специфическую ошибку конкретного релиза конфигурации. В версии «Розница 2.3.5» был внедрен переход на асинхронную модель работы с интерфейсом. В некоторых сценариях процедура ОповеститьОЗавершении, которая должна закрывать окно ожидания, попросту не срабатывает. Это происходит из-за того, что фоновое задание завершается успешно, данные сохраняются в базе, но сигнал о завершении (событие) не «пробрасывается» обратно в форму проверки.
Чтобы убедиться, что это ваш случай, после «зависания» и принудительного завершения работы 1С (через диспетчер задач), снова откройте ту же ТТН. Если вы увидите, что марки уже стоят в статусе «Проверено» или «В наличии», значит, само сохранение прошло успешно, а зависло именно визуальное окно ожидания из-за программной ошибки в коде формы.
Разберем ситуацию, когда в журнале регистрации фиксируются изменения объектов Справочник.Номенклатура и Справочник.ПолитикиУчетаСерий в момент зависания. Это критический момент: если для алкогольной продукции включен учет по сериям, но настройки выполнены некорректно, фоновое задание может попасть в состояние «мертвой блокировки» (deadlock).
Система пытается одновременно обновить данные о проверке марок и актуализировать параметры серий номенклатуры. Поскольку оба процесса происходят в рамках одной транзакции или тесно связанных фоновых потоков, они начинают ждать освобождения ресурсов друг другом. В журнале регистрации это может выглядеть как бесконечные записи «Данные. Изменение», хотя фактически процесс не двигается дальше. Рассмотрим, как это выглядит в коде (схематично):
// Внутри фонового задания происходит попытка записи
НачатьТранзакцию();
Попытка
ОбъектНоменклатура.Записать(); // Здесь может возникнуть ожидание блокировки
// ... логика сохранения марок ...
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
КонецПопытки;
Для устранения данной проблемы мы рекомендуем выполнить комплекс действий, направленных как на оптимизацию работы операционной системы, так и на настройку самой платформы 1С.
8.3.17.xxxx и обновить «Розницу» до актуальной версии ветки 2.3.*.lcl и *.lck. Эти файлы отвечают за блокировки сеансов и заданий. Их удаление «разморозит» очередь фоновых задач.ДеревоЗначений.Temp в профиле пользователя), куда 1С выгружает данные фоновых заданий. Добавьте папку с базой данных и папки временных файлов пользователя в исключения антивируса.Подводя итог, можно сказать, что зависание окна сохранения — это комплексная проблема, вызванная переходом 1С на новые технологии (асинхронность и фоновое выполнение) при сохранении ограничений файлового режима работы. Следуя приведенным выше шагам, вы сможете стабилизировать работу системы и обеспечить бесперебойную приемку алкогольной продукции.