() Алина, добрый день. Да, во всех больничных с кодом 09 с 18 сентября, после установки релиза 3.1.14.208. Исходное решение в модуле исходной процедуры(текстовый файл), куда добавили последний кусок кода без основной проверки используем ли мы вообще финансирование за счет бюджета.
Процедура РассчитатьПособиеПоНетрудоспособности(СтрокиРасчета, ДополнительныеПараметры, ПрименяетсяСторнирование = Истина) Экспорт
ПараметрыОплаты = ДополнительныеПараметрыРасчетаПособияПоНетрудоспособности();
ЗаполнитьЗначенияСвойств(ПараметрыОплаты, ДополнительныеПараметры.ПараметрыРасчетаПособияПоНетрудоспособности);
Если Не ЗначениеЗаполнено(ПараметрыОплаты.РайонныйКоэффициентРФНаНачалоСобытия)
Или ПараметрыОплаты.РайонныйКоэффициентРФНаНачалоСобытия < 1 Тогда
ПараметрыОплаты.РайонныйКоэффициентРФНаНачалоСобытия = 1;
КонецЕсли;
Если ТипЗнч(ПараметрыОплаты.РасчетПоПравилам2010Года) <> Тип("Булево") Тогда
ПараметрыОплаты.РасчетПоПравилам2010Года = Ложь;
КонецЕсли;
НазначитьПособие = ПараметрыОплаты.НазначитьПособие;
Если НазначитьПособие = Истина Тогда
ПрименятьОграничениеДляПособийПоНС_ПЗ = (ПараметрыОплаты.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ТравмаНаПроизводстве
Или ПараметрыОплаты.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.Профзаболевание)
И ПараметрыОплаты.ОграничениеПособия = Перечисления.ВидыОграниченияПособия.МаксимальныйРазмерЕжемесячнойСтраховойВыплаты;
ОграниченияДляПособийПоНС_ПЗ = Новый Соответствие;
Если ПрименятьОграничениеДляПособийПоНС_ПЗ Тогда
ИзмеренияДаты = Новый ТаблицаЗначений;
ИзмеренияДаты.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
Для Каждого СтрокаТаблицы Из СтрокиРасчета Цикл
ИзмеренияДаты.Добавить().Период = СтрокаТаблицы.ДатаНачала;
ОграниченияДляПособийПоНС_ПЗ.Вставить(СтрокаТаблицы.ДатаНачала,0);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ПараметрыПостроения = ЗарплатаКадрыОбщиеНаборыДанных.ПараметрыПостроенияДляСоздатьВТИмяРегистраСрез();
ПараметрыПостроения.ВсеЗаписи = Истина;
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
"МаксимальныйРазмерЕжемесячнойСтраховойВыплаты",
Запрос.МенеджерВременныхТаблиц,
Ложь,
ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(ИзмеренияДаты),
ПараметрыПостроения);
Запрос.Текст =
"ВЫБРАТЬ
| МаксимальныйРазмер.Период КАК Период,
| МаксимальныйРазмер.Размер КАК Размер
|ИЗ
| ВТМаксимальныйРазмерЕжемесячнойСтраховойВыплатыСрезПоследних КАК МаксимальныйРазмер";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОграниченияДляПособийПоНС_ПЗ.Вставить(Выборка.Период, Выборка.Размер * 4);
КонецЦикла;
Иначе
Для Каждого СтрокаТаблицы Из СтрокиРасчета Цикл
ОграниченияДляПособийПоНС_ПЗ.Вставить(СтрокаТаблицы.ДатаНачала, 0);
КонецЦикла;
КонецЕсли;
КонецЕсли;
ПрименятьОграничениеПособияСнизуМРОТПоМесяцам = (
ПараметрыОплаты.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком);
Если ПрименятьОграничениеПособияСнизуМРОТПоМесяцам Тогда
КэшРасчетаПоМесяцам = Новый ТаблицаЗначений;
КэшРасчетаПоМесяцам.Колонки.Добавить("СтрокаТаблицыРасчета");
КэшРасчетаПоМесяцам.Колонки.Добавить("НачалоМесяца");
КэшРасчетаПоМесяцам.Колонки.Добавить("Результат");
КэшРасчетаПоМесяцам.Колонки.Добавить("РезультатБезЛьгот");
КэшРасчетаПоМесяцам.Колонки.Добавить("ОграничениеПособияСнизу");
Месяцы = Новый Массив;
КонецЕсли;
ДатаОтменыРасчета2010Года = УчетПособийСоциальногоСтрахованияКлиентСервер.ДатаНачалаРеформыСоцСтрахования();
Для Каждого СтрокаТаблицы Из СтрокиРасчета Цикл
Сторно = Ложь;
Если ПрименяетсяСторнирование Тогда
Сторно = СтрокаТаблицы.Сторно;
КонецЕсли;
СтрокаТаблицы.Результат = 0;
СтрокаТаблицы.Дополнительно.Вставить("РезультатВТомЧислеЗаСчетФБ", 0);
Если НазначитьПособие <> Истина Тогда
// Нет данных для расчета.
Продолжить;
КонецЕсли;
ОплачиваемоеВремя = РасчетЗарплаты.ЗначениеПоказателяПоИдентификатору(СтрокаТаблицы.Показатели, "КалендарныеДни");
Если ОплачиваемоеВремя = Неопределено Тогда
ОплачиваемоеВремя = 0;
КонецЕсли;
Если ПараметрыОплаты.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком
И ЗначениеЗаполнено(ПараметрыОплаты.ДатаНачалаПоловиннойОплаты)
И СтрокаТаблицы.ДатаНачала >= ПараметрыОплаты.ДатаНачалаПоловиннойОплаты Тогда
ПроцентОплаты = 50;
Иначе
ПроцентОплаты = ПараметрыОплаты.ПроцентОплаты;
КонецЕсли;
ПрименятьОграничениеМРОТом = ПараметрыОплаты.ОграничениеПособия = Перечисления.ВидыОграниченияПособия.ОграничениеВРазмереММОТ
Или (СтрокаТаблицы.ДатаНачала >= ПараметрыОплаты.ДатаНарушенияРежима И ЗначениеЗаполнено(ПараметрыОплаты.ДатаНарушенияРежима));
ПрименятьОграничениеМРОТомБезЛьгот = ПараметрыОплаты.ОграничениеПособияБезЛьгот = Перечисления.ВидыОграниченияПособия.ОграничениеВРазмереММОТ
Или (СтрокаТаблицы.ДатаНачала >= ПараметрыОплаты.ДатаНарушенияРежима И ЗначениеЗаполнено(ПараметрыОплаты.ДатаНарушенияРежима));
РасчетПоПравилам2010Года = ПараметрыОплаты.РасчетПоПравилам2010Года
Или ПараметрыОплаты.ПериодРегистрации < ДатаОтменыРасчета2010Года
Или ПараметрыОплаты.ДатаНачалаСобытия < ДатаОтменыРасчета2010Года;
ТекущийРайонныйКоэффициент = 1;
РайонныйКоэффициентРФ = РасчетЗарплаты.ЗначениеПоказателяПоИдентификатору(СтрокаТаблицы.Показатели, "РайонныйКоэффициентРФ");
Если РайонныйКоэффициентРФ <> Неопределено Тогда
ТекущийРайонныйКоэффициент = Макс(РайонныйКоэффициентРФ, 1);
КонецЕсли;
МРОТ = РасчетЗарплаты.ЗначениеПоказателяПоИдентификатору(СтрокаТаблицы.Показатели, "МРОТ");
ТекущийМРОТ = МРОТ * ТекущийРайонныйКоэффициент;
НормированноеОграничениеДляПособийПоНС_ПЗ = ОграниченияДляПособийПоНС_ПЗ[СтрокаТаблицы.ДатаНачала];
НормаВремени = День(КонецМесяца(СтрокаТаблицы.ДатаНачала));
Если ОплачиваемоеВремя < НормаВремени Тогда
ОграничениеПособияМРОТом = Окр(Окр(ТекущийМРОТ / НормаВремени, 2) * ОплачиваемоеВремя, 2);
НормированноеОграничениеДляПособийПоНС_ПЗ = Окр(Окр(НормированноеОграничениеДляПособийПоНС_ПЗ / НормаВремени, 2) * ОплачиваемоеВремя, 2);
Иначе
ОграничениеПособияМРОТом = Окр(ТекущийМРОТ,2);
КонецЕсли;
Если РасчетПоПравилам2010Года Тогда
РазмерОграниченияДля2010года = Окр(РазмерОграниченияДля2010года() / 365, 2);
Если ПараметрыОплаты.ОграничениеПособия = Перечисления.ВидыОграниченияПособия.БезОграничений Тогда
Результат = ОплачиваемоеВремя * Окр(ПараметрыОплаты.СреднийДневнойЗаработок * ПроцентОплаты / 100, 2);
Иначе
Результат = ОплачиваемоеВремя * Окр(Мин(ПараметрыОплаты.СреднийДневнойЗаработок, РазмерОграниченияДля2010года) * ПроцентОплаты / 100, 2);
КонецЕсли;
// Ограничение пособия сверху
Если ПрименятьОграничениеМРОТом Тогда
Результат = Мин(Результат, ОграничениеПособияМРОТом);
КонецЕсли;
СтрокаТаблицы.Результат = Результат * ?(Сторно, -1, 1);
Если ЗначениеЗаполнено(ПараметрыОплаты.ПроцентОплатыБезЛьгот) И ЗначениеЗаполнено(ПараметрыОплаты.ФинансированиеФедеральнымБюджетом) Тогда
Если ПараметрыОплаты.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком
И ЗначениеЗаполнено(ПараметрыОплаты.ДатаНачалаПоловиннойОплаты)
И СтрокаТаблицы.ДатаНачала >= ПараметрыОплаты.ДатаНачалаПоловиннойОплаты Тогда
ПроцентОплаты = 50;
Иначе
ПроцентОплаты = ПараметрыОплаты.ПроцентОплатыБезЛьгот;
КонецЕсли;
Если ПараметрыОплаты.ОграничениеПособияБезЛьгот = Перечисления.ВидыОграниченияПособия.БезОграничений Тогда
РезультатБезЛьгот = ОплачиваемоеВремя * Окр(ПараметрыОплаты.СреднийДневнойЗаработок * ПроцентОплаты / 100, 2);
Иначе
РезультатБезЛьгот = ОплачиваемоеВремя * Окр(Мин(ПараметрыОплаты.СреднийДневнойЗаработок, РазмерОграниченияДля2010года) * ПроцентОплаты / 100, 2);
КонецЕсли;
// Ограничение пособия сверху
Если ПрименятьОграничениеМРОТомБезЛьгот Тогда
РезультатБезЛьгот = Мин(РезультатБезЛьгот, ОграничениеПособияМРОТом);
КонецЕсли;
Если РезультатБезЛьгот < Результат Тогда
СтрокаТаблицы.Дополнительно.РезультатВТомЧислеЗаСчетФБ = (Результат - РезультатБезЛьгот) * ?(Сторно, -1, 1);
СтрокаТаблицы.ЗаписьРасчета.РезультатВТомЧислеЗаСчетФБ = СтрокаТаблицы.Дополнительно.РезультатВТомЧислеЗаСчетФБ;
КонецЕсли;
КонецЕсли;
Иначе
МинимальныйСреднедневнойЗаработок = МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ(
ПараметрыОплаты.МинимальныйСреднедневнойЗаработок,
ПараметрыОплаты.РайонныйКоэффициентРФНаНачалоСобытия,
ПараметрыОплаты.ДатаНачалаСобытия);
Если ПараметрыОплаты.СреднийДневнойЗаработок >= МинимальныйСреднедневнойЗаработок Тогда
ДневноеПособие = Окр(ПараметрыОплаты.СреднийДневнойЗаработок * ПроцентОплаты / 100, 2);
Результат = Окр(ОплачиваемоеВремя * ДневноеПособие, 2);
Иначе
ДневноеПособие = Окр(ПараметрыОплаты.МинимальныйСреднедневнойЗаработок * ПроцентОплаты / 100, 2);
Результат = Окр(ОплачиваемоеВремя * ДневноеПособие * ПараметрыОплаты.РайонныйКоэффициентРФНаНачалоСобытия, 2);
КонецЕсли;
// Ограничение пособия сверху
Если ПрименятьОграничениеМРОТом Тогда
Результат = Мин(Результат, ОграничениеПособияМРОТом);
ИначеЕсли ПрименятьОграничениеДляПособийПоНС_ПЗ Тогда
Результат = Мин(Результат, НормированноеОграничениеДляПособийПоНС_ПЗ);
КонецЕсли;
// Ограничение пособия снизу
ОграничениеПособияСнизу = ОграничениеПособияСнизуМРОТ(
ПараметрыОплаты.ПричинаНетрудоспособности,
СтрокаТаблицы.ДатаНачала,
ОплачиваемоеВремя,
РайонныйКоэффициентРФ,
ПараметрыОплаты.ДоляНеполногоВремени,
МРОТ);
Если ОграничениеПособияСнизу > 0 Тогда
Если ПрименятьОграничениеПособияСнизуМРОТПоМесяцам Тогда
НачалоМесяца = НачалоМесяца(СтрокаТаблицы.ДатаНачала);
Если Месяцы.Найти(НачалоМесяца) = Неопределено Тогда
Месяцы.Добавить(НачалоМесяца);
КонецЕсли;
СтрокаТаблицыПоМесяцам = КэшРасчетаПоМесяцам.Добавить();
СтрокаТаблицыПоМесяцам.СтрокаТаблицыРасчета = СтрокаТаблицы;
СтрокаТаблицыПоМесяцам.НачалоМесяца = НачалоМесяца;
СтрокаТаблицыПоМесяцам.Результат = Результат;
СтрокаТаблицыПоМесяцам.РезультатБезЛьгот = 0;
СтрокаТаблицыПоМесяцам.ОграничениеПособияСнизу = ОграничениеПособияСнизу;
Иначе
Результат = Макс(Результат, ОграничениеПособияСнизу);
КонецЕсли;
КонецЕсли;
СтрокаТаблицы.Результат = Результат * ?(Сторно, -1, 1);
// Часть пособия, финансируемая федеральным бюджетом.
Если ЗначениеЗаполнено(ПараметрыОплаты.ПроцентОплатыБезЛьгот) И ЗначениеЗаполнено(ПараметрыОплаты.ФинансированиеФедеральнымБюджетом) Тогда
Если ПараметрыОплаты.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком
И ЗначениеЗаполнено(ПараметрыОплаты.ДатаНачалаПоловиннойОплаты)
И СтрокаТаблицы.ДатаНачала >= ПараметрыОплаты.ДатаНачалаПоловиннойОплаты Тогда
ПроцентОплаты = 50;
Иначе
ПроцентОплаты = ПараметрыОплаты.ПроцентОплатыБезЛьгот;
КонецЕсли;
Если ПараметрыОплаты.СреднийДневнойЗаработок >= МинимальныйСреднедневнойЗаработок Тогда
ДневноеПособие = Окр(ПараметрыОплаты.СреднийДневнойЗаработок * ПроцентОплаты / 100, 2);
РезультатБезЛьгот = Окр(ОплачиваемоеВремя * ДневноеПособие, 2);
Иначе
ДневноеПособие = Окр(ПараметрыОплаты.МинимальныйСреднедневнойЗаработок * ПроцентОплаты / 100, 2);
РезультатБезЛьгот = Окр(ОплачиваемоеВремя * ДневноеПособие * ПараметрыОплаты.РайонныйКоэффициентРФНаНачалоСобытия, 2);
КонецЕсли;
Если ПрименятьОграничениеМРОТомБезЛьгот Тогда
РезультатБезЛьгот = Мин(РезультатБезЛьгот, ОграничениеПособияМРОТом);
КонецЕсли;
// Ограничение пособия снизу в размере МРОТ,
// применяемое с 01.04.2020 в связи с эпидемией коронавируса,
// не зависит от процентов стажа.
Если ОграничениеПособияСнизу > 0 Тогда
Если ПрименятьОграничениеПособияСнизуМРОТПоМесяцам Тогда
СтрокаТаблицыПоМесяцам.РезультатБезЛьгот = РезультатБезЛьгот;
Иначе
РезультатБезЛьгот = Макс(РезультатБезЛьгот, ОграничениеПособияСнизу);
КонецЕсли;
КонецЕсли;
Если РезультатБезЛьгот < Результат Тогда
СтрокаТаблицы.Дополнительно.РезультатВТомЧислеЗаСчетФБ = (Результат - РезультатБезЛьгот) * ?(Сторно, -1, 1);
СтрокаТаблицы.ЗаписьРасчета.РезультатВТомЧислеЗаСчетФБ = СтрокаТаблицы.Дополнительно.РезультатВТомЧислеЗаСчетФБ;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//-=Н=- по заявке № 816268, Необходимо найти причину, исправить и чтоб в дальнейшем при расчете Больничного колонка "В том числе за счет фед.бюджета" не заполнялась.
//Причина в том, что софинансирование с Фед.бюджетом вообще не используется.
//Милов А.В., 14 октября 2020 г. 14:06:22
//Цель: Исправление ошибки
//---------------
//-=Новый код=-
//---------------
ЕСЛИ Не (ЗначениеЗаполнено(ПараметрыОплаты.ПроцентОплатыБезЛьгот) И ЗначениеЗаполнено(ПараметрыОплаты.ФинансированиеФедеральнымБюджетом)) Тогда
Возврат;
КОНЕЦЕСЛИ;
//-=К=-
Если ПрименятьОграничениеПособияСнизуМРОТПоМесяцам И КэшРасчетаПоМесяцам.Количество() > 0 Тогда
Для Каждого НачалоМесяца Из Месяцы Цикл
Копия = КэшРасчетаПоМесяцам.Скопировать(Новый Структура("НачалоМесяца", НачалоМесяца));
ИтогРезультат = Копия.Итог("Результат");
ИтогРезультатБезЛьгот = Копия.Итог("РезультатБезЛьгот");
ИтогОграничениеПособияСнизу = Копия.Итог("ОграничениеПособияСнизу");
ЗаменитьРезультатНаМРОТ = (ИтогОграничениеПособияСнизу > ИтогРезультат);
ЗаменитьРезультатБезЛьготНаМРОТ = (ИтогОграничениеПособияСнизу > ИтогРезультатБезЛьгот);
Если ЗаменитьРезультатНаМРОТ Или ЗаменитьРезультатБезЛьготНаМРОТ Тогда
Для Каждого КэшСтроки Из Копия Цикл
СтрокаТаблицы = КэшСтроки.СтрокаТаблицыРасчета;
Сторно = ПрименяетсяСторнирование И СтрокаТаблицы.Сторно;
Если ЗаменитьРезультатНаМРОТ Тогда
КэшСтроки.Результат = КэшСтроки.ОграничениеПособияСнизу;
СтрокаТаблицы.Результат = КэшСтроки.ОграничениеПособияСнизу * ?(Сторно, -1, 1);
КонецЕсли;
Если ЗаменитьРезультатБезЛьготНаМРОТ Тогда
КэшСтроки.РезультатБезЛьгот = КэшСтроки.ОграничениеПособияСнизу;
КонецЕсли;
Если КэшСтроки.РезультатБезЛьгот < КэшСтроки.Результат Тогда
СтрокаТаблицы.Дополнительно.РезультатВТомЧислеЗаСчетФБ = (КэшСтроки.Результат - КэшСтроки.РезультатБезЛьгот) * ?(Сторно, -1, 1);
СтрокаТаблицы.ЗаписьРасчета.РезультатВТомЧислеЗаСчетФБ = СтрокаТаблицы.Дополнительно.РезультатВТомЧислеЗаСчетФБ;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Показать