IT решения для Вашего бизнеса

 
Главная  |  Продукты  |  Услуги и цены  |  Клиенты  |  Контакты
 
1C Предприятие 7.7
Наши решения
Программирование
1С Предприятие 8.*
Наши решения
Партнерские разработки
Типовые решения
Программирование
Администрирование
Web проекты
Интернет-магазины
Поиск по сайту

 
Управление интернет-магазином
 

Подсистема «Управление интернет-магазином» позволяет используя типовые конфигурации 1С 8 «Управление торговлей» и «Управление торговым предприятием», «Управление небольшой фирмой» и др. организовать удобное управление интернет-продажами.

Цена: 1000$ Подробная информация о модуле

 

Главная
Сохранение и восстановление дерева в табличную часть объекта Версия для печати Отправить на e-mail
Рейтинг: / 8
ХудшаяЛучшая 
Написал Валецкий Станислав   
Работа с 1С подразумевает в первую очередь удобство. Поэтому в справочнике или в документе, хочется сделать наглядную и удобную работу с таблицей данных. Один из вариантов удобной работы - это представление и редактирование информации в виде дерева. Но здесь есть одна проблема, хранить дерево напрямую в объекте мы не можем. Можно при записи объекта сохранять дерево в хранилище, а при открытии восстанавливать, но есть один минус - если работать с документом из вне, например из запроса, то выбирать данные из хранилища не очень удобно, поэтому рассмотрим вариант хранения дерева в табличной части документа. Хранить мы будем данные строки и родителя, что позволит нам обращаться к нужным нам данным. Рассмотрим как при открытии и закрытии объекта сохранять и восстанавливать дерево. В рассматриваемом примере есть дерево на форме и есть табличная часть. При открытии восстанавливаем дерево, при записи сохраняем дерево в табличную часть. Код будет следующим:

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

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:
Жирный Курсив Подчеркнутый Зачеркнутый Цитата


Защитный код
Обновить

< Пред.   След. >
Карта сайта
1C-PROFI © 2019
Использование материалов разрешено только с указанием ссылки (для web сайтов гиперссылки)
www.megastock.ru