Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Странность работы группировки в запросе (http://forums.kuban.ru/f1040/strannost-_raboty_gruppirovki_v_zaprose-5802577.html)

Marlboro 13.06.2014 12:26

Странность работы группировки в запросе
 
Запрос по документам:
...
Склад=Документ.ОтчетККМ.Склад;
ТекДок=Документ.ОтчетККМ.ТекущийДокумент;
Группировка Склад;
Группировка ТекДок;
...
Работает нормально.
А вот при варианте Группировка Склад Все
документы не группируются по складам.
(По каждому складу идут все документы).
Как быть ?

Группировка Склад Все нужна для того, чтобы в запросе получить и те склады, по которым не было документов.

USSR 13.06.2014 13:23

Что группируешь, приведи запрос целиком

Marlboro 13.06.2014 16:33

Документы группирую
|ПЕРИОД С ДатаНачала По ДатаКонца;
|ОбрабатыватьДокументы Все;
|Обрабатывать НеПомеченныеНаУдаление;
|Склад = Документ.ОтчетККМ.Склад;
|ДатаДок = Документ.ОтчетККМ.ДатаДок.ДатаДок;
|ТекДок = Документ.ОтчетККМ.ТекущийДокумент;
|Условие (Склад В спСкладовМагазинов);
|Группировка Склад Все;
|Группировка ДатаДок Все;
|Группировка ТекДок;";

Marlboro 13.06.2014 16:35

Мне нужно, чтобы в запрос попали ВСЕ склады и ВСЕ даты, независимо от существуют ли по этим складам и датам документы.

Управление торговлей 11 13.06.2014 17:12

соединяй со справочником, если хочешь все склады

Marlboro 13.06.2014 18:20

4-Управление торговлей 11 >
Склад = Справочник.Склады,Документ.ОтчетККМ.Склад,...
Так?
А с группировкой по дате что делать? Там та же проблема - Группировка ДатаДок Все "цепляет" ВСЕ документы.

VZ 13.06.2014 18:42

А нахрена нужна группировка по дате?
А нахрена нужна группировка по документу?

"[em]Мне нужно, чтобы в запрос попали ВСЕ склады и ВСЕ даты, независимо от существуют ли по этим складам и датам документы[/em]" - А вот индейское жилище...
С какой это стати запрос будет формировать строку на какай-нить день, если в этот день не было затребованных движений?

Шизофреническое задание...

Marlboro 13.06.2014 18:47

6-VZ >Мне надо построить таблицу: строки-склады, столбцы-дни (КАЖДЫЙ день из опр.периода), в ячейках - документы.
Причем в таблицу должны попадать все склады и все дни, независимо от того, есть ли документы.
Вот я и пытаюсь выбрать данные для заполнения таблицы одним запросом.

Управление торговлей 11 13.06.2014 18:51

есть КалендарныеГрафики

Marlboro 13.06.2014 18:56

8-Управление торговлей 11 >Что есть "КалендарныеГрафики" ?
Парни, да у меня другая задача.
Сеть магазинов, которая свои продажи сбрасывает в центр.базу. Продажи загружаются в виде документов ОтчетККМ. А я хочу сделать отчет по этим загрузкам - есть документ за данный день по данному магазину, нет документа. Без всяких движений.
А вы сразу обзываться начинаете - "Шизофреническое задание"...

Marlboro 13.06.2014 19:00

Проблему-то я решил. Не совсем красиво, но тем не менее.
При обходе группировки по документам отсекаю лишние документы проверкой по дате и складу "родительских" группировок. Но хотелось без костылей.

VZ 13.06.2014 19:08

И, похоже, это "семерка"...
Что за конфа?

Marlboro 13.06.2014 19:09

11-VZ Так я и обозначал, что v7.
Конфа - допиленная ТиС 9.2.

Управление торговлей 11 13.06.2014 19:20

аааа, 7.7, это я проглядел
я бы сделал наверно так - по документам обычный запрос без излишеств, встроенными циклами вывожу табличку магазин/день и методом ПолучитьГруппировку(магазин,день) смотрю наличие документов

Управление торговлей 11 13.06.2014 19:21

13-Управление торговлей 11 >"встроенными" - это "вложенными" :)

