Доброго дня, коллеги.
Имеется УТ11.3, но подсистема планирования продаж не устроила, сказали создать свою.
Основные виды плана: по количеству штук, количеству SKU, количеству партнеров, по выручке, по весу. Но к ним возможны отборы по номенклатуре и партнёрам.
Например: план по продаже 10 различных SKU из группы/сегмента, да ещё и определенным партнерам, или 100 кг чего-либо.
Для этого был создан новый документ "План продаж" С ТЧ "СоставПлана" (поля "ТипПлана", "КлючСвязи" и "Значение"), ТЧ "ОтборНоменклатура" (поля "КлючСвязи" и "Номенклатура"), ТЧ "ОтборПартнер" (поля "КлючСвязи" и "Партнер").
Таким образом для каждого типа плана можно указать отбор по номенклатуре или клиентам.
Движения пишутся в одноименные регистры, я подумал, что лучше бы эти отборы разделить по таблицам (по uid'у поля "КлючСвязи").
Так вот теперь не пойму как бы мне на основании этих данных отчет построить по план-факт показателям...
Группировки отчета: менеджер, партнер, номенклатура, заказ-клиента
Ресурсы: план, факт
Я уже собрал запрос по план/факт показателям динамически, но лишь менеджеру и периоду. Не хотелось бы всю эту жуть перенести в ПриКомпоновкеОтчета() (да ещё в цикле по всем менеджерам, по которым план установлен).
Есть идеи?:) Может хоть хотя бы "вектор движения" подскажет кто.
Имеется УТ11.3, но подсистема планирования продаж не устроила, сказали создать свою.
Основные виды плана: по количеству штук, количеству SKU, количеству партнеров, по выручке, по весу. Но к ним возможны отборы по номенклатуре и партнёрам.
Например: план по продаже 10 различных SKU из группы/сегмента, да ещё и определенным партнерам, или 100 кг чего-либо.
Для этого был создан новый документ "План продаж" С ТЧ "СоставПлана" (поля "ТипПлана", "КлючСвязи" и "Значение"), ТЧ "ОтборНоменклатура" (поля "КлючСвязи" и "Номенклатура"), ТЧ "ОтборПартнер" (поля "КлючСвязи" и "Партнер").
Таким образом для каждого типа плана можно указать отбор по номенклатуре или клиентам.
Движения пишутся в одноименные регистры, я подумал, что лучше бы эти отборы разделить по таблицам (по uid'у поля "КлючСвязи").
Так вот теперь не пойму как бы мне на основании этих данных отчет построить по план-факт показателям...
Группировки отчета: менеджер, партнер, номенклатура, заказ-клиента
Ресурсы: план, факт
Я уже собрал запрос по план/факт показателям динамически, но лишь менеджеру и периоду. Не хотелось бы всю эту жуть перенести в ПриКомпоновкеОтчета() (да ещё в цикле по всем менеджерам, по которым план установлен).
&НаСервере
Процедура Тест()
Запрос = Новый Запрос();
Запрос.Текст = ПолучитьТекстЗапросаПлановПродаж();
Запрос.УстановитьПараметр("ПериодПланирования", ПериодПланирования);
Запрос.УстановитьПараметр("Менеджер", Менеджер);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Выполнить();
Выборка = МенеджерВременныхТаблиц.Таблицы.Найти("ПланПродажПоМенеджеруДетальная").ПолучитьДанные().Выбрать();
ШаблонТекстаЗапроса = ПолучитьШаблонТекстаЗапроса();
МассивЗапросов = Новый Массив;
ПолныйЗапросПланов = Новый Запрос();
ТребуетсяПоместитьВоВременнуюТаблицу = Истина;
Пока Выборка.Следующий() Цикл
НовыйЗапросПлана = ШаблонТекстаЗапроса;
ЗаполнитьОтборы(НовыйЗапросПлана, Выборка, ПолныйЗапросПланов);
Если ТребуетсяПоместитьВоВременнуюТаблицу Тогда
НовыйЗапросПлана = СтрЗаменить(НовыйЗапросПлана, "КАК КоличествоSKU", "КАК КоличествоSKU" + Символы.ПС + "ПОМЕСТИТЬ РезультатыПродаж");
ТребуетсяПоместитьВоВременнуюТаблицу = Ложь;
КонецЕсли;
МассивЗапросов.Добавить(НовыйЗапросПлана);
КонецЦикла;
ТекстЗапросаПлановПоМенеджеру = СтрСоединить(МассивЗапросов, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС);
ПолныйЗапросПланов.Текст = ТекстЗапросаПлановПоМенеджеру;
ПолныйЗапросПланов.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ПолныйЗапросПланов.УстановитьПараметр("Менеджер", Менеджер);
ПолныйЗапросПланов.УстановитьПараметр("НачалоПериода", ПериодПланирования);
ПолныйЗапросПланов.УстановитьПараметр("ОкончаниеПериода", КонецМесяца(ПериодПланирования));
Результат = ПолныйЗапросПланов.Выполнить();
Если Результат.Пустой() Тогда Возврат; КонецЕсли;
ИтоговыйЗапрос = Новый Запрос;
ИтоговыйЗапрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ИтоговыйЗапрос.УстановитьПараметр("ПериодПланирования", ПериодПланирования);
ИтоговыйЗапрос.УстановитьПараметр("Менеджер", Менеджер);
ИтоговыйЗапрос.Текст = "ВЫБРАТЬ
| *
|ИЗ
| ПланПродажПоМенеджеруДетальная КАК ПланПродажПоМенеджеру
| ЛЕВОЕ СОЕДИНЕНИЕ РезультатыПродаж КАК РезультатыПродаж
| ПО ПланПродажПоМенеджеру.КлючСвязи = РезультатыПродаж.КлючСвязи
|УПОРЯДОЧИТЬ ПО
| ПланПродажПоМенеджеру.НомерСтроки";
Результат = ИтоговыйЗапрос.Выполнить();
Если Результат.Пустой() Тогда Возврат; КонецЕсли;
Жесть = Результат.Выгрузить();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьОтборы(ТекстЗапроса, Условия, ИтоговыйЗапрос)
ИмяПараметра = "КлючСвязи" + Условия.НомерСтроки;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&КлючСвязи", "&" + ИмяПараметра);
Если Условия.ЕстьОтборПоНоменклатуре Тогда
ТекстУсловия = СтрШаблон("
|АналитикаНоменклатуры.Номенклатура В
| (ВЫБРАТЬ
| ОтборПоНоменклатуре.Номенклатура
| ИЗ
| ОтборПоНоменклатуре
| ГДЕ
| ОтборПоНоменклатуре.КлючСвязи = &%1)", ИмяПараметра);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоНоменклатуре", ТекстУсловия);
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоНоменклатуре", "ИСТИНА");
КонецЕсли;
Если Условия.ЕстьОтборПоПартнерам Тогда
ТекстУсловия = СтрШаблон("
|АналитикаПоПартнерам.Партнер В
| (ВЫБРАТЬ
| ОтборПоПартнерам.Партнер
| ИЗ
| ОтборПоПартнерам
| ГДЕ
| ОтборПоПартнерам.КлючСвязи = %1)", ИмяПараметра);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоПартнерам", "ИСТИНА");
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПоПартнерам", "ИСТИНА");
КонецЕсли;
ИтоговыйЗапрос.УстановитьПараметр(ИмяПараметра, Условия.КлючСвязи);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьТекстЗапросаПлановПродаж()
Возврат "ВЫБРАТЬ
| ИТМ_ПланыПродаж.Регистратор КАК Регистратор,
| ИТМ_ПланыПродаж.НомерСтроки,
| ИТМ_ПланыПродаж.ПериодПланирования,
| ИТМ_ПланыПродаж.Менеджер,
| ИТМ_ПланыПродаж.КлючСвязи КАК КлючСвязи,
| ИТМ_ПланыПродаж.ТипПлана КАК ТипПлана,
| ИТМ_ПланыПродаж.Значение КАК Значение
|ПОМЕСТИТЬ ПланПродажПоМенеджеру
|ИЗ
| РегистрСведений.ИТМ_ПланыПродаж КАК ИТМ_ПланыПродаж
|ГДЕ
| ИТМ_ПланыПродаж.ПериодПланирования = &ПериодПланирования
| И ИТМ_ПланыПродаж.Менеджер = &Менеджер
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ИСТИНА КАК Флаг,
| ИТМ_ПланыПродажНоменклатура.КлючСвязи,
| ИТМ_ПланыПродажНоменклатура.Номенклатура
|ПОМЕСТИТЬ ОтборПоНоменклатуре
|ИЗ
| РегистрСведений.ИТМ_ПланыПродажНоменклатура КАК ИТМ_ПланыПродажНоменклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланПродажПоМенеджеру КАК ПланПродажПоМенеджеру
| ПО (ПланПродажПоМенеджеру.Регистратор = ИТМ_ПланыПродажНоменклатура.Регистратор)
| И (ПланПродажПоМенеджеру.КлючСвязи = ИТМ_ПланыПродажНоменклатура.КлючСвязи)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ИСТИНА КАК Флаг,
| ИТМ_ПланыПродажПартнеры.КлючСвязи,
| ИТМ_ПланыПродажПартнеры.Партнер
|ПОМЕСТИТЬ ОтборПоПартнерам
|ИЗ
| РегистрСведений.ИТМ_ПланыПродажПартнеры КАК ИТМ_ПланыПродажПартнеры
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланПродажПоМенеджеру КАК ПланПродажПоМенеджеру
| ПО ИТМ_ПланыПродажПартнеры.Регистратор = ПланПродажПоМенеджеру.Регистратор
| И ИТМ_ПланыПродажПартнеры.КлючСвязи = ПланПродажПоМенеджеру.КлючСвязи
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ПланПродажПоМенеджеру.Регистратор КАК Регистратор,
| ПланПродажПоМенеджеру.НомерСтроки,
| ПланПродажПоМенеджеру.КлючСвязи КАК КлючСвязи,
| ПланПродажПоМенеджеру.ТипПлана КАК ТипПлана,
| ПланПродажПоМенеджеру.Значение КАК Значение,
| МАКСИМУМ(ЕСТЬNULL(ОтборПоНоменклатуре.Флаг, ЛОЖЬ)) КАК ЕстьОтборПоНоменклатуре,
| МАКСИМУМ(ЕСТЬNULL(ОтборПоПартнерам.Флаг, ЛОЖЬ)) КАК ЕстьОтборПоПартнерам
|ПОМЕСТИТЬ ПланПродажПоМенеджеруДетальная
|ИЗ
| ПланПродажПоМенеджеру КАК ПланПродажПоМенеджеру
| ЛЕВОЕ СОЕДИНЕНИЕ ОтборПоНоменклатуре КАК ОтборПоНоменклатуре
| ПО ПланПродажПоМенеджеру.КлючСвязи = ОтборПоНоменклатуре.КлючСвязи
| ЛЕВОЕ СОЕДИНЕНИЕ ОтборПоПартнерам КАК ОтборПоПартнерам
| ПО ПланПродажПоМенеджеру.КлючСвязи = ОтборПоПартнерам.КлючСвязи
|
|СГРУППИРОВАТЬ ПО
| ПланПродажПоМенеджеру.Регистратор,
| ПланПродажПоМенеджеру.КлючСвязи,
| ПланПродажПоМенеджеру.ТипПлана,
| ПланПродажПоМенеджеру.Значение,
| ПланПродажПоМенеджеру.НомерСтроки
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|УНИЧТОЖИТЬ ПланПродажПоМенеджеру";
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьШаблонТекстаЗапроса()
Возврат "ВЫБРАТЬ
| &КлючСвязи КАК КлючСвязи,
| СУММА(ВложенныйЗапрос.Количество) КАК КоличествоШт,
| СУММА(ВложенныйЗапрос.Выручка) КАК Выручка,
| СУММА(ВложенныйЗапрос.ВаловаяПрибыль) КАК Прибыль,
| СУММА(ВложенныйЗапрос.Вес) КАК Вес,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.Партнер) КАК КоличествоПартнеров,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.Номенклатура) КАК КоличествоSKU
|ИЗ
| (ВЫБРАТЬ
| АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
| АналитикаПоПартнерам.Партнер КАК Партнер,
| СУММА(ВыручкаИСебестоимость.КоличествоОборот) КАК Количество,
| СУММА(ВыручкаИСебестоимость.СуммаВыручкиОборот) КАК Выручка,
| СУММА(ВыручкаИСебестоимость.СебестоимостьОборот) КАК Себестоимость,
| СУММА(ВЫРАЗИТЬ(ВыручкаИСебестоимость.СуммаВыручкиОборот - ВыручкаИСебестоимость.СуммаДополнительныхРасходовОборот - ВыручкаИСебестоимость.СебестоимостьОборот КАК ЧИСЛО(15, 2))) КАК ВаловаяПрибыль,
| СУММА(ВыручкаИСебестоимость.СуммаДополнительныхРасходовОборот) КАК СуммаДопРасходов,
| СУММА(ВыручкаИСебестоимость.КоличествоОборот * (ВЫРАЗИТЬ(ВЫБОР
| КОГДА АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
| И АналитикаНоменклатуры.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Числитель / АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
| КОГДА АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
| И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Вес * АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Числитель / АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
| КОГДА (АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
| ИЛИ АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ПустаяСсылка)
| ИЛИ ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Ссылка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
| И АналитикаНоменклатуры.Номенклатура.ВесИспользовать
| И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ВесЗнаменатель, 0) <> 0
| И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
| ТОГДА ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура.ВесЧислитель / АналитикаНоменклатуры.Номенклатура.ВесЗнаменатель * (АналитикаНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель / АналитикаНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
| ИНАЧЕ 0
| КОНЕЦ / (ВЫРАЗИТЬ(1 КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7)))) КАК Вес
| ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &ОкончаниеПериода, Авто, Менеджер = &Менеджер) КАК ВыручкаИСебестоимость
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
| ПО ВыручкаИСебестоимость.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
| ПО ВыручкаИСебестоимость.АналитикаУчетаПоПартнерам = АналитикаПоПартнерам.КлючАналитики
| ГДЕ
| АналитикаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
| И &ОтборПоНоменклатуре
| И &ОтборПоПартнерам
|
| СГРУППИРОВАТЬ ПО
| АналитикаНоменклатуры.Номенклатура,
| АналитикаПоПартнерам.Партнер) КАК ВложенныйЗапрос";
КонецФункции
// т.е. имеем шаблон, на основании его создаём итоговый по всем показателям, попутно устанавливаем отбор, а в конце соединяем тип плана и данные продаж по uid'у.
ПоказатьЕсть идеи?:) Может хоть хотя бы "вектор движения" подскажет кто.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Да ума не хватает.
Логику вроде понимаю...
1. Берём планы с отборами
2. Берём все факт продажи без отборов
3. Далее нужно как-то разделить планы продаж на кучу объединений по типу плана и каждый запрос из объединения нужно соединить с продажами по сложному условию (добавить какой-нибудь признак есть отбор или нету, и по нему накладывать отбор).
Как-то сложновато выходит =\
Логику вроде понимаю...
1. Берём планы с отборами
2. Берём все факт продажи без отборов
3. Далее нужно как-то разделить планы продаж на кучу объединений по типу плана и каждый запрос из объединения нужно соединить с продажами по сложному условию (добавить какой-нибудь признак есть отбор или нету, и по нему накладывать отбор).
Как-то сложновато выходит =\
Добрый день.
Где ошибка в моих рассуждениях?
Ваша задача отчет.
Группировки отчета: менеджер, партнер, номенклатура, заказ-клиента
Ресурсы: план, факт
Структура таблиц (скрин) не позволяет получить план по номенклатуре,
так как план ведется только в разрезе типов планов.
Где ошибка в моих рассуждениях?
Ваша задача отчет.
Группировки отчета: менеджер, партнер, номенклатура, заказ-клиента
Ресурсы: план, факт
Структура таблиц (скрин) не позволяет получить план по номенклатуре,
так как план ведется только в разрезе типов планов.
(7) Исходя из вашей структуры - в ТЧ "Состав плана" все ключи должны быть уникальны (с общей суммой продаж). Соответственно, для этого плана может быть несколько номенклатур (с этим же ключом), и несколько партнеров (с этим же ключом). А вот как вы собрались распределять какому партнеру какой и сколько номенклатуры запланировать к продаже - этого у вас нет. И никакими запросами вы это не исправите.
Вам архитектуру менять надо.
Вам архитектуру менять надо.
(9)
Этого не требуется. Нужно N номенклатур продать M партнерам, а не конкретную позицию конкретному партнеру. Да даже если потребуется последнее, то достаточно добавить новую строку в состав плана, она будет иметь новый UID и свои отборы.
А вот как вы собрались распределять какому партнеру какой и сколько номенклатуры запланировать к продаже - этого у вас нет. И никакими запросами вы это не исправите
Этого не требуется. Нужно N номенклатур продать M партнерам, а не конкретную позицию конкретному партнеру. Да даже если потребуется последнее, то достаточно добавить новую строку в состав плана, она будет иметь новый UID и свои отборы.
я бы предложил такой вариант:
1 таблица план
менеджер, партнер, номенклатура, количество план, 0
Собирается из документа план продаж
Иванов, ООО РОмашка, Яблоки 10 0
Петров, ООО лютик, Яблоки 20 0
2 таблица факт
менеджер, партнер, номенклатура, 0 количество факт
Собирается по регистрам продаж или по документам
Иванов, ООО РОмашка, Яблоки 0 5
Объединяем 2 таблицы
Иванов, ООО РОмашка, Яблоки 10 0
Петров, ООО лютик, Яблоки 20 0
Иванов, ООО РОмашка, Яблоки 0 5
и группируем по менеджер, партнер, номенклатура
Иванов, ООО РОмашка, Яблоки 10 5
Петров, ООО лютик, Яблоки 20 0
Все это можно сделать 1 запросом
1 таблица план
менеджер, партнер, номенклатура, количество план, 0
Собирается из документа план продаж
Иванов, ООО РОмашка, Яблоки 10 0
Петров, ООО лютик, Яблоки 20 0
2 таблица факт
менеджер, партнер, номенклатура, 0 количество факт
Собирается по регистрам продаж или по документам
Иванов, ООО РОмашка, Яблоки 0 5
Объединяем 2 таблицы
Иванов, ООО РОмашка, Яблоки 10 0
Петров, ООО лютик, Яблоки 20 0
Иванов, ООО РОмашка, Яблоки 0 5
и группируем по менеджер, партнер, номенклатура
Иванов, ООО РОмашка, Яблоки 10 5
Петров, ООО лютик, Яблоки 20 0
Все это можно сделать 1 запросом
Хочу попробовать одним запросом сначала.
Пока наваял такое:
Пока наваял такое:
ВЫБРАТЬ
АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
АналитикаПоПартнерам.Партнер КАК Партнер,
Продажи.КоличествоОборот КАК Количество,
Продажи.СуммаВыручкиОборот КАК Выручка,
Продажи.КоличествоОборот * (ВЫРАЗИТЬ(ВЫБОР
КОГДА АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
И АналитикаНоменклатуры.Номенклатура.ВесИспользовать
И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Числитель / АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
КОГДА АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Вес * АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Числитель / АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(15, 7))
КОГДА (АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
ИЛИ АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ПустаяСсылка)
ИЛИ ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ЕдиницаИзмерения.Ссылка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка))
И АналитикаНоменклатуры.Номенклатура.ВесИспользовать
И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ВесЗнаменатель, 0) <> 0
И ЕСТЬNULL(АналитикаНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
ТОГДА ВЫРАЗИТЬ(АналитикаНоменклатуры.Номенклатура.ВесЧислитель / АналитикаНоменклатуры.Номенклатура.ВесЗнаменатель * (АналитикаНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель / АналитикаНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель) КАК ЧИСЛО(15, 7))
ИНАЧЕ 0
КОНЕЦ / (ВЫРАЗИТЬ(1 КАК ЧИСЛО(15, 7))) КАК ЧИСЛО(15, 7))) КАК Вес,
Продажи.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ Продажи
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &ОкончаниеПериода, Авто, Менеджер = &Менеджер) КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
ПО (Продажи.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаПоПартнерам
ПО (Продажи.АналитикаУчетаПоПартнерам = АналитикаПоПартнерам.КлючАналитики)
ГДЕ
АналитикаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ИТМ_ПланыПродаж.Регистратор КАК Регистратор,
ИТМ_ПланыПродаж.НомерСтроки КАК НомерСтроки,
ИТМ_ПланыПродаж.КлючСвязи КАК КлючСвязи,
ИТМ_ПланыПродаж.ТипПлана КАК ТипПлана,
ИТМ_ПланыПродаж.Значение КАК Значение
ПОМЕСТИТЬ ПланПродаж
ИЗ
РегистрСведений.ИТМ_ПланыПродаж КАК ИТМ_ПланыПродаж
ГДЕ
ИТМ_ПланыПродаж.ПериодПланирования = &НачалоПериода
И ИТМ_ПланыПродаж.Менеджер = &Менеджер
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПланПродаж.ТипПлана КАК ТипПлана,
МАКСИМУМ(ПланПродаж.Значение) КАК План,
ВЫБОР ПланПродаж.ТипПлана
КОГДА ЗНАЧЕНИЕ(Перечисление.ИТМ_ТипПлана.КоличествоШт)
ТОГДА СУММА(Продажи.Количество)
КОГДА ЗНАЧЕНИЕ(Перечисление.ИТМ_ТипПлана.КоличествоSKU)
ТОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура)
КОГДА ЗНАЧЕНИЕ(Перечисление.ИТМ_ТипПлана.КоличествоПартнеров)
ТОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Партнер)
КОГДА ЗНАЧЕНИЕ(Перечисление.ИТМ_ТипПлана.Выручка)
ТОГДА СУММА(Продажи.Выручка)
КОГДА ЗНАЧЕНИЕ(Перечисление.ИТМ_ТипПлана.Вес)
ТОГДА СУММА(Продажи.Вес)
ИНАЧЕ 0
КОНЕЦ КАК Факт,
Продажи.Номенклатура КАК Номенклатура,
Продажи.Партнер КАК Партнер,
Продажи.ЗаказКлиента КАК ЗаказКлиента
ИЗ
ПланПродаж КАК ПланПродаж
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИТМ_ПланыПродажНоменклатура КАК ОтборПоНоменклатуре
ПО ПланПродаж.КлючСвязи = ОтборПоНоменклатуре.КлючСвязи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИТМ_ПланыПродажПартнеры КАК ОтборПоПартнерам
ПО ПланПродаж.КлючСвязи = ОтборПоПартнерам.КлючСвязи
ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
ПО (ВЫБОР
КОГДА ОтборПоНоменклатуре.КлючСвязи ЕСТЬ НЕ NULL
ТОГДА ОтборПоНоменклатуре.Номенклатура = Продажи.Номенклатура
ИНАЧЕ ИСТИНА
КОНЕЦ)
И (ВЫБОР
КОГДА ОтборПоНоменклатуре.КлючСвязи ЕСТЬ НЕ NULL
ТОГДА ОтборПоПартнерам.Партнер = Продажи.Партнер
ИНАЧЕ ИСТИНА
КОНЕЦ)
СГРУППИРОВАТЬ ПО
ПланПродаж.ТипПлана,
Продажи.Номенклатура,
Продажи.Партнер,
Продажи.ЗаказКлиента
ПоказатьИ (ВЫБОР
КОГДА ОтборПоНоменклатуре.КлючСвязи ЕСТЬ НЕ NULL
Тут тоже наверное ошибка
А вообще лучше еще один подзапрос добавить сначала для получения плана и суммы плана
а дальше уже с продажами соединять опять же тремя подзапросами, три левых соединения..не очень хорошо..
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот