Имя: Пароль:
1C
1C 7.7
v7: Не создается договор
0 ugorchina
 
04.05.18
12:30
Всем привет подскажите где у меня затык по ОЛЕ создаю контрагента + его договор контрагент создается а вот с договором косяк (

КонтрагентОЛЕ = Неопределено;      
    ДоговорОЛЕ    = Неопределено;
    ВалютаОЛЕ     = Неопределено;
    КонтрОЛЕ = ОбъектV77.CreateObject("Справочник.Контрагенты");
    ДогОЛЕ   = ОбъектV77.CreateObject("Справочник.Договоры");
    Валюты   = ОбъектV77.CreateObject("Справочник.Валюты");
    
    Если Валюты.НайтиПоКоду(СокрЛП(Договор.ВалютаВзаиморасчетов.Код)) = 1 Тогда
        ВалютаОЛЕ = Валюты.ТекущийЭлемент();
    КонецЕсли;
    
    Если СокрЛП(Контрагент.ИНН) <> "" Тогда
        Если  КонтрОЛЕ.НайтиПоРеквизиту("ИНН",СокрЛП(Контрагент.ИНН)) = 1 Тогда
            КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();    
            Если СокрЛП(КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент()) <> "" Тогда
                ДоговорОЛЕ    = КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент();
            КонецЕсли;
        КонецЕсли;
    Иначе
        Если КонтрОЛЕ.НайтиПоНаименованию(СокрЛП(Контрагент.Наименование)) = 1 Тогда
            КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();    
            Если СокрЛП(КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент()) <> "" Тогда
                ДоговорОЛЕ    = КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент();
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    Если КонтрагентОЛЕ = Неопределено Тогда
        КонтрОЛЕ.Новый();
        КонтрОЛЕ.Наименование     = СокрЛП(Контрагент.Наименование);
        КонтрОЛЕ.ПолнНаименование = СокрЛП(Контрагент.Наименование);
        КонтрОЛЕ.ИНН              = СокрЛП(Контрагент.ИНН);
        КонтрОЛЕ.Записать();
        ДогОЛЕ.Новый();
        ДогОЛЕ.Наименование = СокрЛП(Договор.Наименование);
        если СокрЛП(Договор.Номер) <> "" Тогда
        ДогОЛЕ.Код          = СокрЛП(Договор.Номер);
        КонецЕсли;
        Если ВалютаОЛЕ <> Неопределено Тогда
        ДогОЛЕ.Валюта       = ВалютаОЛЕ;
        КонецЕсли;
        ДогОЛЕ.Владелец     = КонтрОЛЕ.ТекущийЭлемент();
        ДогОЛЕ.записать();
        БлаБла = КонтрОЛЕ.ТекущийЭлемент();
        БлаБла.ОсновнойДоговор = ДогОЛЕ.ТекущийЭлемент();
        КонтрОЛЕ.Записать();
    КонецЕсли;
    КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();
    ДоговорОЛЕ    = ДогОЛЕ.текущийЭлемент();
1 ugorchina
 
04.05.18
12:31
+(0) подозреваю что неверно устонавливаю владельца тупо не помню как это делать в 7-ке (
2 ugorchina
 
04.05.18
12:32
На момент  ДогОЛЕ.Новый();
КонтрОЛЕ.ТекущийЭлемент() не пустой
3 Ёпрст
 
04.05.18
12:33
вот это выкинь
        БлаБла = КонтрОЛЕ.ТекущийЭлемент();
        БлаБла.ОсновнойДоговор = ДогОЛЕ.ТекущийЭлемент();
        КонтрОЛЕ.Записать();
4 Мандалай
 
04.05.18
12:33
Попробуй ИспользоватьВладельца
5 ugorchina
 
04.05.18
12:34
(3) а чего выкидывать ТО?

это ж я присваиваю Контру его договор как основной!
6 Ёпрст
 
04.05.18
12:34
ну и проверять на неопределенно оле-объект.. тоже махер
7 Ёпрст
 
04.05.18
12:34
(5) еще подумай
8 Ёпрст
 
04.05.18
12:35
вот это
КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();    
            Если СокрЛП(КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент()) <> "" Тогда
                ДоговорОЛЕ    = КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент();

тоже в топку
9 Ёпрст
 
04.05.18
12:35
Вообще, бездумное втыкание ТекущийЭлемент где надо и не надо..
10 arsik
 
гуру
04.05.18
12:36
(4) +
11 ugorchina
 
04.05.18
12:38
(4) пробую
12 ugorchina
 
04.05.18
12:39
(8) да здесь Вы правы спасибо

(4) еще пробую
13 ugorchina
 
04.05.18
12:41
но по (3) так и не ответили
14 Ёпрст
 
04.05.18
12:50
(13) а че отвечать ? Твоё бла-бла там не нужно от слова совсем, ибо нигде не используется.
15 ugorchina
 
04.05.18
12:50
теперь ошибка

    КонтрагентОЛЕ = Неопределено;      
    ДоговорОЛЕ    = Неопределено;
    ВалютаОЛЕ     = Неопределено;
    КонтрОЛЕ = ОбъектV77.CreateObject("Справочник.Контрагенты");
    ДогОЛЕ   = ОбъектV77.CreateObject("Справочник.Договоры");
    Валюты   = ОбъектV77.CreateObject("Справочник.Валюты");
    
    Если Валюты.НайтиПоКоду(СокрЛП(Договор.ВалютаВзаиморасчетов.Код)) = 1 Тогда
        ВалютаОЛЕ = Валюты.ТекущийЭлемент();
    КонецЕсли;
    
    Если СокрЛП(Контрагент.ИНН) <> "" Тогда
        Если  КонтрОЛЕ.НайтиПоРеквизиту("ИНН",СокрЛП(Контрагент.ИНН)) = 1 Тогда
            КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();    
            Если СокрЛП(КонтрагентОЛЕ.ОсновнойДоговор) <> "" Тогда
                ДоговорОЛЕ    = КонтрагентОЛЕ.ОсновнойДоговор;
            КонецЕсли;
        КонецЕсли;
    Иначе
        Если КонтрОЛЕ.НайтиПоНаименованию(СокрЛП(Контрагент.Наименование)) = 1 Тогда
            КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();    
            Если СокрЛП(КонтрагентОЛЕ.ОсновнойДоговор) <> "" Тогда
                ДоговорОЛЕ    = КонтрагентОЛЕ.ОсновнойДоговор;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    Если КонтрагентОЛЕ = Неопределено Тогда
        КонтрОЛЕ.Новый();
        КонтрОЛЕ.Наименование     = СокрЛП(Контрагент.Наименование);
        КонтрОЛЕ.ПолнНаименование = СокрЛП(Контрагент.Наименование);
        КонтрОЛЕ.ИНН              = СокрЛП(Контрагент.ИНН);
        КонтрОЛЕ.Записать();
        ДогОЛЕ.Новый();
        ДогОЛЕ.Наименование = СокрЛП(Договор.Наименование);
        если СокрЛП(Договор.Номер) <> "" Тогда
            ДогОЛЕ.Код          = СокрЛП(Договор.Номер);
        КонецЕсли;
        Если ВалютаОЛЕ <> Неопределено Тогда
            ДогОЛЕ.ВалютаДоговора = ВалютаОЛЕ;
        КонецЕсли;
        ДогОЛЕ.ИспользоватьВладельца(КонтрОЛЕ.ТекущийЭлемент());
        ДогОЛЕ.записать();
        БлаБла = КонтрОЛЕ.ТекущийЭлемент();
        БлаБла.ОсновнойДоговор = ДогОЛЕ.ТекущийЭлемент();
        КонтрОЛЕ.Записать(); //стр 1018
        
        КонтрагентОЛЕ = КонтрОЛЕ.ТекущийЭлемент();
        ДоговорОЛЕ    = ДогОЛЕ.текущийЭлемент();
    КонецЕсли;

сама ошибка

{ОбщийМодуль.РегламентныйОбменСоСтороннейПрограммой.Модуль(1018)}: Ошибка при вызове метода контекста (записать)
по причине:
Произошла исключительная ситуация (1С:Предприятие): Не выбран элемент справочника-хозяина! Элемент не может быть записан!
16 ugorchina
 
04.05.18
12:51
тьфу простите  ДогОЛЕ.записать(); 1018 )
17 Ёпрст
 
04.05.18
12:51
ну и в твоём коде, непонятно, зачем ты вообще вот это делаешь, например:

ДоговорОЛЕ    = КонтрагентОЛЕ.ОсновнойДоговор.ТекущийЭлемент();

зачем тебе нужна ссылка на договор ?
18 ugorchina
 
04.05.18
12:53
я потом эти ссылки в заказе присваиваю в другом месте

КонтрагентОЛЕ
        ДоговорОЛЕ

зтем возваращаются в основной код где присваиваются созданному документ заказ клиента в семерке
19 Ёпрст
 
04.05.18
12:54
(16)

ДогОЛЕ.ИспользоватьВладельца(КонтрОЛЕ.ТекущийЭлемент());
ДогОЛЕ.Новый();
.....
  ДогОЛЕ.записать();

//    БлаБла = КонтрОЛЕ.ТекущийЭлемент();
//        БлаБла.ОсновнойДоговор = ДогОЛЕ.ТекущийЭлемент();

КонтрОЛЕ.ОсновнойДоговор = ДогОЛЕ.ТекущийЭлемент();
КонтрОЛЕ.Записать();//стр 1018
20 ugorchina
 
04.05.18
14:11
Спасибо работает!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн