Почему не появляется кнопка «Создать на основании» для объектов в расширении 1С и как это исправить?

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

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

Проанализируем стандартные настройки метаданных

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

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

Разберем настройку командного интерфейса формы

Часто проблема кроется в том, что платформа при добавлении новых объектов в расширение не включает видимость команд автоматически. Давайте выполним следующие шаги:

Откроем форму документа-источника в расширении. Перейдем на вкладку «Командный интерфейс». Проанализируем раздел «Панель навигации — Перейти» или «Командная панель — Создать на основании». В расширениях часто флаги видимости для новых команд по умолчанию сняты. Необходимо вручную установить галочку видимости для команды создания вашего справочника. Аналогичную проверку следует провести и для формы списка документа.

Проблема прав доступа в расширении

Это одна из самых частых причин, которую пропускают разработчики. Объекты, созданные в расширении, «невидимы» для ролей основной конфигурации. Даже если вы запускаете базу под пользователем с полными правами, эти права распространяются только на объекты основной конфигурации.

Решение проблемы через роли:

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

Программная реализация через глобальную команду

Если стандартный механизм все равно не срабатывает (что признается многими разработчиками как баг платформы в некоторых релизах, особенно в режиме совместимости 8.3.12 и ниже), мы можем реализовать ввод на основании вручную. Это самый надежный способ, который дает полный контроль над процессом.

Создадим в расширении Общую команду или Команду объекта (у справочника-приемника). Настроим свойства команды:

Теперь напишем код в модуле команды. Разберем пример реализации:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // ПараметрКоманды — это ссылка на наш документ-основание
    // Подготовим структуру параметров для открытия формы нового справочника
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Основание", ПараметрКоманды);
    
    // Открываем форму нового объекта, передавая основание
    ОткрытьФорму("Справочник.ВашНовыйСправочник.ФормаОбъекта", 
                 ПараметрыФормы, 
                 ПараметрыВыполненияКоманды.Источник, 
                 ПараметрыВыполненияКоманды.Уникальность, 
                 ПараметрыВыполненияКоманды.Окно, 
                 ПараметрыВыполненияКоманды.НавигационнаяСсылка);
                 
КонецПроцедуры

После этого в модуле объекта справочника-приемника необходимо убедиться, что процедура ОбработкаЗаполнения готова принять эти данные:


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

Нюансы режима совместимости и Планов видов характеристик

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

Если вы видите ошибку «Использование планов видов характеристик в расширениях недопустимо», а режим совместимости ниже требуемого, у вас есть два пути:

  1. Повысить режим совместимости всей конфигурации (если это возможно).
  2. Отказаться от создания ПВХ внутри расширения и использовать заимствованные объекты, расширяя их состав, а не структуру.

Итоги и рекомендации

Мы проанализировали ситуацию и выяснили, что отсутствие кнопки может быть вызвано как настройками интерфейса и прав, так и особенностями самой платформы. Наиболее стабильным решением для расширений на текущий момент остается создание параметризуемой команды. Она гарантированно отобразится в подменю «Создать на основании» и позволит программно передать любые нужные параметры в новый объект, минуя возможные баги автоматических механизмов 1С.

← На главную