[Памятка]. Формирование отчета СКД в управляемых формах. Нестандартные способы

20.12.18

Разработка - СКД

Пригодится при формировании отчета СКД нестандартным способом.

1. Использование Набора данных и загрузка в него Таблицы значений.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;	
	

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Номенклатура
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";
	
	Результат = Запрос.Выполнить();
	
	Если Результат.Пустой() Тогда
		Сообщить("Данных нет!");
		Возврат;	
	КонецЕсли;
	
	ТЗ = Результат.Выгрузить();	
	НаборДанных = Новый Структура();
	НаборДанных.Вставить("Таблица", ТЗ);
		
	НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки();

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки);

	ПроцессорКомпоновкиСКД = Новый ПроцессорКомпоновкиДанных;

	ПроцессорКомпоновкиСКД.Инициализировать(Макет,НаборДанных, ДанныеРасшифровки);

	ДокументРезультат.Очистить();

	ПроцессорВыводаСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

	ПроцессорВыводаСКД.УстановитьДокумент(ДокументРезультат);

	ПроцессорВыводаСКД.Вывести(ПроцессорКомпоновкиСКД);
		
КонецПроцедуры

Чтобы корректно отображались настройки отчета делаем следующее:

 

2. Пробежаться по сформированному Табличному документу. Получить ссылки на документ и отправить их на печать.
 

Для примера: В первом столбце сформированного отчета находятся документы заказы покупателя.

&НаКлиенте
Процедура ПакетнаяПечать(Команда)
	
	ВысотаТаблицы1 = ОтчетТабличныйДокумент.ВысотаТаблицы;
	ШиринаТаблицы1 = ОтчетТабличныйДокумент.ШиринаТаблицы;
	
	Массивобъектов = ПолучитьДокументы(ВысотаТаблицы1);

	Если Массивобъектов.Количество() > 1 Тогда
		Для Каждого Массив1 Из МассивОбъектов Цикл
			УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер( 
			"Документ.ЗаказПокупателя", 
			"ПФ_MXL_Заказ", 
			Массив1, 
			);
		КонецЦикла;	
	КонецЕсли;	
		
КонецПроцедуры

&НаСервере
Функция ПолучитьДокументы(ВысотаТаблицы1)

	Массивобъектов = Новый Массив;
	
	Для Ном = 5 По ВысотаТаблицы1 Цикл
		ПолеКомпоновки = ОтчетТабличныйДокумент.Область("R"+СтрЗаменить(Ном," ","")+"C1");
		ОтчетДанныеРасшифровки1 = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки);
		Если ПолеКомпоновки.Расшифровка <> Неопределено И ТипЗнч(ОтчетДанныеРасшифровки1.Элементы[ПолеКомпоновки.Расшифровка].ПолучитьПоля()[0].Значение) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
			Док = ОтчетДанныеРасшифровки1.Элементы[ПолеКомпоновки.Расшифровка].ПолучитьПоля()[0].Значение;
			Если ЗначениеЗаполнено(Док) И Док.Проведен Тогда
				Массив1 = Новый Массив;
				Массив1.Добавить(Док);
				Массивобъектов.Добавить(Массив1);
			КонецЕсли;	
		КонецЕсли;
	КонецЦикла;
	
	Возврат Массивобъектов;

КонецФункции

3. Установить параметры в модуле отчета

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	
	Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура"));
	Если Параметр <> Неопределено Тогда
		Параметр.Значение = Справочники.Номенклатура.НайтиПоКоду("012354");
		Параметр.Использование = Истина;
	КонецЕсли;	
	
КонецПроцедуры

4. Заголовок в отчете СКД

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   ЗначениеЗаголовка = КомпоновщикНастроек.Настройки.ПараметрыВывода.
   НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок"));
      
   ДатаДок = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Получить(0).Значение.Дата;  
   ДатаДок = Формат(ДатаДок,  "ДФ=dd.MM.yyyy");
   
   ЗначениеЗаголовка.Значение="Остатки товаров на "+ДатаДок;
   ЗначениеЗаголовка.Использование = Истина;
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

СКД Таблица значений Заголовок Параметры

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    246218    1351    419    

1131

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5050    282    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15741    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9187    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8375    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15528    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13106    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9577    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 2134 22.12.18 12:31 Сейчас в теме
Странное какое-то решение - собирать массив массивов документов. Печать прекрасно справится с одномерным массивом всех документов

Если ЗначениеЗаполнено(Док) И Док.Проведен Тогда
	Массивобъектов.Добавить(Док);
КонецЕсли;


УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер( 
			"Документ.ЗаказПокупателя", 
			"ПФ_MXL_Заказ", 
			МассивОбъектов, 
			);
3. John_d 6090 24.12.18 12:41 Сейчас в теме
(1)Согласен. Это Особенности конфигурации.
У меня в конфигурации модуле менеджера документа идет обращение к массиву
Функция ПечатьЗаказа(МассивОбъектов, ОбъектыПечати) Экспорт	
	Ссылка = МассивОбъектов[0];
2. echo77 1937 24.12.18 08:31 Сейчас в теме
Еще одна хорошая публикация по СКД(не мое) https://infostart.ru/public/80164/
- функция представленная в публикации более универсальная
4. olga1512 7 24.12.18 20:36 Сейчас в теме
Спасибо автору! Хорошие рекомендации, недавно пользовалась 1 - с загрузкой таблицы значений, все работает, очень удобно!
Для отправки сообщения требуется регистрация/авторизация