Как создать кнопки варианта отчета СКД для обычных форм

14.03.14

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

Добавляем кнопки вариантов отчёта в самодельном отчёте на СКД (обычные формы) на базе типового шаблона отчёта СКД с ИТС.

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

Наименование Файл Версия Размер
ШаблонВариантыОтчетаСКД.erf
.erf 32,79Kb
40
.erf 32,79Kb 40 Скачать

Я сделал свой отчёт на СКД с использованием обычной (т.е. не управляемой) формы. В качестве заготовки взял типовой шаблон отчёта на СКД с ИТС http://its.1c.ru/db/metod81#content:3048:1 .

В самом конце возникла неожиданная проблема - как организовать переключение вариантов отчета на форме?

На форме этого шаблона уже была изначально предусмотрена панель выбора вариантов отчёта - "ПанельВыбораВариантов" - в самом верху формы, и в левом углу её уже имелась надпись "Варианты отчёта".

Как добавить все варианты отчёта в виде кнопок этой панели?

В Интернете я нашёл лишь решение в виде добавления новой кнопки "Выбор варианта отчёта" на форму - но так не интересно, зачем изобретать велосипед, когда уже есть штатная панель кнопок варианта отчёта?

Я исследовал вопрос. Оказалось, что кнопки на эту панель добавляются, если пользователь сохранит текущую настройку путём нажатия кнопки "Сохранить вариант" (с дискетой, в правом нижнем углу отображённой панели настроек). Оказалось также, что сохраняются не просто варианты отчёта - но одновременно и пользовательские настройки, и сохраняется всё это в справочнике "Сохраненные настройки" и в хранилище значения, причём настройки эти привязаны индивидуально к пользователю.

Я написал две процедуры, программно имитирующие нажатие кнопки с дискетой. Только вместо текущего варианта отчёта они сохраняют все имеющиеся варианты отчёта. Процедуры вызываются при открытии отчёта. При этом эти кнопки (при необходимости) создаются.

Вот программный код этих процедур:

Процедура СохранитьВариантНастроекПользователя(СохраненнаяНастройка, НастраиваемыйОбъект, ВариантНастроек)

Наименование = ВариантНастроек.Имя;

ТипНастройки = Перечисления.ТипыНастроек.НастройкиОтчета;

Пользователь = глЗначениеПеременной("глТекущийПользователь");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СохраненныеНастройкиПользователи.Ссылка
|ИЗ
| Справочник.СохраненныеНастройки.Пользователи КАК СохраненныеНастройкиПользователи
|ГДЕ
| СохраненныеНастройкиПользователи.Ссылка.Наименование = &Наименование
| И СохраненныеНастройкиПользователи.Ссылка.ТипНастройки = &ТипНастройки
| И СохраненныеНастройкиПользователи.Ссылка.НастраиваемыйОбъект = &НастраиваемыйОбъект
| И СохраненныеНастройкиПользователи.Пользователь = &Пользователь";

Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.УстановитьПараметр("НастраиваемыйОбъект", НастраиваемыйОбъект);
Запрос.УстановитьПараметр("Пользователь", Пользователь);
Запрос.УстановитьПараметр("ТипНастройки", ТипНастройки);

Результат = Запрос.Выполнить();

Если НЕ Результат.Пустой() Тогда

//Сообщить("Такой элемент уже есть в справочнике.");

Возврат;

КонецЕсли;

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

СтруктураНастроек = ТиповыеОтчеты.ПолучитьСтруктуруПараметровТиповогоОтчета(ЭтотОбъект);

СтруктураНастроек.НастройкиКомпоновщика = ВариантНастроек.Настройки;

СохранениеНастроек.СохранитьНастройкуОбъекта(СохраненнаяНастройка, СтруктураНастроек);

Модифицированность = Ложь;
Если Не ТиповыеОтчеты.ЭтоСтараяВерсияОтчета(ЭтотОбъект) Тогда
РежимРедактированияНастройки = Ложь;
ЭтоОтработкаРасшифровки = Ложь;
КонецЕсли;

КонецПроцедуры


Процедура СоздатьКнопкиПанелиВариантовОтчета(ОтчетОбъект, ФормаОтчета) Экспорт

Макет = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

Для каждого ВариантНастроек Из Макет.ВариантыНастроек Цикл

СохранитьВариантНастроекПользователя(ОтчетОбъект.СохраненнаяНастройка, ТиповыеОтчеты.ПолучитьИдентификаторОбъекта(ОтчетОбъект), ВариантНастроек);

КонецЦикла;

КонецПроцедуры

......

Процедура ПриОткрытии()

//Начало изменения
СоздатьКнопкиПанелиВариантовОтчета(ЭтотОбъект, ЭтаФорма);
//Конец изменения

...........

КонецПроцедуры

Такой вариант создания этих кнопок я считаю наиболее безопасным - потому что этот код в максимальной степени имитирует имеющийся функционал (функционал кнопки с дискетой). Всё это работает под любым пользователем.

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

Варианты отчета СКД

См. также

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

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

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

12000 руб.

02.09.2020    101505    561    385    

608

1C:Предприятие для программистов: Запросы и отчеты. Онлайн-интенсив с 27 ноября по 27 декабря 2023г.

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

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения. Курс является вторым курсом траектории развития 1С-Разработчика, с углубленным изучением тем "Язык запросов" и "Отчеты", которые были рассмотрены в рамках “Базового курса для начинающих 1С-программистов”.

7500 руб.

04.10.2023    2549    48    0    

47

Модель СКД

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

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

1 стартмани

15.11.2023    3963    10    kalyaka    4    

81

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

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

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

01.09.2023    3179    KVIKS    15    

76

Гибкие отборы через СКД на управляемых формах. Демо-обработка

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

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

2 стартмани

07.06.2023    4587    26    quazare    7    

46

Вывод элементов иерархии верхнего уровня на СКД

СКД Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    4216    echo77    6    

72

Обработка результатов запроса произвольными вычисляемыми полями. Обзор некоторых новых функций СКД

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

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

07.02.2023    5502    quazare    7    

38
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DAnry 8 19.03.14 15:08 Сейчас в теме
Проблема актуальна. Спасибо за статью, очень полезна (что бы не выдумывать велосипед).
2. chmv 19.01.16 12:11 Сейчас в теме
а нельзя ли сделать тоже самое для управляемых форм?
НЕ хотят выбрать вариант, а только помощью панелей
3. alon 171 16.03.17 00:04 Сейчас в теме
Спасибо, пригодилось. Как бы еще сделать возможность восстановления настроек из встроенного варианта по требованию? Актуально после доработки отчета.
4. for-elenak 11 13.11.18 11:34 Сейчас в теме
Спасибо! пригодилось
Оставьте свое сообщение