#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПриКопировании(ОбъектКопирования)
ИсправленныйДокумент = ОбъектКопирования.Ссылка;
ИдентификаторРеестра = Неопределено;
ФиксацияИзменений.Очистить();
ОтключитьПроверкиПроведения = Ложь;
ХранилищеXML = Неопределено;
ДатаОтправки = Неопределено;
ИдентификаторСообщения = Неопределено;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
ВерсияДокумента = Менеджер().АктуальнаяВерсия();
ЗаполнитьДатуСсылку();
ПрямыеВыплатыПособийСоциальногоСтрахования.ОбработкаЗаполненияЗаявленияОВыплатахРодителямДетейИнвалидов(
ЭтотОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка);
ДополнительныеСвойства.Вставить("Заполнение", Истина);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Менеджер = Менеджер();
МассивНепроверяемыхРеквизитов = Новый Массив;
МассивНепроверяемыхРеквизитов.Добавить("Год");
ТипСообщенияЧислом = Менеджер.ТипСообщения(ЭтотОбъект);
Если ТипСообщенияЧислом = 12010 Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "СоставительФИО");
МассивНепроверяемыхРеквизитов.Добавить("КодПодчиненностиФСС");
ВсегоПособий = Оплаты.Итог("СуммаПособия");
Если ВсегоПособий >= 1000000000 Тогда
Текст = СтрШаблон(НСтр("ru = 'Сумма пособий (%1) превышает предельно допустимое значение (%2)'"), ВсегоПособий, 1000000000);
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "ВсегоПособий");
КонецЕсли;
Если ЗначениеЗаполнено(ТелефонСоставителя) Тогда
ПредставлениеТелефона = КонтактнаяИнформацияБЗК.ПредставлениеТелефона(ТелефонСоставителя, 30);
Если СтрДлина(ПредставлениеТелефона) < 5 Тогда
Текст = НСтр("ru = 'Номер телефона (%1) должен содержать не менее %2 символов.'");
Текст = СтрШаблон(Текст, ПредставлениеТелефона, 5);
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "ТелефонСоставителя");
КонецЕсли;
Иначе
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "ТелефонСоставителя");
КонецЕсли;
Если ЗначениеЗаполнено(АдресЭлектроннойПочтыОрганизации) И СтрДлина(АдресЭлектроннойПочтыОрганизации) < 4 Тогда
Текст = НСтр("ru = 'Адрес электронной почты (%1) должен содержать не менее %2 символов.'");
Текст = СтрШаблон(Текст, АдресЭлектроннойПочтыОрганизации, 4);
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "АдресЭлектроннойПочтыОрганизации");
КонецЕсли;
ИначеЕсли ТипСообщенияЧислом = 120 Тогда
Если СтрДлина(АдресЭлектроннойПочтыОрганизации) > 40 Тогда
Текст = НСтр("ru = 'Адрес электронной почты (%1) должен содержать не более %2 символов.'");
Текст = СтрШаблон(Текст, АдресЭлектроннойПочтыОрганизации, 40);
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "АдресЭлектроннойПочтыОрганизации");
КонецЕсли;
КонецЕсли;
Если НЕ РегламентированнаяОтчетностьВызовСервера.ЭтоЮридическоеЛицо(Организация) Тогда
МассивНепроверяемыхРеквизитов.Добавить("КПП");
КонецЕсли;
ЭтоФормыПосле2022 = (Дата >= Менеджер.ДатаФорм2022());
ЭтоФормыПосле2024 = (Дата >= Менеджер.ДатаФорм2024());
ВидимостьПоляРебенок = СЭДОФСС.ВидимостьПоляРодственник();
ВидимостьПоляДокументОснование = Менеджер.ВидимостьОснования();
МассивНепроверяемыхРеквизитов.Добавить("Оплаты.СотрудникСНИЛС");
МассивНепроверяемыхРеквизитов.Добавить("Оплаты.Ребенок");
МассивНепроверяемыхРеквизитов.Добавить("Оплаты.РебенокФамилия");
МассивНепроверяемыхРеквизитов.Добавить("Оплаты.РебенокИмя");
МассивНепроверяемыхРеквизитов.Добавить("Оплаты.РебенокДатаРождения");
Если Не ЭтоФормыПосле2024 Тогда
МассивНепроверяемыхРеквизитов.Добавить("Оплаты.РебенокСНИЛС");
КонецЕсли;
ИмяТаблицы = "Оплаты";
Для Каждого СтрокаТаблицы Из Оплаты Цикл
ЕстьНакопленныеДни = ЗначениеЗаполнено(СтрокаТаблицы.НакопленоДнейЗаМесяц);
ЕстьДниЗаГод = ЗначениеЗаполнено(СтрокаТаблицы.КоличествоДнейЗаГод);
ЕстьДниЗаМесяц = ЗначениеЗаполнено(СтрокаТаблицы.КоличествоДней) Или (Не ЕстьДниЗаГод И Не ЕстьНакопленныеДни);
Если ЭтоФормыПосле2022 Тогда
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Ребенок) И ВидимостьПоляРебенок Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "Ребенок");
Иначе
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "РебенокФамилия");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "РебенокИмя");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "РебенокДатаРождения");
КонецЕсли;
КонецЕсли;
Если ЭтоФормыПосле2024 Тогда
Если ЕстьДниЗаМесяц Тогда
ПроверитьФорматЧислаВСтрокеТаблицы(Отказ, ИмяТаблицы, СтрокаТаблицы, "КоличествоЧасовЗаМесяц", 1, 384);
КонецЕсли;
Если ЕстьНакопленныеДни Тогда
ПроверитьФорматЧислаВСтрокеТаблицы(Отказ, ИмяТаблицы, СтрокаТаблицы, "НакопленоЧасовЗаМесяц", 1, 352);
КонецЕсли;
Если ЕстьДниЗаГод Тогда
ПроверитьФорматЧислаВСтрокеТаблицы(Отказ, ИмяТаблицы, СтрокаТаблицы, "КоличествоЧасовЗаГод", 1, 192);
КонецЕсли;
КонецЕсли;
Если ЭтоФормыПосле2024 И (ЕстьДниЗаГод Или ЕстьДниЗаМесяц) Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "ПриказНомер");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "ПриказДата");
КонецЕсли;
Если Не ЭтоФормыПосле2022 Или ЕстьДниЗаМесяц Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СреднедневнойЗаработок");
КонецЕсли;
Если ЭтоФормыПосле2024 И ЕстьДниЗаГод Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СреднедневнойЗаработокЗаГод");
КонецЕсли;
Если Не ЭтоФормыПосле2024 Или ЕстьДниЗаМесяц Или ЕстьДниЗаГод Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "КоличествоСтраниц");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СуммаПособия");
КонецЕсли;
Если ОтправлятьЧерезСЭДО Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "ВидЗанятости");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СправкаСерия");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СправкаНомер");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СправкаДатаВыдачи");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СправкаДатаУстановления");
КонецЕсли;
Текст = "";
Если КадровыйУчетКлиентСервер.СНИЛСЗаполнен(СтрокаТаблицы.РебенокСНИЛС) Тогда
Если Не РегламентированныеДанныеКлиентСервер.СтраховойНомерПФРСоответствуетТребованиям(СтрокаТаблицы.РебенокСНИЛС, Текст) Тогда
Текст = СтрШаблон(НСтр("ru = 'СНИЛС ребенка указан не верно: %1'"), НРег(Текст));
СообщенияБЗК.СообщитьОбОшибкеВСтрокеТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "РебенокСНИЛС", Текст);
КонецЕсли;
КонецЕсли;
Если КадровыйУчетКлиентСервер.СНИЛСЗаполнен(СтрокаТаблицы.СотрудникСНИЛС) Тогда
Если Не РегламентированныеДанныеКлиентСервер.СтраховойНомерПФРСоответствуетТребованиям(СтрокаТаблицы.СотрудникСНИЛС, Текст) Тогда
Текст = СтрШаблон(НСтр("ru = 'СНИЛС сотрудника указан не верно: %1'"), НРег(Текст));
СообщенияБЗК.СообщитьОбОшибкеВСтрокеТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, "СотрудникСНИЛС", Текст);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЭтоФормыПосле2024 И ОтправлятьЧерезСЭДО Тогда
Если ЗначениеЗаполнено(ИдентификаторРеестра) Тогда
НомерВПределахДня = СЭДОФСС.ИдентификаторРеестраВНомерЧислом(ИдентификаторРеестра);
Если НомерВПределахДня > 9999 Тогда
Текст = НСтр("ru = 'Номер заявления больше 9999. Перенесите документ на другую дату.'");
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "Дата");
КонецЕсли;
Иначе
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "ИдентификаторРеестра");
КонецЕсли;
ФлажкиВидовЗанятости = ФлажкиВидовЗанятости();
Если ВнешнееСовместительство <> ФлажкиВидовЗанятости.ВнешнееСовместительство Тогда
Текст = НСтр("ru = 'Флажок ""Внешнее совместительство"" в шапке не соответствует видам занятости сотрудников в таблице.'");
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "ВнешнееСовместительство");
ИначеЕсли ОсновноеМестоРаботы <> ФлажкиВидовЗанятости.ОсновноеМестоРаботы Тогда
Текст = НСтр("ru = 'Флажок ""Основное место работы"" в шапке не соответствует видам занятости сотрудников в таблице.'");
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "ОсновноеМестоРаботы");
ИначеЕсли ВнешнееСовместительство И ОсновноеМестоРаботы Тогда
Текст = НСтр("ru = 'Через СЭДО невозможно отправить реестр в котором и основные сотрудники, и внешние совместители.
|Рекомендуется перенести строки внешних совместителей в отдельный документ.'");
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "ВнешнееСовместительство");
КонецЕсли;
Если ЗначениеЗаполнено(Банк) И ЗначениеЗаполнено(БИКБанка) И ЗначениеЗаполнено(НомерСчета) Тогда
БанкКоррСчет = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Банк, "КоррСчет");
РезультатПроверки = ПроверкиБЗК.РезультатПроверкиНомераСчета(НомерСчета, БИКБанка, БанкКоррСчет);
Если Не РезультатПроверки.Успех Тогда
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, РезультатПроверки.Пояснение, "НомерСчета");
КонецЕсли;
Иначе
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "Банк");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "БИКБанка");
Если ТипСообщенияЧислом = 12010 Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "НомерСчета");
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(НомерЛицевогоСчета) Или ЗначениеЗаполнено(КБК) Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "НомерЛицевогоСчета");
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "КБК");
ИначеЕсли ТипСообщенияЧислом <> 12010 Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "НомерСчета");
КонецЕсли;
ПредставлениеСтрокПоКоторымБолее13Приказов = ПредставлениеСтрокПоКоторымБолее13Приказов();
Если ЗначениеЗаполнено(ПредставлениеСтрокПоКоторымБолее13Приказов) Тогда
Шапка = НСтр("ru = 'Через СЭДО невозможно отправить реестр в котором более 13 приказов.'");
Подвал = НСтр("ru = 'Рекомендуется перенести часть приказов в отдельный документ.'");
Текст = Шапка + Символы.ПС + ПредставлениеСтрокПоКоторымБолее13Приказов + Символы.ПС + Подвал;
СообщенияБЗК.СообщитьОбОшибкеВОбъекте(Отказ, ЭтотОбъект, Текст, "Оплаты");
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(РегистрационныйНомерСФР) Тогда
МассивНепроверяемыхРеквизитов.Добавить("РегистрационныйНомерФСС");
МассивНепроверяемыхРеквизитов.Добавить("КодПодчиненностиФСС");
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
БудетПроведен = Истина;
ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
БудетПроведен = Ложь;
Иначе
БудетПроведен = Проведен;
КонецЕсли;
ДополнительныеСвойства.Вставить("БудетПроведен", БудетПроведен);
ДоЗаписи = ЗначенияРеквизитовДоЗаписи();
ЗаполнитьДатуСсылку();
Если Не ЗначениеЗаполнено(ДатаСоздания) Тогда
ДатаСоздания = ТекущаяДата();
КонецЕсли;
Если БудетПроведен <> ДоЗаписи.Проведен
Или ПометкаУдаления <> ДоЗаписи.ПометкаУдаления Тогда
ЗаполнитьСтатусДокумента();
КонецЕсли;
Если БудетПроведен Тогда
ТекстXML = Менеджер().ТекстXML(ЭтотОбъект);
Иначе
ТекстXML = "";
КонецЕсли;
ХранилищеXML = Новый ХранилищеЗначения(ТекстXML, Новый СжатиеДанных(9));
Менеджер().ОбновитьФлажокИсправлен(ИсправленныйДокумент, Истина);
Если Не ЭтоНовый()
И ДоЗаписи.ИсправленныйДокумент <> ИсправленныйДокумент
И ЗначениеЗаполнено(ДоЗаписи.ИсправленныйДокумент) Тогда
ЕстьДругоеИсправление = Менеджер().ЕстьДругоеИсправление(ДоЗаписи.ИсправленныйДокумент, Ссылка);
Менеджер().ОбновитьФлажокИсправлен(ДоЗаписи.ИсправленныйДокумент, ЕстьДругоеИсправление);
КонецЕсли;
КонецПроцедуры
Процедура ПередУдалением(Отказ)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ИсправленныйДокумент) Тогда
ЕстьДругоеИсправление = Менеджер().ЕстьДругоеИсправление(ИсправленныйДокумент, Ссылка);
Менеджер().ОбновитьФлажокИсправлен(ИсправленныйДокумент, ЕстьДругоеИсправление);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция Менеджер()
Возврат Документы.ЗаявлениеВФССОВозмещенииВыплатРодителямДетейИнвалидов;
КонецФункции
#Область ОбработкаЗаполнения
Процедура ЗаполнитьДатуСсылку()
Если Не ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
Если Не ЗначениеЗаполнено(Год)
И Дата >= Менеджер().ДатаФорм2024() Тогда
Год = Год(Дата);
КонецЕсли;
Если Не ЗначениеЗаполнено(Ссылка)
И Не ЗначениеЗаполнено(ПолучитьСсылкуНового())
И ДополнительныеСвойства.Свойство("СсылкаНового") Тогда
УстановитьСсылкуНового(ДополнительныеСвойства.СсылкаНового);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ФиксацияВторичныхДанныхВДокументах
Функция ОбъектЗафиксирован() Экспорт
Возврат Менеджер().ОбъектЗафиксирован(ЭтотОбъект);
КонецФункции
Функция ОбновитьВторичныеДанные(ПараметрыФиксации = Неопределено) Экспорт
УстановитьПривилегированныйРежим(Истина);
Модифицирован = Ложь;
Если ОбъектЗафиксирован() Тогда
Возврат Модифицирован;
КонецЕсли;
ЗаполнитьДатуСсылку();
Если ПараметрыФиксации = Неопределено Тогда
ПараметрыФиксации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Метаданные().ПолноеИмя()).ПараметрыФиксацииВторичныхДанных();
КонецЕсли;
Если ЗаполнитьДанныеОрганизации(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьТипСообщения(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьРеквизитыБанка(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьСведенияОРуководителе(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьСведенияОПредставителеСФР(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьДанныеЛицевогоСчета(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьДанныеЗарплатаКадрыРасширенная(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьСведенияОСотрудниках(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьСведенияОРодственниках(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьДанныеРебенка(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьИдентификаторРеестра() Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьФлажкиВидовЗанятости(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьСтатусДокумента() Тогда
Модифицирован = Истина;
КонецЕсли;
Если ЗаполнитьПерерасчет(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Возврат Модифицирован;
КонецФункции
Функция ЗаполнитьДанныеОрганизации(ПараметрыФиксации)
Если Не ЗначениеЗаполнено(Организация) Тогда
Возврат Ложь;
КонецЕсли;
Реквизиты = Новый Структура(
"ГоловнаяОрганизация,
|Страхователь,
|РегистрационныйНомерСФР,
|РегномерСФРГоловнойОрганизации,
|РегистрационныйНомерФСС,
|ДополнительныйКодФСС,
|КодПодчиненностиФСС,
|НаименованиеТерриториальногоОрганаФСС,
|СтраховательНаименование,
|ИНН,
|КПП,
|Руководитель,
|ДолжностьРуководителя,
|ОснованиеПодписиРуководителя,
|ПредставительСФР,
|ДолжностьПредставителяСФР,
|ОснованиеПодписиПредставителяСФР,
|АдресОрганизации");
СведенияОПодписях = ПодписиДокументов.СведенияОПодписяхПоУмолчаниюДляОбъектаМетаданных(Метаданные(), Организация);
ЗаполнитьЗначенияСвойств(Реквизиты, СведенияОПодписях);
ИменаПолей =
"ГоловнаяОрганизация,
|Страхователь,
|РегНомерСФР,
|РегНомерСФРГоловнойОрганизации,
|РегистрационныйНомерФСС,
|КодПодчиненностиФСС,
|ДополнительныйКодФСС,
|НаименованиеТерриториальногоОрганаФСС,
|НаимЮЛПол,
|НаимЮЛСокр,
|ИННЮЛ,
|КППЮЛ,
|БанкСчетНомер,
|БанкСчетНаимБанка,
|БанкСчетБИКБанка,
|АдрЮР_JSON,
|ФИООтпр,
|ТелОрганизации_JSON,
|АдресЭлектроннойПочтыОрганизации";
Сведения = СЭДОФСС.СведенияОСтрахователе(Организация, ИменаПолей, Дата);
ЗаполнитьЗначенияСвойств(Реквизиты, Сведения);
Реквизиты.ГоловнаяОрганизация = Сведения.ГоловнаяОрганизация;
Реквизиты.Страхователь = Сведения.Страхователь;
Реквизиты.РегистрационныйНомерСФР = Сведения.РегНомерСФР;
Реквизиты.РегномерСФРГоловнойОрганизации = Сведения.РегНомерСФРГоловнойОрганизации;
Реквизиты.ИНН = Сведения.ИННЮЛ;
Реквизиты.КПП = Сведения.КППЮЛ;
Реквизиты.АдресОрганизации = Сведения.АдрЮР_JSON;
ДополнительныеСвойства.Вставить("СведенияОСтрахователе", Сведения);
Если ОтправлятьЧерезСЭДО
И Не ФиксацияВторичныхДанныхВДокументах.РеквизитШапкиЗафиксирован(ЭтотОбъект, "Банк") Тогда
Реквизиты.Вставить("НомерСчета", Сведения.БанкСчетНомер);
Реквизиты.Вставить("НаименованиеБанка", Сведения.БанкСчетНаимБанка);
Реквизиты.Вставить("БИКБанка", Сведения.БанкСчетБИКБанка);
Реквизиты.Вставить("Банк", СЭДОФСС.НайтиБанкПоБИК(Сведения.БанкСчетБИКБанка));
КонецЕсли;
Если СтрДлина(Сведения.НаимЮЛПол) <= 150 Или Не ЗначениеЗаполнено(Сведения.НаимЮЛСокр) Тогда
Реквизиты.СтраховательНаименование = Сведения.НаимЮЛПол;
Иначе
Реквизиты.СтраховательНаименование = Сведения.НаимЮЛСокр;
КонецЕсли;
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
Функция ЗаполнитьТипСообщения(ПараметрыФиксации)
Если ФиксацияВторичныхДанныхВДокументах.РеквизитШапкиЗафиксирован(ЭтотОбъект, "ТипСообщения") Тогда
Возврат Ложь;
КонецЕсли;
Если СЭДОФСС.ТекущаяДатаФонда() >= СЭДОФСС.ДатаПереходаПособия8НаЕЦП() Тогда
НовоеЗначение = 12010;
Иначе
НовоеЗначение = 120;
КонецЕсли;
Возврат ФиксацияВторичныхДанныхВДокументах.ИзменитьЗначениеРеквизита(ТипСообщения, НовоеЗначение);
КонецФункции
Функция ЗаполнитьРеквизитыБанка(ПараметрыФиксации)
Если Не ФиксацияВторичныхДанныхВДокументах.РеквизитШапкиЗафиксирован(ЭтотОбъект, "Банк") Тогда
Возврат Ложь;
КонецЕсли;
РеквизитыБанка = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Банк, "Наименование, Код");
Реквизиты = Новый Структура;
Реквизиты.Вставить("НаименованиеБанка", РеквизитыБанка.Наименование);
Реквизиты.Вставить("БИКБанка", РеквизитыБанка.Код);
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
Функция ЗаполнитьИдентификаторРеестра()
Если ФиксацияВторичныхДанныхВДокументах.РеквизитШапкиЗафиксирован(ЭтотОбъект, "ИдентификаторРеестра") Тогда
Возврат Ложь;
КонецЕсли;
Префикс = ИдентификаторРеестраБезНомера();
Если ЗначениеЗаполнено(ИдентификаторРеестра)
И СтрНачинаетсяС(ИдентификаторРеестра, Префикс)
И Не ИдентификаторРеестраЗанят() Тогда
Возврат Ложь;
КонецЕсли;
НомерВПределахДня = НезанятыйНомерВПределахДня();
ИдентификаторРеестра = Префикс + Формат(НомерВПределахДня, "ЧЦ=4; ЧН=; ЧВН=; ЧГ=");
Возврат Истина;
КонецФункции
Функция ИдентификаторРеестраБезНомера()
Регномер = СЭДОФСС.РегномерДляИдентификатораРеестра(ЭтотОбъект);
ФорматДаты = Формат(Дата, "ДФ=yyyy_MM_dd");
Возврат "D_" + Регномер + "_" + ФорматДаты + "_";
КонецФункции
Функция ИдентификаторРеестраЗанят()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Шапка.Ссылка КАК Ссылка
|ИЗ
| Документ.ЗаявлениеВФССОВозмещенииВыплатРодителямДетейИнвалидов КАК Шапка
|ГДЕ
| Шапка.ИдентификаторРеестра = &ИдентификаторРеестра
| И Шапка.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр("ИдентификаторРеестра", ИдентификаторРеестра);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Функция НезанятыйНомерВПределахДня()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 10
| Заявление.ИдентификаторРеестра КАК ИдентификаторРеестра
|ИЗ
| Документ.ЗаявлениеВФССОВозмещенииВыплатРодителямДетейИнвалидов КАК Заявление
|ГДЕ
| Заявление.Дата МЕЖДУ &НачалоДня И &КонецДня
| И Заявление.Страхователь = &Страхователь
| И Заявление.Ссылка <> &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Заявление.ИдентификаторРеестра УБЫВ";
Запрос.УстановитьПараметр("НачалоДня", НачалоДня(Дата));
Запрос.УстановитьПараметр("КонецДня", КонецДня(Дата));
Запрос.УстановитьПараметр("Страхователь", Страхователь);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НомерЧислом = СЭДОФСС.ИдентификаторРеестраВНомерЧислом(Выборка.ИдентификаторРеестра);
Если ЗначениеЗаполнено(НомерЧислом) Тогда
Возврат НомерЧислом + 1;
КонецЕсли;
КонецЦикла;
Возврат 1;
КонецФункции
Функция ЗаполнитьДанныеЗарплатаКадрыРасширенная(ПараметрыФиксации)
Возврат ПрямыеВыплатыПособийСоциальногоСтрахования.ОбновитьДанныеЗаявленияОВыплатахРодителямДетейИнвалидов(
ЭтотОбъект,
ПараметрыФиксации);
КонецФункции
Функция ЗаполнитьСведенияОРуководителе(ПараметрыФиксации)
Если Не ЗначениеЗаполнено(Руководитель) Тогда
Возврат Ложь
КонецЕсли;
Реквизиты = Новый Структура("РуководительФИО");
КадровыеДанныеФизическихЛиц = КадровыйУчет.КадровыеДанныеФизическихЛиц(
Ложь,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Руководитель),
"ФИОПолные",
Дата);
КадровыеДанные = КадровыеДанныеФизическихЛиц.Найти(Руководитель, "ФизическоеЛицо");
Если КадровыеДанные <> Неопределено Тогда
Реквизиты.РуководительФИО = КадровыеДанные.ФИОПолные;
КонецЕсли;
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
Функция ЗаполнитьСведенияОСотрудниках(ПараметрыФиксации)
Если Оплаты.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
МассивСотрудников = КоллекцииБЗК.УникальныеЗначенияКолонки(Оплаты, "Сотрудник");
КоллекцииБЗК.УдалитьПустыеЗначенияМассива(МассивСотрудников);
Если МассивСотрудников.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ЕстьИзменения = Ложь;
ИменаПолей =
"Фамилия,
|Имя,
|Отчество,
|СтраховойНомерПФР,
|ВидЗанятости,
|ФизическоеЛицо";
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Ложь, МассивСотрудников, ИменаПолей, Дата);
Реквизиты = Новый Структура("СотрудникФамилия, СотрудникИмя, СотрудникОтчество, СотрудникСНИЛС,
|ВидЗанятости, ФизическоеЛицо");
Для Каждого СтрокаТаблицы Из Оплаты Цикл
КадровыеДанные = КадровыеДанныеСотрудников.Найти(СтрокаТаблицы.Сотрудник, "Сотрудник");
Если КадровыеДанные = Неопределено Тогда
Продолжить;
КонецЕсли;
Реквизиты.СотрудникФамилия = КадровыеДанные.Фамилия;
Реквизиты.СотрудникИмя = КадровыеДанные.Имя;
Реквизиты.СотрудникОтчество = КадровыеДанные.Отчество;
Реквизиты.СотрудникСНИЛС = КадровыеДанные.СтраховойНомерПФР;
Реквизиты.ВидЗанятости = КадровыеДанные.ВидЗанятости;
Реквизиты.ФизическоеЛицо = КадровыеДанные.ФизическоеЛицо;
Если ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеСтроки(
Реквизиты,
ЭтотОбъект,
"Оплаты",
СтрокаТаблицы,
ПараметрыФиксации) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
КонецЦикла;
Возврат ЕстьИзменения;
КонецФункции
Функция ЗаполнитьСведенияОРодственниках(ПараметрыФиксации)
Если Не СЭДОФСС.ВидимостьПоляРодственник() Тогда
Возврат Ложь;
КонецЕсли;
Если Оплаты.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ЕстьИзменения = Ложь;
МассивСсылок = КоллекцииБЗК.УникальныеЗначенияКолонки(Оплаты, "Ребенок");
КоллекцииБЗК.УдалитьПустыеЗначенияМассива(МассивСсылок);
Если МассивСсылок.Количество() > 0 Тогда
ИменаПолей =
"Фамилия,
|Имя,
|Отчество,
|ДатаРождения,
|СНИЛС,
|СтепеньРодства,
|КодСвязи";
СведенияОРодственниках = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивСсылок, ИменаПолей, Ложь);
Иначе
СведенияОРодственниках = Новый Соответствие;
КонецЕсли;
ИменаРеквизитов = "РебенокФамилия, РебенокИмя, РебенокОтчество, РебенокДатаРождения, РебенокСНИЛС, Статус";
Для Каждого СтрокаТаблицы Из Оплаты Цикл
СведенияОРодственнике = СведенияОРодственниках[СтрокаТаблицы.Ребенок];
Реквизиты = Новый Структура(ИменаРеквизитов);
Если СведенияОРодственнике <> Неопределено Тогда
Реквизиты.РебенокФамилия = СведенияОРодственнике.Фамилия;
Реквизиты.РебенокИмя = СведенияОРодственнике.Имя;
Реквизиты.РебенокОтчество = СведенияОРодственнике.Отчество;
Реквизиты.РебенокДатаРождения = СведенияОРодственнике.ДатаРождения;
Реквизиты.РебенокСНИЛС = СведенияОРодственнике.СНИЛС;
Если СведенияОРодственнике.КодСвязи = "38" Тогда
Реквизиты.Статус = "1";
ИначеЕсли СведенияОРодственнике.КодСвязи = "39" Тогда
Реквизиты.Статус = "2";
ИначеЕсли СведенияОРодственнике.КодСвязи = "40" Тогда
Реквизиты.Статус = "3";
ИначеЕсли СведенияОРодственнике.КодСвязи = "41" Тогда
Реквизиты.Статус = "4";
КонецЕсли;
КонецЕсли;
Если ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеСтроки(
Реквизиты,
ЭтотОбъект,
"Оплаты",
СтрокаТаблицы,
ПараметрыФиксации) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
КонецЦикла;
Возврат ЕстьИзменения;
КонецФункции
Функция ЗаполнитьДанныеЛицевогоСчета(ПараметрыФиксации)
Сведения = ПредшествующиеСведенияОЛицевомСчете();
Если Сведения = Неопределено Или Не ЗначениеЗаполнено(Сведения.КБК) Тогда
Возврат Ложь;
КонецЕсли;
Реквизиты = Новый Структура("НомерЛицевогоСчета, КБК");
ЗаполнитьЗначенияСвойств(Реквизиты, Сведения);
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
Функция ПредшествующиеСведенияОЛицевомСчете()
Если Не ЗначениеЗаполнено(Организация) Или Не ЗначениеЗаполнено(НомерСчета) Тогда
Возврат Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(Дата) Тогда
НачалоДня = НачалоДня(Дата);
Иначе
НачалоДня = НачалоДня(ТекущаяДатаСеанса());
КонецЕсли;
КонецДня = КонецДня(НачалоДня) + 1;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Шапка.Ссылка КАК Ссылка,
| Шапка.НомерСчета КАК НомерСчета,
| Шапка.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| Шапка.КБК КАК КБК
|ИЗ
| Документ.ЗаявлениеВФССОВозмещенииВыплатРодителямДетейИнвалидов КАК Шапка
|ГДЕ
| Шапка.Организация = &Организация
| И Шапка.Дата < &КонецДня
| И Шапка.НомерСчета = &НомерСчета
| И Шапка.Проведен
| И ВЫБОР
| КОГДА Шапка.Дата >= &НачалоДня
| ТОГДА Шапка.Ссылка < &Ссылка
| ИНАЧЕ Шапка.Ссылка <> &Ссылка
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| Шапка.Дата УБЫВ,
| Шапка.Ссылка";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("НачалоДня", НачалоДня);
Запрос.УстановитьПараметр("КонецДня", КонецДня);
Запрос.УстановитьПараметр("НомерСчета", НомерСчета);
Если ЗначениеЗаполнено(Ссылка) Тогда
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Иначе
Запрос.Текст = СтрЗаменить(
Запрос.Текст,
"И ВЫБОР
| КОГДА Шапка.Дата >= &НачалоДня
| ТОГДА Шапка.Ссылка < &Ссылка
| ИНАЧЕ Шапка.Ссылка <> &Ссылка
| КОНЕЦ",
"");
КонецЕсли;
Таблица = Запрос.Выполнить().Выгрузить();
Если Таблица.Количество() > 0 Тогда
Возврат Таблица[0];
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ЗаполнитьДанныеРебенка(ПараметрыФиксации)
Если ВерсияДокумента < 1 Тогда
Возврат Ложь;
КонецЕсли;
Если Оплаты.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ЕстьИзменения = Ложь;
ИменаПолейДанныхРебенка = "РебенокФамилия, РебенокИмя, РебенокОтчество, РебенокДатаРождения, РебенокСНИЛС";
ИменаПолейДанныхСправки = "СправкаСерия, СправкаНомер, СправкаДатаВыдачи, СправкаДатаОкончания, СправкаДатаУстановления";
ТаблицаСправокПоСНИЛС = ТаблицаСправокПоСНИЛС(?(ТипСообщения = 12010, 3, 1));
ФильтрСправокПоСНИЛС = Новый Структура("РебенокСНИЛС, Месяц");
СтрокаЗаполненияДанныхРебенка = Неопределено;
СтрокаЗаполненияДанныхСправки = Неопределено;
ПустыеЗначенияДанныхРебенка = Новый Структура(ИменаПолейДанныхРебенка);
ПустыеЗначенияДанныхСправки = Новый Структура(ИменаПолейДанныхСправки);
НовыеЗначенияДанныхРебенка = Новый Структура(ИменаПолейДанныхРебенка);
НовыеЗначенияДанныхСправки = Новый Структура(ИменаПолейДанныхСправки);
Для Каждого СтрокаТаблицы Из Оплаты Цикл
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Ребенок) Тогда
Если СтрокаЗаполненияДанныхРебенка <> Неопределено
И СтрокаЗаполненияДанныхРебенка.Сотрудник = СтрокаТаблицы.Сотрудник
И СтрокаЗаполненияДанныхРебенка.Ребенок = СтрокаТаблицы.Ребенок Тогда
Значения = НовыеЗначенияДанныхРебенка;
Иначе
Значения = ПустыеЗначенияДанныхРебенка;
КонецЕсли;
Если ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеСтроки(
Значения,
ЭтотОбъект,
"Оплаты",
СтрокаТаблицы,
ПараметрыФиксации) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ФильтрСправокПоСНИЛС, СтрокаТаблицы);
НайденныеСтрокиСправокПоСНИЛС = ТаблицаСправокПоСНИЛС.НайтиСтроки(ФильтрСправокПоСНИЛС);
Если НайденныеСтрокиСправокПоСНИЛС.Количество() > 0 Тогда
СтрокаТаблицыСправокПоСНИЛС = НайденныеСтрокиСправокПоСНИЛС[0];
Значения = Новый Структура(ИменаПолейДанныхСправки);
Значения.СправкаСерия = СтрокаТаблицыСправокПоСНИЛС.СерияСправки;
Значения.СправкаНомер = СтрокаТаблицыСправокПоСНИЛС.НомерСправки;
Значения.СправкаДатаВыдачи = СтрокаТаблицыСправокПоСНИЛС.ДатаВыдачи;
Значения.СправкаДатаОкончания = СтрокаТаблицыСправокПоСНИЛС.СрокДействияСправки;
Значения.СправкаДатаУстановления = СтрокаТаблицыСправокПоСНИЛС.Период;
ИначеЕсли СтрокаЗаполненияДанныхСправки <> Неопределено
И СтрокаЗаполненияДанныхСправки.Сотрудник = СтрокаТаблицы.Сотрудник
И СтрокаЗаполненияДанныхСправки.Ребенок = СтрокаТаблицы.Ребенок Тогда
Значения = НовыеЗначенияДанныхСправки;
Иначе
Значения = ПустыеЗначенияДанныхСправки;
КонецЕсли;
Если ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеСтроки(
Значения,
ЭтотОбъект,
"Оплаты",
СтрокаТаблицы,
ПараметрыФиксации) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Фильтр = Новый Структура("Путь, ИдентификаторСтроки", "Оплаты", СтрокаТаблицы.ИдентификаторСтрокиФикс);
ЗафиксированныеРеквизиты = ФиксацияИзменений.Выгрузить(Фильтр, "ИмяРеквизита").ВыгрузитьКолонку("ИмяРеквизита");
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Ребенок) Тогда
Если (ЗначениеЗаполнено(СтрокаТаблицы.РебенокФамилия)
И ЗафиксированныеРеквизиты.Найти("РебенокФамилия") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.РебенокИмя)
И ЗафиксированныеРеквизиты.Найти("РебенокИмя") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.РебенокДатаРождения)
И ЗафиксированныеРеквизиты.Найти("РебенокДатаРождения") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.РебенокСНИЛС)
И ЗафиксированныеРеквизиты.Найти("РебенокСНИЛС") <> Неопределено) Тогда
СтрокаЗаполненияДанныхРебенка = СтрокаТаблицы;
ЗаполнитьЗначенияСвойств(НовыеЗначенияДанныхРебенка, СтрокаТаблицы);
КонецЕсли;
КонецЕсли;
Если (ЗначениеЗаполнено(СтрокаТаблицы.СправкаСерия)
И ЗафиксированныеРеквизиты.Найти("СправкаСерия") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.СправкаНомер)
И ЗафиксированныеРеквизиты.Найти("СправкаНомер") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.СправкаДатаВыдачи)
И ЗафиксированныеРеквизиты.Найти("СправкаДатаВыдачи") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.СправкаДатаОкончания)
И ЗафиксированныеРеквизиты.Найти("СправкаДатаОкончания") <> Неопределено)
Или (ЗначениеЗаполнено(СтрокаТаблицы.СправкаДатаУстановления)
И ЗафиксированныеРеквизиты.Найти("СправкаДатаУстановления") <> Неопределено) Тогда
СтрокаЗаполненияДанныхСправки = СтрокаТаблицы;
ЗаполнитьЗначенияСвойств(НовыеЗначенияДанныхСправки, СтрокаЗаполненияДанныхСправки);
КонецЕсли;
КонецЦикла;
Возврат ЕстьИзменения;
КонецФункции
Функция ТаблицаСправокПоСНИЛС(ОграничениеПоКоличеству)
ТаблицаСНИЛС = Оплаты.Выгрузить(, "РебенокСНИЛС, Месяц");
СНИЛСы = КоллекцииБЗК.УникальныеЗначенияКолонки(Оплаты, "РебенокСНИЛС");
КоллекцииБЗК.УдалитьПустыеЗначенияМассива(СНИЛСы);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СНИЛСы", СНИЛСы);
Запрос.УстановитьПараметр("ТаблицаСНИЛС", ТаблицаСНИЛС);
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСНИЛС.РебенокСНИЛС КАК РебенокСНИЛС,
| ТаблицаСНИЛС.Месяц КАК Месяц
|ПОМЕСТИТЬ ТаблицаСНИЛС
|ИЗ
| &ТаблицаСНИЛС КАК ТаблицаСНИЛС
|;
|
|
|ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Ссылка,
| ФизическиеЛица.СтраховойНомерПФР КАК РебенокСНИЛС
|ПОМЕСТИТЬ Физлица
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| ФизическиеЛица.СтраховойНомерПФР В(&СНИЛСы)
|;
|
|
|ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Ссылка,
| ФизическиеЛица.РебенокСНИЛС КАК РебенокСНИЛС,
| МИНИМУМ(ТаблицаСНИЛСМин.Месяц) КАК МесяцМин,
| МАКСИМУМ(ТаблицаСНИЛСМакс.Месяц) КАК МесяцМакс
|ПОМЕСТИТЬ ТаблицаФизлиц
|ИЗ
| Физлица КАК ФизическиеЛица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСНИЛС КАК ТаблицаСНИЛСМин
| ПО ФизическиеЛица.РебенокСНИЛС = ТаблицаСНИЛСМин.РебенокСНИЛС
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаСНИЛС КАК ТаблицаСНИЛСМакс
| ПО ФизическиеЛица.РебенокСНИЛС = ТаблицаСНИЛСМакс.РебенокСНИЛС
|
|СГРУППИРОВАТЬ ПО
| ФизическиеЛица.Ссылка,
| ФизическиеЛица.РебенокСНИЛС
|;
|
|
|ВЫБРАТЬ
| ТаблицаФизлиц.Ссылка КАК Ссылка,
| ТаблицаФизлиц.РебенокСНИЛС КАК РебенокСНИЛС,
| СведенияОбИнвалидности.Период КАК Период,
| СведенияОбИнвалидности.ДействуетДо КАК ДействуетДо,
| СведенияОбИнвалидности.ДатаВыдачи КАК ДатаВыдачи,
| СведенияОбИнвалидности.СрокДействияСправки КАК СрокДействияСправки,
| СведенияОбИнвалидности.СерияСправки КАК СерияСправки,
| СведенияОбИнвалидности.НомерСправки КАК НомерСправки
|ПОМЕСТИТЬ СведенияОбИнвалидности
|ИЗ
| ТаблицаФизлиц КАК ТаблицаФизлиц
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОбИнвалидностиФизическихЛиц КАК СведенияОбИнвалидности
| ПО ТаблицаФизлиц.Ссылка = СведенияОбИнвалидности.ФизическоеЛицо
| И ТаблицаФизлиц.МесяцМакс >= СведенияОбИнвалидности.Период
| И (СведенияОбИнвалидности.Инвалидность)
|;
|
|
|ВЫБРАТЬ
| СведенияОбИнвалидности.Ссылка КАК Ссылка,
| СведенияОбИнвалидности.РебенокСНИЛС КАК РебенокСНИЛС,
| ТаблицаСНИЛС.Месяц КАК Месяц,
| МАКСИМУМ(СведенияОбИнвалидности.Период) КАК МаксПериодПоМесяцу
|ПОМЕСТИТЬ МаксПериодыИнвалидности
|ИЗ
| ТаблицаСНИЛС КАК ТаблицаСНИЛС
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ СведенияОбИнвалидности КАК СведенияОбИнвалидности
| ПО ТаблицаСНИЛС.РебенокСНИЛС = СведенияОбИнвалидности.РебенокСНИЛС
| И ТаблицаСНИЛС.Месяц >= СведенияОбИнвалидности.Период
|
|СГРУППИРОВАТЬ ПО
| СведенияОбИнвалидности.Ссылка,
| СведенияОбИнвалидности.РебенокСНИЛС,
| ТаблицаСНИЛС.Месяц
|;
|
|
|ВЫБРАТЬ
| МаксПериодыИнвалидности.Ссылка КАК Ссылка,
| МаксПериодыИнвалидности.РебенокСНИЛС КАК РебенокСНИЛС,
| МаксПериодыИнвалидности.Месяц КАК Месяц,
| СведенияОбИнвалидности.Период КАК Период,
| СведенияОбИнвалидности.ДатаВыдачи КАК ДатаВыдачи,
| СведенияОбИнвалидности.СрокДействияСправки КАК СрокДействияСправки,
| СведенияОбИнвалидности.СерияСправки КАК СерияСправки,
| СведенияОбИнвалидности.НомерСправки КАК НомерСправки
|ИЗ
| МаксПериодыИнвалидности КАК МаксПериодыИнвалидности
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ СведенияОбИнвалидности КАК СведенияОбИнвалидности
| ПО МаксПериодыИнвалидности.Ссылка = СведенияОбИнвалидности.Ссылка
| И МаксПериодыИнвалидности.МаксПериодПоМесяцу = СведенияОбИнвалидности.Период";
Таблица = Запрос.Выполнить().Выгрузить();
Таблица.Сортировать("Ссылка, РебенокСНИЛС, Месяц, Период");
Если Таблица.Количество() <= ОграничениеПоКоличеству Тогда
Возврат Таблица;
КонецЕсли;
КоличествоПредшествующих = 1;
ПредшествующаяСтрока = Таблица[0];
ВсеПоследниеСтроки = Новый Массив;
ВсеПоследниеСтроки.Добавить(ПредшествующаяСтрока);
Для Индекс = 1 По Таблица.Количество() - 1 Цикл
СтрокаТаблицы = Таблица[Индекс];
Если СтрокаТаблицы.Ссылка <> ПредшествующаяСтрока.Ссылка Тогда
КоличествоПредшествующих = 1;
ПредшествующаяСтрока = СтрокаТаблицы;
ВсеПоследниеСтроки = Новый Массив;
ВсеПоследниеСтроки.Добавить(ПредшествующаяСтрока);
ИначеЕсли СтрокаТаблицы.Период <> ПредшествующаяСтрока.Период Тогда
Если КоличествоПредшествующих = ОграничениеПоКоличеству Тогда
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ПредшествующаяСтрока, , "Месяц, СрокДействияСправки");
Если СтрокаТаблицы.СрокДействияСправки > ПредшествующаяСтрока.СрокДействияСправки Тогда
Для Каждого ПоследняяСтрока Из ВсеПоследниеСтроки Цикл
ПоследняяСтрока.СрокДействияСправки = СтрокаТаблицы.СрокДействияСправки;
КонецЦикла;
КонецЕсли;
ВсеПоследниеСтроки.Добавить(СтрокаТаблицы);
Иначе
КоличествоПредшествующих = КоличествоПредшествующих + 1;
ПредшествующаяСтрока = СтрокаТаблицы;
ВсеПоследниеСтроки = Новый Массив;
ВсеПоследниеСтроки.Добавить(ПредшествующаяСтрока);
КонецЕсли;
Иначе
ВсеПоследниеСтроки.Добавить(ПредшествующаяСтрока);
КонецЕсли;
КонецЦикла;
Возврат Таблица;
КонецФункции
Функция ЗаполнитьФлажкиВидовЗанятости(ПараметрыФиксации)
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(ФлажкиВидовЗанятости(), ЭтотОбъект, ПараметрыФиксации);
КонецФункции
Функция ФлажкиВидовЗанятости()
Реквизиты = Новый Структура("ВнешнееСовместительство, ОсновноеМестоРаботы", Ложь, Ложь);
ВидыЗанятости = КоллекцииБЗК.УникальныеЗначенияКолонки(Оплаты, "ВидЗанятости");
Для Каждого ВидЗанятости Из ВидыЗанятости Цикл
Если ВидЗанятости = Перечисления.ВидыЗанятости.Совместительство Тогда
Реквизиты.ВнешнееСовместительство = Истина;
Иначе
Реквизиты.ОсновноеМестоРаботы = Истина;
КонецЕсли;
КонецЦикла;
Возврат Реквизиты;
КонецФункции
Функция ЗаполнитьСтатусДокумента(НаборЗаписейИлиЗапись = 0) Экспорт
Если Не ОтправлятьЧерезСЭДО Тогда
Возврат Ложь;
КонецЕсли;
Если ФиксацияВторичныхДанныхВДокументах.РеквизитШапкиЗафиксирован(ЭтотОбъект, "СтатусДокумента") Тогда
Возврат Ложь;
КонецЕсли;
СтарыйСтатусДокумента = СтатусДокумента;
СтатусДокумента = Менеджер().СтатусДокумента(ЭтотОбъект, НаборЗаписейИлиЗапись);
Возврат СтарыйСтатусДокумента <> СтатусДокумента;
КонецФункции
Функция ЗаполнитьПерерасчет(ПараметрыФиксации)
СведенияОбИсправленномДокументе = СведенияОбИсправленномДокументе();
Если СведенияОбИсправленномДокументе = Неопределено Тогда
Реквизиты = Новый Структура("Перерасчет, ИдентификаторПервичногоРеестра");
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации);
КонецЕсли;
ЕстьИзменения = Ложь;
Реквизиты = Новый Структура("Перерасчет", Ложь);
Если Не СведенияОбИсправленномДокументе.ПометкаУдаления
И СведенияОбИсправленномДокументе.ОтправлятьЧерезСЭДО
И СведенияОбИсправленномДокументе.Проведен Тогда
Реквизиты.Перерасчет = СведенияОбИсправленномДокументе.Перерасчет
Или СведенияОбИсправленномДокументе.РегистрацияУспех
Или СведенияОбИсправленномДокументе.Состояние = Перечисления.СостоянияДокументаСЭДОФСС.ОтправленОператору
Или СведенияОбИсправленномДокументе.Состояние = Перечисления.СостоянияДокументаСЭДОФСС.Отправлен
Или СведенияОбИсправленномДокументе.Состояние = Перечисления.СостоянияДокументаСЭДОФСС.Принят
Или СведенияОбИсправленномДокументе.Состояние = Перечисления.СостоянияДокументаСЭДОФСС.ПринятСЗамечаниями
Или СведенияОбИсправленномДокументе.Состояние = Перечисления.СостоянияДокументаСЭДОФСС.ЧастичноПринят;
КонецЕсли;
Если ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Реквизиты = Новый Структура("ИдентификаторПервичногоРеестра", "");
Если Перерасчет Тогда
Если СведенияОбИсправленномДокументе.Перерасчет
И ЗначениеЗаполнено(СведенияОбИсправленномДокументе.ИдентификаторПервичногоРеестра) Тогда
Реквизиты.ИдентификаторПервичногоРеестра = СведенияОбИсправленномДокументе.ИдентификаторПервичногоРеестра;
Иначе
Реквизиты.ИдентификаторПервичногоРеестра = СведенияОбИсправленномДокументе.ИдентификаторРеестра;
КонецЕсли;
КонецЕсли;
Если ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Возврат ЕстьИзменения;
КонецФункции
Функция СведенияОбИсправленномДокументе()
Если Не ЗначениеЗаполнено(ИсправленныйДокумент) Тогда
Возврат Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Шапка.Ссылка КАК Ссылка,
| Шапка.Перерасчет КАК Перерасчет,
| Шапка.ИдентификаторПервичногоРеестра КАК ИдентификаторПервичногоРеестра,
| Шапка.ИдентификаторРеестра КАК ИдентификаторРеестра,
| Шапка.ПометкаУдаления КАК ПометкаУдаления,
| Шапка.ОтправлятьЧерезСЭДО КАК ОтправлятьЧерезСЭДО,
| Шапка.Проведен КАК Проведен,
| Шапка.СтатусДокумента КАК СтатусДокумента,
| ЕСТЬNULL(Регистрации.РегистрацияУспех, ЛОЖЬ) КАК РегистрацияУспех,
| ЕСТЬNULL(Регистрации.Состояние, НЕОПРЕДЕЛЕНО) КАК Состояние
|ИЗ
| Документ.ЗаявлениеВФССОВозмещенииВыплатРодителямДетейИнвалидов КАК Шапка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрацииЗаявленийОВозмещенииВыплатРодителямДетейИнвалидов КАК Регистрации
| ПО Шапка.ИдентификаторСообщения = Регистрации.ИдентификаторСообщения
|ГДЕ
| Шапка.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ИсправленныйДокумент);
Таблица = Запрос.Выполнить().Выгрузить();
Если Таблица.Количество() > 0 Тогда
Возврат Таблица[0];
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ЗаполнитьСведенияОПредставителеСФР(ПараметрыФиксации)
Реквизиты = Новый Структура("СоставительФИО, ТелефонСоставителя, АдресЭлектроннойПочтыОрганизации");
Если ДополнительныеСвойства.Свойство("СведенияОСтрахователе") Тогда
Реквизиты.СоставительФИО = ДополнительныеСвойства.СведенияОСтрахователе.ФИООтпр;
Реквизиты.ТелефонСоставителя = ДополнительныеСвойства.СведенияОСтрахователе.ТелОрганизации_JSON;
Реквизиты.АдресЭлектроннойПочтыОрганизации = ДополнительныеСвойства.СведенияОСтрахователе.АдресЭлектроннойПочтыОрганизации;
КонецЕсли;
Если ЗначениеЗаполнено(ПредставительСФР) Тогда
ИменаПолей = "ФИО, ТелефонРабочий, EMailПредставление";
КадровыеДанные = КадровыйУчет.КадровыеДанныеФизическогоЛица(Ложь, ПредставительСФР, ИменаПолей, ТекущаяДатаСеанса());
Если КадровыеДанные <> Неопределено Тогда
Если ЗначениеЗаполнено(КадровыеДанные.ФИО) Тогда
Реквизиты.СоставительФИО = КадровыеДанные.ФИО;
КонецЕсли;
Если ЗначениеЗаполнено(КадровыеДанные.ТелефонРабочий) Тогда
Реквизиты.ТелефонСоставителя = КадровыеДанные.ТелефонРабочий;
КонецЕсли;
Если ЗначениеЗаполнено(КадровыеДанные.EMailПредставление) Тогда
Реквизиты.АдресЭлектроннойПочтыОрганизации = КадровыеДанные.EMailПредставление;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(Реквизиты, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
#КонецОбласти
#Область ОбработкаПроверкиЗаполнения
Функция ПредставлениеСтрокПоКоторымБолее13Приказов()
Представления = Новый Массив;
ТаблицаСтрок = Оплаты.Выгрузить();
Менеджер().ДобавитьКолонкиНаличияДней(ТаблицаСтрок);
Для Каждого СтрокаТаблицы Из ТаблицаСтрок Цикл
Менеджер().ЗаполнитьФлажкиНаличияДней(СтрокаТаблицы);
КонецЦикла;
ИменаПолейШапки = "СотрудникФамилия, СотрудникИмя, СотрудникОтчество, СотрудникСНИЛС, Статус,
|РебенокФамилия, РебенокИмя, РебенокОтчество, РебенокСНИЛС, РебенокДатаРождения,
|СправкаСерия, СправкаНомер, СправкаДатаВыдачи, СправкаДатаОкончания, СправкаДатаУстановления";
ТаблицаСотрудников = ТаблицаСтрок.Скопировать(, ИменаПолейШапки);
ТаблицаСотрудников.Свернуть(ИменаПолейШапки);
ФильтрПоДаннымШапки = Новый Структура(ИменаПолейШапки);
Для Каждого ДанныеШапкиПоСотруднику Из ТаблицаСотрудников Цикл
ЗаполнитьЗначенияСвойств(ФильтрПоДаннымШапки, ДанныеШапкиПоСотруднику);
ТаблицаСтрокПоСотруднику = ТаблицаСтрок.Скопировать(ФильтрПоДаннымШапки);
ВложенныеИменаПолей = "ПриказДата, ПриказНомер";
Фильтр = Новый Структура("ЕстьПриказы", Истина);
ВложеннаяТаблица = ТаблицаСтрокПоСотруднику.Скопировать(Фильтр, ВложенныеИменаПолей);
ВложеннаяТаблица.Свернуть(ВложенныеИменаПолей);
Количество = ВложеннаяТаблица.Количество();
Если Количество > 13 Тогда
Представление = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
НСтр("ru = ';По сотруднику [ФИО] %1 приказ;;По сотруднику [ФИО] %1 приказа;По сотруднику [ФИО] %1 приказов;'"),
Количество);
ФИО = ДанныеШапкиПоСотруднику.СотрудникФамилия + " " + ДанныеШапкиПоСотруднику.СотрудникИмя
+ " " + ДанныеШапкиПоСотруднику.СотрудникОтчество;
Представления.Добавить(СтрЗаменить(Представление, "[ФИО]", ФИО));
КонецЕсли;
КонецЦикла;
Возврат СтрСоединить(Представления, Символы.ПС);
КонецФункции
Процедура ПроверитьФорматЧислаВСтрокеТаблицы(Отказ, ИмяТаблицы, СтрокаТаблицы, ИмяРеквизита, Минимум, Максимум)
Значение = СтрокаТаблицы[ИмяРеквизита];
Если Значение = 0 Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаСтрокиТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, ИмяРеквизита);
ИначеЕсли Значение < Минимум Тогда
Текст = СтрШаблон(
НСтр("ru = 'В строке %1 в поле ""%2"" указано значение %3, что меньше минимального %4.'"),
СтрокаТаблицы.НомерСтроки,
ПроверкиБЗК.ПредставлениеРеквизитаТаблицыОбъекта(ЭтотОбъект, Неопределено, ИмяТаблицы, ИмяРеквизита),
Значение,
Минимум);
СообщенияБЗК.СообщитьОбОшибкеВСтрокеТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, ИмяРеквизита, Текст);
ИначеЕсли Значение > Максимум Тогда
Текст = СтрШаблон(
НСтр("ru = 'В строке %1 в поле ""%2"" указано значение %3, что больше максимального %4.'"),
СтрокаТаблицы.НомерСтроки,
ПроверкиБЗК.ПредставлениеРеквизитаТаблицыОбъекта(ЭтотОбъект, Неопределено, ИмяТаблицы, ИмяРеквизита),
Значение,
Максимум);
СообщенияБЗК.СообщитьОбОшибкеВСтрокеТаблицы(Отказ, ЭтотОбъект, ИмяТаблицы, СтрокаТаблицы, ИмяРеквизита, Текст);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПередЗаписью
Функция ЗначенияРеквизитовДоЗаписи()
ИменаРеквизитов = "Номер, Дата, Страхователь, ОтправлятьЧерезСЭДО, ИсправленныйДокумент, Проведен, ПометкаУдаления";
Если ЭтоНовый() Тогда
Возврат ОбщегоНазначенияБЗК.ЗначенияСвойств(ЭтотОбъект, ИменаРеквизитов);
Иначе
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, ИменаРеквизитов);
КонецЕсли;
КонецФункции
#КонецОбласти
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли