Имя: Пароль:
1C
1С v8
Долгое выполнение запроса по свойствам Контрагента в УПП
0 ANDRU48
 
25.08.11
19:41
Создал документ в УПП по заданию заказчика, есть табличная часть в ней контрагент и дальше три свойства контрагента, к примеру центр продаж, канал сбыта и территория.
Хочу,чтобы при изменении контрагента остальные три поля заполнились автоматически.
Пишу запрос к РегиструСведений ЗначениеСвойствОбъектов, там есть все это. Из запрос беру значение свойства по условию, что Объект регистра равен, тому контрагенту, которго мы выбрали перед (ПриИзменении), и название Свойства равно переменной (вначале в переменную заношу соответственно строку, к примеру "Центр продаж").
И так три запроса со своими параметрами к трем свойствам контрагента.
Выбирает правильно, но запрос выполняется очень долго.
Посмотрел записи в регистре их там много (не только для Контрагентов, но и для Номенклатура, вообщем везде, где можно заводить дополнительное свойство).
Все поперетыкал, как ускорить запрос, чтобы клиент не ждал после выбора контрагента (когда же у него заполнятся остальные части!).

Что посоветуете? Если надо могу завтра сам запрос скинуть для наглядности.
1 ANDRU48
 
25.08.11
19:43
А ещё вот что, если в консоли отлаживаю, то выбирает не очень долго. А если через обычный запуск, то долго.
2 Drock
 
26.08.11
04:57
Запрос = Новый Запрос;
  Запрос.УстановитьПараметр("Объект",  Номенклатура);
  Запрос.УстановитьПараметр("Свойство",  ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("7.СрокХранения"));
 
  Запрос.Текст = "ВЫБРАТЬ
  |    ЗначенияСвойствОбъектов.Объект,
  |    ЗначенияСвойствОбъектов.Значение
  |ИЗ
  |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
  |ГДЕ
  |    ЗначенияСвойствОбъектов.Объект = &Объект
  |    И ЗначенияСвойствОбъектов.Свойство = &Свойство";
 
  РезультатЗапроса = Запрос.Выполнить();
 
  Если РезультатЗапроса.Пустой()
      Тогда
   Область.Параметры.СрокХранения = "1 год.";
  Иначе
      Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
      Пока ВыборкаМестаРаботы.Следующий() Цикл
        Область.Параметры.СрокХранения =  Выборка.Значение;
      КонецЦикла;
     
     КонецЕсли;
3 Drock
 
26.08.11
04:59
а вообще отладчик в руки + замер производительности - увидиш где грабли в коде.
4 guitar_player
 
26.08.11
05:43
>>>И так три запроса со своими параметрами к трем свойствам контрагента.
сдела
5 guitar_player
 
26.08.11
05:43
*й один запрос.
Не ищи по наименованию, будь мужиком бл*ать!
6 guitar_player
 
26.08.11
05:44
и вообще код в студию
7 ANDRU48
 
26.08.11
15:34
(3) сегодня с утра час танце с отладчиком и консолью и вуяля все получилось, почти как в (1) и тоже ситуация, как в (4). В итоге запрос получился как в (2), только после запроса, я в цикле проверяю и присваиваю значение, а то в запросе такого параметра "ЗначенияСвойствОбъектов.Свойство.Наименование" не было, а мне именно такой надо.
Независимо от того, куда вы едете — это в гору и против ветра!