Рассмотрим распространенную ситуацию, с которой сталкиваются программисты 1С при переходе на управляемые формы или при внедрении отдельных управляемых форм в старые конфигурации, такие как 1С:УПП. Проблема заключается в следующем: необходимо добавить документ в выпадающее меню кнопки «Создать на основании», при этом механизмы Библиотеки стандартных подсистем (БСП) в конфигурации отсутствуют или не применимы.
Разберем по шагам, почему платформа может автоматически не выводить нужный документ в интерфейс, и проанализируем несколько рабочих способов добавления команды ввода на основании.
Прежде чем писать код, проверим стандартные настройки платформы. Платформа 1С может сама генерировать команды ввода на основании, если выполнен ряд условий:
Если все галочки стоят, но нужный пункт не появляется, перейдем к программным и ручным методам добавления команд.
Если нам нужно добавить команду только для одной конкретной формы документа, мы можем создать ручную кнопку. Разберем алгоритм действий:
СоздатьКорректировку).Важное архитектурное замечание! В обсуждении на форуме был предложен следующий вариант кода, который является ошибочным для парадигмы управляемого приложения:
// ОШИБОЧНЫЙ КОД (Не использовать в тонком клиенте!)
&НаКлиенте
Процедура ВвестиНаОснованииКорректировку(Команда)
ДокКорр = Документы.КорректировкаРеализации.СоздатьДокумент(); // Ошибка!
ДокКорр.Заполнить(Объект.Ссылка);
ФормаКорр = ДокКорр.ПолучитьФорму();
ФормаКорр.Открыть();
КонецПроцедуры
В строгом «Тонком клиенте» методы работы с объектными данными, такие как СоздатьДокумент или ПолучитьФорму, недоступны. Такой код вызовет ошибку. Правильный способ программного создания документа на основании в управляемых формах — использование глобального метода ОткрытьФорму с передачей стандартного системного параметра Основание.
Рассмотрим, как должен выглядеть правильный код:
&НаКлиенте
Процедура ВвестиНаОснованииКорректировку(Команда)
ПараметрыОткрытия = Новый Структура("Основание", Объект.Ссылка);
ОткрытьФорму("Документ.КорректировкаРеализации.ФормаОбъекта", ПараметрыОткрытия);
КонецПроцедуры
В этом случае платформа сама создаст объект в памяти сервера, вызовет обработчик ОбработкаЗаполнения в модуле объекта и корректно откроет форму нового документа пользователю. Документ не будет записан в базу до того момента, пока пользователь сам не нажмет кнопку проведения.
Если документ-цель вводится на основании нескольких разных документов, или вы хотите, чтобы команда была доступна не только в форме объекта, но и в форме списка, лучше создать глобальную команду документа. Это избавит вас от дублирования кода.
Выполним следующие шаги:
СоздатьНаОсновании.Командная панель формы.Создать на основании.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыФормы = Новый Структура("Основание", ПараметрКоманды);
ОткрытьФорму("Документ.КорректировкаРеализации.ФормаОбъекта",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
После создания такой команды она автоматически появится во всех формах и списках документов-оснований. Не забудьте также назначить права на эту команду нужным ролям!
Даже если вы всё настроили верно, могут возникнуть интерфейсные нюансы. Проанализируем самые частые из них:
1. Команда не отображается на форме.
В редакторе формы исходного документа перейдите на вкладку Командный интерфейс (слева вверху над деревом элементов). Найдите раздел Создать на основании и вручную проверьте, установлена ли галочка в колонке Видимость напротив вашего целевого документа или вашей новой команды. Часто платформа по умолчанию скрывает новые команды для уже существующих, отредактированных пользователем форм.
2. Дублирование кнопки «Создать на основании».
Когда вы добавляете свою общую команду, в интерфейсе формы может появиться дубль: два выпадающих меню «Создать на основании». Одно из них сгенерировано платформой по умолчанию, второе — содержит вашу ручную команду. В старых конфигурациях без БСП придется вручную снять галочку «Автозаполнение» у стандартной группы или управлять видимостью стандартных платформенных команд в командном интерфейсе формы, чтобы оставить только одно, объединенное меню.
3. Влияние функциональных опций.
Если целевой документ привязан к какой-либо Функциональной опции, и эта опция в режиме 1С:Предприятие в данный момент отключена, платформа автоматически вырежет и скроет кнопку ввода на основании для этого документа из всех интерфейсов. Если команда упорно не появляется — проверьте настройки функциональных опций базы данных.