Простой пример отчета на СКД. Программное формирование, расшифровка, работа с параметрами и отборами

15.10.20

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

Делал внешний отчет для Документооборота, очень долго собирал примеры, как сделать его максимально простым в разработке.

Скачать исходный код

Наименование Файл Версия Размер
Простой пример отчета на СКД. Программное формирование, Расшифровка, работа с параметрами и отборами.:
.erf 11,76Kb
15
.erf 11,76Kb 15 Скачать

Итак. Отчет формируется программно. Есть возможность изменить текст отчета, если отборами и параметрами решить задачу неудобно|невозможно.

Работает простейшая расшифровка (как стандартная). Установка параметров и отборов (простейший вариант). Открытие настроек без формы настроек.

Весь код на форме отчета.

На поиск информации ушло несколько часов. Тут все выкладываю в кучке.

Качать не обязательно, весь код формы выложен здесь.

&НаКлиенте
Процедура Сформировать(Команда)
	
	СформироватьНаСервере();
	
	Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
	Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
	
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()
	
	ОбъектОтчетНаСервере = РеквизитФормыВЗначение("Отчет");
	СхемаКомпоновки = ОбъектОтчетНаСервере.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	//При необходимости модифицировать текст запроса
	//Запрос = СхемаКомпоновки.НаборыДанных.НаборДанных1.Запрос;     
	//СхемаКомпоновки.НаборыДанных.НаборДанных1.Запрос = ОбработатьТекстЗапроса(Запрос);
	
	//Когда-то это была переменная модуля, но в связи с использованием УФ теперь это реквизит формы с типом "Произвольный"
	Настройки = СхемаКомпоновки.НастройкиПоУмолчанию;
	
	УстановитьНастройки();
	СформироватьОтчет(СхемаКомпоновки);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьНастройки() 
	
	//Установка параметров. Делаем их недоступными пользователю в на закладке Параметры СКД
	
	//Здесь используется параметр, а не отбор, т.к. отбор используется во временной таблице-фильтре и не выводится в результат, т.е. поля для 
	//отбора нет.
	ПараметрДанныхКонтрагент = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[0];
	ПараметрДанныхКонтрагент.Значение = Контрагент;
	ПараметрДанныхКонтрагент.Использование = Истина;
	
	//А здесь используется именно установка отбора, т.к. для даты нет конструкции типа "В иерархии", позволяющей игнорировать незаполненные значения.
	//Хотя можно было использовать что-то типа "Дата <= &НачДата или &НачДата = ДатаВремя(1,1,1)" и тогда работать с параметрами.
	//СброситьОтборПоПолюКомпоновки("Контрагент"); // Нужно когда меняется вид сравнения или поле отбора, чтобы не оставалось старых отборов
	УстановитьОтборПоПолюКомпоновки("Ссылка.Дата", Период.ДатаНачала, ВидСравненияКомпоновкиДанных.БольшеИлиРавно, ЗначениеЗаполнено(Период.ДатаНачала));
	УстановитьОтборПоПолюКомпоновки("Ссылка.Дата", КонецДня(Период.ДатаОкончания), ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, ЗначениеЗаполнено(Период.ДатаОкончания));
	
	Настройки = Отчет.КомпоновщикНастроек.Настройки;
КонецПроцедуры

&НаСервере
 Процедура СформироватьОтчет(СхемаКомпоновки) Экспорт
	 
	Перем ДанныеРасшифровкиВрем;  //Если не создать, то будет ошибка в КомпоновщикМакета.Выполнить()
	//Важно не использовать "ДанныеРасшифровки" при инициалиации Процессора компоновки, т.к. это реквизит формы
	//и он нужен для обработки расшифровки, но туда надо поместить адрес во врем. хранилище. (через 2 строки)
	//Иначе расшифровка будет выводить только индексы элементов расшифровки.
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Настройки, ДанныеРасшифровкиВрем); 
	
	ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиВрем, УникальныйИдентификатор);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровкиВрем);

	Результат.Очистить();
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	//ДокументРезультат.ПоказатьУровеньГруппировокСтрок(0); //0 - следующий за общим итогом
	 
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоПолюКомпоновки(Имя, Значение, ВидСравнения, Использование)
     Для Каждого ЭлементОтбора Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
          Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя) И ЭлементОтбора.ВидСравнения = ВидСравнения Тогда
                Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);
          КонецЕсли;
     КонецЦикла;
     ЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
     ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя); 
     ЭлементОтбора.ВидСравнения = ВидСравнения; 
     ЭлементОтбора.ПравоеЗначение = Значение; 
     ЭлементОтбора.Использование = Использование; 
 КонецПроцедуры
 
Процедура СброситьОтборПоПолюКомпоновки(Имя)
     Для Каждого ЭлементОтбора Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
          Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя) Тогда
                Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);
          КонецЕсли;
     КонецЦикла;
 КонецПроцедуры
 
Функция ОбработатьТекстЗапроса(Запрос)
	//Здесь можно программно обработать текст запроса
	//например в зависимости от реквизитов формы.
КонецФункции

Раньше в одном из примеров использовалась переменная модуля "Настройки". Сделал реквизит произвольного типа, т.к. теперь на переменные модуля рассчитывать ...

1С:Предприятие 8.3 (8.3.16.1148).

Отчет СКД пример обучение расшифровка

См. также

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

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    126425    683    389    

737

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4441    32    obmailok    19    

70

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2176    2    Yashazz    0    

31

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8439    20    John_d    25    

124

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    5001    PROSTO-1C    13    

64

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    6069    15    kalyaka    5    

88

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    7550    accounting_cons    7    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    4813    KVIKS    15    

80
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 93 19.10.20 18:58 Сейчас в теме
2. Stivens 35 19.10.20 23:37 Сейчас в теме
(1)Ага, он и есть :) Но, например, ответ на вопрос, как прикрутить расшифровку при программном формировании искал около 1.5 часа. Не, варианов много было, но! Искал без программной обработки расшифровки. Простейший, без кучи кода.
И т.д. именно простейший вариант, но рабочий и удобный
klaus38; triviumfan; +2 Ответить
3. triviumfan 93 19.10.20 23:39 Сейчас в теме
4. Stivens 35 19.10.20 23:40 Сейчас в теме
(3)Много фонового шума. Т.е. ответ простой, но в куче информации нифига не находится...
Флудим однако :)
И вот прямо рабочего варианта для формы так и не нашел. Сам допер...
5. ixijixi 1800 04.11.20 11:46 Сейчас в теме
(4) Так и не надо его в форме формировать, это моветон. Все формирование должно проходить в модуле ПриКомпоновкеРезультата
6. Stivens 35 05.11.20 19:57 Сейчас в теме
(5)Заполнение параметров точно на форме. Или есть другой способ?
Можно ссылочку на простейший отчет "правильно" сделанный.
Чтобы для данной функциональности не возникало километров кода?

А про моветон, тут да, но это только "некрасиво", а не "не функционально". Т.к. все основные процедуры все равно выполняются на сервере.
7. ixijixi 1800 05.11.20 23:15 Сейчас в теме
(6) Даже не знаю что сказать)) Для отчета, который приведен в публикации, по-хорошему делать не надо вообще ничего! Только схему компоновки создать. Форму не надо создавать, подойдет форма по умолчанию, отборы и параметры платформа сама на форме нарисует.
8. ixijixi 1800 06.11.20 15:40 Сейчас в теме
(6) Потратил 5 минут, вот отчет без единой строчки кода. Форма есть, но это то что нарисовала платформа, я ни грамма не добавил. Отчет для ЗУП 3.1
Прикрепленные файлы:
ВнешнийОтчет1.erf
9. Stivens 35 08.11.20 01:53 Сейчас в теме
(8)Это зря. Часто параметры надо устанавливать программно. ВСЁ, Без программного формирования - приплыли...
Еще иногда условия задачи такие, что надо на лету менять текст запроса - Тут решение есть.
Программные отборы, а они совсем не всегда могут быть выведены (по крайней мере по-человечески) автоматом.

А потом начинается борьба с расшифровкой...

А простейшие отчеты я и сам делал раньше, только в реале они нежизнеспособны.
10. ixijixi 1800 09.11.20 11:18 Сейчас в теме
(9) Шутите, поди. На моей практике процентов 10, ну 20 от силы, требуют полностью программного формирования. В 80-90% случаев этого не требуется.

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



(9)
борьба с расшифровкой
Не знаю, никогда не боролся. Расшифровка заполняется автоматом.
Andreeei; +1 Ответить
11. polyakovyan 15.05.23 15:05 Сейчас в теме
Народ, может кто подскажет как сделать расшифровку отчета выведенного в ТабличныйДокумент обработки? Интересует именно расшифровка ресурса по регистраторам как детальных так и групповых записей. Готов рассмотреть платную помощь, лишь бы понять как это делается, а то на просторах интернета, что я находил, все показывают пример только для ПоказатьЗначение() на ссылочных данных.
Оставьте свое сообщение