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

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

Как добавить кнопку ввода на основании в документ 1С

Пошаговая инструкция: как добавить кнопку ввода на основании в документ 1С через конфигуратор, команду ввода на основании и программный код. Проверка и ошибки.

Ввод на основании — стандартный механизм 1С, который создаёт новый документ с автоматическим заполнением реквизитов из документа-основания. Пользователь выбирает команду в форме исходного документа, и система открывает форму нового объекта, где уже перенесены контрагент, договор, товары, суммы и другие данные. Это сокращает ручной ввод и снижает количество ошибок при оформлении связанных документов.

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

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

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

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

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

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

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

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

После изменения свойств обновите конфигурацию базы данных (клавиша F7) и проверьте результат в пользовательском режиме. Если конфигурация находится на поддержке без возможности изменения, потребуется снять объект с поддержки или реализовать механизм через расширение.

Порядок настройки в конфигураторе
  1. 1
    Откройте документ-основание и в свойстве «Вводится на основании» отметьте создаваемые документы
  2. 2
    Откройте создаваемый документ и отметьте в том же свойстве документы-основания
  3. 3
    Добавьте обработчик ОбработкаЗаполнения в модуль объекта создаваемого документа
  4. 4
    Обновите конфигурацию базы данных (F7)
  5. 5
    Откройте документ-основание в режиме предприятия и проверьте наличие команды

Обработчик заполнения: перенос данных из основания

За логику переноса данных отвечает событие ОбработкаЗаполнения в модуле объекта создаваемого документа. Параметр ДанныеЗаполнения содержит ссылку на документ-основание, когда создание выполняется именно командой ввода на основании. Типовой шаблон обработчика выглядит так:

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

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

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

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

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

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

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

ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовара);

КонецЦикла;

КонецЕсли;

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

Функция ЗаполнитьЗначенияСвойств переносит одноимённые реквизиты автоматически, что удобно для табличных частей с совпадающей структурой. Если имена реквизитов различаются, их заполняют построчно вручную. В типовых конфигурациях вместо прямого обращения к данным часто используют запросы к основанию — это быстрее при больших табличных частях и позволяет сразу отфильтровать нужные строки.

Важно учитывать, что обработчик вызывается не только при вводе на основании, но и при копировании и других сценариях заполнения. Поэтому проверку типа ДанныеЗаполнения пропускать нельзя: без неё код попытается прочитать несуществующие реквизиты и вызовет ошибку.

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

Добавление кнопки в управляемом приложении

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

Если команда не появилась, проверьте состав команд в редакторе формы: откройте форму документа, перейдите на закладку «Командный интерфейс» и убедитесь, что в группе «Создать на основании» нужная команда видима. Иногда видимость отключают вручную при доработке формы, и команда пропадает из интерфейса.

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

Добавление кнопки в обычном приложении

В обычном приложении автоматического формирования команд нет, поэтому кнопку добавляют на форму вручную. Откройте форму документа в конфигураторе, добавьте на командную панель новую кнопку, например «Ввести реализацию», и создайте для неё обработчик нажатия.

В обработчике используется метод создания нового объекта с параметром основания:

Процедура ВвестиРеализацию(Кнопка)

НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

НовыйДокумент.Заполнить(Ссылка);

НовыйДокумент.ПолучитьФорму().Открыть();

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

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

Программное создание и альтернативные варианты

Когда стандартной кнопки недостаточно — например, нужно создавать документ по условию, из обработки или по расписанию, — используют программный вызов. Код аналогичен обработчику кнопки: создаётся новый документ, вызывается Заполнить(Основание), затем объект записывается или открывается пользователю для проверки.

Альтернативные подходы различаются по гибкости и цене поддержки. Выбор зависит от того, типовая у вас конфигурация или самописная, и допустимо ли изменять конфигурацию.

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

Стандартный механизм (свойства + ОбработкаЗаполнения)

Подходит всегда, когда можно изменить конфигурацию. Минимум кода, команда появляется автоматически в управляемом интерфейсе

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

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

Кнопка на форме с вызовом Заполнить()

Для обычного приложения или нестандартного размещения команды. Требует ручной доработки формы

Внешняя обработка заполнения

Когда изменять конфигурацию нельзя совсем. Подключается через механизм дополнительных отчетов и обработок БСП

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

После настройки откройте документ-основание в режиме предприятия и найдите команду создания. Создайте документ и проверьте, что реквизиты шапки и табличные части перенеслись корректно, а новый документ проводится без ошибок. Дополнительно проверьте сценарий ввода из формы списка: выделите документ и убедитесь, что команда доступна и там.

Контрольные точки

Как проверить результат

Наличие команды в форме документа
Норма

Команда «Создать на основании» видна и содержит нужный документ

Тревожный признак

Команды нет — не настроено свойство «Вводится на основании» или отключена видимость в командном интерфейсе формы

Заполнение нового документа
Норма

Реквизиты и табличные части перенесены из основания

Тревожный признак

Документ пустой — отсутствует или не срабатывает ОбработкаЗаполнения

Проведение созданного документа
Норма

Документ проводится без ошибок

Тревожный признак

Ошибки проведения — не заполнены обязательные реквизиты, которые обработчик не перенёс

Типичные ошибки
01
Настроена связь только с одной стороны — команда появляется, но заполнение не работает или наоборот
02
Нет проверки типа ДанныеЗаполнения в ОбработкаЗаполнения — ошибка при копировании документа или заполнении из других источников
03
Код заполнения продублирован в форме вместо модуля объекта — при программном создании документ заполняется иначе, чем по кнопке
04
Не учтён частичный ввод на основании — пользователи создают дубли документов на уже отгруженные остатки
05
Изменена типовая конфигурация без резервной копии — сложности при обновлении и риск потери доработок

Ограничения и границы самостоятельной работы

Механизм ввода на основании не контролирует бизнес-логику сам по себе: он не запрещает создать два документа по одному основанию и не проверяет остатки. Такие проверки реализуют в обработчике заполнения или в процедуре ОбработкаПроверкиЗаполнения создаваемого документа.

Если требуется сложная логика — распределение одного основания на несколько документов, отбор строк по условиям, предварительный показ пользователю формы выбора строк — стандартной кнопки недостаточно. В этом случае создают собственную команду с открытием промежуточной формы, а стандартный ввод на основании отключают, чтобы не путать пользователей.

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

Итог

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

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

Часто задаваемые вопросы

Почему команда «Создать на основании» не появляется в форме документа?

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

Можно ли добавить ввод на основании не изменяя типовую конфигурацию?

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

Как ограничить список документов в меню «Создать на основании»?

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

Документ создаётся, но создаётся пустым. В чём причина?

Отсутствует или не срабатывает обработчик ОбработкаЗаполнения в модуле создаваемого документа. Проверьте, что условие по типу ДанныеЗаполнения соответствует реальному типу основания и что внутри условия есть код переноса реквизитов.

Как запретить повторный ввод на основании одного документа?

Стандартный механизм этого не контролирует. Добавьте в ОбработкаЗаполнения запрос, проверяющий существование документов с таким основанием, и при наличии вызывайте исключение с понятным сообщением пользователю или заполняйте только неотгруженный остаток.

Работает ли ввод на основании в веб-клиенте и мобильном клиенте?

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