Как «качели» графиков ломают табель в ЗУП 3.1: разбор архитектурного бага механизма сшивания периодов

10.09.26

Разработка - Механизмы типовых конфигураций

Разбираем неочевидную ошибку в 1С:ЗУП 3.1, возникающую при многократной смене общего графика работы сотрудника внутри месяца. Вы узнаете, почему программа игнорирует ночные часы, подставляет выходные из другого графика и как функция УточнитьПериодыЗаполненияПоСотрудникам ломает геометрию временных таблиц. В статье: анатомия реального инцидента, анализ дампов ВТ (ВТГрафикиСотрудниковСрезИДвижения, ВТДанныеРегистровУчетаВремени) и пошаговый алгоритм исправления ошибки для разработчиков и расчетчиков. Материал содержит практические рекомендации по предотвращению «качелей» в кадровом учете.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Расширение для диагностики ошибок табеля в ЗУП 3.1: дамп всех временных таблиц (ВТ)
.cfe 7,31Kb
1 4 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Введение, или «Почему Табель сошел с ума?»
Каждый разработчик 1С, внедряющий ЗУП 3.1, знает: учет рабочего времени — это самая хрупкая часть конфигурации. Большинство ошибок списывают на «пользовательские качели» (частые кадровые переводы), но часто под ними скрывается суровая математика временных таблиц (ВТ).

В материале я разберу реальный инцидент: сотрудница за один месяц сменила общий график работы 5 раз. В итоге документ «Табель учета рабочего времени» выдал парадоксальный результат: вместо плановых ночных часов на определенные даты (7–8 июля ожидались часы по графику «Смена №4») программа подставила «Выходные» и «Явку 12 часов» от совершенно другого графика.

Давайте заглянем под капот конфигурации и посмотрим, почему внутренний механизм ЗУП не смог переварить эту ситуацию.

 

Часть 1. Анатомия инцидента

Сотрудник А. работала по сменному графику. В июле 2026 года кадровики оформили несколько изменений общего графика работы, создав настоящие «качели». Выгрузка из регистра сведений "График работы сотрудников" показала 5 интервалов действия:

Рис. 1. Записи регистра сведений «График работы сотрудников» по сотруднику за период апрель–июль 2026 года. Видно 6 записей, созданных документами «Изменение графика работы списком» и «Кадровый перевод списком».

Если перевести эти записи в табличный вид для наглядности, мы получим следующую картину:

Период действия График Примечание
01.07.2026 – 06.07.2026 Смена №4 Основной график сотрудника
07.07.2026 – 08.07.2026 Смена №1 Ошибочная запись («качели»)
09.07.2026 – 09.07.2026 100% - График 8,2 часов Одиночный день
10.07.2026 – 28.07.2026 Смена №3 Новый график
29.07.2026 – 31.07.2026 Смена №1 Очередные «качели»

 

При заполнении документа «Табель» за июль, на период 07.07–08.07 программа вместо продолжения графика «Смена №4» подставила часы по графику «Смена №1». В табеле это выглядело так: 07.07 — Выходной, 08.07 — Явка 12 часов.

Рис. 2. Документ «Табель». Красным кругом выделены ошибочные ячейки: 07.07 — «В» (выходной вместо ночных часов), 08.07 — «Я 12» (явка 12 часов вместо графика «Смена №4»).

 

Часть 2. Как ЗУП формирует плановое время (Архитектура)

Чтобы понять причину сбоя, вспомним, как ЗУП получает плановые часы. Весь механизм крутится вокруг общего модуля "УчетРабочегоВремениРасширенный" и функции СоздатьВТДанныеУчетаВремениИСостоянийСотрудников.

Платформа выполняет пакетный запрос, создающий цепочку временных таблиц. Ключевые из них:

  1. ВТГрафикиСотрудниковСрезИДвижения — получает срез последних записей регистра "График работы сотрудников".
  2. ВТИнтервалыГрафиков — формирует непрерывные интервалы. Окончание интервала вычисляется как НачалоСледующегоПериода - 1 Секунда.
  3. ВТДанныеРегистровУчетаВремени — итоговая таблица, где часы умножаются на дни.

Подводный камень: функция УточнитьПериодыЗаполненияПоСотрудникам.
Если бы табель заполнялся с нуля, ЗУП, возможно, переварил бы эти 5 записей. Проблема кроется в том, что табель по сотруднику за июль уже был заполнен ранее (до ввода последних кадровых переводов).

В ЗУП 3.1 существует регистр сведений "Параметры зарегистрированных данных учета времени". При заполнении табеля программа ставит там флаги: УстановленДень1 = Истина, УстановленДень2 = Истина и т.д. Функция УточнитьПериодыЗаполненияПоСотрудникам вызывается внутри пакета запроса. Ее задача — «вырезать» из периодов действия графиков те дни, которые уже заполнены в табеле, чтобы не задвоить часы. Но при наличии «осколочных» периодов (как в нашем случае: 07.07–08.07, а потом 09.07–09.07) эта функция ломает логику сшивания.

 

Часть 3. Вскрытие ВТ (Анализ дампов)

Самая сложная задача при отладке — понять, что именно пошло не так внутри пакетного запроса. Чтобы упростить диагностику, мы разработали специальное расширение-отладчик (оно доступно для скачивания в этой статье). Оно перехватывает и сохраняет все временные таблицы пакета сразу после выполнения запроса, до их автоматической очистки платформой. Это позволяет буквально «заглянуть» под капот алгоритма и увидеть корень проблемы. Например, при анализе дампа мы видим, что в таблице ВТГрафикиСотрудниковСрезИДвижения корректно зафиксировались все 5 интервалов с точностью до секунды:

Рис. 3. Дамп временной таблицы ВТГрафикиСотрудниковСрезИДвижения. Видно 5 строк (первые три записи апреля-мая отсечены функцией СрезПоследних на дату 01.07.2026).

 

Но при объединении с флагами "Параметры зарегистрированных данных учета времени" математика сшивания сломалась. Функция уточнения периодов сформировала пересекающиеся интервалы в таблице ВТПериодыДействияОбщихГрафиковСотрудников.

Из-за этого в итоговой таблице ВТДанныеРегистровУчетаВремени на даты 07.07 и 08.07 произошел рассинхрон. Срез последних (СрезПоследних) выбрал график с более свежим моментом времени (Смена №1), а функция вырезания периодов не смогла корректно сопоставить дату с уже стоящим там флагом УстановленДень8.

Фрагмент дампа итоговой таблицы ВТДанныеРегистровУчетаВремени (первые 15 дней месяца):

Дата ВидУчетаВремени Часы Анализ ошибки
01.07.2026 Ночные часы 8

Корректно (Смена №4)

02.07.2026 Выходные дни 0

Корректно (Смена №4)

03.07.2026 Явка 12

Корректно (Смена №4)

04.07.2026 Ночные часы 4

Корректно (Смена №4)

05.07.2026 Ночные часы 8

Корректно (Смена №4)

06.07.2026 Выходные дни 0

Корректно (Смена №4)

07.07.2026 Выходные дни 0

ОШИБКА! Подставлен выходной от Смены №1

08.07.2026 Явка 12

ОШИБКА! Подставлена явка 12ч от Смены №1

09.07.2026 Явка 8,2

Сработал одиночный график 8,2

10.07.2026 Явка 12

Корректно (Смена №3)

11.07.2026 Ночные часы 4

Корректно (Смена №3)

12.07.2026 Ночные часы 8

Корректно (Смена №3)

13.07.2026 Выходные дни 0

Корректно (Смена №3)

14.07.2026 Явка 12

Корректно (Смена №3)

15.07.2026 Ночные часы 4

Корректно (Смена №3)

 

Как мы видим, 07.07 и 08.07 платформа проигнорировала логику смены №4 и выдала данные по Смене №1, которая в регистре была записана более поздним документом.

 

Часть 4. Как мы это чинили (и как чинить нельзя)

Чего делать категорически нельзя:
Просто удалить «лишние» записи из регистра "График работы сотрудников" напрямую, если Табель уже проведен. Функция УточнитьПериоды все равно будет опираться на «залипшие» флаги в "Параметры зарегистрированных данных учета времени", и часы останутся кривыми.

Пользовательский «костыль», который сработал:
Мы ввели еще один, финальный документ изменения графика на проблемные даты (07.07 и 08.07), перекрыв «грязные» данные. Поскольку у нового документа был более свежий номер и момент времени, СрезПоследних выбрал именно его, игнорируя старый мусор. Табель был перезаполнен, флаги сбросились, и часы встали верно. Этот способ работает, но не является архитектурно чистым.

Рекомендуемый алгоритм исправления:

  1. Отменить проведение документа «Табель» за проблемный месяц (очистить регистр "Параметры зарегистрированных данных учета времени").

  2. Привести в порядок кадровые документы: удалить ошибочные переводы («качели»), оставив только 1–2 легитимных изменения.

  3. Заполнить «Табель» заново.

Часть 5. Памятка для расчетчиков (Превентивные меры)

Чтобы не ловить этот баг в будущем, мы внедрили в проекте жесткие правила, которыми делимся с сообществом:

  1. Запрет на «качели». Менять общий график работы внутри месяца допускается не более одного раза. Если нужно поменять режим на 2–3 дня — используйте документ «Индивидуальный график», не трогая основной.
  2. Строгая очередность. Если сотруднику меняют график задним числом: сначала отменяем проведение Табеля; затем вводим кадровый документ; затем заполняем Табель заново. Менять график при уже заполненном Табеле нельзя.
  3. Контроль стыков. Интервалы графиков не должны пересекаться. ЗУП отлично переваривает стык «день в день» (старый график действует по 09.07.2026 23:59:59, новый начинается с 10.07.2026 00:00:00), но ломается при малейшем наложении дат.

 

Заключение

Механизм УточнитьПериодыЗаполненияПоСотрудникам — яркий пример того, как попытка разработчиков 1С «оптимизировать» расчеты через временные таблицы приводит к хрупкости системы при нештатных пользовательских вводах.

Если в вашей базе сотрудники массово переводятся между графиками, а расчетчики жалуются на «непонятные ночные часы» или «задвоения» — проверьте таблицу ВТПериодыДействияОбщихГрафиковСотрудников. Скорее всего, вы столкнулись ровно с тем же багом сшивания.

Связанные публикации и материалы

Проверено на следующих конфигурациях и релизах:

  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.38.69

Вступайте в нашу телеграмм-группу Инфостарт

1С:ЗУП 3.1 Табель учета рабочего времени График работы сотрудника Временные таблицы Баги 1С Учет рабочего времени УточнитьПериодыЗаполненияПоСотрудникам Расчет зарплаты Кадровый учет Ошибки ЗУП ВТГрафикиСотрудниковСрезИДвижения ВТДанныеРегистровУчетаВремени Ночные часы Сменный график Оптимизация запросов ПараметрыЗарегистрированныхДанныхУчетаВремени 1С Разработка Зарплата и управление персоналом Анализ дампов Регистр сведений

См. также

Механизмы типовых конфигураций Разработчик 1С:Предприятие 8 Абонемент ($m)

Использование переопределяемых процедур в 1С на управляемых формах.

1 стартмани

01.09.2026    3656    waider    3    

15

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Разработчик 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данное расширение — это механизм, сделанный при помощи двух модулей из БСП (3.1.11.415), который позволяет динамически добавлять команды (кнопки и не только при желании) на формы управляемого приложения без изменения конфигурации. На примере данного механизма удобно рассмотреть некоторые возможности для расширения функционала объектов, которые подключены к механизму библиотеки стандартных подсистем.

1 стартмани

20.03.2026    4704    InFlach    0    

5

Механизмы типовых конфигураций Разработчик Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    6442    AlexeyPROSTO_1C    5    

21

Механизмы типовых конфигураций Разработчик Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    4154    YA_1100893639    1    

9
Для отправки сообщения требуется регистрация/авторизация