Обновление конфигураций 1С:Управление Торговлей (УТ) 11.5 — процесс, который нередко сопровождается сложностями, особенно при переходе через значительное количество релизов или при наличии скрытых проблем в данных. В этой статье мы подробно разберем ситуацию, возникшую при обновлении с версии 11.5.12.270 на 11.5.17.153. Пользователи столкнулись с двумя типами ошибок: программной недоработкой самого релиза и ошибкой, вызванной некорректными данными в базе. Отметим, что данный релиз вообще богат на сюрпризы: помимо разбираемых ниже ошибок, администраторы часто жалуются, что при переходе на УТ 11.5.17 поплыли остатки.
Давайте последовательно проанализируем эти ошибки, выясним их причины и рассмотрим методы устранения, чтобы ваш процесс обновления прошел успешно.
Первая проблема, с которой можно столкнуться на этапе отложенного обновления данных — это падение фонового задания с сообщением об ошибке в запросе.
Симптомы:
В журнале регистрации или в форме обновления вы видите следующую ошибку:
Ошибка при вызове метода контекста (Выполнить)
...
{(13, 37)}: Не задано значение параметра "Выполняемые"
И ОбработчикиОбновления.Порядок В (&Выполняемые)
Эта ошибка возникает в процедуре РегистрыСведений.ЗаданияКРаспределениюРасчетов.ОбработатьДанныеДляПереходаНаНовуюВерсию.
Причина:
Это известная ошибка релиза 11.5.17.153. Разработчики конфигурации допустили неточность в коде обработчика обновления. В тексте запроса используется параметр &Выполняемые, однако в коде перед выполнением этого запроса установка значения этого параметра пропущена (строка кода отсутствует).
Решение:
Существует два основных способа решения этой проблемы:
EF_00_00675031. После установки патча код обработчика будет скорректирован "на лету", параметр будет инициализирован корректно, и обновление продолжится.После устранения первой ошибки (или параллельно с ней) может возникнуть вторая, более специфичная проблема, связанная с данными. Она часто проявляется при пересчете регистров взаиморасчетов.
Симптомы:
Обработчики обновления прерываются с сообщением:
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(5178)}: Не заполнена дата начала границы курсов.
{ОбщийМодуль.ОперативныеВзаиморасчетыСервер.Модуль(13135)}:ВызватьИсключение(НСтр("ru = 'Не заполнена дата начала границы курсов.'"));
Причина:
Эта ошибка связана с переходом на новую архитектуру взаиморасчетов (так называемые "Онлайн-взаиморасчеты" или "Архитектура 2.0"). Система пытается пересчитать данные и определить курс валюты на дату операции.
В общем модуле ОперативныеВзаиморасчетыСервер существует проверка корректности даты. Алгоритм ожидает, что дата операции должна быть "разумной" (обычно не пустой и больше 01.01.1980 или 01.01.2000). Если в базе данных есть документы с ошибочно введенными датами (например, опечатка в годе), система не может корректно определить границу курсов и вызывает исключение.
В нашем примере реальной причиной оказался документ с датой 17.07.0202 (202 год нашей эры). Такая дата технически допустима для платформы 1С, но логика бизнес-процессов УТ не умеет работать с курсами валют за этот период.
Диагностика и поиск проблемного документа:
Давайте разберем, как найти такой документ. Есть два пути: через отладчик и через консоль запросов.
Если вы находитесь в процессе обновления и у вас есть доступ к конфигуратору: для этого есть инструмент пошаговой отладки и просмотра стека вызовов.
ОбщийМодуль.ОперативныеВзаиморасчетыСервер.ВызватьИсключение(НСтр("ru = 'Не заполнена дата начала границы курсов.'"))).Если вы хотите найти проблему без сложной отладки, можно воспользоваться консолью запросов (удобно через инструментарий для анализа структуры данных и запросов) или групповой обработкой справочников и документов 8.3, отсортировав документы по дате.
Пример запроса для поиска аномально старых документов:
ВЫБРАТЬ ПЕРВЫЕ 100
Ссылка,
Дата
ИЗ
Документ.ПоступлениеБезналичныхДенежныхСредств // Или другой подозреваемый тип документа
ГДЕ
Дата < ДАТАВРЕМЯ(2000, 1, 1)
УПОРЯДОЧИТЬ ПО
Дата
В обсуждаемом случае виновником был документ Поступление безналичных ДС. Рекомендуется проверить основные товарные и финансовые документы: СписаниеБезналичныхДенежныхСредств, РеализацияТоваровУслуг, ПоступлениеТоваровУслуг.
Решение:
Найдя документ с некорректной датой (например, 0202 год вместо 2022), необходимо исправить дату на верную. После исправления данных перезапустите процедуру обновления — ошибка должна исчезнуть.
Чтобы успешно завершить обновление в подобных ситуациях, выполним следующие шаги:
EF_00_00675031 перед запуском процедур обработки данных. Это предотвратит ошибку с параметром &Выполняемые.НСИ и администрирование – Обслуживание – Результаты обновления программы.Помните, что "прыжок" через большое количество релизов (например, с 11.5.12 сразу на 11.5.17) увеличивает риск возникновения подобных коллизий. В таких случаях всегда имейте под рукой актуальную резервную копию базы данных.