|
v7: Не раскрывается группировка в запросе | ☑ | ||
---|---|---|---|---|
0
Save
19.09.13
✎
15:53
|
Подскажите, пожалуйста!
Есть запрос ТекстЗапроса = "Период С ДатаНачала;//{{ЗАПРОС(Оборот) |Фирма = Регистр.Оборот.Фирма; |Товар = Регистр.Оборот.Товар; |Склад = Регистр.Оборот.Склад; |Партия = Регистр.Оборот.Партия; |Клиент = Регистр.Оборот.Клиент; |Регион = Регистр.Оборот.Клиент.Регион.Наименование; |Пост = Регистр.Оборот.Поставщик; |Произв = Регистр.Оборот.Производитель.Наименование; |ТекДок = Регистр.Оборот.ТекущийДокумент; |Прих = Регистр.Оборот.ТовПрих; |Расх = Регистр.Оборот.ТовРасх; |Ден = Регистр.Оборот.ОстатокДенСеб; |НСеб = Регистр.Оборот.НДССеб; |Роз = Регистр.Оборот.ОстатокДенРозн; |НРоз = Регистр.Оборот.НДСРозн; |Группировка Фирма упорядочить по Фирма.Наименование без групп; |Группировка Регион; |Группировка Произв; |Группировка Товар упорядочить по Товар.Наименование без групп; |Группировка Клиент упорядочить по Клиент.Наименование без групп; |Функция КоличПр = Сумма(Прих); |Функция КоличРа = Сумма(Расх); |Функция Себест = Сумма(Ден); |Функция НДС = Сумма(НСеб); |Функция Розн = Сумма(Роз); |Функция НДСР = Сумма(НРоз); |"//}}ЗАПРОС ; При обходе не раскрывается группировка по клиенту, т.е. выводится только 1-й клиент, остальные - нет. А производитель выводится 2 раза. Такое впечатление, что мешает группировка по региону. Если ее убрать и заменить на другую (например, склад), то все в порядке. |
|||
1
KishMish
19.09.13
✎
16:00
|
Группировка Регион;
Регион у тебя строка. возможно в этом дело? |
|||
2
Chum
19.09.13
✎
16:04
|
Попробуй убрать .Наименование
Пусть группируется по объектам Регион и Производитель, на не по строкам |
|||
3
Save
19.09.13
✎
16:15
|
Ой, прошу прощения! Это не тот запрос. Вот он.
ТекстЗапроса = "Период С ДатаНачала;//{{ЗАПРОС(Оборот) |Фирма = Регистр.Оборот.Фирма; |Товар = Регистр.Оборот.Товар; |Склад = Регистр.Оборот.Склад; |Партия = Регистр.Оборот.Партия; |Клиент = Регистр.Оборот.Клиент; |Регион = Регистр.Оборот.Клиент.Регион; |Пост = Регистр.Оборот.Поставщик; |Произв = Регистр.Оборот.Производитель; |ТекДок = Регистр.Оборот.ТекущийДокумент; |Прих = Регистр.Оборот.ТовПрих; |Расх = Регистр.Оборот.ТовРасх; |Ден = Регистр.Оборот.ОстатокДенСеб; |НСеб = Регистр.Оборот.НДССеб; |Роз = Регистр.Оборот.ОстатокДенРозн; |НРоз = Регистр.Оборот.НДСРозн; |Группировка Фирма упорядочить по Фирма.Наименование без групп; |Группировка Регион упорядочить по Регион.Наименование без групп;; |Группировка Произв упорядочить по Регион.Наименование без групп;; |Группировка Товар упорядочить по Товар.Наименование без групп; |Группировка Клиент упорядочить по Клиент.Наименование без групп; |Функция КоличПр = Сумма(Прих); |Функция КоличРа = Сумма(Расх); |Функция Себест = Сумма(Ден); |Функция НДС = Сумма(НСеб); |Функция Розн = Сумма(Роз); |Функция НДСР = Сумма(НРоз); |"//}}ЗАПРОС |
|||
4
Стрелок
19.09.13
✎
16:16
|
код обхода давай
|
|||
5
Save
19.09.13
✎
16:20
|
Не могу исправить верхний пост. Это можно как-то сделать?
Получается вот еще что. Производитель, Клиент - это все из одного справочника элементы. Да еще и Регион - реквизит Клиента. Код обхода: Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; //// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Пока Запрос.Группировка(1)=1 Цикл Таб.ВывестиСекцию("Фирма"); Пока Запрос.Группировка(2)=1 Цикл Таб.ВывестиСекцию("Регион"); Пока Запрос.Группировка(3)=1 Цикл Таб.ВывестиСекцию("Производитель"); Пока Запрос.Группировка(4)=1 Цикл Таб.ВывестиСекцию("Товар"); Пока Запрос.Группировка(5)=1 Цикл Таб.ВывестиСекцию("Строка"); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
6
Стрелок
19.09.13
✎
16:23
|
косяков не вижу - высыпь в ТЗ и проанализируй что к чему
|
|||
7
KishMish
19.09.13
✎
16:33
|
|Группировка Произв упорядочить по Регион.Наименование без групп;;
|
|||
8
Save
19.09.13
✎
16:35
|
В ТЗ:
1-я строка: общий итог 2: Итог по фирме 3: Итог Фирма+Регион 4: Итог Фирма+Регион+Производитель+Товар+1-й клиент 5: Итог Фирма+Регион+Производитель 6: Итог Фирма+Регион+Производитель+Товар 7: Итог Фирма+Регион+Производитель+Товар+2-й клиент Т.е. 4-я строка должна бы быть перед 7-й. |
|||
9
Стрелок
19.09.13
✎
16:38
|
Производитель везде одинаковый? Точно или наименования совпадают?
|
|||
10
Стрелок
19.09.13
✎
16:38
|
проверь справочник "клиенты" на совпадение имён контрагентов
|
|||
11
KishMish
19.09.13
✎
16:39
|
(8) исправил ошибку в (7)
|
|||
12
Стрелок
19.09.13
✎
16:39
|
нафига "текдок" в запросе?
|
|||
13
Стрелок
19.09.13
✎
16:39
|
(11) это не ошибка
|
|||
14
Franchiser
гуру
19.09.13
✎
16:39
|
База SQL?
|
|||
15
KishMish
19.09.13
✎
16:42
|
(13) упорядочивание производителей по региону клиента? Это не ошибка?
|
|||
16
Стрелок
19.09.13
✎
16:43
|
(15) упс я думал ты про ";;" да ты прав это упорядочивание глупое
|
|||
17
Save
19.09.13
✎
16:45
|
KishMish, там нормально все, на самом деле там по производителю группировка стоит. Это универсальный отчет, в нем текст запроса формируется в зависимости от группировок, которые выбрал пользователь. И обход делается рекурсивной процедурой. Просто для проверки пришлось его вынести отдельно, т.к. иначе отладчик "выкидывает" из программы.
Поэтому и текдок в запросе, т.к. пользователь может запросить по документам. |
|||
18
Save
19.09.13
✎
16:45
|
База SQL
|
|||
19
Стрелок
19.09.13
✎
16:46
|
(17) так ты можешь дать РЕАЛЬНЫЙ код РЕАЛЬНОГО запроса и обхода группировок?
|
|||
20
Save
19.09.13
✎
16:46
|
Упорядочивание, да, глупое, но это опечатка просто, т.к. старый текст не сохранился.
|
|||
21
Save
19.09.13
✎
16:47
|
Вот вроде все проверено, работает так же:
Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "Период С ДатаНачала;//{{ЗАПРОС(Оборот) |Фирма = Регистр.Оборот.Фирма; |Товар = Регистр.Оборот.Товар; |Склад = Регистр.Оборот.Склад; |Партия = Регистр.Оборот.Партия; |Клиент = Регистр.Оборот.Клиент; |Регион = Регистр.Оборот.Клиент.Регион; |Пост = Регистр.Оборот.Поставщик; |Произв = Регистр.Оборот.Производитель; |ТекДок = Регистр.Оборот.ТекущийДокумент; |Прих = Регистр.Оборот.ТовПрих; |Расх = Регистр.Оборот.ТовРасх; |Ден = Регистр.Оборот.ОстатокДенСеб; |НСеб = Регистр.Оборот.НДССеб; |Роз = Регистр.Оборот.ОстатокДенРозн; |НРоз = Регистр.Оборот.НДСРозн; |Группировка Фирма упорядочить по Фирма.Наименование без групп; |Группировка Регион упорядочить по Регион.Наименование без групп; |Группировка Произв упорядочить по Произв.Наименование без групп; |Группировка Товар упорядочить по Товар.Наименование без групп; |Группировка Клиент упорядочить по Клиент.Наименование без групп; |Функция КоличПр = Сумма(Прих); |Функция КоличРа = Сумма(Расх); |Функция Себест = Сумма(Ден); |Функция НДС = Сумма(НСеб); |Функция Розн = Сумма(Роз); |Функция НДСР = Сумма(НРоз); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; //// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Таблица"); Пока Запрос.Группировка(1)=1 Цикл Таб.ВывестиСекцию("Фирма"); Пока Запрос.Группировка(2)=1 Цикл Таб.ВывестиСекцию("Регион"); Пока Запрос.Группировка(3)=1 Цикл Таб.ВывестиСекцию("Производитель"); Пока Запрос.Группировка(4)=1 Цикл Таб.ВывестиСекцию("Товар"); Пока Запрос.Группировка(5)=1 Цикл Таб.ВывестиСекцию("Строка"); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; //// Заполнение полей "Заголовок" // //Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); |
|||
22
Franchiser
гуру
19.09.13
✎
16:48
|
Возможно sql не корректно обрабатывает. Как то сравнивал с dbf: случай когда есть регистр в нем 2 измерения с типом одного справочника, запрос не всегда корректно выбирает реквизиты одного из измерений, где то даже писал про это. Поэтому попробуй проделать все то же самое на dbf.
|
|||
23
Стрелок
19.09.13
✎
16:49
|
а попробуй вообще убрать упорядочивание
|
|||
24
Franchiser
гуру
19.09.13
✎
16:52
|
и через 3 точки получать в запросе особенно sql это зло.
|
|||
25
Save
19.09.13
✎
16:53
|
(23) Не помогает. Без упорядочивания то же самое.
|
|||
26
Franchiser
гуру
19.09.13
✎
16:53
|
убери регион...
|
|||
27
KishMish
19.09.13
✎
16:53
|
исход из (22) для разделения одновидовых реквизитов все таки может тогда использовать наименование
типа |Пост = Регистр.Оборот.Поставщик.Наименовапние; и группировку соответно исправить |
|||
28
Franchiser
гуру
19.09.13
✎
16:55
|
(27) У меня была ошибка в случае, например, если взять в запросе Регион из Клиента, а потом из производителя. Так вот во втором случае брался регион не производителя а клиента повторно.
|
|||
29
Save
19.09.13
✎
16:56
|
(24) И что же делать?
|
|||
30
Стрелок
19.09.13
✎
16:56
|
(24) да ладно.. вот реально работающий прекрасно запрос
ТекстЗапроса=" |Период с ДатаНачала по ДатаКонца; |Фирма=Регистр.ПартииТоваров.Фирма; |ПричинаВозврата=Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.ПричинаВозврата; |ТекДок=Регистр.ПартииТоваров.ТекущийДокумент; |Супер=Регистр.ПартииТоваров.ТекущийДокумент.ПриходнаяНакладная.Контрагент.Агент.Супервайзер; |ВозвратВДалах=Регистр.ПартииТоваров.ОстатокТовараДал; |Функция ВозвратДал=Расход(ВозвратВДалах) Когда (ТекДок.Вид()=""ПриходнаяНакладная""); |Группировка Супер без групп; |Группировка ПричинаВозврата; |Группировка Неделя; //|Условие (Агент в СВ); |Условие (Фирма=глПустаяФирма); |Без Итогов;"; скуль 27 |
|||
31
Save
19.09.13
✎
16:57
|
(26) Без региона все отлично.
|
|||
32
Ёпрст
19.09.13
✎
16:57
|
(0) Клиент в регистре, измерение какого типа ?
<справочник> без вида поди еще , да ? |
|||
33
Стрелок
19.09.13
✎
16:57
|
(29) регистр оборотный или остатков?
|
|||
34
Franchiser
гуру
19.09.13
✎
16:57
|
(29) ну я бы убрал все группировки выгрузил в тз без группировок, потом у меня есть рекурсивная функция которая позволяет вывести ТЗ с группировками. Может не очень красиво, но работает. Я пока не знаю проблема ли в sql или нет, попробовал бы на dbf.
|
|||
35
Save
19.09.13
✎
16:59
|
(32) Измерение Справочник.Клиенты
|
|||
36
Save
19.09.13
✎
16:59
|
(33) Оборотный
|
|||
37
Franchiser
гуру
19.09.13
✎
17:01
|
(30)1с против этого в 1с 7.7 и 1с 8.2 т.к. это приводит к неявному соединению таблицы в sql. А 7.7 еще и не до конца заточена под работу в таком режиме.
|
|||
38
Ёпрст
19.09.13
✎
17:01
|
выкини упорядочивание везде и покажи скриншот результата
|
|||
39
Ёпрст
19.09.13
✎
17:03
|
И покажи результат этого:
Запрос.Выгрузить(ТЗ,0,0); ТЗ.ВыбратьСтроку(); |
|||
40
Стрелок
19.09.13
✎
17:03
|
(37) мне глубоко по.. (ну ты понял) против чего 1С. работает и прекрасно работает. всё остальное сказки от 1С для устрашения
|
|||
41
Save
19.09.13
✎
17:05
|
Попробую все, спасибо большое. Убегаю, завтра все выложу.
|
|||
42
Save
20.09.13
✎
11:32
|
(34) В dbf все работает правильно.
|
|||
43
Ёпрст
20.09.13
✎
11:38
|
запрос.ВключитьSQL(0) воткни, и в скуле заработаетт тогда.
правда, скорость маненько упадёт.. в разы. |
|||
44
Save
20.09.13
✎
11:44
|
(43) Так работает. Спасибо!
|
|||
45
Franchiser
гуру
23.09.13
✎
10:45
|
(43) Удивил, я не знал об этой недокументированной функции, возьму на заметку)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |