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

Публикация № 1310509

Разработка - Практика программирования

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скачать файлы

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

.erf 11,76Kb
15.10.20
1
.erf 11,76Kb 1 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 24 19.10.20 18:58 Сейчас в теме
2. Stivens 18 19.10.20 23:37 Сейчас в теме
(1)Ага, он и есть :) Но, например, ответ на вопрос, как прикрутить расшифровку при программном формировании искал около 1.5 часа. Не, варианов много было, но! Искал без программной обработки расшифровки. Простейший, без кучи кода.
И т.д. именно простейший вариант, но рабочий и удобный
triviumfan; +1 Ответить
3. triviumfan 24 19.10.20 23:39 Сейчас в теме
4. Stivens 18 19.10.20 23:40 Сейчас в теме
(3)Много фонового шума. Т.е. ответ простой, но в куче информации нифига не находится...
Флудим однако :)
И вот прямо рабочего варианта для формы так и не нашел. Сам допер...
Оставьте свое сообщение

См. также

daСклонение: склонение ФИО, должностей, чисел, прилагательных, существительных на языке 1С + ТестЦентр Промо

Универсальные функции v8 1cv8.cf Абонемент ($m)

Функция предназначена для склонения выражений, которые часто требуется при формировании печатных форм договоров и прочих печатных форм. Функция склоняет по падежам ФИО, должности, числительные, валюты, единицы измерения, предметы. Также функция склоняет глаголы и прилагательные по числам и родам и существительные по числам. Имеется режим определения рода переданного выражения. Поддержка форматной строки для вывода результата. Функция не использует внешние библиотеки и веб-сервисы, написана на чистом языке 1С, и поэтому легко встраивается в любую конфигурацию или внешнюю обработку. Правила склонения оформлены в виде таблицы и могут быть легко изменены при необходимости.

1 стартмани

14.02.2015    104409    98    daMaster    90    

Сравнение реального дохода со средним доходом из API.HH.RU

Зарплата Управленческие v8 v8::СПР ЗУП3.x УУ Абонемент ($m)

Внешняя обработка на управляемой форме для 1С:Предприятие 8.3 по интеграции с HH.RU используя HH REST API. Ключевые функции: получение списка вакансий по должностям (Ключ для работы не нужен); расчет среднего дохода; Тестирование проводилось на платформе 1С:Предприятие 8.3 (8.3.13.1513) Зарплата и управление персоналом, редакция 3.1 (3.1.11.68) совместно с API.HH.RU.

1 стартмани

11.11.2019    4381    6    solaru    2    

Конфигурация для рекламного агентства

Управление услугами и сервисом Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) Управление взаимоотношениями с клиентами (СRM) Производство готовой продукции (работ, услуг) v8 Реклама, PR и маркетинг УУ Абонемент ($m)

Данная конфигурация выполнена для решения тестового задания: Цель задания: 1) Понять, на каком из клиентов сколько мы заработали;  2) Понять, по какому виду СМИ сколько мы заработали;  3) Проследить по каждой услуге: у кого за сколько купили и кому за сколько продали, с возможностью перейти в соответствующий документ. Реализовано с помощью: 1. Справочники - контрагенты, номенклатура 2. Документы - Поступление услуг, реализация услуг 3. Отчеты - отчет по контрагентам, номенклатуре и движений.

1 стартмани

21.05.2019    5318    0    solaru    0    

Загрузка номенклатуры в УТ 10.3 из Excel файла с генерацией штрихкодов

Загрузка и выгрузка в Excel Обработка справочников Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 УТ10 Россия Абонемент ($m)

Обработка позволяет генерировать новые номенклатурные позиции на основе данных из файла Excel с последующей генерацией штрихкодов (ШК). Может быть полезна при больших поступлениях товаров на склад, где ручное создание и присваивание штрихкода  (ШК) может занимать много времени.

1 стартмани

24.03.2017    8233    7    solaru    0    

Под капотом управляемых форм

Практика программирования v8 1cv8.cf Бесплатно (free)

Управляемые формы уже давно и плотно вошли в жизнь 1С-разработчика. Однако, судя по недавним публикациям на Инфостарте, многие до сих пор мало знакомы с ними. Предлагаю разобраться с тем, что же это такое.

26.08.2013    269621    Evil Beaver    271    

[NotaBene] Универсальный отчет по таблице значений

Практика программирования v7.7 1cv7.md Россия Абонемент ($m)

1C v.7.7 Готовое решение. Не требует настройки. Не требует допрограммирования. Данная обработка решает часто встречающуюся задачу вывода в "красивом" виде таблицы значений (полученной, например, из запроса). Поддерживается произвольное группирование данных, отключение/включение группировок, в т.ч и создание "шахматок" (типа "продажи понедельно"). Обработка может использоваться как и в отладочных целях (для нормального просмотра ТЗ), так и в составе вполне рабочих отчетов. По крайней мере, я неоднократно клиентам данную обработку ставил вместо того, чтобы каждый раз писать замороченные выводы данных. И клиенты довольны, и мне - проще...

2 стартмани

07.05.2007    29503    3    CheBurator    63