Имя: Пароль:
1C
1С v8
перенос данных из 7ки через OLE
0 mefisto666series
 
29.09.14
15:11
Не могу понять как обращаться к значениям, тип которых Справочник, т.е. у справочника сотрудники поле должность имеет тип Справочник.Должности. как обратиться к значениям реквизита этого элемента понять не могу. методы типа  Сотрудник.Должность.ТекущийЭлемент().Код
не работают, напрямую, естественно, тоже, т.к. это com объект. разъясните, плз. ну и вообще, может, есть где справочная информация по работе с базами из 8ки?
1 Ёпрст
 
29.09.14
15:25
Должность поди еще и периодический реквизит?
а так, за Сотрудник.Должность.ТекущийЭлемент().Код надо линейкой металлической по пальчикам настучать
2 Михаил Козлов
 
29.09.14
15:28
Может поможет:
Функция ПолучитьКонтрагента(БазаПриемник,БазаИсточник,КонтрагентПриемник,КонтрагентИсточник) Экспорт
        
    
    Код=СокрЛП(КонтрагентИсточник.Код);
    Если КонтрагентПриемник.НайтиПоКоду(Код,0)=0 Тогда
        
        СпрЮЛ =БазаПриемник.CreateObject("Справочник.ЮрЛица");
        СпрФЛ =БазаПриемник.CreateObject("Справочник.ФизЛица");
        СпрДоговоры=БазаПриемник.CreateObject("Справочник.Договоры");
        
        Если БазаИсточник.Перечисления.ЮрФизЛицо.Индекс(КонтрагентИсточник.ЮрФизЛицо)=БазаИсточник.Перечисления.ЮрФизЛицо.Индекс(БазаИсточник.Перечисления.ЮрФизЛицо.ЮрЛицо) Тогда
            СпрЮЛ.Новый();
            СпрЮЛ.Наименование     = КонтрагентИсточник.Наименование;
            СпрЮЛ.ПолнНаименование = КонтрагентИсточник.НаименованиеПолное;
            СпрЮЛ.ИНН              = КонтрагентИсточник.ИНН + "\" + КонтрагентИсточник.КПП;
            Свед=БазаИсточник.СведенияОЮрФизЛице(КонтрагентИсточник,ТекущаяДата());
            СпрЮЛ.ФактАдрес        = Свед.ФактическийАдрес;
            СпрЮЛ.ЮрАдрес          = Свед.ЮридическийАдрес;
            СпрЮЛ.Записать();
            Лицо=СпрЮЛ;
        Иначе
            СпрФЛ.Новый();
            СпрФЛ.Наименование     = КонтрагентИсточник.Наименование;
            СпрФЛ.ПолнНаименование = КонтрагентИсточник.НаименованиеПолное;
            СпрФЛ.ИНН              = КонтрагентИсточник.ИНН + "\" + КонтрагентИсточник.КПП;
            Свед=БазаИсточник.СведенияОЮрФизЛице(КонтрагентИсточник,ТекущаяДата());
            СпрФЛ.ФактАдрес        = Свед.ФактическийАдрес;
            СпрФЛ.ЮрАдрес          = Свед.ЮридическийАдрес;
            СпрФЛ.Записать();
            Лицо=СпрФЛ;
        КонецЕсли;
        
        Попытка
            
            СпрКонтрагенты=БазаПриемник.CreateObject("Справочник.Контрагенты");
            Если   НЕ СпрКонтрагенты.НайтиПоНаименованию("Новые",0,1)
                ИЛИ НЕ СпрКонтрагенты.ЭтоГруппа() Тогда
                СпрКонтрагенты.НоваяГруппа();
                СпрКонтрагенты.Наименование="Новые";
                СпрКонтрагенты.Записать();
            КонецЕсли;

            КонтрагентПриемник.Новый();
            КонтрагентПриемник.Родитель=СпрКонтрагенты.ТекущийЭлемент();
            КонтрагентПриемник.Код =Код;
            КонтрагентПриемник.GUID=БазаИсточник.String(КонтрагентИсточник.УникальныйИдентификатор());
            КонтрагентПриемник.Наименование = КонтрагентИсточник.Наименование;
            КонтрагентПриемник.ЮрФизЛицо    = Лицо.ТекущийЭлемент();
            КонтрагентПриемник.Записать();
        Исключение
            Сообщение="Ошибка при попытке записи справочника Контрагенты с кодом: "+Код+"; Описание ошибки: "+ОписаниеОшибки();
            ВывестиСообщение("Функция: ПолучитьКонтрагента",Сообщение,УровеньЖурналаРегистрации.Ошибка);
            ВызватьИсключение Сообщение;
        КонецПопытки;
        
        //СпрДоговоры.ИспользоватьВладельца(КонтрагентПриемник.ТекущийЭлемент());
        //СпрДоговоры.Новый();
        //СпрДоговоры.Наименование ="ОсновнойДоговор";
        //СпрДоговоры.ВалютаВзаиморасчетов = БазаПриемник.Константа.ВалютаБухУчета;
        //СпрДоговоры.НеКонтролироватьКредит =1;
        //СпрДоговоры.Записать();
        //КонтрагентПриемник.ОсновнойДоговор=СпрДоговоры.ТекущийЭлемент();
        //КонтрагентПриемник.Записать();
        
        СпрДоговоры.ИспользоватьВладельца(КонтрагентПриемник);
        СпрДоговоры=СоздатьНовыйДоговорКонтрагента(БазаПриемник,БазаИсточник,СпрДоговоры,КонтрагентИсточник.ОсновнойДоговорКонтрагента);
        КонтрагентПриемник.ОсновнойДоговор=СпрДоговоры.ТекущийЭлемент();
        КонтрагентПриемник.Записать();
        
    КонецЕсли;        
    
    Возврат КонтрагентПриемник.ТекущийЭлемент();
    

КонецФункции
3 mefisto666series
 
30.09.14
12:55
блин, а как взять реквизит типа перечисление из должности, взятой из сотрудника - хз. реквизиты типа перечисления из сотрудника без проблем берутся через текущий элемент, но с реквизитом реквизита это не прокатывает, с этим ли связано, или с ещё чем - хз
Основная теорема систематики: Новые системы плодят новые проблемы.