1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Базы данных и администрирование", создана пользователем olga13, 24 окт 2012.

  1. olga13

    olga13 Well-Known Member

    Репутация:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Добрый день!
    Подскажите, возможно ли построить запрос, который бы обрабатывал не конкретный вид справочника, а выбранный пользователем интерактивно. Текст запроса примитивный, но не писать же его для каждого вида справочника.
    Код:
    Процедура СформироватьСписок()
    Перем Запрос, ТекстЗапроса;
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(СформироватьСписок)
    |ТекущийЭлемент = Справочник.Товары.ТекущийЭлемент;
    |Группировка ТекущийЭлемент без групп;
    |"//}}ЗАПРОС
    ;
    
    Если КромеВыбТовары = 0 Тогда
    ТекстЗапроса = ТекстЗапроса + "
    |Условие(ТекущийЭлемент в ВыбТовары);
    |";
    ИначеЕсли КромеВыбТовары = 1 Тогда
    ТекстЗапроса = ТекстЗапроса + "
    |Условие(НЕ(ТекущийЭлемент в ВыбТовары));
    |";
    КонецЕсли;
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    Сп = СоздатьОбъект("СписокЗначений");
    Пока Запрос.Группировка(1) = 1 Цикл
    Сп.ДобавитьЗначение(Запрос.ТекущийЭлемент);
    КонецЦикла;
    
    КонецПроцедуры
     
  2. puh14

    puh14 Well-Known Member

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

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

    olga13 Well-Known Member

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

    unknown181538 НеГуру

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

    olga13 Well-Known Member

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

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

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

    olga13 Well-Known Member

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

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

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

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