Конструктор ввода на основании

14.05.2018

Теги: 1С:ПредприятиеВводНаОснованииЗаполнитьОбработкаЗаполненияОткрытьФорму

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

Конструктор ввода на основании можно вызвать, например, из окна редактирования справочника:

Конструктор позволяет вручную или автоматически заполнить выражения, которые будут записаны в поля результирующего объекта прикладного решения:

Результатом работы конструктора является готовая процедура на встроенном языке с именем ОбработкаЗаполнения(). Эта процедура располагается в модуле результирующего объекта конфигурации и будет вызвана системой при вводе этого объекта на основании другого объекта.

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    //{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Контрагенты") Тогда
        // Заполнение шапки
        Поставщик = ДанныеЗаполнения.Ссылка;
    КонецЕсли;
    //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
КонецПроцедуры

Для каждого типа объекта-основания формируется своя ветка условия Если, в которой происходит заполнение реквизитов нового документа.

Как выполнить ввод на основании программно?

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

ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка);
ОткрытьФорму("Документ.РасходнаяНакладная.ФормаОбъекта", ПараметрыФормы);

При этом отработает процедура ОбработкаЗаполнения() в модуле объекта и те алгоритмы заполнения, которые в ней описаны.

Еще один способ — создать новый объект программно, вызвать у него метод Заполнить() и передать в этот метод значение, на основании которого должен быть создан новый объект. В этом случае тоже будет выполнен обработчик события ОбработкаЗаполнения(). В заключении останется только получить форму объекта, установить свойство расширения формы ПараметрОснование и открыть ее:

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

Если же объект, который вводится на основании, нужно сразу записать в базу данных, не показывая его форму пользователю:

// Создаем новый документ
НовыйДокумент = Документы.РасходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
// Вызываем процедуру ОбработкаЗаполнения() и
// передаем в нее ссылку на объект-основание
НовыйДокумент.Заполнить(ВыбранныйКлиент);
// Записываем новый документ в базу данных
НовыйДокумент.Записать();

В результате этих действий будет выполнен обработчик события ОбработкаЗаполнения(), расположенный в модуле нового объекта.

Поиск: 1С:Предприятие • Ввод на основании • Заполнить • Обработка заполнения • Открыть форму

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.