Имя: Пароль:
1C
1С v8
запрос в цикле против НайтиПоРеквизиту
0 pessok
 
28.08.11
20:01
Товарщи, доброго времени суток. Вот возник вопрос:
Есть ТЗ в которой порядка 30000 строк. Как лучше осуществить ее сравнение со справочником?
Я вижу 2 варианта, но уверен, что не вижу оптимального...
1) При каждой итерации ТЗ делать запрос и проставлять параметром некое значение из ТЗ
2) При каждой итерации искать элемент справочника по реквизиту.
Итак вопрос: "Что отработает быстрее, и если существует более действенный в плане скорости вариант, то подскажите его :)"
1 Rie
 
28.08.11
20:03
(0) Засунуть ТЗ во временную таблицу и сопоставить со справочником одним запросом?
2 jump if zero
 
28.08.11
20:04
внутреннее соединение
3 pessok
 
28.08.11
20:07
(1) думал об этом, но не пойму как осуществить в моем случае.
(2) эм?
4 Rie
 
28.08.11
20:09
(3) А в чём именно проблема?
5 pessok
 
28.08.11
20:23
(4) проблем нету, просто хочу найти максимально быстрое решение
6 izekia
 
28.08.11
20:25
(5) тебе его в (1) озвучили
7 pessok
 
28.08.11
20:31
(6) угу, пробую сделать. волнует только вопрос, насколько вырастет производительность... Ну допишу, проверю, в любом случае
(1) Спасибо
8 Armando
 
28.08.11
20:53
(7) 1 запрос vs 30000 запросов
9 pessok
 
28.08.11
21:09
мгм. походя того, как я начал разбираться с временными таблицами, возник вопрос.
Я так понимаю, что все данные в ТЗ, которая будет помещена во временную таблицу должны быть строго типизированы?
10 EvgeniuXP
 
28.08.11
21:11
(0) отладчиком замерь.
11 pessok
 
28.08.11
21:13
(10) да временная таблица - лучший вариант. Вот разбираюсь с ней :)
12 izekia
 
28.08.11
21:14
(9) типы у колонок должны быть прописаны
13 pessok
 
28.08.11
21:15
(12) угу, это я понял уже. второй вопрос:
обязательно ли задваить выбор?

"ВЫБРАТЬ
 |  ТабТоваров.АртикулТовара,
 |  ТабТоваров.НаименованиеТовара,
 |  ТабТоваров.ЦенаПроизводителя,
 |  ТабТоваров.ВесТовара,
 |  ТабТоваров.ЦветТовара,
 |  ТабТоваров.ПроизводительТовара,
 |  ТабТоваров.НомерНоменклатурнойГруппы,
 |  ТабТоваров.ЦенаНаТовар,
 |  ТабТоваров.ЭтоРекомендованаяЦена
 |  ПОМЕСТИТЬ ВыбрНоменклатура  
 |  ИЗ &ТабТоваров КАК ТабТоваров";
 
 Запрос.УстановитьПараметр("ТабТоваров", ТаблицаЗагруженныхТоваров);
 Запрос.Выполнить();
 
  Запрос.Текст =  
  "ВЫБРАТЬ
  |  Номенклатура.Ссылка КАК Ссылка,
  |  ВыбрНоменклатура.АртикулТовара,
  |  ВыбрНоменклатура.НаименованиеТовара,
  |  ВыбрНоменклатура.ЦенаПроизводителя,
  |  ВыбрНоменклатура.ВесТовара,
  |  ВыбрНоменклатура.ЦветТовара,
  |  ВыбрНоменклатура.ПроизводительТовара,
  |  ВыбрНоменклатура.НомерНоменклатурнойГруппы,
  |  ВыбрНоменклатура.ЦенаНаТовар,
  |  ВыбрНоменклатура.ЭтоРекомендованаяЦена    
  |ИЗ
  |        ВыбрНоменклатура КАК ВыбрНоменклатура
  |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
  |        ПО (Номенклатура.Артикул = ВыбрНоменклатура.Артикул)";    
  РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Или есть более красивые варианты? Гугл выдал что-то такое...
14 izekia
 
28.08.11
21:21
(!3) а что ты понимаешь под задвоением выбора?
и проще делай все в одном запросе - после текста первого точку с запятой и второй запрос
15 pessok
 
28.08.11
21:25
(14) я в одной запросе и делаю, через точку с запятой. Задваивание в моем понятии то, что сначала я в пермо запросе выбираю данные из ТЗ, потом во втором выбираю теже данные, но уже соединенные... Хотя да, туплю, надо...
Вот еще неимоверно глупый вопрос, а как задать в колонку строку длиной 25?
Делаю
ТаблицаЗагруженныхТоваров.Колонки.Добавить("АртикулТовара", Новый ОписаниеТипов(Новый КвалификаторыСтроки(25)));
не отрабатывает в запросе, неизвестный тип...
16 pessok
 
28.08.11
21:29
(15) был невнимателен, каюсь. вопрос отпал. Сейчас, если дойду до точки останова, буду смотреть что и как :)
17 pessok
 
28.08.11
21:32
это, а впроцедурах &НаСервере бряки не работают, чтоль?..
18 Armando
 
29.08.11
08:11
Еще можно нужную колонку выгрузить в массив и передать в запрос в качестве параметра.
19 Sammo
 
29.08.11
08:25
Кстати, еще вопрос - откуда взялась таблица, может можно сделать сравнение на исходных данных
20 Sammo
 
29.08.11
08:26
(17) Точки останова работают на сервере, если сервер запущен в режиме отладки
21 pessok
 
29.08.11
10:31
(18) с временными таблица получился ЗНАЧИТЕЛЬНЫЙ прирост производительности.
(19) к сожалению нельзя, тз берется из скульной базы на сайте
(20) ясно, спасибо
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший