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