ВЫБРАТЬ
"Услуги" КАК ВидОбщейСущности,
1000 КАК ПолнаяСтоимостьВида
ПОМЕСТИТЬ втСтоимостьПоВиду
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Товары",
600
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Халява",
7200
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Нечто",
115100
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
"Услуги" КАК ВидОбщейСущности,
"Чесать за ухом 1" КАК Наименование,
1 КАК Количество
ПОМЕСТИТЬ втНоменклатура
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Услуги",
"Чесать за ухом 2",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Услуги",
"Чесать за ухом 3",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Товары",
"Болт",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Товары",
"Гайка",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Товары",
"Смазка",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Халява",
"Уксус",
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Халява",
"Сладкий",
1
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втНоменклатура.ВидОбщейСущности КАК ВидОбщейСущности,
СУММА(втНоменклатура.Количество) КАК Количество
ПОМЕСТИТЬ втКоличествоНоменклатуры
ИЗ
втНоменклатура КАК втНоменклатура
СГРУППИРОВАТЬ ПО
втНоменклатура.ВидОбщейСущности
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втНоменклатура.ВидОбщейСущности КАК ВидОбщейСущности,
втНоменклатура.Наименование КАК Наименование,
АВТОНОМЕРЗАПИСИ() КАК НомерПоПорядку,
втСтоимость.ПолнаяСтоимостьВида КАК ПолнаяСтоимостьВида,
ЕСТЬNULL(втКоличествоНоменклатуры.Количество, 0) КАК КоличествоНоменклатуры,
ВЫБОР
КОГДА ЕСТЬNULL(втКоличествоНоменклатуры.Количество, 0) <> 0
И втСтоимость.ПолнаяСтоимостьВида <> 0
ТОГДА ОКР(втСтоимость.ПолнаяСтоимостьВида / втКоличествоНоменклатуры.Количество, 2)
ИНАЧЕ 0
КОНЕЦ КАК Распределение
ПОМЕСТИТЬ втРаспределение
ИЗ
втНоменклатура КАК втНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ втСтоимостьПоВиду КАК втСтоимость
ПО втНоменклатура.ВидОбщейСущности = втСтоимость.ВидОбщейСущности
ЛЕВОЕ СОЕДИНЕНИЕ втКоличествоНоменклатуры КАК втКоличествоНоменклатуры
ПО втНоменклатура.ВидОбщейСущности = втКоличествоНоменклатуры.ВидОбщейСущности
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втСтоимостьПоВиду.ВидОбщейСущности КАК ВидОбщейСущности,
МАКСИМУМ(втНоменклатураНомерПоПорядку.НомерПоПорядку) КАК НомерПоПорядку,
СУММА(втНоменклатураНомерПоПорядку.Распределение) КАК Распределение,
втСтоимостьПоВиду.ПолнаяСтоимостьВида КАК ПолнаяСтоимостьВида
ПОМЕСТИТЬ втРазница
ИЗ
втРаспределение КАК втНоменклатураНомерПоПорядку
ЛЕВОЕ СОЕДИНЕНИЕ втСтоимостьПоВиду КАК втСтоимостьПоВиду
ПО втНоменклатураНомерПоПорядку.ВидОбщейСущности = втСтоимостьПоВиду.ВидОбщейСущности
СГРУППИРОВАТЬ ПО
втСтоимостьПоВиду.ВидОбщейСущности,
втСтоимостьПоВиду.ПолнаяСтоимостьВида
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втНоменклатураНомерПоПорядку.ВидОбщейСущности КАК ВидОбщейСущности,
втНоменклатураНомерПоПорядку.Наименование КАК Наименование,
втНоменклатураНомерПоПорядку.НомерПоПорядку КАК НомерПоПорядку,
втНоменклатураНомерПоПорядку.Распределение + ЕСТЬNULL(втРазница.ПолнаяСтоимостьВида - втРазница.Распределение, 0) КАК Распределение,
втНоменклатураНомерПоПорядку.ПолнаяСтоимостьВида КАК ПолнаяСтоимостьВида,
втНоменклатураНомерПоПорядку.КоличествоНоменклатуры КАК КоличествоНоменклатуры
ИЗ
втРаспределение КАК втНоменклатураНомерПоПорядку
ЛЕВОЕ СОЕДИНЕНИЕ втРазница КАК втРазница
ПО (втРазница.ВидОбщейСущности = втНоменклатураНомерПоПорядку.ВидОбщейСущности)
И (втРазница.НомерПоПорядку = втНоменклатураНомерПоПорядку.НомерПоПорядку)
Имея 2 таблицы, необходимо распределить полную стоимость вида по номенклатуре без потери копеек при округлении
Таблица разниц стоимости
Результат
Есть похожие алгоритмы решения распределения, но мой вариант субъективно наглядней и прост для восприятия.
Похожее: