Переход на версию 2.5.7 для конфигураций 1С:Комплексная автоматизация и 1С:ERP является одним из самых сложных в линейке 2.0. Это не просто рядовое обновление, а радикальная смена архитектуры данных системы. Процесс сопровождается большим количеством постобработчиков, и, если у вас объемная база, могут возникать различные зависания, нестыковки данных и ошибки в коде. Давайте подробно разберем основные проблемы, с которыми можно столкнуться при этом переходе, и проанализируем эффективные пути их решения.
Одной из первых проблем, которую мы можем выявить при тестировании обновления, является ошибка в обработчике обновления документа сверки взаиморасчетов. Система выдает сообщение: "Открытая внутри обработчика обновления транзакция осталась активной (не была закрыта или отменена)".
Выясним причину: один из постобработчиков Документы.СверкаВзаиморасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию прерывает цикл без закрытия транзакции. Для исправления этой проблемы лучше всего создать расширение и внести исправления в модуль менеджера документа СверкаВзаиморасчетов. Рассмотрим, какой код нам необходимо добавить.
Найдем процедуру ОбработатьДанныеДляПереходаНаНовуюВерсию и перед оператором продолжения цикла добавим принудительную фиксацию транзакции:
// . . .
Если Не ГотовКЗаполнению Тогда
ЗафиксироватьТранзакцию(); // Исправление ошибки зависшей транзакции
Продолжить;
КонецЕсли;
// . . .
После успешного обновления пользователи часто жалуются, что система тормозит и возникают массовые взаимоблокировки. Если мы проанализируем ситуацию отладчиком, то увидим зависание процедуры расчета графика платежей при проведении документа. Процедура захватывает транзакцию и держит блокировки базы.
Эта проблема кроется в общем модуле ОперативныеВзаиморасчетыСервер, внутри процедуры ЗаполнитьОперативныеВзаиморасчеты. Зависание происходит в цикле:
Пока Индексы.ИндексОплаты + Индексы.ИндексОтгрузкиПоставки < ЗаписейОбработать Цикл
// ... тело цикла ...
КонецЦикла;
Этот цикл становится бесконечным, если в табличной части документа есть строки с нулевой суммой, или если объект расчетов (договор/заказ) был изменен пользователем вручную в процессе проведения. Чтобы решить проблему прямо сейчас в отладчике, мы можем вручную подсунуть нужные данные (изменить индексы).
Однако более правильным решением будет очистить регистр сведений ЗаданияКРаспределениюРасчетов. Именно "очередь" заданий заставляет систему снова и снова пытаться выполнить зависающий код. Также стоит обратить внимание на зависание при работе с документом ПроизводствоБезЗаказа. Если в базе были незакрытые документы со старыми статусами, они могут зацикливаться. В таком случае требуется очистить сохраненный список типов в регистре сведений ОбработчикиОбновления.
Рассмотрим важное структурное изменение. Ставка НДС теперь является не перечислением, а элементом справочника СтавкиНДС. Это означает, что если в ваших доработках (внешних обработках, правилах обмена) было прямое обращение к перечислению, код перестанет работать.
Посмотрим на пример того, как теперь необходимо получать ссылку на ставку 20% программно:
СтавкаНДС20 = УчетНДСЛокализация.СтавкаНДСПоПеречислению(ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20"));
С какими сложностями мы можем здесь столкнуться? Во-первых, в оплатах (ПКО, РКО, Оплата картой) после перехода сумма НДС может стать равной нулю, независимо от выбранной ставки. Чтобы вернуть значение суммы НДС, необходимо перевыбрать сумму в самом документе (или написать групповую обработку для перепроведения). Во-вторых, при обновлении или обменах из-за разных идентификаторов могут создаться дублирующие элементы в новом справочнике. Мы настоятельно рекомендуем сразу после обновления запустить обработку "Поиск и удаление дублей", чтобы объединить задублированные ставки, иначе документы будут проводиться, но данные по НДС не попадут в Книгу покупок или Книгу продаж.
При обновлении до 2.5 упраздняется старая функция программного интерфейса НалогообложениеНДС, а также справочник УчетныеПолитикиОрганизаций. Теперь настройки учетной политики перенесены непосредственно в карточку Организации (на вкладку "Учетная политика и налоги").
Если при загрузке данных из других систем или при перепроведении вы получаете сообщение об ошибке: "Обратите внимание, что тип налогообложения 'Продажа облагается НДС' не поддерживается учетной политикой организации", это означает, что система жестко контролирует соответствие флагов.
Как это исправить? Разберем по шагам:
ОрганизацияЯвляетсяПлательщикомНДС или флаг применения освобождения.Если вы загружаете документы программно, вместо вызова устаревших функций назначайте тип налогообложения напрямую, опираясь на расчет итогов, например:
Объект.НалогообложениеНДС = ?(Объект.Товары.Итог("СуммаНДС") = 0,
Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС,
Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);
Пользователи могут жаловаться, что после перехода документы по управленческому учету не попадают в акт сверки и сводную ведомость. Ошибка кажется критической: визуально документы в системе присутствуют и проведены, но в регистрах пусто.
Причина этого кроется в переходе на новую Архитектуру взаиморасчетов версии 3. Данные теперь консолидируются и пишутся в совершенно новые регистры (вместо раздельных регистров расчетов с клиентами и поставщиками). Если в старых регистрах до обновления были «зависшие» копейки или ошибки распределения, алгоритм постобработки не может их корректно перенести, и прошлые периоды "схлопываются".
Решение проблемы:
РасчетыПоСрокам и закрыть зависшие копейки.ИсправлениеЗаданийКРаспределениюВзаиморасчетов. Оно поможет системе "протолкнуть" непрошедшие движения в новую архитектуру.И, наконец, стоит упомянуть библиотеку стандартных подсистем (БСП 3.1.5) и работу постобработчиков. В этом обновлении их очень много (более 450). Важно понимать, что БСП делит их на критические и некритические.
Система может позволить пользователям зайти в базу, когда выполнена только критическая часть. Однако, если некритические обработчики (например, по пересчету партий, НДС или упр. учету) все еще работают в фоне, пользователи будут видеть пустые ведомости и некорректные отчеты. Мы рекомендуем категорически не пускать пользователей в систему до тех пор, пока в форме "Обслуживание -> Результаты обновления" статус не изменится на полностью завершенный (когда пропадет синяя полоса прогресса фоновых заданий).