////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА
// Форматирует сумму прописью документа
//
// Параметры:
// СуммаДок - число - реквизит, который надо представить прописью
// СуммаБезКопеек - булево - флаг представления суммы без копеек
//
// Возвращаемое значение
// Отформатированную строку
//
Функция ФорматироватьСуммуПрописи(СуммаДок)
Результат = СуммаДок;
ЦелаяЧасть = Цел(СуммаДок);
ФорматСтрока = "Л=uk_UA; ДП=Ложь";
ПарамПредмета = "гривна, гривні, гривень, ж, копійка, копійки, копійок, ж, 2";
Результат = ЧислоПрописью(Результат,ФорматСтрока,ПарамПредмета);
Возврат Результат;
КонецФункции // ФорматироватьСуммуПрописи()
////////////////////////////////////////////////////////////////////////////////
// ПЕЧАТЬ
//
Функция ПолучитьЗапросДляПечатиПриложения(ВыборкаПоШапкеДокумента)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации);
Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДокументыПоНачислениям.Документ.СерияБольничногоЛиста КАК Серия,
| ДокументыПоНачислениям.Документ.НомерБольничногоЛиста КАК Номер,
| ДокументыПоНачислениям.Документ.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| ДокументыПоНачислениям.Документ.ДатаНачала КАК ПериодНачало,
| ДокументыПоНачислениям.Документ.ДатаОкончания КАК ПериодКонец,
| ДокументыПоНачислениям.Документ КАК Документ
|ПОМЕСТИТЬ ВТДокументыПоНачислениям
|ИЗ
| Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК ДокументыПоНачислениям
|ГДЕ
| ДокументыПоНачислениям.Ссылка = &ДокументСсылка
| И ДокументыПоНачислениям.Документ ССЫЛКА Документ.НачислениеПоБольничномуЛисту
|
|ИНДЕКСИРОВАТЬ ПО
| Документ";
Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Начисления.ВидРасчета.НачислениеЗаСчетФСС КАК НачислениеЗаСчетФСС,
| Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени КАК ОбозначениеВТабелеУчетаРабочегоВремени,
| Начисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов,
| Начисления.НормаДней КАК НормаДней,
| Начисления.Результат КАК Результат,
| Начисления.Сотрудник КАК Сотрудник,
| Начисления.Сотрудник.Физлицо.КодПоДРФО КАК КодПоДРФО,
| Начисления.Регистратор КАК Регистратор
|ПОМЕСТИТЬ ВТНачисления
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
|ГДЕ
| Начисления.Регистратор В
| (ВЫБРАТЬ
| ДокументыПоНачислениям.Документ
| ИЗ
| ВТДокументыПоНачислениям КАК ДокументыПоНачислениям)
| И Начисления.Назначение.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| И (Начисления.ВидРасчета.ЭтоБольничные = ИСТИНА
| ИЛИ Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам))
|
|ИНДЕКСИРОВАТЬ ПО
| Регистратор";
Запрос.Выполнить();
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДокументыПоНачислениям.Серия КАК Серия,
| ДокументыПоНачислениям.Номер КАК Номер,
| ДокументыПоНачислениям.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| СУММА(ЕСТЬNULL(ВЫБОР
| КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА
| И Начисления.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам)
| ТОГДА Начисления.ОплаченоДнейЧасов
| КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА
| ТОГДА Начисления.НормаДней
| ИНАЧЕ NULL
| КОНЕЦ, 0)) КАК КоличествоДнейФСС,
| СУММА(ЕСТЬNULL(ВЫБОР
| КОГДА Начисления.НачислениеЗаСчетФСС = ЛОЖЬ
| ТОГДА Начисления.НормаДней
| ИНАЧЕ NULL
| КОНЕЦ, 0)) КАК КоличествоДней,
| СУММА(ЕСТЬNULL(ВЫБОР
| КОГДА Начисления.НачислениеЗаСчетФСС = ИСТИНА
| ТОГДА Начисления.Результат
| ИНАЧЕ NULL
| КОНЕЦ, 0)) КАК РезультатФСС,
| СУММА(ЕСТЬNULL(ВЫБОР
| КОГДА Начисления.НачислениеЗаСчетФСС = ЛОЖЬ
| ТОГДА Начисления.Результат
| ИНАЧЕ NULL
| КОНЕЦ, 0)) КАК Результат,
| Начисления.Сотрудник,
| Начисления.КодПоДРФО КАК ДРФО,
| ДокументыПоНачислениям.ПериодНачало КАК ПериодНачало,
| ДокументыПоНачислениям.ПериодКонец КАК ПериодКонец
|ИЗ
| ВТДокументыПоНачислениям КАК ДокументыПоНачислениям
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисления КАК Начисления
| ПО ДокументыПоНачислениям.Документ = Начисления.Регистратор
|
|СГРУППИРОВАТЬ ПО
| ДокументыПоНачислениям.Документ,
| ДокументыПоНачислениям.ПричинаНетрудоспособности,
| Начисления.Сотрудник,
| ДокументыПоНачислениям.Серия,
| ДокументыПоНачислениям.Номер,
| Начисления.КодПоДРФО,
| ДокументыПоНачислениям.ПериодНачало,
| ДокументыПоНачислениям.ПериодКонец";
Возврат Запрос.Выполнить();
КонецФункции
Функция ПолучитьЗапросПоКодам()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КодыОрганизацииСрезПоследних.НомерФСС КАК НомерРегистрации,
| КодыОрганизацииСрезПоследних.КодПоЕДРПОУ,
| КодыОрганизацииСрезПоследних.ИНН,
| КодыОрганизацииСрезПоследних.КодКВЕД,
| КодыОрганизацииСрезПоследних.ФИОДиректораФонда,
| КодыОрганизацииСрезПоследних.КлассПрофессиональногоРиска,
| КодыОрганизацииСрезПоследних.НазваниеРабочегоОрганаФонда
|ИЗ
| РегистрСведений.КодыОрганизации.СрезПоследних(&ПериодРегистрации, Организация = &Организация) КАК КодыОрганизацииСрезПоследних";
Запрос.УстановитьПараметр("Организация",Организация );
Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Возврат Запрос.Выполнить();
КонецФункции
#Если Клиент Тогда
Функция ПечатьЗаявка() Экспорт
ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Заявка");
//Шапка
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Организация = Организация.НаименованиеПолное;
//Получим данные из РС КодыОрганизаций
Результат = ПолучитьЗапросПоКодам();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьШапка.Параметры.ФИОДиректораФонда = Выборка.ФИОДиректораФонда;
ОбластьШапка.Параметры.НазваниеРабочегоОрганаФонда = Выборка.НазваниеРабочегоОрганаФонда;
ОбластьШапка.Параметры.КодПоЕДРПОУ = Выборка.КодПоЕДРПОУ;
ОбластьШапка.Параметры.НомерРегистрации = Выборка.НомерРегистрации;
КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для адреса организации
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КонтактнаяИнформация.Представление КАК Адрес
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект
| И КонтактнаяИнформация.Тип = &Тип
| И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация );
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьШапка.Параметры.Адрес = Выборка.Адрес;
КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для телефона организации
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КонтактнаяИнформация.Представление КАК Телефон
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект
| И КонтактнаяИнформация.Тип = &Тип
| И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация );
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьШапка.Параметры.Телефон = Выборка.Телефон;
КонецЕсли;
ОбластьШапка.Параметры.НомерСчета = Организация.БанковскийСчетДляРасчетовСФСС.НомерСчета;
ОбластьШапка.Параметры.МФОБанкаОрганизации = Организация.БанковскийСчетДляРасчетовСФСС.Банк.Код;
ТабДокумент.Вывести(ОбластьШапка);
//Заголовок
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ТабДокумент.Вывести(ОбластьЗаголовок);
//ШапкаТаблицы
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДокумент.Вывести(ОбластьШапкаТаблицы);
//СтрокаВремНетрудоспособность
ОбластьВремНетрудоспособность = Макет.ПолучитьОбласть("СтрокаВремНетрудоспособность");
ОбластьВремНетрудоспособность.Параметры.Сумма = Формат(ВсегоПоБольничным,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ОбластьВремНетрудоспособность.Параметры.Дни = КоличествоДнейПоБольничным;
ТабДокумент.Вывести(ОбластьВремНетрудоспособность);
//СтрокаВремНетрудоспособностьУход
ОбластьВремНетрудоспособностьУход = Макет.ПолучитьОбласть("СтрокаВремНетрудоспособностьУход");
ОбластьВремНетрудоспособностьУход.Параметры.Сумма = Формат(ВсегоПоБольничнымПоУходу,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ОбластьВремНетрудоспособностьУход.Параметры.Дни = КоличествоДнейПоБольничнымПоУходу;
ТабДокумент.Вывести(ОбластьВремНетрудоспособностьУход);
//СтрокаВремНетрудоспособностьБерем
ОбластьВремНетрудоспособностьБерем = Макет.ПолучитьОбласть("СтрокаВремНетрудоспособностьБерем");
ОбластьВремНетрудоспособностьБерем.Параметры.Сумма = Формат(ВсегоПоБеременностиИРодам,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ОбластьВремНетрудоспособностьБерем.Параметры.Дни = КоличествоДнейПоБеременостиИРодам;
ТабДокумент.Вывести(ОбластьВремНетрудоспособностьБерем);
//СтрокаВремНетрудоспособностьПогребение
ОбластьВремНетрудоспособностьПогребение = Макет.ПолучитьОбласть("СтрокаВремНетрудоспособностьПогребение");
ОбластьВремНетрудоспособностьПогребение.Параметры.Сумма = Формат(ВсегоНаПогребение,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ТабДокумент.Вывести(ОбластьВремНетрудоспособностьПогребение);
//Итог
ОбластьИтог = Макет.ПолучитьОбласть("Итог");
ОбластьИтог.Параметры.СуммаИтог = Формат(ВсегоПоДокументу,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ТабДокумент.Вывести(ОбластьИтог);
Возврат ТабДокумент;
КонецФункции
Функция ПечатьПриложение() Экспорт
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Макет = ПолучитьМакет("Приложение");
//Шапка
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДокумент.Вывести(ОбластьШапка);
//СтрокаПоБольничным
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаПоБольничным");
НомерСтроки = 1;
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке();
ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
Если ВыборкаПоШапкеДокумента.Следующий() Тогда
РезультатЗапросаПоДокументам = ПолучитьЗапросДляПечатиПриложения(ВыборкаПоШапкеДокумента);
ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
ТаблицаНачислений = СгруппироватьПериодыНачислений(ВыборкаПоДокументам);
Для Каждого Начисление ИЗ ТаблицаНачислений Цикл
Если Не Начисление.РезультатФСС = 0 Тогда
ОбластьСтрока.Параметры.Номер = НомерСтроки;
ОбластьСтрока.Параметры.Сотрудник = ОбщегоНазначения.ФамилияИнициалыФизЛица(Начисление.Сотрудник.ФизЛицо);
ОбластьСтрока.Параметры.КодПоДРФО = Начисление.ДРФО;
ОбластьСтрока.Параметры.СерияНомер = Начисление.Серия + " " + Начисление.Номер;
ОбластьСтрока.Параметры.ПричинаНетрудоспособности = Начисление.ПричинаНетрудоспособности.КодПричины;
ОбластьСтрока.Параметры.ПериодНетрудоспособности = "З " + Формат(Начисление.ПериодНачало, "ДЛФ=Д") + " по " + Формат(Начисление.ПериодКонец, "ДЛФ=Д");
ОбластьСтрока.Параметры.КоличествоДней = Начисление.КоличествоДней;
ОбластьСтрока.Параметры.КоличествоДнейФСС = Начисление.КоличествоДнейФСС;
ОбластьСтрока.Параметры.Результат = Формат(Начисление.Результат,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ОбластьСтрока.Параметры.РезультатФСС = Формат(Начисление.РезультатФСС,"ЧЦ=15; ЧДЦ=2; ЧН=; ЧГ=");
ТабДокумент.Присоединить(ОбластьСтрока);
НомерСтроки = НомерСтроки +1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//Подпись
ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");
ЧислоДокумента = Формат(Дата,"ДФ='дд';Л=uk_UA");
ДатаДокумента = Формат(Дата,"ДФ='дд ММММ ггггр.';Л=uk_UA");
ДатаДокументаБезЧисла = Прав(ДатаДокумента, СтрДлина(ДатаДокумента) - 2);
ОбластьПодпись.Параметры.ДатаДокумента = ЧислоДокумента + ДатаДокументаБезЧисла;
Руководители = ФормированиеПечатныхФорм.ОтветственныеЛица(Организация, Дата);
Если ЗначениеЗаполнено(Руководители.Руководитель) Тогда
ОбластьПодпись.Параметры.ФИОРуководителя = Руководители.РуководительФИО.Фамилия + " " + Руководители.РуководительФИО.Имя + " " + Руководители.РуководительФИО.Отчество;
КонецЕсли;
Если ЗначениеЗаполнено(Руководители.ГлавныйБухгалтер) Тогда
ОбластьПодпись.Параметры.ФИОБухгалтера = Руководители.ГлавныйБухгалтерФИО.Фамилия + " " + Руководители.ГлавныйБухгалтерФИО.Имя + " " + Руководители.ГлавныйБухгалтерФИО.Отчество;
КонецЕсли;
ТабДокумент.Вывести(ОбластьПодпись);
Возврат ТабДокумент;
КонецФункции
Функция ПечатьЗаявкаНС() Экспорт
ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ЗаявкаНС");
//Шапка
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Организация = Организация.НаименованиеПолное;
//Получим данные из РС КодыОрганизаций
Результат = ПолучитьЗапросПоКодам();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьШапка.Параметры.КодПоЕДРПОУ = Выборка.КодПоЕДРПОУ;
ОбластьШапка.Параметры.ИНН = Выборка.ИНН;
ОбластьШапка.Параметры.КВЕД = Выборка.КодКВЕД;
ОбластьШапка.Параметры.Риск = Выборка.КлассПрофессиональногоРиска;
КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для адреса организации
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КонтактнаяИнформация.Представление КАК Адрес
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект
| И КонтактнаяИнформация.Тип = &Тип
| И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация );
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьШапка.Параметры.Адрес = Выборка.Адрес;
КонецЕсли;
//Получим данные из РС КонтактнаяИнформация для телефона организации
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КонтактнаяИнформация.Представление КАК Телефон
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект
| И КонтактнаяИнформация.Тип = &Тип
| И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Объект", Организация );
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);
Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьШапка.Параметры.Телефон = Выборка.Телефон;
КонецЕсли;
ОбластьШапка.Параметры.НомерСчета = Организация.ОсновнойБанковскийСчет.НомерСчета;
ОбластьШапка.Параметры.МФОБанкаОрганизации = Организация.ОсновнойБанковскийСчет.Банк.Код;
ОбластьШапка.Параметры.Банк = Организация.ОсновнойБанковскийСчет.Банк;
ОбластьШапка.Параметры.Месяц = Формат(ПериодРегистрации, "ДФ=MMMM;Л = uk_UA");;
ОбластьШапка.Параметры.Год = Год(ПериодРегистрации);
ТабДокумент.Вывести(ОбластьШапка);
//Шапка помощь
ОбластьШапка = Макет.ПолучитьОбласть("ШапкаПомощь");
ТабДокумент.Вывести(ОбластьШапка);
//Строка Помощь
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаПомощь");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаявлениеРасчетВФССДокументыПоНачислениям.НомерСтроки КАК Номер,
| ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.НомерБольничногоЛиста КАК НомерБЛ,
| ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.СерияБольничногоЛиста КАК СерияБЛ,
| ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ.Сотрудник КАК Сотрудник,
| ЗаявлениеРасчетВФССДокументыПоНачислениям.Документ КАК Документ,
| ЗаявлениеРасчетВФСС.Комментарий
|ИЗ
| Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК ЗаявлениеРасчетВФССДокументыПоНачислениям
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявлениеРасчетВФСС КАК ЗаявлениеРасчетВФСС
| ПО ЗаявлениеРасчетВФССДокументыПоНачислениям.Ссылка = ЗаявлениеРасчетВФСС.Ссылка
|ГДЕ
| ЗаявлениеРасчетВФССДокументыПоНачислениям.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Ссылка );
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке();
ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
Если ВыборкаПоШапкеДокумента.Следующий() Тогда
РезультатЗапросаПоДокументам = ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента);
ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл
Если ВыборкаПоДокументам.Документ = Выборка.Документ Тогда
Если НЕ ВыборкаПоДокументам.Результат = 0 Тогда
ОбластьСтрока.Параметры.Номер = Выборка.Номер;
ОбластьСтрока.Параметры.СерияНомер = Выборка.СерияБЛ + " " + Выборка.НомерБЛ;
ОбластьСтрока.Параметры.Сотрудник = Выборка.Сотрудник;
Сумма = ВыборкаПоДокументам.Результат;
СтрокаСуммы = ОбщегоНазначения.СформироватьСуммуПрописью(Сумма, глЗначениеПеременной("ВалютаРегламентированногоУчета"), "uk");
СтрокаСуммы = СтрокаСуммы + " (" + Цел(Сумма) + " грн. " + Формат((Сумма - Цел(Сумма)) * 100, "ЧЦ=2; ЧВН=") + " коп.)";
ОбластьСтрока.Параметры.Результат = СтрокаСуммы;
ОбластьСтрока.Параметры.Комментарий = Выборка.Комментарий;
ТабДокумент.Присоединить(ОбластьСтрока);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
//Шапка траты
ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТраты");
ТабДокумент.Вывести(ОбластьШапка);
//Шапка погребение
ОбластьШапка = Макет.ПолучитьОбласть("ШапкаПогребение");
ТабДокумент.Вывести(ОбластьШапка);
//Подпись
ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");
//Получим данные из РС КодыОрганизаций
Результат = ПолучитьЗапросПоКодам();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ОбластьПодпись.Параметры.ФИОДиректораФонда = Выборка.ФИОДиректораФонда;
КонецЕсли;
Руководители = ФормированиеПечатныхФорм.ОтветственныеЛица(Организация, Дата);
Если ЗначениеЗаполнено(Руководители.Руководитель) Тогда
ОбластьПодпись.Параметры.ФИОРуководителя = Руководители.РуководительФИО.Фамилия + " " + Руководители.РуководительФИО.Имя + " " + Руководители.РуководительФИО.Отчество;
КонецЕсли;
Если ЗначениеЗаполнено(Руководители.ГлавныйБухгалтер) Тогда
ОбластьПодпись.Параметры.ФИОБухгалтера = Руководители.ГлавныйБухгалтерФИО.Фамилия + " " + Руководители.ГлавныйБухгалтерФИО.Имя + " " + Руководители.ГлавныйБухгалтерФИО.Отчество;
КонецЕсли;
ТабДокумент.Вывести(ОбластьПодпись);
Возврат ТабДокумент;
КонецФункции
Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
// Получить экземпляр документа на печать
Если ИмяМакета = "Заявка" Тогда
ТабДокумент = ПечатьЗаявка()
ИначеЕсли ИмяМакета = "Приложение" Тогда
Если ЗаСчетФССОтНС Тогда
Предупреждение("При включенном флаге ""За счет ФСС от НС"" печать ""Приложения"" не производится!");
Иначе
ТабДокумент = ПечатьПриложение()
КонецЕсли;
ИначеЕсли ИмяМакета = "ЗаявкаНС" Тогда
ТабДокумент = ПечатьЗаявкаНС()
КонецЕсли;
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер,ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,"Заявление - расчет в ФСС "));
КонецФункции
#КонецЕсли
// Возвращает доступные варианты печати документа
//
// Вовращаемое значение:
// Струткура, каждая строка которой соответствует одному из вариантов печати
//
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
Если ЗаСчетФССОтНС Тогда
Возврат Новый Структура("ЗаявкаНС, Приложение", "Заявка", "Приложение");
Иначе
Возврат Новый Структура("Заявка, Приложение", "Заявка", "Приложение");
КонецЕсли;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()
Процедура АвтозаполнениеДокумента() Экспорт
Если ЭтоНовый() Тогда
#Если Клиент Тогда
ТекстВопроса = "Перед заполнением докумет необходимо записать. Продолжить?";
Если Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да,) <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
#КонецЕсли
Записать();
КонецЕсли;
Запрос = ПолучитьЗапросДокументовПособий();
ДокументыПоНачислениям.Загрузить(Запрос.Выполнить().Выгрузить());
РасчитатьИтоговыеСуммы();
КонецПроцедуры
Функция ПолучитьЗапросДокументовПособий()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации));
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Приход", ВидДвиженияНакопления.Приход);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("СтатьяНС", Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп);
Если ЗаСчетФССОтНС Тогда
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| НачислениеПоБольничномуЛисту.Ссылка КАК Документ
|ИЗ
| Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
|ГДЕ
| НачислениеПоБольничномуЛисту.ПериодРегистрации = &ПериодРегистрации
| И НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС = &СтатьяНС
| И НачислениеПоБольничномуЛисту.Организация = &Организация
| И НЕ НачислениеПоБольничномуЛисту.Ссылка В
| (ВЫБРАТЬ
| РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ
| ИЗ
| РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС
| ГДЕ
| РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Период = &ПериодРегистрации
| И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ВидДвижения = &Приход
| И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ.Ссылка <> &Ссылка
| И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Регистратор <> &Ссылка)
| И НачислениеПоБольничномуЛисту.Ссылка.Проведен = ИСТИНА";
Иначе
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Пособия.Документ КАК Документ
|ИЗ
| (ВЫБРАТЬ
| ЕдиновременныеПособия.Ссылка КАК Документ
| ИЗ
| Документ.НачислениеЕдиновременныхПособийЗаСчетФСС КАК ЕдиновременныеПособия
| ГДЕ
| ЕдиновременныеПособия.Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА
| И ЕдиновременныеПособия.ПериодРегистрации = &ПериодРегистрации
| И ЕдиновременныеПособия.Организация = &Организация
|
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НачислениеПоБольничномуЛисту.Ссылка
| ИЗ
| Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
| ГДЕ
| НачислениеПоБольничномуЛисту.ПериодРегистрации = &ПериодРегистрации
| И НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС <> &СтатьяНС
| И НачислениеПоБольничномуЛисту.Организация = &Организация) КАК Пособия
|ГДЕ
| (НЕ Пособия.Документ В
| (ВЫБРАТЬ
| РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Документ
| ИЗ
| РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС
| ГДЕ
| РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ПериодВзаиморасчетов = &ПериодРегистрации
| И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.ВидДвижения = &Приход
| И РегистрНакопления.ВзаиморасчетыПоНачислениямЗаСчетФСС.Регистратор <> &Ссылка))
| И Пособия.Документ.Проведен = ИСТИНА";
КонецЕсли;
Возврат Запрос;
КонецФункции
Функция ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации);
Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка);
Запрос.УстановитьПараметр("Документ", ДокументыПоНачислениям.ВыгрузитьКолонку("Документ"));
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОсновнойЗапрос.Документ КАК Документ,
| ОсновнойЗапрос.Результат КАК Результат,
| ОсновнойЗапрос.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС,
| ОсновнойЗапрос.КоличествоДней КАК КоличествоДней
|ИЗ
| (ВЫБРАТЬ
| Начисления.Регистратор КАК Документ,
| СУММА(Начисления.Результат) КАК Результат,
| РазмерыВыплат.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС,
| NULL КАК КоличествоДней
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерыЗаконодательноУстановленныхВыплат.СрезПоследних(&ПериодРегистрации, ) КАК РазмерыВыплат
| ПО Начисления.ВидРасчета = РазмерыВыплат.ВидРасчета
|ГДЕ
| Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА
| И РазмерыВыплат.СтатьяРасчетовСФСС = ЗНАЧЕНИЕ(Справочник.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_Погребен)
| И Начисления.Регистратор В(&Документ)
|
|СГРУППИРОВАТЬ ПО
| РазмерыВыплат.СтатьяРасчетовСФСС,
| Начисления.Регистратор
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Начисления.Регистратор КАК Документ,
| СУММА(Начисления.Результат) КАК Результат,
| Начисления.Регистратор.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС,
| СУММА(ВЫБОР
| КОГДА Начисления.Назначение.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА
| ВЫБОР
| КОГДА Начисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОтпускПоБеременностиИРодам)
| ТОГДА Начисления.ОплаченоДнейЧасов
| ИНАЧЕ Начисления.НормаДней
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ) КАК КоличествоДней
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
|ГДЕ
| Начисления.Регистратор ССЫЛКА Документ.НачислениеПоБольничномуЛисту
| И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА
| И Начисления.Регистратор В(&Документ)
|
|СГРУППИРОВАТЬ ПО
| Начисления.Регистратор,
| Начисления.Регистратор.ПричинаНетрудоспособности.СтатьяРасчетовсФСС)КАК ОсновнойЗапрос
|";
Возврат Запрос.Выполнить();
КонецФункции
Процедура РасчитатьИтоговыеСуммы() Экспорт
ВсегоПоБольничным = 0;
ВсегоПоБольничнымПоУходу = 0;
ВсегоПоБеременностиИРодам = 0;
ВсегоНаПогребение = 0;
ВсегоПоДокументу = 0;
КоличествоДнейПоБольничным = 0;
КоличествоДнейПоБольничнымПоУходу = 0;
КоличествоДнейПоБеременостиИРодам = 0;
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке();
ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
Если ВыборкаПоШапкеДокумента.Следующий() Тогда
РезультатЗапросаПоДокументам = ПолучитьЗапросДляРасчетаСумм(ВыборкаПоШапкеДокумента);
ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл
Сумма = ВыборкаПоДокументам.Результат;
КоличествоДней = ВыборкаПоДокументам.КоличествоДней;
//Для документа "Начисление по больничному листу"
Если ТипЗнч(ВыборкаПоДокументам.Документ) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") Тогда
СтатьяДокумента = ВыборкаПоДокументам.СтатьяРасчетовСФСС;
Если СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_ВремНетрудосп ИЛИ СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп Тогда
ВсегоПоБольничным = ВсегоПоБольничным + Сумма;
КоличествоДнейПоБольничным = КоличествоДнейПоБольничным + КоличествоДней;
ИначеЕсли СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_Берем Тогда
ВсегоПоБеременностиИРодам = ВсегоПоБеременностиИРодам + Сумма;
КоличествоДнейПоБеременостиИРодам = КоличествоДнейПоБеременостиИРодам + КоличествоДней;
ИначеЕсли СтатьяДокумента = Справочники.СтатьиНалоговыхДеклараций.ФССУтрТрудосп_ВремНетрудоспУход Тогда
ВсегоПоБольничнымПоУходу = ВсегоПоБольничнымПоУходу + Сумма;
КоличествоДнейПоБольничнымПоУходу = КоличествоДнейПоБольничнымПоУходу + КоличествоДней;
КонецЕсли;
//Для документа "Начисление единовременных пособий за счет ФСС"
ИначеЕсли ТипЗнч(ВыборкаПоДокументам.Документ) = Тип("ДокументСсылка.НачислениеЕдиновременныхПособийЗаСчетФСС") Тогда
ВсегоНаПогребение = ВсегоНаПогребение + Сумма;
КонецЕсли;
КонецЦикла;
ВсегоПоДокументу = ВсегоПоБольничным + ВсегоПоБеременностиИРодам + ВсегоПоБольничнымПоУходу + ВсегоНаПогребение;
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА
// Формирует запрос по шапке документа
//
// Параметры:
// Режим - режим проведения
//
// Возвращаемое значение:
// Результат запроса
//
Функция СформироватьЗапросПоШапке()
Запрос = Новый Запрос;
// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка" , Ссылка);
Запрос.УстановитьПараметр("парамПустаяОрганизация", Справочники.Организации.ПустаяСсылка());
Запрос.Текст = "
|Выбрать РАЗРЕШЕННЫЕ
| Дата,
| ПериодРегистрации,
| Организация,
| Ответственный,
| Ссылка
|Из
| Документ." + Метаданные().Имя + "
|Где
| Ссылка = &ДокументСсылка
|";
Возврат Запрос.Выполнить();
КонецФункции // СформироватьЗапросПоШапке()
Функция СформироватьЗапросПоДокументамТабличнойЧасти(ВыборкаПоШапкеДокумента)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации", ВыборкаПоШапкеДокумента.ПериодРегистрации);
Запрос.УстановитьПараметр("ДокументСсылка", ВыборкаПоШапкеДокумента.Ссылка);
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОсновнойЗапрос.Документ КАК Документ,
| ОсновнойЗапрос.Сотрудник КАК Сотрудник,
| ОсновнойЗапрос.СчетУчета КАК СчетУчета,
| ОсновнойЗапрос.Результат КАК Результат,
| ОсновнойЗапрос.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС
|ИЗ
| (ВЫБРАТЬ
| Документы.Документ КАК Документ,
| Начисления.Сотрудник КАК Сотрудник,
| Начисления.ВидРасчета.СчетУчета КАК СчетУчета,
| Начисления.Результат КАК Результат,
| РазмерыВыплат.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС
|
| ИЗ
| Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК Документы
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
| ПО
| Документы.Документ = Начисления.Регистратор
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.РазмерыЗаконодательноУстановленныхВыплат.СрезПоследних(&ПериодРегистрации) КАК РазмерыВыплат
| ПО
| Начисления.ВидРасчета = РазмерыВыплат.ВидРасчета
| ГДЕ
| Документы.Ссылка = &ДокументСсылка
| И Документы.Документ ССЫЛКА Документ.НачислениеЕдиновременныхПособийЗаСчетФСС
| И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Документы.Документ КАК Документ,
| Начисления.Сотрудник КАК Сотрудник,
| Начисления.ВидРасчета.СчетУчета КАК СчетУчета,
| Начисления.Результат КАК Результат,
| Документы.Документ.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК СтатьяРасчетовСФСС
|
| ИЗ
| Документ.ЗаявлениеРасчетВФСС.ДокументыПоНачислениям КАК Документы
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
| ПО
| Документы.Документ = Начисления.Регистратор
|
| ГДЕ
| Документы.Ссылка = &ДокументСсылка
| И Документы.Документ ССЫЛКА Документ.НачислениеПоБольничномуЛисту
| И Начисления.ВидРасчета.НачислениеЗаСчетФСС = ИСТИНА
| ) КАК ОсновнойЗапрос
|
|
|";
Возврат Запрос.Выполнить();
КонецФункции
// Проверяет правильность заполнения шапки документа.
// Если какой-то из реквизтов шапки, влияющий на проведение не заполнен или
// заполнен не корректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса по шапке,
// все проверяемые реквизиты должны быть включены в выборку по шапке.
//
// Параметры:
// ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа,
// Отказ - флаг отказа в проведении.
// Заголовок - Заголовок для сообщений об ошибках проведения
//
Процедура ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок)
Если НЕ ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Организация) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не указана организация!", Отказ, Заголовок);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Ответственный) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не указано ответственное лицо!", Отказ, Заголовок);
КонецЕсли;
КонецПроцедуры // ПроверитьЗаполнениеШапки()
// Проверяет заполнена ли СтатьяРасчетовСФСС.
// Если реквизит не заполнен , то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса по строке ТЧ документа,
//
// Параметры:
// ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа,
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса по документам,
// Отказ - флаг отказа в проведении.
// Заголовок - Заголовок для сообщений об ошибках проведения
//
Процедура ПроверитьЗаполнениеСтатьиРасчетовСФСС(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ, Отказ, Заголовок)
Если НЕ ЗначениеЗаполнено(ВыборкаПоТЧ.СтатьяРасчетовСФСС) Тогда
СтрокаСообщения = "В документе: " + ВыборкаПоТЧ.Документ + " не заполнена статья расчетов в ФСС";
ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения, Отказ, Заголовок);
КонецЕсли;
КонецПроцедуры
// По строке выборки результата запроса по документу формируем движения по регистрам
//
// Параметры:
// ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа
// СтруктураПроведенияПоРегистрамНакопления - структура, содержащая имена регистров
// накопления по которым надо проводить документ
// СтруктураПараметров - структура параметров проведения.
//
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоТЧ)
Движение = Движения.ВзаиморасчетыПоНачислениямЗаСчетФСС.Добавить();
// Свойства
Движение.Период = ВыборкаПоШапкеДокумента.Дата;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.Организация;
Движение.ПериодВзаиморасчетов = НачалоМесяца(ВыборкаПоШапкеДокумента.ПериодРегистрации);
Движение.СтатьяРасчетовСФСС = ВыборкаПоТЧ.СтатьяРасчетовСФСС;
Движение.Сотрудник = ВыборкаПоТЧ.Сотрудник;
Движение.СчетУчета = ВыборкаПоТЧ.СчетУчета;
// Ресурсы
Движение.Сумма = ВыборкаПоТЧ.Результат;
//Реквизиты
Движение.Документ = ВыборкаПоТЧ.Документ;
Движение.КодОперации = Перечисления.КодыОперацийРасчетыСФСС.Начислено;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
РезультатЗапросаПоШапке = СформироватьЗапросПоШапке();
// Получим реквизиты шапки из запроса
ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
Если ВыборкаПоШапкеДокумента.Следующий() Тогда
//Надо позвать проверку заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок);
// Движения стоит добавлять, если в проведении еще не отказано (отказ =ложь)
Если НЕ Отказ Тогда
РезультатЗапросаПоДокументам = СформироватьЗапросПоДокументамТабличнойЧасти(ВыборкаПоШапкеДокумента);
ВыборкаПоДокументам = РезультатЗапросаПоДокументам.Выбрать();
Пока ВыборкаПоДокументам.Следующий() Цикл
ПроверитьЗаполнениеСтатьиРасчетовСФСС(ВыборкаПоШапкеДокумента, ВыборкаПоДокументам, Отказ, Заголовок);
//Если не заполнена СтатьяРасчетовСФСС не проводим
Если Не Отказ Тогда
ДобавитьСтрокуВДвиженияПоРегистрамНакопления(ВыборкаПоШапкеДокумента, ВыборкаПоДокументам);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") ИЛИ ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеЕдиновременныхПособийЗаСчетФСС") Тогда
Дата = ТекущаяДата();
ПериодРегистрации = Основание.ПериодРегистрации;
Организация = Основание.Организация;
Если ТипЗнч(Основание) = Тип("ДокументСсылка.НачислениеПоБольничномуЛисту") Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НачислениеПоБольничномуЛисту.ПричинаНетрудоспособности.СтатьяРасчетовСФСС КАК Статья
|ИЗ
| Документ.НачислениеПоБольничномуЛисту КАК НачислениеПоБольничномуЛисту
|ГДЕ
| НачислениеПоБольничномуЛисту.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Основание );
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Если Выборка.Статья = Справочники.СтатьиНалоговыхДеклараций.ФССНесчСлуч_ВремНетрудосп Тогда
ЗаСчетФССОтНС = Истина;
Иначе
ЗаСчетФССОтНС = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
НоваяСтрока = ДокументыПоНачислениям.Добавить();
НоваяСтрока.Документ = Основание;
Ответственный = Основание.Ответственный;
//Необходимо записать документ, для правильного расчета итоговых сумм.
Записать();
РасчитатьИтоговыеСуммы();
КонецЕсли;
КонецПроцедуры
Функция СгруппироватьПериодыНачислений(Выборка)
Перем прСотрудник, прПричинаНетрудоспособности, прДРФО, прСерия, прНомер; //переменные содержащие информацию с прошлой строки выборки при обходе ее в цикле
Перем прПериодНачало;
Перем прПериодКонец;
Перем прКоличествоДней, прКоличествоДнейФСС, прРезультат, прРезультатФСС;
Перем НоваяСтрока; //Строка табличной части
прПериодНачало = Дата(1,1,1);
прПериодКонец = Дата(1,1,1);
ТаблицаНачислений = Новый ТаблицаЗначений;
ТаблицаНачислений.Колонки.Добавить("Сотрудник");
ТаблицаНачислений.Колонки.Добавить("ПричинаНетрудоспособности");
ТаблицаНачислений.Колонки.Добавить("ДРФО");
ТаблицаНачислений.Колонки.Добавить("Серия");
ТаблицаНачислений.Колонки.Добавить("Номер");
ТаблицаНачислений.Колонки.Добавить("ПериодНачало");
ТаблицаНачислений.Колонки.Добавить("ПериодКонец");
ТаблицаНачислений.Колонки.Добавить("КоличествоДней");
ТаблицаНачислений.Колонки.Добавить("КоличествоДнейФСС");
ТаблицаНачислений.Колонки.Добавить("Результат");
ТаблицаНачислений.Колонки.Добавить("РезультатФСС");
Пока Выборка.Следующий() Цикл
//если строки абсолютно разные добавляем новые
Если Выборка.Сотрудник <> прСотрудник ИЛИ Выборка.ПричинаНетрудоспособности <> прПричинаНетрудоспособности ИЛИ НачалоДня(Выборка.ПериодНачало) <> (НачалоДня(прПериодКонец)+ 1*60*60*24) ИЛИ
Выборка.ДРФО <> прДРФО ИЛИ Выборка.Серия <> прСерия ИЛИ Выборка.Номер <> прНомер Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
НоваяСтрока.Сотрудник = Выборка.Сотрудник;
НоваяСтрока.ПричинаНетрудоспособности = Выборка.ПричинаНетрудоспособности;
НоваяСтрока.ДРФО = Выборка.ДРФО;
НоваяСтрока.Серия = Выборка.Серия;
НоваяСтрока.Номер = Выборка.Номер;
НоваяСтрока.ПериодНачало = Выборка.ПериодНачало;
НоваяСтрока.ПериодКонец = Выборка.ПериодКонец;
НоваяСтрока.КоличествоДней = Выборка.КоличествоДней + Выборка.КоличествоДнейФСС;
НоваяСтрока.КоличествоДнейФСС = Выборка.КоличествоДнейФСС;
НоваяСтрока.Результат = Выборка.Результат + Выборка.РезультатФСС;
НоваяСтрока.РезультатФСС = Выборка.РезультатФСС;
прСотрудник = Выборка.Сотрудник;
прПричинаНетрудоспособности = Выборка.ПричинаНетрудоспособности;
прДРФО = Выборка.ДРФО;
прСерия = Выборка.Серия;
прНомер = Выборка.Номер;
прПериодНачало = Выборка.ПериодНачало;
прПериодКонец = Выборка.ПериодКонец;
//если строки одинаковые и если дата конца первой строки на один день меньше даты второй строки , совмещаем их, делаем одну строку.
ИначеЕсли Выборка.Сотрудник = прСотрудник И Выборка.ПричинаНетрудоспособности = прПричинаНетрудоспособности И
Выборка.ДРФО = прДРФО И Выборка.Серия = прСерия И Выборка.Номер = прНомер И НачалоДня(Выборка.ПериодНачало) = (НачалоДня(прПериодКонец)+ 1*60*60*24) Тогда
НоваяСтрока.ПериодНачало = прПериодНачало;
НоваяСтрока.ПериодКонец = Выборка.ПериодКонец;
НоваяСтрока.КоличествоДней = НоваяСтрока.КоличествоДней + Выборка.КоличествоДней + Выборка.КоличествоДнейФСС;
НоваяСтрока.КоличествоДнейФСС = НоваяСтрока.КоличествоДнейФСС + Выборка.КоличествоДнейФСС;
НоваяСтрока.Результат = НоваяСтрока.Результат + Выборка.Результат + Выборка.РезультатФСС;
НоваяСтрока.РезультатФСС = НоваяСтрока.РезультатФСС + Выборка.РезультатФСС;
прСотрудник = Выборка.Сотрудник;
прПричинаНетрудоспособности = Выборка.ПричинаНетрудоспособности;
прДРФО = Выборка.ДРФО;
прСерия = Выборка.Серия;
прНомер = Выборка.Номер;
прПериодКонец = Выборка.ПериодКонец;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаНачислений;
КонецФункции