Как добавить кнопку «Ввести на основании» в управляемую форму обработки 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему не отображается кнопка «Ввести на основании»?

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

Кроме того, проверьте следующие моменты:

  1. Убедитесь, что у документа-приемника в дереве метаданных в разделе Ввод на основании правильно указан документ-источник.
  2. Проверьте права доступа пользователя: если у текущего пользователя нет прав на создание документа-приемника, платформа автоматически скроет команду, даже если все настройки выполнены верно.

Решение 1: Создание собственной команды формы

Самый надежный и гибкий способ — это создание явной команды в самой обработке. Разберем этот процесс по шагам:

  1. Откройте конфигуратор и перейдите в дерево объектов вашей обработки.
  2. В ветке Команды создайте новую команду, назовите её, например, ВвестиЗаказНаОсновании.
  3. Перетащите созданную команду мышью в область командной панели вашей формы.
  4. В модуле формы создайте обработчик события команды &НаКлиенте.

Пример кода для реализации открытия формы нового документа с передачей ссылки на основание:


&НаКлиенте
Процедура ВвестиЗаказНаОсновании(Команда)
    // Получаем текущую строку из динамического списка
    ТекущаяСтрока = Элементы.Список.ТекущиеДанные;
    
    Если ТекущаяСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Формируем параметры заполнения
    ПараметрыЗаполнения = Новый Структура;
    ПараметрыЗаполнения.Вставить(\"Основание\", ТекущаяСтрока.Ссылка);
    
    // Открываем форму документа с параметром
    ОткрытьФорму(\"Документ.ЗаказПокупателя.ФормаОбъекта\", ПараметрыЗаполнения);
КонецПроцедуры

Решение 2: Использование механизма передачи параметра «Основание»

Метод ОткрытьФорму() является универсальным инструментом в управляемых формах. При передаче структуры с ключом Основание, платформа автоматически инициирует событие ОбработкаЗаполнения в модуле объекта документа-приемника. Это означает, что вам не нужно вручную прописывать перенос каждого реквизита — достаточно правильно настроить логику в самом документе.

Убедитесь, что в модуле объекта документа-приемника (например, ЗаказПокупателя) корректно описана процедура:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеЗаполнения) = Тип(\"ДокументСсылка.ИсходныйДокумент\") Тогда
        // Здесь выполняется логика автоматического заполнения реквизитов
        ЭтотОбъект.Контрагент = ДанныеЗаполнения.Контрагент;
        ЭтотОбъект.Договор = ДанныеЗаполнения.Договор;
        // ... прочие реквизиты
    КонецЕсли;
КонецПроцедуры

Рекомендации по настройке

Для того чтобы визуально команда выглядела как стандартная, не забудьте настроить свойства команды на форме:

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

← На главную