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