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

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

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

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

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


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

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

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

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