При работе в регионах с собственными праздничными днями (например, Республика Крым, Татарстан, Башкортостан) пользователи 1С:Бухгалтерия предприятия 3.0 часто сталкиваются с проблемой: региональный календарь в справочнике создан и заполнен, но программа упорно продолжает использовать общероссийский календарь («РФ») при расчете зарплаты и отпусков. Ситуация осложняется тем, что в «Бухгалтерии», в отличие от «Зарплаты и управления персоналом», отсутствует справочник Графики работы, где можно было бы явно указать календарь для сотрудников.
В рамках этой статьи мы разберем, как правильно назначить региональный производственный календарь основным для организации, проанализируем механизмы программы и рассмотрим программные способы решения проблемы, если типовые средства не помогают.
В актуальных версиях (начиная с релиза 3.0.70.39 и выше) разработчики 1С добавили штатный механизм для решения этой задачи. Проблема большинства пользователей заключается в том, что этот функционал не всегда выведен на видное место в интерфейсе. Рассмотрим, как найти и использовать этот регистр.
Проанализируем работу регистра сведений Производственные календари организаций. Именно в нем хранится связь между конкретным юридическим лицом и выбранным календарем. Если запись в этом регистре отсутствует, программа автоматически обращается к предопределенному календарю с кодом «РФ».
Производственные календари организаций.После этой настройки типовые документы начисления зарплаты начнут использовать данные регионального календаря. Выясним, как это работает «под капотом»: в модулях расчета зарплаты вызывается специализированная функция, которая сначала проверяет наличие записи в данном регистре.
Функция ПроизводственныйКалендарьОрганизации(Организация) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.Текст =
"ВЫБРАТЬ
| ПроизводственныеКалендариОрганизаций.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь
|ИЗ
| РегистрСведений.ПроизводственныеКалендариОрганизаций КАК ПроизводственныеКалендариОрганизаций
|ГДЕ
| ПроизводственныеКалендариОрганизаций.Организация = &Организация";
Выборка = Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() И ЗначениеЗаполнено(Выборка.ПроизводственныйКалендарь) Тогда
ПроизводственныйКалендарь = Выборка.ПроизводственныйКалендарь;
Иначе
ПроизводственныйКалендарь = КалендарныеГрафики.ОсновнойПроизводственныйКалендарь();
КонецЕсли;
Возврат ПроизводственныйКалендарь;
КонецФункции
Часто пользователи совершают ошибку, внося изменения вручную в календарь «РФ». Рассмотрим, почему этого делать нельзя: при обновлении конфигурации или классификаторов 1С перезаписывает данные календаря «РФ», и все ваши региональные праздники исчезают. Правильный алгоритм действий выглядит следующим образом:
Производственные календари.Важный нюанс: программа может пытаться определить региональный календарь автоматически по первым двум цифрам КПП вашей организации. Если ваш календарь создан вручную с произвольным кодом, эта автоматика не сработает.
Если вы работаете в устаревшем релизе или столкнулись с тем, что программа игнорирует настройки регистра при расчете отпусков, придется внести изменения в программный код. Рассмотрим ситуацию, когда расчеты жестко привязаны к функции ОсновнойПроизводственныйКалендарь.
Проанализируем типовую функцию в общем модуле КалендарныеГрафики. По умолчанию она выглядит так:
Функция ОсновнойПроизводственныйКалендарь() Экспорт
ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ");
Если ПроизводственныйКалендарь.Пустая() Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ПроизводственныйКалендарь;
КонецФункции
Чтобы заставить программу использовать ваш календарь во всех расчетах, где вызывается «основной» календарь, заменим код поиска. Например, если код вашего регионального календаря «91», код примет следующий вид:
Функция ОсновнойПроизводственныйКалендарь() Экспорт
// Заменяем поиск РФ на региональный код
ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("91");
Если ПроизводственныйКалендарь.Пустая() Тогда
// Резервный вариант, если региональный не найден
ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ");
КонецЕсли;
Возврат ПроизводственныйКалендарь;
КонецФункции
Разберем, почему это решение эффективно: многие механизмы (особенно расчет среднего заработка и количество дней отпуска) используют именно эту функцию. Однако помните, что после обновления конфигурации эти правки могут быть затерты, если вы не используете механизм расширений.
Проанализируем поведение системы в разных документах. Часто возникает ситуация: в Начислении зарплаты норма дней проставляется правильно (например, 19 дней из-за регионального праздника), а в расчете Отпуска праздничный день не исключается из периода. Это происходит из-за того, что разработчики 1С могли использовать разные методы получения календаря в разных модулях.
Для исправления этой несогласованности рекомендуется:
Лев(СокрЛП(КПП), 2) для автоматического подбора календаря.Производственные календари нет дублей с кодом «РФ»..НайтиПоКоду("РФ"). Вы удивитесь, сколько мест в коде могут содержать жесткую привязку к общероссийскому календарю без учета настроек организации.Резюмируем: наиболее правильный и современный путь — использование регистра Производственные календари организаций в сочетании с календарем, созданным из официального классификатора. Это сохранит чистоту конфигурации и обеспечит корректность расчетов при обновлениях.