Имя: Пароль:
1C
1С v8
Новая база Бухгалтерия для Украины
,
0 satoru
 
14.02.17
12:39
Платформа 8.3.6.2332.
Создаю новую базу Бухгалтерия для Украины (1.2.39.2) и при первоначальном заполнении Плана видов расчета Оклад по часам выдаёт ошибку:

{Обработка.НачальноеЗаполнениеИОбновлениеОбъектов.МодульОбъекта(1386)}: Ошибка при вызове метода контекста (ПолучитьОбъект)
        ТекущаяЗапись = СсылкаНаЭлемент.ПолучитьОбъект();
по причине:
В данной транзакции уже происходили ошибки!
1 Волшебник
 
модератор
14.02.17
12:39
ошибка в строке 1386
2 satoru
 
14.02.17
12:46
(1) Если через отладчик, то он возвращает:
СсылкаНаЭлемент:    Ошибка получения представления значения
3 Так мало знающий
 
14.02.17
12:51
(2) Элемент не найден, а он еще и пытается получить его как Объект. Смотри почему не нашел.
4 satoru
 
14.02.17
13:03
(3) Он не может найти предопределенный объект "ОкладПоЧасам", который прописан в предопределенных элементах плана видов расчета "Основные начисления работников".
5 satoru
 
14.02.17
15:42
Теперь он не может найти предопределенный "Код01" в справочнике "Виды доходов НДФЛ".
6 satoru
 
14.02.17
17:55
up
7 Волшебник
 
модератор
14.02.17
17:58
(5) кто он?
8 satoru
 
14.02.17
17:59
(7) 1C
9 sonsimo
 
14.02.17
18:00
Это ошибка означает, что была открыта транзакция, в транзакции еще одна транзакция, а потом в этой транзакции произошло исключение, которое отловили, но транзакцию не откатили.
Что бы найти причину, нужно устанавливать остановку по ошибке и смотреть где исключение вызывается
10 satoru
 
14.02.17
18:01
(9) Я так и сделал. И вычисление выражения показало: (2)
11 sonsimo
 
14.02.17
18:23
(10) останавливаться на ошибке типа "в транзакции уже происходили ошибки" поздно. Нужно искать предыдущую ошибку, даже если она заключена в попытку исключение.
После такой ошибки любое обращение к БД, даже из отладчика приводит к исключению. В том числе и получение предоставления ссылки.
Вообще, такие ошибки отлавливать - это самое Галчонок, что есть.
Если включить остановку по ошибке, то до этой ошибки никаких исключений нет?
Если по ошибке не останавливается, то нужно искать ОтменитьТранзакцию, которая вызывается перед возникновением ошибки.
12 sonsimo
 
14.02.17
18:26
(11) Т.е. план действий должен быть примерно такой:
1. Ищем, было ли какое то исключение до возникновения ошибки. Если было, нужно правильно откатывать транзакцию.
2. Если не было исключения, то останавливаемся по ошибке с "в этой транзакции..." и раскручиваем стек вызовов. В коде, который был до этого нужно найти откат транзакции.
13 sonsimo
 
14.02.17
18:29
+ (12) ну и после нужно анализировать, почему такие вложенные транзакции возникают и нужны ли они вообще.
Ну и если есть откат транзакции, то вроде нужно откатить из все.
14 Волшебник
 
модератор
14.02.17
18:30
вложенных транзакций не бывает
15 sonsimo
 
14.02.17
18:33
Вроде бывают.
Если несколько раз начинать транзакцию, но не фиксировать ее, то это именно они.
Другой вопрос, что исключение весь стек транзакций отменяет. Т.е. нельзя открыть одну транзакцию, что то сделать с данными, потом открыть другую, что то сделать, потом вторую отменить, а первую закоммитить. Т.к. отмена второй отменит и первую вроде.
Но такое поведение приводит к описанной ошибке.
16 lubitelxml
 
14.02.17
18:38
(0) рассказывай как базу создавал. Cf в чистую грузил? Попробуй cf версией раньше, отпиши что получилось
17 satoru
 
15.02.17
08:58
(16) Загружал cf в чистую базу. На версии 1.2.38 данной ошибки нет и если её обновить до 1.2.39, то данной ошибки тоже нет.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший