Имя: Пароль:
1C
 
СКД: Группировка в запросе
0 ПаDонаG
 
21.07.09
08:25
в конфе ТиС: есть необходимость выбрать приходные накладные - > из них выбрать товары, принадлежащие определенной группе и вывести все товары, удовлетворяющие условию (т.е. из выбранной группы) построчно с количеством. что-то неправильно группировки работают:
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ПриходнаяНакл = Документ.ПриходнаяНакл.ТекущийДокумент;
   |ДатаДок = Документ.ПриходнаяНакл.ДатаДок;
   |НомерДок = Документ.ПриходнаяНакл.НомерДок;
   |Наименование = Документ.ПриходнаяНакл.Товар.Наименование;
   |Страна = Документ.ПриходнаяНакл.Товар.СтранаИзготовитель;
   |Артикул = Документ.ПриходнаяНакл.Товар.Артикул;
   |Количество = Документ.ПриходнаяНакл.Количество;
   |Товар = Документ.ПриходнаяНакл.Товар;
   |Клиент = Документ.ПриходнаяНакл.Клиент;
   |Функция ЛитровСумма = Сумма(Количество*Артикул);  
       |Группировка Товар без групп;
   |Группировка ПриходнаяНакл;
   |Условие(Товар в ВыбГруппа);
   |"//}}ЗАПРОС
если это возможно - как правильно сделать группировки?
1 Vitello
 
21.07.09
08:27
|Группировка ПриходнаяНакл;

убери.
2 Ёпрст
 
гуру
21.07.09
08:27
(0) в чем выражается "неправильность" ?
3 dk
 
21.07.09
08:27
добавь группировку товар
или строка документа
4 dk
 
21.07.09
08:27
хотя торможу
5 ПаDонаG
 
21.07.09
08:28
(1) тогда останутся только последние значения количеств
6 ПаDонаG
 
21.07.09
08:29
(2) не всё количество выбирает, сейчас на маленьком периоде смотрю что именно не берет
7 Vitello
 
21.07.09
08:29
(5)Так, а ты что хочешь получить то?
8 ПаDонаG
 
21.07.09
08:32
все приходные накладные, а из них все товары с количеством
приход. накладная | товар | количество
в группировке по приходной накладной
9 Ёпрст
 
гуру
21.07.09
08:32
(6) Не верю.. получаешь ровно то, что просишь..  А по-поводу количества, поди смотришь его как Запрос.Количество ? :))))))))))))))))))))))
Тогда не удивительно...Функцию добавь , чтоб количество суммировал.
10 Valery
 
21.07.09
08:33
Я бы выкинул из запроса такие позиции как
   |Наименование = Документ.ПриходнаяНакл.Товар.Наименование;
   |Страна = Документ.ПриходнаяНакл.Товар.СтранаИзготовитель;
   |Артикул = Документ.ПриходнаяНакл.Товар.Артикул;

невижу в них смысла ели есть   |Товар = Документ.ПриходнаяНакл.Товар;

К решению сути вопроса это не относится, так для оптимизации.

(6) чудес не бывает, значит может по условию не проходит.
11 ПаDонаG
 
21.07.09
08:35
(9) в том то всё и дело, что не надо мне функцию!! с ней правильно считает, а надо прямо построчно
12 ПаDонаG
 
21.07.09
08:36
(9) чтобы все строки вывел выбранные, не объединяя и не суммирую кол-во
13 Darych
 
21.07.09
08:36
мне вот это понравилось: "Сумма(Количество*Артикул)"
14 Ёпрст
 
гуру
21.07.09
08:36
(11) Тогда выкини |Группировка Товар и заместо неё |Группировка СтрокаДокумента;
15 Ёпрст
 
гуру
21.07.09
08:36
(13) Чем ?
16 ПаDонаG
 
21.07.09
08:37
(13) ну тут свои заморочки, там другие данные, просто поле с таким наименованием осталось
17 Darych
 
21.07.09
08:37
зачем их перемножать?
18 Valery
 
21.07.09
08:38
(17) там литраж у нах забит.
19 Ёпрст
 
гуру
21.07.09
08:38
(17) Ну мало ли, что человек в артикуле хранит, например, ёмкость или доп. коэффициент.
20 ПаDонаG
 
21.07.09
08:39
(18) а ты откуда знаешь? )))
21 Darych
 
21.07.09
08:39
аа... типа название реквизита оставил, чтоб никто не догодалсо
22 ПаDонаG
 
21.07.09
08:39
(14) а как объявить строкуДокумента в запросе?
23 Vitello
 
21.07.09
08:40
(22)Просто сделай как в (14)
24 Ёпрст
 
гуру
21.07.09
08:40
(22) Вот прям так как в (14) и копипасти.. СтрокаДокумента - предопределенная группировка в запросе.
25 Ёпрст
 
гуру
21.07.09
08:43
Да.. еще |Группировка ПриходнаяНакл; либо сдвинь наверх, либо вообще выкинь..
26 ПаDонаG
 
21.07.09
08:45
(22) выкидывал - не то, сдвигал - опять не то показывает :-(
чёт я запутался - должно ж работать
27 Ёпрст
 
гуру
21.07.09
08:48
Ё...
   |Группировка ПриходнаяНакл;
   |Группировка СтрокаДокумента;
   |Условие(Товар в ВыбГруппа);

Запрос.Выполнить(ТекстЗапроса);
Запрос.Выгрузить(ТЗ,1,0);
28 Ёпрст
 
гуру
21.07.09
08:48
+27 ТЗ.ВыбратьСтроку()...
29 ПаDонаG
 
21.07.09
08:49
(27) ну да, только я сразу в печ.форму вывожу
30 DrZombi
 
гуру
21.07.09
08:50
(26)Если тебе нужен из документа строчки, то пишешь такой запрос:

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

   |Период с ВыбНачПериода по ВыбКонПериода;
   |ПриходнаяНакл = Документ.ПриходнаяНакл.ТекущийДокумент;
   |Группировка ПриходнаяНакл;
   |"//}}ЗАПРОС


А ужо в цикле делаешь след

ТЗ_Строк=СоздатьОбъект("ТаблицаЗначений");
Пока Запрос.Группировка(1)=1 цикл
    Док=Запрос.ПриходнаяНакл;
    ТЗ_Строк.Очистить();
    Док.ВыгрузитьТабличнуюЧасть(ТЗ_Строк);
    ТЗ_Строк.ВыбратьСтроки();
    ... И в цикле перебираешь нужный тебе товар ;)
КонецЦикла;
31 Ёпрст
 
гуру
21.07.09
08:51
(30) П...ц
32 Ёпрст
 
гуру
21.07.09
08:51
(29) и... есть какая то разница ?
33 Darych
 
21.07.09
08:51
(30) а зачем запрос тогда)))))))))))))))))))))))?
34 DrZombi
 
гуру
21.07.09
08:52
(31)Человеку надо построчно без группировок ;)
Вот пусчай перебирает по циклу ;)
35 DrZombi
 
гуру
21.07.09
08:52
(33)А вот тут ты правельно заметил, но заметит ли аВтор?
36 ПаDонаG
 
21.07.09
08:53
(34) группировка только по приходной накладной
но без запроса много дольше будет, об этом я уже думал
37 DrZombi
 
гуру
21.07.09
08:54
(36)А счего ты решил?
Но и в запросе можно добавить:

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

   |Период с ВыбНачПериода по ВыбКонПериода;
   |ПриходнаяНакл = Документ.ПриходнаяНакл.ТекущийДокумент;
   |Товар         = Документ.ПриходнаяНакл.Товар;
   |Группировка ПриходнаяНакл;
   |Условие(Товар в ВыбГруппа);
   |"//}}ЗАПРОС
38 DrZombi
 
гуру
21.07.09
08:55
(36)И будут у тебя накладные только с нужным товаром, но и все ровно тебе нужно в цикле обрабатывать условие
39 DrZombi
 
гуру
21.07.09
08:56
(36)Если бы у тебя была SQL база, то это можно было бы сделать одним запросом.
40 Ёпрст
 
гуру
21.07.09
08:58
(39) Ипать.. а в файловом варианте ужо нельзя ? Я что-то пропустил в этой жизни ?
41 ПаDонаG
 
21.07.09
08:58
(37) да я понял это, но хотел всё запросом выбрать
вот о том и речь! в вопросе как раз и написано "ЕСЛИ ЭТО ВОЗМОЖНО - как...."
42 Darych
 
21.07.09
08:58
(39) а чем джет или фокс плох для дбы?
43 Ёпрст
 
гуру
21.07.09
08:58
(38) какое условие ? Какой нах цикл ?
44 Ёпрст
 
гуру
21.07.09
08:59
(41) Пилять.. как в (27)
45 Darych
 
21.07.09
08:59
блн.. прс-ка все написал.. аавтор клюет
46 ПаDонаG
 
21.07.09
09:01
(32) разницы нет (44) НЕ РАБОТАЕТ! - (26)
47 Darych
 
21.07.09
09:02
точно птица
48 Ёпрст
 
гуру
21.07.09
09:03
(46) показывай весь текст запроса и его вывод..
ВСЁ работает, если что.
49 ПаDонаG
 
21.07.09
09:04
Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |Обрабатывать НеПомеченныеНаУдаление;
   |ПриходнаяНакл = Документ.ПриходнаяНакл.ТекущийДокумент;
   |ДатаДок = Документ.ПриходнаяНакл.ДатаДок;
   |НомерДок = Документ.ПриходнаяНакл.НомерДок;
   |Наименование = Документ.ПриходнаяНакл.Товар.Наименование;
   |Страна = Документ.ПриходнаяНакл.Товар.СтранаИзготовитель;
   |Артикул = Документ.ПриходнаяНакл.Товар.Артикул;
   |Количество = Документ.ПриходнаяНакл.Количество;
   |Товар = Документ.ПриходнаяНакл.Товар;
   |Клиент = Документ.ПриходнаяНакл.Клиент;
   //|Функция КоличествоСумма = Сумма(Количество);
   |Функция ЛитровСумма = Сумма(Количество*Артикул);  
   |Группировка ПриходнаяНакл;
   |Группировка СтрокаДокумента;
   |Условие(Товар в ВыбГруппа);
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей Товар
       Таб.ВывестиСекцию("ПриходнаяНакл");
   КонецЦикла;
   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
50 ПаDонаG
 
21.07.09
09:05
(47) точно, только не та! зае..ся повторять одно и тоже по неск-ко раз
51 Valery
 
21.07.09
09:05
Группировку товар первой надо добавить.
Я бы конечно через регистры слепил.
52 Ёпрст
 
гуру
21.07.09
09:05
(49) Это пять..
И где Обход 2-ой Группировки запроса ???????????????????????
53 ПаDонаG
 
21.07.09
09:07
(52) бляяя... сорри! говорю ж запутался уже
54 Ёпрст
 
гуру
21.07.09
09:07
(51) Зачем ? Он же хочет видеть так :

Приход
  Товар1
  Товар2
Приход2
  Товар1
  Товар2

....

Автор так надо ?
Или наеборот?

Товар1
 Приход1
 Приход2
Товар2
 Приход1
 Приход2
55 Valery
 
21.07.09
09:07
Я предполагал 2 вариант
56 Valery
 
21.07.09
09:09
У него так в (0) указано
57 ПаDонаG
 
21.07.09
09:09
(54) в (8) написал как вывод происходит
58 Ёпрст
 
гуру
21.07.09
09:10
(57) значит, оставляй как есть..и всё там работает..Обходи первую группировку - имей документ, обходи 2-ую группировку по строкам - имей свой товар и количество.
59 ПаDонаG
 
21.07.09
09:12
(58) спасибо дружище! всё работает
тупанул немного, извини
60 ПаDонаG
 
21.07.09
09:12
всем спасибо!!
Программист всегда исправляет последнюю ошибку.