#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
ЗарплатаКадры.ЗаполнитьПоОснованиюСотрудником(ЭтотОбъект, ДанныеЗаполнения, , Истина);
КонецЕсли;
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Увольнение") Тогда
СтрокаДанныеУвольнения = "Организация, Сотрудник, ДатаУвольнения";
ДанныеУвольнения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеЗаполнения, СтрокаДанныеУвольнения);
Если ЭтоВнутреннийСовместитель(ДанныеУвольнения["Сотрудник"]) Тогда
ВызватьИсключение ТекстОшибкиПроверкиВидаЗанятости();
КонецЕсли;
Организация = ДанныеУвольнения["Организация"];
Сотрудник = ДанныеУвольнения["Сотрудник"];
ГодС = Год(ДанныеУвольнения["ДатаУвольнения"])-2;
ГодПо = Год(ДанныеУвольнения["ДатаУвольнения"]);
Дата = ТекущаяДатаСеанса();
ОбновитьВторичныеДанныеДокумента(Истина, Истина, Ложь);
ЗаполнитьДанныеСправки();
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
УдалитьРеквизитыНеТребующиеПроверки(ПроверяемыеРеквизиты);
ПроверитьРеквизитыОрганизации(Отказ);
ПроверитьРеквизитыСотрудника(Отказ);
ПроверитьПериодЗаполненияДокумента(Отказ);
ПроверитьЗаполнениеПериодовРаботы(Отказ);
ПроверитьЗаполнениеЗаработка(Отказ);
ПроверитьЗаполнениеДнейОтсутствия(Отказ);
ПривязатьСообщенияКОбъекту();
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ФиксацияВторичныхДанныхВДокументах.ЗафиксироватьВторичныеДанныеДокумента(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ОбработкаПроверкиЗаполнения
Процедура УдалитьРеквизитыНеТребующиеПроверки(ПроверяемыеРеквизиты)
ИсключаемыеРеквизиты = Новый Массив;
Если ЗначениеЗаполнено(Организация) И Не ЗарплатаКадрыПовтИсп.ЭтоЮридическоеЛицо(Организация) Тогда
ИсключаемыеРеквизиты.Добавить("ДолжностьРуководителя");
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты);
КонецПроцедуры
Процедура ПроверитьРеквизитыОрганизации(Отказ)
Если ЗначениеЗаполнено(Организация) И Не ЗарплатаКадры.ЭтоЮридическоеЛицо(Организация) Тогда
Возврат;
КонецЕсли;
Если Дата >= Документы.ИсходящаяСправкаОЗаработкеДляРасчетаПособий.ДатаНачалаДействияСправки2022() Тогда
ПроверкиБЗК.ПроверитьЗаполнениеРеквизитаОбъекта(Отказ, ЭтотОбъект, "ГлавныйБухгалтер");
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьРеквизитыСотрудника(Отказ)
Если ЗначениеЗаполнено(Сотрудник)
И ЭтоВнутреннийСовместитель(Сотрудник) Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстОшибкиПроверкиВидаЗанятости(),,,, Отказ);
КонецЕсли;
ИменаРеквизитов = Новый Структура;
ИменаРеквизитов.Вставить("Сотрудник", "Сотрудник");
ИменаРеквизитов.Вставить("ФизическоеЛицо", "ФизическоеЛицо");
ИменаРеквизитов.Вставить("ВидДокумента", "ВидДокумента");
ИменаРеквизитов.Вставить("СерияДокумента", "СерияДокумента");
ИменаРеквизитов.Вставить("НомерДокумента", "НомерДокумента");
ИменаРеквизитов.Вставить("ДатаВыдачиДокумента", "ДатаВыдачиДокумента");
ИменаРеквизитов.Вставить("КемВыданДокумент", "КемВыданДокумент");
ПрямыеВыплатыПособийСоциальногоСтрахования.ПроверитьДокументУдостоверяющийЛичность(Отказ, ЭтотОбъект, ИменаРеквизитов);
КонецПроцедуры
Процедура ПроверитьПериодЗаполненияДокумента(Отказ)
Если ЗначениеЗаполнено(ГодС)
И ЗначениеЗаполнено(ГодПо)
И ГодС > ГодПо Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Неправильно задан период заполнения документа: начало периода не может быть позже окончания.'"),,,,Отказ);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполнениеПериодовРаботы(Отказ)
СтрокаНачалаСообщенияОбОшибке = НСтр("ru = 'В строке номер %1 табл. части ""Периоды работы""'") + ": ";
Для каждого ПериодРаботы Из ПериодыРаботы Цикл
Если ЗначениеЗаполнено(ПериодРаботы.ПериодРаботыС)
И ЗначениеЗаполнено(ПериодРаботы.ПериодРаботыПо)
И ПериодРаботы.ПериодРаботыС > ПериодРаботы.ПериодРаботыПо Тогда
СообщениеТекст = СтрокаНачалаСообщенияОбОшибке + НСтр("ru = 'неверно указан период работы: начало периода должно предшествовать окончанию периода.'");
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПериодРаботы.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(СообщениеТекст, , , , Отказ);
КонецЕсли;
Для каждого ПовторяющаясяСтрока Из ПериодыРаботы Цикл
Если ПериодРаботы.НомерСтроки >= ПовторяющаясяСтрока.НомерСтроки
Или ((ПериодРаботы.ПериодРаботыС > ПовторяющаясяСтрока.ПериодРаботыПо)
Или (ПериодРаботы.ПериодРаботыПо < ПовторяющаясяСтрока.ПериодРаботыС)) Тогда
Продолжить;
КонецЕсли;
СообщениеТекст = СтрокаНачалаСообщенияОбОшибке + НСтр("ru = 'указанный период работы пересекается с периодом из строки %2.'");
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПериодРаботы.НомерСтроки, ПовторяющаясяСтрока.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(СообщениеТекст, , , , Отказ);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗаполнениеЗаработка(Отказ)
СтрокаНачалаСообщенияОбОшибке = НСтр("ru = 'В строке номер %1 табл. части ""Данные о заработке""'") + ": ";
Отбор = Новый Структура;
Для каждого СтрокаЗаработка Из ДанныеОЗаработке Цикл
Отбор.Вставить("РасчетныйГод", СтрокаЗаработка.РасчетныйГод);
ПовторяющиесяСтроки = ДанныеОЗаработке.НайтиСтроки(Отбор);
Для каждого ПовторяющаясяСтрока Из ПовторяющиесяСтроки Цикл
Если СтрокаЗаработка.НомерСтроки < ПовторяющаясяСтрока.НомерСтроки Тогда
СообщениеТекст = СтрокаНачалаСообщенияОбОшибке + НСтр("ru = 'указанный расчетный год повторяется в строке %2.'");
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, СтрокаЗаработка.НомерСтроки, ПовторяющаясяСтрока.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(СообщениеТекст, , , , Отказ);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗаполнениеДнейОтсутствия(Отказ)
СтрокаНачалаСообщенияОбОшибке =
НСтр("ru = 'В строке номер %1 табл. части ""Дни болезни, ухода за детьми""'") + ": ";
Для каждого ПериодОтсутствия Из ДниБолезниУходаЗаДетьми Цикл
Если ЗначениеЗаполнено(ПериодОтсутствия.ПериодС)
И ЗначениеЗаполнено(ПериодОтсутствия.ПериодПо)
И ПериодОтсутствия.ПериодС > ПериодОтсутствия.ПериодПо Тогда
СообщениеТекст = СтрокаНачалаСообщенияОбОшибке + НСтр("ru = 'неверно указан период отсутствия: начало периода должно предшествовать окончанию периода.'");
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПериодОтсутствия.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(СообщениеТекст, , , , Отказ);
КонецЕсли;
Для каждого ПовторяющаясяСтрока Из ДниБолезниУходаЗаДетьми Цикл
Если ПериодОтсутствия.НомерСтроки >= ПовторяющаясяСтрока.НомерСтроки
Или ((ПериодОтсутствия.ПериодС > ПовторяющаясяСтрока.ПериодПо)
Или (ПериодОтсутствия.ПериодПо < ПовторяющаясяСтрока.ПериодС)) Тогда
Продолжить;
КонецЕсли;
СообщениеТекст = СтрокаНачалаСообщенияОбОшибке + НСтр("ru = 'указанный период отсутствия пересекается с периодом из строки %2.'");
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПериодОтсутствия.НомерСтроки, ПовторяющаясяСтрока.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(СообщениеТекст, , , , Отказ);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ПривязатьСообщенияКОбъекту()
Сообщения = ПолучитьСообщенияПользователю(Ложь);
Для Каждого Сообщение Из Сообщения Цикл
Если Не ЗначениеЗаполнено(Сообщение.КлючДанных)
И Не ЗначениеЗаполнено(Сообщение.ПутьКДанным)
И Не СтрНачинаетсяС(Сообщение.Поле, "Объект.") Тогда
Сообщение.КлючДанных = Ссылка;
Сообщение.ПутьКДанным = "Объект";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
Функция ОбъектЗафиксирован() Экспорт
Возврат Проведен;
КонецФункции
Процедура ЗаполнитьДанныеСправки() Экспорт
Если ГодС = 0 Или ГодПо = 0 Или ГодС > ГодПо Или Сотрудник.Пустая() Или Организация.Пустая() Тогда
Возврат
КонецЕсли;
ЗаполнитьДанныеОЗаработкеИДняхОтсутствия();
ЗаполнитьДанныеОПериодахРаботы();
КонецПроцедуры
Функция ОбновитьДанныеОЗаработкеИДняхОтсутствия(ПараметрыФиксации, Год) Экспорт
Если ЗначениеЗаполнено(Год) Тогда
ГодНачала = Год;
ГодОкончания = Год;
РасчетныеГоды = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Год);
Иначе
ГодНачала = 0;
ГодОкончания = 0;
РасчетныеГоды = Новый Массив;
Для каждого СтрокаГода Из ДанныеОЗаработке Цикл
Если СтрокаГода.РасчетныйГод <> 0 Тогда
ГодНачала = ?(ГодНачала = 0, СтрокаГода.РасчетныйГод, Мин(СтрокаГода.РасчетныйГод, ГодНачала));
ГодОкончания = Макс(ГодОкончания, СтрокаГода.РасчетныйГод);
РасчетныеГоды.Добавить(СтрокаГода.РасчетныйГод);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ГодНачала = 0 ИЛИ ГодОкончания = 0 Тогда
Возврат Ложь;
КонецЕсли;
Если Сотрудник.Пустая() Или Организация.Пустая() Тогда
Возврат Ложь;
КонецЕсли;
Возврат ЗаполнитьСправкуДаннымиОЗаработкеИДняхОтсутствия(ГодНачала, ГодОкончания, Истина, РасчетныеГоды);
КонецФункции
Функция ОбновитьВторичныеДанныеДокумента(ДанныеОрганизации = Истина, ДанныеСотрудника = Истина, ДанныеОЗаработке = Истина, ОбновлятьБезусловно = Истина) Экспорт
Модифицирован = Ложь;
ПараметрыФиксации = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(Метаданные().ПолноеИмя()).ПараметрыФиксацииВторичныхДанных();
Если ОбъектЗафиксирован() И НЕ ОбновлятьБезусловно Тогда
Возврат Модифицирован;
КонецЕсли;
Если ДанныеОрганизации И ОбновитьДанныеСтрахователя(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ДанныеСотрудника И ОбновитьДанныеСотрудника(ПараметрыФиксации) Тогда
Модифицирован = Истина;
КонецЕсли;
Если ДанныеОЗаработке И ОбновитьДанныеОЗаработкеИДняхОтсутствия(ПараметрыФиксации, Неопределено) Тогда
Модифицирован = Истина;
КонецЕсли;
Возврат Модифицирован;
КонецФункции
Функция ЗаполнитьСправкуДаннымиОЗаработкеИДняхОтсутствия(ГодНачала, ГодОкончания, Обновление = Ложь, РасчетныеГоды = Неопределено)
ПараметрыЗаполнения = УчетПособийСоциальногоСтрахования.ПараметрыЗаполненияСправкиОЗаработкеИДняхОтсутствия(ЭтотОбъект);
ПараметрыЗаполнения.Сотрудник = Сотрудник;
ПараметрыЗаполнения.Организация = Организация;
ПараметрыЗаполнения.ГодНачала = ГодНачала;
ПараметрыЗаполнения.ГодОкончания = ГодОкончания;
ПараметрыЗаполнения.Обновление = Обновление;
ПараметрыЗаполнения.РасчетныеГоды = РасчетныеГоды;
Возврат УчетПособийСоциальногоСтрахования.ЗаполнитьСправкуДаннымиОЗаработкеИДняхОтсутствия(ЭтотОбъект, ПараметрыЗаполнения);
КонецФункции
Функция ЭтоВнутреннийСовместитель(ПроверяемыйСотрудник)
ЭтоВнутреннийСовместитель = Ложь;
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПроверяемыйСотрудник), "ВидЗанятости");
Если КадровыеДанные.Количество() <> 0 Тогда
КадровыеДанныеСотрудника = КадровыеДанные[0];
ЭтоВнутреннийСовместитель = КадровыеДанныеСотрудника.ВидЗанятости = Перечисления.ВидыЗанятости.ВнутреннееСовместительство
Или КадровыеДанныеСотрудника.ВидЗанятости = Перечисления.ВидыЗанятости.ПустаяСсылка();
КонецЕсли;
Возврат ЭтоВнутреннийСовместитель;
КонецФункции
Функция ТекстОшибкиПроверкиВидаЗанятости()
Возврат НСтр("ru = 'Справки выдаются сотрудникам, имевшим основное место работы или работавшим по внешнему совместительству.'");
КонецФункции
Процедура ЗаполнитьДанныеОЗаработкеИДняхОтсутствия()
ДанныеОЗаработке.Очистить();
ФиксацияВторичныхДанныхВДокументах.ОтменитьФиксациюТабличнойЧасти(ЭтотОбъект, "ДанныеОЗаработке");
ЗаполнитьСправкуДаннымиОЗаработкеИДняхОтсутствия(ГодС,ГодПо);
КонецПроцедуры
Процедура ЗаполнитьДанныеОПериодахРаботы()
ДатаНачала = НачалоДня(Дата(Мин(ГодС, ГодПо), 1, 1));
ДатаОкончания = КонецДня(Дата(Макс(ГодС, ГодПо), 12, 31));
ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Организация);
МаксимальнаяДата = '39991231235959';
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ГоловнаяОрганизация);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
ПараметрыПолученияСотрудниковОрганизаций = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудниковОрганизаций.Организация = Организация;
ПараметрыПолученияСотрудниковОрганизаций.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическоеЛицо);
ПараметрыПолученияСотрудниковОрганизаций.КадровыеДанные = "ДатаПриема,ДатаУвольнения,ВидЗанятости";
ПараметрыПолученияСотрудниковОрганизаций.ОтбиратьПоГоловнойОрганизации = Истина;
ПараметрыПолученияСотрудниковОрганизаций.ОкончаниеПериода = ДатаОкончания;
ДатаНачалаГПХ = Макс(ДатаНачала, УчетСтраховыхВзносов.ДатаОбъединенияВзносов());
Если ДатаОкончания < ДатаНачалаГПХ Тогда
КадровыйУчет.СоздатьВТСотрудникиОрганизации(МенеджерВременныхТаблиц, Ложь, ПараметрыПолученияСотрудниковОрганизаций, "ВТСотрудникиОрганизации");
Иначе
ДоговорыФизлица = СЭДОФСС.ДоговорыФизлица(ГоловнаяОрганизация, ФизическоеЛицо, ДатаНачалаГПХ, МаксимальнаяДата);
ДоговорыФизлица.Сортировать("Начало Возр, Окончание Убыв");
ДоговорыГПХ = ДоговорыФизлица.СкопироватьКолонки("Начало,Окончание,Организация");
ПредыдущаяСтрокаГПХ = Неопределено;
Для Каждого СтрокаТаблицы Из ДоговорыФизлица Цикл
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Окончание)
Или СтрокаТаблицы.Окончание > ДатаОкончания Тогда
СтрокаТаблицы.Окончание = ДатаОкончания;
КонецЕсли;
Если СтрокаТаблицы.Начало < ДатаНачалаГПХ Тогда
СтрокаТаблицы.Начало = ДатаНачалаГПХ;
КонецЕсли;
Если СтрокаТаблицы.Начало > ДатаОкончания
Или СтрокаТаблицы.Окончание < ДатаНачалаГПХ Тогда
Продолжить;
КонецЕсли;
ГПХ = СтрокаТаблицы.ВидДоговора = Истина;
Если Не ГПХ Тогда
Продолжить;
КонецЕсли;
Если ПредыдущаяСтрокаГПХ <> Неопределено
И ПредыдущаяСтрокаГПХ.Окончание >= СтрокаТаблицы.Начало - 86400 Тогда
ПредыдущаяСтрокаГПХ.Окончание = Макс(ПредыдущаяСтрокаГПХ.Окончание, СтрокаТаблицы.Окончание);
Иначе
СтрокаГПХ = ДоговорыГПХ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаГПХ, СтрокаТаблицы);
ПредыдущаяСтрокаГПХ = СтрокаГПХ;
КонецЕсли;
КонецЦикла;
КадровыйУчет.СоздатьВТСотрудникиОрганизации(МенеджерВременныхТаблиц, Ложь, ПараметрыПолученияСотрудниковОрганизаций, "ВТСотрудникиБезГПХ");
Запрос.УстановитьПараметр("ДоговорыГПХ", ДоговорыГПХ);
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыГПХ.Начало КАК Начало,
| ДоговорыГПХ.Окончание КАК Окончание,
| ДоговорыГПХ.Организация КАК Организация
|ПОМЕСТИТЬ ВТДоговорыГПХ
|ИЗ
| &ДоговорыГПХ КАК ДоговорыГПХ
|;
|
|
|ВЫБРАТЬ
| ВТСотрудникиБезГПХ.Период КАК Период,
| ВТСотрудникиБезГПХ.Сотрудник КАК Сотрудник,
| ВТСотрудникиБезГПХ.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТСотрудникиБезГПХ.ВидЗанятости КАК ВидЗанятости,
| ВТСотрудникиБезГПХ.ДатаПриема КАК ДатаПриема,
| ВТСотрудникиБезГПХ.ДатаУвольнения КАК ДатаУвольнения
|ПОМЕСТИТЬ ВТСотрудникиОрганизации
|ИЗ
| ВТСотрудникиБезГПХ КАК ВТСотрудникиБезГПХ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЧистыеДоговорыГПХ.Начало,
| &Сотрудник,
| &ФизическоеЛицо,
| НЕОПРЕДЕЛЕНО,
| ЧистыеДоговорыГПХ.Начало,
| ЧистыеДоговорыГПХ.Окончание
|ИЗ
| ВТДоговорыГПХ КАК ЧистыеДоговорыГПХ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудникиБезГПХ КАК ВТСотрудникиБезГПХ
| ПО ЧистыеДоговорыГПХ.Начало <= ВТСотрудникиБезГПХ.ДатаУвольнения
| И ЧистыеДоговорыГПХ.Окончание >= ВТСотрудникиБезГПХ.ДатаПриема
|ГДЕ
| ВТСотрудникиБезГПХ.ДатаУвольнения ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДоговорыГПХСлева.Начало,
| &Сотрудник,
| &ФизическоеЛицо,
| НЕОПРЕДЕЛЕНО,
| ДоговорыГПХСлева.Начало,
| КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТСотрудникиБезГПХ.ДатаПриема, ДЕНЬ, -1), ДЕНЬ)
|ИЗ
| ВТДоговорыГПХ КАК ДоговорыГПХСлева
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудникиБезГПХ КАК ВТСотрудникиБезГПХ
| ПО ДоговорыГПХСлева.Начало < ВТСотрудникиБезГПХ.ДатаПриема
| И ДоговорыГПХСлева.Окончание >= ВТСотрудникиБезГПХ.ДатаПриема
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДоговорыГПХСправа.Начало,
| &Сотрудник,
| &ФизическоеЛицо,
| НЕОПРЕДЕЛЕНО,
| НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТСотрудникиБезГПХ.ДатаУвольнения, ДЕНЬ, 1), ДЕНЬ),
| ДоговорыГПХСправа.Окончание
|ИЗ
| ВТДоговорыГПХ КАК ДоговорыГПХСправа
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудникиБезГПХ КАК ВТСотрудникиБезГПХ
| ПО ДоговорыГПХСправа.Начало <= ВТСотрудникиБезГПХ.ДатаУвольнения
| И ДоговорыГПХСправа.Окончание > ВТСотрудникиБезГПХ.ДатаУвольнения";
Запрос.Выполнить();
КонецЕсли;
Запрос.Текст =
"ВЫБРАТЬ
| ВТСотрудникиОрганизации.ФизическоеЛицо КАК ФизическоеЛицо,
| &ГоловнаяОрганизация КАК ГоловнаяОрганизация,
| МИНИМУМ(ВТСотрудникиОрганизации.ДатаПриема) КАК ДатаНачала,
| МИНИМУМ(ВТСотрудникиОрганизации.ДатаПриема) КАК Период,
| &ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТФизическиеЛицаОрганизаций
|ИЗ
| ВТСотрудникиОрганизации КАК ВТСотрудникиОрганизации
|ГДЕ
| ВТСотрудникиОрганизации.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ВнутреннееСовместительство)
|
|СГРУППИРОВАТЬ ПО
| ВТСотрудникиОрганизации.ФизическоеЛицо";
Запрос.Выполнить();
УчетСтраховыхВзносов.СформироватьВТИзменениеПраваНаСтрахованиеОтБолезни(МенеджерВременныхТаблиц, Истина);
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТСотрудникиОрганизации.ДатаПриема КАК ПериодРаботыС,
| ВЫБОР
| КОГДА ВТСотрудникиОрганизации.ДатаУвольнения < &ДатаОкончания
| И ВТСотрудникиОрганизации.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ВТСотрудникиОрганизации.ДатаУвольнения
| ИНАЧЕ &ДатаОкончания
| КОНЕЦ КАК ПериодРаботыПо
|ПОМЕСТИТЬ ВТПериодыРаботы
|ИЗ
| ВТСотрудникиОрганизации КАК ВТСотрудникиОрганизации
|ГДЕ
| ВТСотрудникиОрганизации.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ВнутреннееСовместительство)
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачалоПериодовСтрахования.Период КАК ДатаНачала,
| НачалоПериодовСтрахования.ИмеетПравоНаСтрахование КАК ИмеетПравоНаСтрахование,
| МИНИМУМ(ЕСТЬNULL(ОкончаниеПериодовСтрахования.Период, &ДатаОкончания)) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТПериодыПраваНаСтрахование
|ИЗ
| ВТИзменениеПраваНаСтрахование КАК НачалоПериодовСтрахования
| ЛЕВОЕ СОЕДИНЕНИЕ ВТИзменениеПраваНаСтрахование КАК ОкончаниеПериодовСтрахования
| ПО НачалоПериодовСтрахования.Период < ОкончаниеПериодовСтрахования.Период
| И НачалоПериодовСтрахования.ИмеетПравоНаСтрахование <> ОкончаниеПериодовСтрахования.ИмеетПравоНаСтрахование
|
|СГРУППИРОВАТЬ ПО
| НачалоПериодовСтрахования.Период,
| НачалоПериодовСтрахования.ИмеетПравоНаСтрахование
|;
|
|
|ВЫБРАТЬ
| ВТПериодыПраваНаСтрахование.ДатаНачала КАК ДатаНачала,
| ВТПериодыПраваНаСтрахование.ИмеетПравоНаСтрахование КАК ИмеетПравоНаСтрахование
|ПОМЕСТИТЬ ВТДатыНачалаУникальныхПериодовСтрахования
|ИЗ
| ВТПериодыПраваНаСтрахование КАК ВТПериодыПраваНаСтрахование
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПериодыПраваНаСтрахование КАК ВТПериодыПраваНаСтрахованиеФильтр
| ПО (ВТПериодыПраваНаСтрахование.ДатаНачала >= ВТПериодыПраваНаСтрахованиеФильтр.ДатаНачала
| И ВТПериодыПраваНаСтрахование.ДатаОкончания < ВТПериодыПраваНаСтрахованиеФильтр.ДатаОкончания
| ИЛИ ВТПериодыПраваНаСтрахование.ДатаОкончания <= ВТПериодыПраваНаСтрахованиеФильтр.ДатаОкончания
| И ВТПериодыПраваНаСтрахование.ДатаНачала > ВТПериодыПраваНаСтрахованиеФильтр.ДатаНачала)
| И ВТПериодыПраваНаСтрахование.ИмеетПравоНаСтрахование = ВТПериодыПраваНаСтрахованиеФильтр.ИмеетПравоНаСтрахование
|ГДЕ
| ВТПериодыПраваНаСтрахованиеФильтр.ИмеетПравоНаСтрахование ЕСТЬ NULL
|;
|
|
|ВЫБРАТЬ
| ВТПериодыПраваНаСтрахование.ДатаНачала КАК ДатаНачала,
| ВТПериодыПраваНаСтрахование.ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТПериодыСтрахования
|ИЗ
| ВТПериодыПраваНаСтрахование КАК ВТПериодыПраваНаСтрахование
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДатыНачалаУникальныхПериодовСтрахования КАК ВТДатыНачалаУникальныхПериодовСтрахования
| ПО ВТПериодыПраваНаСтрахование.ДатаНачала = ВТДатыНачалаУникальныхПериодовСтрахования.ДатаНачала
|ГДЕ
| ВТПериодыПраваНаСтрахование.ИмеетПравоНаСтрахование = ИСТИНА
|;
|
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ПериодыСтрахования.ДатаНачала < ПериодыРаботы.ПериодРаботыС
| ТОГДА ПериодыРаботы.ПериодРаботыС
| ИНАЧЕ ПериодыСтрахования.ДатаНачала
| КОНЕЦ КАК ПериодРаботыС,
| ВЫБОР
| КОГДА ПериодыСтрахования.ДатаОкончания > ПериодыРаботы.ПериодРаботыПо
| ТОГДА ПериодыРаботы.ПериодРаботыПо
| ИНАЧЕ ПериодыСтрахования.ДатаОкончания
| КОНЕЦ КАК ПериодРаботыПо
|ИЗ
| ВТПериодыРаботы КАК ПериодыРаботы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПериодыСтрахования КАК ПериодыСтрахования
| ПО (ПериодыРаботы.ПериодРаботыС >= ПериодыСтрахования.ДатаНачала
| И ПериодыРаботы.ПериодРаботыС < ПериодыСтрахования.ДатаОкончания
| ИЛИ ПериодыСтрахования.ДатаНачала >= ПериодыРаботы.ПериодРаботыС
| И ПериодыСтрахования.ДатаНачала < ПериодыРаботы.ПериодРаботыПо)
|
|УПОРЯДОЧИТЬ ПО
| ПериодРаботыС,
| ПериодРаботыПо";
Запрос.Текст = ТекстЗапроса;
ПериодыРаботы.Загрузить(Запрос.Выполнить().Выгрузить())
КонецПроцедуры
Функция ОбновитьДанныеСтрахователя(ПараметрыФиксации)
Если НЕ ЗначениеЗаполнено(Организация) Тогда
Возврат Ложь;
КонецЕсли;
РеквизитыДокумента = Новый Структура("РегистрационныйНомерФСС,ДополнительныйКодФСС,КодПодчиненностиФСС,НаименованиеТерриториальногоОрганаФСС,ТелефонОрганизации,
|Руководитель,ГлавныйБухгалтер,ДолжностьРуководителя,ДолжностьГлавногоБухгалтера,ОснованиеПодписиРуководителя,ОснованиеПодписиГлавногоБухгалтера");
ИменаПолей =
"РегистрационныйНомерФСС,
|КодПодчиненностиФСС,
|ДополнительныйКодФСС,
|НаименованиеТерриториальногоОрганаФСС,
|ТелОрганизации";
Сведения = СЭДОФСС.СведенияОСтрахователе(Организация, ИменаПолей, Дата);
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, Сведения);
РеквизитыДокумента.ТелефонОрганизации = Сведения.ТелОрганизации;
СведенияОПодписях = ПодписиДокументов.СведенияОПодписяхПоУмолчаниюДляОбъектаМетаданных(Метаданные(), Организация);
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, СведенияОПодписях);
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(РеквизитыДокумента, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
Функция ОбновитьДанныеСотрудника(ПараметрыФиксации)
КадровыеДанные = Новый Массив;
КадровыеДанные.Добавить("ФизическоеЛицо");
КадровыеДанные.Добавить("Фамилия");
КадровыеДанные.Добавить("Имя");
КадровыеДанные.Добавить("Отчество");
КадровыеДанные.Добавить("СтраховойНомерПФР");
КадровыеДанные.Добавить("ДокументВид");
КадровыеДанные.Добавить("ДокументСерия");
КадровыеДанные.Добавить("ДокументНомер");
КадровыеДанные.Добавить("ДокументКемВыдан");
КадровыеДанные.Добавить("ДокументДатаВыдачи");
КадровыеДанные.Добавить("АдресМестаПроживания");
КадровыеДанные.Добавить("АдресПоПрописке");
ТаблицаКадровыхДанных =
КадровыйУчет.КадровыеДанныеСотрудников(
Истина,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник),
КадровыеДанные,
Дата);
Если ТаблицаКадровыхДанных.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
КадровыеДанныеСотрудника = ТаблицаКадровыхДанных[0];
ФизическоеЛицо = КадровыеДанныеСотрудника["ФизическоеЛицо"];
РеквизитыДокумента = Новый Структура(
"Фамилия,
|Имя,
|Отчество,
|СтраховойНомерПФР,
|АдресМестаЖительства,
|ВидДокумента,
|СерияДокумента,
|НомерДокумента,
|КемВыданДокумент,
|ДатаВыдачиДокумента");
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, КадровыеДанныеСотрудника, "Фамилия,Имя,Отчество,СтраховойНомерПФР");
РеквизитыДокумента.ВидДокумента = КадровыеДанныеСотрудника["ДокументВид"];
РеквизитыДокумента.СерияДокумента = КадровыеДанныеСотрудника["ДокументСерия"];
РеквизитыДокумента.НомерДокумента = КадровыеДанныеСотрудника["ДокументНомер"];
РеквизитыДокумента.КемВыданДокумент = КадровыеДанныеСотрудника["ДокументКемВыдан"];
РеквизитыДокумента.ДатаВыдачиДокумента = КадровыеДанныеСотрудника["ДокументДатаВыдачи"];
РеквизитыДокумента.АдресМестаЖительства = КадровыеДанныеСотрудника["АдресМестаПроживания"];
Если Не ЗначениеЗаполнено(РеквизитыДокумента.АдресМестаЖительства) Тогда
РеквизитыДокумента.АдресМестаЖительства = КадровыеДанныеСотрудника["АдресПоПрописке"];
КонецЕсли;
Возврат ФиксацияВторичныхДанныхВДокументах.ОбновитьДанныеШапки(РеквизитыДокумента, ЭтотОбъект, ПараметрыФиксации);
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли