Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программное копирование справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
MATEVI
Как програмно скопировать справочник со всеми его родителями?
Скопировать() работает только для текущего. Но родители не копируются. И в голову ничего не приходит для копирования всех его родителей 64000000.gif .
zetovich
чет не понял куда скопировать. и что значит всех его родителей? много родителей у эл-та?
MATEVI
Есть справочник например ПодразделенияОрганизаций. Владелец Организация

Администрация (уровень 0)
ФЭО (уровень 1)
ПЭО (уровень 2)
Бухгалтерия (уровень 2)

Надо создавать программно для другого владельца точно такой же справочник Бухгалтерия (уровень2)
Нахожу по первому владельцу ссылку Бухгалтерия (уровень2)
Ссылка.Скопировать()
Ссылка.Владелец = Организация2;
Но родитель то у Бухгалтерия (уровень 2) - ФЭО (уровень 1) подчиненный 1 Организации. А для Оргнизации2 его еще нет. Его тоже надо скопировать.

Приходит в голову только фигня типа
Если Ссылка.Уровень() = 1
Родитель.
ИначеЕсли уровень 2
Родитель.Родитель


Вот вообщем пытаюсь чего то придумать, вариант функции.
// Необходима для поиска и замены подчиненных фирме справочников
Функция ЗаменаПодчиненногоСправочника(Организация,Ссылка) Экспорт
    
    Наименование     = Ссылка.Наименование;
    ИмяСправочника   = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя;    
    СправочникСсылка = Справочники[ИмяСправочника].НайтиПоНаименованию(Наименование,Истина,,Организация);
    
    Если СправочникСсылка = Справочники[ИмяСправочника].ПустаяСсылка() Тогда
        Если Ссылка.Уровень() > 0 Тогда // Вот это вот фигня на постном масле
            Ур = Ссылка.Уровень();
            Если Ур=1 Тогда
                НовыйСправочник1 = Ссылка.Родитель.Скопировать();
                НовыйСправочник1.Владелец = Организация;
                НовыйСправочник1.Записать();
                
                НовыйСправочник = Ссылка.Скопировать();
                НовыйСправочник.Родитель = НовыйСправочник1.Ссылка;
                НовыйСправочник.Владелец = Организация;
                НовыйСправочник.Записать();
            Иначе
                Предупреждение("Справочник имеет много уровневую структуру! И замена не будет произведена!");
                Возврат Ссылка;
            КонецЕсли;
            
        Иначе    
            НовыйСправочник = Ссылка.Скопировать();
            НовыйСправочник.Владелец = Организация;
            НовыйСправочник.Записать();
        КонецЕсли;
        ТекстСообщения = НСтр("ru='Создан элемент справочника: "+Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Представление()+
        ". Значение: "+НовыйСправочник.Наименование+"!';uk='Додан елемент довідника: "+Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Представление()+
        ". Значення: "+НовыйСправочник.Наименование+"!'");
        
        ОбщегоНазначения.СообщитьИнформациюПользователю(ТекстСообщения,СтатусСообщения.Информация);
        
        Возврат НовыйСправочник.Ссылка;
        
    КонецЕсли;
    
    Возврат СправочникСсылка;
    
КонецФункции
zetovich
а...он подчиненный?
если да то двигаться сверху вниз.
1) структуру родителей загнать в ТЗ, Список
2) "перевернуть" эту ТЗ/список
3) создавать родителей по порядку.
MATEVI
Да как вариант. Что то сегодня голова никак не включается... 36000000.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.