|
СКД: Группировка по регистратору и полю-периоду (развернутый вопрос) | ☑ | ||
---|---|---|---|---|
0
Марсель
26.08.11
✎
18:05
|
Все дальнейшие примеры приведены для платформы 8.2.14.439 / Демонсрационная конфигурация УТ 11.0.4.5
Все сокращенные ссылки ведут в Google Docs (учетная запись не требуется) Имеем самый простой запрос к виртуальной таблице "Остатков и Оборотов" регистра "ТоварыНаСкладах". Собственно схема компоновки: http://goo.gl/oIWhb В схеме имеется поле - реквизит измерения "Склад". Всем полям назначены корректные роли. В настройках в группировках строк имеем группировку по номенклатуре Ситуация 1: Настройки: http://goo.gl/6vqwD Добавляем вывод детальных записей (Поле Регистратор, Сортировка по регистратору). В результате получаем корректные остатки по измерению номенклатуры, по детальным записям начальные и конечные остатки, как и ожидалось "СКАЧУТ" - т.е. нарушается связь: начальный остаток записи равен конечному остатку предыдущей записи. Результат: http://goo.gl/v1KOs Ситуация 2: Настройки: http://goo.gl/bPkPV Исправляем предыдущую ситуацию - вместо детальных записей выводим группировку по регистратору. Все отлично, т.е. так как и надо. Остатки по регистратору "не скачут". Результат: http://goo.gl/9NSgg Ситуация 3: Настройки: http://goo.gl/imTyC Добавляем группировку Колонок "Период месяц". Так как с группировкой по регистратору вывести не получится, вместо группировки по регистратору используем детальные записи с полем регистратор. И возвращаемся к ситуации 1 :( Хотелось бы обратить внимание как в данном случае выводятся остатки по регистратору - а именно в колонке периода месяц выводятся только данные по регистраторам из ДАННОГО периода Результат: http://goo.gl/B6zlO Ситуация 4: Настройки: http://goo.gl/IqR9q Для того чтобы можно было сгруппировать по регистратору и по периоду, меняем в схеме компоновки у поля периода (в данном примере "ПериодМесяц") Настройку Роли, а именно снимаем флажок ДОПОЛНИТЕЛЬНОГО ПЕРИОДА Теперь мы можем сгруппировать и по регистратору и по периоду. Выполняем. И опять облом :( Теперь получается что по колонке периоду у всех регистраторов Начальный и Конечный Остатки одинаковы - соответственно Начальный и конечный остатки по ТЕКУЩЕМУ периоду :( (Результат конечно ожидаем, когда знаешь как СКД рассчитывает остатки - но сейчас не об этом) Да и к тому же в колонке выводятся остатки и для регистраторов из других периодов (но с этим еще можно бороться) Результат: http://goo.gl/ffQ66 Убил кучу времени чтобы реализовать и группировку строк по регистратору и группировку колонок по периоду так, чтобы остатки выводились корректно по регистраторам, а именно - начальный остаток записи, равен конечному остатку предыдущей записи и т.д. - т.е. Примерно как при настройках в Ситуации 3, но чтобы остатки "не скакали" Добиться желаемого результата (и оставить масштабируемость настроек и скорость работы отчета на приемлемом уровне) пока не удается :( Если кто сталкивался с такой проблемой и знает решение или ссылки на информацию, которая поможет его найти - подскажите, пожалуйста. |
|||
1
IronDemon
26.08.11
✎
19:31
|
||||
2
Мигрень
26.08.11
✎
19:53
|
(0) Группировка по регистратору - это значит должна быть ОБЯЗАТЕЛЬНО в запросе выбран период секунда. В настройках СКД его можно отключить.
|
|||
3
Марсель
26.08.11
✎
20:19
|
(1) По ГРУППИРОВКАМ остатки считаются корректно, проблема в одновременной группировке по регистратору (в строках) и по полю периоду (в колонках - например ПериодМесяц) - в (0) в ссылках на результат продемонстрирована суть проблемы.
Еще раз повторюсь - в общем остатки считаются корректно - по группировке Номенклатура - остатки корректны в любой из перечисленных ситуаций... (0) и (1) Секунда выбрана, Все роли назначены корректно, Реквизиту измерения так же назначена роль, и указан родитель Все правила описания запроса для полей остатка знаю, алгоритм расчета остатков знаю - но это не помогает Просьба (большая) пройтись по ссылкам и посмотреть наглядно на проблему. Заранее спасибо. (1) У Вас репутация хорошего специалиста по СКД, могли бы Вы дать более развернутый ответ (указать на "косяк")... по ссылке сходил - все условия выполнены, но не помогает :( |
|||
4
AlexNew
26.08.11
✎
20:52
|
(2) Оч смешно, а в пределах секунды?
(3) Период должен быть раньше. |
|||
5
Марсель
26.08.11
✎
23:29
|
(4) Что значит "Период должен быть раньше" - совершенно не понял к чему это... Раньше чего? Раньше чем Группировка по регистратору? Так в этом и есть одна из проблем, как сделать чтобы в колонках была группировка по периоду, а в строках по регистратору и при этом выводились нормально остатки по группировке "Регистратор".
Насчет "обязательности" секунды при выборе в запросе регистратора (но если он выбирается в роли поля-периода) - так и есть, это обязательное условие для корректного расчета остатков. 2 All Есть какие-нибудь идеи как решить проблему? |
|||
6
Марсель
28.08.11
✎
13:36
|
(up) Может быть хоть какие-нибудь идеи?
|
|||
7
Amiralnar
28.08.11
✎
14:22
|
Эта тема мне интересна. Оставьте здесь ссылку на партнерский форум, если отметитесь там.
|
|||
8
Марсель
29.08.11
✎
12:11
|
(up) Попробую еще раз поднять вопрос :/
|
|||
9
Amiralnar
29.08.11
✎
12:15
|
(8) Перепостил на партнерке. Может там спецы подскажут.
http://partners.v8.1c.ru/forum/thread.jsp?id=961676#961676 |
|||
10
Марсель
29.08.11
✎
12:19
|
(9) У меня к сожалению нет туда доступа, если будет какая-то информация дайте знать, пожалуйста.
И спасибо за помощь. |
|||
11
Amiralnar
29.08.11
✎
12:53
|
Пока ответили ссылками: (нужна подписка ИТС)
http://its.1c.ru/db/metod81#content:2664:1 http://its.1c.ru/db/metod81#content:2913:1 http://its.1c.ru/db/metod81#content:3093:1 |
|||
12
ДемонМаксвелла
29.08.11
✎
12:59
|
статья на ИТС "Типичные проблемы при расчете остатков"
вот здесь (v8: Почему СКД задваивает данные ?, пост 24 |
|||
13
Марсель
29.08.11
✎
13:19
|
(12) Все типичные проблемы учтены (и на самом деле суть проблемы несколько в другом).
Данные не задваиваются. По сути даже остатки считаются корректно... Проблема в том, что в данном случае для вывода остатков по регистратору мы не можем использовать детальные записи (остатки по РЕГИСТРАТОРУ (по детальным записям) будут скакать, т.к. в запросе выбирается больше измерений, чем измерений по которым мы группируем, в примере в (0) мы группируем по номенклатуре, но у нас так же есть отбор по РЕКВИЗИТУ измерения СКЛАД, что влечет за собой добавление в запрос выборки по СКЛАДАМ (сейчас не будем обсуждать что можно разделить поля отбора и группировок - суть совершенно не в этом)... так вот при всем при этом детальные записи будут получены для каждого значения измерения СКЛАД, что в общем-то нам не нужно - значит нужно группировать по регистратору... но как только мы группируем по регистратору, одновременно группировать в колонках по периоду, стандартными способами становится невозможно. И даже добавление по группировке-периоду (в строках) перед группировкой по регистратору ситуацию не меняет. ОСНОВНАЯ СУТЬ ПРОБЛЕМЫ - это отображение остатков при одновременной группировке по полям-периодам (в том числе по регистратору) и в строках и в колонках |
|||
14
Марсель
29.08.11
✎
13:20
|
(11) Все эти статьи изучил не один раз, к сожалению, понимания как решить проблему это не дало...
Может я упускаю какой-то момент :/ |
|||
15
Марсель
29.08.11
✎
13:35
|
Попробую еще уточнить проблему...
Если мы имеем группировку по полю-периоду в строках (Например ПериодДень) и группировку по полю-периоду в колонках (Например ПериодМесяц), то для всех строк в рамках группировки по колонке (ПериодМесяц) остатки будут одинаковые - т.е. остатки для ПЕРИОДМЕСЯЦ... например для значений ПЕРИОДДЕНЬ: 1.04 2.04 3.04 Начальные и конечные остатки будут одинаковые в колонке по ПериодМЕСЯЦ (1.04) независимо от того какие были движения (оборот), и будут соответственно равны НАЧАЛЬНЫЙ - начальный остаток на 1.04 и КОНЕЧНЫЙ ОСТАТОК на 30.04 |
|||
16
Amiralnar
30.08.11
✎
12:23
|
> Железнов Павел (1-й Центр "Программные технологии", Москва)
Немного непонятно какую задачу вы решаете. Если в итоге вы хотите получить остатки по периодам или остсатки по документам то вы зашли не с того конца. Обычно это делается просто динамически-собираемым запросом (для каждого периода свой подзапрос или своя временная таблица) и потом результат запроса передаётся в СКД как объектный источник. |
|||
17
Марсель
30.08.11
✎
13:24
|
(16)
Задачу вообщем можно описать так: Нужно получить остатки (и обороты) по некоторым группировкам (выбираемым пользователем (Номенклатура, Бренд и т.д.) с разверткой по периодам (группировка колонок) и детализацией до регистратора (группировка строк)... так что-бы было видно как меняются остатки каждым регистратором в пределах периода (группировки колонок по периоду). Пока искал решение сам пришел к подобному решению: Для полей-периодов (ПериодМесяц) менял роль на "ИЗМЕРЕНИЕ", отдельным запросом получал остатки на начало и конец каждого периода, из основного запроса условием (по пустому регистратору) убирал эти самые остатки... и объединял запросы... тогда все получалось как нужно, за исключением общих итогов (их я просто отключал в настройках, и выводил колонку детальные записи без полей (только с ресурсами - тем самым общие итоги так же получаются корректными) Основная проблема в использовании этого решения... то, что заранее не известно какие настройки для отчета задаст пользователь (возможно ему не нужна будет детализация до регистратора, или развертка по периодам) - т.е. с таким решением сильно снижается масштабируемость отчета, и растет время его формирования. (ну и просто хотелось бы решить все средствами СКД - не прибегая к ОБЪЕКТНЫМ источникам |
|||
18
Марсель
30.08.11
✎
13:40
|
Как я понял в ходе "раскопок", решить задачу в рамках одного запроса (к виртуальной таблице "Остатки и обороты") - не возможно.
В таком случае, хотелось бы найти такое решение, для которого не пришлось бы выходить за рамки СхемыКомпоновки - т.е. обойтись без использования объектных источников. Вообще результат отчета на СКД при подобных группировках (группировки по периодам и в строках и в колонках) я бы не назвал очевидным - ожидал другого результата :( |
|||
19
ДемонМаксвелла
30.08.11
✎
13:49
|
Зачем нужны группировки по периодам и в строках и в колонках? Почему нельзя обойтись группировкой строк? Какой сакральный смысл в остатках на "15.08.2011" в колонке "май 2011"?
|
|||
20
Amiralnar
30.08.11
✎
14:07
|
От себя:
Если чесно - не вижу смысла в подобном отчете. Общий отчет может показывать периоды колонками, а расшифровка разъяснять по конкретной позиции. Какой смысл одновременно видеть все изменения номенклутры различными регистраторами? Обороты периодами - ок: общий список. Посмотреть внутрь - ок: карточка. |
|||
21
Марсель
30.08.11
✎
14:42
|
(19) Группировки строк по периоду - здесь должна быть группировка по регистратору (это ведь тоже поле-период, вообщем конечно)
Группировка колонок по периоду - здесь ПериодМесяц - это просто развертка по периодам. Почему нельзя обойтись группировкой строк (что делается без проблем и без танцев с бубном) - не знаю, хотят видеть развертку по периодам именно по горизонтале, так удобнее пользователям. Сакрального смысла "в остатках на "15.08.2011" в колонке "май 2011" нет... там их и не должно быть видно (но это как раз решаемо)... т.е. при группировке строк по регистратору - отчет должен выглядеть как если бы вместо этой группировки были детальные записи, т.е. в колонке за май, остатки будут выведены только для тех регистраторов, которые попали в этот период, для остальных регистраторов там будут пустые ячейки (20) Если честно, я тоже не вижу особого смысла в подобной ДЕТАЛИЗАЦИИ отчета, но ПОЛЬЗОВАТЕЛИ утверждают что он есть :( Мы люди подневольные... говорят надо - значит надо |
|||
22
Марсель
30.08.11
✎
15:07
|
Вот примерно так должен выглядеть отчет: http://goo.gl/M6IE8
|
|||
23
PVV65
30.08.11
✎
15:39
|
Закладка. Утром посмотрю.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |