При расчете заработной платы в программах 1С:Зарплата и кадры государственного учреждения (ЗиКГУ) и 1С:Зарплата и управление персоналом (ЗУП) редакции 3.1 пользователи иногда сталкиваются с неожиданным исчезновением важных предопределенных показателей расчета. Одним из наиболее критичных является показатель ВремяВДнях (Время в днях). Вместо него в списке доступных остается только ВремяВДняхЧасах (Время в днях (или часах)), что категорически не подходит для некоторых видов начислений, таких как доплата за совмещение должностей.
В этой статье мы подробно разберем, почему возникает эта проблема, в чем разница между ключевыми показателями времени, почему нельзя использовать сомнительные «обходные пути» (такие как переименование других показателей) и как правильно восстановить настройки по умолчанию и вернуть утерянные предопределенные данные.
Для правильной настройки формул начислений крайне важно понимать физический смысл этих двух показателей:
ВремяВДнях) — это жестко предопределенный показатель системы. Он всегда возвращает количество фактически отработанных сотрудником дней, независимо от его графика работы или способа ведения учета времени.ВремяВДняхЧасах) — это динамический показатель. Его поведение зависит от настроек конкретного начисления (является ли оно почасовым) и параметров графика работы сотрудника. Например, если у сотрудника установлен суммированный учет рабочего времени или для начисления рассчитывается тарифная ставка за час, данный показатель вернет отработанные часы вместо дней.Почему это критично: Если мы настраиваем доплату за совмещение, расчет которой должен производиться строго за дни, использование показателя ВремяВДняхЧасах для сотрудника с почасовым учетом приведет к катастрофической ошибке. Программа подставит в формулу отработанные часы (например, 160 часов вместо 20 дней), из-за чего сумма доплаты увеличится в несколько раз. Именно поэтому для корректного расчета необходим чистый показатель ВремяВДнях.
Предопределенные элементы справочников в платформе 1С:Предприятие 8.3 создаются на уровне конфигуратора и физически не могут просто так удалиться пользователем в режиме предприятия. Тем не менее, они могут стать невидимыми или потерять связь с базой данных по нескольким причинам:
Иногда пользователи или неопытные специалисты пытаются решить проблему радикально — берут другой ненужный предопределенный показатель и переименовывают его под свои нужды (или меняют его назначение). Делать так категорически запрещено!
Каждый предопределенный элемент справочника ПоказателиРасчетаЗарплаты жестко привязан к внутренним алгоритмам расчета конфигурации по своему уникальному идентификатору (GUID) и системному имени. Если вы переименуете, например, показатель ТарифнаяСтавкаЧасовая в ВремяВДнях, система все равно продолжит обрабатывать его внутренние механизмы как часовую ставку. Это приведет к следующим последствиям:
Рассмотрим правильные и безопасные способы решения этой проблемы.
Прежде чем приступать к техническим манипуляциям с базой данных, проверим стандартные настройки программы.
Выполним следующие шаги:
ВремяВДнях обнаруживается именно после этого действия. Его достаточно открыть и снять флаг «Дополнительный показатель (не используется)».Если показатель физически присутствует в базе данных, но потерял признак предопределенного (например, поле «Имя предопределенных данных» в базе пустое, хотя элемент называется так же), мы можем восстановить его свойства штатными средствами администрирования.
Проанализируем этот процесс:
ВремяВДнях.Если показатель полностью отсутствует в таблице базы данных (был физически удален в результате сбоя базы), мы можем заставить платформу 1С перечитать конфигурацию и автоматически создать утерянный элемент справочника. Для этого воспользуемся возможностями Библиотеки стандартных подсистем (БСП).
Для выполнения программного кода нам понадобится внешняя обработка «Групповое изменение реквизитов» (с возможностью выполнения произвольного алгоритма) или любая консоль кода:
// 1. Разрешаем автоматическое обновление предопределенных элементов в базе данных
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных.Авто);
// 2. Инициируем обновление предопределенных элементов конкретного справочника
ОбновлениеИнформационнойБазы.ОбновитьПредопределенныеЭлементы(Метаданные.Справочники.ПоказателиРасчетаЗарплаты);
Предупреждение("Восстановление предопределенных показателей успешно завершено!");
Этот код заставит систему просканировать метаданные конфигуратора справочника ПоказателиРасчетаЗарплаты, выявить все отсутствующие в пользовательском режиме предопределенные элементы и корректно создать их заново с сохранением правильных GUID.
Если автоматические механизмы не помогают, мы можем выгрузить эталонный показатель из пустой демонстрационной базы той же версии конфигурации и загрузить его в нашу рабочую базу.
Посмотрим, как правильно выполнить этот перенос, чтобы не нарушить целостность данных:
ВыгрузкаЗагрузкаДанныхXML83.epf через главное меню: Файл — Открыть.ВремяВДнях).Поскольку обработка XML переносит объекты вместе с их уникальными внутренними идентификаторами (GUID), в рабочей базе восстановится абсолютно идентичный и корректный предопределенный показатель, который сразу же будет распознан всеми алгоритмами расчета зарплаты.
В случае, если сбой произошел на физическом уровне таблиц СУБД или файловой базы данных, рекомендуется выполнить стандартную процедуру проверки логической целостности.
Разберем последовательность действий в конфигураторе:
Применение одного из этих системных методов позволит быстро, а главное — безопасно вернуть показатель ВремяВДнях в строй, избежав при этом ручного переименования системных объектов и исключив ошибки при расчете начислений в будущем.