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