Имя: Пароль:
1C
1С v8
Нужна помощь с отбором группы номенклатуры из регистра
,
0 Vladimir2503
 
25.03.13
10:07
Здравствуйте!!!
Помогите пожалуйста!!!
Пытаюсь переделать отчет.
В отчете установлен отбор по элементам,а мне нужно чтоб было по группам и элементам.

Платформа 8.2
Управление торговлей", редакция 10.3.14.3

Функция ОсновнойОтчет()
   ТабДок = Новый ТабличныйДокумент;
   
   Макет = ЭтотОбъект.ПолучитьМакет("Макет");
   
   Обл = Макет.ПолучитьОбласть("Шапка");
   Обл.Параметры.Дата = Дата;
   Обл.Параметры.Контрагент = ЭлементыФормы.ПолеВвода3.ВыделенныйТекст;    
   
   ТабДок.Вывести(Обл);
   
   Обл = Макет.ПолучитьОбласть("ШапкаТабл");
   ТабДок.Вывести(Обл);
   
   Обл = Макет.ПолучитьОбласть("Строка");
   
   ///////////////////////
   // ( Запрос: Остатки //
   ///////////////////////
   
   Запрос = Новый Запрос;
   
   Запрос.Текст = "
   |ВЫБРАТЬ
   |хр_ПереданныеОСОстатки.Организация,    
   |хр_ПереданныеОСОстатки.Контрагент КАК Контрагент,                    
   |хр_ПереданныеОСОстатки.Номенклатура,                
   |хр_ПереданныеОСОстатки.СерияНоменклатуры,
   |хр_ПереданныеОСОстатки.КоличествоОстаток    
   |ИЗ
   |    РегистрНакопления.хр_ПереданныеОС.Остатки(&Период,) КАК хр_ПереданныеОСОстатки
   |";
   Запрос.УстановитьПараметр("Период", Дата);
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   
   Если ОтборНоменклатура ИЛИ ОтборОрганизация ИЛИ ОтборКонтрагент Тогда
       Запрос.Текст = Запрос.Текст + "
       |ГДЕ
       |";
   КонецЕсли;
   
   Если ОтборОрганизация Тогда
       Запрос.Текст = Запрос.Текст + "
       |    (хр_ПереданныеОСОстатки.Организация = &Организация
       |        ИЛИ хр_ПереданныеОСОстатки.Организация = &Организация)
       |";
       Запрос.УстановитьПараметр("Организация", Организация);
   КонецЕсли;
   
   Если ОтборНоменклатура Тогда
       Запрос.Текст = Запрос.Текст +
       ?(ОтборОрганизация, "И ", "") + "
       |    (хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура
       |        ИЛИ хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура)
       |";
       Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   КонецЕсли;

   
   Если ОтборКонтрагент Тогда
       Запрос.Текст = Запрос.Текст +
       ?(ОтборОрганизация ИЛИ ОтборНоменклатура, "И ", "") + "
       |    хр_ПереданныеОСОстатки.Контрагент = &Контрагент
       |";
       Запрос.УстановитьПараметр("Контрагент", Контрагент);
   КонецЕсли;
   
   Запрос.Текст = Запрос.Текст + "
   |
   |УПОРЯДОЧИТЬ ПО
   |    Номенклатура,
   |   Контрагент
   |";
   
   Выб = Запрос.Выполнить().Выбрать();

   ///////////////////////
   // Запрос: Остатки ) //
   ///////////////////////
   
   Пока Выб.Следующий() Цикл
       Обл.Параметры.Номенклатура = Выб.Номенклатура;
       Обл.Параметры.Остаток = Выб.КоличествоОстаток;
       Обл.Параметры.Контрагент = Выб.Контрагент;
       Обл.Параметры.Серияноменклатуры = Выб.Серияноменклатуры;
       
       /////////////////////////////
       // ( Параметры расшифровки //
       /////////////////////////////
       Обл.Параметры.Р_Контр = Выб.Номенклатура;
       /////////////////////////////
       // Параметры расшифровки ) //
       /////////////////////////////
   
       ТабДок.Вывести(Обл);
   КонецЦикла;
   
   Возврат ТабДок;
КонецФункции
1 Паланик
 
25.03.13
10:09
В ИЕРАРХИИ
2 Паланик
 
25.03.13
10:10
И условия к тексту запроса как-то не по феншую делаешь.
3 Паланик
 
25.03.13
10:13
|    (хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура
       |        ИЛИ хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура)

...

|    (хр_ПереданныеОСОстатки.Организация = &Организация
       |        ИЛИ хр_ПереданныеОСОстатки.Организация = &Организация)

Это чтоб уж наверняка?)
4 Maxus43
 
25.03.13
10:14
(2)(3) :)
5 Паланик
 
25.03.13
10:18
И при заполнении параметров, если параметры и колонки одноименные, то делай через


Пока Выб.Следующий() Цикл
 Обл.Параметры.Заполнить();
 Обл.Параметры.Р_Контр = Выб.Номенклатура;
     
 ТабДок.Вывести(Обл);
КонецЦикла;
6 Паланик
 
25.03.13
10:19
Вот так:
Пока Выб.Следующий() Цикл
 Обл.Параметры.Заполнить(Выб);
 Обл.Параметры.Р_Контр = Выб.Номенклатура;
     
 ТабДок.Вывести(Обл);
КонецЦикла;
7 Торин
 
25.03.13
10:22
"отбор по элементам,а мне нужно чтоб было по группам и элементам" -- замените "хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура" на "хр_ПереданныеОСОстатки.Номенклатура в ИЕРАРХИИ(&Номенклатура")
8 Паланик
 
25.03.13
10:34
хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура ИЛИ хр_ПереданныеОСОстатки.Номенклатура = &Номенклатура

на
хр_ПереданныеОСОстатки.Номенклатура в ИЕРАРХИИ(&Номенклатура")
9 Vladimir2503
 
25.03.13
10:41
Если ОтборНоменклатура Тогда
       Запрос.Текст = Запрос.Текст +
       ?(ОтборОрганизация, "И ", "") + "
       |    (хр_ПереданныеОСОстатки.Номенклатура в ИЕРАРХИИ(&Номенклатура))
       |    или хр_ПереданныеОСОстатки.Номенклатура в ИЕРАРХИИ(&Номенклатура)
       |";
       Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   КонецЕсли;

Группу номенклатуры вывел ,сейчас другая проблема отбор по элементу контрагент не делает отбор
10 Maxus43
 
25.03.13
10:42
(9) ты зачем дублируешь условие через ИЛИ то?
11 Vladimir2503
 
25.03.13
10:49
Большое спасибо всем помогли чайнику!!!
12 Maxus43
 
25.03.13
10:55
(11) ответь на (10), я щас не усну спокойно же.
Или ты специально гадишь производительность? ИЛИ отключает использование индексов зачастую
13 razlagator
 
25.03.13
10:55
(10) товарищ овнокод пишет, не мешай
14 Vladimir2503
 
25.03.13
11:08
Maxus43
Я этот отчет не писал,он был написан до меня.
15 Maxus43
 
25.03.13
11:19
(14) ну переписывай, это быдлокод
16 Михаил Козлов
 
25.03.13
11:34
(14) Мне кажется, проще переписать запрос в каком-нибудь из универсальных отчетов.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.