Имя: Пароль:
1C
1С v8
Методы Выгрузить и Загрузить набора записей регистра
0 FReIM
 
24.08.11
22:25
В модуле набора записей регистра сведений, вот такая вот процедура. Версия платформы 8.1
Процедура ПередЗаписью(Отказ, Замещение)
  Если  ЭтотОбъект.Количество()<4 тогда
  Для каждого СтрокаНабора Из ЭтотОбъект Цикл
   Запрос = Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
       |    ПМ_Материалы.Тип,
       |    ПМ_Материалы.Код,
       |    ПМ_Материалы.Параметры
       |ИЗ
       |    Справочник.ПМ_Материалы КАК ПМ_Материалы
       |ГДЕ
       |    ПМ_Материалы.Ссылка = &Ссылка";
   Запрос.УстановитьПараметр("Ссылка",СтрокаНабора.Материал);
   Выборка=Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() тогда
   СтрокаНабора.МатериалКод=Выборка.Код;
   СтрокаНабора.Тип=Выборка.Тип;
   СтрокаНабора.Параметры=Выборка.Параметры;
   КонецЕсли
  КонецЦикла;
  Иначе
  Запрос =Новый Запрос;
  Запрос.Текст="ВЫБРАТЬ
      |    ТЗ.Активна,
      |    ТЗ.Количество,
      |    ТЗ.Материал,
      |    ТЗ.Период,
      |    ТЗ.Норма,
      |    ТЗ.Работы
      |ПОМЕСТИТЬ НаборЗаписей
      |ИЗ
      |    &ТЗ КАК ТЗ
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |    НаборЗаписей.Активна,
      |    НаборЗаписей.Количество,
      |    НаборЗаписей.Материал,
      |    НаборЗаписей.Период,
      |    НаборЗаписей.Норма,
      |    НаборЗаписей.Работы,
      |    ПМ_Материалы.Тип,
      |    ПМ_Материалы.Параметры,
      |    ПМ_Материалы.Код КАК МатериалКод
      |ИЗ
      |    НаборЗаписей КАК НаборЗаписей
      |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПМ_Материалы КАК ПМ_Материалы
      |  ПО НаборЗаписей.Материал = ПМ_Материалы.Ссылка";
  Запрос.УстановитьПараметр("ТЗ",ЭтотОбъект.Выгрузить());
  ЭтотОбъект.Загрузить(Запрос.Выполнить().Выгрузить());
  КонецЕсли;
КонецПроцедуры

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

Да я знаю какой это ужас - запрос в цикле, но при работе с набором записей альтернатива мне известная - только выгрузить и загрузить. Кто либо когда либо занимался исследованием этих методов?
1 ilpar
 
24.08.11
22:32
кто ж так то тестирует?...
после первого замера закрываем 1С и запускаем 2 фрагмент кода.

При этом в 1 фрагменте нет записи набора движений в регистр.
2 ilpar
 
24.08.11
22:33
совершенно сравнивать нельзя, если я правильно понял ход твоих мыслей...
При этом НЕСФОРМУЛИРОВАННЫХ совершенно, постановка - г...
3 ilpar
 
24.08.11
22:34
в 1 фрагменте после его отработки еще будет запись движений в регистр некоторое время
4 FReIM
 
24.08.11
22:41
Хм. Лол. Чуть не забыл. Процедура ПередЗаписью() находится в модуле набора записей регистра. А ЭтотОбъект - набор записей регистра.
5 FReIM
 
24.08.11
22:51
ilpar
извини, не добавил начальное условие.
Простая задача заполнения реквизитов регистра при записи набора записей регистра,  в модуле набора записей.
Через точку обращаться - система делает не явный запрос. причем столько раз, сколько через точку обращений будет.

Единый Запрос уменьшает количество обращений, но не решает проблему запроса в цикле.

А создание временной таблицы и методы выгрузить и загрузить - требуют достаточно много времени и собственно не сравнимы с одним или двумя простыми запросами к бд.
6 FReIM
 
24.08.11
23:56
ну собственно проблема еще актуальна.
7 Reaper_1c
 
25.08.11
00:04
А на маленьких объемах тебе не похрену ли?
8 FReIM
 
25.08.11
00:40
Маленькие объемы - заносят ручками,
большие при проведении документа, точнее записи набора по строкам таблицы документа записей.
И честно говоря вопрос не о конкретной задаче, я её уже решил. А о методологии.
9 FReIM
 
25.08.11
09:34
ну а тема все еще актуальна
10 unregistered
 
25.08.11
09:44
Извиняюсь за ОФФ, но какой-то странный регистр.

А что произойдет, если у материала поменяют код или тип?
получиться, что в регистре у нас запись:
Материала - Материал1, МатериалКод - 0001, Тип - ТипМатериала1.

А в справочнике у это материала Материал1, напрмер:
Код - 0009, Тип - СовершенноДругойТип
11 FReIM
 
25.08.11
10:10
Регистр сведений. Это не ресурсы, а реквизиты, платформа 8.1, возможностей 8.2 по выводу - нет.
Форма списка регистра выведена в форму элемента справочника, с отбором по этому элементу, поскольку он является ведущим измерением регистра, выбран срез последних. Да код может поменяться. И собствено если кто что либо ручками поменял, есть кнопка обновить в форме, выбраный набор записей просто перезапишется с уже нужными реквизитами. Это все нужно для вывода данных в форму, без использования соотвествий и События ПриВыводеСтроки(). Поскольку смотреть данные будут гораздо, гораздо чаще, нежели их изменять.
12 FReIM
 
25.08.11
11:02
Тема актуальности не потеряла.
13 FReIM
 
26.08.11
10:02
Нда. Неуж-то никто не замерял производительность методов выгрузить и загрузить, и не знает их внутренего механизма?