Имя: Пароль:
1C
 
Кратно увеличивается расчетная сумма при соединении таблицы документа с регистром сведений
0 distorter
 
03.10.25
08:36
Выполняю запрос к табличной части Запасы документа ЗаказНаПроизводство и к таблице ЦеныНоменклатурыСрезПоследних регистра сведений ЦеныНоменклатуры с отбором по ВидуЦен. Внутреннее соединение по Номенклатуре. В результате запроса получаю три поля: ЗаказНаПроизводствоЗапасы.Ссылка.ЗаказПокупателя, СуммаЗатратПлан, КоличествоЗатратПлан

СуммаЗатрат план Считается как Цена (из регистра) * КоличсетвоЗатратПлан.

При это Количество считает верно, а сумма кратно увеличивается (даже если в ТЧ документа одна строка).

Где искать ошибку?
1 Мультук
 
гуру
03.10.25
08:45
(0)

Вопрос риторический, где искать ошибку?
-- в голове
-- в тексте запроса

Как искать ошибку
-- максимально упростить запрос
-- сделать отбор по одному документу ЗаказНаПроизводство
-- убрать группировки
-- посмотреть в консоле на результат запроса.

Обычно этого хватает, чтобы понять "что происходит"

Если не помогло - показать текст запроса в сообщении
2 программистище
 
03.10.25
08:45
(0) в запросе (ваш кэп)
3 mikecool
 
03.10.25
09:02
сверить - что есть в документе и что есть в РС, проверить условия соединения
4 СвинТуз
 
03.10.25
09:07
Начать с того что найти четвертое поле.
"Номенклатура".
С ним как обошлись?
Фильтра на срез последних (не упомянут= нет?).
Как с табличной частью документа обошлись?
5 СвинТуз
 
03.10.25
09:08
Цену не правильно сворачиваете из регистра сведений.
Структура регистра и ваши отборы, свертки нужны.
6 craxx
 
03.10.25
12:20
(0) А еще бы текст запроса показал, намного проще бы было понять.
7 RVN
 
03.10.25
13:57
(0) тут гадалка говорит, что у вас несколько типов цен в регистре. А отбор по типу цен в срезе последних вы не сделали.
8 distorter
 
10.10.25
11:13
(7) Отбор сделан первым делом )
9 distorter
 
10.10.25
11:14
(6) Пожалуйста:

ВЫБРАТЬ
    МатериалаПлан.Менеджер КАК Менеджер,
    МатериалаПлан.ЗаказПокупателя КАК ЗаказПокупателя,
    МатериалаПлан.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
    МатериалыФакт.Производство КАК Производство,
    Работы.СдельныйНаряд КАК СдельныйНаряд,
    СУММА(МатериалаПлан.КоличествоМатериалПлан) КАК КоличествоМатериалПлан,
    МатериалаПлан.Цена КАК Цена,
    СУММА(МатериалаПлан.СуммаМетериалПлан) КАК СуммаМетериалПлан,
    СУММА(МатериалыФакт.СуммаМатериалФакт) КАК СуммаМатериалФакт,
    СУММА(Работы.КоличествоРаботыПлан) КАК КоличествоРаботыПлан,
    СУММА(Работы.КоличествоРаботыФакт) КАК КоличествоРаботыФакт,
    СУММА(Работы.СуммаРаботыПлан) КАК СуммаРаботыПлан,
    СУММА(Работы.СуммаРаботыФакт) КАК СуммаРаботыФакт,
    СУММА(РасходнаяНакладная.СуммаДокумента) КАК Выручка,
    СУММА(МатериалыФакт.СуммаМатериалФакт + Работы.СуммаРаботыФакт) КАК Себестоимость,
    СУММА(РасходнаяНакладная.СуммаДокумента - МатериалыФакт.СуммаМатериалФакт - Работы.СуммаРаботыФакт) КАК Прибыль,
    СУММА(МатериалаПлан.СуммаМетериалПлан - МатериалыФакт.СуммаМатериалФакт) КАК ОтклонениеМатериалы,
    СУММА(Работы.СуммаРаботыПлан - Работы.СуммаРаботыФакт) КАК ОтклонениеРаботы,
    СУММА(Работы.КоличествоРаботыПлан - Работы.КоличествоРаботыФакт) КАК ОтклонениеЧасы
ИЗ
    (ВЫБРАТЬ
        ЗаказНаПроизводствоЗапасы.ЗаказПокупателя КАК ЗаказПокупателя,
        ЗаказНаПроизводствоЗапасы.Ссылка КАК ЗаказНаПроизводство,
        ЗаказНаПроизводствоЗапасы.Номенклатура КАК Номенклатура,
        ЗаказНаПроизводствоЗапасы.Количество КАК КоличествоМатериалПлан,
        ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
        ЗаказНаПроизводствоЗапасы.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаМетериалПлан,
        ЗаказНаПроизводствоЗапасы.ЗаказПокупателя.Ответственный КАК Менеджер
    ИЗ
        Документ.ЗаказНаПроизводство.Запасы КАК ЗаказНаПроизводствоЗапасы
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ВидЦен = &УчетнаяЦена) КАК ЦеныНоменклатурыСрезПоследних
            ПО ЗаказНаПроизводствоЗапасы.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                И ЗаказНаПроизводствоЗапасы.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика) КАК МатериалаПлан
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СборкаЗапасовЗапасы.Ссылка.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
            СборкаЗапасовЗапасы.Ссылка КАК Производство,
            СборкаЗапасовЗапасы.Номенклатура КАК Номенклатура,
            СборкаЗапасовЗапасы.Количество КАК КоличествоМатериалФакт,
            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
            СборкаЗапасовЗапасы.Количество * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаМатериалФакт
        ИЗ
            Документ.СборкаЗапасов.Запасы КАК СборкаЗапасовЗапасы
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ВидЦен = &УчетнаяЦена) КАК ЦеныНоменклатурыСрезПоследних
                ПО СборкаЗапасовЗапасы.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                    И СборкаЗапасовЗапасы.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика) КАК МатериалыФакт
        ПО МатериалаПлан.ЗаказНаПроизводство = МатериалыФакт.ЗаказНаПроизводство
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            СдельныйНарядОперации.Ссылка.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
            СдельныйНарядОперации.Ссылка КАК СдельныйНаряд,
            СдельныйНарядОперации.Номенклатура КАК Работа,
            СдельныйНарядОперации.КоличествоПлан КАК КоличествоРаботыПлан,
            СдельныйНарядОперации.КоличествоФакт КАК КоличествоРаботыФакт,
            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
            СдельныйНарядОперации.КоличествоПлан * ЦеныНоменклатурыСрезПоследних.Цена КАК СуммаРаботыПлан,
            СдельныйНарядОперации.Стоимость КАК СуммаРаботыФакт
        ИЗ
            Документ.СдельныйНаряд.Операции КАК СдельныйНарядОперации
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ВидЦен = &УчетнаяЦена) КАК ЦеныНоменклатурыСрезПоследних
                ПО СдельныйНарядОперации.Операция = ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК Работы
        ПО МатериалаПлан.ЗаказНаПроизводство = Работы.ЗаказНаПроизводство
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
        ПО МатериалаПлан.ЗаказПокупателя = РасходнаяНакладная.Заказ
ГДЕ
    РасходнаяНакладная.Дата <= &ДатаКон
    И РасходнаяНакладная.Дата >= &ДатаНач

СГРУППИРОВАТЬ ПО
    МатериалаПлан.ЗаказНаПроизводство,
    МатериалаПлан.ЗаказПокупателя,
    МатериалаПлан.Менеджер,
    Работы.СдельныйНаряд,
    МатериалыФакт.Производство,
    МатериалаПлан.Цена
10 Волшебник
 
10.10.25
11:24
вместо этого:
ГДЕ
    РасходнаяНакладная.Дата <= &ДатаКон
    И РасходнаяНакладная.Дата >= &ДатаНач


лучше так:
ГДЕ РасходнаяНакладная.Дата МЕЖДУ &ДатаНач И &ДатаКон
11 maxab72
 
10.10.25
11:24
(9) у тебя во вложенной таблице задваивается количество строк запроса, отсюда и косяки. Сперва сгруппируй МатериалыПлан, потом присоедини цены, а потом суммируй.
12 distorter
 
10.10.25
14:11
(10) спасибо!
(11) Помогло, спасибо большое!
13 Адинэснег
 
10.10.25
14:23
(9) ИИ писал?
14 distorter
 
10.10.25
15:08
(13) Помогал
15 Волшебник
 
10.10.25
18:45
(14) Какой был промт?