Вход | Регистрация
 

Запрос - найти такой же набор значений в табличной части

Запрос - найти такой же набор значений в табличной части
Я
   RomaH
 
04.09.20 - 10:06
Наверняка распространенная задача
год назад сделал для небольшого участка, сейчас встала задача прикрутить это к большому объему данных
не устраивает скорость выполнения алгоритма.

киньте примером

надо запросом найти такой же набор значений в табличной части как в переданной ТЗ.
   dka80
 
1 - 04.09.20 - 10:15
ВЫБРАТЬ
    1 КАК Поле1
ПОМЕСТИТЬ ВТ1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    3
;
////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    1 КАК Поле1
ПОМЕСТИТЬ ВТ2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    КОЛИЧЕСТВО(ВТ1.Поле1) КАК Поле1,
    КОЛИЧЕСТВО(ВТ2.Поле1) КАК Поле11
ПОМЕСТИТЬ ВТ3
ИЗ
    ВТ1 КАК ВТ1
        ПОЛНОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ1.Поле1 = ВТ2.Поле1
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ3.Поле1 КАК Поле1,
    ВТ3.Поле11 КАК Поле11
ИЗ
    ВТ3 КАК ВТ3
ГДЕ
    ВТ3.Поле1 = ВТ3.Поле11
   dka80
 
2 - 04.09.20 - 10:32
Можно попробывать индексы добавить, временные таблицы заменить на вложенный запрос
   Ёпрст
 
3 - 04.09.20 - 10:37
(0) Тебе аналог ALL нужен что ле в 1с ?
   RomaH
 
4 - 04.09.20 - 10:41
(3) чаво? что за ALL?
   RomaH
 
5 - 04.09.20 - 10:45
(3) вроде нет
на пальцах 
есть док продажи 
в нем таблица товаров - Номенклатура и количество

надо найти документы с таким же набором в ТЧ как в исходном.
   RomaH
 
6 - 04.09.20 - 10:46
вот что сейчас:

    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТаблицаБригады.Основной КАК Основной,
    |    ТаблицаБригады.Специалист КАК Специалист,
    |    ТаблицаБригады.Роль КАК Роль
    |ПОМЕСТИТЬ втТаблицаБригадыСПустыми
    |ИЗ
    |    &ТаблицаБригады КАК ТаблицаБригады
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    втТаблицаБригады.Основной КАК Основной,
    |    втТаблицаБригады.Специалист КАК Специалист,
    |    втТаблицаБригады.Роль КАК Роль
    |ПОМЕСТИТЬ втТаблицаБригады
    |ИЗ
    |    втТаблицаБригадыСПустыми КАК втТаблицаБригады
    |ГДЕ
    |    втТаблицаБригады.Специалист <> ЗНАЧЕНИЕ(Справочник.Специалисты.ПустаяСсылка)
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    втТаблицаБригады.Основной КАК Основной,
    |    втТаблицаБригады.Специалист КАК Специалист,
    |    втТаблицаБригады.Роль КАК Роль,
    |    БригадыСпециалисты.Ссылка КАК Ссылка1
    |ПОМЕСТИТЬ втУмножение
    |ИЗ
    |    втТаблицаБригады КАК втТаблицаБригады
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Бригады.Специалисты КАК БригадыСпециалисты
    |        ПО (ИСТИНА)
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ЕСТЬNULL(втУмножение.Ссылка1, БригадыСпециалисты.Ссылка) КАК Ссылка1
    |ПОМЕСТИТЬ втИсключаемые
    |ИЗ
    |    втУмножение КАК втУмножение
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Бригады.Специалисты КАК БригадыСпециалисты
    |        ПО втУмножение.Ссылка1 = БригадыСпециалисты.Ссылка
    |            И втУмножение.Основной = БригадыСпециалисты.Основной
    |            И втУмножение.Специалист = БригадыСпециалисты.Специалист
    |            И втУмножение.Роль = БригадыСпециалисты.Роль
    |ГДЕ
    |    (БригадыСпециалисты.Ссылка ЕСТЬ NULL
    |            ИЛИ втУмножение.Ссылка1 ЕСТЬ NULL)
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    Бригады.Ссылка КАК Ссылка
    |ПОМЕСТИТЬ втБригады
    |ИЗ
    |    Справочник.Бригады КАК Бригады
    |        ЛЕВОЕ СОЕДИНЕНИЕ втИсключаемые КАК Исключаемые
    |        ПО (Исключаемые.Ссылка1 = Бригады.Ссылка)
    |ГДЕ
    |    Исключаемые.Ссылка1 ЕСТЬ NULL
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    БригадыСпециалисты.Ссылка КАК Ссылка
    |ИЗ
    |    втТаблицаБригады КАК втТаблицаБригады
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Бригады.Специалисты КАК БригадыСпециалисты
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ втБригады КАК втБригады
    |            ПО БригадыСпециалисты.Ссылка = втБригады.Ссылка
    |        ПО втТаблицаБригады.Основной = БригадыСпециалисты.Основной
    |            И втТаблицаБригады.Специалист = БригадыСпециалисты.Специалист
    |            И втТаблицаБригады.Роль = БригадыСпециалисты.Роль";


на 30 вызовов работает 1 сек
   Mikeware
 
7 - 04.09.20 - 10:50
(5) а просто соединить по номенклатуре и количеству, а затем отобрать, где количество строк по ссылке равно количеству строк в шаблоне?
   RomaH
 
8 - 04.09.20 - 10:54
(7) похоже на правду
   Ёпрст
 
9 - 04.09.20 - 10:59
   Ёпрст
 
10 - 04.09.20 - 11:00

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.