helpf.pro
Регистрация

v8: Отбор в запросе

mik_mihka
16.07.2014 17:09Прочитано: 15814

Здравствуйте, объясните пожалуйста, как в запросе указать параметры, которые бы при выборе элемента справочника - устанавливали отбор по элементу, а при выборе группы - всех элементов входящих в эту группу?

запрос который отрабатывается только по элементу:

ВЫБРАТЬ   Продажи.Номенклатура,  Продажи.Количество,  Продажи.СтоимостьБезСкидок,  Продажи.Стоимость,  Продажи.ДокументПродажи.Ответственный,  Продажи.ПериодИЗ  РегистрНакопления.Продажи КАК ПродажиГДЕ  Продажи.Номенклатура В(&Номенклатура)  И Продажи.Период МЕЖДУ &начПер И &КонПер

Yandex
Возможно, вас также заинтересует
Реклама на портале
Mokey
16.07.2014 17:18Ответ № 1

Как вариант, оставить так, как есть, а при выборе элемента в параметр запроса Номенклатура записывать либо один элемент, либо выборку по родителю.

Параметр Номенклатура в данном слкчае - это список значений.

mik_mihka
16.07.2014 17:27Ответ № 2

Тоесть, я перехватываю обработчик выбора номенклатуры, создаю таблицу значений,в которой либо один элемент, либо элементы из группы и потом эту таблицу передаю в запрос, так?

mik_mihka
16.07.2014 17:28Ответ № 3

поправочка : не таблицу , а список значений.

E_Migachev
16.07.2014 19:01Ответ № 4

ты про это?

Код 1C v 8.2 УП
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Код,
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| (Номенклатура.Родитель В ИЕРАРХИИ (&Родитель)
| ИЛИ &Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
| И (Номенклатура.Ссылка = &СсылкаНаЭлемент ИЛИ &СсылкаНаЭлемент = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))";
Запрос.УстановитьПараметр("Родитель", Справочники.Номенклатура.ПустаяСсылка());
Запрос.УстановитьПараметр("СсылкаНаЭлемент", Справочники.Номенклатура.НайтиПоКоду("00027"));


Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;

Grekk
17.07.2014 00:37Ответ № 5
Код 1C v 8.х
 
ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот, ИЗ РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, , Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты

Параметр &Номенклатура может быть Элемент, Группа или СписокЗначений в который входят и элементы и группы

mik_mihka
17.07.2014 09:48Ответ № 6

Спасибо, с "оборотами" получилось без создания списка значений.

mik_mihka
17.07.2014 09:49Ответ № 7
Вопрос закрыт!
mik_mihka
17.07.2014 13:12Ответ № 8

Составил запрос, в консоле запросов отрабатывается, перенес в отчет, выдает ошибку "Не задано значение параметра "НачДата" <<?>>&НачДата,  хоты в отладчике проверяю- значение есть. В чём моя ошибка?

Код 1C v 8.х
   Запрос.Текст = "ВЫБРАТЬ  |  ПродажиОбороты.Номенклатура КАК Номенклатура,  |  МАКСИМУМ(ПродажиОбороты.КоличествоОборот) КАК Количество,  |  МАКСИМУМ(ПродажиОбороты.СтоимостьБезСкидокОборот) КАК СтоимостьБезСкидокОборот,  |  МАКСИМУМ(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,  |  МАКСИМУМ(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена) КАК Цена  |ИЗ  |  РегистрНакопления.Продажи.Обороты(  |  &НачДата,  |  &КонДата,  |  Период,  |  Номенклатура В ИЕРАРХИИ (&Номенклатура)  |  И ДокументПродажи.Ответственный = &Ответственный) КАК ПродажиОбороты  |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&КонДата, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних  |  ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура  |  |СГРУППИРОВАТЬ ПО  |  ПродажиОбороты.Номенклатура  |АВТОУПОРЯДОЧИВАНИЕ";  Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ДокументПродажи.Ответственный = &Ответственный)",?(ЗначениеЗаполнено(Менеджер),"И ДокументПродажи.Ответственный = &Ответственный)",")"));     РезультатЗапроса = Запрос.Выполнить();   
mik_mihka
17.07.2014 13:17Ответ № 9
   
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("&НачДата",ДатаНач );
    Запрос.УстановитьПараметр("&КонДата",КонецДня(ДатаКон ));
    Запрос.УстановитьПараметр("&Номенклатура",Товар );
    Запрос.УстановитьПараметр("&Ответственный",Менеджер );

[/pre]
DJ_Serega
17.07.2014 14:41Ответ № 10

(9) может переменна "ДатаНач" не имеет тип дата?

mik_mihka
17.07.2014 14:51Ответ № 11

mik_mihka
17.07.2014 14:51Ответ № 12

нет, тип - дата

DJ_Serega
17.07.2014 15:23Ответ № 13

тьфу ты... при установке параметра не нужно "&" ) Там без него нужно =)

DJ_Serega
17.07.2014 15:25Ответ № 14

Тоесть так:

Код 1C v 8.х
 Запрос.УстановитьПараметр("НачДата", ДатаНач);   
mik_mihka
17.07.2014 15:41Ответ № 15

)  Спасибо

mik_mihka
18.07.2014 14:39Ответ № 16

Вопрос как мне сделать, что бы при обходе выборки, в ней присутствовало название группы, потом все элементы группы ?

Установив параметр 

Номенклатура В ИЕРАРХИИ (&Номенклатура)[/pre]

у меня в выборке только все элементы групп.

а в выводе в макет, я хочу их сгруппировать по группам.

DJ_Serega
18.07.2014 14:59Ответ № 17

Обход сделай по иерархии. Там где Запрос.Выполнить().Выбрать(...);

mik_mihka
18.07.2014 16:00Ответ № 18
Код 1C v 8.х
 

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

А в цикле - как мне найти группу?

Код 1C v 8.х
 

Пока Выборка.Следующий() Цикл
Если Выборка.Номенклатура.ЭтоГруппа Тогда
         Сообщить("Группа "+Выборка.Номенклатура);
КонецЕсли;

сообщение не выводит, такое впечатление, что при запросе уже исключены группы.

DJ_Serega
19.07.2014 15:59Ответ № 19
Код 1C v 8.х
 	Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| Затраты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Затраты КАК Затраты
|ИТОГИ ПО
| Ссылка ИЕРАРХИЯ";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаСсылка.Следующий() Цикл
// Вставить обработку выборки ВыборкаСсылка
КонецЦикла;
DJ_Serega
19.07.2014 15:59Ответ № 20

вот так не работает?

mik_mihka
21.07.2014 00:08Ответ № 21

неа, иерархии нет - ошибка на нее. по родителю написал, но при выборке появилась строка с итогами, но наменования и родителя в ней нет.

mik_mihka
21.07.2014 09:22Ответ № 22
Код 1C v 8.х
     Запрос.Текст = "ВЫБРАТЬ
                   |    ПродажиОбороты.Номенклатура КАК Номенклатура,
                   |    СУММА(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0)) КАК Количество,
                   |    СУММА(ЕСТЬNULL(ПродажиОбороты.СтоимостьБезСкидокОборот, 0)) КАК СтоимостьБезСкидокОборот,
                   |    СУММА(ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0)) КАК СтоимостьОборот,
                   |    СУММА(ЕСТЬNULL(ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена, 0)) КАК Цена
                   |ИЗ
                   |    РегистрНакопления.Продажи.Обороты(
                   |            &НачДата,
                   |            &КонДата,
                   |            Период,
                   |            Номенклатура В ИЕРАРХИИ (&Номенклатура)
                   |                И ДокументПродажи.Ответственный = &Ответственный) КАК ПродажиОбороты
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&КонДата, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
                   |        ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ПродажиОбороты.Номенклатура
                   |ИТОГИ ПО
                   |    Номенклатура ТОЛЬКО ИЕРАРХИЯ
                   |АВТОУПОРЯДОЧИВАНИЕ";

Вот так заработало. Всем Спасибо за помощь.

Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.