Имя: Пароль:
1C
1С v8
Таблица значений на управляемой форме
0 Dionisious
 
07.09.12
12:08
Подскажите пожалуйста кто знает.

Есть управляемая форма. У нее в реквизитах ТаблицаЗначений. Таблица заполняется программно и содержит много строк (больше 100 000). Таблица выведена на форму.

На форме есть поле. У поля прописан обработчик события ПриИзменении. В этом обработчике вызывается серверная процедура. Дак вот вызов этой процедуры занимает очень много времени. Хотя ни каких параметров не передается. По всей видимости при вызове серверной процедуры на сервер передается вся таблица значений.

Как думаете можно это как нибудь обойти.

Заранее благодарен за любые предложения.
1 DrShad
 
07.09.12
12:09
так она передается или нет?
2 Dionisious
 
07.09.12
12:10
В коде не передается. Но судя по замеру производительности - что еще 1С может так долго делать?
3 aleks-id
 
07.09.12
12:11
а таб.часть использовать не?
4 k1us181b
 
07.09.12
12:13
&НаСервереБезКонтекста пробовал?
5 Волесвет
 
07.09.12
12:15
"На форме есть поле. У поля прописан обработчик события ПриИзменении. В этом обработчике вызывается серверная процедура"
приизменении поля?? табл часть тогда причем? вызывается серверная процедура - имхо копаем тут
6 Dionisious
 
07.09.12
12:20
(3) увы нужна именно таблица значений.

(4) потом нужно получить объект. Так что без контекста не катит.

(5) вот и я думал при чем тут таблица. Зависает именно на вызове процедуры. Если таблицу очистить и снова изменить поле - вызов проходит в разы быстрее.
7 kochurovg
 
07.09.12
12:20
(4) поможет
8 zladenuw
 
07.09.12
12:21
А что именно ты хочешь изменять ? тормоза только когда 1 раз изменяешь или постоянно ?
9 Rovan
 
гуру
07.09.12
12:25
(6) а чем ТЗ лучше чем ТЧ ?
10 Dionisious
 
07.09.12
12:26
Нет я конечно понимаю как это обойти радикально переделав пол документа. Но вопрос в том как хранить реквизит формы таблицу значений на сервере не передавая ее на клиента и обратно.

Вот думаю может как то можно динамический список для отображения таблицы использовать. С произвольным запросом и параметром ТЗ. Но что то не получается.
11 Dionisious
 
07.09.12
12:29
(9) Это форма документа и ТЧ там ни к чему. Вернее в зависимости от вида документа ТЗ может содержать разные колонки. Поэтому формирую ТЗ и записываю ее в реквизит документа ХранилищеЗначения. При записи и при открытии тормоза конечно есть из-за этого. Но это терпимо. Но когда реквизиты документа начинаешь менять становится все печально как то.
12 acsent
 
07.09.12
12:31
вызов сервера неявно передает форму на сервер, а потом обратно
13 acsent
 
07.09.12
12:31
сделай таблицу невидимой по умолчанию
14 DrShad
 
07.09.12
12:34
(11) мсье знает толк в извращениях
15 Defender aka LINN
 
07.09.12
12:59
(11) Маладец...
16 Dionisious
 
07.09.12
13:01
(14) (15) Да я такой.

(13) иногда надо редактировать. Хотя можно таблицу и вообще не выводить на форму.
17 zladenuw
 
07.09.12
13:06
(16) если ее скрыть то все Хорошо ?
18 Dionisious
 
07.09.12
13:14
(17) ни видимость ни полное удаление таблицы с формы не помогают.
19 zladenuw
 
07.09.12
13:18
а если попробовать реквизит объекта. а не формы. может попустить
20 Dionisious
 
07.09.12
13:26
(19) а тип реквизита какой сделать?
21 zladenuw
 
07.09.12
13:33
может тз ?
22 Dionisious
 
07.09.12
14:00
Это будет тогда табличная часть. У меня документ а не обработка. В документе реквизит - хранилище значения. Куда при записи сохраняется ТЗ.
23 Стальная Крыса
 
07.09.12
14:52
а зачем: "... В этом обработчике вызывается серверная процедура" ?

серверная процедура что-то делает со всей ТЗ или с какой-то ее частью - строкой ?

если только со строкой, тогда все просто:
1. упаковать данные строки в структуру;
2. передать на "сервер без контекста" для обработки;
3. получить на клиент результат обработки ОДНОЙ строки;
4. записать на клиенте в ТЗ.

зы. ну а при закрытии все равно тормозов не избежать.
24 Стальная Крыса
 
07.09.12
14:55
есть вариант хранения произвольной структуры данных объекта с использованием нескольких регистров:
3 под метаданные + по количеству типов хранящейся информации.

в этом случае все будет быстро, но разумеется накладно.
25 vmv
 
07.09.12
15:01
наверняка в серверной есть РеквизитФормыВЗначение("Объект")

где 100К строк

или с самой тз и вся это масса конфертиться в значение-объект

чему удивляться?

вообще 100К строк в Тч/Тз и более - попахивает кривым проектированием, вернее это 100% недуманное решение задачи

Есть же средства дифференцирования данных, есть мастер-детели и никакой идиот не будут листать 100 000 строк, он всегда будет использовать отборы и фильтры.

там почему же сразу не разложить яйца по разным корзинам грамотно?
26 Defender aka LINN
 
07.09.12
15:02
Может лучше хранить ТЗ на сервере, да и все? Нафига она на форме?
Ну и, само собой, правильный совет: избавься нафиг от этого извращения. Совсем.
27 vmv
 
07.09.12
15:02
(22) бгг, хранилище значений для тз - это вообще капец.

я тож раньше велся на это типа удобно - опа сохранил тз в хранилище вытащил, но как видим при солидном объеме тз этот соблазн - от лукавого)
28 Dionisious
 
08.09.12
10:42
(23) Ни чего она с ТЗ не делает. Совсем. Говорю же замер производительности дает 99% выполнения на строке вызова серверной процедуре а не на всяких там РеквизитФормыВЗначение(). То есть при вызове даже пустой серверной процедуры на сервер передается вся ТЗ.

(24) через ТЗ делаю что бы объекты метаданных не плодить.

(25) если серверную процедуру сделать пустой - то же самое.

(26) я бы рад но как? Реквизит формы передается туда сюда даже если он на форме не отображается. Делал переменную формы. Ее значение пропадает при завершении выполнения любой процедуры. Может попробовать переменную объекта? Попробую в понедельник пожалуй. Но что то сомнения терзают. Регистр что ли сделать для временного хранения? Но это еще большее извращение.

(27) Кстати работает вполне себе ни че так. Если бы ТЗ при каждом вызове не передавалась с клиента на сервер было бы совсем хорошо.

Кстати видимые тормоза заметил на 180 тысячах строк. При этом открытие документа идет секунд 20. Закрытие примерно столько же. Вполне себе нормально. Если бы не серверные обработчики событий было бы совсем хорошо.

Кстати кому интересно задача собственно такая - алкогольная декларация. Надо хранить в том виде в каком ее сдали. Раньше делал через регистр сведений. Но в том решении при сдаче корректировки данные первичного отчета пропадали. Сейчас новую форму решил сделать примерно так же как в типовой регламентированная отчетность. Сначала даже думал сделать так же через ТабличныйДокумент. Но он у меня умер - даже не дошел до 100 тысяч строк. Переделал на ТЗ. Вроде стало лучше. Но появилась эта проблема.

Кроме того есть еще корпоративная отчетность тоже думаю запилить на этот же механизм. Нужные данные хранить в ТЗ а ТЗ в хранилище. Поэтому и не хочу делать фиксированные метаданные. Так что да извращение но по моему вполне оправдано.
29 Defender aka LINN
 
10.09.12
10:29
(28) Открой для себя временное хранилище
30 Dionisious
 
10.09.12
13:01
(29) кстати да. Спасибо. Пробовал уже временное хранилище. Но там была таблица не очень оптимизирована поэтому переделал на ТЗ. Сейчас попробую вернуть назад временное хранилище с другой ТЗ и отображать буду по установленному отбору.

Всем огромное спасибо.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший