Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Выбор варианта отчета СКД 1С на обычной форме

Недавно столкнулся с тем, что на форме отчета, построенного на 1С СКД, в режиме обычных форм 8 версии достаточно проблематично вывести варианты оформления отчета.

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

После недолгих поисков нашел очень интересное решение для вывода вариантов отчета в режиме обычного приложения на одном из форумов:

Получите 267 видеоуроков по 1С бесплатно:

Процедура _СменаВариантаНастройки (Элемент)

Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл

Если Элемент.Текст = Настройка.Представление тогда

КомпоновщикНастроек.ЗагрузитьНастройки(Настройка.Настройки);

Прервать;

КонецЕсли;

КонецЦикла;

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

Процедура УстановитьВариантыНастроек()

КП = ЭлементыФормы.ДействияФормы; НоваяКнопка = КП.Кнопки.Вставить(1,"_ВариантыОтчетов", ТипКнопкиКоманднойПанели.Подменю, "Варианты отчетов", ); НовоеДействие = Новый Действие("_СменаВариантаНастройки"); ч = 1;

Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл

НоваяКнопка = КП.Кнопки._ВариантыОтчетов.Кнопки.Добавить("Вариант"+Строка(ч), ТипКнопкиКоманднойПанели.Действие, Настройка.Представление, НовоеДействие); ч = ч + 1;

КонецЦикла;

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

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

УстановитьВариантыНастроек();

...

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 24 на “Выбор варианта отчета СКД 1С на обычной форме
  1. Спасибо!!!

    Ответить

  2. Спасибо. Действительно очень краткий и эффективный способ!

    Ответить

  3. Отличненько!
    Большой респект!!!

    Ответить

  4. Круто!!!! Огромное спасибо!!!

    Ответить

  5. Спасибо огромное!!!!
    Уже мозг сломал, в трех местах, как это сделать.

    Ответить

  6. Спасибо огромное !!!

    Ответить

  7. Работает не во всех случаях. У меня один из параметров запроса в СКД задан выражением. Например: Справочники.ВидыКонтактнойИнформации.НайтиПоКоду(«00001»). Так вот при смене варианта отчета, он не формируется, если вернуть все обратно, работает.

    Ответить

    • Ложная тревога. Неправильно был настроен сам вариант отчета. Запутало что в ошибке говорилось именно про параметр.

      Ответить

  8. Спасибо, полдня убил, на то, чтобы построить запрос к гуглу, помогающий решить задачу, но в итоге набрёл на это решение.

    Ответить

    • Полдня??? Я нагуглил по запросу «варианты отчетов». В середине первой страницы выдачи

      Ответить

  9. Ругается на Новый Действие…
    {Форма.ФормаОтчета.Форма(21,25)}: Конструктор не найден
    НовоеДействие = Новый <>Действие(“_СменаВариантаНастройки”); (Проверка: Толстый клиент (обычное приложение))

    Ответить

    • Кавычки поставь нормальные “_СменаВариантаНастройки”. «».

      Ответить

  10. Спасибо большое, столько времени сэкономил.

    Ответить

    • Спасибо) Заглядывайте!)

      Ответить

  11. Спасибо огромное

    Ответить

  12. Спасибо. Изящное решение.

    Ответить

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

    Соответствие = Новый Соответствие;

    Для каждого Макет Из ЭтотОбъект.Метаданные().Макеты Цикл
    Макеты = ПолучитьМакет(Макет.Имя);
    Для каждого Настройка Из Макеты.ВариантыНастроек Цикл
    Соответствие.Вставить(Настройка.Представление, Макет.Имя);
    КонецЦикла;
    КонецЦикла;

    ЗначениеСоответсия = Соответствие.Получить(Элемент.Текст);
    Если ЗначениеСоответсия Неопределено тогда

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

    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек[Элемент.Текст].Настройки);

    КонецЕсли;

    Ответить

    • Ох, спасибо!

      Отличный код! 🙂

      Ответить

  14. Спасибо!

    Ответить

  15. Супер!!!

    Ответить

  16. спасибо за красивое решение под ключ

    Ответить

  17. Благодарю!!!!

    Ответить

  18. Большое спасибо за элегантное и эффективное решение.

    Ответить

  19. Спасибо, красивое решение

    Ответить

Добавить комментарий: