Книга знаний

1С:Предприятие / Объекты конфигурации / Справочники

Родитель в справочнике

Приемы работы со справочниками с использованием РодителяАвтор статьи: Ангел-Хоронитель | Редакторы: Волшебник, gr13, prochor, miki, Sheyko,
Последняя редакция №14 от 02.05.06 | История
URL: http://kb.mista.ru/article.php?id=173

Ключевые слова: родитель, элемент, перенести


Родитель – это группа (папка), которой принадлежит элемент.

Основные методы работы с родителем:


Выбор элементов, принадлежащих группе:

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


Изменение родителя уже существующего элемента:
   
    //Переносим элемент с кодом Гл000485 в группу с кодом Гл005172
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоКоду("Гл005172") = 1 Тогда
        Род = Спр.ТекущийЭлемент();
        Если Спр.НайтиПоКоду("Гл000485") = 1 Тогда
            Спр.Родитель = Род;
            Спр.Записать();
        КонецЕсли;    
    КонецЕсли;    

   
p.s. Обратите внимание на Спр.Записать() – часто забывают это сделать и изменения не принимаются J
p.p.s Обратите внимание на Спр.Родитель = Род. Часто пишут  Спр.ТекущийЭлемент().Родитель = Род и получают ошибку о невозможности перепозиционироваться.


Перенос элементов из одной группы в другую:

    //Перенос всех элементов из группы с кодом Гл000476 в группу с кодом Гл005172
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Справ = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоКоду("Гл005172") = 1 Тогда
        Род = Спр.ТекущийЭлемент();
        Если Спр.НайтиПоКоду("Гл000476") = 1 Тогда
            Спр.ИспользоватьРодителя(Спр.ТекущийЭлемент());
            Пока Спр.ВыбратьЭлементы() = 1 Цикл
                Спр.ПолучитьЭлемент();
                Спр.Родитель = Род;    
                Спр.Записать();
            КонецЦикла;        
        КонецЕсли;    
    КонецЕсли;    


Перенос из одной группы в другую только элементов, без групп:

    //Перенос всех элементов из группы с кодом Гл000476 в группу с кодом Гл005172
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоКоду("Гл005172") = 1 Тогда
        Род = Спр.ТекущийЭлемент();
        Если Спр.НайтиПоКоду("Гл000476") = 1 Тогда
            Спр.ИспользоватьРодителя(Спр.ТекущийЭлемент());
            nn = 0;
Пока nn = 0 Цикл
    nn = 1;
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
                    Если Спр.ЭтоГруппа() = 0 Тогда
Спр.Родитель = Род;    
                        Спр.Записать();
                        nn = 0;
                    КонецЕсли;
                КонецЦикла;     
            КонецЦикла;       
        КонецЕсли;    
    КонецЕсли;    


Сложность двух предыдущих задач состоит в том, что при смене Родителя сбивается выборка, и ее надо делать заново.

Выборка справочника по нужному родителю:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Если ТекГруппа = Спр.НайтиПоКоду("12345") = 0 Тогда
 Предупреждение("группа не найдена");
 Возврат;
КонецЕсли;
Спр.ИспользоватьРодителя(ТекГруппа,);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
 Товар = Спр.ТекущийЭлемент();
 Если Спр.ПометкаУдаления() = 1 Тогда
  Продолжить;
 КонецЕсли;
 // необходимые действия
КонецЦикла;


Проверка на принадлежность определенному родителю (не Спр.Родитель) (спасибо levnev)

Спр = СоздатьОбъект("Справочник.Номенклатура");
Если ВыбРодитель = Спр.НайтиПоКоду("12345") = 0 Тогда
 Предупреждение("группа не найдена");
 Возврат;
КонецЕсли;
Спр.ВыбратьЭлементы();
Если Найти(Товар.ПолноеНаименование(), ВыбРодитель) = 0 Тогда
 Продолжить;
КонецЕсли;


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика