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