|
СКД при выгрузке таблицу значений, не суммирует ресурсы по группировке | ☑ | ||
---|---|---|---|---|
0
skyadmin
21.04.20
✎
12:40
|
В схеме такой запрос
ВЫБРАТЬ РабочийКалендарь.Дата КАК Период ПОМЕСТИТЬ Периоды ИЗ РегистрСведений.ДанныеПроизводственногоКалендаря КАК РабочийКалендарь ГДЕ РабочийКалендарь.Дата МЕЖДУ &НачалоПериода И &КонецПериода ИНДЕКСИРОВАТЬ ПО Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Периоды.Период КАК Период, Движения.Номенклатура КАК Номенклатура, Движения.Характеристика КАК Характеристика, СУММА(ВЫБОР КОГДА Движения.Период = &НачалоПериода ТОГДА Движения.ВНаличииКонечныйОстаток ИНАЧЕ ВЫБОР КОГДА Движения.Период <= Периоды.Период ТОГДА Движения.ВНаличииОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ) КАК ВНаличии ПОМЕСТИТЬ ОстаткиПоДням ИЗ Периоды КАК Периоды, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК Движения СГРУППИРОВАТЬ ПО Периоды.Период, Движения.Номенклатура, Движения.Характеристика ИНДЕКСИРОВАТЬ ПО Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОстаткиПоДням.Период КАК Период, ОстаткиПоДням.Номенклатура КАК Номенклатура, ОстаткиПоДням.Характеристика КАК Характеристика, ВЫБОР КОГДА ОстаткиПоДням.ВНаличии > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ВНаличииДень ПОМЕСТИТЬ НаличиеПоДням ИЗ ОстаткиПоДням КАК ОстаткиПоДням ИНДЕКСИРОВАТЬ ПО Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НаличиеПоДням.Номенклатура КАК Номенклатура, НаличиеПоДням.Характеристика КАК Характеристика, СУММА(НаличиеПоДням.ВНаличииДень) КАК ВНаличииДней ИЗ НаличиеПоДням КАК НаличиеПоДням СГРУППИРОВАТЬ ПО НаличиеПоДням.Номенклатура, НаличиеПоДням.Характеристика Непонятная проблема, если эту схему использую в отчете или консоли запросов, то за месяц получается нормальный отчет, ВНаличииДней = 30 Номенклатура Характеристика ВНаличииДней Бутылка <Пустая ссылка: Справочник.Характеристика номенклатуры> 30 а если эту схему использую в обработке и вывожу результат в таблицу значений, то за месяц получается не нормальный отчет, ВНаличииДней = 1 по всем строкам Номенклатура Характеристика ВНаличииДней Бутылка <Пустая ссылка: Справочник.Характеристика номенклатуры> 1 Хотя дополнительно указано в ресурсах поле СУММА(НаличиеПоДням) в структуре всего одна группировка с двумя полями Номенклатура, Характеристика Пробовал отключать автозаполнение и указывать поля вручную, не помогло В последнем пакете убирал сумму (чтобы оставались только поля) но ресурс все равно не суммируется Прокол в том, что даже если добавить еще один пакет, и выбрать все только полями, в которых уже все должно быть просуммировано и вывести ВНаличииДней как измерение в группировке, то там все равно получаются 1 Обновил платформу до 8.3.17.1386 тоже не помогло Что это может быть за глюк такой? |
|||
1
toypaul
гуру
21.04.20
✎
13:16
|
нет смысла искать проблему в запросе или в настройках ресурсов. надо искать проблему в настройках
|
|||
2
skyadmin
21.04.20
✎
13:41
|
(1) В настройках все убрал, оставил только группировку <Детальные записи>
все поля, включая ресурс сделал программно Функция ПодготовитьСтруктуруДанных(СтруктураНастроек) Экспорт //////////////////////////////////////////////////////////////////////////////// // ПОДГОТОВКА СХЕМЫ КОМПОНОВКИ ДАННЫХ И КОМПОНОВЩИКА НАСТРОЕК СКД // Схема компоновки. СхемаКомпоновкиДанных = ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных); // Подготовка компоновщика макета компоновки данных. Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Компоновщик.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); // Параметры компановщика настроек Для Каждого ПараметрДанных Из СтруктураНастроек.ПараметрыДанных Цикл УстановитьЗначениеПараметраСКД(Компоновщик, ПараметрДанных.Ключ, ПараметрДанных.Значение); КонецЦикла; // Отбор компоновщика настроек. Компоновщик.Настройки.Отбор.Элементы.Очистить(); Если СтруктураНастроек.КомпоновщикНастроек <> Неопределено Тогда КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(Компоновщик.Настройки.Отбор, СтруктураНастроек.КомпоновщикНастроек.Настройки.Отбор); КонецЕсли; //Добавление ресурсов ПолеВНаличииДней = СхемаКомпоновкиДанных.ПоляИтога.Добавить(); ПолеВНаличииДней.Выражение = "Сумма(ВНаличииДней)"; ПолеВНаличииДней.ПутьКДанным = "ВНаличииДней"; ПолеСКД = КомпоновкаДанныхСервер.НайтиПолеСКДПоПолномуИмени(Компоновщик.Настройки.Выбор.ДоступныеПоляВыбора.Элементы, "ВНаличииДней"); Если ПолеСКД <> Неопределено Тогда ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Поле = ПолеСКД.Поле; КонецЕсли; // Выбранные поля компоновщика настроек. Для Каждого ОбязательноеПоле Из СтруктураНастроек.ОбязательныеПоля Цикл ПолеСКД = КомпоновкаДанныхСервер.НайтиПолеСКДПоПолномуИмени(Компоновщик.Настройки.Выбор.ДоступныеПоляВыбора.Элементы, ОбязательноеПоле); Если ПолеСКД <> Неопределено Тогда ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Поле = ПолеСКД.Поле; КонецЕсли; КонецЦикла; // Компоновка макета компоновки данных. КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Компоновщик.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); //////////////////////////////////////////////////////////////////////////////// // ВЫПОЛНЕНИЕ ЗАПРОСА ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; Таблица = Новый ТаблицаЗначений(); ПроцессорВывода.УстановитьОбъект(Таблица); ДанныеОтчета = ПроцессорВывода.Вывести(ПроцессорКомпоновки); Возврат Таблица; КонецФункции тоже не помогло |
|||
3
toypaul
гуру
21.04.20
✎
13:45
|
хз для чего всю эту фигню программно делать, но вот это нельзя делать перед тем как ресурсы (и вообще меняешь схему) создаешь
Компоновщик.Инициализировать |
|||
4
skyadmin
21.04.20
✎
13:53
|
(3) Процедуру взял из типовой обработки УТ 11 ВыгрузкаБазыТоваровВТСД
// Функция подготавливает структуру данных, необходимую для печати ценников и этикеток. // // Возвращаемое значение: // Стрруктура - данные, необходимые для печати этикеток и ценников. // Функция ПодготовитьСтруктуруДанных(СтруктураНастроек) Экспорт //////////////////////////////////////////////////////////////////////////////// // ПОДГОТОВКА СХЕМЫ КОМПОНОВКИ ДАННЫХ И КОМПОНОВЩИКА НАСТРОЕК СКД // Схема компоновки. СхемаКомпоновкиДанных = Обработки.ВыгрузкаБазыТоваровВТСД.ПолучитьМакет(СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных); // Подготовка компоновщика макета компоновки данных. Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Компоновщик.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Компоновщик.Настройки.Отбор.Элементы.Очистить(); // Отбор компоновщика настроек. Если СтруктураНастроек.КомпоновщикНастроек <> Неопределено Тогда КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(Компоновщик.Настройки.Отбор, СтруктураНастроек.КомпоновщикНастроек.Настройки.Отбор); КонецЕсли; // Выбранные поля компоновщика настроек. Для Каждого ОбязательноеПоле Из СтруктураНастроек.ОбязательныеПоля Цикл ПолеСКД = КомпоновкаДанныхСервер.НайтиПолеСКДПоПолномуИмени(Компоновщик.Настройки.Выбор.ДоступныеПоляВыбора.Элементы, ОбязательноеПоле); Если ПолеСКД <> Неопределено Тогда ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Поле = ПолеСКД.Поле; КонецЕсли; КонецЦикла; ...... там так сделано и вроде работает а программно для того, чтобы можно было исключать группировку (с итогами) по характеристикам, если они не актуальны (например МРЦ) |
|||
5
skyadmin
21.04.20
✎
22:32
|
Если тоже самое делаю с двумя наборами данных, один с периодами, второй с остатками и делаю их соединение то все выгружается нормально.
А в одном наборе нет, в общем дичь какая-то.. |
|||
6
toypaul
гуру
22.04.20
✎
07:54
|
СКД имеет привычку выбрасывать из запроса на ее взгляд "лишние" поля и даже таблицы. Но обычно это работает и при выводе в таб документ и при выводе в ТЗ. Зависеть такое поведение может только (при одном и том же запросе) при разных настройках. Так что нужно разбираться в чем разница.
Предлагаю тут почитать http://catalog.mista.ru/public/1219807/ |
|||
7
skyadmin
22.04.20
✎
16:27
|
(6) Спасибо почитал)
Однако проблема решена доработкой запроса, Заменил строку ВЫБОР КОГДА ОстаткиПоДням.ВНаличии > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ВНаличииДень на СУММА(ВЫБОР КОГДА ОстаткиПоДням.ВНаличии > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК ВНаличииДней и чудесным образом заработало |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |