Имя: Пароль:
1C
1С v8
Ошибка при записи объекта, который создается с помощью конвертации данных
0 Leo_Lito
 
27.10.23
10:39
КД 2.1 В ПКО (После загрузки) следующий код:

ДатаДоговора = ПараметрыОбъекта.Получить("ДатаДоговора");
СрокДействия = ПараметрыОбъекта.Получить("СрокДействия");
НомерДоговора = ПараметрыОбъекта.Получить("НомерДоговора");
ВалютаВзаиморасчетов = ПараметрыОбъекта.Получить("ВалютаВзаиморасчетов");
Владелец = ПараметрыОбъекта.Получить("Владелец");
ВедениеВзаиморасчетов = ПараметрыОбъекта.Получить("ВедениеВзаиморасчетов");

КонтрагентНаименование = Владелец.Наименование;
ПартнерСсылка = Справочники.Партнеры.НайтиПоРеквизиту("НаименованиеПолное", КонтрагентНаименование);
Партнер = ПартнерСсылка.ПолучитьОбъект();

ДоговорПроверка = Справочники.БУХ_ДоговорыКонтрагентов.НайтиПоКоду(Объект.Код);

Если ДоговорПроверка = Справочники.БУХ_ДоговорыКонтрагентов.ПустаяСсылка() Тогда    
    ОсновнойДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
Иначе
    Если ДоговорПроверка.Владелец <> Справочники.ДоговорыКонтрагентов.ПустаяСсылка() Тогда
        ОсновнойДоговорСсылка = ДоговорПроверка.Владелец;
        ОсновнойДоговор = ОсновнойДоговорСсылка.ПолучитьОбъект();
    Иначе
        ОсновнойДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
    КонецЕсли;
КонецЕсли;

ОсновнойДоговор.Наименование = Объект.Наименование;

Если Объект.ТипДоговора = Перечисления.БУХ_ВидыДоговоровКонтрагентов.СПокупателем Тогда
    ОсновнойДоговор.ТипДоговора = Перечисления.ТипыДоговоров.СПокупателем;
    Партнер.Клиент = Истина;
ИначеЕсли Объект.ТипДоговора = Перечисления.БУХ_ВидыДоговоровКонтрагентов.СПоставщиком Тогда
    ОсновнойДоговор.ТипДоговора = Перечисления.ТипыДоговоров.СПоставщиком;
    Партнер.Поставщик = Истина;
ИначеЕсли Объект.ТипДоговора = Перечисления.БУХ_ВидыДоговоровКонтрагентов.СКомиссионером Тогда
    ОсновнойДоговор.ТипДоговора = Перечисления.ТипыДоговоров.СКомиссионером;
    Партнер.ПрочиеОтношения = Истина;
ИначеЕсли Объект.ТипДоговора = Перечисления.БУХ_ВидыДоговоровКонтрагентов.СКомитентом Тогда
    ОсновнойДоговор.ТипДоговора = Перечисления.ТипыДоговоров.СКомитентом;
    Партнер.ПрочиеОтношения = Истина;
КонецЕсли;

Партнер.Записать();

Если ВедениеВзаиморасчетов = 1 Тогда
    ОсновнойДоговор.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов;
Иначе
    ОсновнойДоговор.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным;
КонецЕсли;

ОсновнойДоговор.Дата = ДатаДоговора;
ОсновнойДоговор.ДатаНачалаДействия = ДатаДоговора;
ОсновнойДоговор.ДатаОкончанияДействия = СрокДействия;
ОсновнойДоговор.Номер = НомерДоговора;
ОсновнойДоговор.ВалютаВзаиморасчетов = ВалютаВзаиморасчетов;
ОсновнойДоговор.Контрагент = Владелец;
ОсновнойДоговор.Партнер = ПартнерСсылка;

ОсновнойДоговор.Записать();

Объект.Владелец = ОсновнойДоговор.Ссылка;

При исполнении кода возникает ошибка:
"Ошибка при выполнении обработчика ""Перед Записью" по причине: Не удалось найти объект расчетов.
Код ошибки = 21"

Ссылается на строку кода ОсновнойДоговор.Записать();
1 Волшебник
 
27.10.23
10:41
ищите ошибку в программном коде по фразе
Не удалось найти объект расчетов. Код ошибки = 21
2 Михаил Козлов
 
27.10.23
10:47
Конфигурация приемник не указана. Посмотрите в модуле объекта справочника ДоговорыКонтрагентов что связано с объектом расчетов. В отладчике можно встать в этом модуле в ПередЗаписью. И проверьте там ЭтотОбъект.ОбменДанными.Загрузка.
3 Leo_Lito
 
27.10.23
11:07
(2) ОбменДанными.Загрузка = Ложь.

В этом же правиле, но в другом ПКО (После загрузки) написал следующее:

КонтрагентПроверка = Справочники.Контрагенты.НайтиПоНаименованию(Объект.Наименование);
Если КонтрагентПроверка = Неопределено Тогда    
    Партнер = Справочники.Партнеры.СоздатьЭлемент();
Иначе
    ПартнерСсылка = КонтрагентПроверка.Партнер;
    Партнер = ПартнерСсылка.ПолучитьОбъект();
КонецЕсли;

Партнер.Наименование = Объект.Наименование;
Партнер.НаименованиеПолное = Объект.Наименование;

Если Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
    Партнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо;
ИначеЕсли Не РезидентРБ И Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда
    Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент;
    Партнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;
Иначе
    Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
    Партнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;
КонецЕсли;

Если Объект.КонтактнаяИнформация.Количество() Тогда    
    Для каждого Строка Из Объект.КонтактнаяИнформация Цикл
        СтрокаКонтактнаяПартнеры = Партнер.КонтактнаяИнформация.Добавить();
        СтрокаКонтактнаяПартнеры.Тип = Строка.Тип;
        СтрокаКонтактнаяПартнеры.Вид = Строка.Вид;
        СтрокаКонтактнаяПартнеры.Представление = Строка.Представление;
    КонецЦикла;    
КонецЕсли;

Партнер.Записать();

Объект.Партнер = Партнер.Ссылка;

Здесь всё отработало и ни на что не ругалось. Алгоритмы действий фактически одинаковы.
4 olegves
 
27.10.23
11:09
и не забыть в отладчике установить флаг перехвата фоновых сеансов
5 Leo_Lito
 
27.10.23
11:13
(4) Стоит
6 Михаил Козлов
 
27.10.23
11:36
Как я понял, у Вас ошибка на записи договора и связана с объектом расчетов. Попробуйте перед ОсновнойДоговор.Записать(); поставить ОсновнойДоговор.ОбменДанными.Загрузка = ИСТИНА;
а лучше разобраться, что не так с объектом расчетов.
7 Leo_Lito
 
27.10.23
11:56
(6) Да, спасибо за объяснение. Уже нашел, где попадаю в исключение.