Имя: Пароль:
1C
 
помогите с запросом
0 dvrk
 
06.04.22
09:56
ВЫБРАТЬ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.КодОракл КАК НоменклатураКодОракл,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура КАК Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара КАК НоменклатураВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента КАК КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент КАК Контрагент
ИЗ
    РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.УсловияПоставокПоДоговорамКонтрагентов.НоменклатураДоговора КАК УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора
        ПО НоменклатураКонтрагентов.Номенклатура = УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура
ГДЕ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.КодОракл,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент

проблема с НоменклатураКонтрагентов.КодНоменклатурыКонтрагента, если не ставлю в отборе нужного контрагента, то он выводит номенклатуру контрагента по всем контрагентам, если ставлю в отбборе нужного контрагента, то он не выводит номенклатуру у которой нет номенклатуры контрагента, подскажите как решить
1 dvrk
 
06.04.22
10:00
левое соединение*
2 hhhh
 
06.04.22
10:05
(1) баян

ПО НоменклатураКонтрагентов.Номенклатура = УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура

И
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка
3 dvrk
 
06.04.22
10:09
и что не так
4 dvrk
 
06.04.22
10:13
(2) это к чему вообще? я реально не понял смысла сообщения
5 Йохохо
 
06.04.22
10:23
"то он не выводит номенклатуру у которой нет номенклатуры контрагента" вероятно от Вас хотели обратное, номенклатуру контрагента у которой нет номенклатуры
6 Kassern
 
06.04.22
10:25
(0) Поймите уже как работают соединения и отборы в запросе. Попробую "на пальцах" объяснить:
Есть Таблица1 соединена левым соединением с Таблицей2 по номенклатуре.
В этом случае для всех строк таблицы1 будут сопоставлены строки таблицы2. (надеюсь это понятно)
Теперь, если мы возьмем и сделаем отбор по таблице2, в этом случае порядок следующий:
Таб1 соединяется с Таб2, а только ПОТОМ отрабатывает отбор и срезает все строки не удовлетворяющие условию.
Если же писать условие с соединении для таблицы2, тогда:
Вначале отработает условие (срежет лишние строки таблицы2) а потом будет соединение с Таб1.
Так же, если дело не с виртуальной таблицей, то отбирают Таблицу2 во временной таблице а потом уже присоединяют ее к основной.

В общем запомните, что отбор отрабатывает ПОСЛЕ соединения
7 Kassern
 
06.04.22
10:27
с виртуальными таблицами еще проще, все можно указать в параметрах виртуальной таблицы, срезав ненужные строки, а потом уже соединять с основной таблицей
8 dvrk
 
06.04.22
10:31
(5) не
9 dvrk
 
06.04.22
10:35
(6) я думаю мой вопрос просто не поняли
10 vicof
 
06.04.22
10:38
(9) Ты плохо думаешь
11 Kassern
 
06.04.22
10:44
(9) главное, чтобы вы поняли, как работает отбор вместе с соединением.
Вот у вас Таб1 это Регистр "НоменклатураКонтрагентов", а таб2 это "Документ.УсловияПоставокПоДоговорамКонтрагентов.НоменклатураДоговора"
с учетом (1) вы соединяете ТЧ документа к регистру левым соединением.
Читаем еще раз внимательно (6) и понимаем, что используя ОТБОР в Таблице2, вы срежете все строки таблицы1 не удовлетворяющие условию.
У вас по факту, для каждой строчки регистра будет соединена строчка из ТЧ, далее уже эта таблица режется отбором вашим. Поэтому у вас "проблема с НоменклатураКонтрагентов.КодНоменклатурыКонтрагента"
12 hhhh
 
06.04.22
10:50
(9) просто сделай как в (2) и у тебя ысё получится.
13 Kassern
 
06.04.22
10:52
(12) это как раз то, что я ему пытался объяснить, как работает соединения и отборы...Можно и во временной таблице ТЧ номенклатуры порезать как надо, а потом уже ее цеплять к регистру сведений, если не хочется в соединении доп условия писать
14 Kassern
 
06.04.22
10:53
(13) *ТЧ документа
15 dvrk
 
06.04.22
10:57
(13) (12) (11) ну, всё равно выдаёт только ту номенклатуру, которая есть в регистре Номенклатура контрагентов
16 Kassern
 
06.04.22
11:01
(15) конечно, потому что у вас Регистр является основной таблицей. Вот как работает левое соединение ТАб1 и Таб2
Таб1:
Номенклатура,Цвет,Количество
Ложка, Белая, 1шт
Таб2:
Номенклатура,Цена
Вилка, 100
Ложка, 50
Итоговая таблица после левого соединения к Таб1 по номенклатуре:
Ложка, белая 1шт, 50
//вилка срезалась, так как в таб1 ее и не было.
17 Kassern
 
06.04.22
11:01
Почитайте внимательно про соединения таблиц, вот к примеру: https://helpme1s.ru/yazyk-zaprosov-1s-8-3-dlya-nachinayushhix-programmistov-soedineniya
18 dvrk
 
06.04.22
11:02
(16) я сделал таб1 - тч
19 Kassern
 
06.04.22
11:03
(18) покажите как сделали, скиньте текст запроса с отбором
20 Kassern
 
06.04.22
11:07
так же имейте в виду, при левом соединении могут быть поля со значением NULL (поле из Таб2, по которому не нашлось найти соответствие по условиям соединения)
21 dvrk
 
06.04.22
11:09
(19)
ВЫБРАТЬ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура КАК Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара КАК НоменклатураВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента КАК КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент КАК Контрагент
ИЗ
    Документ.УсловияПоставокПоДоговорамКонтрагентов.НоменклатураДоговора КАК УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО (НоменклатураКонтрагентов.Номенклатура = УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура)
            И (УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка)
22 Kassern
 
06.04.22
11:10
вот тут от 1с про соединения таблиц https://its.1c.ru/db/metod8dev/content/2591/hdoc
23 Kassern
 
06.04.22
11:11
(21) а где же? Или вы не весь запрос скинули?
ГДЕ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка
24 Kassern
 
06.04.22
11:11
или вы по всем документам делаете?)
25 dvrk
 
06.04.22
11:12
(24) ВЫБРАТЬ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.КодОракл КАК НоменклатураКодОракл,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура КАК Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара КАК НоменклатураВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента КАК КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент КАК Контрагент
ИЗ
    Документ.УсловияПоставокПоДоговорамКонтрагентов.НоменклатураДоговора КАК УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО (НоменклатураКонтрагентов.Номенклатура = УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура)
            И (УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка)
ГДЕ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка
    
СГРУППИРОВАТЬ ПО
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.КодОракл,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент
26 Kassern
 
06.04.22
11:14
(25) А это что такое??
И (УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка)
а потом такой бац:
ГДЕ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка
))
27 Kassern
 
06.04.22
11:15
где у вас условие по контрагенту?
28 dvrk
 
06.04.22
11:16
(27) я хз как условие по контрагенту сделать, если учитывать, что мне нужен контрагент из шапки документа и пустые
29 dvrk
 
06.04.22
11:18
ну т.е. строки ТЧ, где номенклатура контрагента пусто
30 Kassern
 
06.04.22
11:18
для Таб1, нет смысла писать условие в соединении, так как это основная таблица при левом соединении. Достаточно условие прописать в Отборе. Когда речь идет, про срез Таб2 предварительный перед соедениением, тогда уже отбор не канает, так как срежет и строчки нужные из Таб1
31 Kassern
 
06.04.22
11:19
(28) вам нужен контрагент для регистра сведений из шапки документа?
32 Kassern
 
06.04.22
11:20
если да, то все очень просто:
Там где у вас соединение вместо корявого дубля "УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка" пропишите ваш РегСведений.Контрагент=&Контрагент
33 Kassern
 
06.04.22
11:21
предчувствуя следующий вопрос про "РегСведений.Контрагент")

НоменклатураКонтрагентов.Контрагент=&Контрагент
34 dvrk
 
06.04.22
11:22
(32) да, так изначально и сделал, но проблема в том, что строки, для которых в этом РСе записей нет он обрезал
35 Kassern
 
06.04.22
11:23
(34) потому что у вас основной таблицей был РС судя по (0)
36 Kassern
 
06.04.22
11:24
вы брали РС, резали его отборами по ТЧ выбранного документа, конечно у вас пустых строк не будет
37 vicof
 
06.04.22
11:25
(35) у тебя хорошая стабильная нервная система)
38 Kassern
 
06.04.22
11:26
(34) вы понимаете разницу в написании НоменклатураКонтрагентов.Контрагент=&Контрагент в соединении и в отборе? В первом случае срежутся строки правой таблицы перед соединением, во втором случае срежутся все строки объединенной таблицы
39 Kassern
 
06.04.22
11:26
(37) тренирую здесь)
40 Kassern
 
06.04.22
11:27
после пары таких топиков, бухи в отчетный период кажутся милыми юзверами)
41 dvrk
 
06.04.22
11:30
(38) видимо не понимаю, потому что теперь он вывел номенклатуру, которой в документе нет
42 dvrk
 
06.04.22
11:33
(40) если я пишу НоменклатураКонтрагентов.Контрагент = &Контрагент в "Условии", то он ТОЛЬКО контрагента из параметра выдаёт, без пустых строк, если пишу в "Связи" то он все пустые номенклатуры даёт и те которые в параметре есть, но все пустые не из документа, а из всего справочника видимо
43 Kassern
 
06.04.22
11:34
еще раз запрос скиньте весь с условием в соединении ко контрагенту
44 dvrk
 
06.04.22
11:35
(43) ВЫБРАТЬ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.КодОракл КАК НоменклатураКодОракл,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура КАК Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам КАК НоменклатураВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара КАК НоменклатураВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента КАК КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент КАК Контрагент
ИЗ
    Документ.УсловияПоставокПоДоговорамКонтрагентов.НоменклатураДоговора КАК УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураКонтрагентов КАК НоменклатураКонтрагентов
        ПО (НоменклатураКонтрагентов.Номенклатура = УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура)
            И (НоменклатураКонтрагентов.Контрагент = &Контрагент)
ГДЕ
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.КодОракл,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВестиУчетПоХарактеристикам,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.ЕдиницаИзмерения,
    УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Номенклатура.ВидТовара,
    НоменклатураКонтрагентов.КодНоменклатурыКонтрагента,
    НоменклатураКонтрагентов.Контрагент
45 Kassern
 
06.04.22
11:38
(44) Вот, теперь вы для каждой строчки ТЧ документа &Ссылка присоединяете строки РС, у которых номенклатура совпадает и контрагент=&Контрагент. Кстати если у вас в шапке указан контрагент, то смысл вообще в параметре? Можно же проще УсловияПоставокПоДоговорамКонтрагентовНоменклатураДоговора.Ссылка.Контрагент=НоменклатураКонтрагентов.Контрагент
46 Kassern
 
06.04.22
11:39
я правильно понимаю, у вас задублились строчки ТЧ в результате такого запроса?
47 dvrk
 
06.04.22
11:43
(46) сейчас точно проверю
48 Kassern
 
06.04.22
11:45
попробуйте на досуге создать базу пустышку с вашей конфой и заведите небольшое количество строчек в нужных документах/регистрах. А дальше уже через консоль запросов любайтесь с данными, пока не разберетесь как это работает. Лучше в купе с книжкой/статьей про запросы. На нескольких строчках гораздо легче разобраться как повела себя 1с при соединениях и отборах в запросе
49 dvrk
 
06.04.22
11:47
(48) я ещё не дошел до запросов, задание просто срочно надо было сделать, но вообще весь косяк из-за того, что я изначально сделал 1ой таблицей РС, а точнее от незнания как это всё и на что влияет, спасибо большое, не знаю повлияло ли это как то, но почистив кэш, (44) это нормально отработало, а до очистки выдало 1800 строк(хотя в доке столько нет)
50 Kassern
 
06.04.22
11:48
(49) пора уже доходить, это основной инструмент для работы с данными базы
51 dvrk
 
06.04.22
11:51
(50) не лень время было тратить, учитывая, что я всё равно мало что понял?
52 dvrk
 
06.04.22
11:52
ну точнее я понял+-, но сначала не понял ничего
53 Kassern
 
06.04.22
11:55
(51) ну а смысл этого форума как раз в этом и состоит. Задавать вопросы по 1с и помогать, если знаешь сам. Может кому-то потом это пригодиться, можно будет ссылку на эту ветку скинуть.
54 dvrk
 
06.04.22
12:17
(53) а я думал смысл форума тролить очень смешно и тонко по мнению тролера и не помогать
55 dvrk
 
06.04.22
12:17
(53) спасибо огромное
56 d_monah
 
06.04.22
12:34
(54) Думать надо меньше,делать больше.Или не думать ,а трясти)
57 dvrk
 
06.04.22
13:14
(56) вово, примерно так я себе и представлял ответы на форуме
58 d_monah
 
06.04.22
13:18
(57) Я не мог тебя разочароввть.
59 dvrk
 
06.04.22
13:21
(58) нравится издеваться над маленькими да?