База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как модифицировать запрос для системы компоновки данных в 1С? › RE: Как модифицировать запрос для системы компоновки данных в 1С?
 Odin — Одинэсник
Odin — ОдинэсникДля использования данного запроса в системе компоновки данных (СКД) в 1С необходимо:
1. Убрать комментарии из текста запроса (СКД не поддерживает комментарии в запросе).
2. Заменить параметры на параметры СКД (например, &НаименованиеОперации).
3. Убедиться, что все функции и конструкции поддерживаются СКД (функция ЕСТЬNULL поддерживается, ВЫБОР тоже).
4. В СКД запросы пишутся в обычном синтаксисе 1С, но с некоторыми ограничениями.
Ниже приведён пример модифицированного запроса для СКД с параметром НаименованиеОперации:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | bsl ВЫБРАТЬ   НАЧАЛОПЕРИОДА(ЭМИСменноеЗадание.Дата, ДЕНЬ) КАК Дата,   ЭМИСменноеЗаданиеСостав.НаименованиеОперации КАК Операция,   СУММА(ЭМИСменноеЗаданиеСостав.Количество) КАК КоличествоПоПлану,   СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) КАК КоличествоФакт,   ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0) КАК КоличествоПоНормативу,   (СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) - ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0)) КАК Отклонение,   ВЫБОР     КОГДА СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) > ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0)       ТОГДА "Выше нормы"     КОГДА СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) < ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0)       ТОГДА "Ниже нормы"     ИНАЧЕ "Соответствует норме"   КОНЕЦ КАК СтатусВыполнения ИЗ   Документ.ЭМИСменноеЗадание КАК ЭМИСменноеЗадание     ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭМИСменноеЗадание.Состав КАК ЭМИСменноеЗаданиеСостав     ПО ЭМИСменноеЗадание.Ссылка = ЭМИСменноеЗаданиеСостав.Ссылка     ЛЕВОЕ СОЕДИНЕНИЕ       (ВЫБРАТЬ          НормативыЗагрузкиПроизводстваСрезПоследних.Операция КАК Операция,          НормативыЗагрузкиПроизводстваСрезПоследних.Количество КАК КоличествоПоНормативу        ИЗ          РегистрСведений.НормативыЗагрузкиПроизводства.СрезПоследних КАК НормативыЗагрузкиПроизводстваСрезПоследних        ГДЕ          НормативыЗагрузкиПроизводстваСрезПоследних.Операция = &НаименованиеОперации       ) КАК Нормативы     ПО ЭМИСменноеЗаданиеСостав.НаименованиеОперации = Нормативы.Операция ГДЕ   ЭМИСменноеЗадание.Проведен   И ЭМИСменноеЗаданиеСостав.НаименованиеОперации = &НаименованиеОперации ГРУППИРОВАТЬ ПО   НАЧАЛОПЕРИОДА(ЭМИСменноеЗадание.Дата, ДЕНЬ),   ЭМИСменноеЗаданиеСостав.НаименованиеОперации УПОРЯДОЧИТЬ ПО   Дата | 
**Особенности для СКД:**
— Параметр &НаименованиеОперации нужно добавить в параметры отчёта в СКД.
— В СКД нельзя использовать вложенные запросы в FROM, поэтому левое соединение с подзапросом может не работать напрямую. В этом случае можно вынести нормативы в отдельный набор данных и связать их через механизм связей наборов данных в СКД.
— Если требуется объединить данные из нескольких наборов данных, то в СКД создают несколько наборов данных и связывают их по ключам.
—
### Рекомендации по реализации в СКД:
1. Создайте два набора данных:
   — Первый набор данных — запрос по документу ЭМИСменноеЗадание и его составу (без нормативов).
   — Второй набор данных — запрос по регистру сведений НормативыЗагрузкиПроизводства.СрезПоследних.
2. В схеме компоновки данных создайте связь между наборами данных по полю Операция.
3. В отчёте используйте вычисляемые поля для расчёта отклонения и статуса выполнения, например:
| 1 2 3 4 5 6 7 | bsl Отклонение = КоличествоФакт - КоличествоПоНормативу СтатусВыполнения = ВЫБОР   КОГДА КоличествоФакт > КоличествоПоНормативу ТОГДА "Выше нормы"   КОГДА КоличествоФакт < КоличествоПоНормативу ТОГДА "Ниже нормы"   ИНАЧЕ "Соответствует норме" КОНЕЦ | 
4. Параметр НаименованиеОперации добавьте в параметры отчёта.
—
Если нужна конкретная реализация с кодом для создания набора данных и схемы компоновки — могу помочь с примером.
Рекомендую посмотреть здесь: https://infostart.ru/public/1896711/
