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

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

надо запросом найти такой же набор значений в табличной части как в переданной ТЗ.
1 dka80
 
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
2 dka80
 
04.09.20
10:32
Можно попробывать индексы добавить, временные таблицы заменить на вложенный запрос
3 Ёпрст
 
04.09.20
10:37
(0) Тебе аналог ALL нужен что ле в 1с ?
4 RomaH
 
naïve
04.09.20
10:41
(3) чаво? что за ALL?
5 RomaH
 
naïve
04.09.20
10:45
(3) вроде нет

на пальцах
есть док продажи
в нем таблица товаров - Номенклатура и количество

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

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


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