Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обращение через точку в запросе

Обращение через точку в запросе
Я
   slavawashere
 
21.01.21 - 12:18
1. это смертный грех38% (3)
2. это не смертный грех, но...38% (3)
3. всегда так делаю25% (2)
Всего мнений: 8

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

Но я не совсем понимаю до конца про что это:  Вот есть у нас регистр "ФактическоеРабочееВремяСотрудников", а там есть измерение "Сотрудник" с типом "Справочник.ФизическиеЛица", а у этого справочника есть реквизит "Магазин" - чтобы понимать где  работает этот сотрудник.

И вот я пишу запрос к этому регистру, пытаясь выяснить всех работающих сотрудников определенного магазина (ну такая задача - надо именно через этот регистр, с учетом еще некоторых сведений из этого регистра, которые я опустил в запросе для простоты)

ВЫБРАТЬ
    ФактическоеРабочееВремяСотрудников.Сотрудник КАК Сотрудник
ИЗ
    РегистрНакопления.ФактическоеРабочееВремяСотрудников КАК ФактическоеРабочееВремяСотрудников
ГДЕ

    ФактическоеРабочееВремяСотрудников.Сотрудник.Магазин = &Магазин

Я тут совершил этот грех или нет?  И если да, то как это исправить?  Как наложить такое условие не обращаясь через две точки?  Делать сначала запрос к справочнику Физ-лица, выбирать оттуда сотрудников определенного магазина и потом в запросе к регистру  выбирать сотрудников только из полученного ранее списка?  А не будет ли это дольше в конечном итоге?
   ДенисЧ
 
1 - 21.01.21 - 12:19
"Во всех статьях про запросы 1С  пишут про "смертный грех" - обращение к данным через точку"

Не читай всех статей. Читай вменяемые.
   ДенисЧ
 
2 - 21.01.21 - 12:20
"Я тут совершил этот грех или нет?"
Ты совершил грех, появившись на этот свет (гугле: первородный грех).

А вообще - надо просто понимать, во что в скуле превращается твой запрос.
В данном конкретном случае - ничего страшного.

А вот если бы ты написал регОбороты.Регистратор.Комментарий - тут уже 10 лет строгого расстрела...
   DrShad
 
3 - 21.01.21 - 12:21
(2) +1
(0) в твоем случае будет неявное соединение, но если ты даже сделаешь явное, то план запроса не изменится
   Масянька
 
4 - 21.01.21 - 12:22
(2) Не-е... 20 лет без права переписки.
   trad
 
5 - 21.01.21 - 12:24
(2) а как надо?
   Hans
 
6 - 21.01.21 - 12:24
(2) В чем проблема регОбороты.Регистратор.Комментарий  от ФактическоеРабочееВремяСотрудников.Сотрудник.Магазин?
   DrShad
 
7 - 21.01.21 - 12:24
другими словами, если у тебя измерение Сотрудник не составного типа то норм
   DrShad
 
8 - 21.01.21 - 12:25
(6) регистратор составного типа - в итоге запрос превратится в соединения с "миллионом" таблиц
   trad
 
9 - 21.01.21 - 12:26
(8) этот "миллион" разве не ограничен таблицами возможных регистраторов
   Hans
 
10 - 21.01.21 - 12:27
(8) что он со всеми документами будет соединяться даже теми которые не указаны как регистраторы?
   mikecool
 
11 - 21.01.21 - 12:28
(8) ну не совсем миллионом, но напакостить может
   DrShad
 
12 - 21.01.21 - 12:28
(9) ограничен, но тогда все зависит от регистра
к примеру к регистру бухгалтерии запрос?
   DrShad
 
13 - 21.01.21 - 12:28
(11) ну так я же и обернул в кавычки
   Hans
 
14 - 21.01.21 - 12:29
регОбороты.Регистратор.Комментарий - эта тема плохая если регистраторов много, а комментарий есть только у одного документа, двух документов.
   sapphire
 
15 - 21.01.21 - 12:29
Анафема

1. это смертный грех
   trad
 
16 - 21.01.21 - 12:30
(12) на что заменить "регОбороты.Регистратор.Комментарий"
если надо в запросе получить комментарии регистраторов?
   ДенисЧ
 
17 - 21.01.21 - 12:30
(10) Со всеми регистраторами
   Timon1405
 
18 - 21.01.21 - 12:38
(16) использовать РС РеестрДокументов если у вас типовая УТ/КА на УФ итд или посмотреть как это сделано в последней типовой
   trad
 
19 - 21.01.21 - 12:44
(18) хм. Но в гипотетической нетиповой конфе не завезли этот регистр.
   Сергиус
 
20 - 21.01.21 - 12:51
(0)Контроль во фреше такой запрос не прошел бы)
   xXeNoNx
 
21 - 21.01.21 - 13:00
>>Я тут совершил этот грех или нет?
Да, в некоторых случаях

Например, кто-то хранит двоичные данные в справочниках какие-нить

например, кто-то будет хранить двоичные данные в справочнике

Так что да, это смертный грех
   xXeNoNx
 
22 - 21.01.21 - 13:02
Забыл
На кол его!

1. это смертный грех
   Кир Пластелинин
 
23 - 21.01.21 - 13:04
(7) нет никаких гарантий, что по прошествии времени оно (измерение) не станет составным по каким-либо причинам.
   youalex
 
24 - 21.01.21 - 13:05
(0) не вложенный запрос, а соединение.
в твоем примере это нормально, тяжесть греха зависит от того, является ли тип поля составным.

2. это не смертный грех, но...
   xXeNoNx
 
25 - 21.01.21 - 13:09
Сделай цикл на 1000, а в нем запрос, проверь свой запрос и этот:
ВЫБРАТЬ
    ФактическоеРабочееВремяСотрудников.Сотрудник КАК Сотрудник
ИЗ
    РегистрНакопления.ФактическоеРабочееВремяСотрудников КАК ФактическоеРабочееВремяСотрудников
    ВНУТРЕННЕЕ Справочник.Сотрудники КАК спрСотрудники
        ПО ФактическоеРабочееВремяСотрудников.Сотрудник = спрСотрудники.Ссылка
            И спрСотрудники.Магазин = &Магазин

Скинь результат сюда
   ДенисЧ
 
26 - 21.01.21 - 13:10
(25) Запрос в цикле? 15 лет.
   xXeNoNx
 
27 - 21.01.21 - 13:12
(26) Как думаешь корректно замерить время двух запросов на 5-6 пользователях получится?
   xXeNoNx
 
28 - 21.01.21 - 13:14
+(27) В том и дело что 15 лет и знаю с чем готовить запрос в цикле.
   Kassern
 
29 - 21.01.21 - 13:14
(26) тут аж целая ветка была по поводу запросов в цикле, всех к "стенке"?))
Запрос в цикле
   xXeNoNx
 
30 - 21.01.21 - 13:15
(29) как раз там отметился
 
 Рекламное место пустует
   Timon1405
 
31 - 21.01.21 - 14:07
(19) в негипотетической БСП он тоже есть, а у писателей нетленки есть варианты взять его оттуда, изобрести его заново или страдать)
   Жан Пердежон
 
32 - 21.01.21 - 14:08
(0) слышал звон...
   xXeNoNx
 
33 - 21.01.21 - 14:19
(0) Есть результат? по тестированию в (25)?
   slavawashere
 
34 - 21.01.21 - 14:50
(25) у меня в базе кстати около 1000 физлиц и разницы между твоим запросом и моим - вообще нет
   youalex
 
35 - 21.01.21 - 14:52
(34) в профайлере еще сравни (если скуль)
   ViSo76
 
36 - 21.01.21 - 15:00
(0) Грез не совершил, если .Магазин =< не составной тип из десятков справочников и ты точно знаешь тип входящего значения. Если тебе будет легче, могу выписать индульгенцию. (25) Твой запрос такой же как и в (0), если .Магазин не составной тип
   slavawashere
 
37 - 21.01.21 - 15:08
(36) 1С  сам преобразует запросы через точку  к внутреннему соединению?  или скуль?
   ДенисЧ
 
38 - 21.01.21 - 15:09
(37) Скуль про твои точки даже в кошмарных снах не видел...
   ViSo76
 
39 - 21.01.21 - 15:14
(37) 1с разумеется, ms sql не знает русского, да и итоги тоже нет в ms sql. Объект Запрос всегда преобразует в синтаксис той базы, с которой работает 1с. Конструктор запроса преобразует {}, передаёт текст в объект запрос скорее всего )
   ГдеСобакаЗарыта
 
40 - 21.01.21 - 15:28
(0) Архитектура говно. Магазин должен быть измерением регистра.
   trad
 
41 - 21.01.21 - 15:34
(31) Страдать - это натягивать БСП туда где она не нужна, или заниматься денормализацией данных там где она (денормализация) не нужна.
Ничего не имею против денормализации, она необходима там где на самом деле оправдана. Но не по каждому поводу.
   trad
 
42 - 21.01.21 - 15:37
(40) Глупость полная.
Магазин не должен, а может быть измерением.

Завтра ему понадобится отобрать по полу сотрудника. Пол тоже потащим в измерение?
   ГдеСобакаЗарыта
 
43 - 21.01.21 - 15:39
(42) Пол не станем. Пол не изменен. А вот сотрудник может перейти работать в другой магазин, и что ТС получит своим запросом?
   trad
 
44 - 21.01.21 - 15:48
(43) Если смотреть в этом ключе - согласен.
(Я же еще в контексте обсуждения точки)
   Anton1307
 
45 - 21.01.21 - 15:52
(43) Что значит "пол не изменен". Ты из какого века свалился?
Я, кстати, ещё лет 5 назад на партнёрском форуме "1С" задал вопрос, как в ЗУП отразить смену пола сотрудником.
Техподдержка ещё думает.

По теме - если обращаешься к какому ни-будь небольшому справочнику на 10-100 записей - через точку не смертный грех.
А вот если через точку регистратора регистра - смертный

2. это не смертный грех, но...
   ГдеСобакаЗарыта
 
46 - 21.01.21 - 16:21
(45) Тех поддержка не думает. Они просто не смогли подобрать литературных слов, чтобы описать куда тебе стоит идти, поэтому ничего и не ответили.
   fisher
 
47 - 21.01.21 - 16:25
Грех только если через поле составного типа. А так - какая альтернатива? Явное соединение? И какой смысл при наличии более удобного синтаксиса?

3. всегда так делаю
   Temai
 
48 - 21.01.21 - 16:26
Для кого же придумали это:
Выразить(Регистратор КАК Документ.Поступление).Склад

3. всегда так делаю
   fisher
 
49 - 21.01.21 - 16:30
(0) По сабжевому запросу: если отбор по магазину обладает высокой селективностью в таблице ФактическоеРабочееВремяСотрудников и часто используется, то правильным вариантом было бы иметь его в измерениях. Тем более, что один и тот же сотрудник может переходить из магазина в магазин. А так, если уже припекло, то какая уже разница - через точку обращаться или явное соединение присобачивать?
   slavawashere
 
50 - 21.01.21 - 16:50
(49) (40) (42) В регистре есть измерение "Магазин", чтобы отражать где фактически работал сотрудник в этот день.  Но также есть и реквизит "Магазин" в справочнике "Физические Лица", чтобы указать "родной" магазин сотрудника, где он работает постоянно.  И требовалось вывести именно подробности работы сотрудников во всех остальных магазинах, которые обычно "приписаны" к родному магазину.
   slavawashere
 
51 - 21.01.21 - 16:53
вопрос же был о правомерности такого обращения через точку к "реквизитам реквизитов"
   МихаилМ
 
52 - 21.01.21 - 16:55
чем точнее и однозначней 1с8 указать текст запроса, тем предсказуемым и стабильным будет результат преобразования запроса 1с в запрос субд.

1с аж два раза умудрилась накосячить с разименованием через точку. ждем третьего.

2. это не смертный грех, но...
   xXeNoNx
 
53 - 21.01.21 - 17:20
(34) да ну, не верю
   fisher
 
54 - 21.01.21 - 17:41
(51) Как уже отвечали, критерием "зашкварности" является то, во что такой запрос преобразуется при посылке в СУБД. В сабжевом случае это будет просто неявное соединение со справочником сотрудников. А следовательно - все ок.
   aka MIK
 
55 - 21.01.21 - 19:29
(20) что значит это словосочетание?
   aka MIK
 
56 - 21.01.21 - 19:29
(52) интересно, и как же 1С тут могу накосячить?
   sikuda
 
57 - 21.01.21 - 19:42
(0) Условия на регистры надо писать в параметрах таблицы, а не в секции ГДЕ

1. это смертный грех
   sikuda
 
58 - 21.01.21 - 19:44
(56) Почитайте Нуралиева о великих возможностях составных типов, а потом современные требования 1сфреш
   МихаилМ
 
59 - 21.01.21 - 19:46
(56) аж 2 раза умудрились, как в 1с77 , при обращении через точку использовать не одну таблицу а создавать но вое соединение с тойже

если написано
.таб.рекв1,

.таб.рекв2

то 1с8 ламеняла на left (outer) join таб1 (as tab).рекв1
+left (outer) join таб2 (as tab).рекв2

если N реквизитов - то N джоинов с оной и тоже таблицей.
   rsv
 
60 - 21.01.21 - 20:20
(0) пишите по влзможности всегда явные джойны. Текста будет поболее конечно.
А по побыстрому и так софдет.
 
 Рекламное место пустует
   slavawashere
 
61 - 25.01.21 - 19:01
(15) Так это же не виртуальная таблица регистра,  разве ей можно передать параметры?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.