Имя: Пароль:
1C
 
Зачем здесь соединение со справочником Сотрудники?
0 Lama12
 
07.11.25
13:03
Кусочек запроса из СКД отчета "Состояния сотрудников" из ERP.
Может кто объяснить, зачем здесь соединение со справочником сотрудники, если в регистре измерение Сотрудник не составного типа?

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СостоянияСотрудников.Период КАК Период,
    СостоянияСотрудников.ДействуетДо КАК ДействуетДо,
    СостоянияСотрудников.Сотрудник КАК Сотрудник,
    ВЫБОР
        КОГДА СостоянияСотрудников.ВидВремени = ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ПустаяСсылка)
            ТОГДА СостоянияСотрудников.Состояние
        ИНАЧЕ СостоянияСотрудников.ВидВремени
    КОНЕЦ КАК Состояние,
    ВЫБОР
        КОГДА СостоянияСотрудников.Период > &НачалоПериода
            ТОГДА СостоянияСотрудников.Период
        ИНАЧЕ &НачалоПериода
    КОНЕЦ КАК НачалоПодсчета,
    ВЫБОР
        КОГДА СостоянияСотрудников.ДействуетДо < &ОкончаниеПериода
                И СостоянияСотрудников.ДействуетДо <> ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА СостоянияСотрудников.ДействуетДо
        ИНАЧЕ &ОкончаниеПериода
    КОНЕЦ КАК ОкончаниеПодсчета,
    СостоянияСотрудников.ОкончаниеПредположительно КАК ОкончаниеПредположительно
ПОМЕСТИТЬ ВТСостоянияСотрудников
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
        ПО СостоянияСотрудников.Сотрудник = Сотрудники.Ссылка
ГДЕ
    СостоянияСотрудников.Период < &ОкончаниеПериода
    И (СостоянияСотрудников.ДействуетДо >= &НачалоПериода
            ИЛИ СостоянияСотрудников.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))
    И СостоянияСотрудников.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)
1 PLUT
 
гуру
07.11.25
13:09
(0) работает? ничего не трогай
2 2S
 
07.11.25
13:12
Видимо когда-то было обращение к реквизитам справочника.
3 Волшебник
 
07.11.25
13:14
(2) Обращаться к реквизитам справочника надо так: СостоянияСотрудников.Сотрудник.Реквизит
4 программистище
 
07.11.25
13:15
(0) работа закончилась, нужно докопаться до мелочи?
5 программистище
 
07.11.25
13:17
(3) СостоянияСотрудников. не хранит структуру справочника Сотрудники, что приведет к неявному соединению с таблицей справочника
это плохая логика, доверять платформе?!
6 Волшебник
 
07.11.25
13:20
(5) Неявные соединения — это хорошие соединения. Пользуйтесь возможностями платформы!
7 Fragster
 
гуру
07.11.25
13:23
надо смотреть что в настройках структуры СКД.
8 Garykom
 
гуру
07.11.25
13:31
(0) Для отборов СКД по сотрудникам
9 Lama12
 
07.11.25
13:32
(7) Ага... Значит что-то с особенностями работы СКД. Дальше разберусь. Спасибо за направление.
10 Lama12
 
07.11.25
13:33
(8) Предполагал, но не был уверен.  Спасибо. Вместе с (7) картинка сложилась.
11 программистище
 
07.11.25
14:18
(6) так-то согласен, если платформа позволяет, значит можно
12 Ненавижу 1С
 
гуру
07.11.25
14:27
RLS у регистра и справочника разные (см. ПриЗаполненииОграниченияДоступа). Будет ограничиваться по обоим
13 программистище
 
07.11.25
14:31
(12) вот она истина, точняк
14 Rovan
 
гуру
07.11.25
14:38
(0) такое соединение помогает исключить битые ссылки
15 PR
 
07.11.25
14:58
(8) Серьезно что ли?
А без этого соединения по сотрудникам прям не получится отбирать что ли?
16 PR
 
07.11.25
14:59
(12) Что-то прям сомнительно, если честно, но ХЗ
17 PR
 
07.11.25
14:59
(14) Какие битые ссылки, ты о чем?
18 PR
 
07.11.25
15:00
(0) Если не (12), то похоже, что и без соединения будет работать ровно так же
19 scanduta
 
07.11.25
15:01
(8) Сомнительно, но окэй
20 d4rkmesa
 
07.11.25
15:05
(15) Можно еще предположить, что отбор по характеристикам (доп. реквизитам и сведениям) справочника Сотрудники так будет работать, а только с регистром - нет.
21 Franchiser
 
07.11.25
15:05
(0) если на справочник rls есть, а на регистр rls не настраивали могут под неполными правами пропасть часть лишних записей регистра, на которые у пользователя нет доступа.
22 PR
 
07.11.25
15:19
(20) Хрень
Вообще нужно целиком СКД посмотреть, конечно
Типа что отвалится и отвалится ли, если убрать соединение
23 PR
 
07.11.25
15:20
(21) Ну вот это да, похоже на правду, такое может быть, так-то звучит логично
24 Ненавижу 1С
 
гуру
07.11.25
15:37
(16) полез в ЗУП (что под рукой)
вот регистр:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    Ограничение.Текст =
    "РазрешитьЧтениеИзменение
    |ГДЕ
    |    ЗначениеРазрешено(Сотрудник.ФизическоеЛицо)";
КонецПроцедуры

вот справочник:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    Ограничение.Текст =
    "ПрисоединитьДополнительныеТаблицы
    |ЭтотСписок КАК Т
    |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОрганизацииВКоторыхРаботалиСотрудники КАК Т2
    |    ПО Т2.Сотрудник = Т.Ссылка
    |;
    |РазрешитьЧтениеИзменение
    |ГДЕ
    |    ЗначениеРазрешено(Т2.Организация)
    |    и ЗначениеРазрешено(Т.ФизическоеЛицо)";
КонецПроцедуры

в регистре нет ограничения по организациям, а в справочнике есть
25 Ненавижу 1С
 
гуру
07.11.25
15:38
(21) (23) так это ровно тоже, что и (12)
26 Маленький Вопросик
 
07.11.25
15:55
Еще главное РАЗРЕШЕННЫЕ, как будто кто-то заморачивался у вас права делил по каждому))))))

А запрос - г*внокод! Внутренне соединение здесь не нужно, нужно условие постобработки, если хотите какой-то отбор сделать!
27 Rovan
 
гуру
07.11.25
16:07
(17) битые ссылки в регистре СостоянияСотрудников
28 PR
 
07.11.25
16:13
(27) И че и че?
29 Ненавижу 1С
 
гуру
07.11.25
16:13
(26) вы правда считаете, что никто не использует RLS?
30 PR
 
07.11.25
16:14
(26) Расходимся, пацаны, это просто говнокод, главный сказал
31 Rovan
 
гуру
07.11.25
16:15
(27) по битым ссылкам соединение не пройдет и запрос их не вернет
2 + 2 = 3.9999999999999999999999999999999...