|
Упростить запрос. | ☑ | ||
|---|---|---|---|---|
|
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ФизическиеЛица)
ГДЕ
тКи.ФизическоеЛицо.ИНН = &ИИН
И тКИ.ВидСобытия <> ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |