Имя: Пароль:
1C
1С v8
Построитель запроса. Отбор по свойствам номенклатуры.
0 ExRq
 
15.11.12
14:36
Добрый день
Дорабатываю Обработку "Печать ценников". Добавляю Заполнение ТЧ по свойствам номенклатуры

Процедура ЗаполнитьПостроительОтчета() Экспорт
       ТекстЗапроса = "
       |ВЫБРАТЬ
       |    ИСТИНА КАК Печать,
       |    СпрНоменклатура.Номенклатура КАК Номенклатура,
       |    СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
       |    СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
       |    0 КАК Цена,
       |    1 КАК Количество
       |//СВОЙСТВА
       |ИЗ
       |    (ВЫБРАТЬ
       |        СпрНоменклатура.Ссылка КАК Номенклатура,
       |        ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
       |    ИЗ
       |        Справочник.Номенклатура КАК СпрНоменклатура
       |    ГДЕ НЕ СпрНоменклатура.ЭтоГруппа
       |    {ГДЕ
       |        СпрНоменклатура.Ссылка.* КАК Номенклатура}
       |    ОБЪЕДИНИТЬ ВСЕ
       |    ВЫБРАТЬ
       |        СпрХарактеристики.Владелец,
       |        СпрХарактеристики.Ссылка
       |    ИЗ
       |        Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики
       |    {ГДЕ
       |        СпрХарактеристики.Владелец.* КАК Номенклатура,
       |        СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатуры}
       |    ) КАК СпрНоменклатура
       |//СОЕДИНЕНИЯ
       |";

...
// ДОБАВИЛ
мСоответствиеНазначений = Новый Соответствие;

       ТаблицаПолей = Новый ТаблицаЗначений;
       ТаблицаПолей.Колонки.Добавить("ПутьКДанным");  // описание поля запроса поля, для которого добавляются свойства и категории. Используется в условии соединения с регистром сведений, хранящим значения свойств или категорий

       ТаблицаПолей.Колонки.Добавить("Представление");// представление поля, для которого добавляются свойства и категории.

       ТаблицаПолей.Колонки.Добавить("Назначение");   // назначение свойств/категорий объектов для данного поля

       ТаблицаПолей.Колонки.Добавить("ТипЗначения");  // тип значения поля, для которого добавляются свойства и категории. Используется, если не установлено назначение

       ТаблицаПолей.Колонки.Добавить("НетКатегорий"); // признак НЕиспользования категорий для объекта



       НоваяСтрока = ТаблицаПолей.Добавить();
       НоваяСтрока.ПутьКДанным = "СпрНоменклатура.Номенклатура";
       НоваяСтрока.Представление = "Номенклатура";
       НоваяСтрока.Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;

       ТекстПоляКатегорий = "";
       ТекстПоляСвойств = "";

       // Добавим строки запроса, необходимые для использования свойств и категорий

       УправлениеОтчетами.ДобавитьВТекстСвойстваИКатегории(ТаблицаПолей, ТекстЗапроса, СтруктураПредставлениеПолей, мСоответствиеНазначений, ПостроительОтчета.Параметры, , ТекстПоляКатегорий, ТекстПоляСвойств, , , , , , мСтруктураДляОтбораПоКатегориям);

...
       
Отборы заполняются. Делаю отбор по свойству.
При заполнении "по установленным параметрам" Выдается ошибка:
"Microsoft OLE DB Provider for SQL Server: При оптимизации запроса обработчик запросов исчерпал пространство стека. Упростите запрос."

Что не так в запросе? К стандартному запросу добавил только //СВОЙСТВА и //СОЕДИНЕНИЯ

8.2 Конф УТ 10.3.18.5
1 ExRq
 
15.11.12
15:04
Есть предположения?
Или может Есть посмотреть подобный "рабочий" запрос.
2 х86
 
15.11.12
15:07
(0)нафик свойства, нафик категории, нафик рлс
3 ExRq
 
15.11.12
15:09
Как нафик..нужно отбирать данные )
4 х86
 
15.11.12
15:10
(3)руками впиши
5 х86
 
15.11.12
15:10
(4)+типизируй, явно выражай
6 ПиН
 
15.11.12
15:11
классическая ошибка - использование в запросе составного значения, за такое на экзамене по спецу ставят твердое 2
7 ExRq
 
15.11.12
15:15
(6) А как сделать тогда?
8 ExRq
 
15.11.12
15:42
Дайте хоть примерчик, кто уже делал такое?
9 Лефмихалыч
 
15.11.12
15:50
+(5) я бы даже сказал
http://gyazo.com/b17fc647f9cdb364bf5989464d8271fc.png
10 ExRq
 
15.11.12
15:54
(5)(9) Так что выражать или типизировать? Это ведь штатный механизм работы со свойствами, он сам заполняет текст запроса. Или что я тут невкуриваю?
11 ExRq
 
15.11.12
17:03
Сделал так - теперь работает.
Что посоветуете оптимизировать?

ТекстЗапроса =   "ВЫБРАТЬ
       |    ИСТИНА КАК Печать,
       |    ВложенныйЗапрос.Номенклатура,
       |    ВложенныйЗапрос.ХарактеристикаНоменклатуры,
       |    ВложенныйЗапрос.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
       |    0 КАК Цена,
       |    1 КАК Количество
       |//СВОЙСТВА
       |{ВЫБРАТЬ
       |    Номенклатура.*,
       |    ХарактеристикаНоменклатуры.*}
       |ИЗ
       |    (ВЫБРАТЬ
       |        Номенклатура.Ссылка КАК Номенклатура,
       |        ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
       |    {ВЫБРАТЬ
       |        Номенклатура.*,
       |        ХарактеристикаНоменклатуры.*}
       |    ИЗ
       |        Справочник.Номенклатура КАК Номенклатура
       |    {ГДЕ
       |        Номенклатура.Ссылка.* КАК Номенклатура,
       |        (ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)).* КАК ХарактеристикаНоменклатуры}
       |    
       |    ОБЪЕДИНИТЬ ВСЕ
       |    
       |    ВЫБРАТЬ
       |        ХарактеристикиНоменклатуры.Владелец,
       |        ХарактеристикиНоменклатуры.Ссылка
       |    {ВЫБРАТЬ
       |        (ХарактеристикиНоменклатуры.Владелец).* КАК Номенклатура}
       |    ИЗ
       |        Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
       |    {ГДЕ
       |        ХарактеристикиНоменклатуры.Ссылка.* КАК ХарактеристикаНоменклатуры,
       |        ХарактеристикиНоменклатуры.Владелец.* КАК Номенклатура}) КАК ВложенныйЗапрос
       |//СОЕДИНЕНИЯ"  ;
12 ExRq
 
16.11.12
15:14
Всеравно отказывает.
ВОТ ЧТО УВИДЕЛ: результат запроса в (0) в файловом варианте появляется буквально за 2-3 секунды, а при запуске на SQL висит секунд 20-30 и валится с ошибкой из (0).

Уважаемые, прошу помощи! В чем может быть причина, может нужны какие нибудь спец настройки на SQL сервере.
MS SQL 2005
HELP!
13 ExRq
 
17.11.12
11:16
Оказалось дело совсем не в запросе а то что после него.
Вот правильный код после запроса, может кому пригодиться (с ним работает).

НастройкаОтчета = ПостроительОтчета.ПолучитьНастройки(Истина, Истина, Истина, Истина);

   
   Если ПустаяСтрока(ТекстЗапроса) = Ложь Тогда
       ПостроительОтчета.Текст = ТекстЗапроса;
   КонецЕсли;

       СтруктураПредставлениеПолей = Новый Структура;
       СоответствиеНазначений = Новый Соответствие;
       
       ТаблицаПолей = Новый ТаблицаЗначений;
       ТаблицаПолей.Колонки.Добавить("ПутьКДанным");  // описание поля запроса поля, для которого добавляются свойства и категории. Используется в условии соединения с регистром сведений, хранящим значения свойств или категорий
       ТаблицаПолей.Колонки.Добавить("Представление");// представление поля, для которого добавляются свойства и категории.
       ТаблицаПолей.Колонки.Добавить("Назначение");   // назначение свойств/категорий объектов для данного поля
       //ТаблицаПолей.Колонки.Добавить("ТипЗначения");  // тип значения поля, для которого добавляются свойства и категории. Используется, если не установлено назначение
       ТаблицаПолей.Колонки.Добавить("НетКатегорий"); // признак НЕиспользования категорий для объекта
       
       ТекстПоляКатегорий = "";
       ТекстПоляСвойств = "";
       
       ТаблицаПолей.Очистить();
       
       НоваяСтрока = ТаблицаПолей.Добавить();
       НоваяСтрока.ПутьКДанным = "СпрНоменклатура.Номенклатура";
       НоваяСтрока.Представление = "Номенклатура";
       НоваяСтрока.Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура;
       
       ТекстЗапроса = ПостроительОтчета.Текст;
       УправлениеОтчетами.ДобавитьВТекстСвойстваИКатегории(ТаблицаПолей, ТекстЗапроса, СтруктураПредставлениеПолей, СоответствиеНазначений, ПостроительОтчета.Параметры,, ТекстПоляКатегорий, ТекстПоляСвойств,, "//СВОЙСТВА", "//КАТЕГОРИИ", "//СОЕДИНЕНИЯ", , мСтруктураДляОтбораПоКатегориям);
       ПостроительОтчета.Текст = ТекстЗапроса;
       
       УправлениеОтчетами.УстановитьТипыЗначенийСвойствИКатегорийДляОтбора(ПостроительОтчета, ТекстПоляКатегорий, ТекстПоляСвойств, СоответствиеНазначений, СтруктураПредставлениеПолей);
       УправлениеОтчетами.ЗаполнитьПредставленияПолей(СтруктураПредставлениеПолей, ПостроительОтчета);

       ПостроительОтчета.УстановитьНастройки(НастройкаОтчета, Истина, Истина, Истина, Истина);
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.