Версия для печати темы (https://pro1c.org.ua/index.php?s=0eb8fded580af546a965d0c3b66feb1a&showtopic=4699)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Убрать соединение с подзапросом

Автор: bolobol 13.09.11, 17:28

Здравствуйте!

Подскажите, пожалуйста, как переписать нижеследующее внутреннее соединение с подзапросом, чтобы в результате укладываться в рекомендации, как минимум "не используйте соединения с подзапросами". При этом не потерять производительность!

Краткое человечье описанье:
Выбрать неудалённые Ведомости, которые не присутствуют в неудалённых СписанияхСРасчётногоСчёта в табличной части ПеречислениеЗаработнойПлаты.

Подзапрос Выбирает неудалённые СписанияСРасчётногоСчёта. Соединяется с таблицей своей табличной части ПеречислениеЗаработнойПлаты. С результатом - соединяется Ведомости на ЗП и, если Ведомости при соединении получают NULL, значит - не оплачены.

"
ВЫБРАТЬ
    ЛОЖЬ КАК Флаг,
    ЗарплатаКВыплатеОрганизаций.СпособВыплаты,
    ЗарплатаКВыплатеОрганизаций.Комментарий,
    ЗарплатаКВыплатеОрганизаций.СуммаДокумента,
    ЗарплатаКВыплатеОрганизаций.Организация,
    ЗарплатаКВыплатеОрганизаций.Дата КАК Дата,
    ЗарплатаКВыплатеОрганизаций.Ссылка
ИЗ
    Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
            ИЗ
                Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
            ГДЕ
                СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ) КАК ВложенныйЗапрос
            ПО (ВложенныйЗапрос.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка)
        ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка
ГДЕ
    СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка ЕСТЬ NULL
    И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
"

Автор: pablo 14.09.11, 8:53

ВЫБРАТЬ
                СписаниеСРасчетногоСчета.Ссылка КАК Ссылка
            Поместить ВложенныйЗапрос
            ИЗ
                Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
            ГДЕ
                СписаниеСРасчетногоСчета.ПометкаУдаления = &ЛОЖЬ;
ВЫБРАТЬ
    ЛОЖЬ КАК Флаг,
    ЗарплатаКВыплатеОрганизаций.СпособВыплаты,
    ЗарплатаКВыплатеОрганизаций.Комментарий,
    ЗарплатаКВыплатеОрганизаций.СуммаДокумента,
    ЗарплатаКВыплатеОрганизаций.Организация,
    ЗарплатаКВыплатеОрганизаций.Дата КАК Дата,
    ЗарплатаКВыплатеОрганизаций.Ссылка
ИЗ
    Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ  ВложенныйЗапрос
            ПО (ВложенныйЗапрос.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка
        ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка
ГДЕ
    СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка ЕСТЬ NULL
    И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ

Автор: bolobol 14.09.11, 12:09

Альтернативный, более читабельный запрос предложен мне был следующий:

ВЫБРАТЬ
    ЗарплатаКВыплатеОрганизаций.СпособВыплаты,
    ЗарплатаКВыплатеОрганизаций.Комментарий,
    ЗарплатаКВыплатеОрганизаций.СуммаДокумента,
    ЗарплатаКВыплатеОрганизаций.Организация,
    ЗарплатаКВыплатеОрганизаций.Дата,
    ЗарплатаКВыплатеОрганизаций.Ссылка,
    ЗарплатаКВыплатеОрганизаций.КраткийСоставДокумента
ИЗ
    Документ.ЗарплатаКВыплатеОрганизаций КАК ЗарплатаКВыплатеОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета.ПеречислениеЗаработнойПлаты КАК СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты
        ПО ЗарплатаКВыплатеОрганизаций.Ссылка = СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ведомость.Ссылка
            И (СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка.ПометкаУдаления = &ЛОЖЬ)
ГДЕ
    СписаниеСРасчетногоСчетаПеречислениеЗаработнойПлаты.Ссылка ЕСТЬ NULL
    И ЗарплатаКВыплатеОрганизаций.ПометкаУдаления = &ЛОЖЬ

УПОРЯДОЧИТЬ ПО
    ЗарплатаКВыплатеОрганизаций.Дата УБЫВ


Условие на неудалённость документа вставлено прямо в условие связи. Работает быстро и чудесно.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua