Как решить проблемы при обновлении 1С: Комплексная автоматизация и ERP до версии 2.5.7?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

Переход на версию 2.5.7 для конфигураций 1С:Комплексная автоматизация и 1С:ERP является одним из самых сложных в линейке 2.0. Это не просто рядовое обновление, а радикальная смена архитектуры данных системы. Процесс сопровождается большим количеством постобработчиков, и, если у вас объемная база, могут возникать различные зависания, нестыковки данных и ошибки в коде. Давайте подробно разберем основные проблемы, с которыми можно столкнуться при этом переходе, и проанализируем эффективные пути их решения.

Незакрытая транзакция в постобработчике "Сверка взаиморасчетов"

Одной из первых проблем, которую мы можем выявить при тестировании обновления, является ошибка в обработчике обновления документа сверки взаиморасчетов. Система выдает сообщение: "Открытая внутри обработчика обновления транзакция осталась активной (не была закрыта или отменена)".

Выясним причину: один из постобработчиков Документы.СверкаВзаиморасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию прерывает цикл без закрытия транзакции. Для исправления этой проблемы лучше всего создать расширение и внести исправления в модуль менеджера документа СверкаВзаиморасчетов. Рассмотрим, какой код нам необходимо добавить.

Найдем процедуру ОбработатьДанныеДляПереходаНаНовуюВерсию и перед оператором продолжения цикла добавим принудительную фиксацию транзакции:


// . . .
Если Не ГотовКЗаполнению Тогда
    ЗафиксироватьТранзакцию(); // Исправление ошибки зависшей транзакции
    Продолжить;
КонецЕсли;
// . . .

Зависание базы: бесконечный цикл в оперативных взаиморасчетах

После успешного обновления пользователи часто жалуются, что система тормозит и возникают массовые взаимоблокировки. Если мы проанализируем ситуацию отладчиком, то увидим зависание процедуры расчета графика платежей при проведении документа. Процедура захватывает транзакцию и держит блокировки базы.

Эта проблема кроется в общем модуле ОперативныеВзаиморасчетыСервер, внутри процедуры ЗаполнитьОперативныеВзаиморасчеты. Зависание происходит в цикле:


Пока Индексы.ИндексОплаты + Индексы.ИндексОтгрузкиПоставки < ЗаписейОбработать Цикл
    // ... тело цикла ...
КонецЦикла;

Этот цикл становится бесконечным, если в табличной части документа есть строки с нулевой суммой, или если объект расчетов (договор/заказ) был изменен пользователем вручную в процессе проведения. Чтобы решить проблему прямо сейчас в отладчике, мы можем вручную подсунуть нужные данные (изменить индексы).

Однако более правильным решением будет очистить регистр сведений ЗаданияКРаспределениюРасчетов. Именно "очередь" заданий заставляет систему снова и снова пытаться выполнить зависающий код. Также стоит обратить внимание на зависание при работе с документом ПроизводствоБезЗаказа. Если в базе были незакрытые документы со старыми статусами, они могут зацикливаться. В таком случае требуется очистить сохраненный список типов в регистре сведений ОбработчикиОбновления.

Изменение архитектуры НДС: Перечисление заменено на Справочник

Рассмотрим важное структурное изменение. Ставка НДС теперь является не перечислением, а элементом справочника СтавкиНДС. Это означает, что если в ваших доработках (внешних обработках, правилах обмена) было прямое обращение к перечислению, код перестанет работать.

Посмотрим на пример того, как теперь необходимо получать ссылку на ставку 20% программно:


СтавкаНДС20 = УчетНДСЛокализация.СтавкаНДСПоПеречислению(ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20"));

С какими сложностями мы можем здесь столкнуться? Во-первых, в оплатах (ПКО, РКО, Оплата картой) после перехода сумма НДС может стать равной нулю, независимо от выбранной ставки. Чтобы вернуть значение суммы НДС, необходимо перевыбрать сумму в самом документе (или написать групповую обработку для перепроведения). Во-вторых, при обновлении или обменах из-за разных идентификаторов могут создаться дублирующие элементы в новом справочнике. Мы настоятельно рекомендуем сразу после обновления запустить обработку "Поиск и удаление дублей", чтобы объединить задублированные ставки, иначе документы будут проводиться, но данные по НДС не попадут в Книгу покупок или Книгу продаж.

Новая Учетная политика и ошибки налогообложения

При обновлении до 2.5 упраздняется старая функция программного интерфейса НалогообложениеНДС, а также справочник УчетныеПолитикиОрганизаций. Теперь настройки учетной политики перенесены непосредственно в карточку Организации (на вкладку "Учетная политика и налоги").

Если при загрузке данных из других систем или при перепроведении вы получаете сообщение об ошибке: "Обратите внимание, что тип налогообложения 'Продажа облагается НДС' не поддерживается учетной политикой организации", это означает, что система жестко контролирует соответствие флагов.

Как это исправить? Разберем по шагам:

  1. Откроем карточку проблемной организации.
  2. Перейдем на вкладку настроек налогообложения.
  3. Убедимся, что установлен корректный флаг, например ОрганизацияЯвляетсяПлательщикомНДС или флаг применения освобождения.
  4. Обязательно создадим новую запись учетной политики, действующую с начала текущего отчетного квартала.

Если вы загружаете документы программно, вместо вызова устаревших функций назначайте тип налогообложения напрямую, опираясь на расчет итогов, например:


Объект.НалогообложениеНДС = ?(Объект.Товары.Итог("СуммаНДС") = 0, 
    Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС, 
    Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);

Пропажа данных по управленческому учету и Взаиморасчеты v3

Пользователи могут жаловаться, что после перехода документы по управленческому учету не попадают в акт сверки и сводную ведомость. Ошибка кажется критической: визуально документы в системе присутствуют и проведены, но в регистрах пусто.

Причина этого кроется в переходе на новую Архитектуру взаиморасчетов версии 3. Данные теперь консолидируются и пишутся в совершенно новые регистры (вместо раздельных регистров расчетов с клиентами и поставщиками). Если в старых регистрах до обновления были «зависшие» копейки или ошибки распределения, алгоритм постобработки не может их корректно перенести, и прошлые периоды "схлопываются".

Решение проблемы:

  1. До обновления (в исходной копии базы 2.4) настоятельно рекомендуем провести полный аудит регистра РасчетыПоСрокам и закрыть зависшие копейки.
  2. После обновления в новой базе запустим регламентное задание ИсправлениеЗаданийКРаспределениюВзаиморасчетов. Оно поможет системе "протолкнуть" непрошедшие движения в новую архитектуру.

Особенности работы фоновых заданий (Постобработчиков)

И, наконец, стоит упомянуть библиотеку стандартных подсистем (БСП 3.1.5) и работу постобработчиков. В этом обновлении их очень много (более 450). Важно понимать, что БСП делит их на критические и некритические.

Система может позволить пользователям зайти в базу, когда выполнена только критическая часть. Однако, если некритические обработчики (например, по пересчету партий, НДС или упр. учету) все еще работают в фоне, пользователи будут видеть пустые ведомости и некорректные отчеты. Мы рекомендуем категорически не пускать пользователей в систему до тех пор, пока в форме "Обслуживание -> Результаты обновления" статус не изменится на полностью завершенный (когда пропадет синяя полоса прогресса фоновых заданий).

← На главную