|
Как сделать условие в запросе... | ☑ | ||
|---|---|---|---|---|
|
0
WED
21.05.08
✎
13:18
|
В запросе контрагент получается таким образом:
ВЫБРАТЬ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЗаказИзделия.Ссылка.Контрагент ИНАЧЕ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент ТОГДА ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КОНЕЦ КОНЕЦ КАК Контрагент, Контрагент, в итоге, либо ссылка на справочник либо просто строка Мне надо написать в запросе условие подобное ГДЕ ЗаказИзделия.Ссылка.Контрагент = &Контрагент но для обоих случаев (ссылка и строка) как? |
|||
|
1
vladnet
21.05.08
✎
13:19
|
не парься сделай вложенный запрос и там сделай нужное тебе условие уже на простое поле
|
|||
|
2
WED
21.05.08
✎
13:21
|
Маленькое уточнение:
Логика документов такова: Если Документ ЗаказИзделия.Ссылка создан НЕ на основании Документа ЗамерУстановка, то контрагент однозначно - ссылка, иначе контрагент берется из ЗамерУстановка и при этом он может быть как ссылкой, так и просто строкой. |
|||
|
3
WED
21.05.08
✎
13:21
|
(1) а что вложенный запрос должен выдавать и как его соединить с основным запросом?
|
|||
|
4
vladnet
21.05.08
✎
13:23
|
Выбрать
... ... ИЗ ( Выбрать ... тут твой запрос КАК ... ) Как Таблица ГДЕ Таблица.Контрагент=&sd или Таблица.Контрагент=&sd2 |
|||
|
5
WED
21.05.08
✎
13:27
|
(4) я не очень силен в запросах..
можно подробней? Допустим есть запрос ,который выдает перечень документов ЗаказИзделия и контрагентов в них. При этом если ЗаказИзделия выпсан на основании ЗамерУстановка, то контрагент берется из ЗамерУстановка. Теперь надо отфильтровать все ЗаказИзделия на определнного контрагента... Можешь что-то подобное привести сюда? Я сам запрос осилил, а вот как условие к нему прикрутить не знаю :( |
|||
|
6
vladnet
21.05.08
✎
13:30
|
(5) нужно просто обернуть его другим запросом, и условие тогда можно наложить просто как на поле
В структуру не охота вникать запрос покажи |
|||
|
7
WED
21.05.08
✎
13:34
|
ВЫБРАТЬ
ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЗаказИзделия.Ссылка.Контрагент ИНАЧЕ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент ТОГДА ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КОНЕЦ КОНЕЦ КАК Контрагент, ЗаказИзделия.Ссылка ИЗ Документ.Заказ.Изделия КАК ЗаказИзделия |
|||
|
8
WED
21.05.08
✎
13:36
|
Здесь ЗаказИзделия - это табличная часть Изделия, документа Заказ
|
|||
|
9
vladnet
21.05.08
✎
13:37
|
ВЫБРАТЬ
ЗаказИзделия.Контрагент, ЗаказИзделия.Ссылка (ВЫБРАТЬ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЗаказИзделия.Ссылка.Контрагент ИНАЧЕ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент ТОГДА ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КОНЕЦ КОНЕЦ КАК Контрагент, ЗаказИзделия.Ссылка ИЗ Документ.Заказ.Изделия КАК ЗаказИзделия) КАК ЗаказИзделия ГДЕ ЗаказИзделия.Контрагент=&Контрагент1 или ЗаказИзделия.Контрагент=&Контрагент2 Если конечно вообще правлиьно понимаю задачу |
|||
|
10
vladnet
21.05.08
✎
13:38
|
Забыл:
ВЫБРАТЬ ЗаказИзделия.Контрагент, ЗаказИзделия.Ссылка ИЗ .... |
|||
|
11
НЕА123
21.05.08
✎
13:39
|
(0) а это зачем?
.... КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент ТОГДА ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) ... |
|||
|
12
НЕА123
21.05.08
✎
13:40
|
(11)+ Зачем тебе нужен составной тип?
|
|||
|
13
WED
21.05.08
✎
13:40
|
(11) Читай (2)
|
|||
|
14
WED
21.05.08
✎
13:42
|
(10) Угу, логику понял. Спасибо.
|
|||
|
15
WED
21.05.08
✎
13:44
|
(12) Мне не нужен.
Есть бухгалтерия, которая хочет, чтобы все частные лица во всех документах как контрагент "ЧАСТНОЕ ЛИЦО", и есть менеджеры, которым надо отслеживать документы пофамильно... |
|||
|
16
НЕА123
21.05.08
✎
13:46
|
(13) сделай все строкой.
(11)+ это лишняя ненужная проверка. и вообще ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) если это ссылка - не сработает. надо: ЗаказИзделия.Ссылка.ДокументОснование.Контрагент.Наименование |
|||
|
17
WED
21.05.08
✎
13:50
|
(16) Нельзя. Потому что результат запроса выводиться в ТЗ на форме. А там контрагента надо "просматривать"...
Насчет "ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) если это ссылка - не сработает. " - работает. Проверено. Потому что в данном случае контрагент - строка! |
|||
|
18
НЕА123
21.05.08
✎
13:51
|
типа так:
ВЫБРАТЬ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЕСТЬNULL(ЗаказИзделия.Ссылка.Контрагент.Наименование,"") ИНАЧЕ ВЫБОР ЕСТЬNULL(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент.Наименование,ЗаказИзделия.Ссылка.ДокументОснование.Контрагент) КОНЕЦ КОНЕЦ КАК Контрагент |
|||
|
19
НЕА123
21.05.08
✎
13:52
|
(17) ??? так кто же такой &ПустойКонтрагент???
|
|||
|
20
WED
21.05.08
✎
13:53
|
(17)
Запрос.Параметры.Вставить("ПустойЗамер", Документы.ЗамерУстановка.ПустаяСсылка()); Запрос.Параметры.Вставить("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка()); |
|||
|
21
WED
21.05.08
✎
13:54
|
+20 Вок как ни странно это оказалось самым простым способом проверить строка или ссылка контрагент
|
|||
|
22
НЕА123
21.05.08
✎
13:55
|
(20) понятно. и когда же тип строка = типу ссылка???
ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент |
|||
|
23
WED
21.05.08
✎
14:00
|
(22)
ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЗаказИзделия.Ссылка.Контрагент ИНАЧЕ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент ТОГДА ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КОНЕЦ КОНЕЦ КАК Контрагент Тепреь по-русски: Если ЗаказИзделия.Ссылка НЕ на основании ЗамерУстановка, то контрагент берется из ЗаказИзделия (и это всегда ссылка) Иначе (ЗаказИзделия выписан на основании ЗамерУстановка) и Если ЗамерУстановка.Контрагент = ПустаяСсылка То Контрагент = ЗамерУстановка как Строка Иначе Контрагент = ЗамерУстановка.Контрагент (и это ссылка) Тут надо пояснить. Как оказалось: для реквизита с составным типом данных и значением в одном из типов - все остальные типы имеют пустые значения. |
|||
|
24
НЕА123
21.05.08
✎
14:04
|
(23)
сомневаюсь. сильно сомневаюсь. но, надо проверить. |
|||
|
25
WED
21.05.08
✎
14:06
|
(24) Я уже проверил.
|
|||
|
26
НЕА123
21.05.08
✎
14:14
|
Врешь.
|
|||
|
27
НЕА123
21.05.08
✎
14:15
|
ВЫБРАТЬ
БанковскиеСчета.Владелец, ПРЕДСТАВЛЕНИЕ(БанковскиеСчета.Владелец), ВЫБОР КОГДА БанковскиеСчета.Владелец = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ТОГДА "ПустаяССылка" ИНАЧЕ "НеПустая" КОНЕЦ КАК Поле1 ИЗ Справочник.БанковскиеСчета КАК БанковскиеСчета |
|||
|
28
WED
21.05.08
✎
14:17
|
(27) И что выдает?
|
|||
|
29
WED
21.05.08
✎
14:18
|
Попробуй
БанковскиеСчета.Владелец = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) заменить на БанковскиеСчета.Владелец = &ПустойКонтрагент и Запрос.Параметры.Вставить("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка()); |
|||
|
30
WED
21.05.08
✎
14:19
|
Вобщем добился я того что мне надо. Через вложенный запрос. Спасибо товарищу vladnet
|
|||
|
31
НЕА123
21.05.08
✎
14:26
|
(30)
это хорошо. только врать не надо. на форуме немало людей, а ты их вводишь в заблуждение. |
|||
|
32
WED
21.05.08
✎
14:26
|
(31) гм. В чем я соврал?
|
|||
|
33
НЕА123
21.05.08
✎
14:31
|
ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент
всегда ложь, если ЗаказИзделия.Ссылка.ДокументОснование.Контрагент - тип строка. правильнее было бы проверить так ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100)) ЕСТЬ НЕ NULL |
|||
|
34
WED
21.05.08
✎
14:33
|
Синтаксически возможно так и более правильно, но мне было удобнее так.
Я проверял свой, частный, случай. Реквизит Контрагент в документе ЗамерУстановка имеет составной тип данных: Строка и Справочник.Контрагент. При отладке я увидел, что если в ЗамерУстановка.Контрагент заноситься строка, то ЗамерУстановка.Контрагент.Ссылка = Справочник.Контрагенты.ПустаяСсылка() Подобный эффект был еще на одном реквизите, у которого типы: Справочник.Номенклатура, Справочник.Изделия, Справочник.Комплекты. При заполнении данными одного типа все остальные - пустые ссылка их типа. Проверка в запросе показала, что это условие работает. Работает и для ЗамерУстановка.Контрагент и для второго реквизита. Что я и использовал в своем запросе в условии. |
|||
|
35
WED
21.05.08
✎
14:34
|
При твоем синтаксисе придется подобное условие писать для каждого типа данных реквизита. В моем я сразу проверил нужный мне.
|
|||
|
36
НЕА123
21.05.08
✎
14:36
|
>>При отладке я увидел, что если в ЗамерУстановка.Контрагент заноситься строка, то ЗамерУстановка.Контрагент.Ссылка = Справочник.Контрагенты.ПустаяСсылка()
чем смотрел-то? ЗамерУстановка.Контрагент.Ссылка IS NULL |
|||
|
37
WED
21.05.08
✎
14:36
|
Есть еще один нюанс в мою пользу: ЗаказИзделия.Ссылка.ДокументОснование.Контрагент может быть вообще не заполнен. т.е. он ни строки ни ссылка. и как поведет твое условие?
|
|||
|
38
WED
21.05.08
✎
14:36
|
(36) В табло и смотрел.
|
|||
|
39
WED
21.05.08
✎
14:38
|
Ладно, думаю что всё это уже не по теме.
Ты хочешь проверять по-своему - ради бога. Не возражаю :) Мне было удобней проверить по-своему. О чем я и написал. Думаю, что уместно закрыть тему. |
|||
|
40
НЕА123
21.05.08
✎
14:43
|
(37)
бредишь. ЗаказИзделия.Ссылка.ДокументОснование.Контрагент может быть ССЫЛКА СТРОКА НЕОПРЕДЕЛЕНО ну и NULL. если НЕОПРЕДЕЛЕНО то, естественно Выразить как строка даст NULL. |
|||
|
41
WED
21.05.08
✎
14:46
|
(40) Не брежу, но согласен. Упустил.
|
|||
|
42
WED
21.05.08
✎
14:47
|
+41 Я уже сказал, что в запросе ПРАВИЛЬНО для моего частного случая.
|
|||
|
43
НЕА123
21.05.08
✎
14:51
|
(42)
лишняя проверка, всегда отрабатывает ИНАЧЕ. |
|||
|
44
WED
21.05.08
✎
14:52
|
(43) Ну хорошо.
Напиши как по-твоему должны выглядеть эти условия в запросе. |
|||
|
45
НЕА123
21.05.08
✎
15:08
|
ВЫБРАТЬ
ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЕСТЬNULL(ЗаказИзделия.Ссылка.Контрагент.Наименование,"") ИНАЧЕ ЕСТЬNULL(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент.Наименование, ЕСТЬNULL(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент,"")) КОНЕЦ КАК Контрагент получишь строку. немного офф. вопрос: почему тип контрагента составной? нельзя было группы указывать? |
|||
|
46
НЕА123
21.05.08
✎
15:12
|
(45)+неа, не так.
ВЫБРАТЬ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЕСТЬNULL(ЗаказИзделия.Ссылка.Контрагент.Наименование,"") ИНАЧЕ ЕСТЬNULL(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент.Наименование, ЕСТЬNULL( ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = НЕОПРЕДЕЛЕНО ТОГДА "" ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КОНЕЦ ,"")) КОНЕЦ КАК Контрагент |
|||
|
47
WED
21.05.08
✎
15:24
|
(45)(46)
Почему тип составной я уже ответил в (15). в (46): ТОГДА ЕСТЬNULL(ЗаказИзделия.Ссылка.Контрагент.Наименование,"") вернет из запроса строку с наименованием контрагента или "", так? |
|||
|
48
НЕА123
21.05.08
✎
15:29
|
(47)
да. в (15) смотрел, но может можно было как-то с группами выкрутиться... составной тип, тем более строковый... гемор. |
|||
|
49
WED
21.05.08
✎
15:36
|
(48)
1. У тебя во всем условии при всех вариантах возвращается строка, а мне надо чтобы ссылкой, если он ссылка в ЗаказИзделия или ЗаказИзделие.ДокументОснование) и строкой если он строка. Его дальше из ТЗ будут открывать. 2. С группами можно конечно было сделать. Но далеко не на каждый документ "Замер" (он же является ЗаказИзделия.ДокументОснование) будет создан ЗаказИзделия. т.е. очень много замеров с такими контрагентами, которые будут только 1 раз и больше никогда. Руководство решило, что все такие будут проходит в бухгалтерии как "Частное лицо", чтобы справочник контрагентов не рос как на дрожжах, ну а менеджерам естественно нужно пофамильно, чтобы замеры найти... вот и извращаюсь теперь :( |
|||
|
50
НЕА123
21.05.08
✎
15:48
|
ВЫБРАТЬ
ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер ТОГДА ЗаказИзделия.Ссылка.Контрагент ИНАЧЕ ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент ССЫЛКА Справочник.Контрагенты Тогда ЗаказИзделия.Ссылка.ДокументОснование.Контрагент Иначе ЕСТЬNULL( ВЫБОР КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = НЕОПРЕДЕЛЕНО ТОГДА "" ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КОНЕЦ ,"") КОНЕЦ Конец КАК Контрагент насчет синтаксиса не проверял. вернет либо строку либо ссылку. |
|||
|
51
WED
21.05.08
✎
16:02
|
(50) И так я тоже делал. Причем с самого начала.
В условии КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент ССЫЛКА Справочник.Контрагенты всегда истина, проверено. именно поэтому я стал проверять на пустую ссылку, а не на тип. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |