Ввод на основании в расширении 1С делается без изменения основной конфигурации: в расширение добавляется общая команда с типом параметра документа-основания, которая открывает форму нового документа со значениями заполнения, а логика заполнения дописывается в ОбработкаЗаполнения заимствованного документа через аннотацию &После. Остается выдать права на команду — и пользователь видит ее в меню «Создать на основании».
Покажу на задаче из «Управления торговлей 11»: создавать «Реализацию товаров и услуг» на основании «Счета на оплату клиенту». Подход переносится на любую конфигурацию.
Почему не свойство «Вводится на основании»
В обычной разработке ввод на основании настраивается свойством «Вводится на основании» у документа-приемника и конструктором ввода на основании. Для заимствованных объектов расширения набор изменяемых свойств ограничен, и он менялся от версии к версии платформы. Поэтому рассчитывать на это свойство в расширении я не советую: универсальный способ, который работает на любой версии, — собственная команда плюс заполнение кодом.
| Способ | Где работает | Особенности |
|---|---|---|
| Общая команда в расширении | Любая конфигурация | Просто, но в формах с собственным меню может оказаться не в том подменю |
| Подключаемые команды БСП | Конфигурации на БСП 3.x | Команда встает в типовое подменю «Создать на основании» |
| Снятие с поддержки и правка метаданных | Любая | Не рекомендую: усложняет обновления |
Шаг 1. Расширение и заимствование объектов
- В конфигураторе: «Конфигурация» → «Расширения конфигурации» → «Добавить». Назначение — «Дополнение», префикс — короткий и уникальный, например
рв_. - Откройте конфигурацию расширения и заимствуйте оба документа:
СчетНаОплатуКлиентуиРеализацияТоваровУслуг. - Заимствуйте одну из ролей, которая есть у всех пользователей, работающих с реализациями (в УТ это обычно базовая роль подсистемы продаж). Она понадобится для прав.
Шаг 2. Общая команда «Создать реализацию»
В ветке «Общие» → «Общие команды» добавьте команду рв_СоздатьРеализациюНаОснованииСчета:
| Свойство | Значение |
|---|---|
| Группа | Командная панель формы, «Создать на основании» |
| Тип параметра команды | ДокументСсылка.СчетНаОплатуКлиенту |
| Режим использования параметра | Одиночный |
| Представление | Реализация товаров и услуг |
Модуль команды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ЗначенияЗаполнения = Новый Структура("Основание", ПараметрКоманды);
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедурыСтруктура в ЗначенияЗаполнения попадет в ОбработкаЗаполнения нового документа как параметр ДанныеЗаполнения. Документ при этом не записывается: пользователь увидит заполненную форму и сам решит, записывать ли ее.
Шаг 3. Заполнение через &После
В заимствованном документе РеализацияТоваровУслуг откройте модуль объекта, найдите ОбработкаЗаполнения и добавьте в расширение обработчик с вызовом «После». Платформа сгенерирует заготовку с аннотацией.

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




