![]() |
|
УФ. Работа с ТаблицейЗначений на сервере. Как ускорить? | ☑ | ||
---|---|---|---|---|
0
ignorant
20.04.17
✎
17:53
|
Пытаюсь старую обработку/отчет переделать из Обычного под Управляемое Приложение.
У обработки несколько реквизитов типа ТаблицаЗначений. 1-я процедура на сервере формирует эти ТЗ, записывает ЗначениеВРеквизитФормы и вызывает другие процедуры _на сервере_, кот. в процессе обработки ТаблицЗначений интенсивно "общаются" между собой. Каждая процедуры вначале вычитывает РеквизитФормыВЗначение, при завершение - возвращает изменённое ЗначениеВРеквизитФормы. Т.к. таблицы объемные - несколько тыс. строк и 10-15 колонок - выгрузка/загрузка реквизитов _сильно_ тормозит. Интересуем мнение более опытных коллег: 0. Всё ли я делаю правильно с т.з. идеологии работы с УФ? 1. Если контекст остается _на сервере_ ( серверные процедуры общаются между собой) - м.б. есть другие, более быстрые, варианты передавать значение реквизитов формы? или отказать от работы через реквизиты формы и явно использовать параметры процедур? Спасибо за внимание. ПС. Сильно не бить, УФ только начинаю изучать. |
|||
1
VladZ
20.04.17
✎
17:56
|
(0) Попробуй сделать табличную часть.
|
|||
2
jsmith82
20.04.17
✎
17:57
|
Работай с таб. частью или реквизитом формы. Зачем вычитывать
|
|||
3
ignorant
20.04.17
✎
18:00
|
(1) ТЗ удобней, можно иметь динамический состав колонок
|
|||
4
Buster007
20.04.17
✎
18:02
|
Сделать все за 1 раз.
|
|||
5
ignorant
20.04.17
✎
18:03
|
(2) Почему и обратился - не умею ;)
Подскажи, как работать с реквизитом на сервере. У меня в в реквизите не ТаблицаЗначений, а ДанныеФормыКоллекция. |
|||
6
VladZ
20.04.17
✎
18:05
|
(3) Оно, конечно, все так. Но в УФ ты постоянно должен думать, что у тебя выполняется на сервере, а что на клиенте. И что лучше туда-сюда не таскать.
|
|||
7
ignorant
20.04.17
✎
18:05
|
(4) Код старый и сложный, не хочется туда лезть без особой нужды.
Если других вариантов не найду - придется делать за 1 раз. |
|||
8
jsmith82
20.04.17
✎
18:07
|
(5) методы ДФК почти равны методам ТЗ
ТЗ = ДФК.Выгрузить() ДФК.Загрузить(ТЗ) т.е. можно без значение в реквизит и реквизит в значение ну а вообще просто обращайся к ДФК типа для каждого стр из дфк цикл дфк[0] дфк.найтистроки(отбор) |
|||
9
ignorant
20.04.17
✎
18:07
|
(6) Я ж вроде и не таскаю
_серверная_ процедура обращается к _серверной_ или я что-то не понимаю?.. |
|||
10
PiotrLoginov
20.04.17
✎
18:07
|
Особо не вникал. Не надо таскать на клиент то, что там не нужно. Данные нужны на клиенте для взаимодействия с чем-то, что невыгодно/невозможно активно передавать на сервер и (конечно) для интерактива, например, показа этих данных/таблиц пользователю. В остальных случаях большие таблицы после создания/работы с ними нужно помещать на сервере во временное хранилище до момента, когда они снова понадобятся.
|
|||
11
ignorant
20.04.17
✎
18:09
|
(8) ДФК - переведи
|
|||
12
Buster007
20.04.17
✎
18:33
|
(11) ответ в (5)
|
|||
13
Maniac
20.04.17
✎
18:36
|
ЗначениеВРеквизитФормы
самый МЕДЛЕННЫЙ метод в восьмерке. |
|||
14
Maniac
20.04.17
✎
18:37
|
тьфу блин, сорян. я совсем заработался. подумал про строкуВнутр что ты таблицу пихаешь
|
|||
15
Maniac
20.04.17
✎
18:37
|
Используй передачу таблиц через хранилище.
Тогда можно работать БезКонтекста |
|||
16
Maniac
20.04.17
✎
18:37
|
и передавать только то что хочешь
|
|||
17
ignorant
20.04.17
✎
19:08
|
(13) А если перенести код из Формы в Модуль?
В Модуле реквизиты обработки доступны нормально, не ДФК. |
|||
18
ignorant
20.04.17
✎
19:13
|
(5), (12) про ДФК всё равно торможу
Отчет.ТЗ.Выгрузить() ДанныеФормыКоллекция получаю, не ТЗ. как до ТЗ достучаться? |
|||
19
jsmith82
20.04.17
✎
19:22
|
???
|
|||
20
jsmith82
20.04.17
✎
19:23
|
Ты чё там творишь?!
|
|||
21
ignorant
20.04.17
✎
19:34
|
Это не я , это УФ :(
С начала. У отчета несколько реквизитов типа ТаблицаЗначений. Как из ДанныеФормыКоллекция можно получить _значение_ ТЗ ? Отчет.ТЗ.Выгрузить() - получаю ДФК, не ТЗ что я делаю не так? |
|||
22
jsmith82
20.04.17
✎
19:42
|
(21) Отчет.ТЗ.Выгрузить() - получаю ДФК
Гон 100% |
|||
23
jsmith82
20.04.17
✎
19:44
|
Если ТЗ это реквизит отчета, то в форме:
Отчет.ТЗ это ДФК Отчет.ТЗ.Выгрузить() это ТЗ |
|||
24
ignorant
20.04.17
✎
19:57
|
Да, я ошибся. Исправил.
Твой совет ТЗ = Отчет.ТЗ.Выгрузить(); будет работать быстрее, чем ТЗ = РеквизитФормыВЗначение("Отчет.ТЗ"); ? ОК. поробую. А как тебе мысль перенести код из Формы в Модуль? В Модуле реквизиты обработки доступны нормально... |
|||
25
PiotrLoginov
20.04.17
✎
20:20
|
1. Игнор сообщений (10) и (15) означает, что программист еще не проникся принципами программирования УФ.
2. Надежда "переехать" в модуль объекта, где контекст как будто ближе к ОФ (а по существу просто весь существует лишь на сервере) подтверждает 1. На самом деле на скорость не влияет, где обращаться к реквизитам обработки - в модуле формы или в модуле объекта. |
|||
26
Maniac
20.04.17
✎
22:12
|
Ну на самом деле с модулем обработки действительно обидная ситуация.
Особенно когда хочется закрыть код. |
|||
27
Мыш
20.04.17
✎
23:01
|
(26) Не надо стесняться )
|
|||
28
shpioleg
20.04.17
✎
23:29
|
(0) ЗначениеВРеквизитФормы используешь только 1 раз когда все ТЗ сформированы и возвращаешься на клиент.
Серверные процедуры "при общение между собой" передают эти ТЗ через параметры по ссылке. Зачем вообще выдумывать общение между процедурами через реквизит формы? Сам же пишешь >или отказать от работы через реквизиты формы и явно использовать параметры процедур |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |