Кадровая служба любой организации периодически сталкивается с необходимостью изменения штатного расписания. В программе 1С:Зарплата и управление персоналом 3.1 для этого предусмотрены специальные документы. Однако пользователи релизов ветки 3.1.7 (в частности, 3.1.7.87, 3.1.7.106 и смежных) столкнулись с крайне неприятной проблемой: после проведения документа «Изменение штатного расписания» подразделения буквально «исчезают» из программы, а позиции штатного расписания выделяются жирным шрифтом и выглядят как неутвержденные. Пользователи описывают это как ситуацию, когда «подразделение превращается в тыкву».
В этой статье мы подробно разберем, почему возникает данный программный сбой, проанализируем его внутренние механизмы и рассмотрим три практических способа решения проблемы: от простых обходных путей при вводе документов до групповой корректировки данных и программного восстановления реквизитов.
При ведении истории штатного расписания в программе 1С:ЗУП 3.1 у каждого подразделения в справочнике Подразделения существуют два ключевых служебных реквизита:
Если в документе «Изменение штатного расписания» пользователь указывает конкретное подразделение в шапке документа, а затем добавляет или меняет в нем позиции, система при проведении некорректно перезаписывает данные. В результате в справочнике Подразделения для выбранного объекта сбрасывается флаг Сформировано (переходит в значение Ложь), а поле Дата создания становится пустым.
Для пользователя это выглядит следующим образом:
Выясним, какими способами можно исправить ситуацию и вернуть базу данных в корректное состояние.
Рассмотрим, как избежать повреждения данных еще на этапе ввода документов, если у вас установлена одна из проблемных версий конфигурации и оперативно обновить ее нет возможности. При обслуживании большого количества информационных баз эту задачу упрощает инструмент для пакетного автоматического обновления 1С.
Опытным путем пользователи выяснили, что ошибка не проявляется, если при создании документа «Изменение штатного расписания» оставлять поле «Подразделение» в шапке документа пустым.
Разберем этот алгоритм по шагам:
Если ошибка уже произошла, и подразделения «отвалились», отредактировать их напрямую в справочнике не получится. При включенной истории штатного расписания поля Сформировано и Дата создания заблокированы для изменения пользователем в карточке подразделения. Однако мы можем обойти это ограничение, воспользовавшись стандартным инструментом администратора.
Рассмотрим пошагово процедуру восстановления через групповую обработку:
Ссылка Равно [Имя вашего проблемного подразделения]. При необходимости через условие «В списке» можно выбрать сразу несколько поврежденных объектов.После завершения работы обработки привязанные позиции в штатном расписании перестанут выделяться жирным шрифтом, а само подразделение вернется в стандартные списки выбора кадровых документов.
Если поврежденных подразделений много, или вы хотите автоматизировать процесс их восстановления для ваших пользователей, можно написать простую внешнюю обработку. Проанализируем пример кода на языке 1С, который решает эту задачу.
Для восстановления параметров конкретного подразделения нам необходимо получить его объект, принудительно установить требуемые реквизиты и записать изменения в базу данных. Пример кода выглядит следующим образом:
// Пример программного восстановления реквизитов подразделения
Процедура ВосстановитьСтатусПодразделения(СсылкаНаПодразделение, ДатаФормирования) Экспорт
// Получаем объект для редактирования
ОбъектПодразделения = СсылкаНаПодразделение.ПолучитьОбъект();
Если ОбъектПодразделения <> Неопределено Тогда
// Принудительно устанавливаем признаки формирования
ОбъектПодразделения.Сформировано = Истина;
ОбъектПодразделения.ДатаСоздания = ДатаФормирования;
Попытка
// Записываем объект с отключением стандартных проверок при необходимости
ОбъектПодразделения.Записать();
Сообщить("Подразделение '" + СокрЛП(ОбъектПодразделения.Наименование) + "' успешно восстановлено!");
Исключение
ВызватьИсключение "Не удалось записать подразделение: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Использование этого кода позволяет быстро вернуть работоспособность справочника даже при массовом сбое на крупных предприятиях со сложной иерархической структурой.
В некоторых случаях сброс флага «Сформировано» связан со сбоем в регистре сведений подчиненности. Если вам нужно быстро вернуть работоспособность одного подразделения, не прибегая к групповым обработкам и коду, выполните следующие действия:
Этот простой прием заставляет систему принудительно перезаписать связанные движения в подчиненных регистрах сведений, что во многих случаях автоматически восстанавливает корректный статус флага сформированности.
Резюме: Описанная проблема является зарегистрированной ошибкой платформы в старых релизах ветки 3.1.7. Наиболее надежным и долгосрочным решением является обновление конфигурации 1С:ЗУП до актуального релиза (начиная с ветки 3.1.8 и старше данный баг полностью устранен разработчиками). Если же обновление временно невозможно, используйте ввод документов с пустой шапкой и групповое изменение реквизитов для восстановления поврежденных элементов.