Мой вариант решения (естественно неоптимальный):
Док Поступление товаров и Услуг. Модуль Объекта
1.Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
СтруктураМакетов = Новый Структура;
СтруктураМакетов.Вставить("Накладная", "Приходная накладная");
СтруктураМакетов.Вставить("Ценники", "Ценники на товары");
СтруктураМакетов.Вставить("Этикетки", "Этикетки");
СтруктураМакетов.Вставить("СерийныеНомера", "Список серийных номеров");
СтруктураМакетов.Вставить("Бланк", "Бланк товарного наполнения");
СтруктураМакетов.Вставить("ПриходНаРозничныеСкладыВЦенахАТТ", "Приход на розничные склады в ценах АТТ");
СтруктураМакетов.Вставить("ЗаписьВRFIDМетки", "Запись в RFID метки");
//УТ СПЕЦИАЛИСТ +
Значение = УправлениеПользователями.ПолучитьЗначениеПраваДляТекущегоПользователя(ПланыВидовХарактеристик.ПраваПользователей.ПечатьУТ_Специалист, Ложь);
Если Значение.Количество() = 0 Тогда
ДобавитьУТ = Ложь;
ИначеЕсли Значение.Количество() > 1 Тогда
ДобавитьУТ = Истина;
Иначе
ДобавитьУТ = Значение[0].Значение;
КонецЕсли;
Если ДобавитьУТ Тогда
СтруктураМакетов.Вставить("УТ_Специалист", "УТ Специалист");
КонецЕсли;
//УТ СПЕЦИАЛИСТ -
Возврат СтруктураМакетов;
КонецФункции // ПолучитьСтруктуруПечатныхФорм()
2. Сама функция печати
//УТСпециалист +
Функция ПечатьУТСпециалист()
Попытка
Проверка = Дата(Год(Дата),2,29);
КолДнейВГоду = 366;
Исключение
КолДнейВГоду = 365;
КонецПопытки;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗакупкиОбороты.Номенклатура.Родитель КАК Группа,
| ЗакупкиОбороты.Номенклатура КАК Номенклатура,
| ЗакупкиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| СУММА(ЗакупкиОбороты.КоличествоОборот) КАК КоличествоОборот,
| ЗакупкиОбороты.ДокументЗакупки КАК ДокументЗакупки
|ИЗ
| РегистрНакопления.Закупки.Обороты(
| &Д1,
| &Д2,
| ,
| Номенклатура В (&спНоменклатура)
| И ХарактеристикаНоменклатуры В (&спХарактеристика)) КАК ЗакупкиОбороты
|
|СГРУППИРОВАТЬ ПО
| ЗакупкиОбороты.Номенклатура,
| ЗакупкиОбороты.ХарактеристикаНоменклатуры,
| ЗакупкиОбороты.Номенклатура.Родитель,
| ЗакупкиОбороты.ДокументЗакупки
|ИТОГИ
| СУММА(КоличествоОборот),
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДокументЗакупки)
|ПО
| Группа,
| Номенклатура,
| ХарактеристикаНоменклатуры";
ДатаКон = Дата - (24*60*60);
ДатаНач = ДатаКон - (КолДнейВГоду*24*60*60);
Запрос.УстановитьПараметр("Д1", ДатаНач);
Запрос.УстановитьПараметр("Д2", ДатаКон);
Запрос.УстановитьПараметр("спНоменклатура", Товары.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("спХарактеристика",Товары.ВыгрузитьКолонку("ХарактеристикаНоменклатуры"));
Результат = Запрос.Выполнить();
ВыборкаНоменклатураРодитель = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "УТСпециалист";
Макет = ПолучитьМакет("УТСпециалист");
ОбластьНадШапка = Макет.ПолучитьОбласть("НадШапкой");
ТабДокумент.Вывести(ОбластьНадШапка);
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДокумент.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрокаРазделитель = Макет.ПолучитьОбласть("СтрокаРазделитель");
КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РежимФормированияПечатныхФорм"));
Макет.КодЯзыкаМакета = КодЯзыкаПечать;
Пока ВыборкаНоменклатураРодитель.Следующий() Цикл
// Вставить обработку выборки ВыборкаНоменклатураРодитель
ГруппаВыведена = ЛОЖЬ;
ВыборкаНоменклатура = ВыборкаНоменклатураРодитель.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
// Вставить обработку выборки ВыборкаНоменклатура
ВыборкаХарактеристикаНоменклатуры = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//Если ВыборкаНоменклатура.ДокументЗакупки > 1 Тогда
Пока ВыборкаХарактеристикаНоменклатуры.Следующий() Цикл
ВыборкаФинал = ВыборкаХарактеристикаНоменклатуры.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если ВыборкаФинал.Количество() > 1 Тогда
ГОСТ = "";
Марка = "";
Характеристика = ВыборкаХарактеристикаНоменклатуры.ХарактеристикаНоменклатуры;
ПоложениеЗапятой = Найти(Характеристика,",");
ОбластьСтрока.Параметры.Заполнить(ВыборкаХарактеристикаНоменклатуры);
Если ПоложениеЗапятой > 0 Тогда
Гост = СокрЛП(Лев(Характеристика,ПоложениеЗапятой-1));
Марка = СокрЛП(Прав(Характеристика,ПоложениеЗапятой));
КонецЕсли;
ОбластьСтрока.Параметры.Гост =Гост;
ОбластьСтрока.Параметры.Марка =Марка;
Если НЕ ГруппаВыведена Тогда
ГруппаВыведена = Истина;
Иначе
ОбластьСтрока.Параметры.Группа = "";
КонецЕсли;
ОбластьСтрока.Параметры.Постоянная = КолДнейВГоду/ВыборкаХарактеристикаНоменклатуры.ДокументЗакупки;
ОбластьСтрока.Параметры.Разовая = "";
ТабДокумент.Вывести(ОбластьСтрока);
//ОбластьСтрока.Об
Продолжить;
КонецЕсли;
Пока ВыборкаФинал.Следующий() Цикл
ГОСТ = "";
Марка = "";
Характеристика = ВыборкаХарактеристикаНоменклатуры.ХарактеристикаНоменклатуры;
Если ПоложениеЗапятой > 0 Тогда
Гост = СокрЛП(Лев(Характеристика,ПоложениеЗапятой-1));
Марка = СокрЛП(Прав(Характеристика,ПоложениеЗапятой));
КонецЕсли;
ОбластьСтрока.Параметры.Гост = Гост;
ОбластьСтрока.Параметры.Марка = Марка;
ОбластьСтрока.Параметры.Заполнить(ВыборкаФинал);
Разовая = ВыборкаФинал.ДокументЗакупки.Дата;
ОбластьСтрока.Параметры.Разовая = Разовая;
ОбластьСтрока.Параметры.Постоянная = "";
Если НЕ ГруппаВыведена Тогда
ГруппаВыведена = Истина;
Иначе
ОбластьСтрока.Параметры.Группа = "";
КонецЕсли;
ТабДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабДокумент.Вывести(ОбластьСтрокаРазделитель);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции // ПечатьПоступлениеТоваров()
//УТ_Специалист -
3.Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
//УТ Специалист
.....
ИначеЕсли ИмяМакета = "УТ_Специалист" Тогда
ТабДокумент = ПечатьУТСпециалист();
КонецЕсли;
4ПланыВидовХарактеристик ПраваПользователей
Добавить предопределенный: ПечатьУТ_Специалист – тип булево