Имя: Пароль:
1C
1С v8
Вызовы сервера 4 vs 1
,
0 kible
 
28.05.12
10:24
1. 1 100% (2)
2. 4 0% (0)
Всего мнений: 2

Добрый день! Что будет быстрее, 4 вызова сервера (Объем данных = 20000 байт) или 1 вызов (Объем данных = 27000 байт)
1 andrewks
 
28.05.12
10:25
странный вопрос

1
2 kible
 
28.05.12
10:26
(1) Почему? Объем данных при 4 вызовах меньше.
3 andrewks
 
28.05.12
10:33
что быстрее: за один раз снять с банкомата 27000 руб, или за четыре раза снять по 5000 руб?
4 Irbis
 
28.05.12
10:34
(3) Это смотря какими купюрами банкомат отслюнявливать будет
5 andrewks
 
28.05.12
10:34
(4) ну, условимся, что одинаковыми
6 Fragster
 
гуру
28.05.12
10:35
зависит от того, что на сервере делается
7 Irbis
 
28.05.12
10:35
Так и с данными, вдруг потом из кэша доставать будет. пока постановка вопроса некорректна.
8 Fragster
 
гуру
28.05.12
10:35
(6)+ автор же весь такой загадочный
9 andrewks
 
28.05.12
10:40
тем не менее, если условиться, что данные получаются одним и тем же алгоритмом, думаю, по статистике 2-й вариант победит
10 Irbis
 
28.05.12
10:42
(9) Оно конечно логично и скорее всего при прочих равных так и будет, но автор не только вопрос сформулировтаь не может, а даже тупо замер не сделал.
11 kible
 
28.05.12
10:50
На сервере обновляются динамические списки.
12 kible
 
28.05.12
11:03
Еще вопрос. Никак не могу понять почему 2 раза вызывается сервер при активации строки таблицы?

&НаКлиенте
Процедура ОсновнаяТаблицаПриАктивизацииСтроки(Элемент)
   
Если ЭтаФорма.Элементы.ОсновнаяТаблица.ТекущиеДанные <> Неопределено Тогда
   ПодключитьОбработчикОжидания("ОбработкаОжидания",0.1,Истина);
КонецЕсли;
   
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОжидания()
 
   Период = ЭтаФорма.Элементы.ОсновнаяТаблица.ТекущиеДанные.ПериодМесяц;
   
   
   Элементы.Начисления.Период.ДатаНачала = Период;
   Элементы.Начисления.Период.ДатаОкончания = КонецМесяца(Период);
   
   Элементы.Перерасчеты.Период.ДатаНачала = Период;
   Элементы.Перерасчеты.Период.ДатаОкончания = КонецМесяца(Период);
       
   Элементы.Оплата.Период.ДатаНачала = Период;
   Элементы.Оплата.Период.ДатаОкончания = КонецМесяца(Период);
   
   ОбновитьСписки(,Период);
   
КонецПроцедуры

&НаСервере
Процедура ОбновитьСписки(ОбновлятьОсновнуюТаблицу = Ложь,Период)
   
ПоказанияСчетчиков.Параметры.УстановитьЗначениеПараметра("Дата",КонецМесяца(Период));
   
   Если ОбновлятьОсновнуюТаблицу Тогда
       Элементы.ОсновнаяТаблица.Обновить();
   КонецЕсли;
   
   Элементы.Начисления.Обновить();
   Элементы.Перерасчеты.Обновить();
   Элементы.Оплата.Обновить();
   
КонецПроцедуры
13 kible
 
28.05.12
11:04
(12)+ После завершения процедуры "ОбновитьСписки" сервер вызывается 2 раза.
14 kible
 
28.05.12
11:14
^
15 acsent
 
28.05.12
11:18
нужно учитывать что контекстный вызов сервере тягает неявно форму туда-сюда
16 kible
 
28.05.12
11:25
(15) Как в таком случае лучше обновить списки? Если обновляю списки на клиенте то сервер вызывается 3 раза.
17 Fragster
 
гуру
28.05.12
11:25
Процедура ОсновнаяТаблицаПриАктивизацииСтроки(Элемент)
   
Если ЭтаФорма.Элементы.ОсновнаяТаблица.ТекущиеДанные <> Неопределено Тогда
   ПодключитьОбработчикОжидания("ОбработкаОжидания",0.1,Истина);
КонецЕсли;
   
КонецПроцедуры
18 Fragster
 
гуру
28.05.12
11:26
это еще хорошо, что не циклится
19 kible
 
28.05.12
11:27
(18) Да, в одной форме встретился с такой проблемой.
20 kible
 
28.05.12
11:42
ап
21 kible
 
28.05.12
11:51
ап.
22 Fragster
 
гуру
28.05.12
11:52
(21) убери (17) уже
23 kible
 
28.05.12
11:53
(22) Мне нужно при активации строки получить период из строки и обновить списки. Куда я должен убрать (17)?
24 Fragster
 
гуру
28.05.12
11:55
(23) после обновления таб части, если в ней был курсор - активизация строки еще раз отрабатывает, чего непонятного-то?
25 Fragster
 
гуру
28.05.12
11:56
а зачем обновление ТЧ через обработку ожидания - так вообще ХЗ
26 kible
 
28.05.12
11:58
(25) Потому что при открытии формы при активации строки списки не обновлялись.
27 kible
 
28.05.12
11:59
(24) Переместил код в обработку выбора. Не помогло. Сервер вызывается 2 раза.
28 Юрий Лазаренко
 
28.05.12
12:03
(0) Однозначно второй вариант.
(2) У тебя время тратится не только на перекачку данных, но и на сам факт вызова сервера, а это намного бОльшее время, чем нужно на перекачку 7000 байт.

1
29 kible
 
28.05.12
12:07
(28) С этим разобрались. Теперь нужно как-то правильно обновить списки.
30 Юрий Лазаренко
 
28.05.12
12:33
(29) Ну попробуй понять, где у тебя эти вызовы происходят. Попробуй закомментить строку

ОбновитьСписки(,Период);

вставь вместо нее СообщитьПользователю("БлаБлаБла"). Таким образом исключаем явный вызов сервера. Запусти и посмотри, сколько раз у тебя произойдет вызов сервера. Если ни одного раза, значит копать надо внутри процедуры

&НаСервере
Процедура ОбновитьСписки(ОбновлятьОсновнуюТаблицу = Ложь,Период)

Если сообщение выйдет 2 раза, значит это ты его 2 раза явно вызываешь.
31 МуМу
 
28.05.12
12:36
Бредовый вопрос.:) Возьми да и проверь!
32 kible
 
28.05.12
13:17
(30) Сообщение выходит 1 раз. А что не так внутри процедуры?
33 Юрий Лазаренко
 
28.05.12
13:31
(32) Тут думать надо... Ну попробуй для начала закомментить вообще все строки внутри серверной процедуры, посмотри на количество вызовов. Если останется 2, значит дело сложное и думать придется долго. Если один, то раскомментаривай строки по одной и смотри, после какой из них происходит второй вызов.
34 kible
 
28.05.12
13:38
(33) Если есть данные этом списке Элементы.Начисления.Обновить(); то сервер вызывается 2 раза
35 kible
 
28.05.12
13:40
(34)+Этот список состоит из документов начисления. Если данные при обновлении изменяются тогда сервер вызывается 2 раза.
36 kible
 
28.05.12
13:55
(33) Понял почему 2 вызова. Почему-то при возвращении формы с сервера все списки заново обновляются. Как теперь этого избежать?
37 Юрий Лазаренко
 
28.05.12
13:56
(36) Наверно в свойствах динамических списков стоит автообновление
38 Юрий Лазаренко
 
28.05.12
13:57
+(37) ДинамическоеСчитываниеДанных
39 kible
 
28.05.12
14:25
(38) Убрал галочки. То же самое.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн