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

15.10.20

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Простой пример отчета на СКД. Программное формирование, Расшифровка, работа с параметрами и отборами.:
.erf 11,76Kb
15
15 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    160417    887    399    

866

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8877    implecs_team    6    

47

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

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

3 стартмани

05.02.2024    7123    56    obmailok    21    

79

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

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

1 стартмани

31.01.2024    3173    5    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    10890    24    John_d    25    

124

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

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

05.12.2023    8134    PROSTO-1C    15    

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

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

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

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

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



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