• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

7.7 Универсальный Запрос

  • Автор темы olga13
  • Дата начала
O

olga13

Добрый день!
Подскажите, возможно ли построить запрос, который бы обрабатывал не конкретный вид справочника, а выбранный пользователем интерактивно. Текст запроса примитивный, но не писать же его для каждого вида справочника.
Код:
Процедура СформироватьСписок()
Перем Запрос, ТекстЗапроса;

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = 
"//{{ЗАПРОС(СформироватьСписок)
|ТекущийЭлемент = Справочник.Товары.ТекущийЭлемент;
|Группировка ТекущийЭлемент без групп;
|"//}}ЗАПРОС
;

Если КромеВыбТовары = 0 Тогда
ТекстЗапроса = ТекстЗапроса + "
|Условие(ТекущийЭлемент в ВыбТовары);
|";
ИначеЕсли КромеВыбТовары = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "
|Условие(НЕ(ТекущийЭлемент в ВыбТовары));
|";
КонецЕсли;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Сп = СоздатьОбъект("СписокЗначений");
Пока Запрос.Группировка(1) = 1 Цикл
Сп.ДобавитьЗначение(Запрос.ТекущийЭлемент);
КонецЦикла;

КонецПроцедуры
 
P

puh14

Конечно!
Делаете цикл по метаданным справочников ( виды справочников, что есть в системе) . Загоняете в список. После выбора значения формируете цикл по метаданным "реквизит" этого справочника и составляете текст запроса. Исполняете и выводите что надо.

Для поля выбора делаете назначение типа после выбора справочника из списка.
 
O

olga13

Конечно!
Делаете цикл по метаданным справочников ( виды справочников, что есть в системе) . Загоняете в список. После выбора значения формируете цикл по метаданным "реквизит" этого справочника и составляете текст запроса. Исполняете и выводите что надо.

Для поля выбора делаете назначение типа после выбора справочника из списка.

Так в том-то и весь вопрос, как должен выглядеть текст запроса. Цикл с метаданными организовать не проблема. А как написать ТекущийЭлемент = ЧТО??? Пробовала и внешние переменные, и строковые операторы. Ругается на неправильный синтаксис запроса.
 
U

unknown181538

"ТекущийЭлемент = Справочник."+ИмяСправочника+"ТекущийЭлемент
 
O

olga13

"ТекущийЭлемент = Справочник."+ИмяСправочника+"ТекущийЭлемент

Дык я самого начала так пробовала, не работает!

-------------------- СформироватьСписок --------------------
ТекущийЭлемент = Справочник. <<?>> " + ВыбСпр + ".ТекущийЭлемент;
Запрос[3] : Неожиданное выражение '" + ВыбСпр + "'
Группировка ТекущийЭлемент <<?>> без групп;
Запрос[4] : Переменная 'ТекущийЭлемент' не опеределена
Ошибок - 2, Предупреждений - 0.

И так тоже не работает:
Код:
	ТекСправочник = "Справочник." + ВыбСпр + ".ТекущийЭлемент";

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = 
"//{{ЗАПРОС(СформироватьСписок)
|ТекущийЭлемент = ТекСправочник;
|Группировка ТекущийЭлемент без групп;
|"//}}ЗАПРОС
;
-------------------- СформироватьСписок --------------------
ТекущийЭлемент = <<?>> ТекСправочник;
Запрос[2] : Неверно заданный путь 'ТекСправочник'
Группировка ТекущийЭлемент <<?>> без групп;
Запрос[3] : Переменная 'ТекущийЭлемент' не опеределена
Ошибок - 2, Предупреждений - 0.
 
O

olga13

Всё, поборола!
Надо было так:

ТекстЗапроса = ТекстЗапроса + "ТекущийЭлемент = " + ТекСправочник + ";";

Спасибо всем, кто откликнулся.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!