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

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

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

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

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

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

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

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

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

Прервать;

КонецЕсли;

КонецЦикла;

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

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

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

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

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

КонецЦикла;

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

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

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

...

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

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

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

    Ответить

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

    Ответить

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

    Ответить

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

    Ответить

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

    Ответить

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

    Ответить

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

    Ответить

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

      Ответить

      • Как в Варианте отчета задать параметры из данных базы (например список счетов, и др. и пр.)?

        Ответить

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

    Ответить

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

      Ответить

      • первый же результат гугла по запросу : «1с скд обычные формы вариант отчета»

        Ответить

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

    Ответить

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

      Ответить

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

    Ответить

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

      Ответить

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

    Ответить

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

    Ответить

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

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

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

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

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

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

    КонецЕсли;

    Ответить

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

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

      Ответить

  14. Спасибо!

    Ответить

  15. Супер!!!

    Ответить

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

    Ответить

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

    Ответить

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

    Ответить

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

    Ответить

  20. Большое спасибо!

    Ответить

  21. А есть какая то возможность сохранять пользовательские варианты, для всех пользователей, как в управляемых с использованием БСО?

    Ответить

  22. Гениально! Спасибо!!!1

    Ответить

  23. Спасибо!

    Ответить

  24. ЗАЧЕТ!!! Очень простое и эффективное решение!!!

    Ответить

  25. Спасибо тебе, добрый человек!

    Ответить

  26. Спасибо, что поделились.

    Ответить

  27. Долбаная 1С не отрабатывала этот код пока не пересоздал процедуру ПриОткрытии(). Иначе она ее не видела

    Ответить

    • В событиях формы не проставил значит.

      Ответить

  28. Спасибо, работает

    Ответить

  29. Спасибо! работает Ctrl+C, Ctrl+V

    Ответить

  30. Класс, все работает!!!

    Ответить

  31. Благодарю!!!
    С Наступающим Вас Новым годом!!!!

    Ответить

  32. Полдня возился с этой проблемой. Спасибо тебе, дай бог тебе здоровья и ещё много знаний!!!

    Ответить

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

Ваш адрес email не будет опубликован.