Как добавить документ в меню "Создать на основании" на управляемой форме 1С?

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

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

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

Почему стандартная кнопка может не появиться?

Прежде чем писать код, проверим стандартные настройки платформы. Платформа 1С может сама генерировать команды ввода на основании, если выполнен ряд условий:

  1. В свойствах конфигуратора для документа-цели на вкладке Вводится на основании указан ваш исходный документ.
  2. На вкладке Команды у вводимого документа установлена галочка Использовать стандартные команды.
  3. Если исходная форма управляемая, то и у вводимого документа обязательно должна быть управляемая форма (объекта, списка, выбора), назначенная основной. Платформа не сможет вывести стандартную команду для открытия обычной формы в управляемом интерфейсе.
  4. Команда не скрыта в Командном интерфейсе формы или отключена Функциональными опциями.

Если все галочки стоят, но нужный пункт не появляется, перейдем к программным и ручным методам добавления команд.

Способ 1: Локальная команда на управляемой форме

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

  1. Откроем управляемую форму документа-основания в конфигураторе.
  2. Перейдем на вкладку Команды -> Команды формы и добавим новую команду (например, СоздатьКорректировку).
  3. Перетащим созданную команду в дерево элементов формы, поместив ее в командную панель в группу Создать на основании.
  4. Создадим обработчик действия команды на клиенте.

Важное архитектурное замечание! В обсуждении на форуме был предложен следующий вариант кода, который является ошибочным для парадигмы управляемого приложения:


// ОШИБОЧНЫЙ КОД (Не использовать в тонком клиенте!)
&НаКлиенте
Процедура ВвестиНаОснованииКорректировку(Команда)
    ДокКорр = Документы.КорректировкаРеализации.СоздатьДокумент(); // Ошибка!
    ДокКорр.Заполнить(Объект.Ссылка);
    ФормаКорр = ДокКорр.ПолучитьФорму();
    ФормаКорр.Открыть();
КонецПроцедуры

В строгом «Тонком клиенте» методы работы с объектными данными, такие как СоздатьДокумент или ПолучитьФорму, недоступны. Такой код вызовет ошибку. Правильный способ программного создания документа на основании в управляемых формах — использование глобального метода ОткрытьФорму с передачей стандартного системного параметра Основание.

Рассмотрим, как должен выглядеть правильный код:


&НаКлиенте
Процедура ВвестиНаОснованииКорректировку(Команда)
    ПараметрыОткрытия = Новый Структура("Основание", Объект.Ссылка);
    ОткрытьФорму("Документ.КорректировкаРеализации.ФормаОбъекта", ПараметрыОткрытия);
КонецПроцедуры

В этом случае платформа сама создаст объект в памяти сервера, вызовет обработчик ОбработкаЗаполнения в модуле объекта и корректно откроет форму нового документа пользователю. Документ не будет записан в базу до того момента, пока пользователь сам не нажмет кнопку проведения.

Способ 2: Глобальная команда документа (Рекомендуемый для нескольких форм)

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

Выполним следующие шаги:

  1. Найдем целевой документ (который будет создаваться) в дереве метаданных.
  2. Раскроем его ветку и добавим новую команду в разделе Команды. Назовем ее, например, СоздатьНаОсновании.
  3. В свойствах команды установим свойство Группа в значение Командная панель формы.Создать на основании.
  4. В свойстве Тип параметра команды обязательно укажем тип ссылки документа-основания (или составной тип, если оснований несколько).
  5. В модуле команды пропишем вызов открытия формы:

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

После создания такой команды она автоматически появится во всех формах и списках документов-оснований. Не забудьте также назначить права на эту команду нужным ролям!

Устранение проблем: видимость и дублирование

Даже если вы всё настроили верно, могут возникнуть интерфейсные нюансы. Проанализируем самые частые из них:

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

2. Дублирование кнопки «Создать на основании».
Когда вы добавляете свою общую команду, в интерфейсе формы может появиться дубль: два выпадающих меню «Создать на основании». Одно из них сгенерировано платформой по умолчанию, второе — содержит вашу ручную команду. В старых конфигурациях без БСП придется вручную снять галочку «Автозаполнение» у стандартной группы или управлять видимостью стандартных платформенных команд в командном интерфейсе формы, чтобы оставить только одно, объединенное меню.

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

← На главную