|
Использование временных таблиц в логическом операторе "В" | ☑ | ||
---|---|---|---|---|
0
siggoron
18.01.12
✎
10:20
|
Почему запрос описанный ниже выдаёт ошибку «Поле не найдено «СписокПроведенныхЗаказов»»:
ВЫБРАТЬ ЗаказПокупателя.Ссылка ПОМЕСТИТЬ СписокПроведенныхЗаказов ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ГДЕ ЗаказПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон И ЗаказПокупателя.Проведен = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДинамикаЗаказовПокупателейПоОплатеСрезПоследних.ЗаказПокупателя, ДинамикаЗаказовПокупателейПоОплатеСрезПоследних.СостояниеОплаты ИЗ РегистрСведений.ДинамикаЗаказовПокупателейПоОплате.СрезПоследних( &ДатаКон, ЗаказПокупателя В (СписокПроведенныхЗаказов)) КАК ДинамикаЗаказовПокупателейПоОплатеСрезПоследних Разве временные таблицы пакетных запросов нельзя использовать в логическом операторе «В»? Заранее благодарен за ответы. |
|||
1
Asmody
18.01.12
✎
10:22
|
ЗаказПокупателя В (ВЫБРАТЬ Ссылка ИЗ СписокПроведенныхЗаказов)
|
|||
2
Scooter
18.01.12
✎
10:22
|
полагаю должно быть так
выбрать * из СписокПроведенныхЗаказов |
|||
3
GenV
18.01.12
✎
10:24
|
1+ скорее ЗаказПокупателя В (ВЫБРАТЬ СписокПроведенныхЗаказов.Ссылка ИЗ СписокПроведенныхЗаказов)
|
|||
4
siggoron
18.01.12
✎
10:25
|
(3) Вы правы, большое спасибо
|
|||
5
Sammo
18.01.12
✎
10:28
|
При этом необходимо понимать, что большие списки в значении (В) могут привести к существенной деградации производительности.
|
|||
6
aleks-id
18.01.12
✎
10:28
|
жесть
ВЫБРАТЬ ДинамикаЗаказовПокупателейПоОплатеСрезПоследних.ЗаказПокупателя, ДинамикаЗаказовПокупателейПоОплатеСрезПоследних.СостояниеОплаты ИЗ РегистрСведений.ДинамикаЗаказовПокупателейПоОплате.СрезПоследних( &ДатаКон, ЗаказПокупателя В (ВЫБРАТЬ ЗаказПокупателя.Ссылка ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ГДЕ ЗаказПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон И ЗаказПокупателя.Проведен)) КАК ДинамикаЗаказовПокупателейПоОплатеСрезПоследних |
|||
7
aleks-id
18.01.12
✎
10:29
|
а за ЗаказПокупателя.Проведен = ИСТИНА надо пальцы отламывать...
|
|||
8
Maxus43
18.01.12
✎
10:29
|
(6) вложеные запросы не есть гуд, ВТ кошерней
|
|||
9
aleks-id
18.01.12
✎
10:30
|
(8) замерь производительность ;)
|
|||
10
Maxus43
18.01.12
✎
10:32
|
(9) я настольной библии 1с доверяю. Так же зависит от количества данных во вложенном запросе. Если там 1 док то понятно, а если 20 тысяч?
|
|||
11
aleks-id
18.01.12
✎
10:33
|
(10) а ничо, что в ВТ тоже отбирается из этих 20 тысяч, а затем еще и из ВТ ТЕМ ЖЕ ВЛОЖЕННЫМ запросом дергается?
|
|||
12
siggoron
18.01.12
✎
10:45
|
(7) почему?
|
|||
13
Maxus43
18.01.12
✎
10:45
|
(11) ВТ можно проиндексировать. в ВТ будет известно уже сколько там записей, от этого зависит какой план запроса выберет СУБД. ЕМНИП СКЛ выбирает 1 из 2х вариантов для работы с вложенными, они оптимизированы или под маленьколе или под большое количество записей. напрямую с вложеным - может выбрать не тот план. Имхо писать дак изначально чтоб по феншую было
|
|||
14
Maxus43
18.01.12
✎
10:51
|
а вобще - нет смысла говорить про производительность таких вещей в отрыве от конкретной ситуации и базы... но я за работу с ВТ, считай что по религиозным соображениям
|
|||
15
Кириллка
18.01.12
✎
11:06
|
(7)Ты пойми, что это скуль, а не встроенный язык 1с. В встроенном языке еще можно про пальцы говорить и то спорно. А в запросе так, чем точнее описал предикаты, тем лучше.
|
|||
16
Кириллка
18.01.12
✎
11:07
|
(5)Нужно помнить, что ЛЮБЫЕ большие списки могут привести к существенной деградации производительности.
|
|||
17
Kraft
18.01.12
✎
11:16
|
(7) обоснуй
|
|||
18
aleks-id
18.01.12
✎
13:35
|
(17) булева переменная уже содержит в себе значение ИСТИНА или ЛОЖЬ. зачем его сравнивать если условие выполняется в зависимости от передаваемого в него значения?
Если Документ.Проведен = ИСТИНА Тогда ... вот за это надо бить. Если Документ.Проведен Тогда ... а так правильно. |
|||
19
Maxus43
18.01.12
✎
13:37
|
(18) а скулю пофиг, там нет типа "Булево". план запроса будет одинаковый как мне кажется, не проверял. Писать так в 1с правильней конечно с точки зрения красоты и читаемости
|
|||
20
aleks-id
18.01.12
✎
13:41
|
(19) а ты проверь ;)
|
|||
21
Jaap Vduul
18.01.12
✎
13:48
|
(18) Ерунда.
(20) Одинаковый, я проверял. |
|||
22
1с-кин
18.01.12
✎
13:48
|
(18) а что, с некоторых пор булево стало громоздким составным объектом? ну прихватит сравнение двух единичек... :)
|
|||
23
Maxus43
18.01.12
✎
13:51
|
(22) я про то что на скуле такого типа нет в явном виде, есно он простой, суть в запросе который будет там делаться
|
|||
24
alex-pro
18.01.12
✎
13:51
|
(12) некошерно ибо так писать.
|
|||
25
Кириллка
18.01.12
✎
15:00
|
(24)Некошерно не аргумент.
Нужно понимать: - при явном сравнении "Если <Что-то слева> = <Что-то справа> Тогда", значение <Что-то слева> неявно приводится к типу <Что-то справа> и выполняется сравнение по правилам этого типа, приведение не удалось - рун-тайм ошибка; - при неявном сравнении "Если <Что-то> Тогда", значение <Что-то> не приводится ни к какому типу, там тупо ожидается Булево значение и если там что-то отличное от Булева, то рун-тайм ошибку получаем; Отсюда вывод: если там гарантированное Булево значение, то явное сравнение ни к чему, в противном случае - явное сравнение нужно только для того, чтобы показать, что по логике программы мы там ожидаем Булево значение. И если там прилетело что-то другое, то это где-то касяк. |
|||
26
hhhh
18.01.12
✎
15:13
|
(24) Наоборот, часто бывает Документ.Проведен = НЕопределено и тогда
Если Документ.Проведен Тогда ... вываливается в ошибку. А Если Документ.Проведен = ИСТИНА Тогда ... выполняется нормально. ЭТо кошернее. |
|||
27
1с-кин
18.01.12
✎
15:15
|
(26) это специфика 1с.
В 1с вообще все надо стараться писать как можно более явно и наглядно. а (7) смотрит на выполнение запросов в 1с - как на запросы SQL. |
|||
28
Feanor
18.01.12
✎
15:27
|
(26) эт в каких случаях бывает "Документ.Проведен = НЕопределено" ?
|
|||
29
1с-кин
18.01.12
✎
15:28
|
(28) запросто. когда неинициализирован еще.
|
|||
30
Feanor
18.01.12
✎
15:31
|
(29) что значит "неинициализирован"?
|
|||
31
Starhan
18.01.12
✎
15:34
|
(28) естьNULL(документ.Проведен, Неопределено)
:) |
|||
32
Maxus43
18.01.12
✎
15:36
|
представляем ещё не созданный документ - там неопределено
|
|||
33
Feanor
18.01.12
✎
15:40
|
(32) что значит "еще не созданный документ"?
|
|||
34
rrunover
18.01.12
✎
15:53
|
(33) Форма документа открыта и заполнена, но не записана - оно?
|
|||
35
Starhan
18.01.12
✎
15:54
|
(34) емнип там пустая ссылка.
|
|||
36
Starhan
18.01.12
✎
15:55
|
всмысле проведен будет ложь по умолчанию
|
|||
37
rrunover
18.01.12
✎
15:55
|
не пустая там ссылка
|
|||
38
rrunover
18.01.12
✎
15:56
|
а проведён будет ложь, да )
|
|||
39
Feanor
18.01.12
✎
15:57
|
(38) За ответ - Два, за сообразительность - Пять )))
|
|||
40
Feanor
18.01.12
✎
15:59
|
На самом деле очень интересно увидеть, как нечто типа "ДокументОбъект.ВидДокумента" будет содержать в свойстве "Проведен" Неопределено
|
|||
41
rrunover
18.01.12
✎
15:59
|
ми-ми-ми ...
(39) бес (УстановитьСсылкуНового) попутал :) |
|||
42
Feanor
18.01.12
✎
16:00
|
(41) отсыпь уже, не томи, а? )))
|
|||
43
Maxus43
18.01.12
✎
16:03
|
(33) это значит что "представляем" в воображении такую ситуацию и вуаля! а как физически добится такого я хз)
|
|||
44
Feanor
18.01.12
✎
16:04
|
(43) а вот (29) точно знает, как добиться, но молчит, гад! (
|
|||
45
1с-кин
18.01.12
✎
18:15
|
(44) ну не конкретно Документ.Проведен = Неопределено.
Спор о том, что если тип Булево - то реквизит может/не может быть неопределено в некий момент времени. А это (Неопределено) касается любого реквизита в 1С, если не было инициализации. |
|||
46
Feanor
18.01.12
✎
19:18
|
(45) конкретно у переменной типа "ДокументОбъект.ВидДокументаРек" или "ДокументСсылка.ВидДокументаРек" свойство "Проведен" никак не может иметь значение, отличное от "Истина" или "Ложь".
З.Ы. До сих пор не понимаю, что есть "инициализация" реквизита в терминах языка 1С |
|||
47
Sammo
19.01.12
✎
05:04
|
Если не было "инициализации" то реквизиты принимают значения по умолчанию.
А теперь смотри значения по умолчанию для булевых реквизитов. |
|||
48
Kraft
19.01.12
✎
05:48
|
(18) ты просто "лейтенант очевидность" б^ля
|
|||
49
Feanor
19.01.12
✎
09:31
|
(47) ты тоже из той армии, которая не понимает разницы между двумя словами "переменная" и "реквизит"? )))
|
|||
50
Sammo
19.01.12
✎
09:46
|
(49) Началось с документ.Проведен - это реквизит.
|
|||
51
Maxus43
19.01.12
✎
09:50
|
Неинициализированная переменная - Неопределено. Реквизит - значение по умолчанию. Чеготут обсуждать та?
|
|||
52
Feanor
19.01.12
✎
09:51
|
(51) да в целом нечего, кроме некоторой неграмотности товарища 1с-кин ))
|
|||
53
1с-кин
24.01.12
✎
17:37
|
(52) это вы неграмотны - при создании объекта, если типа данных реквизита/переменной нет - значение будет НЕОПРЕДЕЛЕНО.
А тип есть - так он сам и накладывает ограничение, что не может быть НЕОПРЕДЕЛЕНО, и поэтому - какое-то значение по-умолчанию. В корень надо зрить )) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |