|
v7: Подскажите, что не так с запросом | ☑ | ||
---|---|---|---|---|
0
bas28000
11.02.14
✎
11:57
|
Вот этот кусок кода не выдает ни единого документа, а если убрать группировку по дате документа, то документы в запросе появляются. Даты, само собой, заданы одинаково и там и там и в них есть искомые документы:
Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период с ДатаНачала по ДатаКонца; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |ЧекККМ = Документ.ЧекККМ.ТекущийДокумент; |ДатаДок = Документ.ЧекККМ.ДатаДок; |Касса = Документ.ЧекККМ.Касса; |ВидОперации = Документ.ЧекККМ.ВидОперации; |Фирма = Документ.ЧекККМ.Фирма; |ЮрЛицо = Документ.ЧекККМ.ЮрЛицо; |Группировка ЧекККМ упорядочить по ЧекККМ.ДатаДок; |Группировка ДатаДок; |Условие(ВидОперации = ВыбВидОперации); |Условие(Касса = ВыбКасса); |Условие(Фирма = ВыбФирма); |Условие(ЮрЛицо = ВыбЮрЛицо); |"; Состояние("Обработка запроса..."); Флаг = Запрос.Выполнить(ТекстЗапроса); Если Флаг = 0 Тогда Предупреждение("Запрос не выполнился!"); Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("АналитикаПоКассе"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Обработка полученных данных..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка("ЧекККМ") = 1 Цикл Пока Запрос.Группировка("ДатаДок") = 1 Цикл Сообщить(Запрос.ЧекККМ); КонецЦикла; КонецЦикла; |
|||
1
1Сергей
11.02.14
✎
12:06
|
местами поменяй группировки. Логично, что в одной дате может быть несколько документов, а не наоборот
|
|||
2
1Сергей
11.02.14
✎
12:10
|
//|Группировка ЧекККМ упорядочить по ЧекККМ.ДатаДок;
|Группировка ДатаДок; |Группировка Документ; |
|||
3
Diter
11.02.14
✎
12:11
|
дата док как и номер док в запросе НЕДОСТУПНЫ для группировок
|
|||
4
Diter
11.02.14
✎
12:12
|
аналогично и код справочника
|
|||
5
Diter
11.02.14
✎
12:12
|
высыпи запрос в ТЗ и убедись что ДатаДок пустая колонка
|
|||
6
1Сергей
11.02.14
✎
12:14
|
(3) да ну?
|
|||
7
Diter
11.02.14
✎
12:16
|
(6) проверь
|
|||
8
Diter
11.02.14
✎
12:16
|
и уж точно от порядка группировки НИЧЕГО не зависит ;)
|
|||
9
Ork
11.02.14
✎
12:17
|
(0) Лажа видимо здесь :
"|Группировка ЧекККМ упорядочить по ЧекККМ.ДатаДок; |Группировка ДатаДок;" Зачем две группировки с одним и тем же смыслом? Достаточно вот такого : "|Группировка День;" |
|||
10
Diter
11.02.14
✎
12:18
|
а если ему документы нужны?
|
|||
11
Diter
11.02.14
✎
12:19
|
а упорядычивать по датедок нет смысла. документы встанут по позиции, которая в себя и так дату включает
|
|||
12
Ork
11.02.14
✎
12:20
|
+ (9) Вообще все должно выглядеть примерно так :
"ТекстЗапроса = " |Период с ДатаНачала по ДатаКонца; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |Касса = Документ.ЧекККМ.Касса; |ВидОперации = Документ.ЧекККМ.ВидОперации; |Фирма = Документ.ЧекККМ.Фирма; |ЮрЛицо = Документ.ЧекККМ.ЮрЛицо; | |//************ Изменения здесь |Группировка День; |Группировка Документ; |//************ все будет сгруппировано по дням, внутри - по позиции документа. |Условие(ВидОперации = ВыбВидОперации); |Условие(Касса = ВыбКасса); |Условие(Фирма = ВыбФирма); |Условие(ЮрЛицо = ВыбЮрЛицо); |"; |
|||
13
1Сергей
11.02.14
✎
12:22
|
(7) проверил, группировка по датадок прекрасно работает
|
|||
14
bas28000
11.02.14
✎
12:23
|
Мне нужно вот что - есть документы, которые хотелось бы уже в запросе сгруппировать по дате, обсчитывать их суммы ТЧ и не париться с обработкой по дате в цикле.
|
|||
15
Diter
11.02.14
✎
12:24
|
(13) серьёзно? ну выложи текст. посмотрим
|
|||
16
Diter
11.02.14
✎
12:24
|
(14) замени группировку "ДатаДок" на День и наслаждайся. а вообще сделай как в 12 указано
|
|||
17
bas28000
11.02.14
✎
12:25
|
(14) В смысле, что я допустим хочу по документам получить средний чек за день. Для этого мне проще всего уже в запросе задать такую группировку, когда я сразу при обработке результатов запроса будут обходить все документы за день, считать свой средний чек, и потом переходить к следующему дню просто перейдя к очередной порции по группировке.
|
|||
18
Diter
11.02.14
✎
12:28
|
так и поставь вначале группировку "День" а потом "Док"
|
|||
19
Diter
11.02.14
✎
12:28
|
(13) прав. значит я забыл. но где то косяк с номером документа и датой точно был в запросе. что то не отрабатывало
|
|||
20
bas28000
11.02.14
✎
12:30
|
ОК, код стал таким:
Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период с ДатаНачала по ДатаКонца; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |ЧекККМ = Документ.ЧекККМ.ТекущийДокумент; |Касса = Документ.ЧекККМ.Касса; |ВидОперации = Документ.ЧекККМ.ВидОперации; |Фирма = Документ.ЧекККМ.Фирма; |ЮрЛицо = Документ.ЧекККМ.ЮрЛицо; |Группировка День; |Группировка Документ; |Условие(ВидОперации = ВыбВидОперации); |Условие(Касса = ВыбКасса); |Условие(Фирма = ВыбФирма); |Условие(ЮрЛицо = ВыбЮрЛицо); |"; Состояние("Обработка запроса..."); Флаг = Запрос.Выполнить(ТекстЗапроса); Если Флаг = 0 Тогда Предупреждение("Запрос не выполнился!"); Возврат; КонецЕсли; Состояние("Обработка полученных данных..."); Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл Сообщить(Запрос.ЧекККМ); КонецЦикла; КонецЦикла; Теперь пишет вот что: Неверный номер упорядочивания |
|||
21
1Сергей
11.02.14
✎
12:33
|
(15)
//******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; НачДата = Дата("01.09.13"); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата; |ЗаказВцех = Документ.ЗаказВцех.ТекущийДокумент; |ДатаДок = Документ.ЗаказВцех.ДатаДок; |Клиент = Документ.ЗаказВцех.Клиент; |НомерДок = Документ.ЗаказВцех.НомерДок; |Группировка ЗаказВцех; |Группировка ДатаДок; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей ЗаказВцех Таб.ВывестиСекцию("ЗаказВцех"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей ДатаДок Таб.ВывестиСекцию("ДатаДок"); КонецЦикла; КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
22
Diter
11.02.14
✎
12:35
|
(21) ты писатель?
|
|||
23
Diter
11.02.14
✎
12:36
|
|Группировка ЧекККМ;
упс 22 не тебе ;) это ТС |
|||
24
bas28000
11.02.14
✎
12:40
|
(23) Поменял "Группировка Документ;" на "Группировка ЧекККМ;", история та же, то же сообщение выдает.
|
|||
25
bas28000
11.02.14
✎
13:01
|
(21) Проверил, у меня ничего не выходит :) Вот код:
Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Период с ДатаНачала по ДатаКонца; |Обрабатывать НеПомеченныеНаУдаление; |Без итогов; |ЧекККМ = Документ.ЧекККМ.ТекущийДокумент; |ДатаДок = Документ.ЧекККМ.ДатаДок; |Касса = Документ.ЧекККМ.Касса; |ВидОперации = Документ.ЧекККМ.ВидОперации; |Фирма = Документ.ЧекККМ.Фирма; |ЮрЛицо = Документ.ЧекККМ.ЮрЛицо; |Группировка ЧекККМ; |Группировка ДатаДок; |Условие(ВидОперации = ВыбВидОперации); |Условие(Касса = ВыбКасса); |Условие(Фирма = ВыбФирма); |Условие(ЮрЛицо = ВыбЮрЛицо); |"; Состояние("Обработка запроса..."); Флаг = Запрос.Выполнить(ТекстЗапроса); Если Флаг = 0 Тогда Предупреждение("Запрос не выполнился!"); Возврат; КонецЕсли; Состояние("Обработка полученных данных..."); Пока Запрос.Группировка("ЧекККМ") = 1 Цикл Сообщить(Запрос.ДатаДок); Пока Запрос.Группировка("ДатаДок") = 1 Цикл Сообщить(Запрос.ЧекККМ); КонецЦикла; КонецЦикла; |
|||
26
Ork
11.02.14
✎
13:10
|
(25) Нафига чушь пишешь?
"|Группировка ЧекККМ; |Группировка ДатаДок;" Группировка ЧекККМ уже сгруппирует по позиции. Которая уже включает дату. Не будет НИКОГДА документов с одной позицией и разными датами. |
|||
27
1Сергей
11.02.14
✎
13:11
|
(26) я ему про это ещё в (1) сказал
|
|||
28
Ork
11.02.14
✎
13:13
|
ТекстЗапроса = "
|Период с ДатаНачала по ДатаКонца; |Обрабатывать НеПомеченныеНаУдаление; |//это убрать : Без итогов; |//это убрать : ЧекККМ = Документ.ЧекККМ.ТекущийДокумент; |//это убрать : ДатаДок = Документ.ЧекККМ.ДатаДок; |Касса = Документ.ЧекККМ.Касса; |ВидОперации = Документ.ЧекККМ.ВидОперации; |Фирма = Документ.ЧекККМ.Фирма; |ЮрЛицо = Документ.ЧекККМ.ЮрЛицо; |//это убрать : Группировка ЧекККМ; |//это убрать : Группировка ДатаДок; |Группировка День; |Группировка Документ; |//это все нужные группировки; |Условие(ВидОперации = ВыбВидОперации); |Условие(Касса = ВыбКасса); |Условие(Фирма = ВыбФирма); |Условие(ЮрЛицо = ВыбЮрЛицо); |"; Состояние("Обработка запроса..."); //Здесь - непринципиально. Но код более читаемый Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Предупреждение("Запрос не выполнился!"); Возврат; КонецЕсли; Состояние("Обработка полученных данных..."); Пока Запрос.Группировка("День") = 1 Цикл Сообщить(Запрос.День); Пока Запрос.Группировка("Документ") = 1 Цикл Сообщить(Запрос.Документ); КонецЦикла; КонецЦикла; |
|||
29
Builder
11.02.14
✎
13:18
|
Я бы еще заменил во всех условиях = на В
|Условие(ВидОперации В ВыбВидОперации); Ибо если условие не выбрано, то отберет пустые. |
|||
30
bas28000
11.02.14
✎
14:09
|
(29) Можно, но только сначала надо понять, почему выше у товарища работает, а у меня не работает.
|
|||
31
bas28000
11.02.14
✎
14:10
|
(26) Отлично. А как тогда мне построить запрос таким образом, чтобы я группировкой выгребал все документы сначала одной даты, потом следующей, и так далее?
|
|||
32
uno-group
11.02.14
✎
14:22
|
(27) Ты не прав зависит от функций. тотоже счетчик выдаст разные значения с группировкой по документу и без. И как раз для среднего чека просто группировки даты ему не хватит.
(0) Чтот я у тебя функций не увидел ИМХО тут собака порылась. давай весь код |
|||
33
Ёпрст
11.02.14
✎
14:23
|
(30) :)))))
в (0) в тексте исправь на // Пока Запрос.Группировка("ЧекККМ") = 1 Цикл // Пока Запрос.Группировка("ДатаДок") = 1 Цикл // Сообщить(Запрос.ЧекККМ); // КонецЦикла; // КонецЦикла; Пока Запрос.Группировка() = 1 Цикл Сообщить(Запрос.ЧекККМ); КонецЦикла; наслаждайся.. |
|||
34
Ёпрст
11.02.14
✎
14:24
|
+33 ну и у мужика в кепке в пофигураторе спроси заодно, что есть Без Итогов в тексте запроса. Если че, твой код рабочий.
|
|||
35
bas28000
11.02.14
✎
14:24
|
(33) Так это и я так могу, но тогда придется самому кодом разделять документы по дате.
|
|||
36
Ёпрст
11.02.14
✎
14:26
|
(35) че ты можешь ? СП осилил, не ?
см (34). |
|||
37
Ёпрст
11.02.14
✎
14:28
|
Можешь и оставить обход по двум группировкам, тогда просто выкини Без Итогов в тексте запроса + выкини упорядочивание + поменяй группировки местами : первая по дате, вторая по текущему документу
наслаждайся |
|||
38
bas28000
11.02.14
✎
14:30
|
(37) Спасибо, помогло.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |