Многие пользователи и расчетчики, переходя на современные конфигурации 1С, такие как Комплексная автоматизация 2.x или ЗУП 3.x, сталкиваются с вопросом: почему программа продолжает начислять зарплату сотрудникам даже в том случае, если документ Табель еще не был создан или заполнен? Давайте разберемся, почему так происходит и какие существуют пути решения этой задачи.
В основе работы всех современных конфигураций 1С лежит так называемый принцип отклонений. Это архитектурное решение, при котором программа исходит из предположения, что сотрудник работает согласно своему График работы полный месяц. Если в систему не внесены документы об отклонениях (такие как Больничный лист, Отпуск, Прогул или Неявка), 1С автоматически считает, что сотрудник отработал норму времени, и начисляет ему полную заработную плату.
Табель в этой логике является не обязательным первичным документом для начала расчета, а инструментом уточнения фактически отработанного времени. Именно поэтому в настройках программы нет галочки, которая могла бы принудительно заблокировать расчет до момента проведения табеля.
В ходе обсуждений часто предлагают варианты создания «пустых» График работы или индивидуальных графиков с нулевой нормой времени. Мы настоятельно рекомендуем не использовать этот метод по следующим причинам:
Поскольку типового механизма блокировки нет, самым надежным способом достижения поставленной цели является разработка расширения конфигурации. Суть метода заключается во внедрении проверки наличия данных перед заполнением документа Начисление зарплаты и взносов.
Рассмотрим алгоритм реализации:
Начисление зарплаты и взносов программа должна инициировать процедуру проверки по каждому сотруднику.ДанныеТабельногоУчетаРабочегоВремениСотрудников.Этот способ позволяет сохранить типовую логику программы, не создавая «костылей» в виде пустых графиков, и обеспечивает 100% контроль наличия данных.
Если вы не хотите менять логику самого документа, но хотите защититься от ошибки деления на ноль, можно изменить формулу начисления. Рассмотрим пример использования функции ? (тернарный оператор) для проверки нормы:
?(НормаЧасов = 0, 0, Оклад / НормаЧасов * ВремяВЧасах)
При использовании такой формулы, если НормаЧасов по какой-то причине оказалась равна нулю, начисление просто не произойдет (вернется 0), вместо того чтобы вызывать критическую ошибку расчета.
Если внесение правок в код невозможно, рекомендуем перейти к жесткому регламенту:
Табель учета рабочего времени для проверки заполненности данных перед окончательным расчетом зарплаты.Подводя итог, еще раз подчеркнем: попытки «обмануть» программу через пустые графики приведут к техническим сбоям. Наиболее профессиональным решением будет создание расширения, которое будет проверять наличие записи в ДанныеТабельногоУчетаРабочегоВремениСотрудников, гарантируя, что расчет зарплаты будет произведен только на основании подтвержденного времени.