Имя: Пароль:
1C
1С v8
Дублирование записей в регистре накопления
,
0 AyyLmeow
 
05.09.22
17:34
На подобные темы я натыкался ранее, но не нашел для себя решения.
При проведении документа, который содержит в себе похожие измерения 1 в 1 (Номенклатура, Партия, Комиссионер) на те что имеются у уже проведенного документа, начинают дублироваться записи в регистр накопления, где количество дубликатов равно пропорционально количеству ранее похожих проведенных документов + сама запись документа, проблема кроется в том что я соединяю более двух таблиц как-то неправильно, но я не могу понять как сделать это правильно, сам запрос прилагаю:
ВЫБРАТЬ
    РасходнаяНакладнаяСписокНоменклатуры.Комиссионер,
    РасходнаяНакладнаяСписокНоменклатуры.Комиссионер.Представление,
    РасходнаяНакладнаяСписокНоменклатуры.Партия,
    РасходнаяНакладнаяСписокНоменклатуры.Партия.Представление,
    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Представление,
    РасходнаяНакладнаяСписокНоменклатуры.Количество,
    РасходнаяНакладнаяСписокНоменклатуры.Цена,
    РасходнаяНакладнаяСписокНоменклатуры.Сумма,
    РасходнаяНакладнаяСписокНоменклатуры.ПроцентВознаграждения
ПОМЕСТИТЬ втТЧТовары
ИЗ
    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
ГДЕ
    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    &Период,
    ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    втТЧТовары.Комиссионер,
    втТЧТовары.КомиссионерПредставление,
    втТЧТовары.Партия,
    втТЧТовары.ПартияПредставление,
    втТЧТовары.Номенклатура,
    втТЧТовары.НоменклатураПредставление,
    втТЧТовары.Количество,
    втТЧТовары.Цена,
    втТЧТовары.Сумма,
    втТЧТовары.ПроцентВознаграждения,
    ОстаткиНоменклатуры.Цена КАК ЦенаОстаток,
    ОстаткиНоменклатуры.ПроцентВознаграждения КАК ПроцентВознагражденияОстаток,
    ОстаткиНоменклатуры.Сумма КАК СуммаОстаток
ИЗ
    втТЧТовары КАК втТЧТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
            ПО ОстаткиНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
                И ОстаткиНоменклатуры.Партия = ОстаткиНоменклатурыОстатки.Партия
                И ОстаткиНоменклатуры.Комиссионер = ОстаткиНоменклатурыОстатки.Комиссионер
        ПО втТЧТовары.Комиссионер = ОстаткиНоменклатуры.Комиссионер
            И втТЧТовары.Партия = ОстаткиНоменклатуры.Партия
            И втТЧТовары.Номенклатура = ОстаткиНоменклатуры.Номенклатура
1 ejikbeznojek
 
05.09.22
17:37
А на какую дату остатки? что-то я не вижу отбора по дате
2 alarm2020
 
05.09.22
17:38
(0) РегистрНакопления.ОстаткиНоменклатуры - это не остатки, а движения регистра
3 ejikbeznojek
 
05.09.22
17:41
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки

Из 2х соединений нужно оставить одно. Если нужны остатки, то 2е.
4 AyyLmeow
 
05.09.22
20:12
(2) Движения регистра я использую для контроля цены и процент, чтобы не проводилось при цене и проценте ниже того что было в приходной накладной
5 Dmitrii
 
гуру
06.09.22
00:31
(4) И что в таком случае тебя не устраивает?
Допустим в регистре есть записи.
Приход Партия1, Комиссионер1, Номенклатура1 Цена1 количество 10
Приход Партия1, Комиссионер1, Номенклатура1 Цена2 количество 10
Расход Партия1, Комиссионер1, Номенклатура1 Цена2 количество 3
Расход Партия1, Комиссионер1, Номенклатура1 Цена2 количество 2
Расход Партия1, Комиссионер1, Номенклатура1 Цена1 количество 1
Расход Партия1, Комиссионер1, Номенклатура1 Цена1 количество 1

Если в втТЧТовары есть строка с полями Партия1, Комиссионер1, Номенклатура1, то по условию соединения ей соответствует сразу шесть записей из таблицы регистра.
Соответственно будет не удвоение (дублирование), а ушестирение (тройное дублирование) твоих записей.

>> Движения регистра я использую для контроля цены и процент, чтобы не проводилось при цене и проценте ниже того что было в приходной накладной.

Подумай над тем, чтобы делать этот контроль отдельно от проведения.

А по сути вопроса есть разные варианты. И зависят они от конкретных нюансов. Например, могут ли быть по одной комбинации партия+номенклатура+комиссионер разные цены. Или может ли быть несколько записей прихода с одной комбинацией партия+номенклатура+комиссионер.
И вообще Цена в регистре - это измерение или реквизит.
Но в любом случае такая связь с первичной таблицей регистра, как в (0), точно не прокатит.
6 AyyLmeow
 
06.09.22
13:36
(5) говоря об нюансах, на первый случай сделана группировка, где в пределах данной комбинации, записывается средняя цена. А во втором случае, в приходной выбирается один комиссионер.
С помещением цены и процента в измерения такова проблема, что мне возвращаются NULL, хотя по приходной накладной записи движений проходят нормально, ЕСТЬNULL не сильно облегчает мне задачу по понятным причинам
Независимо от того, куда вы едете — это в гору и против ветра!