@KTG

Как передать имя документа через параметр в 1С?

Как передавать параметром имя запрашиваемой таблицы в запрос, т.е. откуда брать данные?

На форме есть поле, которое выводит список видов документов.
Хочу что бы при выборе какого либо вида документов, к документам этого вида обращался запрос.
Запрос.Текст = "ВЫБРАТЬ Документ.Организация 
                          | ИЗ &ВидДокумента Как Документ"
Запрос.УстановитьПараметр("ВидДокумента", "Документ." + ЭтаФорма.ВидДокумента);


Поле выбора заполняю так:
мдТек = Метаданные["Документы"];
	Для каждого ЭлементКоллекции из мдТек Цикл
		Элементы.ВидДокумента.СписокВыбора.Добавить(ЭлементКоллекции.Имя, ЭлементКоллекции.Синоним);
	КонецЦикла;
  • Вопрос задан
  • 2637 просмотров
Решения вопроса 2
@Dementor
программист, архитектор, аналитик
Посмотрел ваш обмен комментариями с Константином. У вас нет понимания, как работают запросы. Попробую в двух словах.

Текст запроса - это инструкция подсистеме управления базой данных по выбору и трансформации данных. Есть синтаксис языка запросов, согласно которому источник получения данных требуется описать в разделе ГДЕ следуя определенным правилам: если источник находится в данных системы, то он описывается как [КлассОбъекта].[ИмяОбъекта] (при этом как источник можно использовать только табличные данные, даже если они содержат всего одну строку - т.е. константы применять можно, а перечисления уже нельзя); если же источник данных находится в коде, откуда выполняется запрос, то пишут &НазваниеПеременной и источник данных передают в одноименную переменную.

Итак, если на вход объекту Запрос или основанному на нем (это могут быть "построитель отчета" или "система компоновки") подать некоторый текст запроса, где в секции ГДЕ будет вместо Документ.Акт и Документ.Счет будет &ВидДокумента , то он отправится в переданную коллекцию параметров, поищет там параметр с именем "ВидДокумента", переместит его содержимое во временную таблицу и выполнит запрос к этой временной таблице, а не к реальным таблицам тех же документов. Таким образом, если вы в параметр ВидДокумента установите какую-то таблицу значений (или табличную часть, или результат из другого запроса), то у вас все получится. Но при передаче строки, как в вашем случае, получится ошибка, так как строку невозможно неявно преобразовать в таблицу.

Если у вас в какой-то переменной есть имя таблицы, то вам нужно следует передать значение этой переменной в текст запроса так как посоветовал Константин, или с помощью текстовой замены:
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВидДокумента", ВидДокумента);
Ответ написан
Комментировать
nki
@nki
bezkart.ru готовая система лояльности
Начнем с того, что параметр у вас будет строка.
У документов есть реквизит ВидДокумента?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект