К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как добавить создание на основании в 1С

Как работает механизм «ввод на основании» в 1С, как добавить создание документа на основании через конфигуратор и расширение, типовые ошибки и проверка результата.

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

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

Как устроен механизм ввода на основании

Механизм состоит из трёх частей. Первая — свойство объекта конфигурации «Вводится на основании» (и встречное свойство «Является основанием для»), которое определяет, какие документы могут быть основанием, а какие — создаваться. Вторая — событие ОбработкаЗаполнения в модуле объекта создаваемого документа, где программно описывается, какие реквизиты и табличные части переносятся из основания. Третья — команды интерфейса: в управляемом приложении платформа сама формирует подменю «Создать на основании» на основе настроенных связей.

Ключевой параметр события заполнения — ДанныеЗаполнения. Когда документ создаётся на основании, в этот параметр передаётся ссылка на документ-основание. Внутри процедуры проверяется тип основания через ТипЗнч(), и для каждого поддерживаемого типа пишется свой блок заполнения. Это позволяет одному документу корректно создаваться на основании нескольких разных объектов.

Создание документа на основании в пользовательском режиме

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

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

Создание документа на основании (пользователь)
  1. 1
    Откройте документ-основание в режиме 1С:Предприятие
  2. 2
    Нажмите кнопку «Создать на основании» на панели формы
  3. 3
    Выберите нужный тип документа из списка
  4. 4
    Проверьте автоматически заполненные реквизиты и табличные части
  5. 5
    Запишите и проведите документ, убедитесь в наличии связи с основанием

Настройка ввода на основании в конфигураторе

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

Далее откройте модуль объекта документа и создайте обработчик ОбработкаЗаполнения. Минимальный шаблон выглядит так:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда

Организация = ДанныеЗаполнения.Организация;

Контрагент = ДанныеЗаполнения.Контрагент;

Договор = ДанныеЗаполнения.Договор;

Для Каждого СтрокаТовара Из ДанныеЗаполнения.Товары Цикл

НоваяСтрока = Товары.Добавить();

НоваяСтрока.Номенклатура = СтрокаТовара.Номенклатура;

НоваяСтрока.Количество = СтрокаТовара.Количество;

НоваяСтрока.Цена = СтрокаТовара.Цена;

КонецЦикла;

КонецЕсли;

КонецПроцедуры

Обратите внимание: заполнять реквизиты нужно через ДанныеЗаполнения, а не через Основание — последний параметр в управляемом приложении не используется. Если документ содержит реквизит «Основание» или аналогичный, запишите в него ссылку на ДанныеЗаполнения, чтобы связь хранилась явно и была доступна для отборов в запросах и отчётах.

Команды «Создать на основании» в управляемых формах

В управляемом приложении платформа автоматически генерирует команды ввода на основании для каждой настроенной связи. У документа-основания в дереве конфигурации есть ветка «Команды», где присутствует стандартная команда вида «ВводНаОсновании». У неё есть свойства: «Режим использования параметра» (одиночный или множественный — можно ли создать документ сразу из нескольких выделенных оснований в списке) и «Тип параметра команды».

Чтобы команда появилась в форме документа-основания, откройте форму, перейдите на закладку «Командный интерфейс» и включите видимость нужной команды ввода на основании в панели навигации или в группе «Создать на основании» командной панели. Если команда не отображается в списке доступных — чаще всего не настроено свойство «Вводится на основании» у целевого документа либо у команды не заполнен тип параметра.

Добавление ввода на основании через расширение

Если конфигурация на поддержке и изменять её напрямую нельзя или нежелательно, механизм добавляется через расширение. Создайте расширение, добавьте в него заимствованный документ, который должен создаваться, и в его свойствах настройте «Вводится на основании». Затем в модуле объекта заимствованного документа расширения создайте обработчик с аннотацией &После("ОбработкаЗаполнения") или &ИзменениеИКонтроль, чтобы дополнить типовое заполнение.

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

Способы добавить ввод на основании

Изменение конфигурации

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

Расширение конфигурации

Сохраняет типовое обновление, но ограничено возможностями платформы по заимствованию

Своя команда в форме

Максимальная гибкость заполнения, но связь с основанием нужно хранить вручную в реквизите

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Обращение к параметру «Основание» вместо «ДанныеЗаполнения» — в управляемом приложении заполнение не срабатывает
02
Отсутствие проверки ТипЗнч(ДанныеЗаполнения) — ошибка при создании документа без основания или из копирования
03
Перенос табличной части без пересчёта сумм и итогов — расхождение суммы документа и строк
04
Забытая видимость команды в командном интерфейсе формы — пользователи не видят кнопку, хотя механизм работает
05
Настройка связи только в одну сторону без проверки обратного свойства — команда не появляется в списке основания

Ещё одна частая проблема — права доступа. Пользователь может видеть кнопку, но не иметь права на добавление целевого документа: при попытке создания он получит ошибку нарушения прав. Проверяйте роли на создание, чтение и проведение целевого документа до передачи доработки пользователям.

FAQ

Можно ли создать документ на основании нескольких документов сразу?

Да. У стандартной команды ввода на основании установите режим использования параметра «Множественный». Тогда в списке оснований можно выделить несколько строк, и в ОбработкаЗаполнения в ДанныеЗаполнения придёт массив ссылок, который нужно обойти циклом.

Почему кнопка «Создать на основании» есть, но нужного документа в списке нет?

Наиболее вероятные причины: у целевого документа не отмечено свойство «Вводится на основании» для данного типа, у стандартной команды не заполнен тип параметра, либо команда скрыта в настройках командного интерфейса формы. Проверяйте в указанном порядке.

Как запретить создание на основании для отдельных пользователей?

Штатного переключателя нет: видимость команды можно ограничить через настройки формы или программно в обработчике ПриСозданииНаСервере с проверкой роли. Дополнительно ограничьте права на добавление целевого документа в ролях.

Работает ли ввод на основании для справочников, а не только документов?

Да, механизм доступен и для справочников, и для задач, и для планов счетов. Настройка аналогична: свойство ввода на основании у целевого объекта и ОбработкаЗаполнения в его модуле.

Что делать, если при создании на основании поля заполняются неправильно?

Откройте модуль объекта создаваемого документа и найдите ОбработкаЗаполнения. Проверьте, из каких реквизитов основания берутся значения, и нет ли дополнительной логики в подписках на события или общих модулях, которая переопределяет заполнение после вашей процедуры.

Итог

Что важно запомнить

Ввод на основании настраивается связкой «свойство объекта + ОбработкаЗаполнения + видимость команды». Заполняйте данные через ДанныеЗаполнения с проверкой типа, тестируйте на копии базы и проверяйте права пользователей перед запуском в работу.