Имя: Пароль:
1C
1С v8
Упростить запрос.
0 lirt82
 
13.03.26
08:11
Есть запрос, листинг будет ниже. можно ли его еще оптимизировать? Так как в итоговом запросе выборка идет из двух временных таблиц, указанных просто через запятую. По сути это декартово произведение двух таблиц. Правильней ли сделать через соединение по ИНН? А иначе, наличие поля ИНН в обеих ВТ выглядит необоснованным. Также есть излишнее подключение дополнительных справочников в первом запросе, т.к. все необходимые данные имеются в основной таблице запроса(это сделал чтобы избежать вызова через точку составных полей). Пример
ПодразделенияОрганизаций.Наименование КАК division,
КадроваяИсторияСотрудниковСрезПоследних.Подразделение.Наименование КАК division2

Запрос.Текст =
        "ВЫБРАТЬ
        |    ФизическиеЛица.ИНН КАК СотрудникФизическоеЛицоИНН,
        |    ПодразделенияОрганизаций.Наименование КАК division,
        |    Должности.Наименование КАК position,
        |    Сотрудники.Код КАК table_number
        |ПОМЕСТИТЬ ВТ_КадровыеДанные
        |ИЗ
        |    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Дата, ) КАК КадроваяИсторияСотрудниковСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
        |        ПО КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо = ФизическиеЛица.Ссылка
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
        |        ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = Сотрудники.Ссылка
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
        |        ПО КадроваяИсторияСотрудниковСрезПоследних.Подразделение = ПодразделенияОрганизаций.Ссылка
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Должности КАК Должности
        |        ПО КадроваяИсторияСотрудниковСрезПоследних.Должность = Должности.Ссылка
        |ГДЕ
        |    ФизическиеЛица.ИНН = &ИИН
        |    И КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ФизическиеЛицаКонтактнаяИнформация.Представление КАК Email,
        |    ФизическиеЛица.ИНН КАК ИНН
        |ПОМЕСТИТЬ ВТ_ФизЛица
        |ИЗ
        |    Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
        |        ПО ФизическиеЛицаКонтактнаяИнформация.Ссылка = ФизическиеЛица.Ссылка
        |ГДЕ
        |    ФизическиеЛица.ИНН = &ИИН
        |    И ФизическиеЛицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
        |    И ФизическиеЛицаКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EMailФизическиеЛица)
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_КадровыеДанные.СотрудникФизическоеЛицоИНН КАК СотрудникФизическоеЛицоИНН,
        |    ВТ_КадровыеДанные.division КАК division,
        |    ВТ_КадровыеДанные.position КАК position,
        |    ВТ_КадровыеДанные.table_number КАК table_number,
        |    ЕСТЬNULL(ВТ_ФизЛица.Email, """""""") КАК Email
        |ИЗ
        |    ВТ_КадровыеДанные КАК ВТ_КадровыеДанные,
        |    ВТ_ФизЛица КАК ВТ_ФизЛица";
1 Ненавижу 1С
 
гуру
13.03.26
08:18
(0) запрос неверный. Если был временный перевод, то вы получите в срезе последних эту запись с "протухшим" сроком. Лучше уже использовать КадроваяИсторияСотрудниковИнтервальный , используя конец дня.
А еще правильнее использовать готовые типовые решения:
https://infostart.ru/1c/articles/942569/
2 Мультук
 
гуру
13.03.26
08:34
(0)

О концептуальной верности решения  см (1)

1) Сам запрос я бы написал вот так.
2) Я не понимаю (от всей души) генерацию кучи ВТ, без особой на то необходимости.
3) Только в моей практике в ЗУП была куча физ.лиц без ИНН, но с почтой или телефоном ?

    ВЫБРАТЬ
            тКи.ФизическоеЛицо.ИНН КАК СотрудникФизическоеЛицоИНН,
            тКи.Подразделение.Наименование КАК division,
            тКи.Должность.Наименование КАК position,
            тКИ.Сотрудник.Код КАК table_number,
            ЕСТЬNULL(тИнфо.Email, """""""") КАК Email 
    ИЗ
            РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Дата, ) КАК тКи

            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.КонтактнаяИнформация КАК тИнфо
            ПО тКи.ФизическоеЛицо = ФизическиеЛицаКонтактнаяИнформация.Ссылка
             И ФизическиеЛицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
             И ФизическиеЛицаКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EMailФизическиеЛица) 
   ГДЕ
       тКи.ФизическоеЛицо.ИНН = &ИИН
       И тКИ.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший