В процессе эксплуатации программы 1С:Зарплата и управление персоналом 3.1 (особенно на релизах ветки 3.1.14) пользователи могут столкнуться с критической проблемой: при автоматическом заполнении документа НачислениеЗарплатыИВзносов у ряда сотрудников показатель Оклад (или ТарифнаяСтавка) остается пустым. При этом итоговая сумма начисления может рассчитаться верно, но отсутствие данных в таблице показателей создает «бомбу замедленного действия», которая срабатывает при последующем вводе больничных листов или других документов-отклонений.
Разберем детально, почему это происходит, как диагностировать проблему и какими способами можно восстановить корректность данных в информационной базе.
Для начала проанализируем ситуацию: почему пустой оклад в начислении зарплаты мешает расчету больничного? В системе ЗУП 3.1 реализован механизм вытеснения. Когда в периоде уже начисленной зарплаты регистрируется больничный, программа должна «забрать» часть ранее выплаченных денег (сторнировать их). Для выполнения этого расчета системе недостаточно знать только количество дней — ей нужен базовый показатель, из которого рассчитывалась сумма, то есть Оклад.
Если в исходном документе НачислениеЗарплатыИВзносов в скрытой табличной части показателей значение оклада равно нулю или отсутствует, механизм сторнирования не находит данных для расчета. В результате в больничном листе мы видим пустые суммы сторно, хотя дни отсутствия зафиксированы верно. Это приводит к завышению выплат и искажению отчетности.
Проанализируем основные факторы, которые могут привести к «потере» показателей:
Если проблема носит единичный характер (затронуто несколько человек), рассмотрим самый простой штатный метод восстановления данных. Для этого не нужно пересчитывать весь документ, достаточно выполнить следующие действия:
Начисление зарплаты и взносов.В этот момент система заново инициирует алгоритм сбора показателей для конкретного физлица. Как показывает практика, при таком точечном обращении данные подтягиваются корректно, и табличная часть показателей заполняется значениями из регистра ПлановыеНачисления.
Если «Пересчитать сотрудника» не помогает или проблема повторяется из документа в документ, проанализируем состояние самой базы данных. Ошибки в таблицах и итогах могут блокировать нормальную работу механизмов расчета. Рекомендуется выполнить следующие регламентные операции:
Реиндексация таблиц информационной базы, Проверка логической целостности, Пересчет итогов.После устранения логических ошибок в структуре данных (например, некорректных ссылок или несовпадающих итогов), автоматическое заполнение документов должно нормализоваться.
В ситуациях, когда документ уже рассчитан, выплачен и зафиксирован в учете у большого количества сотрудников (например, 80 и более человек), ручной пересчет становится трудозатратным. В этом случае программисту целесообразно использовать небольшую обработку, которая дозаполнит отсутствующие показатели в табличной части Показатели документа.
Посмотрим на логику, которую должен реализовать такой алгоритм:
// Пример логики для восстановления показателя Оклад в ТЧ документа
Для Каждого СтрокаНачисления Из Объект.Начисления Цикл
// Ищем, есть ли уже показатель Оклад для этой строки
ПоискПоказателя = Объект.Показатели.НайтиСтроки(Новый Структура("ИдентификаторСтроки", СтрокаНачисления.ИдентификаторСтроки));
ОкладНайден = Ложь;
Для Каждого СтрПок Из ПоискПоказателя Цикл
Если СтрПок.Показатель = Справочники.ПоказателиРасчетаЗарплаты.Оклад Тогда
ОкладНайден = Истина;
КонецЕсли;
КонецЦикла;
// Если показатель отсутствует, добавляем его из плановых данных
Если Не ОкладНайден Тогда
НоваяСтрокаПок = Объект.Показатели.Добавить();
НоваяСтрокаПок.ИдентификаторСтроки = СтрокаНачисления.ИдентификаторСтроки;
НоваяСтрокаПок.Показатель = Справочники.ПоказателиРасчетаЗарплаты.Оклад;
// Значение получаем через функцию получения плановых начислений (упрощенно)
НоваяСтрокаПок.Значение = ПлановыеДанныеСотрудника.Оклад;
КонецЕсли;
КонецЦикла;
Важный нюанс: при программном изменении табличных частей документа Начисление зарплаты и взносов необходимо следить за тем, чтобы не изменился итоговый Результат и суммы НДФЛ и Взносов, если они уже были выверены бухгалтером.
Если ни один из вышеперечисленных методов не дает стабильного результата, проверим настройки самого начисления Оплата по окладу. Рассмотрим по шагам:
Оплата по окладу.Оклад.Оклад настройки использования. Должно быть выбрано: «Во всех месяцах после введения значения» (постоянный показатель).Является тарифной ставкой. Это критично для корректной работы алгоритмов ЗУП при обновлении и заполнении документов.Проблема пустого оклада в ЗУП 3.1 — это чаще всего следствие технического сбоя при записи данных в БД или недоработки конкретного релиза. Для исправления ситуации в текущем периоде наиболее эффективным является индивидуальный пересчет сотрудников или использование групповой обработки заполнения ТЧ показателей. Для предотвращения подобных ошибок в будущем рекомендуется своевременно обновлять программу на стабильные патчи от 1С и периодически выполнять Тестирование и исправление базы.
Помните, что корректность заполнения показателей напрямую влияет на будущие перерасчеты и сторнирование при вводе документов-отклонений (больничные, отпуска), поэтому оставлять документ с пустыми окладами «как есть» крайне не рекомендуется, даже если итоговая сумма начисления кажется верной.