Передать в запрос 1С 8.3 таблицу значений
Меню

Передать в запрос 1С 8.3 таблицу значений

Большинство разработчиков 1С знают, что выполнение запроса в цикле крайне нежелательно из-за множественных серверных вызовов базы данных. Однако далеко не все из них понимают, как избежать использования этой неоптимальной конструкции. А помочь в этом разработчикам может использование таблиц значений в качестве параметра запроса 1С. Поняв суть этого решения, программист 1С никогда больше не вернется к выполнению запросов в цикле.

Пример передачи таблицы в запрос

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

Получить ТЗ в 1С можно 2 способами:

  • Выгрузить в нужный тип данных информацию;
  • Программно создать внешнюю таблицу значений и заполнить ее, загрузив данные из файлов или вручную. Учтите, что при создании таблицы значений придется типизировать ее колонки с помощью описания типов.


         ТаблицаАвтомобилей = Новый ТаблицаЗначений;
	 
         ТаблицаАвтомобилей.Колонки.Добавить("Автомобиль", Новый 
         ОписаниеТипов("СправочникСсылка.АвтомобилиКомпании"));

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

Предупреждение
Предупреждение

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

Добавление таблицы из одной колонки в запрос 1С
Добавление таблицы из одной колонки в запрос 1С


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

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

Кроме вышеописанного применения программистам 1С приходится загружать таблицу в запрос 1С в сложных участках кода. Это позволяет не выполнять по нескольку раз 1 запрос – его выходной результат сохраняют в таблицу значений. А уже ее используют во всех следующих запросах в коде.

На многих собеседованиях на должность разработчика 1С в крупных компаниях проверяется именно способность грамотно использовать возможности платформы. И если вы продемонстрируете выполнение кода в цикле, а не передадите таблицу значений в запросе 1С, то это будет грубая ошибка.


Рассказать друзьям
Предыдущая статья статья
Загрузка прайс листа в 1С 8.3
Следующая статья статья
Основные справочники 1С 8.3: создание и изменение элементов
Комментарии