Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

В данной транзакции уже происходили ошибки!

В данной транзакции уже происходили ошибки!
Я
   Privetanya
 
02.08.19 - 09:06
Ошибка при вызове метода контекста (Выполнить)
Выборка = Запрос.Выполнить().Выбрать();
по причине:
Ошибка выполнения запроса
по причине:  
В данной транзакции уже происходили ошибки!

Не могу понять в чем проблема,помогите пожалуйста...

после выполнения
Номенклатура=Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдНоменклатуры))
Номенклатура =Ошибка получения представления значения: В данной транзакции уже происходили ошибки!
 
 
   Cyberhawk
 
1 - 02.08.19 - 09:08
В поломанной транзакции обращаться к БД нельзя
   Cyberhawk
 
2 - 02.08.19 - 09:08
Истинная проблема где-то в коде до того места, где тебе показало эту ошибку
   piter3
 
3 - 02.08.19 - 09:08
С чего решил,что здесь?
Номенклатура=Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдНоменклатуры))
   Privetanya
 
4 - 02.08.19 - 09:11
(3) после выполнения этой строки номенклатура=Ошибка получения представления значения: В данной транзакции уже происходили ошибки!. Отладчиком проверяла
   Privetanya
 
5 - 02.08.19 - 09:11
(2) как найти?
   Cyberhawk
 
6 - 02.08.19 - 09:12
Отладчиком тем более нет смысла проверять, т.к. ты все еще внутри поломанной транзакции
   Cyberhawk
 
7 - 02.08.19 - 09:13
(5) Написать хитрый метод в общем модуле, в каждой строке кода в режиме трассировки вызывать этот метод, который будет возвращать признак того, что транзакция поломана. Ну это если совсем тямы нет прикинуть по коду, где же факап случился.
   piter3
 
8 - 02.08.19 - 09:13
(4)Нет,ищи ранее
   Privetanya
 
9 - 02.08.19 - 09:26
(8) я взяла эту обработку из комплексной и перенесла на нашу самописку. Там все хорошо работает.а тут такая ошибка...
   piter3
 
10 - 02.08.19 - 09:27
(9) И че?Ищи,попробуй на копии без транзакции
   Privetanya
 
11 - 02.08.19 - 09:38
(10) так странно. В этой функции ВИНоменклатуры = Неопределено
Функция НайтиСоздатьНоменклатуру(СтрокаТовара, Знач ВидНоменклатуры, СтавкаНДС, ВИНоменклатуры = Неопределено)
    
    Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
    ВИНоменклатуры = Неопределено;
    
    УспешноНайдено = ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ВИНоменклатуры= Неопределено);

а при вызове ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам приходит уже Истина.
Функция ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ВИНоменклатуры)
    
    Если НЕ ЗначениеЗаполнено(СтрокаТовара.ТоварУслугаИд) Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Попытка                   
        
        ИдНоменклатуры = ПолучитьИдНоменклатуры(СтрокаТовара.ТоварУслугаИд);
        Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдНоменклатуры));
   piter3
 
12 - 02.08.19 - 09:39
Истина это нашла или нет?Я же не вижу что там
   Privetanya
 
13 - 02.08.19 - 10:21
(12) Если посмотреть в комплексной,то там получает так же неопределено. А у меня истина.
   piter3
 
14 - 02.08.19 - 10:21
(13) Может стоит подумать над кодом и отличиями?
   Вафель
 
15 - 02.08.19 - 10:24
в транзакции нельзя записывать с попыткой. все равно ломается
   Privetanya
 
16 - 02.08.19 - 10:27
(14) Вот ищу отличия
   dka80
 
17 - 02.08.19 - 10:30
Функция ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ВИНоменклатуры)
Возврат Истина
КонецФункции

Тогда увидишь где ошибка ранее
   zva
 
18 - 02.08.19 - 10:34
Вместо УспешноНайдено = ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ВИНоменклатуры= Неопределено);
нужно УспешноНайдено = ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ВИНоменклатуры);
   catena
 
19 - 02.08.19 - 10:37
УспешноНайдено = ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ВИНоменклатуры= Неопределено);


 - ну еще бы оно не приходило "Истина"
   Privetanya
 
20 - 02.08.19 - 10:39
(18) ошибка осталась
   Privetanya
 
21 - 02.08.19 - 10:42
(17) не вижу ошибку ранее,значит она в этой функции
   Privetanya
 
22 - 02.08.19 - 10:51
(15) убрала попытку и вышла вот такая ошибка. {Обработка.ОбменССайтом.МодульОбъекта(5103)}: Ошибка при вызове метода контекста (ПолучитьОбъект)
        Если Номенклатура.ПолучитьОбъект() = Неопределено Тогда
по причине:
В данной транзакции уже происходили ошибки!
Функция ВыполнитьПоискНоменклатурыХарактеристикиПоСсылкам(СтрокаТовара, Номенклатура, ХарактеристикаНоменклатуры)
    
    Если НЕ ЗначениеЗаполнено(СтрокаТовара.ТоварУслугаИд) Тогда
        Возврат Ложь;
    КонецЕсли;
    
    //Попытка

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

            СообщитьПользователю("Номенклатура не найдена по уникальному идентификатору: " + ИдНоменклатуры, Ложь);
            Возврат Ложь;
        КонецЕсли;
        
        Если НЕ Номенклатура.ВестиУчетПоХарактеристикам Тогда
            Возврат Истина;
        КонецЕсли;
        
        ИдХарактеристики = ПолучитьИдХарактеристики(СтрокаТовара.ТоварУслугаИд);
        Если ПустаяСтрока(ИдХарактеристики) Тогда
            Возврат Истина;
        КонецЕсли;
        
        ХарактеристикаНоменклатуры = Справочники.ВариантыИсполнения.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдХарактеристики));
        ПустаяХарактеристикаСсылка=Справочники.ВариантыИсполнения.ПустаяСсылка();
        Если ХарактеристикаНоменклатуры = ПустаяХарактеристикаСсылка Тогда
            Возврат Истина;
        КонецЕсли;
            
        Если ХарактеристикаНоменклатуры.ПолучитьОбъект() = Неопределено Тогда
            СообщитьПользователю("Объект <ХарактеристикаНоменклатуры> не найден: " + Строка(ИдХарактеристики)
                + ". Будет создан новый объект.", Ложь);
                
            Возврат Ложь;
            
        КонецЕсли;
        
    //Исключение

        
    //    Возврат Ложь;

        
    //КонецПопытки;

    
    Возврат Истина;
    
КонецФункции
   Вафель
 
23 - 02.08.19 - 10:54
(22) нельзя ЗАПИСЫВАТЬ в попытке. ищи запись выше по коду
   Cyberhawk
 
24 - 02.08.19 - 10:55
(15) (23) Что-то ты несешь ерунду
   catena
 
25 - 02.08.19 - 10:56
(22)Поставь уже в отладчике остановку по ошибке.
   GGDots
 
26 - 02.08.19 - 10:59
(25) +
   DrZombi
 
27 - 02.08.19 - 11:09
(22) Номенклатура.ПолучитьОбъект()

Что вы тут пытаетесь проверить... Баже святы...
У вас какой уровень в 1С? :)
   DrZombi
 
28 - 02.08.19 - 11:09
(25) Тут и без отладчика видно ошибку :)
   DrZombi
 
29 - 02.08.19 - 11:11
+(22) "Если Номенклатура.ПолучитьОбъект() = Неопределено Тогда"

Тут скрыт первый косяк... "Детектит, ГУАНО код"... Рекомендую тут подумать вам, и переписать :)
   Privetanya
 
30 - 02.08.19 - 11:17
похоже поняла. Ошибка происходит при записи договора контрагента.
 
 Рекламное место пустует
   DrWatson
 
31 - 02.08.19 - 11:30
(30) Нужно найти ту первую Попытку с записью данных в БД, которая вываливается в исключение без "В данной транзакции уже происходили ошибки!". После такого исключения продолжать работу в транзакции уже нельзя. Нужно выходить из всех вызывающих процедур. Лучше всего это сделать через ВызватьИсключение с человеческим сообщением об ошибке или вообще не делать попытку.
Возможно, обработка просто не рассчитана на работу в транзакции.
   catena
 
32 - 02.08.19 - 11:59
(27)По-моему, проверяется найденность элемента по переданному ИД. А как надо?
   hhhh
 
33 - 02.08.19 - 12:08
(32) а точно там "Неопределено" выдаст? может null?
   catena
 
34 - 02.08.19 - 12:27
   Cyberhawk
 
35 - 02.08.19 - 12:29
(32) Запросом же можно (с условием на ссылку)
   catena
 
36 - 02.08.19 - 12:32
(35)Ну, это дело вкуса, при разовом обращении не вижу тут грубой ошибки.
   Cyberhawk
 
37 - 02.08.19 - 12:34
(36) Все зависит от того, планируется ли дальнейшая работа с объектом. Если только для проверки существования, то избыточное получение данных налицо.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.