Как программно включить учет больничных и отпусков в 1С:Бухгалтерия предприятия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В программе 1С:Бухгалтерия предприятия 3.0 (БП 3.0) предусмотрен упрощенный кадровый учет и расчет заработной платы, включая автоматическое заполнение документов «Больничный лист» и «Отпуск». Однако разработчики фирмы «1С» наложили жесткое ограничение: этот функционал доступен только для небольших организаций. Если численность сотрудников превышает 60 человек, соответствующая галочка в настройках зарплаты бесследно исчезает, а документы блокируются.

В этой статье мы подробно разберем, как устроена эта проверка изнутри, почему стандартными средствами не всегда удается вернуть нужные настройки, и как решить эту проблему программным путем.

Почему пропадает возможность учета больничных и отпусков?

Прежде чем переходить к написанию кода, давайте разберем логику работы платформы 1С:Предприятие 8.3 в данной ситуации. Возможность ведения учета больничных листов регулируется специальными механизмами — функциональными опциями. В частности, за это отвечают функциональные опции УчетЗарплатыИКадровСредствамиБухгалтерии и РасчетЗарплатыДляНебольшихОрганизаций.

Программа автоматически рассчитывает количество сотрудников и отключает эти опции при превышении лимита. При этом важно учитывать два неочевидных момента:

  1. Проверка по всей информационной базе: Подсчет сотрудников ведется не по конкретной организации, по которой вы пытаетесь провести документ, а суммарно по всей базе данных. Если у вас заведено несколько юридических лиц, и хотя бы в одном из них кадровый состав превысит установленный лимит, функционал отключится для всех компаний в этой базе.
  2. Анализ кадровой истории: Программа берет данные напрямую из регистров сведений. Ошибочные или дублирующиеся записи в кадровых документах могут привести к тому, что система посчитает уволенных или фиктивных сотрудников как действующих работающих специалистов.

Давайте пошагово рассмотрим методы обхода этого ограничения — от простого наведения порядка в регистрах до написания программной обработки.

Шаг 1. Анализ и очистка кадровых регистров

Перед тем как вносить изменения в программный код, необходимо проверить корректность кадровых данных. Программа рассчитывает численность на основании двух ключевых регистров сведений:

Если в вашей базе числится менее 60 реальных сотрудников, но галочка учета больничных все равно недоступна, скорее всего, в этих регистрах присутствуют некорректные записи (например, дубли кадровых переводов или зависшие записи уволенных сотрудников). Чтобы проверить это, выполните следующие действия:

  1. Откройте главное меню программы и перейдите в раздел «Все функции» (в новых версиях платформы этот пункт называется «Функции для технического специалиста»).
  2. Найдите в списке регистров сведений Текущие кадровые данные.
  3. Проанализируйте состав записей. Обратите внимание на количество активных сотрудников. Удалите или скорректируйте ошибочные строки.
  4. Аналогичным образом проверьте регистр Кадровая история сотрудников по проблемной организации.

Если данные очищены, но лимит все равно превышен (например, у вас действительно работает 70 или 80 человек, и вы хотите продолжать считать больничные в БП 3.0 без перехода на ЗУП), перейдем к программным методам.

Шаг 2. Изменение лимита численности в конфигураторе

Выясним, где именно в конфигурации зашито ограничение. За расчет возможности ведения учета отвечает общий модуль РасчетЗарплатыДляНебольшихОрганизаций. Внутри него располагается ключевая функция ПорогЗапрета(), которая возвращает жестко заданное число 60.

Для того чтобы поднять условное ограничение (например, до 600 сотрудников), разработчики обычно используют механизм расширений конфигурации или вносят изменения непосредственно в код (если база находится не на поддержке):


Функция ПорогЗапрета() Экспорт
    Возврат 600; // По умолчанию установлено значение 60
КонецФункции

Также обратите внимание на функцию РасчетЗарплатыДляНебольшихОрганизацийВозможен() в этом же общем модуле. Именно она производит запрос к базе данных и сопоставляет реальное количество сотрудников с результатом функции ПорогЗапрета().

Важное замечание для современных релизов: В последних версиях «1С:Бухгалтерия предприятия 3.0» код этого общего модуля может поставляться в скомпилированном виде (без исходных текстов). Если в вашей версии модуль закрыт, изменить функцию напрямую не получится, и тогда следует воспользоваться решением из Шага 3.

Шаг 3. Создание внешней обработки для принудительной установки констант

Простого изменения лимита в функции ПорогЗапрета() бывает недостаточно, так как значения функциональных опций кэшируются платформой, а привязанные к ним константы остаются в значении Ложь. Чтобы принудительно активировать нужные опции, напишем небольшую внешнюю обработку.

Создайте новую внешнюю обработку в конфигураторе и добавьте на форму команду «Установить настройки». Ниже представлен готовый код модуля формы этой обработки, который принудительно перезаписывает системные константы РасчетЗарплатыДляНебольшихОрганизаций и УчетЗарплатыИКадровСредствамиБухгалтерии в значение Истина:


&НаСервере
Процедура УстановитьКонстантыНаСервере()
    
    // Проверяем и устанавливаем первую константу
    Если НЕ Константы.РасчетЗарплатыДляНебольшихОрганизаций.Получить() Тогда
        Сообщить("Устанавливаю значение РасчетЗарплатыДляНебольшихОрганизаций в ИСТИНА...");
        Константы.РасчетЗарплатыДляНебольшихОрганизаций.Установить(Истина);
    КонецЕсли;
    
    // Проверяем и устанавливаем вторую константу
    Если НЕ Константы.УчетЗарплатыИКадровСредствамиБухгалтерии.Получить() Тогда
        Сообщить("Устанавливаю значение УчетЗарплатыИКадровСредствамиБухгалтерии в ИСТИНА...");
        Константы.УчетЗарплатыИКадровСредствамиБухгалтерии.Установить(Истина);
    КонецЕсли;
    
    Сообщить("Константы успешно перезаписаны!");
    
КонецПроцедуры

&НаКлиенте
Процедура УстановитьКонстанты(Команда)
    УстановитьКонстантыНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
    // Выводим текущие значения констант при открытии формы для наглядности
    ТекущееЗначение1 = Константы.УчетЗарплатыИКадровСредствамиБухгалтерии.Получить();
    ТекущееЗначение2 = Константы.РасчетЗарплатыДляНебольшихОрганизаций.Получить();
    
    Сообщить("Текущее состояние настроек в базе данных:");
    Сообщить("УчетЗарплатыИКадровСредствамиБухгалтерии = " + ТекущееЗначение1);
    Сообщить("РасчетЗарплатыДляНебольшихОрганизаций = " + ТекущееЗначение2);
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
КонецПроцедуры

Запустите созданную обработку в режиме «1С:Предприятие» под правами администратора и нажмите кнопку выполнения команды. Программа перезапишет константы, отвечающие за доступность интерфейса.

Шаг 4. Сброс кэша функциональных опций в интерфейсе

После программного изменения констант пользователи часто сталкиваются с тем, что документы «Больничный лист» и «Отпуск» все равно не появляются в меню «Зарплата и кадры». Дело в том, что командный интерфейс программы жестко завязан на механизм динамического считывания функциональных опций, и платформе требуется триггер для обновления кэша.

Чтобы заставить программу принудительно пересчитать параметры интерфейса без перезапуска сервера, применим проверенный временем трюк:

  1. Перейдите в раздел меню Администрирование — далее выберите пункт Параметры учета — откройте ссылку Настройки зарплаты.
  2. Найдите раздел «Общие настройки» и обратите внимание на переключатель «Учет расчетов по зарплате и кадровый учет ведутся».
  3. Переключите тумблер из положения «В этой программе» в положение «Во внешней программе».
  4. Нажмите кнопку сохранения или закройте форму, чтобы система применила изменения.
  5. Снова зайдите в эти же настройки и верните переключатель в положение «В этой программе».

Этот простой шаг инициализирует фоновое обновление всех связанных механизмов и заново считывает установленные нами ранее константы. После этого документы учета больничных листов и отпусков станут полностью доступны для работы.

← На главную