Имя: Пароль:
1C
1С v8
В данной транзакции уже происходили ошибки
0 geminisf
 
02.12.20
08:18
Доброго всем дня.
Есть простенький код

НовыйЭлемент = Справочники.НоменклатураКонтрагентов.СоздатьЭлемент();
НовыйЭлемент.Наименование = Стр.НаименованиеНоменклатурыПоставщика;
НовыйЭлемент.НаименованиеНоменклатуры = Стр.НаименованиеНоменклатурыПоставщика;
НовыйЭлемент.НаименованиеПолное = Стр.НаименованиеНоменклатурыПоставщика;
НовыйЭлемент.Артикул = Стр.КодПоставщика;
НовыйЭлемент.Номенклатура = НайденнаяНоменклатура.Ссылка;
НовыйЭлемент.Упаковка = НайденнаяНоменклатура.ЕдиницаИзмерения;
НовыйЭлемент.Владелец = ПоставщикВладелец.Ссылка;            
НовыйЭлемент.ВладелецНоменклатуры = НовыйЭлемент.Владелец;
НовыйЭлемент.Записать();


Так вот, перед записью НовыйЭлемент.Владелец, НовыйЭлемент.ВладелецНоменклатуры, ПоставщикВладелец и ПоставщикВладелец.Ссылка имеют тип СправочникСсылка.Партнеры. Но при записи возникает ошибка "В данной транзакции уже происходили ошибки". Если закомментировать строку
    
НовыйЭлемент.ВладелецНоменклатуры = НовыйЭлемент.Владелец;


то запись происходит, но у элемента справочника как бы нет владельца. Т.е. отбор в списке не работает.
Реквизит "ВладелецНоменклатуры" имеет определяемый тип "ВладелецНоменклатурыБЭД", который в свою очередь имеет тип "СправочникСсылка.Партнеры". Не могу сообразить - как правильно записать значение в реквизит "ВладелецНоменклатуры".
1 Kigo_Kigo
 
02.12.20
08:27
НовыйЭлемент.ВладелецНоменклатуры = ПоставщикВладелец.Ссылка;

А если так?
2 geminisf
 
02.12.20
08:33
(1) Изначально так было. Всё то же самое.
3 aka MIK
 
02.12.20
08:57
При такой ошибке на конкретную строку кода можно не обращать внимание.
4 Волшебник
 
02.12.20
08:58
Ошибка случилась раньше. Надо смотреть журнал регистрации
5 hhhh
 
02.12.20
09:30
(2) вообще-то справочник называется НоменклатураПоставщиков. Чего-то вы не договариваете.
6 zippygrill
 
02.12.20
09:42
В данной транзакции уже происходили ошибки - говорит зачастую о том что у тебя ранее есть конструкция типа

Попытка
.....
Исключение

..... ДругаяПроцедура()
          Попытка
             Исключение
          КонецПопытки
      КлнецПроцедуры
Конецпопытки
7 geminisf
 
02.12.20
09:49
(5) НоменклатураКонтрагентов скопировал из конфигуратора
8 geminisf
 
02.12.20
11:03
(6) Собственно вот вся процедура

&НаСервере
Процедура кнЗагрузитьНаСервере()
    тзНомПост = РеквизитФормыВЗначение("Таб");
    спрНоменклатура = Справочники.Номенклатура;    
    Для Каждого Стр Из тзНомПост Цикл
        НайденнаяНоменклатура = спрНоменклатура.НайтиПоРеквизиту("Артикул", СокрЛП(Стр.НашКод));
        
        Если НайденнаяНоменклатура.Пустая() = Ложь Тогда
            НовыйЭлемент = Справочники.НоменклатураКонтрагентов.СоздатьЭлемент();
            НовыйЭлемент.Наименование = Стр.НаименованиеНоменклатурыПоставщика;
            НовыйЭлемент.НаименованиеНоменклатуры = Стр.НаименованиеНоменклатурыПоставщика;
            НовыйЭлемент.НаименованиеПолное = Стр.НаименованиеНоменклатурыПоставщика;
            НовыйЭлемент.Артикул = Стр.КодПоставщика;
            НовыйЭлемент.Номенклатура = НайденнаяНоменклатура.Ссылка;
            НовыйЭлемент.Упаковка = НайденнаяНоменклатура.ЕдиницаИзмерения;
            НовыйЭлемент.Владелец = ПоставщикВладелец.Ссылка;            
            НовыйЭлемент.ВладелецНоменклатуры = НовыйЭлемент.Владелец;
            
            НовыйЭлемент.Записать();
        КонецЕсли;
    КонецЦикла;    
КонецПроцедуры



Как видно, больше никакие процедуры или функции не вызываются и конструкций никаких нет. Всё просто. Да и если закомментировать строку с ВладельцемНоменклатуры, то запись создается.
9 youalex
 
02.12.20
11:06
А зачем ты получаешь ссылку от ссылки, вот здесь например?
НайденнаяНоменклатура.Ссылка
ПоставщикВладелец.Ссылка видимо тоже
10 hhhh
 
02.12.20
11:09
(8) посмотрите, кто владелец у НоменклатураКонтрагентов. Точно Партнер? Ведь должен быть контрагент.
11 geminisf
 
02.12.20
11:13
(10) Нет. Партнер.
12 geminisf
 
02.12.20
11:15
(9) Без ссылок тоже пробовал. Не получается. Вот полный текст ошибки.

В данной транзакции уже происходили ошибки!
{ВнешняяОбработка.ЗагрузкаНоменклатурыПоставщика.Форма.Форма.Форма(39)}:            НовыйЭлемент.Записать();
{ВнешняяОбработка.ЗагрузкаНоменклатурыПоставщика.Форма.Форма.Форма(74)}:    кнЗагрузитьНаСервере();

по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
В данной транзакции уже происходили ошибки!
{ОбщийМодуль.УдалениеПомеченныхПовтИсп.Модуль(17)}:    Результат.Значение = Константы.ПроверятьИспользованиеУдаляемыхОбъектов.Получить();
{ОбщийМодуль.УдалениеПомеченныхОбъектовСлужебный.Модуль(216)}:    ДанныеКонстанты = УдалениеПомеченныхПовтИсп.ПроверятьИспользованиеУдаляемыхОбъектов();
{ОбщийМодуль.УдалениеПомеченныхОбъектовСлужебный.Модуль(975)}:    Если Не ПроверятьИспользованиеУдаляемыхОбъектов() Тогда
{ОбщийМодуль.УдалениеПомеченныхОбъектовСлужебный.Модуль(230)}:    ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ);
{ВнешняяОбработка.ЗагрузкаНоменклатурыПоставщика.Форма.Форма.Форма(39)}:            НовыйЭлемент.Записать();

по причине:
В данной транзакции уже происходили ошибки!
13 youalex
 
02.12.20
11:18
Включи Отладка/Остановка по ошибке  и смотри по стеку, если поймаешь ошибку
14 acht
 
02.12.20
11:33
(12) У тебя где-то в обработчиках передзаписью/призаписи попыткой-исключением наглухо давится ошибка работы с базой. Это приводит к тому, что одна из подписок призаписи, выполняющаяся после, падает на чтении константы ПроверятьИспользованиеУдаляемыхОбъектов.

Судя по тому, что все это завязано не владельца - ищи кривой код и больше так не делай.
15 geminisf
 
02.12.20
12:30
Оказалось, что нужно заполнить реквизиты "Идентификатор" и "ИдентификаторНоменклатуры".
16 acht
 
02.12.20
12:32
(15) То есть в фразе "Если закомментировать строку НовыйЭлемент.ВладелецНоменклатуры = НовыйЭлемент.Владелец; то запись происходит" ты нас обманывал?
17 geminisf
 
02.12.20
12:39
(16) Нет. Видимо при записи элемента справочника происходит запись еще в какой-нибудь регистр сведений (сейчас некогда разбираться) и происходит она только тогда, когда указан ВладелецНоменклатуры.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой