Имя: Пароль:
1C
1С v8
УФ: помогите решить проблемку...
0 ДенисЧ
 
28.12.11
09:27
Дана управляемая форма. На ней два табличных поля. В первом есть реквизит стрТз, в котором лежит таблица значений через ПоместитьВоВременноеХранилище. Второе ТП должно заполняться информацией из этой таблицы при перемещении по первой. (надеюсь, понятно объяснил)...

Сделал так:

&НаСервере
Процедура ЗаполнитьТаблицуПакетов(стрТз)
   //Возврат;
   //стрТз = ДанныеСтроки.табПакетов;
   
   ТабПакетов = ЭтаФорма.РеквизитФормыВЗначение("ТабПакетов");
   //ТабПакетов.Очистить();
   
   //тзПакеты = ПолучитьИзВременногоХранилища(стрТз);
   //Для Каждого стртзПакеты Из тзПакеты Цикл
   //    стрТабПакетов = ТабПакетов.Добавить();
   //    ЗаполнитьЗначенияСвойств(стрТабПакетов, стртзПакеты);
   //КонецЦикла;
   //
   //ЭтаФорма.ЗначениеВРеквизитФормы(ТабПакетов, "ТабПакетов");
КонецПроцедуры

&НаКлиенте
Процедура ДоставкаПриАктивизацииСтроки(Элемент)
   ЗаполнитьТаблицуПакетов(Элемент.ТекущиеДанные.тзПакеты);
КонецПроцедуры

При открытии обработки и заполнении данных идёт куча серверных вызовов и 1с вылетает...
Как можно по другому решить эту задачу?
1 GROOVY
 
28.12.11
09:32
Создай реквизит формы с типом ТЗ. Туда ОДИН раз загружай то что тебе надо, а потом уже обрабатывая эту ТЗ выводи в другую таблицу на форме что тебе по отборам надо. Это один из вариантов.

Второе: что в ТЗ у тебя? Возможно вопрос решается через дин.список.

ПС: Гонять реквизит формы в значение и обратно в твоем примере не надо, да и обращаться через ЭтаФорма тоже.
2 ДенисЧ
 
28.12.11
09:34
(1) 1. по отборам... А тормозить не станет? Как вариант рассмотрю...
2. В тз у меня инфа, которая собирается из двух внешних баз по данной строке первой таблицы...

ПС. А как надо?
3 GROOVY
 
28.12.11
09:42
ПолучитьИЗВХ строит запрос в таблице БД. Получи данные 1 раз, а не строй запросы при скроллинге строк. Явно же лучше.

2. не прокатит дин.список.

ПС напрямую обращайся к реквизитам формы: ТабПакетов.Добавить() и пр.
Если ТабПакетов это реквизит объекта в форме которого ты работаешь, то обращайся через: Объект.ТабПакетов.
4 ДенисЧ
 
28.12.11
09:44
(3) ТабПакетов - это тз, заполняемая на сервере. На тонком клиенте я не смогу её пользовать, правильно?
Попробую через отбор.
5 GROOVY
 
28.12.11
10:15
(4) Создай реквизит формы Табпакетов и обращайся к нему и с клиента и с сервера.
6 GROOVY
 
28.12.11
10:16
+4 тип: ТаблицаЗначений. Система сама сконвертирует ее в данные формы.
7 vmv
 
28.12.11
10:20
(0) если ты вчитаешься в описание метода при активизации, то поймешь, что в нем запрещено использовать серверные методы формы - сам обжогся, когда делал мастер деталь.

решения не нашел, пробовал и внеконтектестные и передача структур - шиш. На этом обработчике мастер-деталь не построишь на УФ
8 vmv
 
28.12.11
10:22
и все ваши советы, сделай тз еще, загрузи и т.п. будут упираться в то, что в ПриАктвизации нужно будет вызывать серверный метод, а хрена он будет работать с чем бы не работал.

на маленькую приписку в СП "в методе нельзя использовать сервеные вызовы"  мало кто смотрит, но вылетает платформа ПриАктивизации() именно из-за нее, причем молча)
9 ДенисЧ
 
28.12.11
10:30
Хм... И правда написано :-)))

Сделал через отбор, вроде пока нормально работает. Спасибо.
10 GROOVY
 
28.12.11
10:40
(8) А нафига нам серверный вызов если все данные будут в реквизите формы?
11 vmv
 
28.12.11
10:46
(10) у меня была задача при авктивизации одной таблицы формы перезаполнять данные другой таблицы формы. Быстрое заполнение данных другой формы(извлечь откуда-то, загрузить в реквизит формы) - это серверные методы.

Да можно на второй таблице форме сделать на отборе или тупыми обходами ПодчиненныеЭлементы.Удалить() ...Добавить(), но хлопотно это, т.е. нужна куча "дурного" кода, тогда как на сервере пара строк, но увы и ах)
12 vmv
 
28.12.11
10:47
...Быстрое заполнение данных другой Таблицы формы при активизации строки первой таблицы формы
2 + 2 = 3.9999999999999999999999999999999...