7.7 Свойство "Родитель" элемента справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем andrew76, 23 фев 2009.

  1. TopicStarter Overlay
    andrew76
    Offline

    andrew76

    Регистрация:
    22 янв 2007
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Проблема :
    Есть 2 2-х уровневых справочника,один пустой ,другой с данными.
    Требуется перекачать данные с 1-го справочника в другой(структура полей справочников одинакова).
    Возникает ошибка -("Справочник другого типа !") при попытке записать свойство "Родитель".

    Исходный текст привожу:
    Код:
    Библиотека.ВыбратьЭлементы();
    Пока Библиотека.ПолучитьЭлемент()=1 Цикл   
    Если Библиотека.ЭтоГруппа()=1 Тогда 
    Пустая.НоваяГруппа();    
    Пустая.Код=Библиотека.Код;
    Пустая.Наименование=Библиотека.Наименование;
    груп=Библиотека.ТекущийЭлемент();
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">Иначе	</span>      
    Пустая.Новый();
    Пустая.Код=Библиотека.Код;
    Пустая.Наименование=Библиотека.Наименование;
    Пустая.ИспользоватьРодителя(груп);
    КонецЕсли;
    Пустая.Записать();	
    КонецЦикла;
    
  2. unknown181538
    Offline

    unknown181538

    Регистрация:
    24 фев 2008
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Че-т не то. Код полностью кидай. Не вижу создания элемента "Пустой". И тэги поставь.
  3. yXaPb
    Offline

    yXaPb Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    77
    Симпатии:
    0
    Баллы:
    26
    Возможно, вместо этого
    Код:
    Пустая.ИспользоватьРодителя(груп);
    
    
    лучше так
    Код:
    Пустая.Родитель = груп;
    
    
    ...
    действительно так не пойдет, не подумал...
  4. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    439
    Симпатии:
    3
    Баллы:
    29
    Это точно работать не будет.

    Код:
    Пустая.ИспользоватьРодителя(груп);
    
    поставь перед оператором

    Код:
    Пустая.Новый();
    
  5. TopicStarter Overlay
    andrew76
    Offline

    andrew76

    Регистрация:
    22 янв 2007
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Не работает этот вариант !
    прут сообщения типа "Справочник другого типа или код не уникальный!"
  6. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    439
    Симпатии:
    3
    Баллы:
    29
    Посмотри в отладчике, что он вернет для Груп.Вид()

    Подозреваю, что "Библиотека":)

    Код:
    Если Библиотека.ЭтоГруппа()=1 Тогда 
    Пустая.НоваяГруппа();    
    Пустая.Код=Библиотека.Код;
    Пустая.Наименование=Библиотека.Наименование;
    груп=Библиотека.ТекущийЭлемент();//ВОТ ОШИБКА!
    //надо так:
    
    Пустая.Записать();
    
    груп=Пустая.ТекущийЭлемент();
    
    
    
  7. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    если у тебя более 2 групп твой код работать не будет, надо возврашаться на нужный уровень...

    в твоем случае:
    Код:
    Если (Библиотека.Уровень()=1)И(Библиотека.ЭтоГруппа()=1) Тогда
    Новая=СоздатьОбъект("Справочник....");
    // создаеш группу.
    КонецЕсли;
    
    
  8. unknown181538
    Offline

    unknown181538

    Регистрация:
    24 фев 2008
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    Пример работающего кода по назначению родителя (спр - номенклатура на форме):
    Код:
    //*******************************************
    Процедура Сформировать()  
    Род=СоздатьОбъект("Справочник.Номенклатура");
    
    Род.НайтиПоКоду("000000002"); 
    Темп=СоздатьОбъект("Справочник.Номенклатура"); 
    Темп.НАйтиЭлемент(СПр);
    Темп.Родитель=Род.ТекущийЭлемент();
    Темп.Записать();
    КонецПроцедуры
    
    Свой код полностью выложи. Элемент "Пустой" какого вида?
  9. TopicStarter Overlay
    andrew76
    Offline

    andrew76

    Регистрация:
    22 янв 2007
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Выкладываю код :

    Код:
    V7=CreateObject("V77S.Application");
    OK=V7.Initialize(V7.RMTrade,"/DC:/Библиотека","NO_SPLASH_SHOW"); //path
    
    Если OK=0 Тогда
    Предупреждение("Ошибка при открытии конфигурации");
    Возврат;
    КонецЕсли;     
    
    Библиотека=V7.CreateObject("Справочник.Книги");
    Пустая    =СоздатьОбъект("Справочник.Книги");
    
    Библиотека.ВыбратьЭлементы();
    Пока Библиотека.ПолучитьЭлемент()=1 Цикл
    Если Библиотека.ЭтоГруппа()=1 Тогда
    Пустая.НоваяГруппа();
    Пустая.Код=Библиотека.Код;             
    Пустая.Наименование=Библиотека.Наименование;
    груп=Библиотека.ТекущийЭлемент();
    Иначе
    Пустая.Новый();
    Пустая.Код=Библиотека.Код;             
    Пустая.Наименование=Библиотека.Наименование;
    Пустая.ИспользоватьРодителя(груп);
    КонецЕсли;
    Пустая.Записать();
    КонецЦикла;
    
  10. unknown181538
    Offline

    unknown181538

    Регистрация:
    24 фев 2008
    Сообщения:
    38
    Симпатии:
    0
    Баллы:
    1
    1)
    Код:
    груп=Библиотека.ТекущийЭлемент();
    
    Груп - элмент другой базы.
    Код:
    Пустая    =СоздатьОбъект("Справочник.Книги");
    
    Пустая - элемент этой базы.

    И как ты себе это представляешь? :
    Код:
         Пустая.ИспользоватьРодителя(груп);
    
    2) Думаю выбирать элементы лучше с учетом иерархии - "ВыбратьЭлементы(1)". Или даже искать родителя по наименованию.

Поделиться этой страницей