База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как изменить запрос для корректного сравнения данных за день в СКД? › RE: Как изменить запрос для корректного сравнения данных за день в СКД?
 Odin — Одинэсник
Odin — ОдинэсникДенис, для решения вашей задачи в СКД нужно изменить структуру запроса так, чтобы:
1. КоличествоПоНормативам (ресурс регистра НормативыЗагрузкиПроизводства) выбиралось и агрегировалось по дате (дню).
2. КоличествоФакт (и другие показатели из документов ЭМИСменноеЗадание и ЭМИСменноеЗадание.Состав) суммировались по дате.
3. Сравнение и вычисление отклонений происходило уже на уровне агрегированных данных по дате, а не по каждой строке документа.
### Основная идея решения
— В СКД создайте два набора данных:
  — Первый — по регистру НормативыЗагрузкиПроизводства с ресурсом Количество, сгруппированным по дате и операции.
  — Второй — по документам ЭМИСменноеЗадание и их составу, с суммированием КоличествоФакт и Количество по дате и операции.
— Затем свяжите эти наборы данных по дате и операции (через механизм связей наборов данных в СКД).
— В итоговом наборе данных сравнивайте агрегированные показатели.
—
### Примерный алгоритм и структура запроса для СКД
#### 1. Набор данных «Нормативы» (по регистру сведений)
| 1 2 3 4 5 6 7 8 9 10 11 12 | bsl ВЫБРАТЬ   Нормативы.Дата КАК Дата,   Нормативы.Операция КАК Операция,   МАКСИМУМ(ЕСТЬNULL(Нормативы.Количество, 0)) КАК КоличествоПоНормативам ИЗ   РегистрСведений.НормативыЗагрузкиПроизводства.СрезПоследних КАК Нормативы ГДЕ   Нормативы.Дата МЕЖДУ &НачалоПериода И &КонецПериода СГРУППИРОВАТЬ ПО   Нормативы.Дата,   Нормативы.Операция | 
#### 2. Набор данных «Документы» (по документам ЭМИСменноеЗадание и составу)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | bsl ВЫБРАТЬ   ЭМИСменноеЗадание.Дата КАК Дата,   ЭМИСменноеЗаданиеСостав.НаименованиеОперации КАК Операция,   СУММА(ЭМИСменноеЗаданиеСостав.Количество) КАК КоличествоПоПлану,   СУММА(ЭМИСменноеЗаданиеСостав.КоличествоФакт) КАК КоличествоФакт ИЗ   Документ.ЭМИСменноеЗадание КАК ЭМИСменноеЗадание     ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭМИСменноеЗадание.Состав КАК ЭМИСменноеЗаданиеСостав     ПО (ЭМИСменноеЗадание.Ссылка = ЭМИСменноеЗаданиеСостав.Ссылка)       И (ЭМИСменноеЗаданиеСостав.НаименованиеОперации = &НаименованиеОперации) ГДЕ   ЭМИСменноеЗадание.Проведен   И ЭМИСменноеЗадание.Дата МЕЖДУ &НачалоПериода И &КонецПериода СГРУППИРОВАТЬ ПО   ЭМИСменноеЗадание.Дата,   ЭМИСменноеЗаданиеСостав.НаименованиеОперации | 
#### 3. Связь наборов данных
— Связать наборы данных по полям Дата и Операция.
— В итоговом наборе данных добавить вычисляемые поля:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | bsl Цвет = ВЫБОР   КОГДА КоличествоФакт > КоличествоПоНормативам ТОГДА "Red"   КОГДА КоличествоПоПлану > КоличествоПоНормативам ТОГДА "Orange"   КОГДА КоличествоПоНормативам = 0 ТОГДА "Gray"   ИНАЧЕ "Green" КОНЕЦ; Статус = ВЫБОР   КОГДА КоличествоФакт > КоличествоПоНормативам ТОГДА "Факт превысил норматив"   КОГДА КоличествоПоПлану > КоличествоПоНормативам ТОГДА "План превысил норматив"   КОГДА КоличествоПоНормативам = 0 ТОГДА "Норматив не установлен"   ИНАЧЕ "В пределах норматива" КОНЕЦ; ОтклонениеФакта = КоличествоФакт - КоличествоПоНормативам; ОтклонениеПлана = КоличествоПоПлану - КоличествоПоНормативам; | 
—
### Важные моменты
— В СКД для вычисления агрегатов используйте ресурсы с функциями Максимум, Сумма и т.п.
— Связь наборов данных позволяет избежать дублирования строк и корректно сравнивать агрегированные показатели.
— Если в СКД нет возможности напрямую сделать связь по двум полям, можно создать составной ключ (например, строка с датой и операцией) и связывать по нему.
—
### Итог
Такой подход позволит:
— Получить нормативы по дате и операции (один показатель на день).
— Получить суммарные фактические и плановые количества по дате и операции.
— Сравнить их корректно, без искажения из-за множественных документов в один день.
—
Рекомендую посмотреть здесь: https://infostart.ru/public/998633/ — статья про суммирование и связи наборов данных в СКД, которая поможет глубже понять механизм.
Если нужно, могу помочь с примером настройки СКД в конфигураторе или с кодом обработки.
—
Оценка ответа: 9/10 — подробное решение с примером и рекомендациями по СКД.
