УФ. Работа с ТаблицейЗначений на сервере. Как ускорить? #795853


#0 by ignorant
Пытаюсь старую обработку/отчет переделать из Обычного под Управляемое Приложение. У обработки несколько реквизитов типа ТаблицаЗначений. 1-я процедура на сервере формирует эти ТЗ, записывает ЗначениеВРеквизитФормы и вызывает другие процедуры _на сервере_, кот. в процессе обработки ТаблицЗначений интенсивно "общаются" между собой. Каждая процедуры вначале вычитывает РеквизитФормыВЗначение, при завершение - возвращает изменённое ЗначениеВРеквизитФормы. Т.к. таблицы объемные - несколько тыс. строк и 10-15 колонок - выгрузка/загрузка реквизитов _сильно_ тормозит. Интересуем мнение более опытных коллег: 0. Всё ли я делаю правильно с т.з. идеологии работы с УФ? 1. Если контекст остается _на сервере_ ( серверные процедуры общаются между собой) - м.б. есть другие, более быстрые, варианты передавать значение реквизитов формы? или отказать от работы через реквизиты формы и явно использовать параметры процедур? Спасибо за внимание. ПС. Сильно не бить, УФ только начинаю изучать.
#1 by VladZ
Попробуй сделать табличную часть.
#2 by jsmith82
Работай с таб. частью или реквизитом формы. Зачем вычитывать
#3 by ignorant
ТЗ удобней, можно иметь динамический состав колонок
#4 by Buster007
Сделать все за 1 раз.
#5 by ignorant
Почему и обратился - не умею ;) Подскажи, как работать с реквизитом на сервере. У меня в в реквизите не ТаблицаЗначений, а ДанныеФормыКоллекция.
#6 by VladZ
Оно, конечно, все так. Но в УФ ты постоянно должен думать, что у тебя выполняется на сервере, а что на клиенте. И что лучше туда-сюда не таскать.
#7 by ignorant
Код старый и сложный, не хочется туда лезть без особой нужды. Если других вариантов не найду - придется делать за 1 раз.
#8 by jsmith82
методы ДФК почти равны методам ТЗ ТЗ = ДФК.Выгрузить ДФК.Загрузить(ТЗ) т.е. можно без значение в реквизит и реквизит в значение ну а вообще просто обращайся к ДФК типа для каждого стр из дфк цикл дфк[0] дфк.найтистроки(отбор)
#9 by ignorant
Я ж вроде и не таскаю _серверная_ процедура обращается к _серверной_ или я что-то не понимаю?..
#10 by PiotrLoginov
Особо не вникал. Не надо таскать на клиент то, что там не нужно. Данные нужны на клиенте для взаимодействия с чем-то, что невыгодно/невозможно активно передавать на сервер и (конечно) для интерактива, например, показа этих данных/таблиц пользователю. В остальных случаях большие таблицы после создания/работы  с ними нужно помещать на сервере во временное хранилище до момента, когда они снова понадобятся.
#11 by ignorant
ДФК - переведи
#12 by Buster007
ответ в
#13 by Maniac
ЗначениеВРеквизитФормы самый МЕДЛЕННЫЙ метод в восьмерке.
#14 by Maniac
тьфу блин, сорян. я совсем заработался. подумал про строкуВнутр что ты таблицу пихаешь
#15 by Maniac
Используй передачу таблиц через хранилище. Тогда можно работать БезКонтекста
#16 by Maniac
и передавать только то что хочешь
#17 by ignorant
А если перенести код из Формы в Модуль? В Модуле реквизиты обработки доступны нормально, не ДФК.
#18 by ignorant
, про ДФК всё равно торможу Отчет.ТЗ.Выгрузить ДанныеФормыКоллекция получаю, не ТЗ. как до ТЗ достучаться?
#19 by jsmith82
???
#20 by jsmith82
Ты чё там творишь?!
#21 by ignorant
Это не я , это УФ :( С начала. У отчета несколько реквизитов типа ТаблицаЗначений. Как из ДанныеФормыКоллекция можно получить _значение_ ТЗ ? Отчет.ТЗ.Выгрузить - получаю ДФК, не ТЗ что я делаю не так?
#22 by jsmith82
#23 by jsmith82
Если ТЗ это реквизит отчета, то в форме: Отчет.ТЗ это ДФК Отчет.ТЗ.Выгрузить это ТЗ
#24 by ignorant
Да, я ошибся. Исправил. будет работать быстрее, чем ТЗ = РеквизитФормыВЗначение("Отчет.ТЗ");  ? ОК. поробую. А как тебе мысль перенести код из Формы в Модуль? В Модуле реквизиты обработки доступны нормально...
#25 by PiotrLoginov
1. Игнор сообщений и означает, что программист еще не проникся принципами программирования УФ. 2. Надежда "переехать" в модуль объекта, где контекст как будто ближе к ОФ (а по существу просто весь существует лишь на сервере) подтверждает 1. На самом деле на скорость не влияет, где обращаться к реквизитам обработки - в модуле формы или в модуле объекта.
#26 by Maniac
Ну на самом деле с модулем обработки действительно обидная ситуация. Особенно когда хочется закрыть код.
#27 by Мыш
Не надо стесняться )
#28 by shpioleg
ЗначениеВРеквизитФормы используешь только 1 раз когда все ТЗ сформированы и возвращаешься на клиент. Серверные процедуры "при общение между собой" передают эти ТЗ через параметры по ссылке. Зачем вообще выдумывать общение между процедурами через реквизит формы? Сам же пишешь >или отказать от работы через реквизиты формы и явно использовать параметры процедур
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С