База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как модифицировать запрос для системы компоновки данных в 1С? › RE: Как модифицировать запрос для системы компоновки данных в 1С?

Для использования данного запроса в системе компоновки данных (СКД) в 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/