|
В данной транзакции уже происходили ошибки! | ☑ | ||
---|---|---|---|---|
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) Все зависит от того, планируется ли дальнейшая работа с объектом. Если только для проверки существования, то избыточное получение данных налицо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |