|
Вопрос по Запросу | ☑ | ||
---|---|---|---|---|
0
SH_tan
20.02.14
✎
12:30
|
В запросе условие не дает сделать групировку, если убираю условие
И Прайс_Лист.СтатусНоменклатуры В(&СписФильтр2) групирует как надо, то есть сворачивает каждую группу. Как правильно написать условие подскажите плиз. |
|||
1
SH_tan
20.02.14
✎
12:31
|
ВЫБРАТЬ
Прайс_Лист.Ссылка КАК Ссылка, Прайс_Лист.Представление, Прайс_Лист.Наименование КАК ТоварНаименование, Прайс_Лист.Спецификация КАК ТоварСпецификация, Прайс_Лист.Размер КАК ТоварРазмер, Прайс_Лист.Код КАК ТоварКод, ВЫБОР КОГДА ЦеныКомпанииМелк.Цена <> 0 ТОГДА ЦеныКомпанииМелк.Цена ИНАЧЕ ЦеныКомпанииОпт.Цена КОНЕЦ КАК ЦенаМ, ЦеныКомпанииОпт.Цена КАК ЦенаО, ВЫБОР КОГДА ЦеныКомпанииРозн.Цена <> 0 ТОГДА ЦеныКомпанииРозн.Цена ИНАЧЕ ВЫБОР КОГДА ЦеныКомпанииМелк.Цена <> 0 ТОГДА ЦеныКомпанииМелк.Цена ИНАЧЕ ЦеныКомпанииОпт.Цена КОНЕЦ КОНЕЦ КАК ЦенаР, ЦеныКомпанииРозн.Цена, ЦеныКомпанииОпт.Цена КАК Цена1, ЦеныКомпанииМелк.Цена КАК Цена2, ВЫБОР КОГДА Прайс_Лист.Родитель = &ПустойПрайс ТОГДА Прайс_Лист.Ссылка ИНАЧЕ ВЫБОР КОГДА Прайс_Лист.Родитель.Родитель = &ПустойПрайс ТОГДА Прайс_Лист.Родитель ИНАЧЕ Прайс_Лист.Родитель.Родитель КОНЕЦ КОНЕЦ КАК Гр, ВЫБОР КОГДА Прайс_Лист.Родитель = &ПустойПрайс ТОГДА Прайс_Лист.Ссылка ИНАЧЕ ВЫБОР КОГДА Прайс_Лист.Родитель.Родитель = &ПустойПрайс ТОГДА Прайс_Лист.Ссылка ИНАЧЕ Прайс_Лист.Родитель КОНЕЦ КОНЕЦ КАК Подгр, ОстаткиТоваровОстатки.ОстатокТовараОстаток КАК Остатки, Прайс_Лист.СтатусНоменклатуры КАК Статус ИЗ Справочник.Номенклатура КАК Прайс_Лист ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &Розн) КАК ЦеныКомпанииРозн ПО Прайс_Лист.Ссылка = ЦеныКомпанииРозн.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &Опт) КАК ЦеныКомпанииОпт ПО Прайс_Лист.Ссылка = ЦеныКомпанииОпт.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &Мелкоопт) КАК ЦеныКомпанииМелк ПО Прайс_Лист.Ссылка = ЦеныКомпанииМелк.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки ПО Прайс_Лист.Ссылка = ОстаткиТоваровОстатки.Товар ГДЕ НЕ Прайс_Лист.Ссылка В (&СписокНеПечатать) И Прайс_Лист.Ссылка В ИЕРАРХИИ(&СписФильтр) И Прайс_Лист.СтатусНоменклатуры В(&СписФильтр2) УПОРЯДОЧИТЬ ПО Прайс_Лист.КодПорядка ИЕРАРХИЯ |
|||
2
vicof
20.02.14
✎
12:33
|
(0) Результат запроса - плоска ятаблица, какие сворачивания? ты о чем?
|
|||
3
SH_tan
20.02.14
✎
12:35
|
Потом я групирую
ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаДетали = Результат.Выбрать(); инд=1; Пока ВыборкаДетали.Следующий() Цикл Ур=0; ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); Если ВыборкаДетали.ссылка.СтатусНоменклатуры=перечисления.СтатусНоменклатуры.ПодЗаказ Тогда ОбластьДетальныхзаписей.Параметры.ЦенаО="под заказ"; КонецЕсли; Ур=ВыборкаДетали.Уровень(); Если ВыборкаДетали.Уровень()=1 Тогда Если НЕ ВыборкаДетали.Ссылка.ЭтоГруппа Тогда Ур=2; КонецЕсли; КонецЕсли; Если ПечататьОглавление Тогда ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Истина); Иначе ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Ложь); КонецЕсли; Если Ур=0 Тогда Эл=Спис0.Добавить(инд); ИначеЕсли Ур=1 Тогда Спис1.Добавить(инд); КонецЕсли; инд=инд+1; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); |
|||
4
Рэйв
20.02.14
✎
12:38
|
(3)У тебя нечего автогруппировать
|
|||
5
SH_tan
20.02.14
✎
12:38
|
Мне кажется в запросе
ГДЕ ....И Прайс_Лист.СтатусНоменклатуры В(&СписФильтр2) он убирает группы СписФильтр2 - это список значений Перечисления |
|||
6
SH_tan
20.02.14
✎
12:41
|
(4) но без этого
И Прайс_Лист.СтатусНоменклатуры В(&СписФильтр2) группирует (сворачивает в крестик элементы) |
|||
7
vicof
20.02.14
✎
12:41
|
(5) И ВЫБОР КОГДА ЕстьРодитель ТОГДА Прайс_Лист.СтатусНоменклатуры В(&СписФильтр2) ИНАЧЕ ИСТИНА КОНЕЦ
|
|||
8
SH_tan
20.02.14
✎
12:44
|
вот полностью код
Спис0=Новый СписокЗначений; Спис1=Новый СписокЗначений; СписФильтр=Новый СписокЗначений; Для Сч=0 По СписокГрупп.Количество()-1 Цикл Эл=списокГрупп.Получить(Сч); Если Эл.Пометка Тогда СписФильтр.Добавить(Эл.Значение); КонецЕсли; КонецЦикла; ДляОтчета1 = Ложь; ДляОтчета2 = Ложь; Знч = Перечисления.СтатусНоменклатуры; СписФильтр2 = Новый СписокЗначений; Для Сч=0 По списокГрупп2.Количество()-1 Цикл Эл=списокГрупп2.Получить(Сч); СписФильтр2.Добавить(Эл.Значение); Если Эл.Значение = Знч.ВПродаже ИЛИ Эл.Значение = Знч.ПодЗаказ ИЛИ Эл.Значение = Знч.Спецпредложение Тогда ДляОтчета2 = Истина; ИначеЕсли Эл.Значение = Знч.Уценка ИЛИ Эл.Значение = Знч.Распродажа ИЛИ Эл.Значение = Знч.СнятСПродажи Тогда ДляОтчета1 = Истина; ИначеЕсли Эл.Значение = Знч.ПодготовкаКПродаже Тогда Текст = "ru = ""По Статусу Подготовка к продаже отчет не формируется! Измените Фильтр!""; en = ""Select a document!"""; Предупреждение(НСтр(Текст), 10); Возврат; КонецЕсли; КонецЦикла; Если ДляОтчета1 И ДляОтчета2 Тогда Макет = ВнешняяОбработкаОбъект.ПолучитьМакет("Отчет2"); ИначеЕсли ДляОтчета1 Тогда Макет = ВнешняяОбработкаОбъект.ПолучитьМакет("Отчет1"); ИначеЕсли ДляОтчета2 Тогда Макет = ВнешняяОбработкаОбъект.ПолучитьМакет("Отчет2"); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Прайс_Лист.Ссылка КАК Ссылка, | Прайс_Лист.Представление, | Прайс_Лист.Наименование КАК ТоварНаименование, | Прайс_Лист.Спецификация КАК ТоварСпецификация, | Прайс_Лист.Размер КАК ТоварРазмер, | Прайс_Лист.Код КАК ТоварКод, | ВЫБОР | КОГДА ЦеныКомпанииМелк.Цена <> 0 | ТОГДА ЦеныКомпанииМелк.Цена | ИНАЧЕ ЦеныКомпанииОпт.Цена | КОНЕЦ КАК ЦенаМ, | ЦеныКомпанииОпт.Цена КАК ЦенаО, | ВЫБОР | КОГДА ЦеныКомпанииРозн.Цена <> 0 | ТОГДА ЦеныКомпанииРозн.Цена | ИНАЧЕ ВЫБОР | КОГДА ЦеныКомпанииМелк.Цена <> 0 | ТОГДА ЦеныКомпанииМелк.Цена | ИНАЧЕ ЦеныКомпанииОпт.Цена | КОНЕЦ | КОНЕЦ КАК ЦенаР, | ЦеныКомпанииРозн.Цена, | ЦеныКомпанииОпт.Цена КАК Цена1, | ЦеныКомпанииМелк.Цена КАК Цена2, | ВЫБОР | КОГДА Прайс_Лист.Родитель = &ПустойПрайс | ТОГДА Прайс_Лист.Ссылка | ИНАЧЕ ВЫБОР | КОГДА Прайс_Лист.Родитель.Родитель = &ПустойПрайс | ТОГДА Прайс_Лист.Родитель | ИНАЧЕ Прайс_Лист.Родитель.Родитель | КОНЕЦ | КОНЕЦ КАК Гр, | ВЫБОР | КОГДА Прайс_Лист.Родитель = &ПустойПрайс | ТОГДА Прайс_Лист.Ссылка | ИНАЧЕ ВЫБОР | КОГДА Прайс_Лист.Родитель.Родитель = &ПустойПрайс | ТОГДА Прайс_Лист.Ссылка | ИНАЧЕ Прайс_Лист.Родитель | КОНЕЦ | КОНЕЦ КАК Подгр, | ОстаткиТоваровОстатки.ОстатокТовараОстаток КАК Остатки, | Прайс_Лист.СтатусНоменклатуры КАК Статус |ИЗ | Справочник.Номенклатура КАК Прайс_Лист | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &Розн) КАК ЦеныКомпанииРозн | ПО Прайс_Лист.Ссылка = ЦеныКомпанииРозн.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &Опт) КАК ЦеныКомпанииОпт | ПО Прайс_Лист.Ссылка = ЦеныКомпанииОпт.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &Мелкоопт) КАК ЦеныКомпанииМелк | ПО Прайс_Лист.Ссылка = ЦеныКомпанииМелк.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки | ПО Прайс_Лист.Ссылка = ОстаткиТоваровОстатки.Товар |ГДЕ | НЕ Прайс_Лист.Ссылка В (&СписокНеПечатать) | И Прайс_Лист.Ссылка В ИЕРАРХИИ(&СписФильтр) //| И Прайс_Лист.СтатусНоменклатуры В(&СписФильтр2) | |УПОРЯДОЧИТЬ ПО | Прайс_Лист.КодПорядка ИЕРАРХИЯ"; ЦО=Константы.ОптоваяЦенаКомпании.Получить(); ЦР=ЦО; ЦМ=ЦО; ВЫборка=Справочники.ТипыЦен.Выбрать(); Пока Выборка.Следующий() Цикл Если Лев(ВРЕГ(ВЫборка.Ссылка.Наименование),8)="МЕЛКООПТ" Тогда ЦМ=Выборка.Ссылка; ИначеЕсли Лев(ВРЕГ(ВЫборка.Ссылка.Наименование),7)="РОЗНИЧН" Тогда ЦР=Выборка.Ссылка; КонецЕсли; КонецЦикла; Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Запрос.УстановитьПараметр("СписФильтр", СписФильтр.ВыгрузитьЗначения()); Запрос.УстановитьПараметр("СписФильтр2",СписФильтр2.ВыгрузитьЗначения()); Запрос.УстановитьПараметр("Мелкоопт", ЦМ); Запрос.УстановитьПараметр("Опт", ЦО); Запрос.УстановитьПараметр("Розн", ЦР); Запрос.УстановитьПараметр("СписокНеПечатать", СписокНеПечатать); Запрос.УстановитьПараметр("ПустойПрайс", Справочники.Номенклатура.ПустаяСсылка()); Результат = Запрос.Выполнить(); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("Шапка"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок.Очистить(); ОбластьЗаголовок.параметры.ДатаПрайса=ТекущаяДата(); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаДетали = Результат.Выбрать(); инд=1; Пока ВыборкаДетали.Следующий() Цикл Ур=0; ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); Если ВыборкаДетали.ссылка.СтатусНоменклатуры=перечисления.СтатусНоменклатуры.ПодЗаказ Тогда ОбластьДетальныхзаписей.Параметры.ЦенаО="под заказ"; КонецЕсли; Ур=ВыборкаДетали.Уровень(); Если ВыборкаДетали.Уровень()=1 Тогда Если НЕ ВыборкаДетали.Ссылка.ЭтоГруппа Тогда Ур=2; КонецЕсли; КонецЕсли; Если ПечататьОглавление Тогда ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Истина); Иначе ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Ложь); КонецЕсли; Если Ур=0 Тогда Эл=Спис0.Добавить(инд); ИначеЕсли Ур=1 Тогда Спис1.Добавить(инд); КонецЕсли; инд=инд+1; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал); Сообщить(Спис0.Количество()); Для Сч=0 По Спис0.Количество()-1 Цикл Эл=Спис0.Получить(Сч); Ном=Эл.Значение; Обл=ТабДок.Область(Ном+7,2,Ном+7,8); Обл.ЦветФона=WebЦвета.БледноЗолотистый; Обл.Шрифт=Новый Шрифт(,,Истина); КонецЦикла; Для Сч=0 По Спис1.Количество()-1 Цикл Эл=Спис1.Получить(Сч); Ном=Эл.Значение; Обл=ТабДок.Область(Ном+7,2,Ном+7,6); Обл.ЦветФона=WebЦвета.БледноЗеленый; Обл.Шрифт=Новый Шрифт(,,Истина); КонецЦикла; Если ПечататьОглавление Тогда ТЗ=Результат.Выгрузить(); ТЗ.Колонки.Добавить("НомерСтр"); ТЗ.колонки.Добавить("ВысСтроки"); ТабДок.ПоказатьУровеньГруппировокСтрок(1); ТабДок.ПоказатьУровеньГруппировокСтрок(2); КонецЕсли; ТабДок.ПолеСнизу=15; ТабДок.полеСверху=15; ТабДок.НижнийКолонтитул.ТекстСлева="Страница [&НомерСтраницы] из [&PagesTotal]"; ТабДок.НижнийКолонтитул.ТекстСправа="[&Дата]"; ТабДок.НижнийКолонтитул.Выводить=Истина; ТабДок.Автомасштаб=Истина; ТабДок.ПовторятьПриПечатиСтроки=ТабДок.Область("Шапка"); |
|||
9
vicof
20.02.14
✎
12:45
|
(8) лень читать, (7) уже делал?
|
|||
10
SH_tan
20.02.14
✎
12:46
|
(9) Сорь счас попробую
|
|||
11
SH_tan
20.02.14
✎
13:02
|
(9) не отрабатывает, берет по всем статусам
ВЫБОР КОГДА Прайс_Лист.Родитель ТОГДА Прайс_Лист.СтатусНоменклатуры В (&СписФильтр2) ИНАЧЕ ИСТИНА КОНЕЦ или я что то не правильно делаю.... |
|||
12
SH_tan
20.02.14
✎
13:21
|
даже не знаю как ее победить(
|
|||
13
vicof
20.02.14
✎
13:56
|
НЕ Прайс_Лист.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|||
14
SH_tan
20.02.14
✎
14:04
|
(13)
не выходит каменный цветок( |ГДЕ | НЕ Прайс_Лист.Ссылка В (&СписокНеПечатать) | И Прайс_Лист.Ссылка В ИЕРАРХИИ(&СписФильтр) | И НЕ Прайс_Лист.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) | И ВЫБОР | КОГДА Прайс_Лист.Родитель | ТОГДА Прайс_Лист.СтатусНоменклатуры В (&СписФильтр2) | ИНАЧЕ ИСТИНА | КОНЕЦ | |УПОРЯДОЧИТЬ ПО | Прайс_Лист.КодПорядка ИЕРАРХИЯ"; |
|||
15
vicof
20.02.14
✎
14:04
|
(14) Не тупи
ВЫБОР КОГДА НЕ Прайс_Лист.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ТОГДА Прайс_Лист.СтатусНоменклатуры В (&СписФильтр2) ИНАЧЕ ИСТИНА КОНЕЦ |
|||
16
SH_tan
20.02.14
✎
14:13
|
(15) он правильно отбирает, но подгруппы он не выдает, в конце выкидывает верхнего родителя, а надо блин чтобы он в крестик все сворачивал...и открывал по группам
|
|||
17
Franchiser
гуру
20.02.14
✎
14:14
|
(16) лень читать, думаю, тебе надо все кинуть во вложенный запрос и группировать там. Т.К. вложенные запросы в условие (лично встречал) "где", возможно и условие "В" способствуют появлению неявных связей таблиц, преобразованию исходного текста запроса и такому результату.
|
|||
18
SH_tan
20.02.14
✎
14:14
|
(15) вот тут может неправильно что?
|
|||
19
SH_tan
20.02.14
✎
14:14
|
инд=1;
Пока ВыборкаДетали.Следующий() Цикл Ур=0; ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); Если ВыборкаДетали.ссылка.СтатусНоменклатуры=перечисления.СтатусНоменклатуры.ПодЗаказ Тогда ОбластьДетальныхзаписей.Параметры.ЦенаО="под заказ"; КонецЕсли; Ур=ВыборкаДетали.Уровень(); Если ВыборкаДетали.Уровень()=1 Тогда Если НЕ ВыборкаДетали.Ссылка.ЭтоГруппа Тогда Ур=2; КонецЕсли; КонецЕсли; Если ПечататьОглавление Тогда ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Истина); Иначе ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Ложь); КонецЕсли; Если Ур=0 Тогда Эл=Спис0.Добавить(инд); ИначеЕсли Ур=1 Тогда Спис1.Добавить(инд); КонецЕсли; инд=инд+1; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); |
|||
20
SH_tan
20.02.14
✎
14:31
|
(17) попробую переделать спс
|
|||
21
Franchiser
гуру
20.02.14
✎
14:35
|
(20) попробуй может порядок в условии ГДЕ еще поменять Прайс_Лист.Ссылка В ИЕРАРХИИ(&СписФильтр) поставить на первое место, не уверен, но может поможет.
|
|||
22
Franchiser
гуру
20.02.14
✎
14:38
|
возможно проблема в том что в уловие где одновременно встречается для ССЫЛКИ и "В" и "В ИЕРАРХИИ" поэтому интерпретируется по-первому, но это предположение...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |