|
Как обойти результат СКД? | ☑ | ||
---|---|---|---|---|
0
al_zzz
05.06.12
✎
08:05
|
Сделал отчет на СКД, который считает сезонность по месяцам и выводит всё в виде таблицы.
Теперь хочу занести полученные данные в регистр сведений. Как мне получить и обойти результат выполнения СКД? |
|||
1
badboychik
05.06.12
✎
08:13
|
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
Описание: Объект для вывода результата компоновки в таблицу или дерево значений. |
|||
2
al_zzz
05.06.12
✎
08:17
|
(1)Пробовал уже в тз. Код такой:
НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //2.1 определяем структуру //2.1.1 добавляем группировку "Номенклатура" НастройкиКомпоновкиДанных.Структура.Удалить(0); ГруппировкаНоменклатуры = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ПолеГруппировки = ГруппировкаНоменклатуры.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ПолеГруппировки.Использование = Истина; ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Номенклатура"); //2.2 определим выбранные поля ВыбранноеПоле = ГруппировкаНоменклатуры.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Использование = Истина; ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = "Номенклатура"; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура"); ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = "Месяц"; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Месяц"); ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = "Вид"; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Вид"); ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = "Сезонность"; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Сезонность"); НачалоПериода = НастройкиКомпоновкиДанных.ПараметрыДанных.Элементы.Найти("НачалоПериода"); Если НЕ НачалоПериода = Неопределено Тогда НачалоПериода.Значение = НачалоМесяца(ТекущаяДата())-60*60*24*366; КонецЕсли; КонецПериода = НастройкиКомпоновкиДанных.ПараметрыДанных.Элементы.Найти("КонецПериода"); Если НЕ КонецПериода = Неопределено Тогда КонецПериода.Значение = НачалоМесяца(ТекущаяДата()) - 1; КонецЕсли; //3. компонуем КомпНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпНастроек.ЗагрузитьНастройки(НастройкиКомпоновкиДанных); НастройкиКомпоновкиДанных = КомпНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); Получил: {ВнешнийОтчет.Прогнозирование(100)}: Ошибка при вызове метода контекста (Инициализировать): Ошибка компоновки данных ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,,Истина); по причине: Ошибка компоновки данных по причине: Ошибка инициализации по причине: Не найдено поле замены "Сезонность" Не пойму, что не так с полем "Сезонность". |
|||
3
Пеппи
05.06.12
✎
08:24
|
А что у тебя в МакетКомпоновки ?
|
|||
4
al_zzz
05.06.12
✎
08:33
|
(3) В МакетКомпановке у меня после выполнения
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); МакетКомпановкиДанных. |
|||
5
al_zzz
05.06.12
✎
08:34
|
(3) Или где-то в узлах МакетКомпановки посмотреть нужно?
|
|||
6
Пеппи
05.06.12
✎
08:35
|
Смотри СхемаКомпоновкиДанных. скорее всего там твое поле сезонность.
|
|||
7
badboychik
05.06.12
✎
08:36
|
у меня было про поле замены. Не помню как исправил ((
|
|||
8
Нуф-Нуф
05.06.12
✎
08:38
|
||||
9
al_zzz
05.06.12
✎
08:42
|
(6) Непонятно... :( Можно поподробнее
|
|||
10
al_zzz
05.06.12
✎
08:47
|
(8) в 1 ссылке указано, цитирую дословно:
"Разобрался, нужно было исключить эти поля временных таблиц из необязательных. Тогда они в любом случае будут потом в макете компоновки и не будет никакой ругани." "... эти поля временных таблиц из необязательных..." я так понимаю, это значит поставить моему полю "Сезонность" галочку в ролях "Обязательное". Но это не помогло. В остальных полнейшие танцы с бубном или стёб. Гуглом пользоваться ещё умею, но если бы был ответ, который решает проблему, не создавал бы темы. |
|||
11
Пеппи
05.06.12
✎
08:50
|
(10) права полные?
|
|||
12
al_zzz
05.06.12
✎
08:51
|
(10) Да.
|
|||
13
al_zzz
05.06.12
✎
08:51
|
(11) Да.
|
|||
14
Garkin
05.06.12
✎
08:52
|
(10) Что таткое "сезонность"? Выражение представления задано?
|
|||
15
al_zzz
05.06.12
✎
08:52
|
Вот сам запрос:
ВЫБРАТЬ Склады.Ссылка КАК Склад, Склады.ВидСклада ПОМЕСТИТЬ _0_Склады ИЗ Справочник.Склады КАК Склады ГДЕ Склады.ЭтоГруппа = ЛОЖЬ И (НЕ Склады.Ссылка В ИЕРАРХИИ (&ЗакрытыеСклады)) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.Период, ПродажиОбороты.КоличествоОборот ПОМЕСТИТЬ _1_ПродажиРозница ИЗ РегистрНакопления.Продажи.Обороты( &НачалоПериода, &КонецПериода, Месяц, (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты)) И Номенклатура <> &ПустаяСсылка И ДокументПродажи.Склад В (ВЫБРАТЬ _0_Склады.Склад ИЗ _0_Склады КАК _0_Склады ГДЕ _0_Склады.ВидСклада = &Розница)) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.Период, ПродажиОбороты.КоличествоОборот ПОМЕСТИТЬ _1_ПродажиОПТ ИЗ РегистрНакопления.Продажи.Обороты( &НачалоПериода, &КонецПериода, Месяц, (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты)) И Номенклатура <> &ПустаяСсылка И ДокументПродажи.Склад В (ВЫБРАТЬ _0_Склады.Склад ИЗ _0_Склады КАК _0_Склады ГДЕ _0_Склады.ВидСклада = &ОПТ)) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот / 12 КАК СредняяПродажа ПОМЕСТИТЬ _2_СредняяПродажаРозница ИЗ РегистрНакопления.Продажи.Обороты( &НачалоПериода, &КонецПериода, , (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты)) И Номенклатура <> &ПустаяСсылка И ДокументПродажи.Склад В (ВЫБРАТЬ _0_Склады.Склад ИЗ _0_Склады КАК _0_Склады ГДЕ _0_Склады.ВидСклада = &Розница)) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.КоличествоОборот / 12 КАК СредняяПродажа ПОМЕСТИТЬ _2_СредняяПродажаОпт ИЗ РегистрНакопления.Продажи.Обороты( &НачалоПериода, &КонецПериода, , (НЕ Контрагент В ИЕРАРХИИ (&СобственныеКонтрагенты)) И Номенклатура <> &ПустаяСсылка И ДокументПродажи.Склад В (ВЫБРАТЬ _0_Склады.Склад ИЗ _0_Склады КАК _0_Склады ГДЕ _0_Склады.ВидСклада = &Опт)) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ "ОПТ" КАК Вид, _1_ПродажиОПТ.Номенклатура КАК Номенклатура, _1_ПродажиОПТ.Период КАК Месяц, _1_ПродажиОПТ.КоличествоОборот КАК Продано ПОМЕСТИТЬ _3_ПродажиПомесячноОР {ВЫБРАТЬ Вид, Номенклатура.*, Месяц, Продано} ИЗ _1_ПродажиОПТ КАК _1_ПродажиОПТ ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Розница", _1_ПродажиРозница.Номенклатура, _1_ПродажиРозница.Период, _1_ПродажиРозница.КоличествоОборот ИЗ _1_ПродажиРозница КАК _1_ПродажиРозница ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ _3_ПродажиПомесячноОР.Вид, _3_ПродажиПомесячноОР.Номенклатура, _3_ПродажиПомесячноОР.Месяц, _3_ПродажиПомесячноОР.Продано, ВЫБОР КОГДА _3_ПродажиПомесячноОР.Вид = "Опт" ТОГДА ВЫБОР КОГДА ЕСТЬNULL(_3_ПродажиПомесячноОР.Продано, 0) = 0 ТОГДА 0 ИНАЧЕ _3_ПродажиПомесячноОР.Продано / _2_СредняяПродажаОпт.СредняяПродажа КОНЕЦ КОГДА _3_ПродажиПомесячноОР.Вид = "Розница" ТОГДА ВЫБОР КОГДА ЕСТЬNULL(_3_ПродажиПомесячноОР.Продано, 0) = 0 ТОГДА 0 ИНАЧЕ _3_ПродажиПомесячноОР.Продано / _2_СредняяПродажаРозница.СредняяПродажа КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК Сезонность, ВЫБОР КОГДА _3_ПродажиПомесячноОР.Вид = "Опт" ТОГДА _2_СредняяПродажаОпт.СредняяПродажа КОГДА _3_ПродажиПомесячноОР.Вид = "Розница" ТОГДА _2_СредняяПродажаРозница.СредняяПродажа КОНЕЦ КАК СредняяПродажа ИЗ _3_ПродажиПомесячноОР КАК _3_ПродажиПомесячноОР ЛЕВОЕ СОЕДИНЕНИЕ _2_СредняяПродажаОпт КАК _2_СредняяПродажаОпт ПО (_3_ПродажиПомесячноОР.Номенклатура = _2_СредняяПродажаОпт.Номенклатура И _3_ПродажиПомесячноОР.Вид = "Опт") ЛЕВОЕ СОЕДИНЕНИЕ _2_СредняяПродажаРозница КАК _2_СредняяПродажаРозница ПО (_3_ПродажиПомесячноОР.Номенклатура = _2_СредняяПродажаРозница.Номенклатура И _3_ПродажиПомесячноОР.Вид = "Розница") |
|||
16
al_zzz
05.06.12
✎
08:54
|
(14) "Сезонность" - ресурс. Рассчитывается в последнем запросе пакета.
|
|||
17
al_zzz
05.06.12
✎
08:55
|
(14) Задано.
|
|||
18
Garkin
05.06.12
✎
08:56
|
(17) Убери
|
|||
19
al_zzz
05.06.12
✎
09:01
|
(17) Не правильно понял, что такое выражение представления. Не задано.
|
|||
20
al_zzz
05.06.12
✎
09:09
|
Ап! Какие ещё соображения есть, как это победить?
|
|||
21
Garkin
05.06.12
✎
09:09
|
(19) Замени в запросе "Как Сезонность" на "Как Сезонность1". Формулу ресурса покажи.
|
|||
22
Нуф-Нуф
05.06.12
✎
09:10
|
посмотри в отладчике, что у тебя в доступных полях выбора
|
|||
23
al_zzz
05.06.12
✎
09:15
|
(21) На Сезонность1 исправил - заработало. Правда, в тз всего две колонки появились:
"Номенклатура" и "Продано". Почему остальные не вывелись? |
|||
24
Garkin
05.06.12
✎
09:19
|
(23) Потому что Группировка только по "номенклатуре". Выводятся только поля группировки и ресурсы.
|
|||
25
al_zzz
05.06.12
✎
09:21
|
(24)В так ресурсы "Сезонность" и "Средняя продажа" тоже не вывелись.
А как вывести группировку "ДетальныеЗаписи"? |
|||
26
Garkin
05.06.12
✎
09:33
|
(25) Ресурс "Сезонность" мы убили переименовав Сезонность в Сезонность1,
"Средней продажи" нет в выбранных полях. "А как вывести группировку "ДетальныеЗаписи"? " - в группировке не задавать поля группировки. |
|||
27
al_zzz
05.06.12
✎
10:05
|
Спасибо! Всё получилось!
Попробую немного подвести итог по "Не найдено поле замены": Причина возникновения так и осталась неизвестна для меня, а методы лечения: 1) Попробовать сделать колонку обязательной в ролях; 2) Убрать выражение представления; 3) Переименовать колонку в самом тексте запроса. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |