Имя: Пароль:
1C
1С v8
Лишние записи результата запроса
0 komstr
 
01.02.23
16:59
Добрый день. Создал запрос. По документу отобралось 8 строк согласно количеству номенклатуры в документе. Так же делал отбор по регистру бухгалтерии, в движения так же 8 строк. Как только соединяю с документом, результат 10 строк. И не пойму, что необходимо поправить. Думал Субконто1 составного типа, пробовал выразить и всёравно не помогает. Буду признателен если наведёте на мысль, что не так.
ВЫБРАТЬ
            |    Док.Номенклатура КАК Номенклатура,
            |    Док.НомерКонтейнера КАК НомерКонтейнера,
            |    Док.Количество КАК КоличествоДок,
            |    Док.Ссылка КАК Ссылка
            |ПОМЕСТИТЬ ВтДанныеТЧ
            |ИЗ
            |    Документ.ПоступлениеТоваровУслуг.Товары КАК Док
            |ГДЕ
            |    Док.Ссылка = &Ссылка
            |
            |ИНДЕКСИРОВАТЬ ПО
            |    Номенклатура
            |;
            |
            |////////////////////////////////////////////////////////////////////////////////
            |ВЫБРАТЬ
            |    ХозрасчетныйОбороты.Регистратор КАК Регистратор,
            |    ВтДанныеТЧ.Номенклатура КАК Номенклатура,
            |    ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
            |    ВтДанныеТЧ.НомерКонтейнера КАК НомерКонтейнера,
            |    ХозрасчетныйОбороты.КоличествоОборотДт КАК КоличествоОборотДт,
            |    ВтДанныеТЧ.КоличествоДок КАК КоличествоДок,
            |    ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборот
            |ИЗ
            |    ВтДанныеТЧ КАК ВтДанныеТЧ
            |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(
            |                ,
            |                ,
            |                Запись,
            |                Счет = &Счет4101
            |                    ИЛИ Счет = &Счет4106,
            |                ,
            |                Субконто1 В
            |                    (ВЫБРАТЬ
            |                        ВтДанныеТЧ.Номенклатура КАК Номенклатура
            |                    ИЗ
            |                        ВтДанныеТЧ КАК ВтДанныеТЧ),
            |                ,
            |                ) КАК ХозрасчетныйОбороты
            |        ПО ВтДанныеТЧ.Номенклатура = ХозрасчетныйОбороты.Субконто1
            |            И ВтДанныеТЧ.КоличествоДок = ХозрасчетныйОбороты.КоличествоОборот
            |ГДЕ
            |    ХозрасчетныйОбороты.Регистратор = &Ссылка
1 Волшебник
 
модератор
01.02.23
17:01
надо убрать ЛЕВОЕ СОЕДИНЕНИЕ
2 komstr
 
01.02.23
17:04
(1) А какая же связь с документом будет?
3 Kassern
 
01.02.23
17:04
(0) Если при левом соединении у вас увеличилось количество строк (стало больше чем в левой таблице), значит у вас при связи таблиц для каких-то строк левой таблицы соответствует множество строк в правой (а не 1к1).
4 Dmitrii
 
гуру
01.02.23
17:09
(0) >> что не так.

Всё.
В чём суть запроса? Чего получить хотите?

10 записей - это мало. В результате могло бы  быть и 1 млн записей. Если, например, по номенклатуре, которая есть в табличной части Товары, в регистре бухгалтерии был бы миллион записей по счетам &Счет4101 ИЛИ &Счет4106 с аналогичным количеством.
5 komstr
 
01.02.23
17:11
(3) делал отдельные запросы: запрос к документу 8 строк в Вт, запрос к регистру 8 строк в Вт, соединяю 10 строк. Наименования номенклатуры идентичны. Хочу получить всё те же 8 строк. Не соображу откуда лишние берутся. И как пересоединить правильно
6 mikecool
 
01.02.23
17:11
(0) стандарты разработки - если справа в соединении есть виртуальная таблица, то следует предварительно выбрать ее результат во врем таблицу, а затем уже использовать времянку в соединении
7 komstr
 
01.02.23
17:14
(6) В том то и дело. первое, что подумал и переписал. Но всёравно две лишние строки появляются.
ВЫБРАТЬ
    Док.Номенклатура КАК Номенклатура,
    Док.НомерКонтейнера КАК НомерКонтейнера,
    Док.Количество КАК КоличествоДок,
    Док.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВтДанныеТЧ
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК Док
ГДЕ
    Док.Ссылка = &Ссылка

ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(ХозрасчетныйОбороты.Субконто1 КАК Справочник.Номенклатура) КАК НоменклатураХоз,
    ХозрасчетныйОбороты.Регистратор КАК Регистратор,
    ХозрасчетныйОбороты.СуммаОборот КАК СуммаОборот,
    ХозрасчетныйОбороты.КоличествоОборот КАК КоличествоОборот
ПОМЕСТИТЬ ВтХозрасчетный
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(, , Запись, Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты
ГДЕ
    ХозрасчетныйОбороты.Регистратор КАК Документ.ПоступлениеТоваровУслуг = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВтХозрасчетный.НоменклатураХоз КАК НоменклатураХоз
ИЗ
    ВтХозрасчетный КАК ВтХозрасчетный
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтДанныеТЧ КАК ВтДанныеТЧ
        ПО ВтХозрасчетный.НоменклатураХоз = ВтДанныеТЧ.Номенклатура
            И ВтХозрасчетный.КоличествоОборот = ВтДанныеТЧ.КоличествоДок
8 Dmitrii
 
гуру
01.02.23
17:14
(5) >> запрос к документу 8 строк в Вт, запрос к регистру 8 строк в Вт.

Просто повезло.
Посмотри внимательно - что у тебя в этих строках. Наверняка в ВТ из регистра бухгалтерии есть строки с повторяющейся несколько раз номенклатурой.
9 Dmitrii
 
гуру
01.02.23
17:15
(7) Зачем вообще делать запрос к виртуальной таблице Обороты регистра бухгалтерии, если детализация "Запись"? В чём смысл?
10 Dmitrii
 
гуру
01.02.23
17:19
Дано.
ТЧ Товары.
Товар1 10шт.
Товар2 10шт.
Товар3 10шт.

Записи регистра бухгалтерии.
Дт 41.01 Товар1 10шт.
Кт 41.01 Товар1 10шт.
Дт 41.01 Товар1 10шт.
Кт 41.01 Товар1 10шт.
Дт 41.01 Товар1 10шт.

Результат твоего запроса будет

Товар1 10шт.
Товар1 10шт.
Товар1 10шт.
Товар1 10шт.
Товар1 10шт.
Товар2 10шт.
Товар3 10шт.
11 Kassern
 
01.02.23
17:20
(10) о чем я и написал в (3) но ТС упорно не хочет понять)
12 Dmitrii
 
гуру
01.02.23
17:23
(11) Тут без наглядных примеров (3) бесполезно (
13 Dmitrii
 
гуру
01.02.23
17:26
(7) Ты словами объясни - чего добиться хочешь? Какова суть запроса и какого результата ты ждешь?
14 komstr
 
01.02.23
17:32
(13) Суть такова в документе есть как видно из запроса поле номер контейнера
Необходимо взять номенклатуру, номер контейнера, количество оборот и сумму оборот из регистра бухгалтерии и потом провести с этим доп действия.
А то что вы пишите выше, да имеет место быть
докмент
Товар 1 10 шт цена 10уе
ТОвар 2 10 шт цена 3уе
Товар 1 10 шт цена 5уе
цена из док не интересует так как в другой валюте
Регистр
Товар 1 10 шт сумма 100 руб
ТОвар 2 10 шт сумма 30 руб
Товар 1 10 шт сумма 55 руб
что соответствует документу, но при соединении как вы пишите не могу понять, но готов))
15 hockeyist
 
01.02.23
17:35
(1) Оно у него и так внутреннее
16 hockeyist
 
01.02.23
17:35
(3) А слово "левое" в вашем сообщении зачем?
17 bolobol
 
01.02.23
17:37
(14) Ну так Товар1 и 10 шт - дважды в таблицах, в результате будет 2*2+1 = 5 записей
18 Kassern
 
01.02.23
17:38
(14) Сделайте так, чтобы у вас в правой таблице товар не повторялся (привет группировка) и будет вам счастье.
19 eddy_n
 
01.02.23
17:43
У тебя соединение по Количеству - отсуда вся беда
20 komstr
 
01.02.23
17:45
(12) ну собственно вот что пытаюсь соединить: https://wampi.ru/image/RPv4iL7
21 komstr
 
01.02.23
17:46
(18) Там суммы номенклатуры нужны, а по суммам не могу соединить так как в док уе, на регистре руб
22 komstr
 
01.02.23
17:51
(18) Номенклатура повторяется как в поступлении и так же в проводках. Правая таблица это регистр хотя и как левую я тоже пробовал. и внутренне соединение я пробовал.
23 shuhard
 
01.02.23
17:52
(22) попробуй внешнее, чё уж там
24 komstr
 
01.02.23
17:55
(23) В смысле верёвочкой связать? Одни провода вокруг, ни одной ниточки))
25 eddy_n
 
01.02.23
17:55
Выбери после получения Различные или Сгруппируй, используя Количество, если таким путём пошёл.
26 komstr
 
01.02.23
17:59
(25) Различные в данном частном случае конечно сработают. Но сейчас не могу смоделировать ситуацию, как бухгалтера в следующий раз приход сделают. сгруппировать думал, но не регистре 8 записей и соответственно 8 записей на регистр (другой) я и должен сделать.
27 komstr
 
01.02.23
18:00
(25) суммы разные и должны двигаться строго по суммам и количеству.
28 eddy_n
 
01.02.23
18:17
Конечно, соединение напрямую с Бухгалтерским регистром - то ещё зло. Зверь, потяжелее обычных РН. Лучше так не делать.
29 eddy_n
 
01.02.23
18:20
Выбери Различные из Регистра Бухгалтерии, помести во ВТ, а потом уже Соединяй.
30 eddy_n
 
01.02.23
18:22
Сейчас конечно сработает, потому что цены разные, потом ещё что-нибудь прикрути. Как-то так.
31 Волшебник
 
модератор
01.02.23
19:26
(28) Да ещё регистр справа... Тут за СрезПоследних справа руки отрывают, а уж за регистр бухгалтерии четвертуют
Закон Брукера: Даже маленькая практика стоит большой теории.