Автор Тема: Задача 1.22  (Прочитано 31828 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

jonik

  • Проверенный
  • ***
  • Сообщений: 135
Re: Задача 1.22
« Ответ #105 : Февраль 12, 2018, 04:53:09 pm »
Изучаем
https://its.1c.ru/db/metod8dev#content:5842:hdoc

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

На экзамене будет большой жирный минус!

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

masenshi

  • Новичок
  • *
  • Сообщений: 7
  • ФИО: Александр
Re: Задача 1.22
« Ответ #106 : Февраль 14, 2018, 03:55:26 am »

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

А причем тут первое измерение регистра?
Я говорю что необходимо проиндексировать поля во временной таблице (ПОМЕСТИТЬ РасходнаяНакладная)!
Там нет регистров. Там данные выбираются из табличной части документа.

Запрос.Текст =
      "ВЫБРАТЬ
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
      |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
      |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга КАК Услуга
      |ПОМЕСТИТЬ РасходнаяНакладная
      |ИЗ
      |   Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
      |ГДЕ
      |   РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
      |
      |СГРУППИРОВАТЬ ПО
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
      | тут не хватает ИНДЕКСИРОВАТЬ ПО РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |   РасходнаяНакладная.Номенклатура
      |ИЗ
      |   РасходнаяНакладная КАК РасходнаяНакладная
      |ГДЕ
      |   НЕ РасходнаяНакладная.Услуга";

Далее вы соединяетесь по полю номенклатура со своим регистром. Но поле временной таблицы не индексировано. Запрос будет выполняться долго. Даже если поле второй таблицы (регистра) индексировано.
В вашем конкретном случае будет ошибка!
"Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. "


jonik

  • Проверенный
  • ***
  • Сообщений: 135
Re: Задача 1.22
« Ответ #107 : Февраль 14, 2018, 11:39:09 am »

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

А причем тут первое измерение регистра?
Я говорю что необходимо проиндексировать поля во временной таблице (ПОМЕСТИТЬ РасходнаяНакладная)!
Там нет регистров. Там данные выбираются из табличной части документа.

Запрос.Текст =
      "ВЫБРАТЬ
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
      |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
      |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга КАК Услуга
      |ПОМЕСТИТЬ РасходнаяНакладная
      |ИЗ
      |   Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
      |ГДЕ
      |   РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
      |
      |СГРУППИРОВАТЬ ПО
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
      | тут не хватает ИНДЕКСИРОВАТЬ ПО РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |   РасходнаяНакладная.Номенклатура
      |ИЗ
      |   РасходнаяНакладная КАК РасходнаяНакладная
      |ГДЕ
      |   НЕ РасходнаяНакладная.Услуга";

Далее вы соединяетесь по полю номенклатура со своим регистром. Но поле временной таблицы не индексировано. Запрос будет выполняться долго. Даже если поле второй таблицы (регистра) индексировано.
В вашем конкретном случае будет ошибка!
"Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. "
Да, перепутал, вы правы

НатальяЮГ

  • Пользователь
  • **
  • Сообщений: 33
Re: Задача 1.22
« Ответ #108 : Июль 06, 2018, 10:11:30 pm »
Мой вариант  :)