Имя: Пароль:
1C
1С v8
Управляемая форма. Программно добавить строки в дереве
,
0 Pasha
 
23.12.11
19:13
Есть форма с деревом значений. Содержит в себе номенклатуру. И надо, чтобы по нажатии кнопочки формировались вложенные строки с комплектующими этой номенклатуры...
Никак не соображу, в каком месте соединить текущую строку и результат запроса, результатами которого заполню вложенные строки...
1 vmv
 
23.12.11
20:45
в командной панели дерева формы - это очевидно, отдыхать тебе надо
2 EvgeniuXP
 
23.12.11
21:09
текущая строка это идентификатор, а не ссылка - различие с 8.1.
3 Pasha
 
26.12.11
17:02
(1) Хамить только не надо...
Вопрос наверное надо так сформулировать... Это можно сделать только на сервере, предварительно выгрузив в дерево значений, добавив  в него все что надо и потом опять загрузив в форму... Или можно все таки просто добавить сразу строки на форме, заполнив их данными запроса... Но у меня естественно ругается на возращаемые данные, так как они в режиме клиента не перевариваются
4 vmv
 
26.12.11
17:32
(3) можно и нужно на сервере, но наглядней на клитете если добавление не напрягает.

Нужно найти узел и

ЭФД = Узел.ПодчиненныеЭлементы().Добавить() - это синтаксис для клиента и
ЭлементаФормыДерево без всяких загрузок, т.е. модификация на лету

ИЛИ

СтрокаДЗ = Узел.ПодчиненныеЭлементы().Добавить() - это синтаксис для сервера и
СтрокиДерваЗначений с послежующей загрузкой в форму модифицированного дерева
5 vmv
 
26.12.11
17:33
СтрокаДЗ = Узел.Добавить()  - так
6 vmv
 
26.12.11
17:35
если речь вообще о запросе, то его нужно поместить в динамический список и получать дерево сразу по вложениям в папки номеклатуры саму номеклатуру и т.д.

без всякой возни с заполнением дерева самостоятельно
7 Pasha
 
26.12.11
19:04
(6) В данном случае дерево делается именно вручную. Такой типа конструктор некоей системы... Но некоторые позиции имеют комплектующие, и надо чтобы создав строчку с комплектом, юзер нажал кнопку и автоматически на основнии запроса к регистру "Комплектующие" добавились подчиненные строки с комплектующими... В толстом клиенте все элементарно, а тут вот беда... Строка у меня на клиенте, а результат запроса на сервере получается... Вот и не пойму, как их подружить :(
8 vmv
 
26.12.11
19:11
(7) если не хочешь все делать на сервере, с выполнением

ЗначениеВРеквизитФормы()

то выход одни и практически уже стандартный

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

передавай между клиентом и сервером состав свойств строки как структуру - это работает и на тонком и в типовых юзают усиленно
9 vmv
 
26.12.11
19:12
В струкутуре должны быть примитивные значения реквизитов( строка, число...ссылка) допустимо описание типа, но никаких объектов и типов
10 Pasha
 
26.12.11
19:12
(8) Ага... Кажется то, что надо... Спасибо
11 Pasha
 
26.12.11
19:16
у меня УТ 11 как кладбище знаний (11,0,4,6)...но там нет таких механизмов
12 vmv
 
26.12.11
19:17
однако Дерево и Тз как и их строки на клиенте в чистом виде недоступны, а вот
из ЭлементаФормыКоллекции можно в чистом тонком вытажишь структуру свойств и отправить на сервер

вообщем идея ясна - подменяй все что не лезет на сервер или клиент структурами,
а там ЗаполнитьЗнаяениеСвойств(ТвояСтрока, ПереданнаяСтруктура)

Структура неплохол стыкуется по ключам с дуругими совершенно не родственными с ней объектами, если не стыкуется, то перебором установить из нее значения куда надо.

все
13 Pasha
 
11.01.12
16:37
Тэкс, купив книжку по управляемому интерфейсу понял, что все надо делать, выгружая реквизит формы в значение....
Но столкнулся со следующей бедой. Дерево я выгрузил, запомнил идентификатор текущей строки, все что надо добавил, загрузил обратно... Но спозиционироваться (по методике в книжке)на той же строке не выходит из-за того что индекс у нее стал больше в два раза... Как с этим бороться?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший