Как вернуть стандартную команду «Вывести список» для новых объектов в расширении 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке расширений для 1С:Предприятие многие программисты сталкиваются с неприятной особенностью: созданные в расширении справочники или документы не содержат стандартную команду «Вывести список...» в режиме «1С:Предприятие», хотя в конфигураторе она отображается в составе командной панели. Проанализируем причины этой проблемы и разберем несколько способов её решения — от простых настроек метаданных до написания программного кода.

Способ 1. Проверка прав доступа и роли «Вывод»

Выясним основную причину: платформа 1С накладывает жесткие ограничения на вывод данных, если в расширении используются собственные роли. Рассмотрим логику работы прав:

  1. Если в расширении нет ни одной роли, объекты расширения доступны пользователям с полными правами основной конфигурации.
  2. Если вы добавили хотя бы одну роль в расширение, платформа начинает требовать явного указания прав для новых объектов именно в этой роли.

Проанализируем право «Вывод» (Output). Оно находится в самом корне дерева метаданных расширения. Если у пользователя (даже с правами Администратора) нет роли из расширения, в которой разрешен «Вывод», стандартная команда будет скрыта платформой. Посмотрим, как это исправить:

  1. Перейдем в дерево метаданных расширения.
  2. Добавим новую роль (например, ПраваНаОбъектыРасширения).
  3. В свойствах этой роли на уровне корня установим галочку «Вывод».
  4. Назначим эту роль пользователю в режиме «1С:Предприятие» (через справочник пользователей или профили групп доступа).
  5. Обязательно перезапустим сеанс.

Способ 2. Изменение свойств стандартной команды на форме

Иногда команда присутствует в меню «Еще», но мы хотим видеть её непосредственно на командной панели или заставить платформу «пересчитать» видимость кнопок. Разберем действия в конфигураторе:

  1. Откроем форму списка нашего объекта в расширении.
  2. Найдем элемент КоманднаяПанель или Список.
  3. В составе команд найдем стандартную команду ВывестиСписок.
  4. Установим свойство «Только во всех действиях» в значение «Нет».
  5. В некоторых случаях помогает принудительное перетаскивание кнопки из раздела стандартных команд в дерево элементов формы.

Способ 3. Смена типа расширения (Адаптация vs Дополнение)

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

  1. В меню «Конфигурация» выберем «Расширения конфигурации».
  2. Изменим тип назначения нашего расширения с «Адаптация» на «Дополнение».
  3. Сохраним изменения и запустим базу.
  4. Если команда появилась, можно попробовать вернуть тип «Адаптация» — в ряде версий платформы это «сбрасывает» ошибочный кэш прав.

Способ 4. Программная реализация вывода списка

Если стандартные механизмы не помогают (например, из-за багов платформы версий 8.3.12 или 8.3.13), мы можем реализовать вывод списка самостоятельно, используя Систему Компоновки Данных (СКД). Это более гибкий метод, так как он позволяет учитывать текущие отборы, оформление и группировки динамического списка. Посмотрим на пример кода:


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

&НаКлиенте
Процедура КомандаВывестиРеестр(Команда)
    ТабличныйДок = СформироватьРеестрНаСервере();
    ТабличныйДок.Показать("Реестр данных");
КонецПроцедуры

Этот метод даже превосходит стандартный «Вывести список», так как полностью сохраняет визуальное состояние списка, настроенное пользователем.

Способ 5. Обновление платформы и режим совместимости

Проанализируем техническую сторону вопроса: проблема часто является «глюком» конкретных релизов платформы (особенно 8.3.13.1513). Выясним, что изменилось в новых версиях:

  1. Начиная с версии 8.3.14, в расширениях появилось свойство «Основные роли». Если установить флаг «Использовать основные роли основной конфигурации», проблема с отсутствием прав «Вывод» исчезает сама собой.
  2. Если ваша конфигурация использует режим совместимости ниже 8.3.14, проверьте настройки безопасности расширения. Рекомендуется временно отключить «Безопасный режим» и «Защиту от опасных действий» для проверки: если кнопка появилась, значит, дело в ограничениях прав БСП.

Подведем итог: в большинстве случаев отсутствие команды ВывестиСписок в расширении связано с тем, что платформа не видит права Вывод в контексте расширения. Создание роли в расширении с включенным правом «Вывод» и назначение её пользователю — это наиболее правильное решение с точки зрения архитектуры 1С. Для анализа взаимосвязей ролей, профилей и групп пользователей при назначении прав можно использовать инструмент для анализа и проверки прав доступа.

← На главную