Имя: Пароль:
1C
1С v8
Ламерский вопрос по запросам.Почему заполнение ТЧ предпочтительней через запрос?
,
0 Doomer
 
06.11.12
14:08
Пытаюсь у себя в голове уложить.
Допустим есть документ ТЧ которого нужно выгрузить в ТЧ другого, причем часть реквизитов в приемнике называются по другому, а часть отсутствует в источнике. Для решения этой задачи используется запрос. ТЧ источника выгружается и обрабатывается запросом, а результат запроса загружается в ТЧ документа приемника. Считается что так быстрее. Попытался проверить на ТЧ в несколько сотен строк разница составила меньше 1 секунды причем в пользу обычного перебора. Пробовал на файловой базе и на обычной рабочей станции. В клиент серверном варианте скорее всего картина будет другая, но возможности проверить нет.  Вопрос почему по умолчанию считается что работать через запрос быстрее?
Это скорее не вопрос, а обсуждение.
Хотелось бы все таки во внутренних механизмах разобраться. Кто как себе представляет процедуру создания документа и загрузки в него ТЗ из запроса в клиент-серверном варианте работы, на уровне взаимодействия платформы, СУБД и клиентов.
1 Defender aka LINN
 
06.11.12
14:10
(0) А этот твой "перебор", он, надо полагать, не запросом а святым духом данные получает, да?
2 ttk
 
06.11.12
14:11
Правильный запрос, это 1 обращение к БД
А хз как написанный перебор, это хз сколько раз надо обращаться к БД
3 Doomer
 
06.11.12
14:12
(1) Под перебором я понимаю цикл типа:
Для каждого СтрТЧ из Товары цикл
....
КонецЦикл
4 Reset
 
06.11.12
14:13
Срачетема инкаминг.
Вопрос слишком общий, но народ найдет, как кхм.. поспорить.
5 acsent
 
06.11.12
14:13
Считается быстрее? нет. Красивее. да
6 Serg_1960
 
06.11.12
14:16
"Это скорее не вопрос, а обсуждение" - а "обсуждение" уже давно было :( и неоднократно :) И причины получения данных "через запрос" - не совсем те, что вы перечислили. Не только "быстродействие" - есть и другие более веские причины.
7 Defender aka LINN
 
06.11.12
14:17
(3) ИсчО раз: откуда, по-твоему, взялись данные в объекте?
8 Doomer
 
06.11.12
14:17
(6) Вот эти причины я и хочу найти и осмыслить.
9 Doomer
 
06.11.12
14:18
(7) Оттуда же откуда и с запросом. из БД.
10 Defender aka LINN
 
06.11.12
14:20
(9) И какие выводы мы делаем?
11 Doomer
 
06.11.12
14:21
(10) Что все одинаково.
12 Feanorko
 
06.11.12
14:26
(11) если у объекта 100500 ТЧ по миллиону строк?
13 Defender aka LINN
 
06.11.12
14:26
(11) Что вопрос по-дурацки поставлен. Без запроса не заполнишь все равно. Но это раз. А вот тебе два:

Вставляем это перед твоим заполнением

Для Каждого Строка Из Товары Цикл
   Строка.Номенклатура = Неопределено;
   Строка.Сумма = 100500;
КонецЦикла;


Думаем.
14 SUA
 
06.11.12
14:27
(0)
создание и заполнение данных из источника - в общем случае, это
- в общем случае - только серверный код:
1) чтение данных из источника (только на сервере, если на клиенте их еще нет... но тогда чтение уже прощло по факту, и не факт что на клиенте данные не устарели), в любом случае >=1 запрос к базе (не избежать)
2) загрузка в ТЧ того что вернул запрос (не избежать)
3) обработка данных
тут сервер предприятия по простейшим действиям (математический/логический модуль) может быть быстрее скуль-сервера, или просто снизит нагрузку если нагрузка скуль-сервера в среднем по системе выше.
Но обращение к реквизитам через точку - уже намного хуже (добавляются доп. запросы в цикле).
4) передача результата на клиента если нужно - тоже без вариантов
15 Serg_1960
 
06.11.12
14:30
Не поленился, нашел нечто подобное - v8: v8: Почему в типовых делается запрос к документу из его же модуля

Воды много, но интересно почитать как колллективный разум до истины добирался :)