Digital-агентство Программист 1С
Портфолио
О нас
  • О компании
  • Партнеры
  • Реквизиты
  • Вопрос ответ
Услуги
  • Продвижение сайтов
    • SEO-продвижение
    • Seo-оптимизация сайта
    • Продвижение сайта статьями
    • SMM-продвижение в социальных сетях
    • Продвижение бренда в Инстаграм
    • Продвижение товаров интернет-магазина
  • Настройка и ведение контекстной рекламы
    • Настройка и ведение контекстной рекламы Яндекс.Директ
    • Google Adwords
    • Комплексная контекстная реклама
    • Аудит контекстной рекламы
  • Создание сайтов
    • Создание Интернет-магазина
    • Создание Корпоративного сайта
    • Наполнение интернет-магазина и сайтов
    • Дизайн и редизайн сайта
    • Интеграция сайта с Яндекс Маркетом
    • Коллтрекинг Mango
    • Web-аналитика и настройка счетчиков
  • Услуги 1С для бизнеса
    • Внедрение 1С
    • Hастройка 1С
    • Обслуживание 1С
    • Услуги программиста 1С
    • Сопровождение 1С
    • Автоматизация 1С
    • Доработка 1С
    • Интеграция 1С:Предприятие с Яндекс Маркетом
    • Маркировка импорта обуви
    • Интеграция OZON и 1C Предприятие
  • Автоматизация салона красоты
    • 1С:Предприятие для Салона красоты
    • CRM-система для Салона красоты
    • Создание сайта салона красоты
    • Продвижение сайта салона красоты
    • Реклама для Салона красоты
Блог
Контакты
Ещё
    Задать вопрос
    info@programmist1c.ru
    Люберцы, ул. Октябрьский проспект, 241Б,этаж 3 ,офис 301.
    Digital-агентство Программист 1С
    Портфолио
    О нас
    • О компании
    • Партнеры
    • Реквизиты
    • Вопрос ответ
    Услуги
    • Продвижение сайтов
      Продвижение сайтов
      • SEO-продвижение —
      • Seo-оптимизация сайта —
      • Продвижение сайта статьями —
      • SMM-продвижение в социальных сетях —
      • Продвижение бренда в Инстаграм —
      • Продвижение товаров интернет-магазина
    • Настройка и ведение контекстной рекламы
      Настройка и ведение контекстной рекламы
      • Настройка и ведение контекстной рекламы Яндекс.Директ —
      • Google Adwords —
      • Комплексная контекстная реклама —
      • Аудит контекстной рекламы
    • Создание сайтов
      Создание сайтов
      • Создание Интернет-магазина —
      • Создание Корпоративного сайта —
      • Наполнение интернет-магазина и сайтов —
      • Дизайн и редизайн сайта —
      • Интеграция сайта с Яндекс Маркетом —
      • Коллтрекинг Mango —
      • Web-аналитика и настройка счетчиков
    • Услуги 1С для бизнеса
      Услуги 1С для бизнеса
      • Внедрение 1С —
      • Hастройка 1С —
      • Обслуживание 1С —
      • Услуги программиста 1С —
      • Сопровождение 1С —
      • Автоматизация 1С —
      • Доработка 1С —
      • Интеграция 1С:Предприятие с Яндекс Маркетом —
      • Маркировка импорта обуви —
      • Интеграция OZON и 1C Предприятие
    • Автоматизация салона красоты
      Автоматизация салона красоты
      • 1С:Предприятие для Салона красоты —
      • CRM-система для Салона красоты —
      • Создание сайта салона красоты —
      • Продвижение сайта салона красоты —
      • Реклама для Салона красоты
    Блог
    Контакты
      Digital-агентство Программист 1С
      Портфолио
      О нас
      • О компании
      • Партнеры
      • Реквизиты
      • Вопрос ответ
      Услуги
      • Продвижение сайтов
        Продвижение сайтов
        • SEO-продвижение —
        • Seo-оптимизация сайта —
        • Продвижение сайта статьями —
        • SMM-продвижение в социальных сетях —
        • Продвижение бренда в Инстаграм —
        • Продвижение товаров интернет-магазина
      • Настройка и ведение контекстной рекламы
        Настройка и ведение контекстной рекламы
        • Настройка и ведение контекстной рекламы Яндекс.Директ —
        • Google Adwords —
        • Комплексная контекстная реклама —
        • Аудит контекстной рекламы
      • Создание сайтов
        Создание сайтов
        • Создание Интернет-магазина —
        • Создание Корпоративного сайта —
        • Наполнение интернет-магазина и сайтов —
        • Дизайн и редизайн сайта —
        • Интеграция сайта с Яндекс Маркетом —
        • Коллтрекинг Mango —
        • Web-аналитика и настройка счетчиков
      • Услуги 1С для бизнеса
        Услуги 1С для бизнеса
        • Внедрение 1С —
        • Hастройка 1С —
        • Обслуживание 1С —
        • Услуги программиста 1С —
        • Сопровождение 1С —
        • Автоматизация 1С —
        • Доработка 1С —
        • Интеграция 1С:Предприятие с Яндекс Маркетом —
        • Маркировка импорта обуви —
        • Интеграция OZON и 1C Предприятие
      • Автоматизация салона красоты
        Автоматизация салона красоты
        • 1С:Предприятие для Салона красоты —
        • CRM-система для Салона красоты —
        • Создание сайта салона красоты —
        • Продвижение сайта салона красоты —
        • Реклама для Салона красоты
      Блог
      Контакты
        Digital-агентство Программист 1С
        Digital-агентство Программист 1С
        • Портфолио
        • О нас
          • Назад
          • О нас
          • О компании
          • Партнеры
          • Реквизиты
          • Вопрос ответ
        • Услуги
          • Назад
          • Услуги
          • Продвижение сайтов
            • Назад
            • Продвижение сайтов
            • SEO-продвижение
            • Seo-оптимизация сайта
            • Продвижение сайта статьями
            • SMM-продвижение в социальных сетях
            • Продвижение бренда в Инстаграм
            • Продвижение товаров интернет-магазина
          • Настройка и ведение контекстной рекламы
            • Назад
            • Настройка и ведение контекстной рекламы
            • Настройка и ведение контекстной рекламы Яндекс.Директ
            • Google Adwords
            • Комплексная контекстная реклама
            • Аудит контекстной рекламы
          • Создание сайтов
            • Назад
            • Создание сайтов
            • Создание Интернет-магазина
            • Создание Корпоративного сайта
            • Наполнение интернет-магазина и сайтов
            • Дизайн и редизайн сайта
            • Интеграция сайта с Яндекс Маркетом
            • Коллтрекинг Mango
            • Web-аналитика и настройка счетчиков
          • Услуги 1С для бизнеса
            • Назад
            • Услуги 1С для бизнеса
            • Внедрение 1С
            • Hастройка 1С
            • Обслуживание 1С
            • Услуги программиста 1С
            • Сопровождение 1С
            • Автоматизация 1С
            • Доработка 1С
            • Интеграция 1С:Предприятие с Яндекс Маркетом
            • Маркировка импорта обуви
            • Интеграция OZON и 1C Предприятие
          • Автоматизация салона красоты
            • Назад
            • Автоматизация салона красоты
            • 1С:Предприятие для Салона красоты
            • CRM-система для Салона красоты
            • Создание сайта салона красоты
            • Продвижение сайта салона красоты
            • Реклама для Салона красоты
        • Блог
        • Контакты
        info@programmist1c.ru
        Люберцы, ул. Октябрьский проспект, 241Б,этаж 3 ,офис 301.
        • Главная
        • Примеры программирования

        v8: Универсальное сохранение/восстановление деревьев

        Мы всегда на связи
        Универсальный алгоритм сохранения\восстановления деревьев на форме.
        Автор статьи: Violently
        Последняя редакция №1 от 30.01.07


        Ключевые слова: Дерево, сохранить, восстановить, записать, построить


        В данной статье я предлагаю рассмотреть универсальный алгоритм восстановления деревьев.
        Введение:
          На начальной стадии моей работы так сложилось, что мне постоянно давали делать документы, у которых на форме необходимо было представлять данные в иерархическом виде. В связи с этим при сохранении документа необходимо было как-то запоминать дерево. Намучавшись вдоволь с индивидуальным для каждого документа алгоритмом, было решено разработать универсальный.
        Описание универсального алгоритма сохранения:
        Чтобы реализовать алгоритм, потребуется следующее:
        1.    Предположим, что дерево на форме у Вас уже есть и оно как-то заполняется, либо Вы его заполняете сами – неважно.
        2.    Добавляем на форму в дерево две колонки, у меня это будет: «ИндексНачало» и «ИндексКонец», они будут иметь строковое представление в 200 символов. (Данные колонки затем рекомендуется просто скрыть, так как они носят чисто служебный характер).
        3.    Создаем табличную часть у документа, которая будет содержать реквизиты, количество и тип которых будут зависеть от количества и типа колонок на дереве формы. (Грубо говоря, переносим колонки в  табличную часть).
        4.    После чего на процедуре «ПриЗаписи» (вообще по Вашему усмотрению) будем сохранять дерево в табличную часть.
        Например, я покажу как это сделано у меня:
        4.1.    Сначала вызывается процедура «СохранитьДеревья»:
           
        Процедура СохранитьДеревья()
             ВосстановлениеДерева.Очистить(); //чистим табличную часть
            СохранитьДерево(ДеревоНаФорме); //вызываем процедуру сохранения
            КонецПроцедуры

        4.2 Сохраняем:
           
        Процедура СохранитьДерево (Дерево)
            Сч = 0;
            Для каждого Стр из Дерево.Строки Цикл        
                Индекс     = ДеревоНаФорме.Строки.Индекс(Стр);
                
                Буква         = ВернутьБуквуПоЧислу(Стр.Уровень());
                ТекРодитель = Стр.Родитель;
                Если ТекРодитель = Неопределено Тогда
                    ИндексНачало     = "" + Буква + Сч;
                    Приставка         = "";
                Иначе
                    ИндексНачало     = ТекРодитель.ИндексКонец;
                    Приставка         = ИндексНачало;
                КонецЕсли;
                ИндексКонец = "" + Буква + Сч + Приставка;
                Стр.ИндексНачало     = ИндексНачало;
                Стр.ИндексКонец     = ИндексКонец;
                
                // заполнение табличной части
                СтрП = ВосстановлениеДерева.Добавить();
                СтрП.СтатьиКалькуляции          = Стр.СтатьиКалькуляции;
                СтрП.СтруктураИзделий          = Стр.СтруктураИзделий;
                СтрП.ЕдиницыИзмерения          = Стр.ЕдиницыИзмерения;
                СтрП.Количество                          = Стр.Количество;     
                СтрП.ИндексНачало          = ИндексНачало;
                СтрП.ИндексКонец              = ИндексКонец;
                СохранитьДерево (Стр);
                Сч = Сч + 1;
            КонецЦикла;        
        КонецПроцедуры
        
        Функция ВернутьБуквуПоЧислу(НомерБуквы)
            НомерБуквы1 = НомерБуквы + 1;
            СтрокаБукв     = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
            Если НомерБуквы1 > 33 Тогда
                НомерБуквы2 = НомерБуквы1 - 33;
                Буква1         = ВернутьБуквуПоЧислу(НомерБуквы2);
                Буква         = Сред(СтрокаБукв, 1, 1) + Буква1;
            Иначе
                Буква         = Сред(СтрокаБукв, НомерБуквы1, 1);
            КонецЕсли;
            Возврат Буква;
        КонецФункции


        Пункт 4.2. состоит из Процедуры и Функции. Функция нужна для того, чтобы получить код для последующего восстановления дерева.

        5.    Восстанавливаем дерево, прописав следующий на процедуре «ПриОткрытии»:
        Процедура ПриОткрытии()
        Сп = Новый СписокЗначений();
            Сп.Очистить();
            Для Каждого Стр Из ВосстановлениеДерева Цикл
                Если Стр.ИндексНачало = Стр.ИндексКонец Тогда
                    Сп.Добавить(Стр);
                КонецЕсли;
            КонецЦикла;
            
            Для Каждого СтрСп Из Сп Цикл
                ВосстановитьДерево(СтрСп.Значение, ДеревоНаФорме);
            КонецЦикла;
        КонецПроцедуры
        
        
        Процедура ВосстановитьДерево (ТекСтр, ТекРодитель)
            Стр                          = ТекРодитель.Строки.Добавить();     
            Стр.СтатьиКалькуляции          = ТекСтр.СтатьиКалькуляции;
            Стр.СтруктураИзделий          = ТекСтр.СтруктураИзделий;
            Стр.ЕдиницыИзмерения          = ТекСтр.ЕдиницыИзмерения;
            Стр.Количество                  = ТекСтр.Количество;    
            Стр.ИндексНачало              = ТекСтр.ИндексНачало;
            Стр.ИндексКонец              = ТекСтр.ИндексКонец;
            
            Сп = Новый Структура();
            Сп.Очистить();
            Сп.Вставить("ИндексНачало", ТекСтр.ИндексКонец);
            Массив = ВосстановлениеДерева.НайтиСтроки(Сп);    
            Для Каждого СтрМ Из Массив Цикл
                Если СтрМ <> ТекСтр Тогда
                    ВосстановитьДерево (СтрМ, Стр);
                КонецЕсли;
            КонецЦикла;
        КонецПроцедуры


        Вот и все. После всех вышеперечисленных действий сохранение должно работать без проблем.
        Услуги
        Продвижение сайтов
        Настройка и ведение контекстной рекламы
        Создание сайтов
        Услуги 1С для бизнеса
        Автоматизация салона красоты
        Компания
        О компании
        Партнеры
        Реквизиты
        Вопрос ответ
        Проекты
        Пресс-центр
        Контакты
        Подписка на рассылку
        info@programmist1c.ru
        Люберцы, ул. Октябрьский проспект, 241Б,этаж 3 ,офис 301.
        Политика конфиденциальности
        © 2026 Все права защищены.
        ООО «УСПЕХ» ОРГН:1105027007843