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

Тема в разделе "1C и всё что с ней связано", создана пользователем olga13, 24 окт 2012.

  1. olga13

    olga13 Well-Known Member

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

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

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

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

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

    КонецПроцедуры
     
  2. puh14

    puh14 Well-Known Member
    1C Team

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

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

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Так в том-то и весь вопрос, как должен выглядеть текст запроса. Цикл с метаданными организовать не проблема. А как написать ТекущийЭлемент = ЧТО??? Пробовала и внешние переменные, и строковые операторы. Ругается на неправильный синтаксис запроса.
     
  4. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    "ТекущийЭлемент = Справочник."+ИмяСправочника+"ТекущийЭлемент
     
  5. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Дык я самого начала так пробовала, не работает!

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

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

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

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Всё, поборола!
    Надо было так:

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

    Спасибо всем, кто откликнулся.
     
Загрузка...

Поделиться этой страницей