Как открыть форму документа с заполненным контрагентом при записи справочника в 1С 8.3?

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

При автоматизации рутинных операций пользователей часто возникает задача: сразу после создания и сохранения новой карточки контрагента открыть форму документа реализации (или любого другого первичного документа), в которой поле Контрагент уже будет автоматически заполнено созданным элементом. Рассмотрим подробно, как реализовать данный сценарий в управляемом приложении 1С:Предприятие 8.3.

Базовый способ открытия формы документа с передачей ссылки

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

Рассмотрим простейший вызов метода на клиенте:


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

Разберем нюансы этой конструкции:

  1. Метод ОткрытьФорму() принимает имя формы в виде строки и структуру параметров. Если форме документа передается параметр, не являющийся стандартным, в самой форме документа в процедуре ПриСозданииНаСервере потребуется предусмотреть его чтение и присвоение в реквизит объекта.
  2. Если передавать форму владельца (например, ЭтаФорма), то открываемая форма документа будет подчинена форме справочника. Если форма справочника после этого закрывается, указывать владельца не следует, чтобы форма документа осталась активной.

Штатный механизм платформы: использование параметра ЗначенияЗаполнения

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

Посмотрим на пример правильного формирования параметров:


ПараметрыЗаполнения = Новый Структура("Контрагент", Объект.Ссылка);
ПараметрыОткрытия = Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения);

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыОткрытия);

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

Альтернативный вариант: передача через параметр Основание

Если в конфигурации для документа настроен ввод на основании справочника Контрагенты, можно передать ссылку через стандартный параметр Основание:


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

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

Выбор правильного события формы для вызова

Выясним причину частых ошибок при выборе события для открытия документа:

  1. Ошибка использования события ПриЗакрытии: Если поместить код в обработчик ПриЗакрытии, документ будет открываться каждый раз, когда пользователь просто просматривает карточку существующего контрагента или нажимает кнопку «Отмена» без сохранения.
  2. Корректное событие ПослеЗаписи: Вызов нового документа необходимо выполнять в клиентском обработчике ПослеЗаписи. Это гарантирует, что элемент справочника уже успешно записан в базу данных и обладает валидной ссылкой Объект.Ссылка.

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


&НаКлиенте
Переменная ЭтоНовыйКонтрагент;

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

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

Особенности для конфигураций на базе БСП (например, 1С:Бухгалтерия 3.0)

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

← На главную