Выбор варианта отчета СКД 1С на обычной форме
Недавно столкнулся с тем, что на форме отчета, построенного на 1С СКД, в режиме обычных форм 8 версии достаточно проблематично вывести варианты оформления отчета.
После недолгих поисков нашел очень интересное решение для вывода вариантов отчета в режиме обычного приложения на одном из форумов:
Процедура _СменаВариантаНастройки (Элемент) Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл Если Элемент.Текст = Настройка.Представление тогда КомпоновщикНастроек.ЗагрузитьНастройки(Настройка.Настройки); Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура УстановитьВариантыНастроек() КП = ЭлементыФормы.ДействияФормы; НоваяКнопка = КП.Кнопки.Вставить(1,"_ВариантыОтчетов", ТипКнопкиКоманднойПанели.Подменю, "Варианты отчетов", ); НовоеДействие = Новый Действие("_СменаВариантаНастройки"); ч = 1; Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл НоваяКнопка = КП.Кнопки._ВариантыОтчетов.Кнопки.Добавить("Вариант"+Строка(ч), ТипКнопкиКоманднойПанели.Действие, Настройка.Представление, НовоеДействие); ч = ч + 1; КонецЦикла; КонецПроцедуры Процедура ПриОткрытии() УстановитьВариантыНастроек(); ...
Процедура сама создает подменю в панели действия обычной формы отчета и добавляет туда список доступных вариантов оформления СКД 1С. Что получится, Вы можете увидеть на скриншоте сверху.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Сергей:
Спасибо!!!
Сергей:
Спасибо. Действительно очень краткий и эффективный способ!
Алексей:
Отличненько!
Большой респект!!!
Наталья:
Круто!!!! Огромное спасибо!!!
Алексей:
Спасибо огромное!!!!
Уже мозг сломал, в трех местах, как это сделать.
Сергей:
Спасибо огромное !!!
Сергей:
Работает не во всех случаях. У меня один из параметров запроса в СКД задан выражением. Например: Справочники.ВидыКонтактнойИнформации.НайтиПоКоду(«00001»). Так вот при смене варианта отчета, он не формируется, если вернуть все обратно, работает.
Сергей:
Ложная тревога. Неправильно был настроен сам вариант отчета. Запутало что в ошибке говорилось именно про параметр.
Кирилл:
Как в Варианте отчета задать параметры из данных базы (например список счетов, и др. и пр.)?
Роман:
Спасибо, полдня убил, на то, чтобы построить запрос к гуглу, помогающий решить задачу, но в итоге набрёл на это решение.
Иннокентий:
Полдня??? Я нагуглил по запросу «варианты отчетов». В середине первой страницы выдачи
Алексашка:
первый же результат гугла по запросу : «1с скд обычные формы вариант отчета»
Serge:
Ругается на Новый Действие…
{Форма.ФормаОтчета.Форма(21,25)}: Конструктор не найден
НовоеДействие = Новый <>Действие(“_СменаВариантаНастройки”); (Проверка: Толстый клиент (обычное приложение))
Валерий:
Кавычки поставь нормальные “_СменаВариантаНастройки”. «».
Станислав:
Спасибо большое, столько времени сэкономил.
Программист 1С:
Спасибо) Заглядывайте!)
Александр:
Спасибо огромное
Дмитрий:
Спасибо. Изящное решение.
Дмитрий:
На случай, когда используется несколько макетов СКД… обычные формы это кошмар)
Соответствие = Новый Соответствие;
Для каждого Макет Из ЭтотОбъект.Метаданные().Макеты Цикл
Макеты = ПолучитьМакет(Макет.Имя);
Для каждого Настройка Из Макеты.ВариантыНастроек Цикл
Соответствие.Вставить(Настройка.Представление, Макет.Имя);
КонецЦикла;
КонецЦикла;
ЗначениеСоответсия = Соответствие.Получить(Элемент.Текст);
Если ЗначениеСоответсия Неопределено тогда
СхемаКомпоновкиДанных = ПолучитьМакет(ЗначениеСоответсия);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек[Элемент.Текст].Настройки);
КонецЕсли;
Кирилл:
Ох, спасибо!
Отличный код! 🙂
Константин:
Спасибо!
Дмитрий:
Супер!!!
Станислав:
спасибо за красивое решение под ключ
Евгения:
Благодарю!!!!
Иван:
Большое спасибо за элегантное и эффективное решение.
Елена:
Спасибо, красивое решение
Ольга:
Большое спасибо!
Алексей:
А есть какая то возможность сохранять пользовательские варианты, для всех пользователей, как в управляемых с использованием БСО?
Аноним:
Да, было бы неплохо
ольга:
Гениально! Спасибо!!!1
Аноним:
Спасибо!
Аноним:
ЗАЧЕТ!!! Очень простое и эффективное решение!!!
Hrenatos:
Спасибо тебе, добрый человек!
nks16:
Спасибо, что поделились.
Аноним:
Долбаная 1С не отрабатывала этот код пока не пересоздал процедуру ПриОткрытии(). Иначе она ее не видела
Аноним:
В событиях формы не проставил значит.
Ярослав:
Спасибо, работает
Дмитрий:
Спасибо! работает Ctrl+C, Ctrl+V
Сергей:
Класс, все работает!!!
Андрей:
Благодарю!!!
С Наступающим Вас Новым годом!!!!
Фирузака Агро Браво:
Полдня возился с этой проблемой. Спасибо тебе, дай бог тебе здоровья и ещё много знаний!!!