|
В 8.3.6 Запросы могут содержать логические выражения в поля выборки и в ГДЕ | ☑ | ||
---|---|---|---|---|
0
bacila
30.12.15
✎
11:18
|
В описании версии 8.3.6 написано следующее -
Запросы теперь могут содержать логические выражения в описании поля выборки и в выражениях фильтрации запроса (ГДЕ), таким образом использование конструкции выбора (ВЫБОР КОГДА …) снизится. Кто нибудь понимает как это работает, пробовал в конструкторе запроса и так и эдак, не принимает "ГДЕ" ? |
|||
1
ДенисЧ
30.12.15
✎
11:19
|
Опять режим совместимости не отключили?
|
|||
2
bacila
30.12.15
✎
11:21
|
(1) да как бы в том и дело , что выключен
|
|||
3
bacila
30.12.15
✎
11:22
|
Вообще хотелось бы увидеть пример конструкции
|
|||
4
mehfk
30.12.15
✎
11:25
|
Сравни
ВЫБРАТЬ выбор когда поле1=поле2 тогда истина иначе ложь конец как условиеввыборке и выбрать поле1=поле2 как условиеввыборке |
|||
5
mikecool
30.12.15
✎
11:28
|
(4) это же в 8.3.7 обещают?
|
|||
6
Ёпрст
30.12.15
✎
11:30
|
ну нет чтобы, наконец, сделать
Выбрать (выбрать ...из ...) как Вася из ... А оне всё не тем занимаются, оптимизация не в том месте. |
|||
7
mikecool
30.12.15
✎
11:31
|
(6) +1
|
|||
8
ДенисЧ
30.12.15
✎
11:38
|
Нет, чтобы сделать
ИЗМЕНИТЬ Справочник.Номенклатура Установить Наименование = &наим где ссылка = &ссылка |
|||
9
mikecool
30.12.15
✎
11:39
|
(8) без этого обойдемся
|
|||
10
Ёпрст
30.12.15
✎
11:42
|
(8) да, это тоже нужно
|
|||
11
Ёпрст
30.12.15
✎
11:44
|
Ну и это заодно:
Удалить Ссылка из Документ.Вася Где Дата между &НачДата и &КонДата |
|||
12
bolobol
30.12.15
✎
11:45
|
(8) (10) А смысл этой конструкции какой прикладной?
|
|||
13
Fragster
гуру
30.12.15
✎
11:45
|
(8) косяк всех ORM - не срабатывают обработчики, в том числе вызывающие отказ в изменении...
|
|||
14
Serginio1
30.12.15
✎
11:45
|
(6) Да хотя бы по стандарту SQL 92 сделали.
Как впрочем загрузку ВК и ComОбъектов без регистрации Ну что! Свершилось. Релиз 8.3.7 состоялся... Обсуждаем! |
|||
15
ДенисЧ
30.12.15
✎
11:45
|
(13) Прямо таки всех?
|
|||
16
bolobol
30.12.15
✎
11:47
|
(11) Пример, аналогичный:
ИЗМЕНИТЬ Справочник.Номенклатура Установить ПометкаУдаления = Истина где ссылка = &ссылка А без контроля ссылочной целостности... Ну, знаете... Наgовнокодить захотелось срочно? |
|||
17
Живой Ископаемый
30.12.15
✎
11:48
|
2(8) Так не будет. Даже для ВИД изменение и запись - как для РС, то есть через объектную, а не запросную (множественную) модель
|
|||
18
Serginio1
30.12.15
✎
11:48
|
(13) Но при это в ORM есть возможность и массовых изменений.
Разработчик сам может решить, что нужно. А так приходится прямым доступом пользоваться. Хотелось бы аналога 1С++ |
|||
19
bolobol
30.12.15
✎
11:59
|
(18) Ээээ - не сравнивайте прямой доступ с возможностью платформы прямиком из текста запроса отработать все те механизмы, что заложены в ".Записать(".
Но и отрицать оптимальность массового изменения на уровне платформы, вместо обработки текста модуля для каждого объекта, не буду, однако, такой запрос при большом количестве измененяющихся объектов - наглухо подвесит систему транзакцией SQL, т.к. завершить её будет нельзя, пока 1С платформа для каждого из объектов не завершит выполнение всех предусмотренных действий (обработки До/При/После.Записи, Подписки, регистрация изменений) |
|||
20
Serginio1
30.12.15
✎
12:04
|
(19) Когда будешь обновлять миллионные прайсы, сразу поймешь преймущества прямого доступа. Я не говорю уже про возможности использования всех возможностей SQL, а не урезанного по самое немогу 1С SQL
|
|||
21
bolobol
30.12.15
✎
12:05
|
+(19) Не говоря уже, что через ..тцать..минут обработки, может выясниться, что один из объектов записать невозможно...
Да ещё если сообщения пользователю надо выводить при записи... - толк от реализации "ИЗМЕНИТЬ..." - вообще ноль. А делать с ограничениями... В общем, в отсутствии этой возможности и есть суть платформы - объектная модель. А запросы - это для логики и отчётов. |
|||
22
mehfk
30.12.15
✎
12:05
|
(5) Это в 8.3.6
|
|||
23
Serginio1
30.12.15
✎
12:07
|
Кстати в 1С во внутренних механизмах не хватает Merge что бы зизменять только измененые, добавлять только новые и удалять отсутствующие в наборе строки
|
|||
24
bolobol
30.12.15
✎
12:09
|
(20) Обновлять прайсы??? Опишите задачу, пожалуйста. Что именно вы там нашли обновлять, для необходимости прямого доступа? По 800 000 объектов я каждый месяц "обновляю" - в 10 минут укладывается вся обработка.
|
|||
25
Serginio1
30.12.15
✎
12:10
|
(24) У меня были 60 миллионые каждый день по несколько минут
|
|||
26
Живой Ископаемый
30.12.15
✎
12:11
|
2(24) ну, просто когда получается нужно обновлять не только справочник номенклатуры, но и его табличную часть (доп. реквизиты), характеристики, и цены (РС). Я не думаю что это долго в итоге, просто муторно писать
|
|||
27
bolobol
30.12.15
✎
12:13
|
(23) Во внутренних механизмах 1С не хватает компиляции и оптимизации. Оттого внутренний язык тормозит, да и сама платформа еле шевелится. Говорят, что С++ писана, но, видимо, на интерпретаторе С++, иначе - мне не объяснимо сие)
(25) "Ой, всё..." ))) 60млн записи - это не тот фокус, на который разрабы ориентируются, однозначно. Тут только бубен и шаманства, да |
|||
28
Serginio1
30.12.15
✎
12:16
|
(27) Проблема при обновлении записей смотри 23.
Во всяком случае раньше весь набор удалялся и записывался новый. |
|||
29
bacila
30.12.15
✎
12:27
|
(4) такую конструкцию и без режима совместимости, конструктор съедает, все таки хотелось пример с ГДЕ
|
|||
30
mehfk
30.12.15
✎
12:29
|
(29) Попробуй то же на 8.3.5
|
|||
31
bacila
30.12.15
✎
12:30
|
(30) ну 8.3.5 нет под рукой, есть 8.3.6 в режиме совместимости, нет у кого нибудь 8.3.5 что бы проверить?
|
|||
32
mehfk
30.12.15
✎
12:32
|
(31) У тебя есть причины не доверять вендору?
|
|||
33
bacila
30.12.15
✎
12:34
|
(32) ну я исходя из описания, ожидал увидеть в конструкции слово ГДЕ
|
|||
34
mehfk
30.12.15
✎
12:39
|
Про условие в где - ищи в гугле ошибку проведения заказ-наряда в альфа-авто 5, там если запрос не исправить, на 8.3.5 была ошибка.
|
|||
35
bolobol
30.12.15
✎
12:40
|
(28) Ибо "удаление" дешевле, чем перезапись, т.к. новые данные _дозаписываются_ в таблицу, а старые в игнор ставятся. Весь пакет записей по отбору находится в одном месте, ускоряется и чтение данных.
|
|||
36
patria0muerte
30.12.15
✎
12:48
|
(33) А откуда у тебя там лишнее ГДЕ возьмется. Вендор тебе русским по белому пишет, что теперь можно писать запросы не такие:
ВЫБРАТЬ ВЫБОР КОГДА А = Б ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ПОЛЕ ГДЕ ВЫБОР КОГДА НЕ В = Г ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ , а такие ВЫБРАТЬ А = Б КАК ПОЛЕ ГДЕ НЕ В = Г |
|||
37
patria0muerte
30.12.15
✎
12:49
|
(36) Правда в ГДЕ и раньше можно было так писать.
|
|||
38
ObjectRelation Model
30.12.15
✎
13:46
|
(6) быдлостайл, имхо
|
|||
39
mehfk
30.12.15
✎
14:00
|
(38) Зря. Просто у тебя не было случаев когда это было нужно.
|
|||
40
vhl
30.12.15
✎
14:04
|
(8) Лучше так:
СОКРАТИТЬ ТАБЛИЦА Справочник.Номенклатура |
|||
41
Ёпрст
30.12.15
✎
14:06
|
(38) нравится, как сейчас, получать срез последних на каждую дату запроса через вложенные запросы с кучей левых соединений ?
|
|||
42
Dotoshin
30.12.15
✎
14:06
|
(38) Чой-та быдлостайл? Можешь обосновать почему так нельзя делать?
|
|||
43
Dotoshin
30.12.15
✎
14:07
|
+ (41) Кстати да.
|
|||
44
Локи-13
30.12.15
✎
14:15
|
(6) а можно живой пример?
А то выбрать вложенный запрос как Вася? В чем смысл? |
|||
45
mehfk
30.12.15
✎
14:17
|
(44) Там выбрать первые 1 из Пети
|
|||
46
bolobol
30.12.15
✎
14:20
|
(44) а это у (38) надо спрашивать - только он понял о чём там речь)
|
|||
47
Локи-13
30.12.15
✎
14:22
|
(45) А полный запрос можно?
Выбрать (выбрать ссылка из номенклатура) как Вася из Регистр.ПроизводственныйКалендарь Так?) Что за конструкция? |
|||
48
mehfk
30.12.15
✎
14:26
|
(47) Ты же понимаешь, что реального медитативного примера ввиду отсутствия такового платформой не будет?
|
|||
49
Локи-13
30.12.15
✎
14:29
|
(48) Я вообще не понимаю эту конструкцию.
|
|||
50
mehfk
30.12.15
✎
14:33
|
(49) Тогда забей, это тебе не нужно.
|
|||
51
bolobol
30.12.15
✎
14:36
|
(49) У (38) спросите! Он опознал, даже "быдло-стайл" узнал)
|
|||
52
Ёпрст
30.12.15
✎
14:49
|
(47)
select (select top 1 a from table1) as a, (select max(a) from table1) as a2 from table2 так, понятнее ? |
|||
53
Локи-13
30.12.15
✎
14:49
|
(51) так у (39) были даже случаи, однако описать смысл он не может.
|
|||
54
Ёпрст
30.12.15
✎
14:50
|
ну и до кучи, чтоб он еще и коррелированным был
|
|||
55
Локи-13
30.12.15
✎
14:52
|
(52) а если
select (select top 1 a,b,c from table1) as a В "а" будет поле какого типа? |
|||
56
Ёпрст
30.12.15
✎
14:54
|
(55) будет ошибка
|
|||
57
Ёпрст
30.12.15
✎
14:55
|
Вы че, t-sql запросов не писали што ле ?
|
|||
58
mehfk
30.12.15
✎
14:58
|
(57)+ срочно инъекцию 1с++ :)
|
|||
59
Ёпрст
30.12.15
✎
14:58
|
Если б реализовали, то можно писать было бы..
Выбрать Товарчик.ссылка как Товар, (Выбрать первые 1 Цена из хрензнаетОткуда Где Товар = Товарчик.ССылка) как Цена ИЗ Справочник.Товары как Товарчик и им подобные запросы. А не извратом как сейчас, с кучей временных таблиц и нелепым левым соединением. |
|||
60
mehfk
30.12.15
✎
15:00
|
(59) Просто у них человек, котрый занимается запросами еще не весь Books Online прочитал.
|
|||
61
Ёпрст
30.12.15
✎
15:02
|
(60) наверное )
|
|||
62
bolobol
30.12.15
✎
15:04
|
(59) Так вы и написали левое соединение...
|
|||
63
Локи-13
30.12.15
✎
15:05
|
(59) что ? таблиц?
Выбрать Товарчик.ссылка как Товар, хрензнаетОткуда.Цена как Цена ИЗ Справочник.Товары как Товарчик левое соединение регистрСведений.Цены.срезпоследних как хрензнаетОткуда по хрензнаетОткуда.Товар = Товарчик.ССылка |
|||
64
bolobol
30.12.15
✎
15:08
|
(63) Верно! Только добавить осталось "Среднее(хрензнаетОткуда.Цена) как Цена" и "Группировать по Товар" - чтоб вся бесполезность этого запроса была налицо)
|
|||
65
Serginio1
30.12.15
✎
15:10
|
(35) Это с каккого удаление дешевле, чем измененbе (Update)?
При удалении и добавлении записей главная проблема это изменения в индексах. А индексов может быть несколько. Удаление и вставка очень дорогие операции. Это на порядки дольше, чем просто изменение записей. А чтение как раз будет быстрее, чем быстрее запись. По Б+ деревьям можно почитать http://rsdn.ru/article/alg/tlsd.xml |
|||
66
bolobol
30.12.15
✎
15:13
|
(65) Вас определённо нужно рекомендовать консультантом в группу, например, разработчиков "ВКонтакте". Они там не то что записи текстовые - видосы не удаляют! Потому что так "оптимально". Срочно надо их проконсультировать!
|
|||
67
mehfk
30.12.15
✎
15:14
|
(63) Выбрать один последний по дате/времени документ взаиморасчетов по всем контрагентам из всех.
|
|||
68
bolobol
30.12.15
✎
15:14
|
(67) Последний - значит: Максимум(Дата), не?
|
|||
69
Serginio1
30.12.15
✎
15:18
|
(66) Еще раз посмотри на Merge https://msdn.microsoft.com/ru-ru/library/bb510625(v=sql.120).aspx
Её специально придумали, для ускорения изменения таблицы. |
|||
70
bolobol
30.12.15
✎
15:18
|
Как тут Лефмихалыч в одной теме писал (вольная трактовка): кто не хочет делать - ищет подходящий инструмент облегчения неизбежного...
|
|||
71
mehfk
30.12.15
✎
15:20
|
(68) Это значит ...ORDER BY ... DESC
|
|||
72
bolobol
30.12.15
✎
15:21
|
(69) К чему это здесь и как относится к логике 1С ? Мерже используется для дозаписи отсутствующего набора, верно? Зачем в 1С _дозапись_?
|
|||
73
bolobol
30.12.15
✎
15:22
|
(71) Оно и так, как правило, того
|
|||
74
Лефмихалыч
30.12.15
✎
15:24
|
(0) примеры
ГДЕ ПолеБулевскогоТИпа ГДЕ ЭтоГруппа или ПометкаУдаления |
|||
75
Serginio1
30.12.15
✎
15:27
|
(72) Ну ты молодец. Ты бы ссылку почитал бы
MERGE (Transact-SQL) Выполняет операции вставки, обновления или удаления для целевой таблицы на основе результатов соединения с исходной таблицей. Например, можно синхронизировать две таблицы путем вставки, обновления или удаления строк в одной таблице на основании отличий, найденных в другой таблице Я как раз пользуюсь MERGE для обновления набора. И разница в скорости десятки раз. Например у тебя в документе 1000 записей. Ты изменил всего 1 запись. При Merge будет изменена всего 1 запись, вместо удаления 1000 и записи 1000 |
|||
76
ДенисЧ
30.12.15
✎
15:29
|
(75) Merge при больших объёмах часто может к full scan привести... Что не есть хорошо
|
|||
77
Локи-13
30.12.15
✎
15:33
|
(67) хм.. ну тут конструкция будет чуть потяжелее
возможно этот вариант и был бы проще а как будет выглядеть запрос в профайлере? или скуль прям так их кушает? |
|||
78
Serginio1
30.12.15
✎
15:36
|
75+ Почитай что такое
WHEN MATCHED THEN WHEN NOT MATCHED WHEN NOT MATCHED BY SOURCE (76) Это не проблема. Чтение быстрая операция. Кроме того есть OPTION (<query_hint> [ ,...n ] ) Указывает, что для настройки способа, которым компонент Database Engine обрабатывает инструкцию, используются подсказки оптимизатора. Дополнительные сведения см. в разделе Указания запросов (Transact-SQL). Да и при Merge записи которых нет в источнике должны удаляться. Просто если ты используешь, только WHEN MATCHED THEN то тогда можешь указать соединение по { LOOP | MERGE | HASH } JOIN Указывает, что все операции соединения во всем запросе выполняются с помощью рекомендаций LOOP JOIN, MERGE JOIN или HASH JOIN. Если задано больше одного указания соединения, оптимизатор запросов выбирает наименее затратную стратегию из допустимых. https://msdn.microsoft.com/ru-ru/library/ms181714(v=sql.120).aspx А говоря об изменении документов, регистров |
|||
79
mehfk
30.12.15
✎
15:36
|
(73) Но сравни а) запрос на T-SQL и б) аналогичный на 1С, и в) что получается из запроса на T-SQL из запроса на 1С.
|
|||
80
Serginio1
30.12.15
✎
15:37
|
А говоря об изменении документов, регистров то там присутствуют все
WHEN MATCHED THEN WHEN NOT MATCHED WHEN NOT MATCHED BY SOURCE |
|||
81
bolobol
30.12.15
✎
15:47
|
(79) (80) Вот тут нить я, кажется, потерял...
Но по сути работы Мерже, учитывая распространённость баз на ССД, то, кстати сказать - вполне себе и актуальное ожидание от 1С-ки. А если учесть специфику пользователей "Посмотрел и "Записать и закрыть"" - в некотором смысле и... В общем - да, согласен - вопрос спорный, статистический. Да, надо признать - мир шире, чем кругозор) |
|||
82
rs_trade
30.12.15
✎
15:50
|
куча кейсов как раз от скудости языка запросов 1С. они плять синтаксис упростили. нет бы возможностей добавить.
|
|||
83
bolobol
30.12.15
✎
15:54
|
(82) Эммм - Мерже - это не к скудости языка запросов 1С, это уже в платформе так сделали - запись всегда, одним блоком в таблицу. Вне ССД - это рулит, т.к. запись может быть долгой, потому что сама по-себе операция долгая, но чтение - должно быть оптимизировано по максимуму.
|
|||
84
rs_trade
30.12.15
✎
15:55
|
(83) при чем тут это вообще? я по теме.
|
|||
85
ObjectRelation Model
30.12.15
✎
15:57
|
||||
86
rs_trade
30.12.15
✎
15:59
|
(74) это и так же было.
|
|||
87
ObjectRelation Model
30.12.15
✎
16:00
|
(59) то есть тебе неважно, что за цена это, лишь бы первая, ты бы отсортировал хоть как-то
|
|||
88
Serginio1
30.12.15
✎
16:00
|
(81) Вот примеры Кто силен в SQL? Команда MERGE интересует.
|
|||
89
Лефмихалыч
30.12.15
✎
16:17
|
(86) и то верно. Тогда не знаю, как это понять.
|
|||
90
ObjectRelation Model
30.12.15
✎
16:23
|
(89) я думаю имелось ввиду, что теперь и не только в секции ГДЕ, но в секциях ВЫБРАТЬ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО
там не было работы с логическими операторами без ВЫБОР КОГДА ТОГДА |
|||
91
Лефмихалыч
30.12.15
✎
16:27
|
(90) в ВЫБРАТЬ я только что на 8.3.5 проверял - есть такая возможность. А вот в
ПОРЯДОЧИТЬ ПО ПометкаУдаления или ЭтоГруппа работает только в 8.3.6 |
|||
92
rs_trade
30.12.15
✎
16:35
|
(91) Да, так и есть.
|
|||
93
rs_trade
30.12.15
✎
16:35
|
какой то косяк видимо в описании
|
|||
94
Serginio1
30.12.15
✎
16:45
|
||||
95
Лефмихалыч
30.12.15
✎
16:52
|
(93) видимо имелось в виду, что логические выражения теперь могут быть не только в...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |