|
Построитель запроса. Отбор по свойствам номенклатуры. | ☑ | ||
---|---|---|---|---|
0
ExRq
15.11.12
✎
14:36
|
Добрый день
Дорабатываю Обработку "Печать ценников". Добавляю Заполнение ТЧ по свойствам номенклатуры Процедура ЗаполнитьПостроительОтчета() Экспорт ТекстЗапроса = " |ВЫБРАТЬ | ИСТИНА КАК Печать, | СпрНоменклатура.Номенклатура КАК Номенклатура, | СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, | 0 КАК Цена, | 1 КАК Количество |//СВОЙСТВА |ИЗ | (ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры | ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ГДЕ НЕ СпрНоменклатура.ЭтоГруппа | {ГДЕ | СпрНоменклатура.Ссылка.* КАК Номенклатура} | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | СпрХарактеристики.Владелец, | СпрХарактеристики.Ссылка | ИЗ | Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики | {ГДЕ | СпрХарактеристики.Владелец.* КАК Номенклатура, | СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатуры} | ) КАК СпрНоменклатура |//СОЕДИНЕНИЯ |"; ... // ДОБАВИЛ мСоответствиеНазначений = Новый Соответствие; ТаблицаПолей = Новый ТаблицаЗначений; ТаблицаПолей.Колонки.Добавить("ПутьКДанным"); // описание поля запроса поля, для которого добавляются свойства и категории. Используется в условии соединения с регистром сведений, хранящим значения свойств или категорий ТаблицаПолей.Колонки.Добавить("Представление");// представление поля, для которого добавляются свойства и категории. ТаблицаПолей.Колонки.Добавить("Назначение"); // назначение свойств/категорий объектов для данного поля ТаблицаПолей.Колонки.Добавить("ТипЗначения"); // тип значения поля, для которого добавляются свойства и категории. Используется, если не установлено назначение ТаблицаПолей.Колонки.Добавить("НетКатегорий"); // признак НЕиспользования категорий для объекта НоваяСтрока = ТаблицаПолей.Добавить(); НоваяСтрока.ПутьКДанным = "СпрНоменклатура.Номенклатура"; НоваяСтрока.Представление = "Номенклатура"; НоваяСтрока.Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура; ТекстПоляКатегорий = ""; ТекстПоляСвойств = ""; // Добавим строки запроса, необходимые для использования свойств и категорий УправлениеОтчетами.ДобавитьВТекстСвойстваИКатегории(ТаблицаПолей, ТекстЗапроса, СтруктураПредставлениеПолей, мСоответствиеНазначений, ПостроительОтчета.Параметры, , ТекстПоляКатегорий, ТекстПоляСвойств, , , , , , мСтруктураДляОтбораПоКатегориям); ... Отборы заполняются. Делаю отбор по свойству. При заполнении "по установленным параметрам" Выдается ошибка: "Microsoft OLE DB Provider for SQL Server: При оптимизации запроса обработчик запросов исчерпал пространство стека. Упростите запрос." Что не так в запросе? К стандартному запросу добавил только //СВОЙСТВА и //СОЕДИНЕНИЯ 8.2 Конф УТ 10.3.18.5 |
2 12 |
||
1
ExRq
15.11.12
✎
15:04
|
Есть предположения?
Или может Есть посмотреть подобный "рабочий" запрос. |
|||
2
х86
15.11.12
✎
15:07
|
(0)нафик свойства, нафик категории, нафик рлс
|
|||
3
ExRq
15.11.12
✎
15:09
|
Как нафик..нужно отбирать данные )
|
4 |
||
4
х86
15.11.12
✎
15:10
|
(3)руками впиши
|
5 |
||
5
х86
15.11.12
✎
15:10
|
(4)+типизируй, явно выражай
|
9 10 |
||
6
ПиН
15.11.12
✎
15:11
|
классическая ошибка - использование в запросе составного значения, за такое на экзамене по спецу ставят твердое 2
|
7 |
||
7
ExRq
15.11.12
✎
15:15
|
(6) А как сделать тогда?
|
|||
8
ExRq
15.11.12
✎
15:42
|
Дайте хоть примерчик, кто уже делал такое?
|
|||
9
Лефмихалыч
15.11.12
✎
15:50
|
10 |
|||
10
ExRq
15.11.12
✎
15:54
|
||||
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
|
Оказалось дело совсем не в запросе а то что после него.
Вот правильный код после запроса, может кому пригодиться (с ним работает). НастройкаОтчета = ПостроительОтчета.ПолучитьНастройки(Истина, Истина, Истина, Истина); Если ПустаяСтрока(ТекстЗапроса) = Ложь Тогда ПостроительОтчета.Текст = ТекстЗапроса; КонецЕсли; СтруктураПредставлениеПолей = Новый Структура; СоответствиеНазначений = Новый Соответствие; ТаблицаПолей = Новый ТаблицаЗначений; ТаблицаПолей.Колонки.Добавить("ПутьКДанным"); // описание поля запроса поля, для которого добавляются свойства и категории. Используется в условии соединения с регистром сведений, хранящим значения свойств или категорий ТаблицаПолей.Колонки.Добавить("Представление");// представление поля, для которого добавляются свойства и категории. ТаблицаПолей.Колонки.Добавить("Назначение"); // назначение свойств/категорий объектов для данного поля //ТаблицаПолей.Колонки.Добавить("ТипЗначения"); // тип значения поля, для которого добавляются свойства и категории. Используется, если не установлено назначение ТаблицаПолей.Колонки.Добавить("НетКатегорий"); // признак НЕиспользования категорий для объекта ТекстПоляКатегорий = ""; ТекстПоляСвойств = ""; ТаблицаПолей.Очистить(); НоваяСтрока = ТаблицаПолей.Добавить(); НоваяСтрока.ПутьКДанным = "СпрНоменклатура.Номенклатура"; НоваяСтрока.Представление = "Номенклатура"; НоваяСтрока.Назначение = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура; ТекстЗапроса = ПостроительОтчета.Текст; УправлениеОтчетами.ДобавитьВТекстСвойстваИКатегории(ТаблицаПолей, ТекстЗапроса, СтруктураПредставлениеПолей, СоответствиеНазначений, ПостроительОтчета.Параметры,, ТекстПоляКатегорий, ТекстПоляСвойств,, "//СВОЙСТВА", "//КАТЕГОРИИ", "//СОЕДИНЕНИЯ", , мСтруктураДляОтбораПоКатегориям); ПостроительОтчета.Текст = ТекстЗапроса; УправлениеОтчетами.УстановитьТипыЗначенийСвойствИКатегорийДляОтбора(ПостроительОтчета, ТекстПоляКатегорий, ТекстПоляСвойств, СоответствиеНазначений, СтруктураПредставлениеПолей); УправлениеОтчетами.ЗаполнитьПредставленияПолей(СтруктураПредставлениеПолей, ПостроительОтчета); ПостроительОтчета.УстановитьНастройки(НастройкаОтчета, Истина, Истина, Истина, Истина); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |