Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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
Цитата kosten @
регистр

Журнал регистрации. Да, надо посмотреть.

Автор: ^D^ima 22.01.18, 13:40
В журнале пусто

Автор: kosten 22.01.18, 13:47
Цитата ^D^ima @
В журнале пусто

А он настроен на запись всех событий?

Автор: ^D^ima 22.01.18, 13:49
Вот такие записи появились:
1c.png (, : 871)

Автор: evGenius 22.01.18, 13:54
Цитата ^D^ima @
Вот такие записи появились

Это видимо не все, надо самый конец с ошибками видеть.

Автор: ^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
Цитата kosten @
Или поставь остановку по ошибке включи (при отладке).

Классная штука!
Уже ближе.
Уже к конфигуратор вываливается!
Вот эта процедура:
<{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 @
Какие мои дальнейшие шаги?

Дальше копать )

Автор: ^D^ima 23.01.18, 14:01
Вот эта шляпа!!!
Только что с этим делать и на что указывает данная ошибка?
Что проверить?
1c.png (, : 785)

Добавлено
проверил счет 19.08 в другой бухе 3.0. где эта галка ставится и убирается, заметил разницу с субконто3, в сломанной поставил субконто3 как в нормальной и ВСЕ ЗАВИЛОСЬ!!! :wall: :wall: :wall: :wall: :wall:

это полный ппц

Добавлено
kosten
спасибо за галку

Автор: kosten 23.01.18, 15:10
Цитата ^D^ima @
спасибо за галку

Пожалуйста.

Автор: kosten 06.02.18, 08:00
Статья по теме.

Автор: ^D^ima 06.02.18, 16:49
В целом ясно. Как понимаю без этого(запись объекта внутри объекта) не обойтись совсем, вот и ставят в коде, который так ведет себя при ошибке в 1 транзакции

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)