|
СКД. Как заставить 1С НЕ считать значения в иерархии, а вывести заданные для группы. | ☑ | ||
|---|---|---|---|---|
|
0
kostyan29
08.09.26
✎
12:52
|
Добрый день! Есть вроде бы простая задача, но я никак не пойму, как ее решить. Хочу получить отчет-таблицу по продажам с разбивкой по месяцам, и с иерархией номенклатуры.
И я хочу найти максимальные продажи за месяц по каждой номенклатуре, и по каждой группе номенклатуры. И считать долю от продаж за конкретный месяц от максимальных продаж в году. В общем, сезонность товаров. И выводить в таблице также в каждом месяце максимальные месячные продажи, которые были за год (это поле по большей части просто для отладки). Единственный способ, до которого я додумался, сделать в СКД набор данных - объект, и таблицу значений для него готовить программно. Через запрос с итогами, потом проход по этой таблице с поиском максимальных продаж за год, потом формирование итоговой таблицы значений. Она имеет такой вид: - Номенклатура (тут и группы, и элементы) - Месяц (просто число от 1 до 12) - ПродажиЗаМесяц - МаксимумПродажиЗаМесяц (тут будет найденное среди 12 месяцев максимальное значение по продажам для этой группы или элемента номенклатуры) - КоэффициентСезонности (ПродажиЗаМесяц / МаксимумПродажиЗаМесяц) Сама таблица формируется корректно, в ней все правильно. Но при выводе через СКД данные по группам выводятся не те, которые заданы в таблице, а те, которые СКД считает сама, исходя из строк, входящих в эту группу. Для примера, вот выдуманные продажи с 2 столбцами, Продажи за конкретный месяц, и макс. продажи - это максимум месячных продаж, совершенных за год. Номенклатура | Январь | Февраль
| продажи | макс. продажи.| продажи | макс. продажи
Процессоры (группа) | 6 | 4 | 8 | 4
- Intel i5 12600 (элем.)| 2 | 4 | 4 | 4
- Ryzen 5600 (элем.) | 3 | 3 | 2 | 3
- Intel i3 10100 (элем.)| 1 | 2 | 2 | 2
По элементам выводится все правильно - у Intel i5 12600 максимальные продажи были в феврале в кол-ве 4 шт., и в январе в "макс. продажи" выводится именно 4. Для Ryzen максимальные продажи были в январе (3 шт.), и в феврале в "макс. продажи" выводится именно 3. Но по группе Процессоры столбец макс. продажи заполняется неверно - СКД считает его как ресурс, и считает по входящим в него элементам. Если в выражении для столбца на закладке Ресурсы будет прописано "Максимум(МаксимумПродажЗаПериод)", то выведет 4 за январь (просто найдет макс. среди элементов процессоров). Если прописать "Сумма(МаксимумПродажЗаПериод)", то выведет за январь 9 (просуммирует 4 + 3 + 2 по элементам). А правильное значение должно быть 8, и это значение есть в подготовленной таблице значений, из которой формируется отчет! Оно там есть, я просто не могу заставить СКД вывести именно его, а не пытаться высчитывать его заново. Не помогают никакие хитрые ВычислитьВыражение, ни попытки вообще убрать из ресурсов (тогда просто не выведется). Как это можно поправить? Как заставить в иерархии вывести просто то, что есть в наборе данных, и ничего не выдумывать? Может, я вообще не в ту сторону копаю, и есть способ куда проще? |
|||
|
1
toypaul
гуру
08.09.26
✎
13:12
|
Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Ресурс)", "Группировка"))
|
|||
|
2
toypaul
гуру
08.09.26
✎
13:14
|
Из описания задачи ничего не понял. Если ресурс задан для группы, то в выражении ресурса просто вывести его без всяких сумма или максимум
|
|||
|
3
kostyan29
08.09.26
✎
13:25
|
(1) (2) Если просто вывести без сумм и максимум, то в этом случае он просто выводит первое значение из элементов. Значение, заданное для самой группы, он не хочет брать ни в какую.
Если использовать что-то типа Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Ресурс)", "Группировка")) , то все равно не то - берет данные из элементов, входящих в группу, а это не то, что нужно. |
|||
|
4
kittystark
09.09.26
✎
16:03
|
(0) есть такая функция выражений СКД - ГрупповаяОбработка, она поможет
|
|||
|
5
Галахад
гуру
09.09.26
✎
16:23
|
Не совсем понял "МаксимумПродажЗаПериод" уже же посчитан. Зачем его делать ресурсом?
|
|||
|
6
Web00001
10.09.26
✎
05:19
|
Не понятно несколько вещей
Единственный способ, до которого я додумался, сделать в СКД набор данных - объект, и таблицу значений для него готовить программно. Через запрос с итогами, потом проход по этой таблице с поиском максимальных продаж за год, потом формирование итоговой таблицы значений.
Эти данные хорошо ложатся в запрос, зачем тебе таблица с объектом здесь? Если бы были записи номенклатура, дата, продажа, все остальное СКД может сделать сама и иерархию номенклатуры и средний и макс. Если беспокоит, как вывести периоды в колонки, добавляй таблицу и в группировку колонок выводи периоды. Не видно закладки "Настройки" отсюда непонятно, можем ли мы отдельно для каждой группировки посчитать ресурсы. Если не можем, надо настроить группировки так, чтобы можно было - одна группировка иерархия, вторая группировка по номенклатуре(если надо, как я понял, ты самостоятельно все рассчитал и в номенклатуре у нас уже детальные записи) и посчитать ресурсы для каждой так как надо. |
|||
|
7
Dimaster
12.09.26
✎
22:38
|
Поставьте разные формулы ресурсов на разные "Рассчитать по".
В вашем случае видимо Номенклатура(иерархия)+ПериодМесяц и Номенклатура+ПериодМесяц. Как вариант еще разные сделать прям поля, например через вычисляемые, и в макетах поставить разные ресурсы на разных уровнях |
|||
|
8
xenos
13.09.26
✎
11:29
|
(0) Посчитать сумму и разделить на количество строк.
|
|||
|
9
kostyan29
15.09.26
✎
08:30
|
Всем спасибо за попытки помочь. В общем, как это сделать в СКД, я так и не понял. Сделал проще - записал все данные в регистр сведений и подгружаю данные для отображения в динамическом списке с номенклатурой.
Вот как это примерно выглядит: https://disk.yandex.ru/i/otc3TKeAS8r8Hg Список номенклатуры + 12 колонок с месяцами. В шапке выбираем склад и год с данными по продажам. В ячейках выводится 2 значения - продажи за месяц и в скобках пишется процент от максимального уровня продаж, который был достигнут в заданном году. Вот если прямо по моей картинке - у процессоров были максимальные продажи в сентябре - 64 шт. Это берется за 100%, это максимум продаж за год. В феврале было продано 22 процессора - это 34% от максимума за год. И градация по цветам - если несезон (слабые продажи) - серый цвет - продажи чуть получше - желтый цвет - сезон - зеленоватый цвет - и месяц в котором были максимальные продажи - выделяется чистым зеленым и пишется жирным шрифтом. Легко и просто сходу оценить сезонность товаров - хоть укрупненно по группам, хоть детально по элементно. Я считал это элементарной задачей, но именно отобразить это так, как я хотел, я так и не смог с помощью СКД, пришлось делать по-другому. В СКД я делал таблицу, в строках группировка по номенклатуре (иерархия), в колонках - месяцы. Если не задавать максимальные продажи (или коэффициент продаж, не важно) как ресурс, то значение просто не выведется. Может, я страшно туплю, но оно не выводится. Если задать как ресурс, то в детальных записях (по элементам справочника номенклатуры) все идеально. Но с группами все очень грустно - по группам упорно пытается посчитать значения из детальных записей, и только из них. Просто взять и вывести то значение, которое прямо задано в ТЗ для этой группы - невозможно. Неважно, пытаешься ты ставить разные формулы для "Рассчитать по", это никак не исправляет основополагающую проблему - СКД упорно высчитывает значения исходя из детальных записей по колонке, а так их высчитать невозможно. ГрупповаяОбработка - тоже работает исключительно с детальными записями. В общем, задача решена, хоть и не так, как планировал. Еще раз, всем спасибо. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |