Добро пожаловать на Ass1s. Пожалуйста, авторизуйтесь или зарегистрируйтесь.

Апр. 16, 2024, 20:49

Вход в систему с именем пользователя, паролем и длиной сессии
Пользователи
  • Всего пользователей: 40
  • Последний: cartblansh
Статистика
  • Всего сообщений: 82
  • Всего тем: 20
  • Онлайн сегодня: 3
  • Максимальный онлайн: 34
  • (Окт. 01, 2023, 18:24 )
Сейчас на форуме
Пользователи: 0
Гостей: 1
Всего: 1
1 гость, 0 пользователей

Разделы

Соединение в таблицах.

Автор nik, Окт. 04, 2023, 09:56

« назад - далее »

nik

Ребята, подскажите, если не сложно, есть к примеру справочник в нем реквизит, который имеет составной тип. В запросе я к нему обращаюсь как ВЫРАЗИТЬ(.... КАК Справочник.Номенклатура), а вот на вкладке соединение, в поле по которому происходит соединение мне тоже нужно использовать конструкцию "ВЫРАЗИТЬ" или не обязательно?

Где Дэн?

Привет.
Операцию приведения типов ВЫРАЗИТЬ – позволяет привести значение составного типа к одному из составляющих это значение типов. А также функцию ВЫРАЗИТЬ() используют для получения результатов нужной длины и точности.

Обычно её используют если обращаются через точку к реквизиту составного поля: Номенклатура.ТвойРеквизит.Номер

В твоем случае вроде как вообще нет смысла использовать ВЫРАЗИТЬ(), только если ты хочешь что бы все остальные значения типов реквизита стали NULL.

А если тебе надо отобрать только элементы с реквизитом типа Справочник.Номенклатура, то в условии где можно написать "ТвойРеквизит ССЫЛКА Справочник.Номенклатура".

Так что думаю тут в соединении Выразить() не имеет смысла.

vb

Цитата: nik от Окт. 04, 2023, 09:56  ...на вкладке соединение, в поле по которому происходит соединение мне тоже нужно использовать конструкцию "ВЫРАЗИТЬ" или не обязательно?
Если не выражать, то, насколько понимаю, в соединении неявно будут все таблицы составного типа участвовать. Поэтому лучше составной тип явно приводить, типа:
ВЫБРАТЬ
    УправленческийОстатки.КоличествоОстаток КАК КоличествоОстаток
ИЗ
    РегистрБухгалтерии.Управленческий.Остатки КАК УправленческийОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки КАК УправленческийОстатки1
        ПО (ВЫРАЗИТЬ(УправленческийОстатки.Субконто1 КАК Документ.ПриходнаяНакладная).Организация = ВЫРАЗИТЬ(УправленческийОстатки1.Субконто1 КАК Документ.КупляПродажа).Покупатель)

Где Дэн?

(ВЫРАЗИТЬ(УправленческийОстатки.Субконто1 КАК Документ.ПриходнаяНакладная).Организация
Да,но это верно только если вроде обращаемся через точку к реквизитам составного поля (измерения, реквизита). Как раз в этом примере "УправленческийОстатки.Субконто1.Организация". А в случае соединения просто по полю - вроде как смысла нет.

Какие есть мысли у кого на счет этого?

vb

Берем вышеупомянутый запрос и запускаем его в 2х вариантах, с явным приведением типа и без, и смотрим полный план запроса в SQL Server Profiler.
Счет Плана счетов имеет 3 субконто и признак учета Количественный


1) с явным приведением


2) без приведения


Обращаем внимание на нижнюю ветку: с явным выражением мы имеем объединение циклов по 2м таблицам, с отключенным - по 3м. Вроде, практика сходится с логикой)

Где Дэн?

Тут да, все так. Так как есть разыменование через точку от составного типа. А вот в запроса автора поста надо проверить - так как там нету никакого разыменование, а есть просто реквизит составного типа. Я к тому, что если нету "реквизитсоставноготипа.какой-тоегореквизит" то и выразить не нужно особо использовать...

nik

Цитата: vb от Окт. 05, 2023, 12:40  Берем вышеупомянутый запрос и запускаем его в 2х вариантах, с явным приведением типа и без, и смотрим полный план запроса в SQL Server Profiler.
Счет Плана счетов имеет 3 субконто и признак учета Количественный


1) с явным приведением


2) без приведения


Обращаем внимание на нижнюю ветку: с явным выражением мы имеем объединение циклов по 2м таблицам, с отключенным - по 3м. Вроде, практика сходится с логикой)

Я так и думал, благодарю тебя за развернутый ответ, круто !!!!

Где Дэн?

nik, и все таки я бы проверил именно твой вариант. В интернете и на сайте 1с все пишут про соединение все возможных таблиц составного поля, только в том случае, когда от него пытаются получить значение "через точку". Конкретно если обращаться к этому реквизиту и по нему делать соединение в запросе - то необходимости в выразить быть не должно, для оптимизации запроса. Есть где почитать про этот случай?

Где Дэн?

Блин, даже самому интересно стало - нужно ли в этом случае использовать выразить()...

Чат Полянка

Cheese_0:
2023-10-12, 12:25:42
Datamax особенно
Где Дэн?:
2023-10-12, 09:20:15
этикетки и принтеры это то еще удовольствие  ;D
Cheese_0:
2023-10-11, 12:07:24
Уууу я вернулся, 2 дня принтер для этикеток пытался настроить хахаха
Где Дэн?:
2023-10-09, 20:58:50
Потихоньку наполняю форум полезными темами и решениями, с которыми сам сталкиваюсь на практике.
Где Дэн?:
2023-10-08, 19:36:57
видос закинул веселый) на ютубчике - немного творчества в выходные
Где Дэн?:
2023-10-04, 23:22:59
Для незарегистрированных пользователей так же будет потихонечку пополняться пул обработок, доступных для скачивания и без регистрации....
Где Дэн?:
2023-10-04, 22:37:42
да, есть такое. Пускай здесь пока побудет - вроде не мешается и если что то можно блок с ним свернуть...что бы глаза не мазолил
Cheese_0:
2023-10-04, 22:35:59
Сразу чат стал удобнее
Где Дэн?:
2023-10-04, 22:33:31
файлы немного накидываю для зарегистрированных пользователей. Думаю скоро весь пул файлов полезных что есть здесь будет
Где Дэн?:
2023-10-04, 22:32:44
че за звезды? В принципе если так поговорить кому надо или спросить по быстрому оперативно - при наличии народа на сайте, то чат думаю удобно
Где Дэн?:
2023-10-04, 22:29:34
Да, перетащил его в другой блок) ;D
Cheese_0:
2023-10-04, 22:27:17
Где 5 звезд поставить?
Cheese_0:
2023-10-04, 22:27:06
ооооо чатик стал больше
Где Дэн?:
2023-10-04, 07:40:10
Что бы научиться программировать нужно всего лишь раз в день по утрам... ;D ;D
1cgod:
2023-10-03, 22:56:39
как же приятен форум без всяких реклам)