Обновление конфигурации 1С:Управление торговлей с версии 11.4 на 11.5 (а также аналогичных версий ERP и Комплексной автоматизации) — это сложный процесс, сопряженный с радикальным изменением архитектуры учета. Одной из самых распространенных и неприятных проблем является критическая ошибка при выполнении отложенных обработчиков обновления: "Произошло зацикливание процедуры обработки данных. Выполнение прервано".
Особенно часто эта ошибка проявляется в процедуре РегистрыСведений.АналитикаУчетаПартий.ОбработатьДанныеДляПереходаНаНовуюВерсию. В этой статье мы подробно разберем, почему это происходит, как диагностировать причину и какие программные методы помогут успешно завершить переход на новую версию.
Начиная с версии 11.5, разработчики 1С перешли от использования жестко заданного перечисления Перечисления.СтавкиНДС к справочнику Справочники.СтавкиНДС. Это было сделано для реализации историчности ставок (возможность указывать периоды действия) и поддержки сложных расчетных механизмов. Процесс обновления должен автоматически сопоставить каждое значение из документов и регистров со ссылкой на новый справочник.
Механизм зацикливания в БСП (Библиотеке стандартных подсистем) работает так:
АналитикаУчетаПартий), где реквизит СтавкаНДС (справочник) еще не заполнен.СтавкиНДС была добавлена кастомная ставка (например, "22%"), типовой алгоритм 1С "не узнает" её. Он не создает элемент справочника и оставляет поле пустым.Если ваша база эксплуатировалась в условиях специфического законодательства или в нее вносились изменения программистами, скорее всего, в перечислении СтавкиНДС присутствуют лишние значения. Например, ставка 22% или специфические расчетные ставки. Типовое обновление 11.5 рассчитано только на стандартный набор (0%, 10%, 18%, 20% и их расчетные аналоги).
Чтобы решить проблему, нам необходимо вмешаться в процесс заполнения справочника СтавкиНДС, чтобы система корректно обработала ваши уникальные значения. В качестве готового решения можно применить расширение для добавления новых ставок НДС в УТ 11.5 и ERP 2.5.
Рассмотрим пример кода, который необходимо внедрить в систему через расширение, используя аннотацию &ИзменениеИКонтроль. Нам нужно модифицировать процедуру, отвечающую за первоначальное наполнение справочника ставок.
&ИзменениеИКонтроль("ЗаполнитьСправочникСтавкиНДС")
Процедура ИНДСЗаполнитьСправочникСтавкиНДС()
НачатьТранзакцию();
Попытка
// Добавляем обработку нашей кастомной ставки 22%
// Сначала проверим, существует ли уже такая ставка в справочнике
СтавкаНДС22 = УчетНДСРФВызовСервера.СтавкаНДСПоЗначениюПеречисления(
Перечисления.СтавкиНДС.НДС22, Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);
Если СтавкаНДС22.Пустая() Тогда
СтавкаНДС22_Объект = Справочники.СтавкиНДС.СоздатьЭлемент();
Иначе
СтавкаНДС22_Объект = СтавкаНДС22.ПолучитьОбъект();
КонецЕсли;
СтавкаНДС22_Объект.Наименование = "22%";
СтавкаНДС22_Объект.Ставка = 22;
СтавкаНДС22_Объект.Страна = Справочники.СтраныМира.Россия;
СтавкаНДС22_Объект.НачалоПериода = Дата(2026, 01, 01);
СтавкаНДС22_Объект.ПеречислениеСтавкаНДС = Перечисления.СтавкиНДС.НДС22;
// Обязательно заполняем типы налогообложения, иначе ставка не подберется
СтавкаНДС22_Объект.ТипыНалогообложенияНДС.Очистить();
НоваяСтрока = СтавкаНДС22_Объект.ТипыНалогообложенияНДС.Добавить();
НоваяСтрока.ТипНалогообложенияНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;
ОбновлениеИнформационнойБазы.ЗаписатьДанные(СтавкаНДС22_Объект);
// Аналогично нужно обработать расчетную ставку (22/122), если она есть
// ... (аналогичный код для расчетной ставки)
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Важный момент: При создании элемента справочника вручную или через код крайне важно заполнять табличную часть ТипыНалогообложенияНДС. Именно по этой таблице система в дальнейшем сопоставляет данные в регистрах. Если вы просто создадите элемент с наименованием "22%", но не укажите тип налогообложения, обработчик обновления его не увидит и зацикливание продолжится.
Если в вашей базе сотни тысяч или миллионы записей в регистре АналитикаУчетаПартий, даже при отсутствии ошибок обновление может идти очень долго. Рассмотрим, как ускорить этот процесс:
АналитикаУчетаПартий. Если в нем есть записи с одинаковыми ключами аналитики, но разными ставками НДС, это может вызвать конфликт уникальности при попытке записи обновленных данных.Если вы уже запустили обновление и получили ошибку зацикливания, выполните следующие действия:
Перечисления.СтавкиНДС значения, которые не являются типовыми.ОбновлениеИнформационнойБазы (установите статус "Не выполнялся") и запустите отложенное обновление заново.Использование комплексного подхода — программной корректировки справочника и правильной настройки потоков — гарантирует успешный переход на УТ 11.5 даже при наличии значительных кастомизаций в учете НДС. Для контроля и перезапуска процедур после исправления ошибок пригодится обработка для принудительного выполнения отложенного обновления информационной базы.