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

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

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

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

Причина 1: Несоответствие параметрам выбора (Фильтры)

Проанализируем самую распространенную причину — установленные ограничения на уровне метаданных документа. Если в реквизите Контрагент документа РеализацияТоваровУслуг установлены жесткие «Параметры выбора» или «Связи параметров выбора», платформа выполняет проверку созданного объекта перед его подстановкой.

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

Как это проверить и исправить:

  1. Откроем конфигуратор и найдем нужный документ.
  2. Перейдем на вкладку «Данные», выберем реквизит Контрагент (или Партнер) и откроем его свойства.
  3. Найдем строку «Параметры выбора» и «Связи параметров выбора». Выясним, какие условия там прописаны.
  4. Если там стоит жесткий фильтр, нам необходимо обеспечить установку этого признака в новом объекте. Рассмотрим пример использования модуля объекта контрагента для заполнения значений по умолчанию:

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

Причина 2: Программное переопределение события «ОбработкаВыбора»

Разберем ситуацию, когда в форме документа перехвачено событие ОбработкаВыбора. Если в этом обработчике написан кастомный код, который не учитывает тип возвращаемого значения или принудительно устанавливает СтандартнаяОбработка = Ложь без последующей программной установки значения, автоподстановка работать не будет.

Посмотрим на пример кода, который может блокировать выбор:


&НаКлиенте
Процедура КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    
    // Ошибочный подход: блокировка стандартной обработки без логики присвоения
    Если ВыбранноеЗначение = Неопределено Тогда
        СтандартнаяОбработка = Ложь;
        Возврат;
    КонецЕсли;
    
    // Если здесь есть сложные условия или проверки, они могут мешать подстановке
    // созданного элемента. Проанализируем состояние отладки в этой точке.
    
КонецПроцедуры

Для решения этой проблемы убедимся, что СтандартнаяОбработка остается в значении Истина, либо явно пропишем присвоение: Объект.Контрагент = ВыбранноеЗначение;.

Причина 3: Особенности работы связки «Партнеры» и «Контрагенты» (УТ 11, ERP, КА)

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

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

Проанализируем работу помощника создания нового партнера. Если после записи партнера открывается дополнительное окно (например, проверка дублей), и пользователь закрывает его крестиком, а не кнопкой «Готово», оповещение о выборе может быть потеряно.

Причина 4: Отсутствие владельца формы при программном открытии

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

Рассмотрим правильный пример программного открытия формы создания:


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

Причина 5: Механизм «ОповеститьОВыборе» в кастомных формах

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

Выясним, как это реализовать правильно:


&НаКлиенте
Процедура ЗаписатьИЗакрыть(Команда)
    
    Если ЗаписатьОбъектНаСервере() Тогда
        // Передаем ссылку созданного объекта обратно в форму-владелец
        ОповеститьОВыборе(Объект.Ссылка);
        Закрыть();
    КонецЕсли;
    
КонецПроцедуры

Как отследить конкретное «условие» в типовой конфигурации?

Если в одном типе документов (Закупки) автоподстановка работает, а в другом (Продажи) — нет, проделаем следующие шаги для поиска отличий:

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

Подведем итог: автоматическая подстановка чаще всего ломается из-за фильтров (параметров выбора), которые не позволяют платформе принять объект, не соответствующий критериям «Клиент» или «Поставщик». Проверьте заполнение этих признаков при создании, и в 90% случаев проблема будет решена.

← На главную