Marlboro 13.06.2014 19:39

14-Управление торговлей 11 >Где это, интересно, в v7 метод ПолучитьГруппировку?
Данные для заполнения таблицы Склады-Даты элегантно было бы получить одним запросом.
Вопрос только в том, почему так "неочевидно" работает группировка по складам и датам с параметром ВСЕ.
"Очевидно" было бы, если бы при отсутствии документов для данной даты или склада группировка по документам давала бы пустой список, а она тащит все документы других складов и дат...

Управление торговлей 11 13.06.2014 20:00

15-Marlboro >ну ошибся, по памяти писал
Получить(<?>)
Синтаксис:
Получить(<ЗначениеГруппировки1>,...,<ЗначениеГруппировкиN>)
Назначение:
Прямое позиционирование на запись в выборке по конкретным значениям группировок.
Возвращает: 1 - если запись найдена, 0 - иначе.
Параметры:
<ЗначениеГруппировкиN> - значение параметра N-ой группировки запроса.
Замечание:
Опущенные при вызове последние значения группировок должны заменяться запятыми. Если при вызове метода опущены все параметры, то выборка позиционируется на самое начало временного набора данных, на строку итогов. После выполнения метода Получить может осуществляться дальнейший обход выборки вызовами метода Группировка.

Управление торговлей 11 13.06.2014 20:08

кстати, есть же стандартная группировка "день" вроде?

Marlboro 13.06.2014 23:42

16-Управление торговлей 11 >Да это неважно, как я прохожу итоги запроса - вложенными циклами по группировкам или прямым позиционированием на запись, все равно я получаю неправильные значения группировки по документам (если использовался параметр ВСЕ для вышестоящих группировок Склад и Дата).

А Группировка День ВСЕ дает тоже самое.

МимохожийОднако 14.06.2014 07:27

Зачастую в семерке выгружают в ТЗ. В ней сортируют и её обрабатывают, считая итоги.

USSR 14.06.2014 17:51

я так и не понял, что за группировки, если нет никакой функции - ни остатков, ни прихода, ни расхода

VZ 14.06.2014 20:13

20-USSR > "Группируются" поля. Хоть явно их обозначай, хоть через функцию.
Извращение (7) напрямую одним запросом в ТЗ, как мечтает автор, "красиво", не сотворить.

VZ 14.06.2014 20:54

+21 Но можно попробовать нечто вроде:
|ПЕРИОД С ДатаНачала По ДатаКонца;
|Обрабатывать НеПомеченныеНаУдаление;
|Док = Документ.ОтчетККМ.ТекущийДокумент;
|Склад = Документ.ОтчетККМ.Склад;
|Условие (Склад В спСкладовМагазинов);
|Группировка Склад Все;
|Группировка День Все;";

USSR 15.06.2014 10:25

Я по такой проблеме никогда бы не стал заморачиваться. Выбрал в ТЗ документы, добавил нужные колонки, в цикле заполнил, затем делай что хочешь. 5 строчек лишнего года, с точки зрения потери скорости полная ерунда, зато полная гибкость. Не надо быть апологетом парадигмы - абсолютно все извлекать из запроса. Будьте проще ... Это не проблема, чтобы всерьез обсуждать

VZ 15.06.2014 11:25

23-USSR > Извлекать данные только и исключительно только - это "восьмеризм" ;)
В v8, правило "только запрос", в общем-то, оправдано (в силу самой концепции недоущения клиента к прямому контакту с базой.
Но в "семерке" акцент на "только" - это эстетство. А в случае с ДБФ-ной базой - и нерационально: выборка бысрее.

Reaper 15.06.2014 21:44

[quote=VZ;35547232] В v8, правило "только запрос", в общем-то, оправдано (в силу самой концепции недоущения клиента к прямому контакту с базой).[/quote]

Это-то фигня. А вот то, что объектное чтение в режиме автоматического управления блокировками так и норовит установить хотя бы S-блокировки на уровне СУБД - это проблема. Доставляет, когда какой-нить балбес идя на поводу у пользователей делает раскраску списков обращаясь к данным через пару точек (а я даже 4 видел). С ростом числа пользователей такой коллапс приходит - просто пипец.


Текущее время: 12:12. Часовой пояс GMT +3.