Загрузка данных
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 21.09.26
// Расчетное ядро синхронизировано с рабочей расшифровкой сумм РОТ.
// ---DimRa
// +++DimRa 03.09.26
// Расшифровка использует те же источники стоимости, что и основной РОТ 3.0.
ВЫБРАТЬ
Строки.Ссылка КАК Ссылка,
Строки.Номенклатура КАК Номенклатура,
Строки.Компания КАК Партнер,
Строки.ЗаказчикИзБазы КАК ЗаказчикИзБазы,
Строки.Город КАК Город,
Строки.ПроектСсылка КАК ПроектСсылка,
Строки.Дата КАК Дата,
Строки.СерийныйНомер КАК СерийныйНомер,
Строки.ТипДвижения КАК ТипДвижения,
ВЫБОР
КОГДА ЕСТЬNULL(Строки.Количество, 0) = 0
ТОГДА ЕСТЬNULL(Строки.ЦенаОтгрузки, 0)
КОГДА ЕСТЬNULL(Строки.СуммаОтгрузки, 0) <> 0
ТОГДА Строки.СуммаОтгрузки / Строки.Количество
ИНАЧЕ ЕСТЬNULL(Строки.ЦенаОтгрузки, 0)
КОНЕЦ КАК ЦенаКомплекта,
СУММА(ЕСТЬNULL(Строки.Количество, 0)) КАК КоличествоПоЦене,
СУММА(
ВЫБОР
КОГДА ЕСТЬNULL(Строки.СуммаОтгрузки, 0) <> 0
ТОГДА Строки.СуммаОтгрузки
ИНАЧЕ ЕСТЬNULL(Строки.ЦенаОтгрузки, 0)
* ЕСТЬNULL(Строки.Количество, 0)
КОНЕЦ
) КАК СуммаПоЦене
ПОМЕСТИТЬ ВТ_ЦеныСтрокДистри
ИЗ
Документ.Катюша_ДистрибьюторскийОтчет_ERP.СводнаяРасход КАК Строки
ГДЕ
Строки.Дата МЕЖДУ &ДатаНач И &ДатаОконч
ИЛИ Строки.Дата МЕЖДУ &ДатаНач И &ДатаОконч
СГРУППИРОВАТЬ ПО
Строки.Ссылка, Строки.Номенклатура, Строки.Компания,
Строки.ЗаказчикИзБазы, Строки.Город, Строки.ПроектСсылка,
Строки.Дата, Строки.СерийныйНомер, Строки.ТипДвижения,
ВЫБОР
КОГДА ЕСТЬNULL(Строки.Количество, 0) = 0
ТОГДА ЕСТЬNULL(Строки.ЦенаОтгрузки, 0)
КОГДА ЕСТЬNULL(Строки.СуммаОтгрузки, 0) <> 0
ТОГДА Строки.СуммаОтгрузки / Строки.Количество
ИНАЧЕ ЕСТЬNULL(Строки.ЦенаОтгрузки, 0)
КОНЕЦ
ИНДЕКСИРОВАТЬ ПО
Ссылка, Номенклатура, Партнер, ЗаказчикИзБазы
;
////////////////////////////////////////////////////////////////////////////////
// Итог количества нужен для пропорционального разделения строки регистра
// по фактическим ценам дистрибьюторского отчета без изменения общего количества.
ВЫБРАТЬ
Цены.Ссылка КАК Ссылка,
Цены.Номенклатура КАК Номенклатура,
Цены.Партнер КАК Партнер,
Цены.ЗаказчикИзБазы КАК ЗаказчикИзБазы,
Цены.Город КАК Город,
Цены.ПроектСсылка КАК ПроектСсылка,
Цены.Дата КАК Дата,
Цены.СерийныйНомер КАК СерийныйНомер,
Цены.ТипДвижения КАК ТипДвижения,
СУММА(Цены.КоличествоПоЦене) КАК КоличествоВсего
ПОМЕСТИТЬ ВТ_ИтогиЦенСтрокДистри
ИЗ
ВТ_ЦеныСтрокДистри КАК Цены
СГРУППИРОВАТЬ ПО
Цены.Ссылка,
Цены.Номенклатура,
Цены.Партнер,
Цены.ЗаказчикИзБазы,
Цены.Город,
Цены.ПроектСсылка,
Цены.Дата,
Цены.СерийныйНомер,
Цены.ТипДвижения
ИНДЕКСИРОВАТЬ ПО
Ссылка, Номенклатура, Партнер, ЗаказчикИзБазы
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Реестр.Ссылка КАК Ссылка,
Реестр.Ссылка КАК ДокументРОТ,
Реестр.Номенклатура КАК Номенклатура,
Реестр.ЗаказчикИзБазы КАК Заказчик,
Реестр.Партнер КАК Партнер,
Реестр.Город КАК Город,
ВЫБОР
КОГДА ЕСТЬNULL(Реестр.Цена, 0) = 0
И ТИПЗНАЧЕНИЯ(Реестр.Ссылка) =
ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
И НЕ ЦеныСтрокДистри.Ссылка ЕСТЬ NULL
И ЕСТЬNULL(ИтогиЦенСтрокДистри.КоличествоВсего, 0) <> 0
ТОГДА ЕСТЬNULL(Реестр.Количество, 0)
* ЦеныСтрокДистри.КоличествоПоЦене
/ ИтогиЦенСтрокДистри.КоличествоВсего
ИНАЧЕ ЕСТЬNULL(Реестр.Количество, 0)
КОНЕЦ КАК Количество,
ВЫБОР
КОГДА ЕСТЬNULL(Реестр.Цена, 0) <> 0
ТОГДА Реестр.Цена
КОГДА ТИПЗНАЧЕНИЯ(Реестр.Ссылка) =
ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
И ЕСТЬNULL(ЦеныСтрокДистри.КоличествоПоЦене, 0) <> 0
ТОГДА ЦеныСтрокДистри.СуммаПоЦене
/ ЦеныСтрокДистри.КоличествоПоЦене
ИНАЧЕ 0
КОНЕЦ КАК Цена,
ВЫБОР
КОГДА ЕСТЬNULL(Реестр.Цена, 0) <> 0
ТОГДА ЕСТЬNULL(Реестр.Количество, 0) * Реестр.Цена
КОГДА ТИПЗНАЧЕНИЯ(Реестр.Ссылка) =
ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
И НЕ ЦеныСтрокДистри.Ссылка ЕСТЬ NULL
И ЕСТЬNULL(ИтогиЦенСтрокДистри.КоличествоВсего, 0) <> 0
ТОГДА ЕСТЬNULL(Реестр.Количество, 0)
* ЦеныСтрокДистри.СуммаПоЦене
/ ИтогиЦенСтрокДистри.КоличествоВсего
ИНАЧЕ 0
КОНЕЦ КАК СуммаПродаж,
ВЫРАЗИТЬ(Реестр.ИНН КАК СТРОКА(50)) КАК ИНН,
ВЫРАЗИТЬ(Реестр.Партнер.ИНН КАК СТРОКА(50)) КАК ПартнерИНН,
Реестр.ДатаОтгрузки КАК ДатаОтгрузки,
Реестр.ДатаОтгрузкиВСтроке КАК ДатаОтгрузкиИсходная,
ВЫБОР
КОГДА Реестр.ЭтоРеализация И НЕ РасходныйОрдерНаТовары.Ссылка ЕСТЬ NULL
ТОГДА РасходныйОрдерНаТовары.ДатаОтгрузки
ИНАЧЕ Реестр.ДатаОтгрузкиВСтроке
КОНЕЦ КАК ДатаОтгрузкиВСтроке,
Реестр.СерияНоменклатуры КАК СерияНоменклатуры,
Реестр.КАМ КАК КАМ,
Реестр.ПартнерскийМенеджер КАК ПартнерскийМенеджер,
Реестр.ПроектСсылка КАК ПроектИзРегистра
ПОМЕСТИТЬ ВТ
ИЗ
РегистрСведений.Катюша_ДанныеСведенийДляРеестраОтгруженнойТехники КАК Реестр
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары
ПО Реестр.Ссылка = РасходныйОрдерНаТовары.Ссылка
И Реестр.ЭтоРеализация
И РасходныйОрдерНаТовары.Проведен
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦеныСтрокДистри КАК ЦеныСтрокДистри
ПО Реестр.Ссылка = ЦеныСтрокДистри.Ссылка
И ЕСТЬNULL(Реестр.Цена, 0) = 0
И Реестр.Номенклатура = ЦеныСтрокДистри.Номенклатура
И Реестр.Партнер = ЦеныСтрокДистри.Партнер
И Реестр.ЗаказчикИзБазы = ЦеныСтрокДистри.ЗаказчикИзБазы
И Реестр.Город = ЦеныСтрокДистри.Город
И Реестр.ПроектСсылка = ЦеныСтрокДистри.ПроектСсылка
И Реестр.ДатаОтгрузкиВСтроке = ЦеныСтрокДистри.Дата
И Реестр.СерияНоменклатуры = ЦеныСтрокДистри.СерийныйНомер
И Реестр.ТипДвижения = ЦеныСтрокДистри.ТипДвижения
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИтогиЦенСтрокДистри КАК ИтогиЦенСтрокДистри
ПО ЦеныСтрокДистри.Ссылка = ИтогиЦенСтрокДистри.Ссылка
И ЦеныСтрокДистри.Номенклатура = ИтогиЦенСтрокДистри.Номенклатура
И ЦеныСтрокДистри.Партнер = ИтогиЦенСтрокДистри.Партнер
И ЦеныСтрокДистри.ЗаказчикИзБазы = ИтогиЦенСтрокДистри.ЗаказчикИзБазы
И ЦеныСтрокДистри.Город = ИтогиЦенСтрокДистри.Город
И ЦеныСтрокДистри.ПроектСсылка = ИтогиЦенСтрокДистри.ПроектСсылка
И ЦеныСтрокДистри.Дата = ИтогиЦенСтрокДистри.Дата
И ЦеныСтрокДистри.СерийныйНомер = ИтогиЦенСтрокДистри.СерийныйНомер
И ЦеныСтрокДистри.ТипДвижения = ИтогиЦенСтрокДистри.ТипДвижения
ГДЕ
(ТИПЗНАЧЕНИЯ(Реестр.Ссылка) =
ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ИЛИ Реестр.ЭтоРеализация)
И (
(
(Реестр.Номенклатура.Катюша_АппаратРМ =
ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
ИЛИ Реестр.Номенклатура.Катюша_АппаратРМ =
ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.РМ))
И (Реестр.Номенклатура В ИЕРАРХИИ (&Катюша)
ИЛИ Реестр.Номенклатура В ИЕРАРХИИ (&Sindoh))
И (
ВЫБОР
КОГДА Реестр.ЭтоРеализация
И НЕ РасходныйОрдерНаТовары.Ссылка ЕСТЬ NULL
ТОГДА РасходныйОрдерНаТовары.ДатаОтгрузки
ИНАЧЕ Реестр.ДатаОтгрузкиВСтроке
КОНЕЦ МЕЖДУ &ДатаНач И &ДатаОконч
ИЛИ ВЫБОР
КОГДА Реестр.ЭтоРеализация
И НЕ РасходныйОрдерНаТовары.Ссылка ЕСТЬ NULL
ТОГДА РасходныйОрдерНаТовары.ДатаОтгрузки
ИНАЧЕ Реестр.ДатаОтгрузкиВСтроке
КОНЕЦ МЕЖДУ &ДатаНач И &ДатаОконч
ИЛИ Реестр.ДатаОтгрузкиВСтроке
МЕЖДУ &ДатаНач И &ДатаОконч
)
)
ИЛИ (
Реестр.Номенклатура В ИЕРАРХИИ (&КатюшаЗИП)
И Реестр.ДатаОтгрузкиВСтроке
МЕЖДУ &ДатаНач И &ДатаОконч
)
)
И ВЫБОР
КОГДА Реестр.ЗаказчикИзБазы =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ Реестр.ЗаказчикИзБазы = NULL
ТОГДА Реестр.Партнер.Катюша_Дистрибьютор ЕСТЬ NULL
ИЛИ НЕ Реестр.Партнер.Катюша_Дистрибьютор
ИНАЧЕ ИСТИНА
КОНЕЦ
И НРЕГ(Реестр.ТипДвижения) <> НРЕГ("Продажа в дистрибьютора")
И НРЕГ(Реестр.ТипДвижения) <> НРЕГ("Продажа дистрибьютеру")
И НРЕГ(Реестр.ТипДвижения) <> НРЕГ("Продажа дистрибьютору")
И ВЫБОР
КОГДА Реестр.ДатаОтгрузкиВСтроке > ДАТАВРЕМЯ(2023, 1, 1)
ТОГДА Реестр.ЗаказчикИзБазы.Катюша_Дистрибьютор ЕСТЬ NULL
ИЛИ НЕ Реестр.ЗаказчикИзБазы.Катюша_Дистрибьютор
ИНАЧЕ ИСТИНА
КОНЕЦ
И ВЫБОР
КОГДА Реестр.ЗаказчикИзБазы =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ Реестр.ЗаказчикИзБазы = NULL
ТОГДА Реестр.Партнер.Катюша_СобственнаяКомпания ЕСТЬ NULL
ИЛИ НЕ Реестр.Партнер.Катюша_СобственнаяКомпания
ИНАЧЕ ИСТИНА
КОНЕЦ
И (Реестр.ЗаказчикИзБазы.Катюша_СобственнаяКомпания ЕСТЬ NULL
ИЛИ НЕ Реестр.ЗаказчикИзБазы.Катюша_СобственнаяКомпания)
ИНДЕКСИРОВАТЬ ПО
Номенклатура, ПроектИзРегистра
;
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 11.09.26
// Проект ищем от фактического распоряжения ордера независимо от наличия сборки.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Исходные.ДокументРОТ КАК ДокументРОТ,
Исходные.Номенклатура КАК Номенклатура,
ЕСТЬNULL(Реализация.Ссылка, Сборка.Катюша_Реализация) КАК Реализация
ПОМЕСТИТЬ ВТ_АП_РеализацииРаспоряжений
ИЗ
ВТ КАК Исходные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям КАК Распоряжения
ПО Исходные.ДокументРОТ = Распоряжения.Ссылка
И Исходные.Номенклатура = Распоряжения.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК Реализация
ПО Распоряжения.Распоряжение = Реализация.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СборкаТоваров КАК Сборка
ПО Распоряжения.Распоряжение = Сборка.Ссылка
ГДЕ
ЕСТЬNULL(Реализация.Ссылка, Сборка.Катюша_Реализация)
<> ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
;
// Учитываем заказ в строках реализации и в шапке. Повторы не множат количество.
ВЫБРАТЬ
Распоряжения.ДокументРОТ КАК ДокументРОТ,
Распоряжения.Номенклатура КАК Номенклатура,
Товары.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_АП_ЗаказыРаспоряжений
ИЗ
ВТ_АП_РеализацииРаспоряжений КАК Распоряжения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК Товары
ПО Распоряжения.Реализация = Товары.Ссылка
И (Распоряжения.Номенклатура = Товары.Номенклатура
ИЛИ Распоряжения.Номенклатура = Товары.НоменклатураНабора)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
Распоряжения.ДокументРОТ,
Распоряжения.Номенклатура,
Распоряжения.Реализация.ЗаказКлиента
ИЗ
ВТ_АП_РеализацииРаспоряжений КАК Распоряжения
;
// Заказ может сам быть проектом либо ссылаться на него через документ-основание.
ВЫБРАТЬ
Распоряжения.ДокументРОТ КАК ДокументРОТ,
Распоряжения.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА Заказ.Катюша_ФормаОИР ИЛИ Заказ.Катюша_ФормаКатюши
ТОГДА Заказ.Ссылка
КОГДА Основание.Катюша_ФормаОИР ИЛИ Основание.Катюша_ФормаКатюши
ТОГДА Основание.Ссылка
КОГДА ОснованиеПроекта.Катюша_ФормаОИР ИЛИ ОснованиеПроекта.Катюша_ФормаКатюши
ТОГДА ОснованиеПроекта.Ссылка
ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
КОНЕЦ КАК Проект
ПОМЕСТИТЬ ВТ_АП_КандидатыПроектовРаспоряжений
ИЗ
ВТ_АП_ЗаказыРаспоряжений КАК Распоряжения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК Заказ
ПО Распоряжения.ЗаказКлиента = Заказ.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК Основание
ПО Заказ.ДокументОснование = Основание.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ОснованиеПроекта
ПО Основание.ДокументОснование = ОснованиеПроекта.Ссылка
;
// Используем только однозначно найденный проект, без выбора максимальной ссылки.
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Номенклатура КАК Номенклатура,
МАКСИМУМ(Кандидаты.Проект) КАК Проект
ПОМЕСТИТЬ ВТ_АП_ПроектыРаспоряжений
ИЗ
ВТ_АП_КандидатыПроектовРаспоряжений КАК Кандидаты
ГДЕ
Кандидаты.Проект <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Номенклатура
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Кандидаты.Проект) = 1
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
// Для аппаратов, записанных в РОТ без разборки сборки, читаем цену прямо из проекта.
ВЫБРАТЬ
Проекты.ДокументРОТ КАК ДокументРОТ,
Проекты.Номенклатура КАК Номенклатура,
// +++DimRa 14.09.26
Проекты.Проект КАК ИсточникЦены,
// ---DimRa
// +++DimRa 11.09.26
// Цена строки приоритетнее суммы, делённой на количество.
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяЦена, 0) > 0
ТОГДА ТоварыПроекта.Катюша_ФактическаяЦена * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяСумма, 0) > 0 И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Катюша_ФактическаяСумма / ТоварыПроекта.Количество
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ЗапрашиваемаяЦенаОтгрузки, 0) > 0
ТОГДА ТоварыПроекта.Катюша_ЗапрашиваемаяЦенаОтгрузки * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ЗапрашиваемаяСуммаОтгрузки, 0) > 0 И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Катюша_ЗапрашиваемаяСуммаОтгрузки / ТоварыПроекта.Количество
КОГДА ЕСТЬNULL(ТоварыПроекта.Цена, 0) > 0
ТОГДА ТоварыПроекта.Цена * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыПроекта.Сумма, 0) > 0 И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Сумма / ТоварыПроекта.Количество
ИНАЧЕ 0
КОНЕЦ КАК ЦенаЕдиницыПроекта,
// +++DimRa 21.09.26
// Авторизованную цену храним отдельно: РРЦ и запрашиваемые цены не заменяют ее.
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяЦена, 0) > 1
ТОГДА ТоварыПроекта.Катюша_ФактическаяЦена * ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяСумма, 0) > 1
И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Катюша_ФактическаяСумма / ТоварыПроекта.Количество
ИНАЧЕ 0
КОНЕЦ КАК ЦенаАвторизованная
// ---DimRa
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_КандидатыЦенПрямойОтгрузки
ИЗ
ВТ_АП_ПроектыРаспоряжений КАК Проекты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ТоварыПроекта
ПО Проекты.Проект = ТоварыПроекта.Ссылка
И Проекты.Номенклатура = ТоварыПроекта.Номенклатура
ГДЕ
НЕ ТоварыПроекта.Отменено
;
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Номенклатура КАК Номенклатура,
// +++DimRa 14.09.26
МАКСИМУМ(Кандидаты.ИсточникЦены) КАК ИсточникЦены,
// ---DimRa
МИНИМУМ(Кандидаты.ЦенаЕдиницыПроекта) КАК ЦенаЕдиницыПроекта,
// +++DimRa 21.09.26
МАКСИМУМ(Кандидаты.ЦенаАвторизованная) КАК ЦенаАвторизованная
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_ЦеныПрямойОтгрузкиИзПроекта
ИЗ
ВТ_АП_КандидатыЦенПрямойОтгрузки КАК Кандидаты
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Номенклатура
ИМЕЮЩИЕ
// Один рубль в проекте является технической ценой, а не ценой продажи.
МИНИМУМ(Кандидаты.ЦенаЕдиницыПроекта) > 1
И МИНИМУМ(Кандидаты.ЦенаЕдиницыПроекта) = МАКСИМУМ(Кандидаты.ЦенаЕдиницыПроекта)
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
// +++DimRa 21.09.26
// Цена, записанная непосредственно в РОТ, является фактической ценой всего
// комплекта. Если она заполнена корректно, используем ее раньше цены проекта.
ВЫБРАТЬ
Исходные.ДокументРОТ КАК ДокументРОТ,
Исходные.Номенклатура КАК Номенклатура,
МАКСИМУМ(Исходные.ДокументРОТ) КАК ИсточникЦены,
МИНИМУМ(Исходные.Цена) КАК ЦенаЕдиницыПроекта,
МИНИМУМ(Исходные.Цена) КАК ЦенаАвторизованная
ПОМЕСТИТЬ ВТ_АП_ЦеныКомплектовИзРОТ
ИЗ
ВТ КАК Исходные
ГДЕ
ЕСТЬNULL(Исходные.Цена, 0) > 1
СГРУППИРОВАТЬ ПО
Исходные.ДокументРОТ,
Исходные.Номенклатура
ИМЕЮЩИЕ
МИНИМУМ(Исходные.Цена) = МАКСИМУМ(Исходные.Цена)
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
// Единый источник общей цены комплекта: сначала запись РОТ, затем проект.
ВЫБРАТЬ
ЦеныРОТ.ДокументРОТ КАК ДокументРОТ,
ЦеныРОТ.Номенклатура КАК Номенклатура,
ЦеныРОТ.ИсточникЦены КАК ИсточникЦены,
ЦеныРОТ.ЦенаЕдиницыПроекта КАК ЦенаЕдиницыПроекта,
ЦеныРОТ.ЦенаАвторизованная КАК ЦенаАвторизованная
ПОМЕСТИТЬ ВТ_АП_ЦеныПрямойОтгрузки
ИЗ
ВТ_АП_ЦеныКомплектовИзРОТ КАК ЦеныРОТ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныПроекта.ДокументРОТ,
ЦеныПроекта.Номенклатура,
ЦеныПроекта.ИсточникЦены,
ЦеныПроекта.ЦенаЕдиницыПроекта,
ЦеныПроекта.ЦенаАвторизованная
ИЗ
ВТ_АП_ЦеныПрямойОтгрузкиИзПроекта КАК ЦеныПроекта
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныКомплектовИзРОТ КАК ЦеныРОТ
ПО ЦеныПроекта.ДокументРОТ = ЦеныРОТ.ДокументРОТ
И ЦеныПроекта.Номенклатура = ЦеныРОТ.Номенклатура
ГДЕ
ЦеныРОТ.ДокументРОТ ЕСТЬ NULL
ИНДЕКСИРОВАТЬ ПО
Номенклатура
;
// ---DimRa
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
// Проект может быть указан в строке реализации, а не в ее шапке.
// +++DimRa 17.09.26
// Сборки ограничиваем номенклатурой исходных строк, а не датой сборки.
// Все подходящие реализации, проекты и составы комплектов сохраняются.
ВЫБРАТЬ
Сборки.ЗаказНаСборку КАК ЗаказНаСборку,
Сборки.Катюша_Реализация КАК Катюша_Реализация,
Сборки.Количество КАК Количество,
Сборки.Номенклатура КАК Номенклатура,
Сборки.Проведен КАК Проведен,
Сборки.Ссылка КАК Ссылка,
Сборки.Характеристика КАК Характеристика,
Сборки.ХозяйственнаяОперация КАК ХозяйственнаяОперация
ПОМЕСТИТЬ ВТ_АП_СборкиПериода
ИЗ
Документ.СборкаТоваров КАК Сборки
ГДЕ
Сборки.Номенклатура В
(ВЫБРАТЬ Исходные.Номенклатура ИЗ ВТ КАК Исходные)
И Сборки.Проведен
И Сборки.ХозяйственнаяОперация
= ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СборкаТоваров)
И Сборки.Катюша_Реализация
<> ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
ИНДЕКСИРОВАТЬ ПО
Номенклатура, Катюша_Реализация
;
// ---DimRa
ВЫБРАТЬ
ТоварыРеализации.Ссылка КАК Реализация,
ВЫБОР
КОГДА ТоварыРеализации.НоменклатураНабора
<> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА ТоварыРеализации.НоменклатураНабора
ИНАЧЕ ТоварыРеализации.Номенклатура
КОНЕЦ КАК Комплект,
МАКСИМУМ(ВЫРАЗИТЬ(
ТоварыРеализации.ЗаказКлиента КАК Документ.ЗаказКлиента
)) КАК Проект
ПОМЕСТИТЬ ВТ_АП_ПроектыРеализаций
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК ТоварыРеализации
ГДЕ
ТоварыРеализации.Ссылка В
(ВЫБРАТЬ Сборки.Катюша_Реализация ИЗ ВТ_АП_СборкиПериода КАК Сборки)
И ТИПЗНАЧЕНИЯ(ТоварыРеализации.ЗаказКлиента)
= ТИП(Документ.ЗаказКлиента)
И ТоварыРеализации.ЗаказКлиента
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
ТоварыРеализации.Ссылка,
ВЫБОР
КОГДА ТоварыРеализации.НоменклатураНабора
<> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА ТоварыРеализации.НоменклатураНабора
ИНАЧЕ ТоварыРеализации.Номенклатура
КОНЕЦ
ИНДЕКСИРОВАТЬ ПО
Реализация, Комплект
;
// +++DimRa 24.09.26
// Проектную раскомплектацию выполняем только при одном документе сборки.
// Кандидаты строятся по уже отобранной ВТ сборок, без повторного чтения документов.
ВЫБРАТЬ
Связи.Комплект КАК Комплект,
Связи.Проект КАК Проект,
МАКСИМУМ(Связи.ДокументСборки) КАК ДокументСборки
ПОМЕСТИТЬ ВТ_АП_ОднозначныеСборкиПроектов
ИЗ
(ВЫБРАТЬ
Сборки.Номенклатура КАК Комплект,
ВЫРАЗИТЬ(
Сборки.ЗаказНаСборку.ДокументОснование
КАК Документ.ЗаказКлиента
) КАК Проект,
Сборки.Ссылка КАК ДокументСборки
ИЗ
ВТ_АП_СборкиПериода КАК Сборки
ГДЕ
ТИПЗНАЧЕНИЯ(Сборки.ЗаказНаСборку.ДокументОснование)
= ТИП(Документ.ЗаказКлиента)
И ВЫРАЗИТЬ(
Сборки.ЗаказНаСборку.ДокументОснование
КАК Документ.ЗаказКлиента
) <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
Проекты.Комплект,
Проекты.Проект,
Сборки.Ссылка
ИЗ
ВТ_АП_СборкиПериода КАК Сборки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПроектыРеализаций КАК Проекты
ПО Сборки.Катюша_Реализация = Проекты.Реализация
И Сборки.Номенклатура = Проекты.Комплект
ОБЪЕДИНИТЬ
ВЫБРАТЬ
Сборки.Номенклатура,
ВЫРАЗИТЬ(
Сборки.Катюша_Реализация.ЗаказКлиента
КАК Документ.ЗаказКлиента
),
Сборки.Ссылка
ИЗ
ВТ_АП_СборкиПериода КАК Сборки
ГДЕ
ТИПЗНАЧЕНИЯ(Сборки.Катюша_Реализация.ЗаказКлиента)
= ТИП(Документ.ЗаказКлиента)
И ВЫРАЗИТЬ(
Сборки.Катюша_Реализация.ЗаказКлиента
КАК Документ.ЗаказКлиента
) <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
) КАК Связи
СГРУППИРОВАТЬ ПО
Связи.Комплект,
Связи.Проект
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Связи.ДокументСборки) = 1
ИНДЕКСИРОВАТЬ ПО
Комплект, Проект
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
// В регистре РОТ хранится расходный ордер. Его распоряжением может быть
// сама сборка либо реализация, указанная в сборке.
ВЫБРАТЬ
Сборки.Ссылка КАК ДокументСборки,
Исходные.ДокументРОТ КАК ДокументРОТ,
Сборки.Катюша_Реализация КАК Реализация,
Сборки.Катюша_Реализация.Контрагент КАК КонтрагентРеализации,
Сборки.Номенклатура КАК Комплект,
Сборки.Характеристика КАК ХарактеристикаКомплекта,
Сборки.Катюша_Реализация.Дата КАК ДатаЦены,
ВЫБОР
КОГДА Исходные.ПроектИзРегистра
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Исходные.ПроектИзРегистра
КОГДА Сборки.ЗаказНаСборку.ДокументОснование
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Сборки.ЗаказНаСборку.ДокументОснование
КОГДА ПроектыРеализаций.Проект
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА ПроектыРеализаций.Проект
КОГДА ТИПЗНАЧЕНИЯ(Сборки.Катюша_Реализация.ЗаказКлиента)
= ТИП(Документ.ЗаказКлиента)
ТОГДА ВЫРАЗИТЬ(
Сборки.Катюша_Реализация.ЗаказКлиента
КАК Документ.ЗаказКлиента
)
ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
КОНЕЦ КАК Проект,
// +++DimRa 24.09.26
// Сохраняем исходный проект строки регистра как отдельный ключ раскомплектации.
Исходные.ПроектИзРегистра КАК ПроектИзРегистра,
// ---DimRa
ВЫБОР
КОГДА ЕСТЬNULL(Сборки.Количество, 0) = 0
ТОГДА 1
ИНАЧЕ Сборки.Количество
КОНЕЦ КАК КоличествоКомплектов
ПОМЕСТИТЬ ВТ_АП_Сборки
ИЗ
ВТ КАК Исходные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям
КАК Распоряжения
ПО Исходные.ДокументРОТ = Распоряжения.Ссылка
И Исходные.Номенклатура = Распоряжения.Номенклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_СборкиПериода КАК Сборки
ПО Распоряжения.Распоряжение = Сборки.Ссылка
И Исходные.Номенклатура = Сборки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ПроектыРеализаций КАК ПроектыРеализаций
ПО Сборки.Катюша_Реализация = ПроектыРеализаций.Реализация
И Сборки.Номенклатура = ПроектыРеализаций.Комплект
ГДЕ
ТИПЗНАЧЕНИЯ(Распоряжения.Распоряжение)
= ТИП(Документ.СборкаТоваров)
И (Исходные.Номенклатура.Катюша_АппаратРМ
= ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
ИЛИ Исходные.Номенклатура.Катюша_АппаратРМ
= ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.РМ))
И (Исходные.Номенклатура В ИЕРАРХИИ (&Катюша)
ИЛИ Исходные.Номенклатура В ИЕРАРХИИ (&Sindoh))
И Сборки.Проведен
И Сборки.ХозяйственнаяОперация
= ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СборкаТоваров)
И Сборки.Катюша_Реализация
<> ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
ОБЪЕДИНИТЬ
ВЫБРАТЬ
Сборки.Ссылка,
Исходные.ДокументРОТ,
Сборки.Катюша_Реализация,
Сборки.Катюша_Реализация.Контрагент,
Сборки.Номенклатура,
Сборки.Характеристика,
Сборки.Катюша_Реализация.Дата,
ВЫБОР
КОГДА Исходные.ПроектИзРегистра
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Исходные.ПроектИзРегистра
КОГДА Сборки.ЗаказНаСборку.ДокументОснование
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Сборки.ЗаказНаСборку.ДокументОснование
КОГДА ПроектыРеализаций.Проект
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА ПроектыРеализаций.Проект
КОГДА ТИПЗНАЧЕНИЯ(Сборки.Катюша_Реализация.ЗаказКлиента)
= ТИП(Документ.ЗаказКлиента)
ТОГДА ВЫРАЗИТЬ(
Сборки.Катюша_Реализация.ЗаказКлиента
КАК Документ.ЗаказКлиента
)
ИНАЧЕ ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
КОНЕЦ,
Исходные.ПроектИзРегистра,
ВЫБОР
КОГДА ЕСТЬNULL(Сборки.Количество, 0) = 0
ТОГДА 1
ИНАЧЕ Сборки.Количество
КОНЕЦ
ИЗ
ВТ КАК Исходные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.РасходныйОрдерНаТовары.ТоварыПоРаспоряжениям
КАК Распоряжения
ПО Исходные.ДокументРОТ = Распоряжения.Ссылка
И Исходные.Номенклатура = Распоряжения.Номенклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_СборкиПериода КАК Сборки
ПО Распоряжения.Распоряжение = Сборки.Катюша_Реализация
И Исходные.Номенклатура = Сборки.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ПроектыРеализаций КАК ПроектыРеализаций
ПО Сборки.Катюша_Реализация = ПроектыРеализаций.Реализация
И Сборки.Номенклатура = ПроектыРеализаций.Комплект
ГДЕ
ТИПЗНАЧЕНИЯ(Распоряжения.Распоряжение)
= ТИП(Документ.РеализацияТоваровУслуг)
И (Исходные.Номенклатура.Катюша_АппаратРМ
= ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
ИЛИ Исходные.Номенклатура.Катюша_АппаратРМ
= ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.РМ))
И (Исходные.Номенклатура В ИЕРАРХИИ (&Катюша)
ИЛИ Исходные.Номенклатура В ИЕРАРХИИ (&Sindoh))
И Сборки.Проведен
И Сборки.ХозяйственнаяОперация
= ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СборкаТоваров)
И Сборки.Катюша_Реализация
<> ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
ОБЪЕДИНИТЬ
// Для строки дистрибьюторского отчета расходного ордера нет. Связываем
// комплект со сборкой через проект строки отчета и реализацию сборки.
ВЫБРАТЬ
Сборки.Ссылка,
Исходные.ДокументРОТ,
Сборки.Катюша_Реализация,
ВЫБОР
КОГДА Сборки.Катюша_Реализация.Контрагент
<> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА Сборки.Катюша_Реализация.Контрагент
ИНАЧЕ Исходные.Партнер
КОНЕЦ,
Сборки.Номенклатура,
Сборки.Характеристика,
ВЫБОР
КОГДА Сборки.Катюша_Реализация.Дата > ДАТАВРЕМЯ(1, 1, 1)
ТОГДА Сборки.Катюша_Реализация.Дата
ИНАЧЕ Исходные.ДатаОтгрузкиВСтроке
КОНЕЦ,
Исходные.ПроектИзРегистра,
Исходные.ПроектИзРегистра,
ВЫБОР
КОГДА ЕСТЬNULL(Сборки.Количество, 0) = 0
ТОГДА 1
ИНАЧЕ Сборки.Количество
КОНЕЦ
ИЗ
ВТ КАК Исходные
// +++DimRa 24.09.26
// Сначала отбираем единственную проектную сборку, затем читаем ее данные.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ОднозначныеСборкиПроектов КАК ОднозначныеСборки
ПО Исходные.Номенклатура = ОднозначныеСборки.Комплект
И Исходные.ПроектИзРегистра = ОднозначныеСборки.Проект
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_СборкиПериода КАК Сборки
ПО ОднозначныеСборки.ДокументСборки = Сборки.Ссылка
И Исходные.Номенклатура = Сборки.Номенклатура
// ---DimRa
ГДЕ
ТИПЗНАЧЕНИЯ(Исходные.ДокументРОТ)
= ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
И Исходные.ПроектИзРегистра
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
И (Исходные.Номенклатура.Катюша_АппаратРМ
= ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
ИЛИ Исходные.Номенклатура.Катюша_АппаратРМ
= ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.РМ))
И (Исходные.Номенклатура В ИЕРАРХИИ (&Катюша)
ИЛИ Исходные.Номенклатура В ИЕРАРХИИ (&Sindoh))
И Сборки.Проведен
И Сборки.ХозяйственнаяОперация
= ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СборкаТоваров)
И Сборки.Катюша_Реализация
<> ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
;
////////////////////////////////////////////////////////////////////////////////
// Основной РОТ исключает прямую строку РМ/ЗИП, если для документа и комплекта
// найдена сборка, даже когда ее состав не прошел дальнейшие соединения.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Сборки.ДокументРОТ КАК ДокументРОТ,
Сборки.Комплект КАК Комплект
ПОМЕСТИТЬ ВТ_АП_ДокументыСоСборкой
ИЗ
ВТ_АП_Сборки КАК Сборки
ИНДЕКСИРОВАТЬ ПО
Комплект
;
////////////////////////////////////////////////////////////////////////////////
// Нормализуем проект: если найден оперативный заказ, берем его основание-проект.
ВЫБРАТЬ
Сборки.ДокументСборки КАК ДокументСборки,
Сборки.ДокументРОТ КАК ДокументРОТ,
Сборки.Реализация КАК Реализация,
Сборки.КонтрагентРеализации КАК КонтрагентРеализации,
Сборки.Комплект КАК Комплект,
Сборки.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Сборки.ДатаЦены КАК ДатаЦены,
ВЫБОР
КОГДА Сборки.Проект.Катюша_ФормаОИР
ИЛИ Сборки.Проект.Катюша_ФормаКатюши
ТОГДА Сборки.Проект
КОГДА ТИПЗНАЧЕНИЯ(Сборки.Проект.ДокументОснование)
= ТИП(Документ.ЗаказКлиента)
И Сборки.Проект.ДокументОснование
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА ВЫРАЗИТЬ(
Сборки.Проект.ДокументОснование
КАК Документ.ЗаказКлиента
)
ИНАЧЕ Сборки.Проект
КОНЕЦ КАК Проект,
Сборки.ПроектИзРегистра КАК ПроектИзРегистра,
Сборки.КоличествоКомплектов КАК КоличествоКомплектов
ПОМЕСТИТЬ ВТ_АП_СборкиСПроектами
ИЗ
ВТ_АП_Сборки КАК Сборки
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сборки.ДокументРОТ КАК ДокументРОТ,
Сборки.Реализация КАК Реализация,
Сборки.Комплект КАК Комплект,
Сборки.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Сборки.Проект КАК Проект,
Сборки.ПроектИзРегистра КАК ПроектИзРегистра,
Сборки.КонтрагентРеализации КАК КонтрагентРеализации,
Сборки.ДатаЦены КАК ДатаЦены,
СУММА(Сборки.КоличествоКомплектов) КАК КоличествоКомплектов
ПОМЕСТИТЬ ВТ_АП_ИтогиСборок
ИЗ
ВТ_АП_СборкиСПроектами КАК Сборки
СГРУППИРОВАТЬ ПО
Сборки.ДокументРОТ,
Сборки.Реализация,
Сборки.Комплект,
Сборки.ХарактеристикаКомплекта,
Сборки.Проект,
Сборки.ПроектИзРегистра,
Сборки.КонтрагентРеализации,
Сборки.ДатаЦены
ИНДЕКСИРОВАТЬ ПО
Реализация, Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 25.09.26
// Резервный состав берём только для уже отобранной номенклатуры из папки
// "SINDOH Комплекты". Документные сборки сохраняют приоритет.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Варианты.Ссылка КАК ВариантКомплектации,
Варианты.Владелец КАК Комплект,
ВЫБОР
КОГДА Варианты.Основной
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК ПриоритетВарианта
ПОМЕСТИТЬ ВТ_АП_КандидатыВариантовСправочника
ИЗ
(ВЫБРАТЬ РАЗЛИЧНЫЕ
Исходные.Номенклатура КАК Номенклатура
ИЗ
ВТ КАК Исходные) КАК ИспользуемаяНоменклатура
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК Варианты
ПО ИспользуемаяНоменклатура.Номенклатура = Варианты.Владелец
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК Состав
ПО Варианты.Ссылка = Состав.Ссылка
ГДЕ
НЕ Варианты.ПометкаУдаления
// +++DimRa 28.09.26
И (Варианты.Владелец.Родитель.Наименование В ("SINDOH Комплекты", "Катюша Комплекты")
ИЛИ Варианты.Владелец.Наименование В (
"МФУ Sindoh D332e c автоподатчиком DF-633",
"МФУ ""Катюша"" M335 (артикул: M335-pp+BMM348+HXM348+HKM348р)",
"Многофункциональное устройство (МФУ) Катюша",
"Монохромное многофункциональное устройство формата А4 ""Катюша"" М240",
"Монохромное многофункциональное устройство формата АЗ Катюша M450 с дополнительными лотками",
"Принтер Катюша Р140 (1ГГц)+BMM240",
"МФУ (тип 1)")
ИЛИ Варианты.Владелец.Наименование ПОДОБНО "МФУ%P140-pp+картридж"
ИЛИ Варианты.Владелец.Наименование ПОДОБНО "Принтер Страна происхождения:%Российская Федерация%10622218"
ИЛИ Варианты.Владелец.Наименование ПОДОБНО "МФУ Катюша М140 + модуль%BMM240"
ИЛИ Варианты.Владелец.Наименование ПОДОБНО "Принтер Катюша Р133 + модуль%BMM240"
ИЛИ Варианты.Владелец.Наименование ПОДОБНО "Принтер Катюша Р140 + модуль%BMM240")
// ---DimRa
И Состав.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
И Состав.Номенклатура <> Варианты.Владелец
И ЕСТЬNULL(Состав.Количество, 0) > 0
ИНДЕКСИРОВАТЬ ПО
Комплект,
ВариантКомплектации
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Кандидаты.Комплект КАК Комплект,
МИНИМУМ(Кандидаты.ПриоритетВарианта) КАК ПриоритетВарианта
ПОМЕСТИТЬ ВТ_АП_ПриоритетВариантовСправочника
ИЗ
ВТ_АП_КандидатыВариантовСправочника КАК Кандидаты
СГРУППИРОВАТЬ ПО
Кандидаты.Комплект
ИНДЕКСИРОВАТЬ ПО
Комплект
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Кандидаты.Комплект КАК Комплект,
МИНИМУМ(Кандидаты.ВариантКомплектации) КАК ВариантКомплектации
ПОМЕСТИТЬ ВТ_АП_ВыбранныеВариантыСправочника
ИЗ
ВТ_АП_КандидатыВариантовСправочника КАК Кандидаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПриоритетВариантовСправочника КАК Приоритеты
ПО Кандидаты.Комплект = Приоритеты.Комплект
И Кандидаты.ПриоритетВарианта = Приоритеты.ПриоритетВарианта
СГРУППИРОВАТЬ ПО
Кандидаты.Комплект
ИНДЕКСИРОВАТЬ ПО
Комплект
;
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 28.09.26
// Вариант комплектации может быть записан сразу на партию аппаратов.
// Для отчета приводим весь его состав к одному аппарату.
ВЫБРАТЬ
Выбранные.Комплект КАК Комплект,
Выбранные.ВариантКомплектации КАК ВариантКомплектации,
СУММА(ВЫБОР
КОГДА Состав.Номенклатура.Катюша_АппаратРМ =
ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
ТОГДА ЕСТЬNULL(Состав.Количество, 0)
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоАппаратов
ПОМЕСТИТЬ ВТ_АП_НормализаторыВариантовСправочника
ИЗ
ВТ_АП_ВыбранныеВариантыСправочника КАК Выбранные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК Состав
ПО Выбранные.ВариантКомплектации = Состав.Ссылка
ГДЕ
Состав.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
И Состав.Номенклатура <> Выбранные.Комплект
И ЕСТЬNULL(Состав.Количество, 0) > 0
СГРУППИРОВАТЬ ПО
Выбранные.Комплект,
Выбранные.ВариантКомплектации
ИНДЕКСИРОВАТЬ ПО
Комплект
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Выбранные.Комплект КАК Комплект,
Состав.Номенклатура КАК Комплектующая,
Состав.Характеристика КАК ХарактеристикаКомплектующей,
СУММА(ВЫБОР
// +++DimRa 28.09.26
КОГДА ЕСТЬNULL(Нормализаторы.КоличествоАппаратов, 0) > 0
ТОГДА ЕСТЬNULL(Состав.Количество, 0)
/ Нормализаторы.КоличествоАппаратов
КОГДА ЕСТЬNULL(Варианты.Количество, 0) = 0
ТОГДА ЕСТЬNULL(Состав.Количество, 0)
ИНАЧЕ ЕСТЬNULL(Состав.Количество, 0) / Варианты.Количество
// ---DimRa
КОНЕЦ) КАК КоличествоКомплектующей,
СУММА(ВЫБОР
КОГДА ЕСТЬNULL(Состав.ДоляСтоимости, 0) > 0
ТОГДА Состав.ДоляСтоимости
ИНАЧЕ 0
КОНЕЦ) КАК ДоляСтоимости
ПОМЕСТИТЬ ВТ_АП_СоставВариантовСправочника
ИЗ
ВТ_АП_ВыбранныеВариантыСправочника КАК Выбранные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК Варианты
ПО Выбранные.ВариантКомплектации = Варианты.Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК Состав
ПО Выбранные.ВариантКомплектации = Состав.Ссылка
// +++DimRa 28.09.26
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_НормализаторыВариантовСправочника КАК Нормализаторы
ПО Выбранные.Комплект = Нормализаторы.Комплект
И Выбранные.ВариантКомплектации = Нормализаторы.ВариантКомплектации
// ---DimRa
ГДЕ
Состав.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
И Состав.Номенклатура <> Выбранные.Комплект
И ЕСТЬNULL(Состав.Количество, 0) > 0
СГРУППИРОВАТЬ ПО
Выбранные.Комплект,
Состав.Номенклатура,
Состав.Характеристика
ИНДЕКСИРОВАТЬ ПО
Комплект
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Состав.Комплект КАК Комплект,
СУММА(Состав.КоличествоКомплектующей) КАК КоличествоСостава,
СУММА(Состав.ДоляСтоимости) КАК ДоляСтоимостиИтого
ПОМЕСТИТЬ ВТ_АП_ИтогиСоставаВариантовСправочника
ИЗ
ВТ_АП_СоставВариантовСправочника КАК Состав
СГРУППИРОВАТЬ ПО
Состав.Комплект
ИНДЕКСИРОВАТЬ ПО
Комплект
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
// Фактический состав комплекта.
ВЫБРАТЬ
Сборки.ДокументРОТ КАК ДокументРОТ,
Сборки.Реализация КАК Реализация,
Сборки.Комплект КАК Комплект,
Сборки.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Сборки.Проект КАК Проект,
Сборки.ПроектИзРегистра КАК ПроектИзРегистра,
Сборки.КонтрагентРеализации КАК КонтрагентРеализации,
Сборки.ДатаЦены КАК ДатаЦены,
Состав.Номенклатура КАК Комплектующая,
Состав.Характеристика КАК ХарактеристикаКомплектующей,
Состав.Серия КАК СерияКомплектующей,
СУММА(ЕСТЬNULL(Состав.Количество, 0))
/ ИтогиСборок.КоличествоКомплектов КАК КоличествоКомплектующей,
СУММА(
ЕСТЬNULL(Состав.ДоляСтоимости, 0)
* Сборки.КоличествоКомплектов
) / ИтогиСборок.КоличествоКомплектов КАК ДоляСтоимости
ПОМЕСТИТЬ ВТ_АП_Комплектующие
ИЗ
ВТ_АП_СборкиСПроектами КАК Сборки
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СборкаТоваров.Товары КАК Состав
ПО Сборки.ДокументСборки = Состав.Ссылка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиСборок КАК ИтогиСборок
ПО Сборки.ДокументРОТ = ИтогиСборок.ДокументРОТ
И Сборки.Реализация = ИтогиСборок.Реализация
И Сборки.Комплект = ИтогиСборок.Комплект
И Сборки.ХарактеристикаКомплекта = ИтогиСборок.ХарактеристикаКомплекта
И Сборки.Проект = ИтогиСборок.Проект
И Сборки.ПроектИзРегистра = ИтогиСборок.ПроектИзРегистра
И Сборки.КонтрагентРеализации = ИтогиСборок.КонтрагентРеализации
И Сборки.ДатаЦены = ИтогиСборок.ДатаЦены
ГДЕ
Состав.Номенклатура
<> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
Сборки.ДокументРОТ,
Сборки.Реализация,
Сборки.Комплект,
Сборки.ХарактеристикаКомплекта,
Сборки.Проект,
Сборки.ПроектИзРегистра,
Сборки.КонтрагентРеализации,
Сборки.ДатаЦены,
Состав.Номенклатура,
Состав.Характеристика,
Состав.Серия,
ИтогиСборок.КоличествоКомплектов
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Исходные.ДокументРОТ,
ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка),
Исходные.Номенклатура,
ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
Исходные.ПроектИзРегистра,
Исходные.ПроектИзРегистра,
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка),
Исходные.ДатаОтгрузкиВСтроке,
СоставСправочника.Комплектующая,
СоставСправочника.ХарактеристикаКомплектующей,
ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка),
СоставСправочника.КоличествоКомплектующей,
ВЫБОР
КОГДА ИтогиСостава.ДоляСтоимостиИтого > 0
ТОГДА СоставСправочника.ДоляСтоимости / ИтогиСостава.ДоляСтоимостиИтого
КОГДА ИтогиСостава.КоличествоСостава > 0
ТОГДА СоставСправочника.КоличествоКомплектующей / ИтогиСостава.КоличествоСостава
ИНАЧЕ 0
КОНЕЦ
ИЗ
// +++DimRa 28.09.26
// Один комплект создает один набор строк состава, даже если исходный регистр
// содержит несколько серийных строк этого же документа.
(ВЫБРАТЬ
Строки.ДокументРОТ КАК ДокументРОТ,
Строки.Номенклатура КАК Номенклатура,
Строки.ПроектИзРегистра КАК ПроектИзРегистра,
МАКСИМУМ(Строки.ДатаОтгрузкиВСтроке) КАК ДатаОтгрузкиВСтроке
ИЗ
ВТ КАК Строки
СГРУППИРОВАТЬ ПО
Строки.ДокументРОТ,
Строки.Номенклатура,
Строки.ПроектИзРегистра) КАК Исходные
// ---DimRa
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_СоставВариантовСправочника КАК СоставСправочника
ПО Исходные.Номенклатура = СоставСправочника.Комплект
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиСоставаВариантовСправочника КАК ИтогиСостава
ПО СоставСправочника.Комплект = ИтогиСостава.Комплект
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_СборкиСПроектами КАК НайденнаяСборка
ПО Исходные.ДокументРОТ = НайденнаяСборка.ДокументРОТ
И Исходные.Номенклатура = НайденнаяСборка.Комплект
И Исходные.ПроектИзРегистра = НайденнаяСборка.ПроектИзРегистра
ГДЕ
НайденнаяСборка.ДокументРОТ ЕСТЬ NULL
ИНДЕКСИРОВАТЬ ПО
Комплект
;
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 14.09.26
// Для комплектующей сначала ищем заполненную цену в РОТ по тому же
// заказчику и партнеру. Документ, проект и дата задают приоритет источника.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Комплектующие.ДокументРОТ КАК ДокументРОТ,
Комплектующие.Комплект КАК Комплект,
Комплектующие.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Комплектующие.Проект КАК Проект,
Комплектующие.КонтрагентРеализации КАК КонтрагентРеализации,
Комплектующие.ДатаЦены КАК ДатаЦены,
Комплектующие.Комплектующая КАК Комплектующая,
Комплектующие.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Комплектующие.СерияКомплектующей КАК СерияКомплектующей,
ИсходныеЦены.ДокументРОТ КАК ИсточникЦены,
ИсходныеЦены.Цена КАК ЦенаРасходногоОрдера,
ВЫБОР
// Берем цену из тех же строк, из которых строится рабочая
// расшифровка по картриджам и барабанам.
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
= ТИП(Документ.РасходныйОрдерНаТовары)
И Комплектующие.Проект
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
И ИсходныеЦены.ПроектИзРегистра = Комплектующие.Проект
ТОГДА 0
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
= ТИП(Документ.РасходныйОрдерНаТовары)
И ИсходныеЦены.ДатаОтгрузкиВСтроке = Комплектующие.ДатаЦены
ТОГДА 1
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
= ТИП(Документ.РасходныйОрдерНаТовары)
ТОГДА 2
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
= ТИП(Документ.РеализацияТоваровУслуг)
И Комплектующие.Проект
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
И ИсходныеЦены.ПроектИзРегистра = Комплектующие.Проект
ТОГДА 3
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
= ТИП(Документ.РеализацияТоваровУслуг)
И ИсходныеЦены.ДатаОтгрузкиВСтроке = Комплектующие.ДатаЦены
ТОГДА 4
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
= ТИП(Документ.РеализацияТоваровУслуг)
ТОГДА 5
КОГДА ТИПЗНАЧЕНИЯ(ИсходныеЦены.ДокументРОТ)
<> ТИП(Документ.ЗаказКлиента)
И ЕСТЬNULL(ИсходныеЦены.Цена, 0) > 1
ТОГДА 6
КОГДА Комплектующие.Проект
<> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
И ИсходныеЦены.ПроектИзРегистра = Комплектующие.Проект
ТОГДА 90
ИНАЧЕ 99
КОНЕЦ КАК ПриоритетИсточника
ПОМЕСТИТЬ ВТ_АП_КандидатыЦенРасходныхОрдеров
ИЗ
ВТ_АП_Комплектующие КАК Комплектующие
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК Исходные
ПО Комплектующие.ДокументРОТ = Исходные.ДокументРОТ
И Комплектующие.Комплект = Исходные.Номенклатура
И ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Исходные.ДокументРОТ)
= ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ТОГДА Исходные.ПроектИзРегистра = Комплектующие.Проект
ИЛИ Исходные.ПроектИзРегистра.ДокументОснование
= Комплектующие.Проект
ИНАЧЕ ИСТИНА
КОНЕЦ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ИсходныеЦены
ПО ИсходныеЦены.Номенклатура = Комплектующие.Комплектующая
И (ИсходныеЦены.Заказчик = Исходные.Заказчик
И ИсходныеЦены.Партнер = Исходные.Партнер
ИЛИ ИсходныеЦены.ИНН <> ""
И ИсходныеЦены.ИНН = Исходные.ИНН
И ИсходныеЦены.ПартнерИНН = Исходные.ПартнерИНН)
ГДЕ
ЕСТЬNULL(ИсходныеЦены.Цена, 0) > 1
;
// Сначала выбираем расходный ордер, затем реализацию и только после них проект.
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Комплект КАК Комплект,
Кандидаты.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Кандидаты.Проект КАК Проект,
Кандидаты.КонтрагентРеализации КАК КонтрагентРеализации,
Кандидаты.ДатаЦены КАК ДатаЦены,
Кандидаты.Комплектующая КАК Комплектующая,
Кандидаты.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Кандидаты.СерияКомплектующей КАК СерияКомплектующей,
МИНИМУМ(Кандидаты.ПриоритетИсточника) КАК ПриоритетИсточника
ПОМЕСТИТЬ ВТ_АП_ПриоритетЦенРегистра
ИЗ
ВТ_АП_КандидатыЦенРасходныхОрдеров КАК Кандидаты
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Комплект,
Кандидаты.ХарактеристикаКомплекта,
Кандидаты.Проект,
Кандидаты.КонтрагентРеализации,
Кандидаты.ДатаЦены,
Кандидаты.Комплектующая,
Кандидаты.ХарактеристикаКомплектующей,
Кандидаты.СерияКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
// Используем цену только при однозначном результате. При нескольких источниках
// с одинаковой ценой сохраняем один из них как источник расшифровки.
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Комплект КАК Комплект,
Кандидаты.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Кандидаты.Проект КАК Проект,
Кандидаты.КонтрагентРеализации КАК КонтрагентРеализации,
Кандидаты.ДатаЦены КАК ДатаЦены,
Кандидаты.Комплектующая КАК Комплектующая,
Кандидаты.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Кандидаты.СерияКомплектующей КАК СерияКомплектующей,
МАКСИМУМ(Кандидаты.ИсточникЦены) КАК ИсточникЦены,
МАКСИМУМ(Кандидаты.ЦенаРасходногоОрдера) КАК ЦенаРасходногоОрдера
ПОМЕСТИТЬ ВТ_АП_ЦеныРасходныхОрдеров
ИЗ
ВТ_АП_КандидатыЦенРасходныхОрдеров КАК Кандидаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПриоритетЦенРегистра КАК Приоритет
ПО Кандидаты.ДокументРОТ = Приоритет.ДокументРОТ
И Кандидаты.Комплект = Приоритет.Комплект
И Кандидаты.ХарактеристикаКомплекта = Приоритет.ХарактеристикаКомплекта
И Кандидаты.Проект = Приоритет.Проект
И Кандидаты.КонтрагентРеализации = Приоритет.КонтрагентРеализации
И Кандидаты.ДатаЦены = Приоритет.ДатаЦены
И Кандидаты.Комплектующая = Приоритет.Комплектующая
И Кандидаты.ХарактеристикаКомплектующей = Приоритет.ХарактеристикаКомплектующей
И Кандидаты.СерияКомплектующей = Приоритет.СерияКомплектующей
И Кандидаты.ПриоритетИсточника = Приоритет.ПриоритетИсточника
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Комплект,
Кандидаты.ХарактеристикаКомплекта,
Кандидаты.Проект,
Кандидаты.КонтрагентРеализации,
Кандидаты.ДатаЦены,
Кандидаты.Комплектующая,
Кандидаты.ХарактеристикаКомплектующей,
Кандидаты.СерияКомплектующей
ИМЕЮЩИЕ
МИНИМУМ(Кандидаты.ЦенаРасходногоОрдера)
= МАКСИМУМ(Кандидаты.ЦенаРасходногоОрдера)
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
// Кандидаты цен из проекта.
ВЫБРАТЬ
Комплектующие.ДокументРОТ КАК ДокументРОТ,
Комплектующие.Комплект КАК Комплект,
Комплектующие.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Комплектующие.Проект КАК Проект,
Комплектующие.КонтрагентРеализации КАК КонтрагентРеализации,
Комплектующие.ДатаЦены КАК ДатаЦены,
Комплектующие.Комплектующая КАК Комплектующая,
Комплектующие.ХарактеристикаКомплектующей
КАК ХарактеристикаКомплектующей,
ВЫБОР
КОГДА ТоварыПроекта.НоменклатураНабора
= Комплектующие.Комплект
И ТоварыПроекта.ХарактеристикаНабора
= Комплектующие.ХарактеристикаКомплекта
И ТоварыПроекта.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 1
КОГДА ТоварыПроекта.НоменклатураНабора
= Комплектующие.Комплект
И ТоварыПроекта.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 2
КОГДА ТоварыПроекта.НоменклатураНабора
= Комплектующие.Комплект
ТОГДА 3
КОГДА ТоварыПроекта.НоменклатураНабора
= ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
И ТоварыПроекта.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 4
КОГДА ТоварыПроекта.НоменклатураНабора
= ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА 5
КОГДА ТоварыПроекта.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 6
ИНАЧЕ 7
КОНЕЦ + ВЫБОР
КОГДА ТоварыПроекта.Ссылка = ПроектыРаспоряжений.Проект ТОГДА 0
ИНАЧЕ 10
КОНЕЦ КАК ПриоритетСоответствия,
// +++DimRa 11.09.26
// Цена строки приоритетнее суммы, делённой на количество.
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяЦена, 0) > 0
ТОГДА ТоварыПроекта.Катюша_ФактическаяЦена * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяСумма, 0) > 0 И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Катюша_ФактическаяСумма / ТоварыПроекта.Количество
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ЗапрашиваемаяЦенаОтгрузки, 0) > 0
ТОГДА ТоварыПроекта.Катюша_ЗапрашиваемаяЦенаОтгрузки * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыПроекта.Катюша_ЗапрашиваемаяСуммаОтгрузки, 0) > 0 И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Катюша_ЗапрашиваемаяСуммаОтгрузки / ТоварыПроекта.Количество
КОГДА ЕСТЬNULL(ТоварыПроекта.Цена, 0) > 0
ТОГДА ТоварыПроекта.Цена * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыПроекта.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыПроекта.КоличествоУпаковок / ТоварыПроекта.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыПроекта.Сумма, 0) > 0 И ЕСТЬNULL(ТоварыПроекта.Количество, 0) <> 0
ТОГДА ТоварыПроекта.Сумма / ТоварыПроекта.Количество
ИНАЧЕ 0
КОНЕЦ КАК ЦенаЕдиницыПроекта
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_КандидатыЦенПроекта
ИЗ
ВТ_АП_Комплектующие КАК Комплектующие
// +++DimRa 11.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ПроектыРаспоряжений КАК ПроектыРаспоряжений
ПО Комплектующие.ДокументРОТ = ПроектыРаспоряжений.ДокументРОТ
И Комплектующие.Комплект = ПроектыРаспоряжений.Номенклатура
// ---DimRa
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.ЗаказКлиента.Товары КАК ТоварыПроекта
ПО (Комплектующие.Проект = ТоварыПроекта.Ссылка
ИЛИ ПроектыРаспоряжений.Проект = ТоварыПроекта.Ссылка)
И Комплектующие.Комплектующая = ТоварыПроекта.Номенклатура
ГДЕ
НЕ ТоварыПроекта.Отменено
И (ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяЦена, 0) <> 0
ИЛИ ЕСТЬNULL(ТоварыПроекта.Катюша_ФактическаяСумма, 0) <> 0
ИЛИ ЕСТЬNULL(ТоварыПроекта.Катюша_ЗапрашиваемаяЦенаОтгрузки, 0) <> 0
ИЛИ ЕСТЬNULL(ТоварыПроекта.Катюша_ЗапрашиваемаяСуммаОтгрузки, 0) <> 0
ИЛИ ЕСТЬNULL(ТоварыПроекта.Цена, 0) <> 0
ИЛИ ЕСТЬNULL(ТоварыПроекта.Сумма, 0) <> 0)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Комплект КАК Комплект,
Кандидаты.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Кандидаты.Проект КАК Проект,
Кандидаты.КонтрагентРеализации КАК КонтрагентРеализации,
Кандидаты.ДатаЦены КАК ДатаЦены,
Кандидаты.Комплектующая КАК Комплектующая,
Кандидаты.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
МИНИМУМ(Кандидаты.ПриоритетСоответствия) КАК ПриоритетСоответствия
ПОМЕСТИТЬ ВТ_АП_ПриоритетЦеныПроекта
ИЗ
ВТ_АП_КандидатыЦенПроекта КАК Кандидаты
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Комплект,
Кандидаты.ХарактеристикаКомплекта,
Кандидаты.Проект,
Кандидаты.КонтрагентРеализации,
Кандидаты.ДатаЦены,
Кандидаты.Комплектующая,
Кандидаты.ХарактеристикаКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Комплект КАК Комплект,
Кандидаты.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Кандидаты.Проект КАК Проект,
Кандидаты.КонтрагентРеализации КАК КонтрагентРеализации,
Кандидаты.ДатаЦены КАК ДатаЦены,
Кандидаты.Комплектующая КАК Комплектующая,
Кандидаты.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
МАКСИМУМ(Кандидаты.ЦенаЕдиницыПроекта) КАК ЦенаЕдиницыПроекта
ПОМЕСТИТЬ ВТ_АП_ЦеныПроекта
ИЗ
ВТ_АП_КандидатыЦенПроекта КАК Кандидаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПриоритетЦеныПроекта КАК Приоритет
ПО Кандидаты.ДокументРОТ = Приоритет.ДокументРОТ
И Кандидаты.Комплект = Приоритет.Комплект
И Кандидаты.ХарактеристикаКомплекта
= Приоритет.ХарактеристикаКомплекта
И Кандидаты.Проект = Приоритет.Проект
И Кандидаты.КонтрагентРеализации
= Приоритет.КонтрагентРеализации
И Кандидаты.ДатаЦены = Приоритет.ДатаЦены
И Кандидаты.Комплектующая = Приоритет.Комплектующая
И Кандидаты.ХарактеристикаКомплектующей
= Приоритет.ХарактеристикаКомплектующей
И Кандидаты.ПриоритетСоответствия
= Приоритет.ПриоритетСоответствия
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Комплект,
Кандидаты.ХарактеристикаКомплекта,
Кандидаты.Проект,
Кандидаты.КонтрагентРеализации,
Кандидаты.ДатаЦены,
Кандидаты.Комплектующая,
Кандидаты.ХарактеристикаКомплектующей
ИМЕЮЩИЕ
// Один рубль в проекте является технической ценой, а не ценой продажи.
МИНИМУМ(Кандидаты.ЦенаЕдиницыПроекта) > 1
И МИНИМУМ(Кандидаты.ЦенаЕдиницыПроекта) = МАКСИМУМ(Кандидаты.ЦенаЕдиницыПроекта)
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// Кандидаты цен из реализации.
ВЫБРАТЬ
Комплектующие.ДокументРОТ КАК ДокументРОТ,
Комплектующие.Комплект КАК Комплект,
Комплектующие.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Комплектующие.Проект КАК Проект,
Комплектующие.КонтрагентРеализации КАК КонтрагентРеализации,
Комплектующие.ДатаЦены КАК ДатаЦены,
Комплектующие.Комплектующая КАК Комплектующая,
Комплектующие.ХарактеристикаКомплектующей
КАК ХарактеристикаКомплектующей,
ВЫБОР
КОГДА ТоварыРеализации.НоменклатураНабора
= Комплектующие.Комплект
И ТоварыРеализации.ХарактеристикаНабора
= Комплектующие.ХарактеристикаКомплекта
И ТоварыРеализации.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 1
КОГДА ТоварыРеализации.НоменклатураНабора
= Комплектующие.Комплект
И ТоварыРеализации.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 2
КОГДА ТоварыРеализации.НоменклатураНабора
= Комплектующие.Комплект
ТОГДА 3
КОГДА ТоварыРеализации.НоменклатураНабора
= ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
И ТоварыРеализации.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 4
КОГДА ТоварыРеализации.НоменклатураНабора
= ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
ТОГДА 5
КОГДА ТоварыРеализации.Характеристика
= Комплектующие.ХарактеристикаКомплектующей
ТОГДА 6
ИНАЧЕ 7
КОНЕЦ КАК ПриоритетСоответствия,
// +++DimRa 11.09.26
// Цена строки приоритетнее суммы, делённой на количество.
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыРеализации.Цена, 0) > 0
ТОГДА ТоварыРеализации.Цена * (ВЫБОР
КОГДА ЕСТЬNULL(ТоварыРеализации.Количество, 0) <> 0
И ЕСТЬNULL(ТоварыРеализации.КоличествоУпаковок, 0) <> 0
ТОГДА ТоварыРеализации.КоличествоУпаковок / ТоварыРеализации.Количество
ИНАЧЕ 1
КОНЕЦ)
КОГДА ЕСТЬNULL(ТоварыРеализации.Сумма, 0) > 0 И ЕСТЬNULL(ТоварыРеализации.Количество, 0) <> 0
ТОГДА ТоварыРеализации.Сумма / ТоварыРеализации.Количество
ИНАЧЕ 0
КОНЕЦ КАК ЦенаЕдиницыРеализации
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_КандидатыЦенРеализации
ИЗ
ВТ_АП_Комплектующие КАК Комплектующие
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.РеализацияТоваровУслуг.Товары КАК ТоварыРеализации
ПО ТоварыРеализации.Ссылка = Комплектующие.Реализация
И Комплектующие.Комплектующая = ТоварыРеализации.Номенклатура
ГДЕ
ЕСТЬNULL(ТоварыРеализации.Цена, 0) <> 0
ИЛИ ЕСТЬNULL(ТоварыРеализации.Сумма, 0) <> 0
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Комплект КАК Комплект,
Кандидаты.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Кандидаты.Проект КАК Проект,
Кандидаты.КонтрагентРеализации КАК КонтрагентРеализации,
Кандидаты.ДатаЦены КАК ДатаЦены,
Кандидаты.Комплектующая КАК Комплектующая,
Кандидаты.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
МИНИМУМ(Кандидаты.ПриоритетСоответствия) КАК ПриоритетСоответствия
ПОМЕСТИТЬ ВТ_АП_ПриоритетЦеныРеализации
ИЗ
ВТ_АП_КандидатыЦенРеализации КАК Кандидаты
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Комплект,
Кандидаты.ХарактеристикаКомплекта,
Кандидаты.Проект,
Кандидаты.КонтрагентРеализации,
Кандидаты.ДатаЦены,
Кандидаты.Комплектующая,
Кандидаты.ХарактеристикаКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Кандидаты.ДокументРОТ КАК ДокументРОТ,
Кандидаты.Комплект КАК Комплект,
Кандидаты.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Кандидаты.Проект КАК Проект,
Кандидаты.КонтрагентРеализации КАК КонтрагентРеализации,
Кандидаты.ДатаЦены КАК ДатаЦены,
Кандидаты.Комплектующая КАК Комплектующая,
Кандидаты.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
МАКСИМУМ(Кандидаты.ЦенаЕдиницыРеализации) КАК ЦенаЕдиницыРеализации
ПОМЕСТИТЬ ВТ_АП_ЦеныРеализации
ИЗ
ВТ_АП_КандидатыЦенРеализации КАК Кандидаты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПриоритетЦеныРеализации КАК Приоритет
ПО Кандидаты.ДокументРОТ = Приоритет.ДокументРОТ
И Кандидаты.Комплект = Приоритет.Комплект
И Кандидаты.ХарактеристикаКомплекта
= Приоритет.ХарактеристикаКомплекта
И Кандидаты.Проект = Приоритет.Проект
И Кандидаты.КонтрагентРеализации
= Приоритет.КонтрагентРеализации
И Кандидаты.ДатаЦены = Приоритет.ДатаЦены
И Кандидаты.Комплектующая = Приоритет.Комплектующая
И Кандидаты.ХарактеристикаКомплектующей
= Приоритет.ХарактеристикаКомплектующей
И Кандидаты.ПриоритетСоответствия
= Приоритет.ПриоритетСоответствия
СГРУППИРОВАТЬ ПО
Кандидаты.ДокументРОТ,
Кандидаты.Комплект,
Кандидаты.ХарактеристикаКомплекта,
Кандидаты.Проект,
Кандидаты.КонтрагентРеализации,
Кандидаты.ДатаЦены,
Кандидаты.Комплектующая,
Кандидаты.ХарактеристикаКомплектующей
ИМЕЮЩИЕ
МИНИМУМ(Кандидаты.ЦенаЕдиницыРеализации) > 0
И МИНИМУМ(Кандидаты.ЦенаЕдиницыРеализации) = МАКСИМУМ(Кандидаты.ЦенаЕдиницыРеализации)
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// Итоги документных цен для сохранения только нераспределённого остатка.
ВЫБРАТЬ
Комплектующие.ДокументРОТ КАК ДокументРОТ,
Комплектующие.Комплект КАК Комплект,
Комплектующие.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Комплектующие.Проект КАК Проект,
Комплектующие.КонтрагентРеализации КАК КонтрагентРеализации,
Комплектующие.ДатаЦены КАК ДатаЦены,
КОЛИЧЕСТВО(*) КАК КоличествоСтрок,
СУММА(
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) > 0
ИЛИ ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0) > 0
ИЛИ ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) > 0
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ
) КАК КоличествоСтрокСЦенойДокумента ,
// +++DimRa 11.09.26
СУММА(Комплектующие.КоличествоКомплектующей * ВЫБОР
КОГДА ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) > 0
ТОГДА ЦеныРасходногоОрдера.ЦенаРасходногоОрдера
КОГДА ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) > 0
ТОГДА ЦеныРеализации.ЦенаЕдиницыРеализации
ИНАЧЕ ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0)
КОНЕЦ) КАК СтоимостьДокументовНаКомплект
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_ИтогиЦенДокументов
ИЗ
ВТ_АП_Комплектующие КАК Комплектующие
// +++DimRa 14.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныРасходныхОрдеров КАК ЦеныРасходногоОрдера
ПО Комплектующие.ДокументРОТ = ЦеныРасходногоОрдера.ДокументРОТ
И Комплектующие.Комплект = ЦеныРасходногоОрдера.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныРасходногоОрдера.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныРасходногоОрдера.Проект
И Комплектующие.КонтрагентРеализации = ЦеныРасходногоОрдера.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныРасходногоОрдера.ДатаЦены
И Комплектующие.Комплектующая = ЦеныРасходногоОрдера.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныРасходногоОрдера.ХарактеристикаКомплектующей
И Комплектующие.СерияКомплектующей = ЦеныРасходногоОрдера.СерияКомплектующей
// ---DimRa
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПроекта КАК ЦеныПроекта
ПО Комплектующие.ДокументРОТ = ЦеныПроекта.ДокументРОТ
И Комплектующие.Комплект = ЦеныПроекта.Комплект
И Комплектующие.ХарактеристикаКомплекта
= ЦеныПроекта.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныПроекта.Проект
И Комплектующие.КонтрагентРеализации
= ЦеныПроекта.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныПроекта.ДатаЦены
И Комплектующие.Комплектующая = ЦеныПроекта.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей
= ЦеныПроекта.ХарактеристикаКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныРеализации КАК ЦеныРеализации
ПО Комплектующие.ДокументРОТ = ЦеныРеализации.ДокументРОТ
И Комплектующие.Комплект = ЦеныРеализации.Комплект
И Комплектующие.ХарактеристикаКомплекта
= ЦеныРеализации.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныРеализации.Проект
И Комплектующие.КонтрагентРеализации
= ЦеныРеализации.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныРеализации.ДатаЦены
И Комплектующие.Комплектующая = ЦеныРеализации.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей
= ЦеныРеализации.ХарактеристикаКомплектующей
СГРУППИРОВАТЬ ПО
Комплектующие.ДокументРОТ,
Комплектующие.Комплект,
Комплектующие.ХарактеристикаКомплекта,
Комплектующие.Проект,
Комплектующие.КонтрагентРеализации,
Комплектующие.ДатаЦены
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// Выбираем цену всего комплекта по контрагенту реализации:
// дистрибьюторскую, партнерскую либо РРЦ. Доли позиций ниже всегда
// рассчитываются отдельно по дистрибьюторским ценам.
ВЫБРАТЬ
Комплектующие.ДокументРОТ КАК ДокументРОТ,
Комплектующие.Комплект КАК Комплект,
Комплектующие.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Комплектующие.Проект КАК Проект,
Комплектующие.КонтрагентРеализации КАК КонтрагентРеализации,
Комплектующие.ДатаЦены КАК ДатаЦены,
Комплектующие.Комплектующая КАК Комплектующая,
Комплектующие.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Комплектующие.СерияКомплектующей КАК СерияКомплектующей,
Комплектующие.КоличествоКомплектующей КАК КоличествоКомплектующей,
Комплектующие.ДоляСтоимости КАК ДоляСтоимости,
ВидыЦен.Ссылка КАК ВидЦены,
ВЫБОР
КОГДА ВидыНоменклатуры.НастройкиКлючаЦенПоХарактеристике
= ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
ИЛИ Комплектующие.ХарактеристикаКомплектующей
= ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
ТОГДА ЗНАЧЕНИЕ(
Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка
)
ИНАЧЕ Комплектующие.ХарактеристикаКомплектующей.ХарактеристикаНоменклатурыДляЦенообразования
КОНЕЦ КАК ХарактеристикаЦО,
ВЫБОР
КОГДА ВидыНоменклатуры.НастройкиКлючаЦенПоСерии
= ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
ИЛИ Комплектующие.СерияКомплектующей
= ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
ТОГДА ЗНАЧЕНИЕ(
Справочник.СерииНоменклатурыДляЦенообразования.ПустаяСсылка
)
ИНАЧЕ Комплектующие.СерияКомплектующей.СерияНоменклатурыДляЦенообразования
КОНЕЦ КАК СерияЦО
ПОМЕСТИТЬ ВТ_АП_КомплектующиеДляПрайса
ИЗ
ВТ_АП_Комплектующие КАК Комплектующие
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
ПО Комплектующие.Комплектующая.ВидНоменклатуры
= ВидыНоменклатуры.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыЦен КАК ВидыЦен
ПО ВидыЦен.Идентификатор = ВЫБОР
КОГДА Комплектующие.КонтрагентРеализации.Катюша_Дистрибьютор
ТОГДА "ЦенаДистриб"
КОГДА Комплектующие.КонтрагентРеализации.Катюша_Партнер
ТОГДА "ЦенаПартнерская"
ИНАЧЕ "ЦенаРРЦ"
КОНЕЦ
;
////////////////////////////////////////////////////////////////////////////////
// Последняя действующая цена 2.5 на дату реализации.
// +++DimRa 17.09.26
// Историю цен читаем один раз только для нужных комплектующих.
ВЫБРАТЬ
Цены.Активность КАК Активность,
Цены.ВидЦены КАК ВидЦены,
Цены.Номенклатура КАК Номенклатура,
Цены.Период КАК Период,
Цены.СерияЦО КАК СерияЦО,
Цены.Упаковка КАК Упаковка,
Цены.УпаковкаЦО КАК УпаковкаЦО,
Цены.ХарактеристикаЦО КАК ХарактеристикаЦО,
Цены.Цена КАК Цена
ПОМЕСТИТЬ ВТ_ИсторияЦенРОТ25
ИЗ
РегистрСведений.ЦеныНоменклатуры25 КАК Цены
ГДЕ
Цены.Номенклатура В
(ВЫБРАТЬ Позиции.Комплектующая ИЗ ВТ_АП_КомплектующиеДляПрайса КАК Позиции)
ИНДЕКСИРОВАТЬ ПО
Номенклатура, ВидЦены, Период
;
ВЫБРАТЬ
Цены.Активность КАК Активность,
Цены.ВидЦены КАК ВидЦены,
Цены.Номенклатура КАК Номенклатура,
Цены.Период КАК Период,
Цены.Упаковка КАК Упаковка,
Цены.Характеристика КАК Характеристика,
Цены.Цена КАК Цена
ПОМЕСТИТЬ ВТ_ИсторияЦенРОТСтарые
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК Цены
ГДЕ
Цены.Номенклатура В
(ВЫБРАТЬ Позиции.Комплектующая ИЗ ВТ_АП_КомплектующиеДляПрайса КАК Позиции)
ИНДЕКСИРОВАТЬ ПО
Номенклатура, ВидЦены, Период
;
// ---DimRa
ВЫБРАТЬ
Позиции.ДокументРОТ КАК ДокументРОТ,
Позиции.Комплект КАК Комплект,
Позиции.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Позиции.Проект КАК Проект,
Позиции.КонтрагентРеализации КАК КонтрагентРеализации,
Позиции.ДатаЦены КАК ДатаЦены,
Позиции.Комплектующая КАК Комплектующая,
Позиции.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей КАК СерияКомплектующей,
// +++DimRa 14.09.26
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены = Позиции.ВидЦены
ТОГДА Цены.Период
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ) КАК ПериодЦены,
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены.Идентификатор = "ЦенаДистриб"
ТОГДА Цены.Период
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ) КАК ПериодЦеныДистриб
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_ПериодыЦен25
ИЗ
ВТ_АП_КомплектующиеДляПрайса КАК Позиции
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИсторияЦенРОТ25 КАК Цены
ПО Цены.Номенклатура = Позиции.Комплектующая
И Цены.ХарактеристикаЦО = Позиции.ХарактеристикаЦО
И Цены.СерияЦО = Позиции.СерияЦО
И Цены.УпаковкаЦО
= ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
// +++DimRa 14.09.26
И (Цены.ВидЦены = Позиции.ВидЦены
ИЛИ Цены.ВидЦены.Идентификатор = "ЦенаДистриб")
// ---DimRa
И Цены.Период <= КОНЕЦПЕРИОДА(Позиции.ДатаЦены, ДЕНЬ)
И Цены.Активность
СГРУППИРОВАТЬ ПО
Позиции.ДокументРОТ,
Позиции.Комплект,
Позиции.ХарактеристикаКомплекта,
Позиции.Проект,
Позиции.КонтрагентРеализации,
Позиции.ДатаЦены,
Позиции.Комплектующая,
Позиции.ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Позиции.ДокументРОТ КАК ДокументРОТ,
Позиции.Комплект КАК Комплект,
Позиции.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Позиции.Проект КАК Проект,
Позиции.КонтрагентРеализации КАК КонтрагентРеализации,
Позиции.ДатаЦены КАК ДатаЦены,
Позиции.Комплектующая КАК Комплектующая,
Позиции.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей КАК СерияКомплектующей,
// +++DimRa 14.09.26
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены = Позиции.ВидЦены
ТОГДА ЕСТЬNULL(Цены.Цена, 0) * ВЫБОР
КОГДА ЕСТЬNULL(Цены.Упаковка.Числитель, 0) > 0
И ЕСТЬNULL(Цены.Упаковка.Знаменатель, 0) > 0
ТОГДА Цены.Упаковка.Знаменатель / Цены.Упаковка.Числитель
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ) КАК ЦенаПрайса25,
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены.Идентификатор = "ЦенаДистриб"
ТОГДА ЕСТЬNULL(Цены.Цена, 0) * ВЫБОР
КОГДА ЕСТЬNULL(Цены.Упаковка.Числитель, 0) > 0
И ЕСТЬNULL(Цены.Упаковка.Знаменатель, 0) > 0
ТОГДА Цены.Упаковка.Знаменатель / Цены.Упаковка.Числитель
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ) КАК ЦенаДистриб25
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_ЦеныПрайса25
ИЗ
ВТ_АП_КомплектующиеДляПрайса КАК Позиции
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПериодыЦен25 КАК Периоды
ПО Позиции.ДокументРОТ = Периоды.ДокументРОТ
И Позиции.Комплект = Периоды.Комплект
И Позиции.ХарактеристикаКомплекта = Периоды.ХарактеристикаКомплекта
И Позиции.Проект = Периоды.Проект
И Позиции.КонтрагентРеализации = Периоды.КонтрагентРеализации
И Позиции.ДатаЦены = Периоды.ДатаЦены
И Позиции.Комплектующая = Периоды.Комплектующая
И Позиции.ХарактеристикаКомплектующей
= Периоды.ХарактеристикаКомплектующей
И Позиции.СерияКомплектующей = Периоды.СерияКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИсторияЦенРОТ25 КАК Цены
ПО Цены.Номенклатура = Позиции.Комплектующая
И Цены.ХарактеристикаЦО = Позиции.ХарактеристикаЦО
И Цены.СерияЦО = Позиции.СерияЦО
И Цены.УпаковкаЦО
= ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
// +++DimRa 14.09.26
И ((Цены.ВидЦены = Позиции.ВидЦены
И Цены.Период = Периоды.ПериодЦены)
ИЛИ (Цены.ВидЦены.Идентификатор = "ЦенаДистриб"
И Цены.Период = Периоды.ПериодЦеныДистриб))
// ---DimRa
И Цены.Активность
СГРУППИРОВАТЬ ПО
Позиции.ДокументРОТ,
Позиции.Комплект,
Позиции.ХарактеристикаКомплекта,
Позиции.Проект,
Позиции.КонтрагентРеализации,
Позиции.ДатаЦены,
Позиции.Комплектующая,
Позиции.ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// Последняя цена прежнего механизма ценообразования.
ВЫБРАТЬ
Позиции.ДокументРОТ КАК ДокументРОТ,
Позиции.Комплект КАК Комплект,
Позиции.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Позиции.Проект КАК Проект,
Позиции.КонтрагентРеализации КАК КонтрагентРеализации,
Позиции.ДатаЦены КАК ДатаЦены,
Позиции.Комплектующая КАК Комплектующая,
Позиции.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей КАК СерияКомплектующей,
// +++DimRa 14.09.26
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены = Позиции.ВидЦены
ТОГДА Цены.Период
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ) КАК ПериодЦены,
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены.Идентификатор = "ЦенаДистриб"
ТОГДА Цены.Период
ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ) КАК ПериодЦеныДистриб
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_ПериодыСтарыхЦен
ИЗ
ВТ_АП_КомплектующиеДляПрайса КАК Позиции
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИсторияЦенРОТСтарые КАК Цены
ПО Цены.Номенклатура = Позиции.Комплектующая
И Цены.Характеристика = Позиции.ХарактеристикаКомплектующей
// +++DimRa 14.09.26
И (Цены.ВидЦены = Позиции.ВидЦены
ИЛИ Цены.ВидЦены.Идентификатор = "ЦенаДистриб")
// ---DimRa
И Цены.Период <= КОНЕЦПЕРИОДА(Позиции.ДатаЦены, ДЕНЬ)
И Цены.Активность
СГРУППИРОВАТЬ ПО
Позиции.ДокументРОТ,
Позиции.Комплект,
Позиции.ХарактеристикаКомплекта,
Позиции.Проект,
Позиции.КонтрагентРеализации,
Позиции.ДатаЦены,
Позиции.Комплектующая,
Позиции.ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Позиции.ДокументРОТ КАК ДокументРОТ,
Позиции.Комплект КАК Комплект,
Позиции.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Позиции.Проект КАК Проект,
Позиции.КонтрагентРеализации КАК КонтрагентРеализации,
Позиции.ДатаЦены КАК ДатаЦены,
Позиции.Комплектующая КАК Комплектующая,
Позиции.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей КАК СерияКомплектующей,
// +++DimRa 14.09.26
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены = Позиции.ВидЦены
ТОГДА ЕСТЬNULL(Цены.Цена, 0) * ВЫБОР
КОГДА ЕСТЬNULL(Цены.Упаковка.Числитель, 0) > 0
И ЕСТЬNULL(Цены.Упаковка.Знаменатель, 0) > 0
ТОГДА Цены.Упаковка.Знаменатель / Цены.Упаковка.Числитель
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ) КАК ЦенаСтарогоПрайса,
МАКСИМУМ(ВЫБОР
КОГДА Цены.ВидЦены.Идентификатор = "ЦенаДистриб"
ТОГДА ЕСТЬNULL(Цены.Цена, 0) * ВЫБОР
КОГДА ЕСТЬNULL(Цены.Упаковка.Числитель, 0) > 0
И ЕСТЬNULL(Цены.Упаковка.Знаменатель, 0) > 0
ТОГДА Цены.Упаковка.Знаменатель / Цены.Упаковка.Числитель
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ 0
КОНЕЦ) КАК ЦенаДистрибСтарогоПрайса
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_СтарыеЦеныПрайса
ИЗ
ВТ_АП_КомплектующиеДляПрайса КАК Позиции
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ПериодыСтарыхЦен КАК Периоды
ПО Позиции.ДокументРОТ = Периоды.ДокументРОТ
И Позиции.Комплект = Периоды.Комплект
И Позиции.ХарактеристикаКомплекта = Периоды.ХарактеристикаКомплекта
И Позиции.Проект = Периоды.Проект
И Позиции.КонтрагентРеализации = Периоды.КонтрагентРеализации
И Позиции.ДатаЦены = Периоды.ДатаЦены
И Позиции.Комплектующая = Периоды.Комплектующая
И Позиции.ХарактеристикаКомплектующей
= Периоды.ХарактеристикаКомплектующей
И Позиции.СерияКомплектующей = Периоды.СерияКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИсторияЦенРОТСтарые КАК Цены
ПО Цены.Номенклатура = Позиции.Комплектующая
И Цены.Характеристика = Позиции.ХарактеристикаКомплектующей
// +++DimRa 14.09.26
И ((Цены.ВидЦены = Позиции.ВидЦены
И Цены.Период = Периоды.ПериодЦены)
ИЛИ (Цены.ВидЦены.Идентификатор = "ЦенаДистриб"
И Цены.Период = Периоды.ПериодЦеныДистриб))
// ---DimRa
И Цены.Активность
СГРУППИРОВАТЬ ПО
Позиции.ДокументРОТ,
Позиции.Комплект,
Позиции.ХарактеристикаКомплекта,
Позиции.Проект,
Позиции.КонтрагентРеализации,
Позиции.ДатаЦены,
Позиции.Комплектующая,
Позиции.ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Позиции.ДокументРОТ КАК ДокументРОТ,
Позиции.Комплект КАК Комплект,
Позиции.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Позиции.Проект КАК Проект,
Позиции.КонтрагентРеализации КАК КонтрагентРеализации,
Позиции.ДатаЦены КАК ДатаЦены,
Позиции.Комплектующая КАК Комплектующая,
Позиции.ХарактеристикаКомплектующей КАК ХарактеристикаКомплектующей,
Позиции.СерияКомплектующей КАК СерияКомплектующей,
ВЫБОР
КОГДА ЕСТЬNULL(Цены25.ЦенаПрайса25, 0) > 0
ТОГДА Цены25.ЦенаПрайса25
ИНАЧЕ ЕСТЬNULL(СтарыеЦены.ЦенаСтарогоПрайса, 0)
КОНЕЦ КАК ЦенаПрайса,
// +++DimRa 14.09.26
ВЫБОР
КОГДА ЕСТЬNULL(Цены25.ЦенаДистриб25, 0) > 0
ТОГДА Цены25.ЦенаДистриб25
ИНАЧЕ ЕСТЬNULL(СтарыеЦены.ЦенаДистрибСтарогоПрайса, 0)
КОНЕЦ КАК ЦенаДистриб
// ---DimRa
ПОМЕСТИТЬ ВТ_АП_ЦеныПрайса
ИЗ
ВТ_АП_КомплектующиеДляПрайса КАК Позиции
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПрайса25 КАК Цены25
ПО Позиции.ДокументРОТ = Цены25.ДокументРОТ
И Позиции.Комплект = Цены25.Комплект
И Позиции.ХарактеристикаКомплекта = Цены25.ХарактеристикаКомплекта
И Позиции.Проект = Цены25.Проект
И Позиции.КонтрагентРеализации = Цены25.КонтрагентРеализации
И Позиции.ДатаЦены = Цены25.ДатаЦены
И Позиции.Комплектующая = Цены25.Комплектующая
И Позиции.ХарактеристикаКомплектующей
= Цены25.ХарактеристикаКомплектующей
И Позиции.СерияКомплектующей = Цены25.СерияКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_СтарыеЦеныПрайса КАК СтарыеЦены
ПО Позиции.ДокументРОТ = СтарыеЦены.ДокументРОТ
И Позиции.Комплект = СтарыеЦены.Комплект
И Позиции.ХарактеристикаКомплекта = СтарыеЦены.ХарактеристикаКомплекта
И Позиции.Проект = СтарыеЦены.Проект
И Позиции.КонтрагентРеализации = СтарыеЦены.КонтрагентРеализации
И Позиции.ДатаЦены = СтарыеЦены.ДатаЦены
И Позиции.Комплектующая = СтарыеЦены.Комплектующая
И Позиции.ХарактеристикаКомплектующей
= СтарыеЦены.ХарактеристикаКомплектующей
И Позиции.СерияКомплектующей = СтарыеЦены.СерияКомплектующей
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// Знаменатель распределения включает весь состав: аппараты, РМ, опции и ЗИП.
ВЫБРАТЬ
Позиции.ДокументРОТ КАК ДокументРОТ,
Позиции.Комплект КАК Комплект,
Позиции.ХарактеристикаКомплекта КАК ХарактеристикаКомплекта,
Позиции.Проект КАК Проект,
Позиции.КонтрагентРеализации КАК КонтрагентРеализации,
Позиции.ДатаЦены КАК ДатаЦены,
КОЛИЧЕСТВО(*) КАК КоличествоСтрок,
СУММА(ВЫБОР
// +++DimRa 14.09.26
КОГДА ЕСТЬNULL(Цены.ЦенаПрайса, 0) > 0
// ---DimRa
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоСтрокСЦеной,
// +++DimRa 14.09.26
СУММА(
ЕСТЬNULL(Цены.ЦенаДистриб, 0)
* Позиции.КоличествоКомплектующей
) КАК ОбщаяСтоимостьПоПрайсу,
СУММА(
ЕСТЬNULL(Цены.ЦенаПрайса, 0)
* Позиции.КоличествоКомплектующей
) КАК ОбщаяЦенаКомплекта,
// ---DimRa
СУММА(ЕСТЬNULL(Позиции.ДоляСтоимости, 0)) КАК ДоляСтоимостиИтого
ПОМЕСТИТЬ ВТ_АП_ИтогиПрайса
ИЗ
ВТ_АП_КомплектующиеДляПрайса КАК Позиции
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПрайса КАК Цены
ПО Позиции.ДокументРОТ = Цены.ДокументРОТ
И Позиции.Комплект = Цены.Комплект
И Позиции.ХарактеристикаКомплекта = Цены.ХарактеристикаКомплекта
И Позиции.Проект = Цены.Проект
И Позиции.КонтрагентРеализации = Цены.КонтрагентРеализации
И Позиции.ДатаЦены = Цены.ДатаЦены
И Позиции.Комплектующая = Цены.Комплектующая
И Позиции.ХарактеристикаКомплектующей
= Цены.ХарактеристикаКомплектующей
И Позиции.СерияКомплектующей = Цены.СерияКомплектующей
СГРУППИРОВАТЬ ПО
Позиции.ДокументРОТ,
Позиции.Комплект,
Позиции.ХарактеристикаКомплекта,
Позиции.Проект,
Позиции.КонтрагентРеализации,
Позиции.ДатаЦены
ИНДЕКСИРОВАТЬ ПО
Комплект, ХарактеристикаКомплекта
;
////////////////////////////////////////////////////////////////////////////////
// Детализация использует тот же алгоритм распределения суммы комплекта, что и РОТ 3.0.
// +++DimRa 07.09.26
// При неполных ценах и долях сохраняем стоимость на исходном комплекте.
// Ключи выделяются до соединения с составом: сумма не повторяется у комплектующих.
ВЫБРАТЬ РАЗЛИЧНЫЕ
Исходные.ДокументРОТ КАК ДокументРОТ,
Исходные.Номенклатура КАК Номенклатура,
Исходные.ПроектИзРегистра КАК ПроектИзРегистра
ПОМЕСТИТЬ ВТ_НераспределенныеКомплекты
ИЗ
ВТ КАК Исходные
// +++DimRa 21.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПрямойОтгрузки КАК ЦеныКомплекта
ПО Исходные.ДокументРОТ = ЦеныКомплекта.ДокументРОТ
И Исходные.Номенклатура = ЦеныКомплекта.Номенклатура
// ---DimRa
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_Комплектующие КАК Комплектующие
ПО Исходные.ДокументРОТ = Комплектующие.ДокументРОТ
И Исходные.Номенклатура = Комплектующие.Комплект
И ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Исходные.ДокументРОТ)
= ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ТОГДА Исходные.ПроектИзРегистра = Комплектующие.Проект
ИЛИ Исходные.ПроектИзРегистра.ДокументОснование = Комплектующие.Проект
ИНАЧЕ ИСТИНА
КОНЕЦ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиЦенДокументов КАК ИтогиДокументов
ПО Комплектующие.ДокументРОТ = ИтогиДокументов.ДокументРОТ
И Комплектующие.Комплект = ИтогиДокументов.Комплект
И Комплектующие.ХарактеристикаКомплекта = ИтогиДокументов.ХарактеристикаКомплекта
И Комплектующие.Проект = ИтогиДокументов.Проект
И Комплектующие.КонтрагентРеализации = ИтогиДокументов.КонтрагентРеализации
И Комплектующие.ДатаЦены = ИтогиДокументов.ДатаЦены
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиПрайса КАК ИтогиПрайса
ПО Комплектующие.ДокументРОТ = ИтогиПрайса.ДокументРОТ
И Комплектующие.Комплект = ИтогиПрайса.Комплект
И Комплектующие.ХарактеристикаКомплекта = ИтогиПрайса.ХарактеристикаКомплекта
И Комплектующие.Проект = ИтогиПрайса.Проект
И Комплектующие.КонтрагентРеализации = ИтогиПрайса.КонтрагентРеализации
И Комплектующие.ДатаЦены = ИтогиПрайса.ДатаЦены
// +++DimRa 14.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныРасходныхОрдеров КАК ЦеныРасходногоОрдера
ПО Комплектующие.ДокументРОТ = ЦеныРасходногоОрдера.ДокументРОТ
И Комплектующие.Комплект = ЦеныРасходногоОрдера.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныРасходногоОрдера.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныРасходногоОрдера.Проект
И Комплектующие.КонтрагентРеализации = ЦеныРасходногоОрдера.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныРасходногоОрдера.ДатаЦены
И Комплектующие.Комплектующая = ЦеныРасходногоОрдера.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныРасходногоОрдера.ХарактеристикаКомплектующей
И Комплектующие.СерияКомплектующей = ЦеныРасходногоОрдера.СерияКомплектующей
// ---DimRa
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПроекта КАК ЦеныПроекта
ПО Комплектующие.ДокументРОТ = ЦеныПроекта.ДокументРОТ
И Комплектующие.Комплект = ЦеныПроекта.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныПроекта.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныПроекта.Проект
И Комплектующие.КонтрагентРеализации = ЦеныПроекта.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныПроекта.ДатаЦены
И Комплектующие.Комплектующая = ЦеныПроекта.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныПроекта.ХарактеристикаКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныРеализации КАК ЦеныРеализации
ПО Комплектующие.ДокументРОТ = ЦеныРеализации.ДокументРОТ
И Комплектующие.Комплект = ЦеныРеализации.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныРеализации.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныРеализации.Проект
И Комплектующие.КонтрагентРеализации = ЦеныРеализации.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныРеализации.ДатаЦены
И Комплектующие.Комплектующая = ЦеныРеализации.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныРеализации.ХарактеристикаКомплектующей
ГДЕ
ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) = 0
И ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0) = 0
И ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) = 0
И НЕ (
(ЕСТЬNULL(ИтогиПрайса.КоличествоСтрок, 0) > 0
И ЕСТЬNULL(ИтогиПрайса.КоличествоСтрокСЦеной, 0) = ИтогиПрайса.КоличествоСтрок
И ЕСТЬNULL(ЦеныКомплекта.ЦенаАвторизованная, 0) > 1
И ЕСТЬNULL(ИтогиПрайса.ОбщаяЦенаКомплекта, 0) > 0)
ИЛИ (ЕСТЬNULL(ЦеныКомплекта.ЦенаАвторизованная, 0) > 1
И ЕСТЬNULL(ИтогиПрайса.ДоляСтоимостиИтого, 0) > 0)
// +++DimRa 28.09.26
// При отсутствии цен комплектующих распределяем исходную сумму строки РОТ.
ИЛИ (ЕСТЬNULL(Исходные.СуммаПродаж, 0) <> 0
И ЕСТЬNULL(ИтогиПрайса.ДоляСтоимостиИтого, 0) > 0)
// ---DimRa
)
ИНДЕКСИРОВАТЬ ПО
Номенклатура, ПроектИзРегистра
;
// +++DimRa 11.09.26
// Сумму, уже отнесённую на позиции по документам, не повторяем в строке комплекта.
ВЫБРАТЬ
Ключи.ДокументРОТ КАК ДокументРОТ,
Ключи.Номенклатура КАК Номенклатура,
Ключи.ПроектИзРегистра КАК ПроектИзРегистра,
СУММА(Итоги.СтоимостьДокументовНаКомплект) КАК СтоимостьДокументовНаКомплект
ПОМЕСТИТЬ ВТ_АП_УчтеннаяСтоимостьКомплектов
ИЗ
(ВЫБРАТЬ РАЗЛИЧНЫЕ
Исходные.ДокументРОТ КАК ДокументРОТ,
Исходные.Номенклатура КАК Номенклатура,
Исходные.ПроектИзРегистра КАК ПроектИзРегистра
ИЗ ВТ КАК Исходные) КАК Ключи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиЦенДокументов КАК Итоги
ПО Ключи.ДокументРОТ = Итоги.ДокументРОТ
И Ключи.Номенклатура = Итоги.Комплект
И ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Ключи.ДокументРОТ) = ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ТОГДА Ключи.ПроектИзРегистра = Итоги.Проект
ИЛИ Ключи.ПроектИзРегистра.ДокументОснование = Итоги.Проект
ИНАЧЕ ИСТИНА
КОНЕЦ
СГРУППИРОВАТЬ ПО
Ключи.ДокументРОТ,
Ключи.Номенклатура,
Ключи.ПроектИзРегистра
ИНДЕКСИРОВАТЬ ПО
Номенклатура, ПроектИзРегистра
;
// ---DimRa
ВЫБРАТЬ
Исходные.Ссылка КАК Ссылка,
Исходные.ДокументРОТ КАК ДокументРОТ,
Исходные.Номенклатура КАК Номенклатура,
Исходные.Заказчик КАК Заказчик,
Исходные.Партнер КАК Партнер,
Исходные.Город КАК Город,
Исходные.Количество КАК Количество,
Исходные.Цена КАК Цена,
ВЫБОР КОГДА (Исходные.СуммаПродаж - Исходные.Количество * ЕСТЬNULL(Учтено.СтоимостьДокументовНаКомплект, 0)) * Исходные.СуммаПродаж > 0 ТОГДА Исходные.СуммаПродаж - Исходные.Количество * ЕСТЬNULL(Учтено.СтоимостьДокументовНаКомплект, 0) ИНАЧЕ 0 КОНЕЦ КАК СуммаПродаж,
Исходные.ИНН КАК ИНН,
Исходные.ПартнерИНН КАК ПартнерИНН,
Исходные.ДатаОтгрузки КАК ДатаОтгрузки,
Исходные.ДатаОтгрузкиИсходная КАК ДатаОтгрузкиИсходная,
Исходные.ДатаОтгрузкиВСтроке КАК ДатаОтгрузкиВСтроке,
Исходные.СерияНоменклатуры КАК СерияНоменклатуры,
Исходные.КАМ КАК КАМ,
Исходные.ПартнерскийМенеджер КАК ПартнерскийМенеджер,
Исходные.ПроектИзРегистра КАК ПроектИзРегистра
ПОМЕСТИТЬ ВТ_НераспределеннаяСтоимость
ИЗ
ВТ КАК Исходные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НераспределенныеКомплекты КАК Нераспределенные
ПО Исходные.ДокументРОТ = Нераспределенные.ДокументРОТ
И Исходные.Номенклатура = Нераспределенные.Номенклатура
И Исходные.ПроектИзРегистра = Нераспределенные.ПроектИзРегистра
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_УчтеннаяСтоимостьКомплектов КАК Учтено
ПО Исходные.ДокументРОТ = Учтено.ДокументРОТ
И Исходные.Номенклатура = Учтено.Номенклатура
И Исходные.ПроектИзРегистра = Учтено.ПроектИзРегистра
ГДЕ
(ВЫБОР КОГДА (Исходные.СуммаПродаж - Исходные.Количество * ЕСТЬNULL(Учтено.СтоимостьДокументовНаКомплект, 0)) * Исходные.СуммаПродаж > 0 ТОГДА Исходные.СуммаПродаж - Исходные.Количество * ЕСТЬNULL(Учтено.СтоимостьДокументовНаКомплект, 0) ИНАЧЕ 0 КОНЕЦ) <> 0
// +++DimRa 14.09.26
// Если стоимость не найдена ни одним способом, сохраняем нулевую строку комплекта.
ИЛИ (ЕСТЬNULL(Исходные.СуммаПродаж, 0) = 0
И ЕСТЬNULL(Учтено.СтоимостьДокументовНаКомплект, 0) = 0)
// ---DimRa
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 16.09.26
// Для понятной расшифровки комплект показываем основной номенклатурой аппарата.
ВЫБРАТЬ
Комплектующие.ДокументРОТ КАК ДокументРОТ,
Комплектующие.Комплект КАК Комплект,
МИНИМУМ(Комплектующие.Комплектующая) КАК Аппарат
ПОМЕСТИТЬ ВТ_ОсновныеАппаратыКомплектов
ИЗ
ВТ_АП_Комплектующие КАК Комплектующие
ГДЕ
Комплектующие.Комплектующая.Катюша_АппаратРМ =
ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
СГРУППИРОВАТЬ ПО
Комплектующие.ДокументРОТ,
Комплектующие.Комплект
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Комплектующие.Комплектующая) = 1
ИНДЕКСИРОВАТЬ ПО
Комплект
;
// ---DimRa
// +++DimRa 18.09.26
// Проект комплекта для ссылки не зависит от наличия и источника цены.
// Неоднозначные проекты не выбираем произвольно; соединение не множит строки.
ВЫБРАТЬ
Исходные.ДокументРОТ КАК ДокументРОТ,
Исходные.Номенклатура КАК Номенклатура,
Исходные.ПроектИзРегистра КАК ПроектИзРегистра,
МАКСИМУМ(Сборки.Проект) КАК Проект
ПОМЕСТИТЬ ВТ_ПроектыКомплектовДляСсылки
ИЗ
ВТ КАК Исходные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_АП_СборкиСПроектами КАК Сборки
ПО Исходные.ДокументРОТ = Сборки.ДокументРОТ
И Исходные.Номенклатура = Сборки.Комплект
И ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Исходные.ДокументРОТ)
= ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ТОГДА Исходные.ПроектИзРегистра = Сборки.Проект
ИЛИ Исходные.ПроектИзРегистра.ДокументОснование = Сборки.Проект
ИНАЧЕ ИСТИНА
КОНЕЦ
ГДЕ
Сборки.Проект <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
СГРУППИРОВАТЬ ПО
Исходные.ДокументРОТ,
Исходные.Номенклатура,
Исходные.ПроектИзРегистра
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сборки.Проект) = 1
;
// ---DimRa
ВЫБРАТЬ
// +++DimRa 18.09.26
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Исходные.ДокументРОТ) = ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ТОГДА Исходные.ДокументРОТ
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И Комплектующие.Проект <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Комплектующие.Проект
КОГДА НЕ ПроектыКомплектов.Проект ЕСТЬ NULL
ТОГДА ПроектыКомплектов.Проект
КОГДА (НЕ Комплектующие.Комплектующая ЕСТЬ NULL
ИЛИ НЕ НайденныеСборки.ДокументРОТ ЕСТЬ NULL)
И Исходные.ПроектИзРегистра <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Исходные.ПроектИзРегистра
ИНАЧЕ Исходные.ДокументРОТ
КОНЕЦ КАК Ссылка,
// ---DimRa
ВЫБОР
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
ТОГДА Комплектующие.Комплектующая
ИНАЧЕ Исходные.Номенклатура
КОНЕЦ КАК Номенклатура,
Исходные.Номенклатура КАК ИсходнаяНоменклатура,
ВЫБОР
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И (Исходные.Партнер = ""
ИЛИ Исходные.Партнер =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ Исходные.Партнер ЕСТЬ NULL)
ТОГДА Комплектующие.Комплектующая
ИНАЧЕ Исходные.Номенклатура
КОНЕЦ КАК НоменклатураДляОтбора,
Исходные.Заказчик КАК Заказчик,
Исходные.Заказчик.Наименование КАК ЗаказчикНаименование,
Исходные.Партнер КАК Партнер,
Исходные.Партнер.Наименование КАК ПартнерНаименование,
Исходные.Город КАК Город,
ВЫБОР
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
ТОГДА Исходные.Количество
* Комплектующие.КоличествоКомплектующей
ИНАЧЕ Исходные.Количество
КОНЕЦ КАК Количество,
ВЫБОР
// +++DimRa 21.09.26
// Сначала распределяем цену комплекта: из записи РОТ, затем из проекта.
// Доля позиции определяется по выбранному прайсу с учетом количества в комплекте.
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И ЕСТЬNULL(ЦеныПрямойОтгрузки.ЦенаАвторизованная, 0) > 1
И ИтогиПрайса.КоличествоСтрок > 0
И ИтогиПрайса.КоличествоСтрокСЦеной = ИтогиПрайса.КоличествоСтрок
И ИтогиПрайса.ОбщаяЦенаКомплекта > 0
ТОГДА Исходные.Количество
* ЦеныПрямойОтгрузки.ЦенаАвторизованная
* Комплектующие.КоличествоКомплектующей
* ЕСТЬNULL(ЦеныПрайса.ЦенаПрайса, 0)
/ ИтогиПрайса.ОбщаяЦенаКомплекта
// Если общая цена комплекта не найдена, используем цену позиции из документов.
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И (ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) > 0
ИЛИ ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0) > 0
ИЛИ ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) > 0)
ТОГДА Исходные.Количество
* Комплектующие.КоличествоКомплектующей
* ВЫБОР
КОГДА ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) > 0
ТОГДА ЦеныРасходногоОрдера.ЦенаРасходногоОрдера
КОГДА ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) > 0
ТОГДА ЦеныРеализации.ЦенаЕдиницыРеализации
ИНАЧЕ ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0)
КОНЕЦ
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И ЕСТЬNULL(ЦеныПрямойОтгрузки.ЦенаАвторизованная, 0) > 1
И ИтогиПрайса.ДоляСтоимостиИтого > 0
ТОГДА Исходные.Количество
* ЦеныПрямойОтгрузки.ЦенаАвторизованная
* Комплектующие.ДоляСтоимости
/ ИтогиПрайса.ДоляСтоимостиИтого
// ---DimRa
// +++DimRa 25.09.26
// Если цены комплектующих не найдены, распределяем исходную сумму комплекта.
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И Комплектующие.ДоляСтоимости > 0
ТОГДА Исходные.СуммаПродаж * Комплектующие.ДоляСтоимости
// ---DimRa
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
ТОГДА 0
// +++DimRa 11.09.26
КОГДА ЕСТЬNULL(ЦеныПрямойОтгрузки.ЦенаЕдиницыПроекта, 0) > 0
ТОГДА Исходные.Количество * ЦеныПрямойОтгрузки.ЦенаЕдиницыПроекта
// ---DimRa
ИНАЧЕ Исходные.СуммаПродаж
КОНЕЦ КАК Сумма,
// +++DimRa 21.09.26
// Цена позиции считается напрямую по формуле распределения, без усреднения суммы.
ВЫБОР
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И ЕСТЬNULL(ЦеныПрямойОтгрузки.ЦенаАвторизованная, 0) > 1
И ИтогиПрайса.КоличествоСтрок > 0
И ИтогиПрайса.КоличествоСтрокСЦеной = ИтогиПрайса.КоличествоСтрок
И ИтогиПрайса.ОбщаяЦенаКомплекта > 0
ТОГДА ЦеныПрямойОтгрузки.ЦенаАвторизованная
* ЕСТЬNULL(ЦеныПрайса.ЦенаПрайса, 0)
/ ИтогиПрайса.ОбщаяЦенаКомплекта
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И (ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) > 0
ИЛИ ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0) > 0
ИЛИ ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) > 0)
ТОГДА ВЫБОР
КОГДА ЕСТЬNULL(ЦеныРасходногоОрдера.ЦенаРасходногоОрдера, 0) > 0
ТОГДА ЦеныРасходногоОрдера.ЦенаРасходногоОрдера
КОГДА ЕСТЬNULL(ЦеныРеализации.ЦенаЕдиницыРеализации, 0) > 0
ТОГДА ЦеныРеализации.ЦенаЕдиницыРеализации
ИНАЧЕ ЕСТЬNULL(ЦеныПроекта.ЦенаЕдиницыПроекта, 0)
КОНЕЦ
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И ЕСТЬNULL(ЦеныПрямойОтгрузки.ЦенаАвторизованная, 0) > 1
И ИтогиПрайса.ДоляСтоимостиИтого > 0
И Комплектующие.КоличествоКомплектующей <> 0
ТОГДА ЦеныПрямойОтгрузки.ЦенаАвторизованная
* Комплектующие.ДоляСтоимости
/ ИтогиПрайса.ДоляСтоимостиИтого
/ Комплектующие.КоличествоКомплектующей
// +++DimRa 25.09.26
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
И Комплектующие.ДоляСтоимости > 0
И Исходные.Количество * Комплектующие.КоличествоКомплектующей <> 0
ТОГДА Исходные.СуммаПродаж * Комплектующие.ДоляСтоимости
/ (Исходные.Количество * Комплектующие.КоличествоКомплектующей)
// ---DimRa
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
ТОГДА 0
КОГДА ЕСТЬNULL(ЦеныПрямойОтгрузки.ЦенаЕдиницыПроекта, 0) > 0
ТОГДА ЦеныПрямойОтгрузки.ЦенаЕдиницыПроекта
ИНАЧЕ Исходные.Цена
КОНЕЦ КАК ЦенаЗаШтРасчетная,
// ---DimRa
Исходные.ИНН КАК ИНН,
Исходные.ПартнерИНН КАК ПартнерИНН,
ВЫБОР
КОГДА Исходные.Заказчик.ГоловнойКонтрагент.Катюша_Дистрибьютор
ТОГДА "Продажа без Заказчика"
ИНАЧЕ ВЫБОР
КОГДА Исходные.Заказчик =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА Исходные.Партнер.Наименование + "(Партнер)"
ИНАЧЕ Исходные.Заказчик.ГоловнойКонтрагент
КОНЕЦ
КОНЕЦ КАК ГоловнойКонтрагент,
ВЫБОР
КОГДА Исходные.Заказчик.ГоловнойКонтрагент.Катюша_Дистрибьютор
ТОГДА "Продажа без Заказчика"
ИНАЧЕ ВЫБОР
КОГДА Исходные.Заказчик =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА Исходные.Партнер.Наименование + "(Партнер)"
ИНАЧЕ Исходные.Заказчик.ГоловнойКонтрагент.Наименование
КОНЕЦ
КОНЕЦ КАК ГоловнойКонтрагентНаименование,
ВЫБОР
КОГДА Исходные.Заказчик.ГоловнойКонтрагент.Катюша_Дистрибьютор
ТОГДА ""
ИНАЧЕ ВЫРАЗИТЬ(
Исходные.Заказчик.ГоловнойКонтрагент.ИНН КАК СТРОКА(50))
КОНЕЦ КАК ГоловнойКонтрагентИНН,
Исходные.ДатаОтгрузки КАК ДатаОтгрузки,
ВЫБОР
КОГДА НЕ Комплектующие.Комплектующая ЕСТЬ NULL
ИЛИ Исходные.Номенклатура.Катюша_АппаратРМ =
ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
ТОГДА Исходные.ДатаОтгрузкиВСтроке
ИНАЧЕ Исходные.ДатаОтгрузкиИсходная
КОНЕЦ КАК ДатаОтгрузкиВСтроке,
Исходные.СерияНоменклатуры КАК СерияНоменклатуры,
НЕ Комплектующие.Комплектующая ЕСТЬ NULL КАК ЭтоРаскомплект,
НЕ НайденныеСборки.ДокументРОТ ЕСТЬ NULL КАК ЕстьСборка,
Исходные.КАМ КАК КАМ,
Исходные.ПартнерскийМенеджер КАК ПартнерскийМенеджер,
0 КАК КоличествоКомплектов,
ЛОЖЬ КАК ЭтоСтоимостьКомплекта,
"" КАК СтатусСтоимости
ПОМЕСТИТЬ ВТ_ДеталиСуммыДляРасшифровки
ИЗ
ВТ КАК Исходные
// +++DimRa 18.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПроектыКомплектовДляСсылки КАК ПроектыКомплектов
ПО Исходные.ДокументРОТ = ПроектыКомплектов.ДокументРОТ
И Исходные.Номенклатура = ПроектыКомплектов.Номенклатура
И Исходные.ПроектИзРегистра = ПроектыКомплектов.ПроектИзРегистра
// ---DimRa
// +++DimRa 11.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПрямойОтгрузки КАК ЦеныПрямойОтгрузки
ПО Исходные.ДокументРОТ = ЦеныПрямойОтгрузки.ДокументРОТ
И Исходные.Номенклатура = ЦеныПрямойОтгрузки.Номенклатура
// ---DimRa
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НераспределенныеКомплекты КАК Нераспределенные
ПО Исходные.ДокументРОТ = Нераспределенные.ДокументРОТ
И Исходные.Номенклатура = Нераспределенные.Номенклатура
И Исходные.ПроектИзРегистра = Нераспределенные.ПроектИзРегистра
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_Комплектующие КАК Комплектующие
ПО Исходные.ДокументРОТ = Комплектующие.ДокументРОТ
И Исходные.Номенклатура = Комплектующие.Комплект
// +++DimRa 24.09.26
// Не допускаем перекрестного соединения состава строк с разными проектами.
И Исходные.ПроектИзРегистра = Комплектующие.ПроектИзРегистра
// ---DimRa
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ДокументыСоСборкой КАК НайденныеСборки
ПО Исходные.ДокументРОТ = НайденныеСборки.ДокументРОТ
И Исходные.Номенклатура = НайденныеСборки.Комплект
// +++DimRa 14.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныРасходныхОрдеров КАК ЦеныРасходногоОрдера
ПО Комплектующие.ДокументРОТ = ЦеныРасходногоОрдера.ДокументРОТ
И Комплектующие.Комплект = ЦеныРасходногоОрдера.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныРасходногоОрдера.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныРасходногоОрдера.Проект
И Комплектующие.КонтрагентРеализации = ЦеныРасходногоОрдера.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныРасходногоОрдера.ДатаЦены
И Комплектующие.Комплектующая = ЦеныРасходногоОрдера.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныРасходногоОрдера.ХарактеристикаКомплектующей
И Комплектующие.СерияКомплектующей = ЦеныРасходногоОрдера.СерияКомплектующей
// ---DimRa
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПроекта КАК ЦеныПроекта
ПО Комплектующие.ДокументРОТ = ЦеныПроекта.ДокументРОТ
И Комплектующие.Комплект = ЦеныПроекта.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныПроекта.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныПроекта.Проект
И Комплектующие.КонтрагентРеализации = ЦеныПроекта.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныПроекта.ДатаЦены
И Комплектующие.Комплектующая = ЦеныПроекта.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныПроекта.ХарактеристикаКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныРеализации КАК ЦеныРеализации
ПО Комплектующие.ДокументРОТ = ЦеныРеализации.ДокументРОТ
И Комплектующие.Комплект = ЦеныРеализации.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныРеализации.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныРеализации.Проект
И Комплектующие.КонтрагентРеализации = ЦеныРеализации.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныРеализации.ДатаЦены
И Комплектующие.Комплектующая = ЦеныРеализации.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныРеализации.ХарактеристикаКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиЦенДокументов КАК ИтогиДокументов
ПО Комплектующие.ДокументРОТ = ИтогиДокументов.ДокументРОТ
И Комплектующие.Комплект = ИтогиДокументов.Комплект
И Комплектующие.ХарактеристикаКомплекта = ИтогиДокументов.ХарактеристикаКомплекта
И Комплектующие.Проект = ИтогиДокументов.Проект
И Комплектующие.КонтрагентРеализации = ИтогиДокументов.КонтрагентРеализации
И Комплектующие.ДатаЦены = ИтогиДокументов.ДатаЦены
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ЦеныПрайса КАК ЦеныПрайса
ПО Комплектующие.ДокументРОТ = ЦеныПрайса.ДокументРОТ
И Комплектующие.Комплект = ЦеныПрайса.Комплект
И Комплектующие.ХарактеристикаКомплекта = ЦеныПрайса.ХарактеристикаКомплекта
И Комплектующие.Проект = ЦеныПрайса.Проект
И Комплектующие.КонтрагентРеализации = ЦеныПрайса.КонтрагентРеализации
И Комплектующие.ДатаЦены = ЦеныПрайса.ДатаЦены
И Комплектующие.Комплектующая = ЦеныПрайса.Комплектующая
И Комплектующие.ХарактеристикаКомплектующей = ЦеныПрайса.ХарактеристикаКомплектующей
И Комплектующие.СерияКомплектующей = ЦеныПрайса.СерияКомплектующей
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АП_ИтогиПрайса КАК ИтогиПрайса
ПО Комплектующие.ДокументРОТ = ИтогиПрайса.ДокументРОТ
И Комплектующие.Комплект = ИтогиПрайса.Комплект
И Комплектующие.ХарактеристикаКомплекта = ИтогиПрайса.ХарактеристикаКомплекта
И Комплектующие.Проект = ИтогиПрайса.Проект
И Комплектующие.КонтрагентРеализации = ИтогиПрайса.КонтрагентРеализации
И Комплектующие.ДатаЦены = ИтогиПрайса.ДатаЦены
ГДЕ
Нераспределенные.ДокументРОТ ЕСТЬ NULL
ОБЪЕДИНИТЬ ВСЕ
// +++DimRa 16.09.26
ВЫБРАТЬ
// +++DimRa 18.09.26
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Исходные.ДокументРОТ) = ТИП(Документ.Катюша_ДистрибьюторскийОтчет_ERP)
ТОГДА Исходные.ДокументРОТ
КОГДА НЕ ПроектыКомплектов.Проект ЕСТЬ NULL
ТОГДА ПроектыКомплектов.Проект
КОГДА Исходные.ПроектИзРегистра <> ЗНАЧЕНИЕ(Документ.ЗаказКлиента.ПустаяСсылка)
ТОГДА Исходные.ПроектИзРегистра
ИНАЧЕ Исходные.ДокументРОТ
КОНЕЦ КАК Ссылка,
// ---DimRa
ВЫБОР
КОГДА ОсновныеАппараты.Аппарат ЕСТЬ NULL
ТОГДА Исходные.Номенклатура
ИНАЧЕ ОсновныеАппараты.Аппарат
КОНЕЦ КАК Номенклатура,
Исходные.Номенклатура КАК ИсходнаяНоменклатура,
ВЫБОР
КОГДА ОсновныеАппараты.Аппарат ЕСТЬ NULL
ТОГДА Исходные.Номенклатура
ИНАЧЕ ОсновныеАппараты.Аппарат
КОНЕЦ КАК НоменклатураДляОтбора,
Исходные.Заказчик КАК Заказчик,
Исходные.Заказчик.Наименование КАК ЗаказчикНаименование,
Исходные.Партнер КАК Партнер,
Исходные.Партнер.Наименование КАК ПартнерНаименование,
Исходные.Город КАК Город,
Исходные.Количество КАК Количество,
Исходные.СуммаПродаж КАК Сумма,
Исходные.Цена КАК ЦенаЗаШтРасчетная,
Исходные.ИНН КАК ИНН,
Исходные.ПартнерИНН КАК ПартнерИНН,
ВЫБОР
КОГДА Исходные.Заказчик.ГоловнойКонтрагент.Катюша_Дистрибьютор
ТОГДА "Продажа без Заказчика"
ИНАЧЕ ВЫБОР
КОГДА Исходные.Заказчик =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА Исходные.Партнер.Наименование + "(Партнер)"
ИНАЧЕ Исходные.Заказчик.ГоловнойКонтрагент
КОНЕЦ
КОНЕЦ КАК ГоловнойКонтрагент,
ВЫБОР
КОГДА Исходные.Заказчик.ГоловнойКонтрагент.Катюша_Дистрибьютор
ТОГДА "Продажа без Заказчика"
ИНАЧЕ ВЫБОР
КОГДА Исходные.Заказчик =
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА Исходные.Партнер.Наименование + "(Партнер)"
ИНАЧЕ Исходные.Заказчик.ГоловнойКонтрагент.Наименование
КОНЕЦ
КОНЕЦ КАК ГоловнойКонтрагентНаименование,
ВЫБОР
КОГДА Исходные.Заказчик.ГоловнойКонтрагент.Катюша_Дистрибьютор
ТОГДА ""
ИНАЧЕ ВЫРАЗИТЬ(
Исходные.Заказчик.ГоловнойКонтрагент.ИНН КАК СТРОКА(50))
КОНЕЦ КАК ГоловнойКонтрагентИНН,
Исходные.ДатаОтгрузки КАК ДатаОтгрузки,
Исходные.ДатаОтгрузкиВСтроке КАК ДатаОтгрузкиВСтроке,
Исходные.СерияНоменклатуры КАК СерияНоменклатуры,
ЛОЖЬ КАК ЭтоРаскомплект,
ИСТИНА КАК ЕстьСборка,
Исходные.КАМ КАК КАМ,
Исходные.ПартнерскийМенеджер КАК ПартнерскийМенеджер,
0 КАК КоличествоКомплектов,
ЛОЖЬ КАК ЭтоСтоимостьКомплекта,
"Комплект показан одной строкой аппарата" КАК СтатусСтоимости
ИЗ
ВТ КАК Исходные
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НераспределенныеКомплекты КАК Нераспределенные
ПО Исходные.ДокументРОТ = Нераспределенные.ДокументРОТ
И Исходные.Номенклатура = Нераспределенные.Номенклатура
И Исходные.ПроектИзРегистра = Нераспределенные.ПроектИзРегистра
// +++DimRa 18.09.26
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПроектыКомплектовДляСсылки КАК ПроектыКомплектов
ПО Исходные.ДокументРОТ = ПроектыКомплектов.ДокументРОТ
И Исходные.Номенклатура = ПроектыКомплектов.Номенклатура
И Исходные.ПроектИзРегистра = ПроектыКомплектов.ПроектИзРегистра
// ---DimRa
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОсновныеАппаратыКомплектов КАК ОсновныеАппараты
ПО Исходные.ДокументРОТ = ОсновныеАппараты.ДокументРОТ
И Исходные.Номенклатура = ОсновныеАппараты.Комплект
// ---DimRa
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Детали.Ссылка КАК Ссылка,
Детали.Номенклатура КАК Номенклатура,
Детали.ИсходнаяНоменклатура КАК ИсходнаяНоменклатура,
Детали.НоменклатураДляОтбора КАК НоменклатураДляОтбора,
Детали.Заказчик КАК Заказчик,
Детали.ЗаказчикНаименование КАК ЗаказчикНаименование,
Детали.Партнер КАК Партнер,
Детали.ПартнерНаименование КАК ПартнерНаименование,
Детали.Город КАК Город,
Детали.Количество КАК Количество,
Детали.КоличествоКомплектов КАК КоличествоКомплектов,
Детали.ЭтоСтоимостьКомплекта КАК ЭтоСтоимостьКомплекта,
Детали.СтатусСтоимости КАК СтатусСтоимости,
// +++DimRa 14.09.26
ВЫРАЗИТЬ(
Детали.ЦенаЗаШтРасчетная
КАК ЧИСЛО(20, 2)
) КАК ЦенаДляГруппировки,
// ---DimRa
ВЫРАЗИТЬ(
Детали.ЦенаЗаШтРасчетная
КАК ЧИСЛО(20, 2)
) КАК ЦенаЗаШт,
Детали.Сумма КАК Сумма,
Детали.ИНН КАК ИНН,
Детали.ПартнерИНН КАК ПартнерИНН,
Детали.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
Детали.ГоловнойКонтрагентНаименование КАК ГоловнойКонтрагентНаименование,
Детали.ГоловнойКонтрагентИНН КАК ГоловнойКонтрагентИНН,
Детали.ДатаОтгрузки КАК ДатаОтгрузки,
Детали.ДатаОтгрузкиВСтроке КАК ДатаОтгрузкиВСтроке,
Детали.СерияНоменклатуры КАК СерияНоменклатуры,
Детали.ЭтоРаскомплект КАК ЭтоРаскомплект,
Детали.ЕстьСборка КАК ЕстьСборка,
Детали.КАМ КАК КАМ,
Детали.ПартнерскийМенеджер КАК ПартнерскийМенеджер
ПОМЕСТИТЬ ВТ_ДеталиНормализованные
ИЗ
ВТ_ДеталиСуммыДляРасшифровки КАК Детали
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
// +++DimRa 16.09.26
// Стоимость и округление берём из эталонной расшифровки сумм РОТ.
ВЫБРАТЬ
Детали.Номенклатура КАК Номенклатура,
Детали.ИсходнаяНоменклатура КАК НоменклатураДляОтбора,
Детали.Заказчик КАК Заказчик,
Детали.Партнер КАК Партнер,
ВЫБОР
КОГДА Детали.Город = ЗНАЧЕНИЕ(Справочник.Катюша_Города.ПустаяСсылка)
ИЛИ Детали.Город ЕСТЬ NULL
ТОГДА ВЫРАЗИТЬ("<_>" КАК СТРОКА(150))
ИНАЧЕ ПРЕДСТАВЛЕНИЕ(Детали.Город)
КОНЕЦ КАК Город,
Детали.Количество КАК Количество,
Детали.ЦенаДляГруппировки КАК ЦенаЗаШт,
ВЫБОР
КОГДА Детали.СтатусСтоимости = "Комплект показан одной строкой аппарата"
ТОГДА Детали.Сумма
ИНАЧЕ Детали.Количество * Детали.ЦенаДляГруппировки
КОНЕЦ КАК Сумма,
Детали.ИНН КАК ИНН,
Детали.ПартнерИНН КАК ПартнерИНН,
Детали.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
Детали.ГоловнойКонтрагентИНН КАК ГоловнойКонтрагентИНН,
Детали.ДатаОтгрузкиВСтроке КАК ДатаОтгрузки,
Детали.КАМ КАК КАМ,
Детали.ПартнерскийМенеджер КАК ПартнерскийМенеджер,
Детали.КоличествоКомплектов КАК КоличествоКомплектов,
Детали.ЭтоСтоимостьКомплекта КАК ЭтоСтоимостьКомплекта,
Детали.СтатусСтоимости КАК СтатусСтоимости
ПОМЕСТИТЬ ВТ_Раскомплект
ИЗ
ВТ_ДеталиНормализованные КАК Детали
ГДЕ
Детали.Номенклатура.Катюша_АппаратРМ =
ЗНАЧЕНИЕ(Перечисление.ITR_ВидыАппаратовРМ.Аппарат)
И (НЕ &ПоСуммам ИЛИ Детали.Сумма <> 0)
;
// ---DimRa
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Раскомплект.Номенклатура КАК Номенклатура,
ВТ_Раскомплект.Заказчик КАК Заказчик,
ВЫБОР
КОГДА ВТ_Раскомплект.Партнер = ""
ИЛИ ВТ_Раскомплект.Партнер
= ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА "Прямые продажи"
ИНАЧЕ ВТ_Раскомплект.Партнер
КОНЕЦ КАК Партнер,
ВТ_Раскомплект.Город КАК Город,
СУММА(ВТ_Раскомплект.Количество) КАК Количество,
СУММА(ВТ_Раскомплект.КоличествоКомплектов) КАК КоличествоКомплектов,
ВТ_Раскомплект.СтатусСтоимости КАК СтатусСтоимости,
// +++DimRa 16.09.26
// Разные цены не усредняем: группируем так же, как в расшифровке сумм.
ВТ_Раскомплект.ЦенаЗаШт КАК ЦенаЗаШт,
// ---DimRa
ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВТ_Раскомплект.Сумма, 0)) КАК ЧИСЛО(20, 2)) КАК Сумма,
ВТ_Раскомплект.ИНН КАК ИНН,
ВТ_Раскомплект.ПартнерИНН КАК ПартнерИНН,
ВТ_Раскомплект.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
ВТ_Раскомплект.ГоловнойКонтрагентИНН КАК ГоловнойКонтрагентИНН,
ВТ_Раскомплект.ДатаОтгрузки КАК ДатаОтгрузки,
ВТ_Раскомплект.КАМ КАК КАМ,
ВТ_Раскомплект.ПартнерскийМенеджер КАК ПартнерскийМенеджер
ИЗ
ВТ_Раскомплект КАК ВТ_Раскомплект
ГДЕ
ВЫБОР
КОГДА ВТ_Раскомплект.Заказчик.Катюша_Дистрибьютор
И ВТ_Раскомплект.Партнер <> ""
ТОГДА НЕ ВТ_Раскомплект.Партнер.Катюша_Дистрибьютор
ИНАЧЕ ИСТИНА
КОНЕЦ
// +++DimRa 21.09.26
// Ценовые строки комплектующих должны оставаться в исходной ВТ.
// Прямые продажи отбираем после расчета и раскомплектации.
И (НЕ &ТолькоПрямыеПродажи
ИЛИ ВТ_Раскомплект.Партнер = ""
ИЛИ ВТ_Раскомплект.Партнер
= ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ ВТ_Раскомплект.Партнер ЕСТЬ NULL)
// ---DimRa
И (НЕ &ИспользоватьСписокНоменклатуры
ИЛИ ВТ_Раскомплект.НоменклатураДляОтбора В (&СписокНоменклатуры)
ИЛИ ВТ_Раскомплект.Номенклатура В (&СписокНоменклатуры))
И (НЕ &ИспользоватьСписокСерийУстройств
ИЛИ ВТ_Раскомплект.НоменклатураДляОтбора В
(
ВЫБРАТЬ РАЗЛИЧНЫЕ
СерииУстройств.Ссылка
ИЗ
Справочник.Номенклатура.Катюша_СерииУстройства
КАК СерииУстройств
ГДЕ
СерииУстройств.СерияУстройства
В (&СписокСерийУстройств)
)
ИЛИ ВТ_Раскомплект.Номенклатура В
(
ВЫБРАТЬ РАЗЛИЧНЫЕ
СерииУстройств.Ссылка
ИЗ
Справочник.Номенклатура.Катюша_СерииУстройства
КАК СерииУстройств
ГДЕ
СерииУстройств.СерияУстройства
В (&СписокСерийУстройств)
)
)
СГРУППИРОВАТЬ ПО
ВТ_Раскомплект.СтатусСтоимости,
ВТ_Раскомплект.Номенклатура,
ВТ_Раскомплект.ЦенаЗаШт,
ВТ_Раскомплект.Заказчик,
ВТ_Раскомплект.Город,
ВТ_Раскомплект.ИНН,
ВТ_Раскомплект.ПартнерИНН,
ВТ_Раскомплект.ГоловнойКонтрагент,
ВТ_Раскомплект.ГоловнойКонтрагентИНН,
ВТ_Раскомплект.ДатаОтгрузки,
ВЫБОР
КОГДА ВТ_Раскомплект.Партнер = ""
ИЛИ ВТ_Раскомплект.Партнер
= ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ТОГДА "Прямые продажи"
ИНАЧЕ ВТ_Раскомплект.Партнер
КОНЕЦ,
ВТ_Раскомплект.КАМ,
ВТ_Раскомплект.ПартнерскийМенеджер