Имя: Пароль:
1C
1С v8
v8: Прошу помощи в написании запроса
0 qubasesx
 
19.07.13
12:38
Задача. Есть Регистр1 и Регистр2. Они содержат записи, у которых есть одинаковый реквизит "Номер". В Регистре1 записей на 10 больше, чем в Регистре2. Нужно, чтобы запрос отобрал из этих 10 записей Регистра1, которые отсутствуют в Регистре2, те, которые соответствуют параметру "Наименование"

Вот мой вариант запроса. В нём я пытаюсь сделать, чтобы неотображались те записи:
- у которых одинаковое значение поля "Номер"
- и те, что не соответствуют параметру "Наименование"

|ВЫБРАТЬ
|    Регистр1.Номенклатура,
|    Регистр1.РегистрационныйНомер,
|ИЗ
|   РегистрНакопления.Регистр1 КАК Регистр1          
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
|ПО (Регистр2.РегистрационныйНомер <> Регистр1.РегистрационныйНомер)
|ГДЕ          
|   Регистр1.Номенклатура = &Наименование          

В результате выполнения запроса отбираются только записи, соответствующие параметру "Наименование", но в большом количестве один экземпляр. И отбираются из всего списка, а не из тех записей, которые отсутствуют в Регистре2.

В чём ошибки?
1 Zerg80
 
19.07.13
12:41
(0) "В чём ошибки?" - во многом :)
Сделай вот так:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
|ПО (Регистр2.РегистрационныйНомер = Регистр1.РегистрационныйНомер)
|ГДЕ          
|   Регистр2.РегистрационныйНомер ЕСТЬ NULL
2 qubasesx
 
19.07.13
12:42
(1) ща попробую
3 qubasesx
 
19.07.13
12:46
нет, не то. Да и в регистрах нет пустых полей.
4 Тролль главный
 
19.07.13
12:47
(3) именно то, ты нам врешь, показывай как "исправил"
5 qubasesx
 
19.07.13
12:51
|ВЫБРАТЬ
|    Регистр1.Номенклатура,
|    Регистр1.РегистрационныйНомер,
|ИЗ
|   РегистрНакопления.Регистр1 КАК Регистр1          
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Регистр2 КАК Регистр2
|ПО (Регистр2.РегистрационныйНомер <> Регистр1.РегистрационныйНомер)
|ГДЕ          
|   Регистр1.Номенклатура = &Наименование
|   И Регистр2.РегистрационныйНомер ЕСТЬ NULL
6 Ненавижу 1С
 
гуру
19.07.13
12:52
(5) ты идиот? посмотри внимательно на (1) там
ПО (Регистр2.РегистрационныйНомер = Регистр1.РегистрационныйНомер)
7 Zerg80
 
19.07.13
12:52
(5) <> на = в условии связи то поменяй
8 Zerg80
 
19.07.13
12:53
(6) Спокойнее, коллега :) Пятница все же
9 Жан Пердежон
 
19.07.13
12:55
(6) а значит этот фрагмент кода тебя устраивает?)

Регистр1.Номенклатура = &Наименование
10 qubasesx
 
19.07.13
12:56
(9) без него никуда
11 qubasesx
 
19.07.13
12:56
поменял <> на =  и заработало, всем спасибо!
12 EvgeniuXP
 
19.07.13
12:57
(10) номенклатура и наименование типы разные!
13 qubasesx
 
19.07.13
12:57
(6) полегче на поворотах, пожалуйста
14 EvgeniuXP
 
19.07.13
12:57
ссылку со строкой сравниваешь - что будет?
15 Ненавижу 1С
 
гуру
19.07.13
12:58
(9) назвать может как хошь, мож там ссылка
(13) радуйся, что советы даю
16 qubasesx
 
19.07.13
12:58
(13) почему со строкой? в регистре ссылка и в &Наименование я передаю тоже ссылку
17 Zerg80
 
19.07.13
12:58
(14) Судя по тому, что в (0) написано "В результате выполнения запроса отбираются только записи, соответствующие параметру "Наименование" - то тут с условием все ОК
18 EvgeniuXP
 
19.07.13
12:59
(16) и кто так пишет код? пиши вместо наименование ВыбНоменклатура или еще как. Наименование обычно строка.
19 Жан Пердежон
 
19.07.13
12:59
(16) так переменные называют только судаки
20 andreymongol82
 
19.07.13
12:59
(16) Ааа! Так вот про что твоя предыдущая тема была!
21 Zerg80
 
19.07.13
13:00
(18) Ну это да, попахивает слегка
22 qubasesx
 
19.07.13
13:00
(20) :)
23 qubasesx
 
19.07.13
13:01
(19) судаки это те кто не понимают, что для того, чтобы разместить код на форуме, переменные можно и переименовать, чтобы коротелькими стали
24 EvgeniuXP
 
19.07.13
13:04
(23) ой, не надо а? Ты через 5 лет будешь потом свой код через отладчик смотреть и анализ делать какой тип? или хочешь быстро прочитать код и понять, что он делает предварительно приняв элементарный код оформления. Сам же потом запутаешься и других запутаешь своей неаккуратностью.
25 Жан Пердежон
 
19.07.13
13:05
(23) себе хоть не ври
26 EvgeniuXP
 
19.07.13
13:08
(23) критику надо принимать как должное, а не огрызаться :)
27 qubasesx
 
19.07.13
13:10
(25)я даже тебе ещё ни разу не соврал, а уж себе-то тем более
28 qubasesx
 
19.07.13
13:11
(26) согласен, но хамство сплош, а не критика
29 qubasesx
 
19.07.13
13:12
(24) пожалуй соглашусь :)
30 Жан Пердежон
 
19.07.13
13:13
(27) то есть перед копипастой на форум ты меня названия переменных?? ну-ну
31 Жан Пердежон
 
19.07.13
13:13
*меняешь
32 qubasesx
 
19.07.13
13:16
(30) для особо одарённых: не ПЕРЕД, а после
33 Жан Пердежон
 
19.07.13
13:18
(32) особо одаренные уже в (23) отписались
34 EvgeniuXP
 
19.07.13
13:18
(32) это как, извольте?
35 EvgeniuXP
 
19.07.13
13:18
пятница - тоже торможу
36 EvgeniuXP
 
19.07.13
13:21
одаренный человек, кстати, у него уже есть конструктор под веб-форму мисты :) запросы прямо в вебе пишет :)
37 qubasesx
 
19.07.13
13:21
(33) да нет, они в 30 продолжали задавать вопросы, в 33 выпендриваться
38 qubasesx
 
19.07.13
13:22
(36) извини за глупый вопрос, но зачем нужна строчка РезервыКоробок.РегистрационныйНомер ЕСТЬ NULL, она же ничего в условие не добавляет по сути?
39 EvgeniuXP
 
19.07.13
13:24
(38) чтобы отобрать пустые регистрационные номера, написано в условии ГДЕ
40 Zerg80
 
19.07.13
13:25
(38) Потому что в (0) написано, что "чтобы запрос отобрал из этих 10 записей Регистра1, которые отсутствуют в Регистре2"
41 EvgeniuXP
 
19.07.13
13:25
убери эту строчку увидишь много записей, добавь эту строчку - наложится фильтр, посмотри в результате, что сейчас в РегистрационномНомере находится.
42 qubasesx
 
19.07.13
13:25
(39) ну это я понял. но пустых нет, а без строчки не работает
43 Zerg80
 
19.07.13
13:26
(38) Ты же знаешь, как лефт джоин работает, да??
44 andreymongol82
 
19.07.13
13:26
(42) Как это нет? Там же соединение левое двух таблиц. если таблицы не равны - обязательно будут пустые
45 EvgeniuXP
 
19.07.13
13:28
(42) потому что из регистра 1 берешь регистрационный номер, возьми из регистра 2 :)
46 EvgeniuXP
 
19.07.13
13:28
|ВЫБРАТЬ
|    Регистр1.Номенклатура,
|    Регистр2.РегистрационныйНомер,
47 qubasesx
 
19.07.13
13:28
(44) имеется в виду не пустой реквизит, а пустые места, где должны быть строчки, которых нет? :)
48 qubasesx
 
19.07.13
13:29
(43) да, когда я работал с лефтжойном на делфи, таких проблем не было, там было всё логично
49 Жан Пердежон
 
19.07.13
13:29
(43) сейчас скажет, что ты тоже выпендриваешься)))
50 Жан Пердежон
 
19.07.13
13:30
(48) лефтджоин в делфи - это совсем другое дело!
51 andreymongol82
 
19.07.13
13:30
(48) Чем левое соединение в 1С принципиально отличается от в дельфи, если там все так логично было?
52 qubasesx
 
19.07.13
13:31
(49) не скажет (50) согласен
53 EvgeniuXP
 
19.07.13
13:32
ВЫБРАТЬ
|    Регистр1.Номенклатура,
|    Регистр1.РегистрационныйНомер КАК РегистрационныйНоме1,
|    Регистр2.РегистрационныйНомер КАК РегистрационныйНоме2,

увидел?
54 qubasesx
 
19.07.13
13:33
(51) принципиально ничем, но там не было этой строки, если задуматься, то она не нужна. хотя может я уже просто уже туплю, пятница концы концов
55 qubasesx
 
19.07.13
13:37
(53) нет, смотрю на запрос и не врубаюсь
56 qubasesx
 
19.07.13
13:37
ладно, всем Спасибо! тема закрыта
57 andreymongol82
 
19.07.13
13:37
(54) Принципиальное отличие, что в нету в дельфи left join. Он есть в SQL. (Я не выпендриваюсь нет?)
58 andreymongol82
 
19.07.13
13:38
(55) Надо на выборку посмотреть и что в ней есть
59 Zerg80
 
19.07.13
13:39
(54) Конечно она в выборке не нужна, NULL же там. И вообще мне кажется, что 50+ постов в топике, где проблема была в 2 (двух) строках в запросе - это как-то неспортивно :)
60 qubasesx
 
19.07.13
13:42
я предлагал (56)
61 Жан Пердежон
 
19.07.13
13:42
(59) пятница же
62 EvgeniuXP
 
19.07.13
13:42
введи значения, чтобы  РегистрационныйНомер1 не равнялся   РегистрационныйНомер2 по одной номенклатуре - т.е. два поля должны быть заполнены - тогда и увидишь разницу.
63 EvgeniuXP
 
19.07.13
13:43
у тебя похоже таких записей нет - вот и результат один и тот же :)
64 Ненавижу 1С
 
гуру
19.07.13
13:55
в делфи нет неопределено и пустых ссылок, но есть nil
65 hhhh
 
19.07.13
14:00
(64) слабаки
66 andreymongol82
 
19.07.13
14:00
(64) А в запросах 1С есть NULL. И в SQL есть NULL. А nil - примерно соответствует "неопределено". Не надо тут путать паскаль и SQL. В данном случае на SQL запрос выглядел бы очень похожем на запрос в 1С, тока по английски.
И ссылки в 1С и дельфи имеют несколько разную природу.
67 andreymongol82
 
19.07.13
14:02
(66) эээээ, блин, это автору темы. Прошу пардону.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.