| 
    
        
     
     | 
    
  | 
Обращение через точку в запросе | ☑ | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 
    0
    
        slavawashere    
     21.01.21 
            ✎
    12:18 
 | 
    
 
        Во всех статьях про запросы 1С  пишут про "смертный грех" - обращение к данным через точку, которое порождает вложенный запрос и влечет замедление запроса.
 
        Но я не совсем понимаю до конца про что это: Вот есть у нас регистр "ФактическоеРабочееВремяСотрудников", а там есть измерение "Сотрудник" с типом "Справочник.ФизическиеЛица", а у этого справочника есть реквизит "Магазин" - чтобы понимать где работает этот сотрудник. И вот я пишу запрос к этому регистру, пытаясь выяснить всех работающих сотрудников определенного магазина (ну такая задача - надо именно через этот регистр, с учетом еще некоторых сведений из этого регистра, которые я опустил в запросе для простоты) ВЫБРАТЬ ФактическоеРабочееВремяСотрудников.Сотрудник КАК Сотрудник ИЗ РегистрНакопления.ФактическоеРабочееВремяСотрудников КАК ФактическоеРабочееВремяСотрудников ГДЕ ФактическоеРабочееВремяСотрудников.Сотрудник.Магазин = &Магазин Я тут совершил этот грех или нет? И если да, то как это исправить? Как наложить такое условие не обращаясь через две точки? Делать сначала запрос к справочнику Физ-лица, выбирать оттуда сотрудников определенного магазина и потом в запросе к регистру выбирать сотрудников только из полученного ранее списка? А не будет ли это дольше в конечном итоге?  | 
||||||||||
| 
    1
    
        ДенисЧ    
     21.01.21 
            ✎
    12:19 
 | 
         
        "Во всех статьях про запросы 1С  пишут про "смертный грех" - обращение к данным через точку"
 
        Не читай всех статей. Читай вменяемые.  | 
||||||||||
| 
    2
    
        ДенисЧ    
     21.01.21 
            ✎
    12:20 
 | 
         
        "Я тут совершил этот грех или нет?"
 
        Ты совершил грех, появившись на этот свет (гугле: первородный грех). А вообще - надо просто понимать, во что в скуле превращается твой запрос. В данном конкретном случае - ничего страшного. А вот если бы ты написал регОбороты.Регистратор.Комментарий - тут уже 10 лет строгого расстрела...  | 
||||||||||
| 
    3
    
        DrShad    
     21.01.21 
            ✎
    12:21 
 | 
         
        (2) +1
 
        (0) в твоем случае будет неявное соединение, но если ты даже сделаешь явное, то план запроса не изменится  | 
||||||||||
| 
    4
    
        Масянька    
     21.01.21 
            ✎
    12:22 
 | 
         
        (2) Не-е... 20 лет без права переписки.     
         | 
||||||||||
| 
    5
    
        trad    
     21.01.21 
            ✎
    12:24 
 | 
         
        (2) а как надо?     
         | 
||||||||||
| 
    6
    
        Hans    
     21.01.21 
            ✎
    12:24 
 | 
         
        (2) В чем проблема регОбороты.Регистратор.Комментарий  от ФактическоеРабочееВремяСотрудников.Сотрудник.Магазин?     
         | 
||||||||||
| 
    7
    
        DrShad    
     21.01.21 
            ✎
    12:24 
 | 
         
        другими словами, если у тебя измерение Сотрудник не составного типа то норм     
         | 
||||||||||
| 
    8
    
        DrShad    
     21.01.21 
            ✎
    12:25 
 | 
         
        (6) регистратор составного типа - в итоге запрос превратится в соединения с "миллионом" таблиц     
         | 
||||||||||
| 
    9
    
        trad    
     21.01.21 
            ✎
    12:26 
 | 
         
        (8) этот "миллион" разве не ограничен таблицами возможных регистраторов     
         | 
||||||||||
| 
    10
    
        Hans    
     21.01.21 
            ✎
    12:27 
 | 
         
        (8) что он со всеми документами будет соединяться даже теми которые не указаны как регистраторы?     
         | 
||||||||||
| 
    11
    
        mikecool    
     21.01.21 
            ✎
    12:28 
 | 
         
        (8) ну не совсем миллионом, но напакостить может     
         | 
||||||||||
| 
    12
    
        DrShad    
     21.01.21 
            ✎
    12:28 
 | 
         
        (9) ограничен, но тогда все зависит от регистра
 
        к примеру к регистру бухгалтерии запрос?  | 
||||||||||
| 
    13
    
        DrShad    
     21.01.21 
            ✎
    12:28 
 | 
         
        (11) ну так я же и обернул в кавычки     
         | 
||||||||||
| 
    14
    
        Hans    
     21.01.21 
            ✎
    12:29 
 | 
         
        регОбороты.Регистратор.Комментарий - эта тема плохая если регистраторов много, а комментарий есть только у одного документа, двух документов.     
         | 
||||||||||
| 
    15
    
        sapphire    
     21.01.21 
            ✎
    12:29 
 | 
         
        Анафема     
        это смертный грех      | 
||||||||||
| 
    16
    
        trad    
     21.01.21 
            ✎
    12:30 
 | 
         
        (12) на что заменить "регОбороты.Регистратор.Комментарий"
 
        если надо в запросе получить комментарии регистраторов?  | 
||||||||||
| 
    17
    
        ДенисЧ    
     21.01.21 
            ✎
    12:30 
 | 
         
        (10) Со всеми регистраторами     
         | 
||||||||||
| 
    18
    
        Timon1405    
     21.01.21 
            ✎
    12:38 
 | 
         
        (16) использовать РС РеестрДокументов если у вас типовая УТ/КА на УФ итд или посмотреть как это сделано в последней типовой     
         | 
||||||||||
| 
    19
    
        trad    
     21.01.21 
            ✎
    12:44 
 | 
         
        (18) хм. Но в гипотетической нетиповой конфе не завезли этот регистр.     
         | 
||||||||||
| 
    20
    
        Сергиус    
     21.01.21 
            ✎
    12:51 
 | 
         
        (0)Контроль во фреше такой запрос не прошел бы)     
         | 
||||||||||
| 
    21
    
        xXeNoNx    
     21.01.21 
            ✎
    13:00 
 | 
         
        >>Я тут совершил этот грех или нет?
 
        Да, в некоторых случаях Например, кто-то хранит двоичные данные в справочниках какие-нить например, кто-то будет хранить двоичные данные в справочнике Так что да, это смертный грех  | 
||||||||||
| 
    22
    
        xXeNoNx    
     21.01.21 
            ✎
    13:02 
 | 
         
        Забыл
 
        На кол его! это смертный грех      | 
||||||||||
| 
    23
    
        Кир Пластелинин    
     21.01.21 
            ✎
    13:04 
 | 
         
        (7) нет никаких гарантий, что по прошествии времени оно (измерение) не станет составным по каким-либо причинам.     
         | 
||||||||||
| 
    24
    
        youalex    
     21.01.21 
            ✎
    13:05 
 | 
         
        (0) не вложенный запрос, а соединение. 
 
        в твоем примере это нормально, тяжесть греха зависит от того, является ли тип поля составным. это не смертный грех, но...      | 
||||||||||
| 
    25
    
        xXeNoNx    
     21.01.21 
            ✎
    13:09 
 | 
         
        Сделай цикл на 1000, а в нем запрос, проверь свой запрос и этот:
 
        ВЫБРАТЬ ФактическоеРабочееВремяСотрудников.Сотрудник КАК Сотрудник ИЗ РегистрНакопления.ФактическоеРабочееВремяСотрудников КАК ФактическоеРабочееВремяСотрудников ВНУТРЕННЕЕ Справочник.Сотрудники КАК спрСотрудники ПО ФактическоеРабочееВремяСотрудников.Сотрудник = спрСотрудники.Ссылка И спрСотрудники.Магазин = &Магазин Скинь результат сюда  | 
||||||||||
| 
    26
    
        ДенисЧ    
     21.01.21 
            ✎
    13:10 
 | 
         
        (25) Запрос в цикле? 15 лет.     
         | 
||||||||||
| 
    27
    
        xXeNoNx    
     21.01.21 
            ✎
    13:12 
 | 
         
        (26) Как думаешь корректно замерить время двух запросов на 5-6 пользователях получится?     
         | 
||||||||||
| 
    28
    
        xXeNoNx    
     21.01.21 
            ✎
    13:14 
 | 
         
        +(27) В том и дело что 15 лет и знаю с чем готовить запрос в цикле.     
         | 
||||||||||
| 
    29
    
        Kassern    
     21.01.21 
            ✎
    13:14 
 | 
         
        (26) тут аж целая ветка была по поводу запросов в цикле, всех к "стенке"?))
 
        Запрос в цикле  | 
||||||||||
| 
    30
    
        xXeNoNx    
     21.01.21 
            ✎
    13:15 
 | 
         
        (29) как раз там отметился     
         | 
||||||||||
| 
    31
    
        Timon1405    
     21.01.21 
            ✎
    14:07 
 | 
         
        (19) в негипотетической БСП он тоже есть, а у писателей нетленки есть варианты взять его оттуда, изобрести его заново или страдать)     
         | 
||||||||||
| 
    32
    
        Жан Пердежон    
     21.01.21 
            ✎
    14:08 
 | 
         
        (0) слышал звон...     
         | 
||||||||||
| 
    33
    
        xXeNoNx    
     21.01.21 
            ✎
    14:19 
 | 
         
        (0) Есть результат? по тестированию в (25)?     
         | 
||||||||||
| 
    34
    
        slavawashere    
     21.01.21 
            ✎
    14:50 
 | 
         
        (25) у меня в базе кстати около 1000 физлиц и разницы между твоим запросом и моим - вообще нет     
         | 
||||||||||
| 
    35
    
        youalex    
     21.01.21 
            ✎
    14:52 
 | 
         
        (34) в профайлере еще сравни (если скуль)     
         | 
||||||||||
| 
    36
    
        ViSo76    
     21.01.21 
            ✎
    15:00 
 | 
         
        (0) Грез не совершил, если .Магазин =< не составной тип из десятков справочников и ты точно знаешь тип входящего значения. Если тебе будет легче, могу выписать индульгенцию. (25) Твой запрос такой же как и в (0), если .Магазин не составной тип     
         | 
||||||||||
| 
    37
    
        slavawashere    
     21.01.21 
            ✎
    15:08 
 | 
         
        (36) 1С  сам преобразует запросы через точку  к внутреннему соединению?  или скуль?     
         | 
||||||||||
| 
    38
    
        ДенисЧ    
     21.01.21 
            ✎
    15:09 
 | 
         
        (37) Скуль про твои точки даже в кошмарных снах не видел...     
         | 
||||||||||
| 
    39
    
        ViSo76    
     21.01.21 
            ✎
    15:14 
 | 
         
        (37) 1с разумеется, ms sql не знает русского, да и итоги тоже нет в ms sql. Объект Запрос всегда преобразует в синтаксис той базы, с которой работает 1с. Конструктор запроса преобразует {}, передаёт текст в объект запрос скорее всего )     
         | 
||||||||||
| 
    40
    
        ГдеСобака Зарыта    
     21.01.21 
            ✎
    15:28 
 | 
         
        (0) Архитектура говно. Магазин должен быть измерением регистра.     
         | 
||||||||||
| 
    41
    
        trad    
     21.01.21 
            ✎
    15:34 
 | 
         
        (31) Страдать - это натягивать БСП туда где она не нужна, или заниматься денормализацией данных там где она (денормализация) не нужна.
 
        Ничего не имею против денормализации, она необходима там где на самом деле оправдана. Но не по каждому поводу.  | 
||||||||||
| 
    42
    
        trad    
     21.01.21 
            ✎
    15:37 
 | 
         
        (40) Глупость полная.
 
        Магазин не должен, а может быть измерением. Завтра ему понадобится отобрать по полу сотрудника. Пол тоже потащим в измерение?  | 
||||||||||
| 
    43
    
        ГдеСобака Зарыта    
     21.01.21 
            ✎
    15:39 
 | 
         
        (42) Пол не станем. Пол не изменен. А вот сотрудник может перейти работать в другой магазин, и что ТС получит своим запросом?     
         | 
||||||||||
| 
    44
    
        trad    
     21.01.21 
            ✎
    15:48 
 | 
         
        (43) Если смотреть в этом ключе - согласен.
 
        (Я же еще в контексте обсуждения точки)  | 
||||||||||
| 
    45
    
        Anton1307    
     21.01.21 
            ✎
    15:52 
 | 
         
        (43) Что значит "пол не изменен". Ты из какого века свалился?
 
        Я, кстати, ещё лет 5 назад на партнёрском форуме "1С" задал вопрос, как в ЗУП отразить смену пола сотрудником. Техподдержка ещё думает. По теме - если обращаешься к какому ни-будь небольшому справочнику на 10-100 записей - через точку не смертный грех. А вот если через точку регистратора регистра - смертный это не смертный грех, но...      | 
||||||||||
| 
    46
    
        ГдеСобака Зарыта    
     21.01.21 
            ✎
    16:21 
 | 
         
        (45) Тех поддержка не думает. Они просто не смогли подобрать литературных слов, чтобы описать куда тебе стоит идти, поэтому ничего и не ответили.     
         | 
||||||||||
| 
    47
    
        fisher    
     21.01.21 
            ✎
    16:25 
 | 
         
        Грех только если через поле составного типа. А так - какая альтернатива? Явное соединение? И какой смысл при наличии более удобного синтаксиса?     
        всегда так делаю      | 
||||||||||
| 
    48
    
        Temai    
     21.01.21 
            ✎
    16:26 
 | 
         
        Для кого же придумали это:
 
        Выразить(Регистратор КАК Документ.Поступление).Склад всегда так делаю      | 
||||||||||
| 
    49
    
        fisher    
     21.01.21 
            ✎
    16:30 
 | 
         
        (0) По сабжевому запросу: если отбор по магазину обладает высокой селективностью в таблице ФактическоеРабочееВремяСотрудников и часто используется, то правильным вариантом было бы иметь его в измерениях. Тем более, что один и тот же сотрудник может переходить из магазина в магазин. А так, если уже припекло, то какая уже разница - через точку обращаться или явное соединение присобачивать?     
         | 
||||||||||
| 
    50
    
        slavawashere    
     21.01.21 
            ✎
    16:50 
 | 
         
        (49) (40) (42) В регистре есть измерение "Магазин", чтобы отражать где фактически работал сотрудник в этот день.  Но также есть и реквизит "Магазин" в справочнике "Физические Лица", чтобы указать "родной" магазин сотрудника, где он работает постоянно.  И требовалось вывести именно подробности работы сотрудников во всех остальных магазинах, которые обычно "приписаны" к родному магазину.     
         | 
||||||||||
| 
    51
    
        slavawashere    
     21.01.21 
            ✎
    16:53 
 | 
         
        вопрос же был о правомерности такого обращения через точку к "реквизитам реквизитов"     
         | 
||||||||||
| 
    52
    
        МихаилМ    
     21.01.21 
            ✎
    16:55 
 | 
         
        чем точнее и однозначней 1с8 указать текст запроса, тем предсказуемым и стабильным будет результат преобразования запроса 1с в запрос субд.
 
        1с аж два раза умудрилась накосячить с разименованием через точку. ждем третьего. это не смертный грех, но...      | 
||||||||||
| 
    53
    
        xXeNoNx    
     21.01.21 
            ✎
    17:20 
 | 
         
        (34) да ну, не верю     
         | 
||||||||||
| 
    54
    
        fisher    
     21.01.21 
            ✎
    17:41 
 | 
         
        (51) Как уже отвечали, критерием "зашкварности" является то, во что такой запрос преобразуется при посылке в СУБД. В сабжевом случае это будет просто неявное соединение со справочником сотрудников. А следовательно - все ок.     
         | 
||||||||||
| 
    55
    
        aka MIK    
     21.01.21 
            ✎
    19:29 
 | 
         
        (20) что значит это словосочетание?     
         | 
||||||||||
| 
    56
    
        aka MIK    
     21.01.21 
            ✎
    19:29 
 | 
         
        (52) интересно, и как же 1С тут могу накосячить?     
         | 
||||||||||
| 
    57
    
        sikuda    
     21.01.21 
            ✎
    19:42 
 | 
         
        (0) Условия на регистры надо писать в параметрах таблицы, а не в секции ГДЕ     
        это смертный грех      | 
||||||||||
| 
    58
    
        sikuda    
     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 джоинов с оной и тоже таблицей.  | 
||||||||||
| 
    60
    
        rsv    
     21.01.21 
            ✎
    20:20 
 | 
         
        (0) пишите по влзможности всегда явные джойны. Текста будет поболее конечно.
 
        А по побыстрому и так софдет.  | 
||||||||||
| 
    61
    
        slavawashere    
     25.01.21 
            ✎
    19:01 
 | 
         
        (15) Так это же не виртуальная таблица регистра,  разве ей можно передать параметры?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |