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