|
Оптимизация запроса 1С 8 УНФ 1.3 | ☑ | ||
---|---|---|---|---|
0
Gera1t
28.04.22
✎
16:16
|
Здравствуйте!
Есть самописная форма списка документов, на ней динамический список, там запрос. В запросе 20 таблиц и 28 связей между этими таблицами в связи с этим список заполняется очень долго. Хочу оптимизировать его как то, но поля из запроса выкидывать нельзя. Подскажите пожалуйста, если переделать запрос через временные таблицы, отказавшись от такого количества связей, будет быстрее или нет смысла в этом направлении идти? |
8 11 |
||
1
vicof
28.04.22
✎
16:18
|
Красивый запрос, да
|
|||
2
vicof
28.04.22
✎
16:18
|
И структура базы интересная
|
|||
3
vicof
28.04.22
✎
16:18
|
И индексы как на подбор
|
|||
4
Gera1t
28.04.22
✎
16:19
|
ВЫБРАТЬ
ВЫБОР КОГДА ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход <> 0 И ЗаказыПокупателейОстаткиИОбороты.КоличествоРасход = 0 ТОГДА 1 КОГДА ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход <> 0 И ЗаказыПокупателейОстаткиИОбороты.КоличествоРасход <> 0 И ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток <> 0 ТОГДА 2 КОГДА ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход <> 0 И ЗаказыПокупателейОстаткиИОбороты.КоличествоРасход <> 0 И ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток = 0 ТОГДА 3 ИНАЧЕ 0 КОНЕЦ КАК НомерКартинки, ДокументЗаказПокупателя.Ссылка, ДокументЗаказПокупателя.ИзмЦена, ДокументЗаказПокупателя.ПометкаУдаления, ДокументЗаказПокупателя.Номер, ДокументЗаказПокупателя.Дата, ДокументЗаказПокупателя.Проведен, ДокументЗаказПокупателя.Автор, ДокументЗаказПокупателя.БанковскийСчет, ДокументЗаказПокупателя.ВалютаДокумента, ДокументЗаказПокупателя.ВидОперации, ДокументЗаказПокупателя.ВидРабот, ДокументЗаказПокупателя.ВидСкидкиНаценки, ДокументЗаказПокупателя.ВидЦен, ДокументЗаказПокупателя.ДатаОтгрузки, ДокументЗаказПокупателя.Договор, ДокументЗаказПокупателя.Закрыт, ДокументЗаказПокупателя.ЗапланироватьОплату, ДокументЗаказПокупателя.Касса, ДокументЗаказПокупателя.Комментарий, ДокументЗаказПокупателя.Контрагент, ДокументЗаказПокупателя.Контрагент.КонтактноеЛицо КАК КонтактноеЛицо, ДокументЗаказПокупателя.Кратность, ДокументЗаказПокупателя.Курс, ДокументЗаказПокупателя.НДСВключатьВСтоимость, ДокументЗаказПокупателя.Организация КАК ОрганизацияДокумента, ДокументЗаказПокупателя.Ответственный, ДокументЗаказПокупателя.Проект, ДокументЗаказПокупателя.Событие, ДокументЗаказПокупателя.СостояниеЗаказа, ДокументЗаказПокупателя.ДатаОрдераНаОтгрузку КАК ДатаОрдераНаОтгрузку, ВЫБОР КОГДА ДокументЗаказПокупателя.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЗаказПокупателя.ЗаказНаряд) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ЗаказНаряд, ДокументЗаказПокупателя.Старт, ДокументЗаказПокупателя.СтруктурнаяЕдиницаПродажи, ДокументЗаказПокупателя.СтруктурнаяЕдиницаРезерв, ДокументЗаказПокупателя.СуммаВключаетНДС, ДокументЗаказПокупателя.СуммаДокумента, ДокументЗаказПокупателя.ТипДенежныхСредств, ДокументЗаказПокупателя.Финиш, ДокументЗаказПокупателя.Ячейка, ДокументЗаказПокупателя.Аванс, ДокументЗаказПокупателя.Номенклатура, ДокументЗаказПокупателя.Обтяжка, ДокументЗаказПокупателя.Запасы.( Ссылка, НомерСтроки, Номенклатура, Характеристика, Партия, Количество, Резерв, ЕдиницаИзмерения, Цена, ПроцентСкидкиНаценки, Сумма, СтавкаНДС, СуммаНДС, Всего, ДатаОтгрузки, Спецификация ), ДокументЗаказПокупателя.МатериалыЗаказчика.( Ссылка, НомерСтроки, Номенклатура, Характеристика, Количество, ЕдиницаИзмерения, ДатаПоступления ), ДокументЗаказПокупателя.ПлатежныйКалендарь.( Ссылка, НомерСтроки, ДатаОплаты, ПроцентОплаты, СуммаОплаты, СуммаНДСОплаты ), ДокументЗаказПокупателя.Работы.( Ссылка, НомерСтроки, ВидРабот, Номенклатура, Характеристика, Количество, Цена, Сумма, ПроцентСкидкиНаценки, СтавкаНДС, СуммаНДС, Всего, Содержание, КлючСвязи, Кратность, Коэффициент ), ДокументЗаказПокупателя.Исполнители.( Ссылка, НомерСтроки, Сотрудник, КТУ, ВидНачисленияУдержания, РазмерНачисленияУдержания, КлючСвязи ), ДокументЗаказПокупателя.Материалы.( Ссылка, НомерСтроки, Номенклатура, Характеристика, Партия, Количество, Резерв, ЕдиницаИзмерения, КлючСвязи ), ДокументЗаказПокупателя.Предоплата.( Ссылка, НомерСтроки, Документ, СуммаРасчетов, Курс, Кратность, СуммаПлатежа ), ДокументЗаказПокупателя.МоментВремени, ВЫБОР КОГДА ДокументЗаказПокупателя.Проведен И ДокументЗаказПокупателя.СуммаДокумента > 0 ТОГДА ВЫРАЗИТЬ((ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот + ОплатаСчетовИЗаказовОбороты.СуммаАвансаОборот) * 100 / ДокументЗаказПокупателя.СуммаДокумента КАК ЧИСЛО(15, 2)) ИНАЧЕ 0 КОНЕЦ КАК ПроцентОплаты, ВЫБОР КОГДА РасчетыСПоставщикамиОстатки.СуммаОстаток < 0 И РасчетыСПокупателямиОстатки.СуммаОстаток > 0 ТОГДА -1 * РасчетыСПоставщикамиОстатки.СуммаОстаток + РасчетыСПокупателямиОстатки.СуммаОстаток КОГДА РасчетыСПоставщикамиОстатки.СуммаОстаток < 0 ТОГДА -РасчетыСПоставщикамиОстатки.СуммаОстаток КОГДА РасчетыСПокупателямиОстатки.СуммаОстаток > 0 ТОГДА РасчетыСПокупателямиОстатки.СуммаОстаток ИНАЧЕ 0 КОНЕЦ КАК ДолгКонтрагента, ВЫБОР КОГДА РасчетыСПоставщикамиОстатки.СуммаОстаток > 0 И РасчетыСПокупателямиОстатки.СуммаОстаток < 0 ТОГДА -1 * РасчетыСПокупателямиОстатки.СуммаОстаток + РасчетыСПоставщикамиОстатки.СуммаОстаток КОГДА РасчетыСПоставщикамиОстатки.СуммаОстаток > 0 ТОГДА РасчетыСПоставщикамиОстатки.СуммаОстаток КОГДА РасчетыСПокупателямиОстатки.СуммаОстаток < 0 ТОГДА -РасчетыСПокупателямиОстатки.СуммаОстаток ИНАЧЕ 0 КОНЕЦ КАК НашДолг, ОптимизацияЗаказов.СтатусЗаказа КАК ТканьСтатус, ОптимизацияЗаказов.Ячейка КАК ЯчейкаНаСкладе, ОптимизацияЗаказов.Операция КАК Операция, ОптимизацияЗаказов.ДатаОперации КАК ДатаОперации, ДокументЗаказПокупателя.Контрагент.Представление КАК ПредставлениеКонтрагента, EmailКонтрагента.Представление КАК ЭлектроннаяПочтаКонтрагента, ТелефонКонтрагента.Представление КАК ТелефонКонтрагента, ФаксКонтрагента.Представление КАК ФаксКонтрагента, ФактАдресКонтрагента.Представление КАК ФактАдресКонтрагента, ЮрАдресКонтрагента.Представление КАК ЮрАдресКонтрагента, ПочтовыйАдресКонтрагента.Представление КАК ПочтовыйАдресКонтрагента, ДругаяИнформацияКонтрагента.Представление КАК ДругаяИнформацияКонтрагента, ДокументЗаказПокупателя.Контрагент.КонтактноеЛицо.Представление КАК ПредставлениеКонтактногоЛица, EmailКонтактногоЛица.Представление КАК ЭлектроннаяПочтаКонтактногоЛица, ТелефонКонтактногоЛица.Представление КАК ТелефонКонтактногоЛица, СдельныйНаряд1.СдельныйНаряд КАК СдельныйНаряд1, СдельныйНаряд2.СдельныйНаряд КАК СдельныйНаряд2, СдельныйНаряд3.СдельныйНаряд КАК СдельныйНаряд3, СдельныйНаряд4.СдельныйНаряд КАК СдельныйНаряд4, РазрешениеОтгрузки.Разрешить КАК РазрешитьОтгрузку, ДокументЗаказПокупателя.Номенклатура.НаправлениеДеятельности КАК НаправлениеДеятельности, ДокументЗаказПокупателя.Характеристика КАК ХарактеристикаНоменклатуры, ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот + ОплатаСчетовИЗаказовОбороты.СуммаАвансаОборот КАК СуммаОплатыОборот ИЗ Документ.ЗаказПокупателя КАК ДокументЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Авто, , ) КАК ЗаказыПокупателейОстаткиИОбороты ПО (ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = ДокументЗаказПокупателя.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПокупателями.Остатки(, ) КАК РасчетыСПокупателямиОстатки ПО ДокументЗаказПокупателя.Контрагент = РасчетыСПокупателямиОстатки.Контрагент ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПоставщиками.Остатки(, ) КАК РасчетыСПоставщикамиОстатки ПО ДокументЗаказПокупателя.Контрагент = РасчетыСПоставщикамиОстатки.Контрагент ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК EmailКонтрагента ПО ДокументЗаказПокупателя.Контрагент = EmailКонтрагента.Ссылка И (EmailКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ТелефонКонтрагента ПО ДокументЗаказПокупателя.Контрагент = ТелефонКонтрагента.Ссылка И (ТелефонКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ФаксКонтрагента ПО ДокументЗаказПокупателя.Контрагент = ФаксКонтрагента.Ссылка И (ФаксКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФаксКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ФактАдресКонтрагента ПО ДокументЗаказПокупателя.Контрагент = ФактАдресКонтрагента.Ссылка И (ФактАдресКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ЮрАдресКонтрагента ПО ДокументЗаказПокупателя.Контрагент = ЮрАдресКонтрагента.Ссылка И (ЮрАдресКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ПочтовыйАдресКонтрагента ПО ДокументЗаказПокупателя.Контрагент = ПочтовыйАдресКонтрагента.Ссылка И (ПочтовыйАдресКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПочтовыйАдресКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ДругаяИнформацияКонтрагента ПО ДокументЗаказПокупателя.Контрагент = ДругаяИнформацияКонтрагента.Ссылка И (ДругаяИнформацияКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ДругаяИнформацияКонтрагента)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица.КонтактнаяИнформация КАК EmailКонтактногоЛица ПО ДокументЗаказПокупателя.Контрагент.КонтактноеЛицо = EmailКонтактногоЛица.Ссылка И (EmailКонтактногоЛица.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailКонтактногоЛица)) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица.КонтактнаяИнформация КАК ТелефонКонтактногоЛица ПО ДокументЗаказПокупателя.Контрагент.КонтактноеЛицо = ТелефонКонтактногоЛица.Ссылка И (ТелефонКонтактногоЛица.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтактногоЛица)) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОплатаСчетовИЗаказов.Обороты КАК ОплатаСчетовИЗаказовОбороты ПО ДокументЗаказПокупателя.Ссылка = ОплатаСчетовИЗаказовОбороты.СчетНаОплату ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОптимизацияЗаказов КАК ОптимизацияЗаказов ПО ДокументЗаказПокупателя.Ссылка = ОптимизацияЗаказов.ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ОптимизацияНарядов.ЗаказПокупателя КАК ЗаказПокупателя, ОптимизацияНарядов.СдельныйНаряд КАК СдельныйНаряд ИЗ РегистрСведений.ОптимизацияНарядов КАК ОптимизацияНарядов ГДЕ ОптимизацияНарядов.КлючСтроки = 0 И ОптимизацияНарядов.Флаг) КАК СдельныйНаряд1 ПО ДокументЗаказПокупателя.Ссылка = СдельныйНаряд1.ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ОптимизацияНарядов.ЗаказПокупателя КАК ЗаказПокупателя, ОптимизацияНарядов.СдельныйНаряд КАК СдельныйНаряд ИЗ РегистрСведений.ОптимизацияНарядов КАК ОптимизацияНарядов ГДЕ ОптимизацияНарядов.КлючСтроки = 1 И ОптимизацияНарядов.Флаг) КАК СдельныйНаряд2 ПО ДокументЗаказПокупателя.Ссылка = СдельныйНаряд2.ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ОптимизацияНарядов.ЗаказПокупателя КАК ЗаказПокупателя, ОптимизацияНарядов.СдельныйНаряд КАК СдельныйНаряд ИЗ РегистрСведений.ОптимизацияНарядов КАК ОптимизацияНарядов ГДЕ ОптимизацияНарядов.КлючСтроки = 2 И ОптимизацияНарядов.Флаг) КАК СдельныйНаряд3 ПО ДокументЗаказПокупателя.Ссылка = СдельныйНаряд3.ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ОптимизацияНарядов.ЗаказПокупателя КАК ЗаказПокупателя, ОптимизацияНарядов.СдельныйНаряд КАК СдельныйНаряд ИЗ РегистрСведений.ОптимизацияНарядов КАК ОптимизацияНарядов ГДЕ ОптимизацияНарядов.КлючСтроки = 3 И ОптимизацияНарядов.Флаг) КАК СдельныйНаряд4 ПО ДокументЗаказПокупателя.Ссылка = СдельныйНаряд4.ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазрешениеОтгрузки КАК РазрешениеОтгрузки ПО ДокументЗаказПокупателя.Ссылка = РазрешениеОтгрузки.ЗаказПокупателя |
|||
5
vicof
28.04.22
✎
16:21
|
Для начала почитать https://its.1c.ru/db/v8std/browse/13/-1/26/28 и переписать запрос
|
6 |
||
6
Gera1t
28.04.22
✎
16:23
|
(5) Спасибо.
|
|||
7
H A D G E H O G s
28.04.22
✎
16:43
|
тебе пою свои я песни
и ноты подобрал на слух кровь по твоим плечам стекает из ух |
|||
8
Eiffil123
28.04.22
✎
16:43
|
(0) временные таблицы не всегда увеличивают скорость. бывает наоборот. Как минимум, не понимаю, зачем для динамического списка выбираются табличные части документа:
ДокументЗаказПокупателя.Запасы.( Ссылка, НомерСтроки, Номенклатура, Характеристика, Партия, Количество, Резерв, ЕдиницаИзмерения, Цена, ПроцентСкидкиНаценки, Сумма, СтавкаНДС, СуммаНДС, Всего, ДатаОтгрузки, Спецификация ), |
|||
9
breezee
28.04.22
✎
17:21
|
Писать все в 1 большой регистр и выбирать из него
|
|||
10
youalex
28.04.22
✎
17:34
|
Как минимум, остатки и вообще данные вирт. таблиц можно - получать отдельно, заполнять в ПриПолученииДанныхНаСервере()
|
|||
11
ptiz
28.04.22
✎
17:43
|
(0) У нас тоже юзеры как-то захотели отчет по контрагентам, где есть "всё-всё-всё". Отчет разросся до 64 колонок, пока не стал бесполезным из-за времени формирования.
|
|||
12
timurhv
28.04.22
✎
17:44
|
Нельзя сразу левым соединением сделать для всех РС.ОптимизацияНарядов ? В соединении указать ссылки и ОптимизацияНарядов.КлючСтроки
---------------------------- ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ОптимизацияНарядов.ЗаказПокупателя КАК ЗаказПокупателя, ОптимизацияНарядов.СдельныйНаряд КАК СдельныйНаряд ИЗ РегистрСведений.ОптимизацияНарядов КАК ОптимизацияНарядов ГДЕ ОптимизацияНарядов.КлючСтроки = 2 И ОптимизацияНарядов.Флаг) КАК СдельныйНаряд3 ---------------------------- Структура индекса: [ОРРХ | ОРНР1 +] Период + Измерение А у вас соединение только по измерению, попробуйте передать дату как параметр "2999-12-31 23:59:59" и дополнительно по ней соединить ---------------------------- ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Авто, , ) КАК ЗаказыПокупателейОстаткиИОбороты ПО (ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = ДокументЗаказПокупателя.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПокупателями.Остатки(, ) КАК РасчетыСПокупателямиОстатки ПО ДокументЗаказПокупателя.Контрагент = РасчетыСПокупателямиОстатки.Контрагент ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСПоставщиками.Остатки(, ) КАК РасчетыСПоставщикамиОстатки ПО ДокументЗаказПокупателя.Контрагент = РасчетыСПоставщикамиОстатки.Контрагент |
13 |
||
13
timurhv
28.04.22
✎
18:07
|
(12) Дата должна быть "2999-11-01 00:00:00"
|
|||
14
timurhv
28.04.22
✎
18:07
|
тьфу :) "3999-11-01 00:00:00"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |