На релизе 1С:Бухгалтерии 3.0.165.21 неожиданно обнаружил, что перестала производиться запись в регистр сведений через процедуру БСП ОбщегоНазначения.ВыполнитьВБезопасномРежиме().
Полез разбираться, и обнаружил, что теперь код выполнения алгоритма выглядит так:
Выполнить Алгоритм;
ОтменитьТранзакцию();
Кто-нибудь еще сталкивался с тем, что теперь старый код не работает? Как поступали?
Полностью процедура:
Процедура ВыполнитьВБезопасномРежиме(Знач Алгоритм, Знач Параметры = Неопределено) Экспорт
ПроверитьАлгоритм(Алгоритм);
УстановитьБезопасныйРежим(Истина);
Если ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса");
МассивРазделителей = МодульРаботаВМоделиСервиса.РазделителиКонфигурации();
Иначе
МассивРазделителей = Новый Массив;
КонецЕсли;
Для Каждого ИмяРазделителя Из МассивРазделителей Цикл
УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина);
КонецЦикла;
Попытка
Если ТранзакцияАктивна() Тогда
Выполнить Алгоритм;
Иначе
НачатьТранзакцию();
Попытка
Выполнить Алгоритм;
ОтменитьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке);
ВызватьИсключение(Уточнение.Текст, КатегорияОшибки.ОшибкаВнешнегоИсточникаДанных ,,, ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
Начинали стонать и поливать говном фирму 1С на форумах, конечно.
Фрагмент:
Если ТранзакцияАктивна() Тогда
Выполнить Алгоритм;
Иначе
НачатьТранзакцию();
Попытка
Выполнить Алгоритм;
ОтменитьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
(1) видимо выполнение в безопасном режиме не предполагает изменение данных произвольным алгоритмом.
Думаю исходя из соображений безопасности это сделано.
Если у вас произвольным кодом меняются данные, что мешает менять данные без использования этой функции, либо вызывать это непосредственно внутри транзакции