При решении одной из задач заказчика потребовалось отражать информацию о полученных (и самое главное, выплаченных) пособиях за счет Фонда социального страхования в свободной форме. Решение вопроса было разбито на следующие шаги:
1. Получить из регистра накопления «ЗарплатаКВыплате» необходимые данные по начислениям и выплатам пособий.
2. Предоставить возможность пользователю исключить лишние данные.
3. Сформировать текст пояснительной записки на основании собранных данных (с возможностью отредактировать полученный текст).
4. Вывести текст в виде справки с данными об организации и ответственных лицах.
Ход решения
Наибольший интерес при решении данной задачи представляет первый шаг, решение которого было достигнуто с помощью следующего запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос1.Регистратор КАК Регистратор,
| ВложенныйЗапрос1.ДокументОснование КАК ДокументОснование,
| ВложенныйЗапрос2.СуммаКВыплате КАК СуммаКВыплате
|ПОМЕСТИТЬ ВТ_Выплаты_Основания
|ИЗ
| (ВЫБРАТЬ
| ЗарплатаКВыплате.ДокументОснование КАК ДокументОснование,
| СУММА(ЗарплатаКВыплате.СуммаКВыплате) КАК СуммаКВыплате,
| ЗарплатаКВыплате.ФизическоеЛицо КАК ФизическоеЛицо,
| ЗарплатаКВыплате.Регистратор КАК Регистратор
| ИЗ
| РегистрНакопления.ЗарплатаКВыплате КАК ЗарплатаКВыплате
| ГДЕ
| ЗарплатаКВыплате.ФизическоеЛицо = &ФизическоеЛицо
| И (ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВедомостьНаВыплатуЗарплатыВБанк
| ИЛИ ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВедомостьНаВыплатуЗарплатыВКассу
| ИЛИ ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВедомостьНаВыплатуЗарплатыПеречислением)
| И ЗарплатаКВыплате.Период МЕЖДУ &НачалоПериода И &ОкончаниеПериода
| И ЗарплатаКВыплате.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И (ЗарплатаКВыплате.ДокументОснование ССЫЛКА Документ.БольничныйЛист
| ИЛИ ЗарплатаКВыплате.ДокументОснование ССЫЛКА Документ.ЕдиновременноеПособиеЗаСчетФСС
| ИЛИ ЗарплатаКВыплате.ДокументОснование ССЫЛКА Документ.ОплатаДнейУходаЗаДетьмиИнвалидами
| ИЛИ ЗарплатаКВыплате.ДокументОснование ССЫЛКА Документ.НачислениеЗарплаты
| ИЛИ ЗарплатаКВыплате.ДокументОснование ССЫЛКА Документ.ОтпускПоУходуЗаРебенком)
|
| СГРУППИРОВАТЬ ПО
| ЗарплатаКВыплате.ДокументОснование,
| ЗарплатаКВыплате.ФизическоеЛицо,
| ЗарплатаКВыплате.Регистратор) КАК ВложенныйЗапрос1
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЗарплатаКВыплате.Регистратор КАК Рег,
| СУММА(ЗарплатаКВыплате.СуммаКВыплате) КАК СуммаКВыплате,
| ЗарплатаКВыплате.ФизическоеЛицо КАК ФизическоеЛицо
| ИЗ
| РегистрНакопления.ЗарплатаКВыплате КАК ЗарплатаКВыплате
| ГДЕ
| ЗарплатаКВыплате.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ЗарплатаКВыплате.ФизическоеЛицо = &ФизическоеЛицо
| И (ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВедомостьНаВыплатуЗарплатыВБанк
| ИЛИ ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВедомостьНаВыплатуЗарплатыВКассу
| ИЛИ ЗарплатаКВыплате.Регистратор ССЫЛКА Документ.ВедомостьНаВыплатуЗарплатыПеречислением)
| И ЗарплатаКВыплате.Период МЕЖДУ &НачалоПериода И &ОкончаниеПериода
|
| СГРУППИРОВАТЬ ПО
| ЗарплатаКВыплате.Регистратор,
| ЗарплатаКВыплате.ФизическоеЛицо) КАК ВложенныйЗапрос2
| ПО (ВложенныйЗапрос1.Регистратор = ВложенныйЗапрос2.Рег)
| И (ВложенныйЗапрос1.ФизическоеЛицо = ВложенныйЗапрос2.ФизическоеЛицо)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЗ_ПособияИзНачислений.Регистратор КАК Регистратор,
| ВЗ_ПособияИзНачислений.ДокументОснование КАК ДокументОснование,
| ВЗ_ПособияИзНачислений.СуммаКВыплате КАК СуммаКВыплате,
| ВЗ_ПособияИзНачислений.ДатаНачала КАК ДатаНачала,
| ВЗ_ПособияИзНачислений.ДатаОкончания КАК ДатаОкончания,
| ИСТИНА КАК Учитывать,
| ВЗ_ПособияИзНачислений.РезультатНачисления КАК РезультатНачисления
|ИЗ
| (ВЫБРАТЬ
| ВТ_Выплаты_Основания.Регистратор КАК Регистратор,
| ВЗ_ПособияИзНачислений.СтраховойСлучай КАК ДокументОснование,
| ВТ_Выплаты_Основания.СуммаКВыплате КАК СуммаКВыплате,
| ВЗ_ПособияИзНачислений.ДатаНачала КАК ДатаНачала,
| ВЗ_ПособияИзНачислений.ДатаОкончания КАК ДатаОкончания,
| ВЗ_ПособияИзНачислений.РезультатНачисления КАК РезультатНачисления
| ИЗ
| ВТ_Выплаты_Основания КАК ВТ_Выплаты_Основания
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| НачислениеЗарплатыПособия.Ссылка КАК ДокНачисление,
| НачислениеЗарплатыПособия.СтраховойСлучай КАК СтраховойСлучай,
| НачислениеЗарплатыПособия.Результат КАК ВсегоПоНачислению,
| НачислениеЗарплатыПособия.ДатаНачала КАК ДатаНачала,
| НачислениеЗарплатыПособия.ДатаОкончания КАК ДатаОкончания,
| НачислениеЗарплатыПособия.Результат КАК РезультатНачисления
| ИЗ
| Документ.НачислениеЗарплаты.Пособия КАК НачислениеЗарплатыПособия
| ГДЕ
| НачислениеЗарплатыПособия.Ссылка.Проведен = ИСТИНА
| И НачислениеЗарплатыПособия.Сотрудник.ФизическоеЛицо = &ФизическоеЛицо) КАК ВЗ_ПособияИзНачислений
| ПО ВТ_Выплаты_Основания.ДокументОснование = ВЗ_ПособияИзНачислений.ДокНачисление) КАК ВЗ_ПособияИзНачислений
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЗ_КромеНачислений.Регистратор,
| ВЗ_КромеНачислений.ДокументОснование,
| ВЗ_КромеНачислений.СуммаКВыплате,
| НЕОПРЕДЕЛЕНО,
| НЕОПРЕДЕЛЕНО,
| ИСТИНА,
| NULL
|ИЗ
| (ВЫБРАТЬ
| ВТ_Выплаты_Основания.Регистратор КАК Регистратор,
| ВТ_Выплаты_Основания.ДокументОснование КАК ДокументОснование,
| ВТ_Выплаты_Основания.СуммаКВыплате КАК СуммаКВыплате
| ИЗ
| ВТ_Выплаты_Основания КАК ВТ_Выплаты_Основания
| ГДЕ
| ВТ_Выплаты_Основания.ДокументОснование ССЫЛКА Документ.БольничныйЛист
| ИЛИ ВТ_Выплаты_Основания.ДокументОснование ССЫЛКА Документ.ЕдиновременноеПособиеЗаСчетФСС
| ИЛИ ВТ_Выплаты_Основания.ДокументОснование ССЫЛКА Документ.ОплатаДнейУходаЗаДетьмиИнвалидами
| ИЛИ ВТ_Выплаты_Основания.ДокументОснование ССЫЛКА Документ.ОтпускПоУходуЗаРебенком) КАК ВЗ_КромеНачислений
|
|УПОРЯДОЧИТЬ ПО
| Регистратор
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("ФизическоеЛицо", Объект.ФизическоеЛицо);
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(Объект.Период.ДатаНачала));
Запрос.УстановитьПараметр("ОкончаниеПериода", КонецДня(Объект.Период.ДатаОкончания));
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Объект.СписокВыплат.Загрузить(РезультатЗапроса);
В список документов попадают документы-выплаты, в которых в качестве документов-оснований есть:
- документы "Начисление зарплаты" (в которых заполнена табличная часть "Пособия");
- документы "Больничный лист";
- документы "Единовременное пособие за счет ФСС";
- документы "Оплата дней ухода за детьми-инвалидами";
- документы "Отпуск по уходу за ребенком".
Следующий шаг можно представить в виде табличной части:
Третий шаг задачи преобразует полученные данные в текст пояснительной записки:
На последнем шаге выводим информацию об организации:
В последних версиях платформы 1С изменилось положение меню с предварительным просмотром и печатью:
Разработка и тестирование осуществлялись на базе типовой «Зарплата и управление персоналом, редакция 3.1» (релиз 3.1.12.113)» и платформе 1С:Предприятие 8.3 (релиз 8.3.16.1063).
Примечания:
- Обработка по умолчанию заполняет табличную часть на основании документов выплат (по кассе и по банку).
- Изменяя реквизит "Учитывать" можно учитывать или не учитывать строку табличной части при формировании текста пояснительной записки. По умолчанию всем строкам, попавшим в табличную часть, значение реквизита "Учитывать" ставится как Истина.