Запрос всей номенклатуры с характеристиками

Публикация № 1487823 30.07.21

Разработка - Математика и алгоритмы

Запрос Номенклатура Характеристика Замеры

Сравнение различных вариантов запроса всей номенклатуры с характеристиками (УТ11.4, КА 2.4, ERP 2.4).

Доброго времени суток!

Исходя из специфики выполняемых задач, в последнее время часто приходилось получать из базы 1С всю номенклатуру с характеристиками, для последующей обработки.

В процессе разработки различных решений задался целью проверить скорость и качество выполнения запросов.

Учитывая опыт практического применения приведенных в статье решений считаю оптимальным указать голые замеры с комментариями и не буду касаться планов запросов и остальной теоретической части.

Помним, что наилучшее решение всегда индивидуально и зависит от многих факторов.

Условия:

- Каждый запрос выполняется 1000 раз подряд (в цикле) для определения лучшего, худшего, среднего и общего результата. При длительных запросах по понятным причинам обходился замерами в консоли.

- На каждый запрос  по 3 повтора (итого 3000 запросов) для разброса.

Предлагаю поэтапно составить запрос.

 
 1 этап - вытянуть всю номенклатуру без характеристик
Особенности 
Текст запроса
Время выполнения
Лучшее
Худшее
Среднее
Общее
1

одинарный

отбор

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

00.012,000
00.011,000
00.011,000
00.017,000
00.020,000
00.023,000
00.012,695
00.012,787
00.012,823
12.695,000
12.787,000
12.823,000
2

двойной отбор,

сперва по

использованию

характеристик

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)
    И НЕ Номенклатура.ЭтоГруппа

00.011,000
00.011,000
00.011,000
00.018,000
00.023,000
00.018,000
00.012,937
00.013,345
00.012,892
12.937,000
13.345,000
12.892,000
3

двойной отбор,

сперва по

принадлежности

к группе

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    НЕ Номенклатура.ЭтоГруппа
    И Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

00.011,000
00.012,000
00.012,000
00.024,000
00.020,000
00.022,000
00.013,598
00.013,382
00.013,355
13.598,000
13.382,000
13.355,000

Исходя из таблицы полученных замеров можно сделать следующие выводы:

1 - Чем больше условий отбора в запросе, тем длительнее время выполнения запроса.

2 - Исходя из 2 (второй) строки таблицы можно сделать заключение о том, что при выполнении первого условия косвенно выполняется второе. По сути первое условие уже содержит второе (всегда будет "ИСТИНА", поскольку у группы не может быть признака использования характеристик). Как результат - увеличение времени выполнения запроса.

3 - Порядок условий влияет на результат.

 
 2 этап - вытянуть всю номенклатуру с индивидуальными характеристиками.
Особенности
Текст запроса
Время выполнения
Лучшее
Худшее
Среднее
Общее
1 подход - через владельца номенклатуры
1.1 С оператором "Выразить" ВЫБРАТЬ
    ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура) КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура
 00.002,000
 00.003,000
 00.003,000
 00.006,000
 00.006,000
 00.007,000
00.003,372
00.003,411
00.003,381
03.372,000
03.411,000
03.381,000
1.2 Без оператора "Выразить" ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Владелец КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура
 00.004,000
 00.004,000
 00.004,000
 00.008,000
 00.009,000
 00.014,000
00.004,924
00.004,948
00.004,989
04.924,000
04.948,000
04.989,000
1.3 Недостоверные данные ВЫБРАТЬ
    ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура) КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
00.002,000
00.002,000
00.002,000
00.004,000
00.005,000
00.006,000
00.003,201
00.003,209
00.003,271
03.201,000
03.209,000
03.271,000
1.4 Недостоверные данные ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Владелец КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
00.004,000
00.003,000
00.003,000
00.007,000
00.006,000
00.007,000
00.004,831
00.004,779
00.004,758
04.831,000
04.779,000
04.758,000
2 подход - через соединение таблиц (справочников)
2.1 - соединение
2.1.1

Внутреннее соединение "В лоб" по владельцу

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец)
00.008,000
00.008,000
00.008,000
00.014,000
00.011,000
00.017,000
00.009,521
00.009,465
00.009,521
09.521,000
09.465,000
09.521,000
2.1.2 Внутреннее соединение по виду номенклатуры и "В лоб" по владельцу

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.ВидНоменклатуры
                И Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец)

00.011,000
00.011,000
00.011,000
00.021,000
00.021,000
00.023,000
00.012,141
00.012,001
00.012,003
12.141,000
12.001,000
12.003,000
2.2 - соединение с последующими отборами
2.2.1

Внутреннее соединение "В лоб" по владельцу, с отбором по признаку использования характеристик

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец)
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
00.015,000
00.014,000
00.015,000
00.026,000
00.034,000
00.066,000
00.016,326
00.016,455
00.016,504
16.326,000
16.455,000
16.504,000

2.2.2

Внутреннее соединение "В лоб" по владельцу, с последующим отбором по признаку использования характеристик и типу ссылки владельца ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец)
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
    и ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура
00.015,000
00.015,000
00.015,000
00.028,000
00.031,000
00.028,000
00.016,418
00.016,367
00.016,449
16.418,000
16.367,000
16.449,000
2.2.3 Внутреннее соединение с выражением  типа владельца, с последующим отбором по признаку использования характеристик ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.Ссылка = (ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура)))
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
00.015,000
00.015,000
00.015,000
00.035,000
00.024,000
00.025,000
00.017,070
00.016,777
00.016,786
17.070,000
16.777,000
16.786,000
2.2.4 Внутреннее соединение с выражением  типа владельца, с последующим отбором по признаку использования характеристик и типу ссылки владельца ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.Ссылка = (ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура)))
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
    и ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура
00.015,000
00.016,000
00.015,000
00.034,000
00.031,000
00.032,000
00.016,756
00.016,883
00.016,785
16.756,000
16.883,000
16.785,000
2.3 - соединение с условиями
2.3.1 Внутреннее соединение с условием  использования характеристик и "В лоб" по владельцу ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
                И Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец)
00.014,000
00.014,000
00.014,000
00.030,000
00.036,000
00.034,000
00.015,857
00.015,930
00.015,821
15.857,000
15.930,000
15.821,000
2.3.2 Внутреннее соединение с условием  использования характеристик и выражением владельца ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
                И Номенклатура.Ссылка = (ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура)))
00.015,000
00.015,000
00.015,000
00.026,000
00.025,000
00.023,000
00.016,844
00.016,762
00.016,687
16.844,000
16.762,000
16.687,000
2.3.3 Внутреннее соединение с условием  использования характеристик, ограничением по типу ссылки и по владельцу ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
                И ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура
                И Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец)
00.015,000
00.014,000
00.014,000
00.026,000
00.039,000
00.037,000
00.015,925
00.016,455
00.016,027
15.925,000
16.455,000
16.027,000
2.3.4 Внутреннее соединение с условием  использования характеристик, ограничением по типу ссылки и выражением владельца ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
                И ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура
                И Номенклатура.Ссылка = (ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура)))
00.015,000
00.015,000
00.015,000
00.026,000
00.019,000
00.022,000
00.016,851
00.016,745
00.016,782
16.851,000
16.745,000
16.782,000
Замеры, указанные в таблице, предполагают следующие выводы:

1 - Лучший вариант - напрямую обращаться к реквизиту элемента, не делая соединений.

2 - Судя по запросам 1.1 и 1.2 - оператор "Выразить" влияет на результат достаточно серьезно в связке с ограничением типа ссылки.

3 - Внутреннее соединение "В лоб" - быстрее, чем любой дополнительный отбор как во время, так и после соединения таблиц.

4 - Количество отборов "до" или "во время" влияет на результат и при соединении. Стоит придерживаться стратегии наименьшего количества достаточных условий.

5 - Лучше соединение с условиями, чем последующий отбор.

ВНИМАНИЕ!!! Существенным недостатком 1 подхода считаю недостоверность данных. Конкретно в базе, на которой тестировал, пользователь сперва создал номенклатуру с индивидуальными характеристиками и создал характеристики, а потом поменял у номенклатуры вид на "без характеристик". Получилась ситуация, когда характеристика имеет владельца, но номенклатура-владелец не имеет признака использования характеристик.

 
 3 этап - вытянуть номенклатуру с характеристиками общими по виду номенклатуры или общие с другим видом
Особенности
Текст запроса
Время выполнения
Лучшее
Худшее
Среднее
Общее
1 - соединение по владельцу
1.1 - соединение по владельцу без условий
1.1.1 Внутреннее соединение "В лоб" по владельцу

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.Владелец)

00.002,000
00.002,000
00.002,000
00.004,000
00.005,000
00.011,000
00.003,007
00.003,048
00.003,051
03.007,000
03.048,000
03.051,000
1.1.2 Внутреннее соединение "В лоб" по владельцу с выражением  типа владельца ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВидНоменклатуры = (ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.ВидыНоменклатуры)))
00.003,000
00.004,000
00.004,000
00.005,000
00.012,000
00.009,000
00.004,679
00.004,712
00.004,707
04.679,000
04.712,000
04.707,000
1.2 - соединение по владельцу с последующим наложением условий
1.2.1 Внутреннее соединение "В лоб" по владельцу, с последующим отбором по признаку использования характеристик

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

00.002,000
00.002,000
00.002,000
00.011,000
00.010,000
00.010,000
00.003,377
00.003,413
00.003,371
03.377,000
03.413,000
03.371,000
1.2.2 Внутреннее соединение "В лоб" по владельцу, с последующим отбором по признаку использования характеристик и типу ссылки владельца

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

00.002,000
00.003,000
00.002,000
00.010,000
00.010,000
00.009,000
00.003,436
00.003,430
00.003,454
03.436,000
03.430,000
03.454,000
1.2.3 Внутреннее соединение с выражением  типа владельца и последующим отбором по признаку использования характеристик и типу ссылки владельца

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

00.003,000
00.003,000
00.003,000
00.011,000
00.012,000
00.007,000
00.003,996
00.003,945
00.003,777
03.996,000
03.945,000
03.777,000
1.3 - соединение по владельцу с условиями
1.3.1 Внутреннее соединение с условием  использования характеристик и "В лоб" по владельцу ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры))
            И (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.Владелец)
00.003,000
00.002,000
00.002,000
00.005,000
00.004,000
00.006,000
00.003,332
00.003,333
00.003,331
03.332,000
03.333,000
03.331,000
1.3.2 Внутреннее соединение с условием  использования характеристик и выражением владельца ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры))
            И (Номенклатура.ВидНоменклатуры = (ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.ВидыНоменклатуры)))
            И (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.Владелец)
00.003,000
00.003,000
00.003,000
00.005,000
00.010,000
00.005,000
00.003,983
00.004,013
00.003,993
03.983,000
04.013,000
03.993,000
1.3.3 Внутреннее соединение с условием  использования характеристик, ограничением по типу ссылки и по владельцу ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
                И ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.ВидыНоменклатуры
                И Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.Владелец)
00.003,000
00.003,000
00.002,000
00.005,000
00.008,000
00.007,000
00.003,407
00.003,395
00.003,502
03.407,000
03.395,000
03.502,000
1.3.4 Внутреннее соединение с условием  использования характеристик, ограничением по типу ссылки и выражением владельца

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

00.003,000
00.003,000
00.003,000
00.005,000
00.005,000
00.007,000
00.004,059
00.004,057
00.004,053
04.059,000
04.057,000
04.053,000
2 - соединение по виду
2.1 - соединение по виду без условий
2.1.1

