Как правильно передать ссылку в форму внешней обработки и получить данные контрагента запросом?

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

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

Передача ссылки из формы назначения

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


Если Параметры.Свойство("ОбъектыНазначения") Тогда
    Объект.СсылкаНаОбъект = Параметры.ОбъектыНазначения[0];
КонецЕсли;

Данная проверка позволяет убедиться, что массив существует, прежде чем обращаться к его первому элементу. Обратите внимание, что массив может содержать несколько объектов, поэтому в задачах, где требуется обработка группы элементов, следует использовать цикл по элементам массива ОбъектыНазначения.

Оптимизация запроса к справочнику Контрагенты

После получения ссылки на партнера, нам необходимо найти соответствующих ему контрагентов. Проанализируем, как написать запрос эффективно. Распространенной ошибкой является избыточное обращение к полю Ссылка внутри условия ГДЕ. Так как Партнер уже является ссылочным типом, обращение к Партнер.Ссылка не требуется.

Разберем пример корректного построения запроса:


Запрос = Новый Запрос;
Запрос.Текст =  
    "ВЫБРАТЬ
    |	Контрагенты.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |	Контрагенты.Партнер = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Объект.СсылкаНаОбъект);
Результат = Запрос.Выполнить();

Обработка результата запроса

После выполнения запроса важно правильно перебрать полученные данные. Программисты часто допускают ошибку, пытаясь обратиться к таблице по ее имени внутри цикла, вместо обращения к конкретному полю выборки. Используйте метод Выборка.Следующий() и обращайтесь к результату по имени поля, заданному в тексте запроса (в нашем случае это Ссылка).

Посмотрим на пример обработки результата:


Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    // Обращаемся к псевдониму поля, указанному в запросе
    Контрагент = Выборка.Ссылка;
    // Здесь мы можем добавить логику заполнения таблицы или списка
КонецЦикла;

Рекомендации по отладке и разработке

Чтобы ваша разработка была надежной, придерживайтесь следующих правил:

  1. Проверка типов: Убедитесь, что тип ссылки, переданной через Параметры, соответствует типу реквизита Партнер в справочнике Контрагенты.
  2. Консоль запросов: Перед внедрением кода в обработку, обязательно протестируйте текст запроса в консоли. Это поможет исключить синтаксические ошибки и убедиться, что условие ГДЕ возвращает именно те данные, которые вы ожидаете.
  3. Безопасность: Всегда проверяйте заполненность ОбъектыНазначения перед выполнением кода, который зависит от переданных ссылок, чтобы избежать ошибок при вызове формы из непривычных мест интерфейса.

Использование вышеуказанных методов позволит вам корректно связывать данные между объектами системы и внешними разработками, избегая распространенных ошибок типизации и обращения к данным.

← На главную