В программе 1С:Бухгалтерия предприятия 3.0 (БП 3.0) предусмотрен упрощенный кадровый учет и расчет заработной платы, включая автоматическое заполнение документов «Больничный лист» и «Отпуск». Однако разработчики фирмы «1С» наложили жесткое ограничение: этот функционал доступен только для небольших организаций. Если численность сотрудников превышает 60 человек, соответствующая галочка в настройках зарплаты бесследно исчезает, а документы блокируются.
В этой статье мы подробно разберем, как устроена эта проверка изнутри, почему стандартными средствами не всегда удается вернуть нужные настройки, и как решить эту проблему программным путем.
Прежде чем переходить к написанию кода, давайте разберем логику работы платформы 1С:Предприятие 8.3 в данной ситуации. Возможность ведения учета больничных листов регулируется специальными механизмами — функциональными опциями. В частности, за это отвечают функциональные опции УчетЗарплатыИКадровСредствамиБухгалтерии и РасчетЗарплатыДляНебольшихОрганизаций.
Программа автоматически рассчитывает количество сотрудников и отключает эти опции при превышении лимита. При этом важно учитывать два неочевидных момента:
Давайте пошагово рассмотрим методы обхода этого ограничения — от простого наведения порядка в регистрах до написания программной обработки.
Перед тем как вносить изменения в программный код, необходимо проверить корректность кадровых данных. Программа рассчитывает численность на основании двух ключевых регистров сведений:
Текущие кадровые данныеКадровая история сотрудниковЕсли в вашей базе числится менее 60 реальных сотрудников, но галочка учета больничных все равно недоступна, скорее всего, в этих регистрах присутствуют некорректные записи (например, дубли кадровых переводов или зависшие записи уволенных сотрудников). Чтобы проверить это, выполните следующие действия:
Текущие кадровые данные.Кадровая история сотрудников по проблемной организации.Если данные очищены, но лимит все равно превышен (например, у вас действительно работает 70 или 80 человек, и вы хотите продолжать считать больничные в БП 3.0 без перехода на ЗУП), перейдем к программным методам.
Выясним, где именно в конфигурации зашито ограничение. За расчет возможности ведения учета отвечает общий модуль РасчетЗарплатыДляНебольшихОрганизаций. Внутри него располагается ключевая функция ПорогЗапрета(), которая возвращает жестко заданное число 60.
Для того чтобы поднять условное ограничение (например, до 600 сотрудников), разработчики обычно используют механизм расширений конфигурации или вносят изменения непосредственно в код (если база находится не на поддержке):
Функция ПорогЗапрета() Экспорт
Возврат 600; // По умолчанию установлено значение 60
КонецФункции
Также обратите внимание на функцию РасчетЗарплатыДляНебольшихОрганизацийВозможен() в этом же общем модуле. Именно она производит запрос к базе данных и сопоставляет реальное количество сотрудников с результатом функции ПорогЗапрета().
Важное замечание для современных релизов: В последних версиях «1С:Бухгалтерия предприятия 3.0» код этого общего модуля может поставляться в скомпилированном виде (без исходных текстов). Если в вашей версии модуль закрыт, изменить функцию напрямую не получится, и тогда следует воспользоваться решением из Шага 3.
Простого изменения лимита в функции ПорогЗапрета() бывает недостаточно, так как значения функциональных опций кэшируются платформой, а привязанные к ним константы остаются в значении Ложь. Чтобы принудительно активировать нужные опции, напишем небольшую внешнюю обработку.
Создайте новую внешнюю обработку в конфигураторе и добавьте на форму команду «Установить настройки». Ниже представлен готовый код модуля формы этой обработки, который принудительно перезаписывает системные константы РасчетЗарплатыДляНебольшихОрганизаций и УчетЗарплатыИКадровСредствамиБухгалтерии в значение Истина:
&НаСервере
Процедура УстановитьКонстантыНаСервере()
// Проверяем и устанавливаем первую константу
Если НЕ Константы.РасчетЗарплатыДляНебольшихОрганизаций.Получить() Тогда
Сообщить("Устанавливаю значение РасчетЗарплатыДляНебольшихОрганизаций в ИСТИНА...");
Константы.РасчетЗарплатыДляНебольшихОрганизаций.Установить(Истина);
КонецЕсли;
// Проверяем и устанавливаем вторую константу
Если НЕ Константы.УчетЗарплатыИКадровСредствамиБухгалтерии.Получить() Тогда
Сообщить("Устанавливаю значение УчетЗарплатыИКадровСредствамиБухгалтерии в ИСТИНА...");
Константы.УчетЗарплатыИКадровСредствамиБухгалтерии.Установить(Истина);
КонецЕсли;
Сообщить("Константы успешно перезаписаны!");
КонецПроцедуры
&НаКлиенте
Процедура УстановитьКонстанты(Команда)
УстановитьКонстантыНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриОткрытииНаСервере()
// Выводим текущие значения констант при открытии формы для наглядности
ТекущееЗначение1 = Константы.УчетЗарплатыИКадровСредствамиБухгалтерии.Получить();
ТекущееЗначение2 = Константы.РасчетЗарплатыДляНебольшихОрганизаций.Получить();
Сообщить("Текущее состояние настроек в базе данных:");
Сообщить("УчетЗарплатыИКадровСредствамиБухгалтерии = " + ТекущееЗначение1);
Сообщить("РасчетЗарплатыДляНебольшихОрганизаций = " + ТекущееЗначение2);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПриОткрытииНаСервере();
КонецПроцедуры
Запустите созданную обработку в режиме «1С:Предприятие» под правами администратора и нажмите кнопку выполнения команды. Программа перезапишет константы, отвечающие за доступность интерфейса.
После программного изменения констант пользователи часто сталкиваются с тем, что документы «Больничный лист» и «Отпуск» все равно не появляются в меню «Зарплата и кадры». Дело в том, что командный интерфейс программы жестко завязан на механизм динамического считывания функциональных опций, и платформе требуется триггер для обновления кэша.
Чтобы заставить программу принудительно пересчитать параметры интерфейса без перезапуска сервера, применим проверенный временем трюк:
Этот простой шаг инициализирует фоновое обновление всех связанных механизмов и заново считывает установленные нами ранее константы. После этого документы учета больничных листов и отпусков станут полностью доступны для работы.