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