Разберем нестандартную, но довольно распространенную проблему, с которой сталкиваются расчетчики и кадровики в программе «1С:Зарплата и управление персоналом» (релиз 3.1). Представьте ситуацию: вы формируете унифицированную форму Т-13 («Табель учета рабочего времени») и вдруг обнаруживаете, что у одного из сотрудников в определенные дни красуется фантастическая цифра — 32 часа, 48 часов или даже больше отработанного времени за одни сутки! При этом сотрудник работает по обычному графику пятидневки (8 часов в день), в самом документе Табель все заполнено корректно, а у коллег с точно таким же графиком никаких аномалий не наблюдается.
В этой статье мы подробно проанализируем причины возникновения этой ошибки, выясним, в каких регистрах системы происходит сбой, и рассмотрим пошаговые методы исправления ситуации.
Для начала разберем внутреннюю кухню программы. Когда мы формируем отчет Т-13 или заполняем документы начисления зарплаты, система не просто берет данные напрямую из документа Табель. Она обращается к сложной цепочке регистров сведений и накопления, где хранятся плановые и фактические данные рабочего времени. Если в этих регистрах по какому-то сотруднику образуются дублирующие строки, программа при формировании отчета суммирует показатели по этим дублям. В результате стандартные 8 часов явки могут умножиться на 4 записи в регистре, превратившись в абсурдные 32 часа в сутки.
Основными источниками подобных сбоев обычно становятся три регистра:
РегистрСведений.ДанныеДляПодбораСотрудников — именно здесь при сбоях обновления или неверной последовательности проведения документов чаще всего «зависают» дубли записей по сотруднику.РегистрСведений.ГрафикиРаботыПоВидамВремени — служебный регистр, в котором фиксируются графики. Особенность его в том, что измерение ГрафикРаботы имеет составной тип данных. Туда может записываться не только сам график, но и конкретный Сотрудник, если по нему были введены индивидуальные отклонения (сверхурочные, командировки, больничные).РегистрСведений.ГрафикРаботыСотрудников — регистр, определяющий принадлежность сотрудника к определенному графику в конкретный период времени.Проанализируем основные методы решения этой проблемы — от простых пользовательских действий до глубокого анализа регистров.
Как показывает практика, простое нажатие кнопки «Провести» в документе ПриемНаРаботу или КадровыйПеревод часто не приносит желаемого результата. Программа оптимизирует запись движений и может проигнорировать перезапись уже существующих (пусть и ошибочных) записей в регистрах сведений.
Применим правильный алгоритм перепроведения документа:
ПриемНаРаботу, если сотрудник принят недавно, либо последний КадровыйПеревод).Табель за проблемный месяц, перезаполним его и проверим форму Т-13. В большинстве случаев показатели вернутся к норме.Если перепроведение кадрового документа не помогло, нам потребуется заглянуть «под капот» программы. Сделаем это через стандартные механизмы платформы 1С:Предприятие 8.3.
Выполним следующие шаги:
e1cib/list/РегистрСведений.ДанныеДляПодбораСотрудников и нажмите «Перейти».Сотрудник и укажите его значение.Рассмотрим еще один важный регистр, который может стать источником дублирования часов. Как мы уже выяснили, в регистре РегистрСведений.ГрафикиРаботыПоВидамВремени измерение ГрафикРаботы имеет составной тип данных. Если по сотруднику вводились индивидуальные документы учета времени (например, работа в выходные или праздничные дни, сверхурочные часы), система делает записи в этот регистр непосредственно по ссылке на самого сотрудника, а не по его общему графику.
Для детального анализа ситуации мы можем использовать консоль запросов или стандартный универсальный отчет по регистрам. Напишем пример простого запроса для разработчиков или администраторов, который поможет быстро локализовать проблему дублирования данных в этом регистре:
ВЫБРАТЬ
ГрафикиРаботы.ПериодРегистрации КАК ПериодРегистрации,
ГрафикиРаботы.ГрафикРаботы КАК ГрафикРаботы,
ГрафикиРаботы.ВидУчетаВремени КАК ВидУчетаВремени,
ГрафикиРаботы.Дата КАК Дата,
ГрафикиРаботы.ОсновноеЗначение КАК ОсновноеЗначение
ИЗ
РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
ГДЕ
ГрафикиРаботы.ГрафикРаботы ССЫЛКА Справочник.Сотрудники
И ГрафикиРаботы.ГрафикРаботы = &ПроблемныйСотрудник
Если в результате выполнения этого запроса вы обнаружите записи по сотруднику, которые содержат некорректные или пустые виды времени, либо дублируют плановые показатели его основного графика, это явный признак программного сбоя. В таком случае поможет распроведение всех документов отклонений (больничные, сверхурочные, табели) за этот месяц, последующее проведение кадровых документов и лишь затем — повторное проведение документов отклонений.
Довольно часто массовое появление 32 или 48 часов в табелях у сотрудников совпадает по времени с проведением очередного обновления программного продукта 1С:ЗУП. При обновлении конфигурации запускаются фоновые и отложенные регламентные процедуры обновления данных ИБ.
Если процесс обновления базы данных был прерван пользователем, завершился с ошибкой (например, из-за нехватки оперативной памяти или блокировки таблиц СУБД) или регламентное задание просто «зависло», кадровые и расчетные регистры могут остаться в промежуточном, частично заполненном состоянии.
Проанализируем шаги для исправления этой ситуации:
Иногда завышение часов в табеле является следствием некорректно настроенных формул или видов времени в самих начислениях. Это часто случается после переходов с предыдущих версий программы (например, с ЗУП 2.5) или при неаккуратном ручном создании новых начислений.
Выполним проверку настроек времени:
ОплатаПоОкладу или ОплатаПоТарифу).Явка или РабочееВремя).РабочееВремя, а в дополнительных отмечена еще и Явка), программа просуммирует эти показатели. Это приведет к удвоению отработанных часов в отчетах. Снимем лишние флажки и сохраним изменения.Подводя итоги нашего разбора, отметим: в подавляющем большинстве случаев проблема с "32 часами в сутки" успешно решается простым, но правильным циклом распроведения и последующего проведения кадрового документа ПриемНаРаботу. Этот нехитрый прием позволяет полностью переписать движения по служебным кадровым регистрам и избавиться от зависших дублей без привлечения программистов.