Имя: Пароль:
1C
 
УФ в ОФ 1с8.3 УПП
Ø (rphosts 15.04.2016 05:00)
0 Casper211
 
14.04.16
14:52
Доброго дня. Підскажіть будь ласка як переробити з управляемой формы в звичайну форму. Мені треба  преобразование дерева значений в таблицу значений и обратно. Была необходимость  в документе, выводить информацию в виде дерева и хранить ее в табличных частях документа.

Я нашел вот такое:
"Дерево значений в таблицу значений
Дано: дерево значений (2 колонки) и таблица значений (4 колонки). Две дополнительные колонки в таблице значений нужны для обратного преобразования, если оно не требуется то и колонки не нужны.
Код выглядит так:"


&НаСервере
Процедура ВТЗНаСервере()
   тДерево = РеквизитФормыВЗначение("Дерево");
   тТаблица = РеквизитФормыВЗначение("Таблица");

   ПреобразоватьВТЗРекурсия(тДерево, тТаблица, Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
   тДерево.Строки.Очистить();

   ЗначениеВРеквизитФормы(тТаблица, "Таблица");
   ЗначениеВРеквизитФормы(тДерево, "Дерево");
КонецПроцедуры

&НаСервере
Процедура ПреобразоватьВТЗРекурсия(тДерево, тТаблица, ГУИД)
   Для Каждого тСтр Из тДерево.Строки Цикл
      нСтр = тТаблица.Добавить();
      нСтр.Колонка1 = тСтр.Колонка1;
      нСтр.Колонка2 = тСтр.Колонка2;
      нСтр.Родитель = ГУИД;
      нСтр.ГУИД = Новый УникальныйИдентификатор();
      Если тСтр.Строки.Количество()>0 Тогда
         ПреобразоватьВТЗРекурсия(тСтр, тТаблица, нСтр.ГУИД);
      КонецЕсли;
   КонецЦикла;
КонецПроцедуры


Таблица значений в дерево значений

Обратное преобразование производится при помощи двух лишних колонок («ГУИД» и «Родитель») если из таблицы значений была удалена какая-то строка, то все подчиненные ей строки также будут удалены.

Код выглядит так:


&НаСервере
Процедура ВДЗНаСервере()
   тДерево = РеквизитФормыВЗначение("Дерево");
   тТаблица = РеквизитФормыВЗначение("Таблица");

   ПреобразоватьВДЗРекурсия(тДерево, тТаблица, Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
   тТаблица.Очистить();

   ЗначениеВРеквизитФормы(тТаблица, "Таблица");
   ЗначениеВРеквизитФормы(тДерево, "Дерево");
КонецПроцедуры

&НаСервере
Процедура ПреобразоватьВДЗРекурсия(тДерево, тТаблица, ГУИД)
   тПоиск = Новый Структура("Родитель", ГУИД);
   тМассив = тТаблица.НайтиСтроки(тПоиск);
   Для Каждого тСтр Из тМассив Цикл
      нСтр = тДерево.Строки.Добавить();
      нСтр.Колонка1 = тСтр.Колонка1;
      нСтр.Колонка2 = тСтр.Колонка2;
      ПреобразоватьВДЗРекурсия(нСтр, тТаблица, тСтр.ГУИД);
   КонецЦикла;
КонецПроцедуры


Я подумал может как-то переделать в ОФ. Подскажите пожалуйста, или может вы уже сделали такое, поделитесь опытом. Спасибо.

Работу приведенного выше кода можно посмотреть в маленькой обработке.
http://1c-programmer-blog.ru/wp-content/uploads/2015/03/DZTZ.rar
1 Casper211
 
14.04.16
14:53
Извините, не то скопировал.

"Здравствуйте. Подскажите пожалуйста как переделать с управляемой формы в обычную форму. Мне надо преобразование дерева значений в таблицу значений и обратно. Была необходимость в документе, выводить информацию в виде дерева и хранить ее в табличных частях документа."
2 dimaldinho
 
14.04.16
15:00
(0) Я подумал может как-то переделать в ОФ

1. Убрать директивы компиляции: &НаСервере
2. готово
3 dimaldinho
 
14.04.16
15:00
РеквизитФормыВЗначение+ЗначениеВРеквизитФормы - и вот это убрать
4 Casper211
 
14.04.16
15:01
(3) Спасибо за подсказку, я сейчас попробую
5 Casper211
 
14.04.16
23:03
(3) Все получилось. Благодарю вас