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