Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > 1С: Проблемы и решения > 1c бух 3.0 "в данной транзакции уже происходили ошибки" |
Автор: ^D^ima 22.01.18, 12:31 |
Опять 25. Что-то мне не везет с базами! Вот что ему не хватает? Ставлю галку раздельный учет НДС 1c.png (, : 894) |
Автор: evGenius 22.01.18, 12:38 |
Надо включить отладку, чтобы появилась кнопка "Подробно..." |
Автор: ^D^ima 22.01.18, 12:44 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> {ОбщаяФорма.НалогиИОтчеты.Форма(2169)}: Ошибка при вызове метода контекста (Записать) МенеджерЗаписи.Записать(Истина); по причине: В данной транзакции уже происходили ошибки! |
Автор: kosten 22.01.18, 13:00 |
^D^ima, теперь лезем в код и курим причину ошибки. |
Автор: evGenius 22.01.18, 13:07 |
Это видимо не всё описание ошибки, там еще по-хорошему причина ошибки записи должна присутствовать. |
Автор: kosten 22.01.18, 13:08 |
Цитата evGenius @ Это видимо не всё описание ошибки, там еще по-хорошему причина ошибки записи должна присутствовать. Надо глянуть, что в регистр пишется. Скорее всего в этом проблема. |
Автор: evGenius 22.01.18, 13:22 |
Журнал регистрации. Да, надо посмотреть. |
Автор: ^D^ima 22.01.18, 13:40 |
В журнале пусто |
Автор: kosten 22.01.18, 13:47 |
А он настроен на запись всех событий? |
Автор: ^D^ima 22.01.18, 13:49 |
Вот такие записи появились: 1c.png (, : 871) |
Автор: evGenius 22.01.18, 13:54 |
Это видимо не все, надо самый конец с ошибками видеть. |
Автор: ^D^ima 22.01.18, 16:59 |
Вклнце нет ошибок |
Автор: ^D^ima 23.01.18, 13:13 |
Как включить логирование повышенного уровня и все-же получить строку(или документ) в коде где ошибка появляется? |
Автор: kosten 23.01.18, 13:16 |
Цитата ^D^ima @ Как включить логирование повышенного уровня и все-же получить строку(или документ) в коде где ошибка появляется? Посмотри настройки журнала регистрации, вроде нижний пункт подойдет. Добавлено Я бы на твоем месте под отладчиком глянул, что пишется в тот самый регистр на котором все валится. Добавлено Или поставь остановку по ошибке включи (при отладке). |
Автор: ^D^ima 23.01.18, 13:42 |
Классная штука! Уже ближе. Уже к конфигуратор вываливается! Вот эта процедура: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Процедура ПрименитьПараметрыУчета(ПараметрыУчета, ИзмененыПараметрыСубконто = Ложь, Отказ = Ложь) Экспорт ПризнакиУчета = ПолучитьСтруктуруПризнаковУчетаСубконто(); ДействияИзмененияСубконто = ПолучитьДействияИзмененияСубконто(ПараметрыУчета); // Иерархическая коллекция: на первом уровне действия с субконто на каждом из счетов, на втором - действия с призаками учета. // Сгруппируем изменения по счетам, так как записывать будем именно счет СчетаКИзменению = ОбщегоНазначения.ВыгрузитьКолонку(ДействияИзмененияСубконто, "Счет", Истина); ДействияИзмененияСубконто.Индексы.Добавить("Счет"); Отбор = Новый Структура("Счет"); НачатьТранзакцию(); Для Каждого Счет Из СчетаКИзменению Цикл Отбор.Счет = Счет; ДействияДляСчета = ДействияИзмененияСубконто.НайтиСтроки(Отбор); Объект = Счет.ПолучитьОбъект(); ПротоколИзменений = Новый Массив; Для Каждого Действие Из ДействияДляСчета Цикл // Действие: -1 удалить; 0 - не менять; 1 - установить // Действия с видом субконто Если Действие.Действие = 1 Тогда // Добавить субконто Если Счет = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда Тогда ВидыСубконтоСтрока = Объект.ВидыСубконто.Вставить(0); Иначе ВидыСубконтоСтрока = Объект.ВидыСубконто.Добавить(); КонецЕсли; ВидыСубконтоСтрока.ВидСубконто = Действие.Субконто; ДобавитьВПротоколИзменениеСубконто(ПротоколИзменений, ВидыСубконтоСтрока.ВидСубконто, Действие.Действие); Иначе ВидыСубконтоСтрока = Объект.ВидыСубконто.Найти(Действие.Субконто, "ВидСубконто"); Если ВидыСубконтоСтрока = Неопределено Тогда Продолжить; КонецЕсли; КонецЕсли; Если Действие.Действие = -1 Тогда ДобавитьВПротоколИзменениеСубконто(ПротоколИзменений, ВидыСубконтоСтрока.ВидСубконто, Действие.Действие); Объект.ВидыСубконто.Удалить(ВидыСубконтоСтрока); Продолжить; КонецЕсли; // Действия с признаками учета Для Каждого ПризнакУчета Из ПризнакиУчета Цикл ДействиеСПризнаком = Действие[ПризнакУчета.Ключ]; Если ДействиеСПризнаком = 1 Тогда ЗначениеПризнака = Истина; ИначеЕсли ДействиеСПризнаком = -1 Тогда ЗначениеПризнака = Ложь; Иначе Продолжить; КонецЕсли; Если ВидыСубконтоСтрока[ПризнакУчета.Ключ] = ЗначениеПризнака Тогда Продолжить; КонецЕсли; ВидыСубконтоСтрока[ПризнакУчета.Ключ] = ЗначениеПризнака; ДобавитьВПротоколИзменениеПризнакаУчета( ПротоколИзменений, ВидыСубконтоСтрока.ВидСубконто, ПризнакУчета.Значение, ДействиеСПризнаком); КонецЦикла; // По признакам учета КонецЦикла; // По ДействияДляСчета Если Не Объект.Модифицированность() Тогда Продолжить; КонецЕсли; ПротоколИзмененийСтрокой = СтрСоединить(ПротоколИзменений, Символы.ПС); Попытка Объект.Записать();//ВОТ ТУТ ВАЛИТСЯ Исключение ОписаниеОшибки = ИнформацияОбОшибке(); ОтменитьТранзакцию(); Отказ = Истина; ШаблонТекста = НСтр("ru = 'Ошибка при записи счета [КодСчета]: |[ОписаниеОшибки] |Ошибка произошла при попытке выполнить следующие изменения: |[ПротоколИзменений]'"); ПараметрыТекста = Новый Структура; ПараметрыТекста.Вставить("КодСчета", Объект.Код); ПараметрыТекста.Вставить("ПротоколИзменений", ПротоколИзмененийСтрокой); // В журнал регистрации выведем подробную информацию ПараметрыТекста.Вставить("ОписаниеОшибки", ПодробноеПредставлениеОшибки(ОписаниеОшибки)); Текст = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонТекста, ПараметрыТекста); ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрацииПараметрыУчета(), УровеньЖурналаРегистрации.Ошибка, Счет.Метаданные(), Счет, // Данные Текст); // Пользователю выведем краткое сообщение ШаблонТекста = НСтр("ru = 'Ошибка при записи счета [КодСчета] |Подробности см. в Журнале регистрации.'"); Текст = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонТекста, ПараметрыТекста); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); Возврат; КонецПопытки; // Запишем в журнал регистрации подробную информацию об изменениях ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрацииПараметрыУчета(), УровеньЖурналаРегистрации.Информация, Счет.Метаданные(), Счет, ПротоколИзмененийСтрокой, РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); КонецЦикла; // По СчетаКИзменению БухгалтерскийУчетПереопределяемый.УстановитьПараметрыУчетаРасчетовПоЗарплате(?(ПараметрыУчета.ВестиУчетПоРаботникам = 1, Ложь, Истина)); БухгалтерскийУчетПереопределяемый.УстановитьУчетЗарплатыИКадровВоВнешнейПрограмме(?(ПараметрыУчета.УчетЗарплатыИКадровВоВнешнейПрограмме = 1, Истина, Ложь)); БухгалтерскийУчетПереопределяемый.УстановитьНастройкиКадровогоУчета(ПараметрыУчета.КадровыйУчет, ?(ПараметрыУчета.УчетЗарплатыИКадровВоВнешнейПрограмме = 0, Истина, Ложь)); ЗафиксироватьТранзакцию(); ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры 1c.png (, : 807) Добавлено Какие мои дальнейшие шаги? |
Автор: kosten 23.01.18, 13:50 |
Дальше копать ) |
Автор: ^D^ima 23.01.18, 14:01 |
Вот эта шляпа!!! Только что с этим делать и на что указывает данная ошибка? Что проверить? 1c.png (, : 785) Добавлено проверил счет 19.08 в другой бухе 3.0. где эта галка ставится и убирается, заметил разницу с субконто3, в сломанной поставил субконто3 как в нормальной и ВСЕ ЗАВИЛОСЬ!!! это полный ппц Добавлено kosten спасибо за галку |
Автор: kosten 23.01.18, 15:10 |
Пожалуйста. |
Автор: kosten 06.02.18, 08:00 |
Статья по теме. |
Автор: ^D^ima 06.02.18, 16:49 |
В целом ясно. Как понимаю без этого(запись объекта внутри объекта) не обойтись совсем, вот и ставят в коде, который так ведет себя при ошибке в 1 транзакции |