Имя: Пароль:
1C
1С v8
v8: СКД - выражение представления и эффективность его использования
0 vladenoff
 
08.02.12
10:32
Доброе утро.

В СКД запросом выбираю регистр остатков "ТОВАРЫ" (Измерение номенклатура и количество).

У справочника номенклатура есть реквизит АРТИКУЛ.
Хочу для пользователя выводить номенклатуру всегда с артикулом.

Если я напишу напротив поля Номенклатура в представлении:

Номенклатура.Артикул " - " Номенклатура.Наименование

Мне представление на сервере сформируется в одном запросе, либо система после получения данных будет для каждой строки запроса обращаться к базе формируя представления ???

Если да, то тогда как более оптимально сформировать мене нужное представление в СКД?

И ещё "если да" :) В каких случаях вы используете представление?

Спасибо.
1 vladenoff
 
08.02.12
10:33
(0)пардон. Представление = "Выражение Представления"
2 Armando
 
08.02.12
10:34
Включить технологический журнал и посмотреть, не?
3 golden-pack
 
08.02.12
10:35
Я всегда думал что запрос выполняется на клиенте ...
4 vladenoff
 
08.02.12
10:35
(2) тут обсудить как то проще :)
5 vladenoff
 
08.02.12
10:36
(3) Это такая шутка?
6 golden-pack
 
08.02.12
10:37
(3) нет. С чего ему выполнятся на сервере ? Если ты напишешь код в модуле объекта - где он будет выполняться ?
7 vladenoff
 
08.02.12
10:39
(6) Как же запрос может исполняться на клиенте? Что он у клиента выбирать будет? В какой регистр обращаться? Ведь данные то все на сервере.
8 vladenoff
 
08.02.12
10:42
(6) для СКД не дано писать код в модуле :)

СКД очень полезная штука. Начал разбираться в деталях - советую :)
9 Armando
 
08.02.12
10:43
(8) >> СКД очень полезная штука
Мужики-то не знают...)
10 golden-pack
 
08.02.12
10:44
Так же вопрос параметры и отборы.
Параметры - на уровне sql, а отборы видимо выборку запроса фильтруют уже на клиенте.

(8) да ты шо.
11 golden-pack
 
08.02.12
10:45
(8) то что там код не нужно писать - это ты пока еще слишком простые отчетики пишешь. Пример отчет из двух баз по оле.
12 Armando
 
08.02.12
10:46
(10) >> а отборы видимо выборку запроса фильтруют уже на клиенте
Нет. Отборы тож в запрос подставляются, как параметры.
13 golden-pack
 
08.02.12
10:47
(12) Интересно, но замечал что отборы работаю медленне параметров, мб показалось
14 vladenoff
 
08.02.12
10:48
(12) да да... это понятно. а может кто ответить мне по теме?
Пасиб.
15 Armando
 
08.02.12
10:52
(13) Отборы надо тоже уметь правильно готовить. Там есть неочевидные на первый взгляд вещи.
16 vladenoff
 
08.02.12
10:54
(15) Ребята, тема с параметрами и отборами очень интересная, но пожалуйста, можно в отдельной теме.
17 Armando
 
08.02.12
10:58
(14) >> а может кто ответить мне по теме?
Учитывая, что для ссылочных полей СКД автоматически получает представление с сервера в виде дополнительного поля в запросе, то что-то мне подсказывает, если заполнено выражение представления, то именно оно будет подставлено в результирующий запрос (дополнительным полем). Хотя могу ошибаться. Не проверял.

Советую автору проверить. О результатах сообщить здесь). Ветку добавлю в базу знаний.
18 vladenoff
 
08.02.12
11:10
(17)

Да, однозначно. Но! Вопрос немного в другом. В какой период сформируется это представление? Непосредственно в запросе? Либо после обращения к базе по результату запроса будет мне формировать такие себе микро-запросы на каждую строку ?
19 vladenoff
 
08.02.12
11:11
(18)попробую подсмотреть в результирующий макет СКД
21 vladenoff
 
08.02.12
11:36
Первичный запрос СКД (макет):
....
<query>ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.Номенклатура,
   ТоварыНаСкладахОстатки.Качество,
   ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры,
   ТоварыНаСкладахОстатки.СерияНоменклатуры,
   ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки</query>
....

А вот запрос из макета для исполнения на сервере:

....
<query>ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
   ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
   ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК НоменклатураАртикул,
   ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК НоменклатураНаименование
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки</query>
   </dataSet>
....

Таким образом, делаем вывод что все необходимые нам поля формирования представления у нас выбираются в одном запросе и при формировании такого представления на сервере больше нет необходимости обращаться к базе.

Но стоит быть очень внимательным при описании представления с использованием самостоятельно написанными функциями. Они будут исполняться для каждой строки результата запроса. И следует следить чтоб там не было явных и неявных запросов к базе, типа "Товар.*", "перечисление."....

Всем удачи! ;)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.