Внутреннее соединение "В лоб" по владельцу характеристик номенклатуры, не подходит для соединения по виду

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВладелецХарактеристик= ХарактеристикиНоменклатуры.ВидНоменклатуры)
00.002,000
00.002,000
00.002,000
00.004,000
00.004,000
00.005,000
00.003,156
00.003,159
00.003,177
03.156,000
03.159,000
03.177,000
2.2 - соединение по виду с отборами
2.2.1 Внутреннее соединение "В лоб" по виду номенклатуры, с последующим отбором по признаку использования характеристик ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.ВидНоменклатуры)
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
00.003,000
00.002,000
00.002,000
00.004,000
00.006,000
00.004,000
00.003,441
00.003,456
00.003,441
03.441,000
03.456,000
03.441,000
2.3 - соединение по виду с условиями
2.3.1 Внутреннее соединение с условием  использования характеристик ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
        И Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.ВидНоменклатуры)
00.003,000
00.002,000
00.002,000
00.005,000
00.005,000
00.005,000
00.003,476
00.003,431
00.003,458
03.476,000
03.431,000
03.458,000

К сожалению, рабочей базы с подходящей номенклатурой под рукой нет, замеры проводил на демо.

Различных вариантов получилось много.

Как и в предыдущих замерах соединение с последующим отбором занимает больше времени, чем отбор во время соединения. Так же многие условия косвенно уже выполняются (1.2.1 например, если владелец вид номенклатуры - то это общие характеристики, проверять после этого номенклатуру не имеет особого смысла).

Лучший вариант по замерам: просто соединить по реквизиту номенклатуры.



 

 
4 Этап - объединение запросов
Особенности
Текст запроса
Время выполнения
Лучшее
Худшее
Среднее
Общее
4 подзапроса

Объединение из самых быстрых

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

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

ВЫБРАТЬ
    ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура),
    ХарактеристикиНоменклатуры.Ссылка
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура

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

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.Владелец)

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

ВЫБРАТЬ
    Номенклатура.Ссылка,
    ХарактеристикиНоменклатуры.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО Номенклатура.ВладелецХарактеристик = ХарактеристикиНоменклатуры.ВидНоменклатуры

00.017,000
00.016,000
00.017,000
00.039,000
00.032,000
00.026,000
00.017,999
00.018,012
00.017,944
17.999,000
18.012,000
17.944,000
3 подзапроса
запрос явно не оптимальный, хотя и сокращает количество подзапросов

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

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

ВЫБРАТЬ
    ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура),
    ХарактеристикиНоменклатуры.Ссылка
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура

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

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

03.068,000 08.579,000 03.829,317 1:03:49.317,000
Изменил на соединение по виду номенклатуры. Чуть быстрее, но все равно не оптимально.

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

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

ВЫБРАТЬ
    ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура),
    ХарактеристикиНоменклатуры.Ссылка
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура

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

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

03.001,000 - - -
2 подзапроса
явно не оптимально

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

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

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

03.514,000      
явно не оптимально

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

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

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

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

Заключаем, что "Выбор" при соединении замедляет скорость запроса.

Для того, чтобы все собрать в один подзапрос пришлось делать "Левое" соединение.

Без проверки на NULL запрос вытаскивал номенклатуру с отсутствующим списком характеристик (номенклатуру создали, характеристики к ней еще нет).

 
 Итоговые запросы

 Запрос для быстрого вывода всей номенклатуры со всеми характеристиками, состоит из 4 подзапросов

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ЗНАЧЕНИЕ(справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(перечисление.ВариантыИспользованияХарактеристикНоменклатуры.неИспользовать)

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

ВЫБРАТЬ
    ВЫРАЗИТЬ(ХарактеристикиНоменклатуры.Владелец КАК Справочник.Номенклатура),
    ХарактеристикиНоменклатуры.Ссылка
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец ССЫЛКА Справочник.Номенклатура

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

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (Номенклатура.ВидНоменклатуры = ХарактеристикиНоменклатуры.Владелец)

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

ВЫБРАТЬ
    Номенклатура.Ссылка,
    ХарактеристикиНоменклатуры.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО Номенклатура.ВладелецХарактеристик = ХарактеристикиНоменклатуры.ВидНоменклатуры

Запрос вывода всей номенклатуры в одном подзапросе

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

 

Надеюсь, что замеры и различные подходы, приведенные в данной статье, помогут Вам найти наилучшее решение для выполнения Вашей задачи.

Тестирование проводилось на УТ 11.4.13.155.

Прикладываю файл запросов, открывать Универсальные инструменты 1С

Скачать файлы

Наименование Файл Версия Размер
Оптимальный запрос номенклатуры с характеристиками :

.q9 127,96Kb
0
.q9 127,96Kb Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2115 30.07.21 21:57 Сейчас в теме
Ставьте лайк кто на логотипе увидел полную ...
А по запросу - если все равно тащится вся таблица, так может и не надо ничего соединять?
Выбрать ВСЕхарактеристики и из них получить владельца + ВСЮ номенклатуру без характеристик ?
И ОБЪЕДИНИТЬ ?
2. Daemonold 8 30.07.21 22:22 Сейчас в теме
(1) что и сделано в итоговом запросе с 3 объединениями. Вопрос скорее о том в каком виде это отработает быстрее.
Недавно напоролся на типовой запрос в сегментах - таки там в схеме запрос по замерам будет гораздо дольше выполняться (4 сек против 30 мс).
3. triviumfan 28 04.08.21 18:42 Сейчас в теме
Статья новичка только начавшего познавать запросы.
ЗЫ: Ещё неверно понимаешь что есть "подзапрос".
Оставьте свое сообщение

См. также

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    44439    ids79    45    

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета v8 v8::DataMining Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    1856    dusha0020    8    

Практическое применение операции копирования массива

Математика и алгоритмы v8 Бесплатно (free)

Решение задачи https://projecteuler.net/problem=250 из Project Euler средствами 1C.

02.08.2021    902    scientes    2    

Распределенные алгоритмы РИБ 1С

Распределенная БД (УРИБ, УРБД) Математика и алгоритмы v8 Бесплатно (free)

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    1218    zhichkin    1    

Как работает серверный вызов в 1С Промо

Математика и алгоритмы v8::УФ Бесплатно (free)

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    66535    pahich    83    

Чем воспользоваться для распознавания котиков в 1С?

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    3374    comol    10    

Рекурсия для начинающих

Математика и алгоритмы Практика программирования v8 Бесплатно (free)

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    2356    szv    5    

Партионный учет по двум количественным показателям

Математика и алгоритмы Учет ТМЦ v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

Особенности учета партионной системы при наличии двух количественных показателей.

26.03.2020    4439    lastcontra    5    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Практика программирования Математика и алгоритмы Оптовая торговля Оптовая торговля v8 1cv8.cf УУ Бесплатно (free)

Автоматизация отечественных предприятий, которой приходиться заниматься, это нужная и высокооплачиваемая, но довольно нервная работа. Выручает юмор. Например, при общении с требовательным клиентом можно вспомнить анекдот: "Держась руками за стену, на ногах еле стоит мужик. К нему пристает ребенок: "Ну, папа, пожалуйста, сделай мне кораблик!", папа отвечает: "Ага! - Сейчас все брошу и пойду делать тебе кораблик!". Про один такой сделанный для клиента "кораблик" и хочется рассказать. Надеюсь, совместное погружение в теплое ламповое (то есть клиентоориентированное) программирование доставит Вам положительные эмоции, да и задача попалась интересная. Поплыли?

24.03.2014    46647    ildarovich    116    

Получение значений всех полей в иерархии структуры отчета

Практика программирования Математика и алгоритмы v8::СКД Россия Бесплатно (free)

При обработке расшифровки данных в отчете (да и не только отчете), основанном на СКД, может потребоваться получить значения всех полей, находящихся в текущей группировке и её родителях. Представляю вашему вниманию алгоритм, выполняющий эту задачу. Как говорится, "просто оставлю это здесь".

28.02.2020    2516    real_MaxA    1    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    6424    randomus    20    

[После]Новогодние задачи

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

30.12.2019    3389    Alxby    23    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    71095    tormozit    29    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    45834    YPermitin    25    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Сентябрьская серия статей про то, как начинающий разработчик Вася проходит путь от простой задачки к созданию своего механизма. На этот раз - открытие значения из текущей колонки.

02.09.2019    10649    SeiOkami    35    

Иерархия без "В ИЕРАРХИИ"

Математика и алгоритмы v8 Бесплатно (free)

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    14905    ildarovich    24    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    329254    Evil Beaver    184    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Практика программирования Математика и алгоритмы Перенос данных из 1C8 в 1C8 Разработка v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    18586    ids79    8    

Обработчики событий при записи объектов. Зачем и что за чем?

Математика и алгоритмы v8 Бесплатно (free)

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    108923    AlbinaAAA    47    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    35977    skv_79    37    

Самоучитель языка запросов 1С. Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    114935    bpc222    327    

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

Практика программирования Математика и алгоритмы v8 Бесплатно (free)

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    5971    vandalsvq    19    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода SonarQube EDT v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    19383    Stepa86    40    

Что делает "В ИЕРАРХИИ" в запросе?

Математика и алгоритмы v8 Бесплатно (free)

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    45735    YPermitin    34    

Решение транспортной задачи запросом Промо

Математика и алгоритмы v8 Бесплатно (free)

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    36039    bforce    22    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    75163    ids79    28    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Практика программирования Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

В статье рассматриваются способы реализации таких абстрактных структур данных, как стек, очередь и приоритетная очередь, используя готовые типы данных 1С. Выявляются "узкие" места, сложные моменты в реализации и сравнивается скорость работы.

24.06.2019    16327    RonX01    66    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

Математика и алгоритмы Практика программирования Разработка v8::Запросы Бесплатно (free)

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

10.06.2019    10232    DataReducer    12    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

Математика и алгоритмы v8 Бесплатно (free)

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    31258    juntatalor    49    

Организация хранения промежуточных данных

Математика и алгоритмы v8 Бесплатно (free)

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    4537    scientes    1    

Вычисление 200 тысяч знаков числа pi

Математика и алгоритмы v8 Россия Бесплатно (free)

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    9263    Oleg_nsk    97    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Практика программирования Математика и алгоритмы Разработка v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    44995    YPermitin    8    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Практика программирования Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    51219    bpc222    53    

Даем названия переменным: как префиксы экономят наше время

Практика программирования Математика и алгоритмы Разработка v8 Бесплатно (free)

Понятные названия переменных экономят время и силы разработчика : в начале, когда мы даём названия переменным, в процессе развития разработки, когда мы "на лету" понимаем назначение той или иной переменной, в конце, когда мы передаём разработку на поддержку других программистов, сами переходя к новым разработкам

06.05.2019    8854    Designer1C    81    

Заметки по SQL: Срез последних - аналог запроса

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

В статье описывается создание среза последних данных средствами классического языка запросов. Причем метод построения запроса был разработан еще во времена, когда автор работал с СУБД Oracle 9i и программировал на PL SQL. Основная идея заключается преобразовании запроса с подзапросом, в запрос без подзапроса (в примерах описывается преобразование до двух вложенных подзапросов). Запросы тестировались на реальных базах данных. Платформа - 1С:Предприятие 8.3 (8.3.10.2561).

15.01.2019    14265    IVC_goal    16    

v8: Концепция минимального изменения конфигурации для легкого обновления Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

"Лучше день потерять потом за пять минут долететь" ((с) "Крылья, ноги и хвосты") или как сделать так чтобы обновление конфигурации проходило с минимальными трудозатратами.

28.01.2013    38736    MarSeN    57    

Многопоточное восстановление последовательностей

Производительность и оптимизация (HighLoad) Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    15216    _ASZ_    33    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    47956    Rain88    49    

Преобразование запросов

Математика и алгоритмы v8 Бесплатно (free)

Использование математических методов для языка запросов.

15.03.2018    12443    vasilev2015    24    

Пример выбора несколько обработчиков событий записи объекта для решения одной задачи Промо

Математика и алгоритмы v8 Бесплатно (free)

Данная публикация предназначена для начинающих разработчиков и является продолжением статьи "Обработчики событий при записи объектов. Зачем и что за чем?" (ссылка далее). Содержит пример использования несколько обработчиков событий для решения одной задачи и объясняется почему выбраны именно они.

27.09.2012    196914    AlbinaAAA    65    

"Взлом" теста "1С:Профессионал" методом машинного обучения

Практика программирования Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    20940    ildarovich    19    

Введение в CI для 1С

Математика и алгоритмы v8 Россия Бесплатно (free)

Значение роли тестирования при разработке ПО трудно переоценить, его применение позволяет повысить надёжность продукта и улучшить качество кода. Для продуктов для платформы 1С:Предприятие существует ряд инструментов для проведения тестирования, в том числе и от самого вендора. Но, также появились открытые инструменты, реализующие мировые практики проведения тестирования (проверки продукта), поддерживаемые сообществом. В этой статье описаны базовые принципы, которые необходимо понимать перед началом применения этих инструментов.

21.11.2017    24743    real_MaxA    22    

#Область ВНЕШНИЕ_ВЫЗОВЫ или MVC в 1С, библиотечность и упрощение интеграции кода

Практика программирования Математика и алгоритмы Универсальные функции v8 Бесплатно (free)

Зачастую почти любой модуль в 1С содержит от одного до несметного множества вызовов других модулей. Как с этим бороться, чтобы было проще куда-то что-то переносить - в этом посте.

12.10.2017    18215    for_sale    58    

Альтернативные способы работы с XML. Часть 2: Введение в xPath или запросы к XML Промо

Обмен через XML Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

В предыдущей статье "Введение в DOM или объектная модель документа" было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath.

09.08.2012    43229    1cspecialist    13    

Пишем игру Минер. Обработка событий ActiveX в 1С

Практика программирования Математика и алгоритмы v8 Россия Бесплатно (free)

Пример демонстрирует обработку событий генерируемых компонентой ActiveX в 1С.

29.05.2017    15063    user621724_Dimav1979    12    

Как я доступ на kb.1c.ru получал

Решение задач на 1С:Специалист Математика и алгоритмы v8 Россия Бесплатно (free)

kb.1c - база знаний по технологическим вопросам крупных внедрений и не только. В этой базе знаний собираются методики и решения технологических проблем эксплуатации 1с, check-list'ы и инструкции по настройке ПО на серверах. Какие-то из размещенных статей дублируются на ИТС. Когда я искал пути получения доступа к нему я столкнулся с проблемой: мало кто доподлинно знает как получить доступ к нему, не работая у франчайзи 1с. Я опишу путь, который прошёл я, как физическое лицо.

01.05.2017    27928    ikekoval    34    

УФ: программное создание и копирование документов с использованием конструкций ДанныеФормыВЗначение, ЗначениеВДанныеФормы

Практика программирования Математика и алгоритмы v8::УФ Россия Бесплатно (free)

1С:Предприятие 8.3. Управляемые формы. Программное создание и копирование документов. Использование методов ДанныеФормыВЗначение(), ЗначениеВДанныеФормы() и КопироватьДанныеФормы().

27.04.2017    32530    alexhline    9    

От Hello world - к защите конфигураций за 1 минуту Промо

Защита и шифрование Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

Вы всегда хотели но боялись создать COM объект? Тогда мы идем к вам! С обычным блокнотом, где будем программировать на c#, и таймером ...

19.05.2012    35673    O-Planet    130    

Улучшение стандарта "Структура модуля"

Математика и алгоритмы v8 1cv8.cf Россия Бесплатно (free)

Описывается структура областей модулей, которую я использую при разработке на своих проектах. Обсуждаются недостатки стандарта 1С "Структура модуля". Предложен улучшенный подход к работе со структурой модуля.

26.03.2017    14919    o.nikolaev    23    

Маленькая хитрость СКД - выводим строки X раз

Математика и алгоритмы Практика программирования v8::СКД 1cv8.cf Россия Бесплатно (free)

Здесь я расскажу, как вывести в отчет СКД произвольное количество одинаковых строк.

17.12.2016    18041    alexandersh    16