Имя: Пароль:
1C
 
В чем смысл расширения языка запросов для СКД?
0 Буратинко
 
05.10.10
12:47
В конструкторе запроса на закладке "Компоновка данных" можно указать поля для выбора пользователей в запрос. Причем эти поля можно выбирать только из уже выбранных полей на закладке "Таблицы и поля".

Получается какое-то задвоение.... Причем сгенерированный запрос действительно эти поля содержит дважды: первый раз без фигурных скобок, а второй раз- с ними.

В 8.1 Построитель отчета использовал подобные расширения, чтобы не выбирать лишних данных и поля указывались в тексте запроса только один раз в фигурных скобках.

В чем смысл?
1 Kashemir
 
05.10.10
12:48
Такой же смысл как и в построителе
2 Буратинко
 
05.10.10
12:50
(1) а почем записывается дважды?
3 Kashemir
 
05.10.10
12:51
(2) "Потом" чтобы знать как скомпоновать запрос выполнения при заданных настройках пользователя.
4 IronDemon
 
05.10.10
12:52
Потому что есть волшебная кнопочка "Автозаполнение".
5 Буратинко
 
05.10.10
12:55
(3) А что построитель отчета не мог скомпоновать без лишнего текста?

(4) а причем тут автозаполнение? Указывать свойства полей необходимо в любом случае (даже если они используются не всегда)
6 Kashemir
 
05.10.10
12:57
(5) Если ты не будешь использовать директивы компоновки твой запрос будет выполнятся в полном "оригинальном" виде при любых настройках пользователя.
7 Буратинко
 
05.10.10
12:59
(6) Это понятно. Вопрос в другом: зачем дублировать текст запроса? Ведь в построителе отчета такого не было.
8 IronDemon
 
05.10.10
13:01
(7) Было
9 Буратинко
 
05.10.10
13:01
(6) может это ошибка? Ведь она дает выбирать только из полей, которые уже выбраны. А должна давать выбирать из всех полей таблиц указанных на закладке "Таблицы" закладки "Компановка данных"...
10 Буратинко
 
05.10.10
13:02
(8) не было. Там поля перечислялись один раз (или в фигурных скобках или без).
11 Kashemir
 
05.10.10
13:03
(7) Под полный "дублированием запроса", если я тебя понял,  подразумевается исключение выборки вложенной таблицы, в случае если ее поля не используются. Смотри в конструкторе запроса на закладке компоновки данный подзакладку таблицы и в ней обрати внимание на признак "обязательности".
12 Kashemir
 
05.10.10
13:05
(9) Закладка выбранные поля позволяет назначать на каком уровне вложенности запроса то или другое поле можно убирать из выборки запроса, в случае если оно не используется.
13 Буратинко
 
05.10.10
13:07
(11) Да нет, же. Почему сгенерированный текст запроса содержит оба поля:
Валюта
{Валюта}

Ведь надо только (так было в построителе отчета):
{Валюта}
14 Kashemir
 
05.10.10
13:08
(13) Потому что ты задал псевдоним поля.
15 Буратинко
 
05.10.10
19:18
(1)
Так ведь система компоновки и должна этим заниматься (с учетом настроек пользователя формировать обращение к БД). Зачем еще какие-то дополнительные настройки?

В 1с создал справочник с двумя реквизитами и создал Отчет. Его Основная схема компановки данных содержит набор данных "запрос":

SELECT
   Catalog1.Attribute1,
   Catalog1.Attribute2 AS Attribute2
{SELECT
   Attribute2}
FROM
   Catalog.Catalog1 AS Catalog1

(То есть второй реквизит справочника добавлен в поля на закладке "компановка данных" построителя запроса, а первый- не добавлен).

Открываю 1с и Profiler и строю отчеты:

1. Вывести детальные записи с обоими реквизитами:

SELECT
T1._Fld8,
T1._Fld9
FROM _Reference7 T1 WITH(NOLOCK)

2. Вывести детальные записи ТОЛЬКО с полем 1:

SELECT
T1._Fld8
FROM _Reference7 T1 WITH(NOLOCK)

3. Вывести детальные записи ТОЛЬКО с полем 2:
SELECT
T1._Fld9
FROM _Reference7 T1 WITH(NOLOCK)

Видно, что никаких лишних полей в запрос не попадает. Поэтому вопрос остается в силе: В чем смысл расширения языка запросов для СКД?
16 Буратинко
 
06.10.10
10:53
А! Вот видите, молчите!
Тоже задумались зачем эта фигня сбоку прикручена!
17 detec
 
06.10.10
10:56
(16) Лично я заметил, что в отчётах конфигураций под управляемым приложением эта муть в фигурных скобках отсутствует. Не могу навскидку припомнить отчёт, где они используются.
18 Kashemir
 
06.10.10
10:59
(15) В этом случае идет работа только с финальными полями, не участвующими в соединениях/условиях/расчетах вычисляемых/пользовательских полей/группировках - в данной ситуации очевидно оптимизатор запроса схемы может самостоятельно отбросить поля. Заверни этот же запрос во вложенный и поиграйся с директивами условной выборки на верхнем и вложенном уровне запроса.
19 Буратинко
 
06.10.10
11:11
(18) что такое "директивами условной выборки на верхнем и вложенном уровне запроса"?

И что такое "Заверни этот же запрос во вложенный"?
20 Буратинко
 
06.10.10
11:13
(12) а эта информация откуда? (где можно почитать?)
21 Буратинко
 
06.10.10
11:20
Действительно на закладке "Компановка данных", "Таблицы" конструктора запроса есть колонка "Номер группы", но единственное на что она влияет- возможность объединенения / разъединения обращения к таблицам.

То есть, если номер группы одинаковый и вы обращаетесь к одной из таблиц, то автоматически будет произведено объединение основной таблицы со всеми таблицами ее группы.
22 Kashemir
 
06.10.10
11:24
(19)
1) Другими словами поля выборки в фигурных скобках
2) Вложенный запрос - http://www.google.com.ua/#hl=ru&source=hp&biw=1504&bih=693&q=вложенный+запрос&aq=f&aqi=g3g-s1g2g-s1g3&aql=&oq=&gs_rfai=&fp=56dd34124cca0658

(20) Где почитать - не подскажу.
Вот примеры запросов для эсперементов с настройками. Попробуй поиграться настройками и посмотреть на финальные запросы. Кстати - для схемы финальный запрос проще вытаскивать из собранного макета, чем ловить в профайлере

// ПЕРВЫЙ
ВЫБРАТЬ
   ВложенныйЗапрос.Период,
   ВложенныйЗапрос.Валюта,
   ВложенныйЗапрос.Страна,
   ВложенныйЗапрос.Курс
ИЗ
   (ВЫБРАТЬ
       КурсыВалютСрезПоследних.Период КАК Период,
       КурсыВалютСрезПоследних.Валюта КАК Валюта,
       КурсыВалютСрезПоследних.Страна КАК Страна,
       КурсыВалютСрезПоследних.Курс КАК Курс
   {ВЫБРАТЬ
       Период,
       Валюта.*,
       Страна.*,
       Курс}
   ИЗ
       РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних) КАК ВложенныйЗапрос


// ВТОРОЙ


ВЫБРАТЬ
   ВложенныйЗапрос.Период КАК Период,
   ВложенныйЗапрос.Валюта КАК Валюта,
   ВложенныйЗапрос.Страна КАК Страна,
   ВложенныйЗапрос.Курс КАК Курс
{ВЫБРАТЬ
   Период,
   Валюта.*,
   Страна.*,
   Курс}
ИЗ
   (ВЫБРАТЬ
       КурсыВалютСрезПоследних.Период КАК Период,
       КурсыВалютСрезПоследних.Валюта КАК Валюта,
       КурсыВалютСрезПоследних.Страна КАК Страна,
       КурсыВалютСрезПоследних.Курс КАК Курс
   ИЗ
       РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних) КАК ВложенныйЗапрос
23 Kashemir
 
06.10.10
11:27
(21) "но единственное на что она влияет- возможность объединенения / разъединения обращения к таблицам."
___________
Т.е. возможность отрезать часть вложенных запросов при ненадобности - это так мало ?
24 hhhh
 
06.10.10
11:34
(16) там есть все поля и поля, которые доступны пользователю. Ну не настолько в 1С лохи, чтобы абсолютно все поля запроса вываливать пользователю на экран.
25 Буратинко
 
06.10.10
12:54
(22) поиграюсь.

(23) я отвечал на (12)
Да, считаю, что это достаточно важное поле, но оно имеет не ту функциональность, что описано в (12)

(24) не понятно. Так вы считаете, что расширение языка запросов для СКД- излишество или наоборот- крайне важная добавка?
26 Kashemir
 
06.10.10
12:59
(25) Не следует путать опциальность присоединения целых таблиц и опциональную выборку конкретных полей таблицы.
27 le_
 
06.10.10
13:36
Кстати, по этому вопросу, похоже, вообще нет ничего в литературе. И никакой документации. Т.е., 1С придумала что-то, а все остальные должны догадываться, для чего это нужно...
28 Буратинко
 
06.10.10
15:43
(22) Поигрался и вывод такой: опциональные поля имеет смысл использовать ТОЛЬКО во вложенных запросах (в этом случае с их помощью во вложенном запросе можно сократить количество выбираемых полей). То есть использование опциональных полей на самом верхнем уровне запроса- бессмысленное стесывание пальцев об клавиатуру.

(26) не путаю

(27) я только на диске ИТС в документации нашел сухую справку, что дескать вот так можно написать. Но ни для чего, ни последствий- ничего нет. (Хорошо я в свое время работал с 8.0. Поэтому знаю для чего фигурные скобки используют и, простите за выражение, произвел аналитическое продолжение фигурных скобок.
29 Буратинко
 
07.10.10
10:27
Поля запроса могут либо использоваться в соединениях, либо в качестве полей в вышестоящих секциях "ВЫБРАТЬ". Что сложного в определении нужно ли нам то или иное поле? Самое смешное, что если мы дадим подсказку: дескать это поле может быть не нужным, то программа вдруг поумнеет и все сделает.

Тоже самое касается таблиц: еще можно было представить, что данное объединение используется не для получения полей, а для фильтрации исходной таблицы. Но ведь все объединения ЛЕВЫЕ! Что трудного в самостоятельном определении выборки полей из таблицы?

Вот так и не понял этого функционала прикрученного сбоку.
30 Kashemir
 
07.10.10
10:49
(29) Понимание придет с первым отчетом на запросе "повышенной сложности" :)
31 Буратинко
 
07.10.10
15:52
(30) Причем тут понимание? Когда реально платформа сама может все сделать без дополнительных глупых настроек.
32 Kashemir
 
07.10.10
17:09
(31) Платформа может сделать "сама" только в однозначных ситуациях.
33 le_
 
07.10.10
17:16
Может кто-нибудь привести пример простейшего запроса, в котором не обойтись без описанного выше?
34 Буратинко
 
07.10.10
18:09
(33) думаю платформа не перерабатывалась, а развивалась примитивным дописыванием нового. Вот и получилось, что некоторые куски функционала стали взаимопротиворечивы. Хотя похоже разработчик не хочет тратить на это время.
35 acsent
 
07.10.10
18:12
Скобочки {} - это возможность задать список доступных полей (отборов) для пользователя. Остальное все - побочные эффекты
36 Буратинко
 
07.10.10
18:14
(35) бред какой! хоть со скобочками, хоть без- все равно доступно. А ограничения устанавливаются для каждого поля отдельно в таблице "Поля"