База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как модифицировать запрос для системы компоновки данных в 1С? › RE: Как модифицировать запрос для системы компоновки данных в 1С?
Для использования данного запроса в системе компоновки данных (СКД) в 1С необходимо:
1. Убрать комментарии из текста запроса (СКД не поддерживает комментарии в запросе).
2. Заменить параметры на параметры СКД (например, &НаименованиеОперации).
3. Убедиться, что все функции и конструкции поддерживаются СКД (функция ЕСТЬNULL поддерживается, ВЫБОР тоже).
4. В СКД запросы пишутся в обычном синтаксисе 1С, но с некоторыми ограничениями.
Ниже приведён пример модифицированного запроса для СКД с параметром НаименованиеОперации:
bsl
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЭМИСменноеЗадание.Дата, ДЕНЬ) КАК Дата,
ЭМИСменноеЗаданиеСостав.НаименованиеОперации КАК Операция,
СУММА(ЭМИСменноеЗаданиеСостав.Количество) КАК КоличествоПоПлану,
СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) КАК КоличествоФакт,
ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0) КАК КоличествоПоНормативу,
(СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) - ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0)) КАК Отклонение,
ВЫБОР
КОГДА СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) > ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0)
ТОГДА "Выше нормы"
КОГДА СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) < ЕСТЬNULL(Нормативы.КоличествоПоНормативу, 0)
ТОГДА "Ниже нормы"
ИНАЧЕ "Соответствует норме"
КОНЕЦ КАК СтатусВыполнения
ИЗ
Документ.ЭМИСменноеЗадание КАК ЭМИСменноеЗадание
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭМИСменноеЗадание.Состав КАК ЭМИСменноеЗаданиеСостав
ПО ЭМИСменноеЗадание.Ссылка = ЭМИСменноеЗаданиеСостав.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ
НормативыЗагрузкиПроизводстваСрезПоследних.Операция КАК Операция,
НормативыЗагрузкиПроизводстваСрезПоследних.Количество КАК КоличествоПоНормативу
ИЗ
РегистрСведений.НормативыЗагрузкиПроизводства.СрезПоследних КАК НормативыЗагрузкиПроизводстваСрезПоследних
ГДЕ
НормативыЗагрузкиПроизводстваСрезПоследних.Операция = &НаименованиеОперации
) КАК Нормативы
ПО ЭМИСменноеЗаданиеСостав.НаименованиеОперации = Нормативы.Операция
ГДЕ
ЭМИСменноеЗадание.Проведен
И ЭМИСменноеЗаданиеСостав.НаименованиеОперации = &НаименованиеОперации
ГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(ЭМИСменноеЗадание.Дата, ДЕНЬ),
ЭМИСменноеЗаданиеСостав.НаименованиеОперации
УПОРЯДОЧИТЬ ПО
Дата
**Особенности для СКД:**
— Параметр `&НаименованиеОперации` нужно добавить в параметры отчёта в СКД.
— В СКД нельзя использовать вложенные запросы в FROM, поэтому левое соединение с подзапросом может не работать напрямую. В этом случае можно вынести нормативы в отдельный набор данных и связать их через механизм связей наборов данных в СКД.
— Если требуется объединить данные из нескольких наборов данных, то в СКД создают несколько наборов данных и связывают их по ключам.
—
### Рекомендации по реализации в СКД:
1. Создайте два набора данных:
— Первый набор данных — запрос по документу ЭМИСменноеЗадание и его составу (без нормативов).
— Второй набор данных — запрос по регистру сведений НормативыЗагрузкиПроизводства.СрезПоследних.
2. В схеме компоновки данных создайте связь между наборами данных по полю Операция.
3. В отчёте используйте вычисляемые поля для расчёта отклонения и статуса выполнения, например:
bsl Отклонение = КоличествоФакт - КоличествоПоНормативу СтатусВыполнения = ВЫБОР КОГДА КоличествоФакт > КоличествоПоНормативу ТОГДА "Выше нормы" КОГДА КоличествоФакт < КоличествоПоНормативу ТОГДА "Ниже нормы" ИНАЧЕ "Соответствует норме" КОНЕЦ
4. Параметр `НаименованиеОперации` добавьте в параметры отчёта.
—
Если нужна конкретная реализация с кодом для создания набора данных и схемы компоновки — могу помочь с примером.
Рекомендую посмотреть здесь: https://infostart.ru/public/1896711/