Версия для печати темы (https://pro1c.org.ua/index.php?s=290663a5ac19ea91ea850ce4e9ccf8e9&showtopic=21671)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Заявление - расчет в ФСС

Автор: Loreny 21.01.15, 15:45

Добрый день!

1С: Предприятие 8,2: УПП 1.3.33.6

Господа! Такая проблема, у нас поменялась форма Приложения к ЗаявкеВФСС. Необходимо отредактировать сам макет(табличную часть). Т.к. создать копию документа во внешнюю обработку нельзя, создал вручную копию документа. НО, модуль обращается к другим функциям и процедурам которые не указанные в данном модуле. Убрать их из модуля нельзя, т.к. на них завязанная работа формирования табличной части. Подскажите как можно более правильно скопировать Документ либо написать печатную форму на основе базовой?

Автор: Vofka 21.01.15, 16:06

Вам надо печатную форму изменить?

Автор: logist 21.01.15, 22:11

Цитата(Loreny @ 21.01.15, 15:45) *
у нас поменялась форма Приложения к ЗаявкеВФСС

попутно вопрос - что значит "у нас"?, она же везде стандартная

Автор: Loreny 22.01.15, 8:18

Цитата(Vofka @ 21.01.15, 16:06) http://pro1c.org.ua/index.php?act=findpost&pid=95430
попутно вопрос - что значит "у нас"?, она же везде стандартная

Как говорят в фонде, в нашем городе (г.Мариуполь), из Киева пришло распоряжение на новый шаблон документа который отличается от шаблона установленного в 1С.
А выгружать из 1с в xls , а потом еще и руками редактировать его это как минимум глупо и муторно.

Автор: alex040269 22.01.15, 8:28

Цитата(Loreny @ 22.01.15, 8:18) *
А выгружать из 1с в xls , а потом еще и руками редактировать его это как минимум глупо и муторно.

значит нужно реализовать внешнюю печатную форму.

Автор: Loreny 22.01.15, 8:45

Цитата(alex040269 @ 22.01.15, 8:28) *
значит нужно реализовать внешнюю печатную форму.

ну это очевидно, но при создании печатной формы необходимо затягивать данные из двух другх документов, а в этих функция идет проверка на проведение соответствующих документов и ссылка на функцию "Записать" которой просто нет в данном модуле документа.

Автор: Егор Динин 22.01.15, 8:51

Цитата(Loreny @ 22.01.15, 9:45) *
затягивать данные из двух другх документов

О чем именно речь? Давайте код и что нужно получить.

Автор: Vofka 22.01.15, 8:55

По-моему обсуждение заходит в тупик. Если у вас есть конкретные проблемы с программированием - выкладывайте с чем конкретно (и тема переедет в раздел программирования). Потому что никто не видит вашего кода и врядли кто-то понимает о чем вы говорите. Если же вопрос не в программировании, то в чём?

Автор: Loreny 22.01.15, 9:05

Цитата(Егор Динин @ 22.01.15, 8:51) http://pro1c.org.ua/index.php?act=findpost&pid=95457
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА

// Форматирует сумму прописью документа
//
// Параметры:
//  СуммаДок - число - реквизит, который надо представить прописью
//  СуммаБезКопеек - булево - флаг представления суммы без копеек
//
// Возвращаемое значение
//  Отформатированную строку
//
Функция ФорматироватьСуммуПрописи(СуммаДок)
    
    Результат     = СуммаДок;
    ЦелаяЧасть    = Цел(СуммаДок);
    ФорматСтрока  = "Л=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)   Тогда
            НоваяСтрока.ПериодНачало = прПериодНачало;
            НоваяСтрока.ПериодКонец = Выборка.ПериодКонец;
            НоваяСтрока.КоличествоДней = НоваяСтрока.КоличествоДней + Выборка.КоличествоДней + Выборка.КоличествоДнейФСС;
            НоваяСтрока.КоличествоДнейФСС = НоваяСтрока.КоличествоДнейФСС + Выборка.КоличествоДнейФСС;
            НоваяСтрока.Результат = НоваяСтрока.Результат + Выборка.Результат + Выборка.РезультатФСС;
            НоваяСтрока.РезультатФСС = НоваяСтрока.РезультатФСС + Выборка.РезультатФСС;
            
            
            прСотрудник = Выборка.Сотрудник;
            прПричинаНетрудоспособности = Выборка.ПричинаНетрудоспособности;
            прДРФО = Выборка.ДРФО;
            прСерия = Выборка.Серия;
            прНомер = Выборка.Номер;
            
            прПериодКонец = Выборка.ПериодКонец;
    КонецЕсли;
                
    КонецЦикла;
    
    Возврат ТаблицаНачислений;
    
КонецФункции


если этот код скопировать в новую печатную форму(без каких либо изменений) то при проверке кода выдает ошибки об отсутствии функции "Записать"

Автор: alex040269 22.01.15, 9:22

Цитата(Loreny @ 22.01.15, 9:05) *
функции "Записать"

эта функция не нужна в печ.форме.

что вы собираетесь записывать?

нужна только функция
Функция ПечатьЗаявка() Экспорт

Автор: Loreny 22.01.15, 9:24

Цитата(alex040269 @ 22.01.15, 9:22) *
та функция не нужна в печ.форме.

что вы собираетесь записывать?

нужна только функция


нужна функция
Функция ПечатьПриложение() Экспорт


но там много связаных функций

Автор: Petre 22.01.15, 10:02

Цитата(Loreny @ 22.01.15, 9:24) *
но там много связаных функций

Если это - экспортные функции, обращайтесь к ним через реквизит ссылки на документ (по стандартам внешних печатных форм это "СсылкаНаОбъект").
Если эти функции не экспортные, придется их скопировать в модуль впф.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua