Имя: Пароль:
1C
1С v8
как понять ошибку записи объекта через COM
0 lim9
 
18.10.13
11:35
Обновляю справ. ДоговорыКонтрагентов (УТ 10.3)через COM(для БП), вылетает  ошибка. По отладчику смотрю - основные реквизиты заполнены. А записать не дает! пишет:
Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.2.18.96): Не удалось записать "Договор"
1 George Wheels
 
18.10.13
11:38
Основные реквизиты это какие?
2 George Wheels
 
18.10.13
11:39
(1) +Код в студию
3 lim9
 
18.10.13
11:41
для бп это: орг, вид дог, валюта, владелец, номер, наименование.
4 Галахад
 
гуру
18.10.13
11:42
А код?
5 lim9
 
18.10.13
11:43
друзья я спрашиваю не про код, а о том, что как то мона посмотреть из-за чего происходит отбой записи???
6 George Wheels
 
18.10.13
11:43
Где создаёшь элемент? Где записываешь?
7 1Cv8_accepted
 
18.10.13
11:43
(0) А без COM сработает?

ЗЫ: И вообще, что это за мода пошла через COM фигнёй всякой заниматься? Сделал модуль, в модуле разместил ОДНУ функцию, которая возвращает код успешности операции, вызвал её ОДИН РАЗ, а весь разбор полётов, если много сложных действий, проводить в базе. >:-/ Вот так вот.

ЗЫ: Вот не поверите - что ни день на этой неделе - то с COM как раз с такими вопросами сталкиваюсь! Живьём по работе, в основном.
8 wowik
 
18.10.13
11:43
(0) открою истину, COM тоже можно отладить: из подключенной базы подключаешься к соединению и отлаживаешь....
9 Галахад
 
гуру
18.10.13
11:43
(5) Я не про листинг, а про реквизит.
10 George Wheels
 
18.10.13
11:44
Попытка
...
Исключение
ОписаниеОшибки()
11 Холодильник
 
18.10.13
11:46
делай через аппликейшн с видимостью, не закрывай соединение
12 lim9
 
18.10.13
11:46
если так надо код, вот:
Попытка
            дог=?(обн и Ссылка<>Неопределено,Ссылка.ПолучитьОбъект(),кк.Справочники.ДоговорыКонтрагентов.СоздатьЭлемент());
            //дог.Код=дг.Код;
            дог.Наименование=дг.Наименование;
            дог.Владелец=кн.Ссылка;
            орг=НайтиСоздатьОрганизацию(дг.Организация,"УТ");
            дог.Организация=орг.Ссылка;
            дог.ВалютаВзаиморасчетов=кк.Справочники.Валюты.НайтиПоКоду("643").Ссылка;
            дог.ПроцентКомиссионногоВознаграждения=дг.ПроцентКомиссионногоВознаграждения; //число
            Если дг.СпособРасчетаКомиссионногоВознаграждения=Перечисления.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается Тогда
            дог.СпособРасчетаКомиссионногоВознаграждения=кк.Перечисления.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается;
            КонецЕсли;
            Если дг.СпособРасчетаКомиссионногоВознаграждения=Перечисления.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтПрибыли Тогда
            дог.СпособРасчетаКомиссионногоВознаграждения=кк.Перечисления.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтРазностиСуммПродажиИПоступления;
            КонецЕсли;
            Если дг.СпособРасчетаКомиссионногоВознаграждения=Перечисления.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи Тогда
            дог.СпособРасчетаКомиссионногоВознаграждения=кк.Перечисления.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи;
            КонецЕсли;
            Если ЗначениеЗаполнено(дг.ТипЦен) Тогда
                дог.ТипЦен=НайтиСоздатьТипЦен(дг.ТипЦен,Ложь);
            КонецЕсли;
            Если дг.ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.Прочее Тогда
            дог.ВидДоговора=кк.Перечисления.ВидыДоговоровКонтрагентов.Прочее;
            КонецЕсли;
            Если дг.ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером Тогда
            дог.ВидДоговора=кк.Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером;
            КонецЕсли;
            Если дг.ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СПокупателем Тогда
            дог.ВидДоговора=кк.Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
            КонецЕсли;
            Если дг.ВидДоговора=Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком Тогда
            дог.ВидДоговора=кк.Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
            КонецЕсли;
            дог.УчетАгентскогоНДС=дг.УчетАгентскогоНДС;  //истина/ложь
            Если дг.ВидАгентскогоДоговора=Перечисления.ВидыАгентскихДоговоров.Аренда
                Тогда дог.ВидАгентскогоДоговора=кк.Перечисления.ВидыАгентскихДоговоров.Аренда
                Иначе дог.ВидАгентскогоДоговора=кк.Перечисления.ВидыАгентскихДоговоров.Нерезидент
            КонецЕсли;
            дог.РасчетыВУсловныхЕдиницах=дг.РасчетыВУсловныхЕдиницах; //булево
            дог.РеализацияНаЭкспорт=дг.РеализацияНаЭкспорт; //булево
            дог.ВидВзаиморасчетов=кк.Справочники.ВидыВзаиморасчетов.НайтиПоКоду(дг.ВидВзаиморасчетов.Код).Ссылка;
            дог.Дата=дг.Дата;
            дог.Номер=дг.Номер;
            дог.СрокДействия=дг.СрокДействия;
            Если ЗначениеЗаполнено(дг.НаименованиеДляСчетаФактурыНаАванс) Тогда
                дог.НаименованиеДляСчетаФактурыНаАванс=НайтиСоздатьНоменклатуру(дг.НаименованиеДляСчетаФактурыНаАванс,Ложь).Ссылка;
            КонецЕсли;
            Если дг.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.КромеЗачтенныхВТечениеМесяца Тогда
            дог.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=кк.Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.КромеЗачтенныхВТечениеМесяца;
            КонецЕсли;
            Если дг.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.КромеЗачтенныхВТечениеНалоговогоПериода Тогда
            дог.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=кк.Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.КромеЗачтенныхВТечениеНалоговогоПериода;
            КонецЕсли;
            Если дг.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.КромеЗачтенныхВТечениеПятиДней Тогда
            дог.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=кк.Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.КромеЗачтенныхВТечениеПятиДней;
            КонецЕсли;
            Если дг.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.НаВсеАвансы Тогда
            дог.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=кк.Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.НаВсеАвансы;
            КонецЕсли;
            Если дг.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.НеРегистрироватьСчетаФактурыНаАвансы Тогда
            дог.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору=кк.Перечисления.ПорядокРегистрацииСчетовФактурНаАванс.НеРегистрироватьСчетаФактурыНаАвансы;
            КонецЕсли;
            дог.Записать();
        Исключение
            Сообщить("Ошибка "+?(обн,"обновления","создания")+" договора: "+Строка(дг)+" // "+ОписаниеОшибки());
            Сообщить("Код: "+Строка(дг.Код));
            фС=Ложь;
        КонецПопытки;
13 lim9
 
18.10.13
11:47
дело в том что создание договора происходит на ОК, а вот обновление иногда вылетает ошибка.
14 lim9
 
18.10.13
11:49
(8) это как??
15 Timon1405
 
18.10.13
11:50
Может попробовать
дог.ОбменДанными.Загрузка = истина
а потом перезаписать в приемнике вручную и посмотреть на что ругается.
16 George Wheels
 
18.10.13
11:51
А при обновлении договора вот здесь: дог.Номер=дг.Номер; не устанавливается другой уже существующий номер?
17 lim9
 
18.10.13
11:52
(16) - посмотрел, номер не меняется.
18 lim9
 
18.10.13
11:52
(15) мысль, счас попробую
19 George Wheels
 
18.10.13
11:53
(16) + И что может содержать переменная Ссылка? К какой базе она имеет отношение?
20 wowik
 
18.10.13
11:55
21 lim9
 
18.10.13
11:56
(19) с Ссылкой все четко, это Ссылка в БП, если элемент там уже есть, если элемента нет то она=непопределено.
22 lim9
 
18.10.13
11:57
(15) Помогло!
23 Timon1405
 
18.10.13
12:01
(22) Осталось раскрыть всем интригу, что же там было не так)
24 lim9
 
18.10.13
12:03
(23) - а как понять то??? )))
25 George Wheels
 
18.10.13
12:04
(23) В договоре в событии ПередЗаписью() вызывается ПроверитьПередЗаписью(...) и если по этому договору уже были проводки, то Отказ = Истина.
26 George Wheels
 
18.10.13
12:05
(25) + Это когда Загрузка = Ложь
27 Timon1405
 
18.10.13
12:28
(23) написать обработку, которая получает объект, меняет это свойство на ложь и делает попытку записи. Скорее всего (25) прав и вы обновляете договор на который уже есть ссылки, что есть не очень хорошо.