Заполнить на форме внешней обработки таблицу значений из результата запроса

Получим ссылку на документ Платежного поручения в колонке таблицы значений из выборки запроса его поля на встроенном языке 1С.

№1Создаём обработку и через "+" добавляем реквизиты полей отборов и таблицы с результатом. Для всех реквизитов формы указываем тип.

"ТаблицаЗначений" в моем примере, как "РезультатЗапроса" куда будем выводить результат запроса:

2026-01-16_220716

№2

2.1 Открываем основную форму на вкладке "Форма" и создаем команду (кнопку) для выполнения запроса. Далее перетаскиваем созданные реквизиты в левую часть элементов из правого окна реквизитов, группируя их вместе: созданные в пункте №1 поля отборов, таблицу значений "РезультатЗапроса", где через меню "Добавить колонку реквизита" добавил колонку в которую буду выводить поле результата запроса = "РезультатЗапросаОбъект" с указанием типа = Платежное поручение (в моём случае):

2026-02-09 193536

2.2 К каждому элементу в левой части окна, куда мы перетащили реквизиты из правого окна - должен быть присвоен Путь к данным: эта связка создалась автоматически при перетаскивании реквизита:

2026-02-09 2015051

2.3 Аналогично, теперь перетаскиваем все элементы на форму обработки:

2026-02-09 202640

№3Теперь переходим на вкладку "Модуль" основной формы и создаем 2 процедуры: НаКлиенте (Команда) для кнопки взаимодействия с формой и НаСервере для выполнения кода запроса к базе данных:

&НаКлиенте
Процедура ПоискВЗапросе(Команда)
	СерверПоискВЗапросе();
КонецПроцедуры
&НаСервере
Процедура СерверПоискВЗапросе()     
    СостояниеОбъекта = Объект.СостояниеОбъекта;
    ТипСравненияЛ = Объект.ТипСравненияЛ;
    БКСВалютаВзаиморасчетов = Объект.БКСВалютаВзаиморасчетов;
    ВалютаДокумента = Объект.ВалютаДокумента;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1
		|	БКСРегистрСостоянийОбъектовСрезПоследних.Объект.Ссылка КАК Объект
		|ИЗ
		|	РегистрСведений.БКСРегистрСостоянийОбъектов.СрезПоследних КАК БКСРегистрСостоянийОбъектовСрезПоследних
		|ГДЕ
		|	БКСРегистрСостоянийОбъектовСрезПоследних.Объект ССЫЛКА Документ.ПлатежноеПоручение
		|	И БКСРегистрСостоянийОбъектовСрезПоследних.СостояниеОбъекта = &СостояниеОбъекта
		|	И ВЫБОР
		| 		КОГДА &ТипСравнения = ИСТИНА
  		| 			ТОГДА БКСРегистрСостоянийОбъектовСрезПоследних.Объект.ВалютаДокумента = &ВалютаДокумента
		| 		ИНАЧЕ 
		| 			НЕ БКСРегистрСостоянийОбъектовСрезПоследних.Объект.ВалютаДокумента = &ВалютаДокумента
		|	КОНЕЦ
		| 	И ВЫБОР 
		|		КОГДА &ТипСравнения = ИСТИНА
  		| 			ТОГДА БКСРегистрСостоянийОбъектовСрезПоследних.Объект.БКСВалютаВзаиморасчетов = &БКСВалютаВзаиморасчетов
		| 		ИНАЧЕ 
		| 			НЕ БКСРегистрСостоянийОбъектовСрезПоследних.Объект.БКСВалютаВзаиморасчетов = &БКСВалютаВзаиморасчетов
		|	КОНЕЦ";
	Запрос.УстановитьПараметр("СостояниеОбъекта", СостояниеОбъекта);
	Если ТипСравненияЛ = "Равно" Тогда
		ТипСравнения = Истина;
	Иначе
		ТипСравнения = Ложь;
	КонецЕсли;
	Запрос.УстановитьПараметр("ТипСравнения", (ТипСравнения));
	Запрос.УстановитьПараметр("БКСВалютаВзаиморасчетов", БКСВалютаВзаиморасчетов);
	Запрос.УстановитьПараметр("ВалютаДокумента", ВалютаДокумента);	
	// Очищаем существующую таблицу
    Объект.РезультатЗапроса.Очистить();
	// Выполняем запрос
	Результат = Запрос.Выполнить();
	ТаблицаЗапроса = Результат.Выгрузить();
	// Для отладки - посмотрим, что вернул запрос
	Сообщить("Запрос вернул " + ТаблицаЗапроса.Количество() + " строк");
   	// Заполняем таблицу
    Для Каждого СтрокаЗапроса Из ТаблицаЗапроса Цикл
       	НоваяСтрока = Объект.РезультатЗапроса.Добавить();
       	НоваяСтрока.РезультатЗапросаОбъект = СтрокаЗапроса.Объект;
    // Для отладки
    Сообщить("Найден объект: " + СтрокаЗапроса.Объект);
    КонецЦикла; 
КонецПроцедуры

№4Запускаем отладку (при необходимости) и открываем обработку, выполняем команду "ПоискВЗапросе".

Итог: Ссылка на Платежное поручение найдена по введенным отборам на форме и выведена через ТаблицуЗначений "РезультатЗапроса", в колонку "РезультатЗапросаОбъект":

2026-01-16 224034

mr. Mak

Остались вопросы? Пишите на почту admin@hzit.ru

Администратор сайта hzit.ru
Back to top