В практике работы с конфигурацией 1С:Зарплата и Управление Персоналом (ЗУП) 3.1 пользователи иногда сталкиваются с аномалией: в расчетных листках сотрудников графа «Выплачено» оказывается пустой, хотя документы выплаты (ведомости) проведены. При глубоком анализе выясняется, что проблема кроется в справочнике Подразделения, где у некоторых сотрудников указано «пустое» значение, отображаемое в списках как <>. Разберем подробно причины этого явления и пошагово рассмотрим методы исправления ситуации.
Прежде чем исправлять справочники, проанализируем механику работы отчета. В 1С:ЗУП данные в расчетном листке собираются из нескольких регистров накопления, ключевыми из которых являются ВзаиморасчетыССотрудниками и НачисленияУдержанияПоСотрудникам. Данные в этих регистрах хранятся в разрезе Организации и Подразделения.
Если в кадровом документе (например, «Прием на работу») у сотрудника указано «битое» или пустое подразделение, то начисление зарплаты фиксируется за этим «пустым» объектом. Если же при создании ведомости на выплату программа подставляет корректное подразделение или оставляет его пустым (но с другим внутренним идентификатором), возникает разрыв. Система видит долг по одному подразделению и выплату по другому. В результате в печатной форме расчетного листка, которая обычно группирует данные, сумма выплаты просто не «подцепляется» к начислениям, и поле остается пустым.
<> в программе?Символ <> (угловые скобки) — это системное обозначение объекта, который физически существует в базе данных (имеет уникальный идентификатор GUID), но у него не заполнено поле Наименование. Также это часто указывает на «битую ссылку», когда объект был удален на уровне СУБД, но ссылки на него остались в других документах. В случае с подразделениями в ЗУП 3.1 это часто происходит при некорректном переносе данных из версии 2.5 или при сбоях синхронизации с «1С:Бухгалтерией».
Перед любыми манипуляциями со справочниками и регистрами обязательно создадим резервную копию базы данных. Любое исправление ссылочной целостности может привести к изменению данных в закрытых периодах. Проанализируем состояние базы и убедимся, что копия создана корректно. Для автоматизации создания архивов и пакетного обслуживания системы удобно использовать программу для архивации, обновления и тестирования баз 1С.
Это стандартный механизм платформы 1С для восстановления целостности базы. Рассмотрим, как его правильно настроить для решения нашей задачи:
Если ТиИ не помогло, значит, записи в справочнике физически существуют, но они некорректно заполнены и заблокированы логикой конфигурации.
Это наиболее безопасный и эффективный метод для пользователя и администратора. Мы не будем пытаться «оживить» мертвое подразделение, мы просто заменим его на правильное во всех документах. Проанализируем последовательность действий:
Подразделения.<> и нормальные подразделения.В этот момент платформа найдет все упоминания пустого подразделения (в приказах, ведомостях, регистрах) и заменит их на правильную ссылку. После этого пустое подразделение можно будет пометить на удаление и окончательно стереть из базы.
Если нам принципиально нужно сохранить этот элемент, но типовые средства не дают его записать из-за проверки заполнения полей «Наименование» и «Организация», воспользуемся «секретными» возможностями платформы.
Откроем карточку пустого подразделения. В некоторых формах (особенно в консолях администратора или старых обработках) комбинация клавиш Ctrl + Shift + F4 позволяет снять программную защиту с реквизитов. Однако в управляемых формах ЗУП 3.1 чаще помогает специальная кнопка «Еще — Разрешить редактирование реквизитов».
Если поле «Организация» все равно не выбирается (список пуст), это может быть связано с тем, что элемент «потерял» связь с владельцем. В этом случае поможет только программный метод.
Разберем ситуацию, когда групповая обработка не срабатывает из-за встроенных проверок в процедуре ПередЗаписью. Напишем небольшую обработку, которая принудительно заполнит данные, используя режим загрузки. Рассмотрим пример кода:
// Выберем ссылку на наше пустое подразделение
СсылкаНаОбъект = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию("");
Если Не СсылкаНаОбъект.Пустая() Тогда
ОбъектПодразделение = СсылкаНаОбъект.ПолучитьОбъект();
// Устанавливаем признак Загрузка, чтобы обойти проверки в модуле объекта
ОбъектПодразделение.ОбменДанными.Загрузка = Истина;
// Заполняем необходимые поля
ОбъектПодразделение.Наименование = "Исправленное подразделение";
ОбъектПодразделение.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000");
Попытка
ОбъектПодразделение.Записать();
Сообщить("Подразделение успешно обновлено!");
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Использование свойства ОбменДанными.Загрузка = Истина — это критически важный момент. Оно сообщает системе, что данные записываются «как есть», и не нужно запускать дополнительные проверки, которые в типовой конфигурации запрещают записывать подразделение без организации или с пустым именем.
Выясним причину, почему организация может не выпадать в списке. Проанализируем настройки программы в разделе Настройка — Предприятие. Если в базе ведется учет только по одной организации, поле может быть скрыто или заблокировано. Однако, если у подразделения в базе данных поле Владелец (которым является Организация) заполнено ссылкой на несуществующий объект, список выбора может вести себя непредсказуемо.
Попробуйте временно включить опцию «Учет по нескольким организациям» (если она была выключена), чтобы форма элемента справочника перестроилась и позволила выбрать владельца явно.
После того как мы исправили справочник или заменили ссылки, данные в регистрах не всегда обновляются автоматически (особенно если мы использовали программную запись с признаком Загрузка = Истина). Рассмотрим, что нужно сделать дальше:
Зарплата к выплате. Если там остались записи с пустым подразделением, их нужно скорректировать документом «Перенос данных» или повторным проведением ведомостей.Важный совет: Если вы ведете штатное расписание, обязательно проверьте, не привязано ли «пустое» подразделение к позициям штатного расписания. В противном случае при каждом новом приеме на работу программа будет снова подставлять некорректную ссылку, и проблема вернется.