Статью написать сподвиг вопрос Слишком сложно для меня по уже стандартно нестандартной расшифровке. В свое время тоже требовалось оное и естественно набрел на Это. Все здорово. Но! Статья то о СКД + Лень. Последняя пылала пожаром и отказывалась нажимать последовательность cntr+C, alt+Tab, cntr+V многократно.
Я её уговаривал, грамотно же статья написана. Нет, отвечает Лень. Там нужна форма, а в БСП это Общая форма и она может измениться со следующим релизом, будет тебе лишняя головная боль при обновлении. В общем, Лень странная девочка. Когда творческий поиск, сложный запрос - ядерным взрывом не разбудишь, а тут бунт и в условиях цейтнота.
Пришлось идти на поводу у Матери всея прогресса. Спросил у Яндекса, тот мне честно: “Ты б еще у Гугела идиот спросил”. Пришлось включать творческий процесс и метод “Научного тыка”. Чем научный от ненаучного знаете, чем отличается? Ставишь точку останова и смотришь в табло. Не нужное само отметается, а нужное обязательно найдется. А где ее ставить как не в ПриКомпоновкеРезультата. В уже стандартных строчках:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
И вот ОНО. Нужное! После строчки:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
Под пытками, ЕЁ Величества Точки останова, ДанныеРасшифровки сознаются в своих параметрах, отборах и остальных "грехах". Остается только проверить, а расшифровка ли это
ЭтоРасшифровка = Не ДанныеРасшифровки.Настройки.Отбор.Элементы.Количество()= 0;
Накидываем седло с уздечкой на коня и вуаля. Шорты превращаются в брюки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
#Область ВставкаДляВыводаНестандартнойРасшифровки
ЭтоРасшифровка = Не ДанныеРасшифровки.Настройки.Отбор.Элементы.Количество()= 0;
Если ЭтоРасшифровка Тогда
Отчет = Отчеты.<Любой отчет>.Создать();
Настройки = Отчет.КомпоновщикНастроек.Настройки;
//Устанавливаем отборы и параметры из ДанныеРасшифровки в Настройки(
//....
//)
МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчет.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
КонецЕсли;
#КонецОбласти
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Вроде бы просто. Но не тут то было. Моя Лень требует большего. Шорты не превращаются в брюки. При выборе поля расшифровки нет строчки. "Остатки товаров", а есть другие поля, которые мне абсолютно не нужны. С ненужными полями все просто. Идем на закладку "Наборы данный" и ставим ограничение поля на "Не доступно для группировки". Но и с выводом нужной мне строки в диалоге выбора поля, тоже банально. Добавляем в вычисляемые поля "ОтчетОстаткиТоваров" с заголовком "Остатки товаров" и в диалоге выбора поля уже ее наблюдаем. Остается только обработать в процедуре ПриКомпоновкеРезультата именно её:
Если ЭтоРасшифровка Тогда
ИмяРашифровки = МакетКомпоновки.Тело[МакетКомпоновки.Тело.Количество()-1].Группировка[0].ИмяПоля;
Если ИмяРашифровки = "ОтчетОстаткиТоваров" Тогда
Отчет = Отчеты.ОстаткиТоваров.Создать();
Настройки = Отчет.КомпоновщикНастроек.Настройки;
//Устанавливаем отборы и параметры из ДанныеРасшифровки в Настройки(
//....
//)
МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчет.СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
КонецЕсли;
КонецЕсли;
Вот собственно и все. Наивную девочку Расшифровка обманули и она выдала все что мне нужно, при минимальных затратах и обработчиков формы "Выбор" и "ОбработкаРасшифровки". Лень успокоилась на время.
Тестировалось на платформах 8.3.10 и 8.3.13. Но думаю будет работать и на более ранних релизах.