Имя: Пароль:
1C
1C 7.7
v7: Запрос по регистру Продажи ТиС
,
0 vie_za
 
04.09.12
16:25
Необходимо выбрать запросом все Элементы Номенклатуры,подчиненые папке ВыбТовар    
(включая содержимое всех низлежащих уровней)

ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.Продажи.Фирма;
   |Покупатель    = Регистр.Продажи.Покупатель;
   |Номенклатура    = Регистр.Продажи.Номенклатура;                
   |Поставщик        = Регистр.Продажи.Поставщик;
   |ТекущийДокумент      = Регистр.Продажи.ТекущийДокумент;    
   |Себест      = Регистр.Продажи.Себестоимость;
   |Количество  = Регистр.Продажи.Количество;
   |ПродСт      = Регистр.Продажи.ПродСтоимость;
   |Функция СуммаСебест      = Сумма(Себест);
   |Функция СуммаКоличество  = Сумма(Количество);
   |Функция СуммаПродСт      = Сумма(ПродСт);
   |Группировка Поставщик упорядочить по Поставщик.Наименование без групп;
   |Группировка Номенклатура ;
   |Группировка ТекущийДокумент;
   |Условие(Номенклатура.Родитель = Товар);"

Попробовал

   ТекстЗапроса =  ТекстЗапроса +
   "
   |Условие (Номенклатура в ВыбТовар);
   |Условие(Номенклатура.ЭтоГруппа()=0);";

не работает так как надо
1 Rie
 
04.09.12
16:27
(0) А "Условие(Номенклатура.Родитель=Товар);" не забыл убрать?
2 vie_za
 
04.09.12
16:31
(1) ну да,забыл...это было старая попытка объехать проблему

ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)

   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.Продажи.Фирма;
   |Покупатель     = Регистр.Продажи.Покупатель;
   |Номенклатура    = Регистр.Продажи.Номенклатура;                
   |Поставщик        = Регистр.Продажи.Поставщик;
   |ТекущийДокумент      = Регистр.Продажи.ТекущийДокумент;    
   |Себест      = Регистр.Продажи.Себестоимость;
   |Количество  = Регистр.Продажи.Количество;
   |ПродСт      = Регистр.Продажи.ПродСтоимость;
   |Функция СуммаСебест      = Сумма(Себест);
   |Функция СуммаКоличество  = Сумма(Количество);
   |Функция СуммаПродСт      = Сумма(ПродСт);
   |Группировка Поставщик упорядочить по Поставщик.Наименование без групп;
   |Группировка Номенклатура ;
   |Группировка ТекущийДокумент;
   |;"
3 Ёпрст
 
04.09.12
16:34
(2)

|Условие (Номенклатура в ВыбТовар);
|Группировка Номенклатура Все;
4 Ёпрст
 
04.09.12
16:35
и это, убери упорядочивание из текста запроса
5 vie_za
 
04.09.12
17:33
Поправил,но...уже почти час крутиться выполнение (((
6 WoodMan
 
04.09.12
17:35
(5) запрос час выполняется??
может где в обходе результатов запроса зациклил?
7 m-serg74
 
04.09.12
17:43
да с Итогами возможно и выполнение, неизвестно ведь что за период и объем доков в день
8 vie_za
 
05.09.12
09:54
(6) нет, много больше часа крутился именно Запрос..
(3) сделал так
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.Продажи.Фирма;
   |Покупатель    = Регистр.Продажи.Покупатель;
   |Номенклатура    = Регистр.Продажи.Номенклатура;                
   |Поставщик        = Регистр.Продажи.Поставщик;
   |ТекущийДокумент      = Регистр.Продажи.ТекущийДокумент;    
   |Себест      = Регистр.Продажи.Себестоимость;
   |Количество  = Регистр.Продажи.Количество;
   |ПродСт      = Регистр.Продажи.ПродСтоимость;
   |Функция СуммаСебест      = Сумма(Себест);
   |Функция СуммаКоличество  = Сумма(Количество);
   |Функция СуммаПродСт      = Сумма(ПродСт);
   //|Группировка Поставщик упорядочить по Поставщик.Наименование без групп;
   //|Группировка Номенклатура ;
   |Группировка ТекущийДокумент;" ;
   
   ТекстЗапроса =  ТекстЗапроса +
   "
   |Условие (Номенклатура в ВыбТовар);
   |Группировка Номенклатура Все;";


результат-полная ерунда,вместо всех Элементов вложенных групп ,выбирает сами Группы и выводит их  туеву хучу раз подряд
9 1Сергей
 
05.09.12
10:02
|Группировка Номенклатура Все Без Групп;";
10 big
 
05.09.12
10:10
1. Озвучь свою задачу более-менее внятно. Т.е. - что нужно получить на выходе.
2. Какой период данных выбираешь?
3. Какое примерно количество движени (документов) за период?
11 vie_za
 
05.09.12
10:16
(9) насколько я понимаю- так нельзя...
Либо Группировка Номенклатура Без Групп; либо Группировка Номенклатура Все


(10)
1.на выходе хочу получить документы поступления и реализации,в строках которых есть заданные Элементы номенклатуры
2.период-месяц
3.ну,допустим 400-600,вряд ли больше
12 vie_za
 
05.09.12
10:19
м.б. задачу можно решить с другого конца?

сначала выбрать нужные элементы номенклатуры  в ТЗ,
а потом существующий запрос натравить на эту ТЗ?
13 Ёпрст
 
05.09.12
10:23
(8) п...ц

Че тут можно сказать.. только ЭТО.
14 Ёпрст
 
05.09.12
10:24
Думать не пробовал, что пишешь ?
и сравни (0) с (8)
15 aka AMIGO
 
05.09.12
10:25
(12)у тебя есть папки с малым количеством номенклатуры? 2-3..10.. посмотри вначале на них, для скорости
16 Ёпрст
 
05.09.12
10:26
>>>на выходе хочу получить документы поступления и реализации,в строках которых есть заданные Элементы номенклатуры

Это не вяжется с Этим:

>>>Необходимо выбрать запросом все Элементы Номенклатуры

Определись, че те надо - либо ВСЕ элементы из справочника + продажи, или только ту номенклатуру, по которой были продажи.
17 Ёпрст
 
05.09.12
10:27
И еще, какое отношение " документы поступления" имеют к Продажному регистру ?!
18 big
 
05.09.12
10:27
1. Смотреть надо не регистр продажи, а регистр Партий или Остатков.
2. и 3. - это мелочь, а не обороты

Условие (Номенклатура в НужнаяГруппа)
или
Условие (Номенклатура в НужныйСписок)

Условие (ВидОперции в СписокНужныхВидовОперций)
или
Условие (ТекущийДокумент.вид() в СписокНужныхВидовДоков)

Группировка Номенклатура
Группировка ТекущийДокумент


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

на выходе таблица с документами
19 big
 
05.09.12
10:28
(18) + да, и ещё убрать ненужные поля и функции из запроса
20 lamme
 
05.09.12
10:33
а эта ...
|Условие(Номенклатура в Выбгруппа);
и
|Группировка Номенклатура Все Без Групп;
21 vie_za
 
05.09.12
10:51
Что то я уже и сам запутался и всех запутал...
Начну еще раз,с самого начала. был

   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.Продажи.Фирма;
   |Покупатель    = Регистр.Продажи.Покупатель;
   |Номенклатура    = Регистр.Продажи.Номенклатура;                
   |Поставщик        = Регистр.Продажи.Поставщик;
   |ТекущийДокумент      = Регистр.Продажи.ТекущийДокумент;    
   |Себест      = Регистр.Продажи.Себестоимость;
   |Количество  = Регистр.Продажи.Количество;
   |ПродСт      = Регистр.Продажи.ПродСтоимость;
   |Функция СуммаСебест      = Сумма(Себест);
   |Функция СуммаКоличество  = Сумма(Количество);
   |Функция СуммаПродСт      = Сумма(ПродСт);
   |Группировка Поставщик упорядочить по Поставщик.Наименование без групп;
   |Группировка Номенклатура ;
   |Группировка ТекущийДокумент;" ;
   
   Если Товар.Выбран()=1 тогда
       Если Товар.ЭтоГруппа()=1 тогда
       ТекстЗапроса =  ТекстЗапроса +
       "
       |Условие(Номенклатура.Родитель = Товар);";
       иначе    
       ТекстЗапроса =  ТекстЗапроса +
       "
       |Условие(Номенклатура = Товар);";
       КонецЕсли;
   КонецЕсли;    

который выбирал документы,в строках которых присутствовал выбранный пользователем Товар(Элемент или Группа).
И прекрасно работал.Но у него были ограничения...Если выбиралась папка в -в выборку попадали только элементы ЭТОЙ папки.Элементы вложенной папки в выборку не попадали....

И собственно,задача сводится к тому,чтобы в выборку документов
попадали те,в строках которых присутствовала номенклатура в выбранной папке и всех вложенных.

Приношу всем извинения за недостаточную и искаженную постановку в самом начале ветки.
Вот както так..
22 big
 
05.09.12
10:55
|Условие(Номенклатура.Родитель В Товар)
23 big
 
05.09.12
10:58
(22) тьху, мля, запутал уже.

Если Товар.ЭтоГруппа()=1 тогда
       ТекстЗапроса =  ТекстЗапроса +
       "
       |Условие(Номенклатура в Товар);";
24 Ёпрст
 
05.09.12
11:15
(21)

  // Если Товар.Выбран()=1 тогда
  //     Если Товар.ЭтоГруппа()=1 тогда
  //     ТекстЗапроса =  ТекстЗапроса +
  //     "
  //     |Условие(Номенклатура.Родитель = Товар);";
  //     иначе    
  //     ТекстЗапроса =  ТекстЗапроса +
  //     "
  //     |Условие(Номенклатура = Товар);";
  //     КонецЕсли;
  // КонецЕсли;    

  ТекстЗапроса =  ТекстЗапроса +"Условие(Номенклатура в Товар);";