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

15.10.20

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

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

Файлы

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

Наименование Скачано Купить файл
Простой пример отчета на СКД. Программное формирование, Расшифровка, работа с параметрами и отборами.:
.erf 11,76Kb
19 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

16500 руб.

02.09.2020    245918    1350    419    

1128

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

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

29.01.2026    4980    281    shapa_pro    25    

66

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

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

29.10.2025    15610    ovetgana    112    

105

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

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

01.07.2025    9132    krasnoshchekovpavel    5    

66

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

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

10.04.2025    8319    Neti    0    

41

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

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

27.02.2025    15501    ovetgana    50    

93

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

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

24.12.2024    13072    Akcium    17    

46

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

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

20.08.2024    9536    AlexeyPROSTO_1C    1    

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

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

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

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

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



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