Обновление конфигураций «1С:Управление торговлей» (УТ 11) — процесс, который нередко преподносит сюрпризы, особенно если в системе используются сторонние расширения или доработки. Одной из распространенных проблем при переходе на релизы ветки 11.5.22 является критическая ошибка подключения расширений, связанных с рабочим местом кассира (РМК). Рассмотрим подробно ситуацию, когда после обновления система выдает сообщения о том, что не найдены определенные значения перечислений, и разберем алгоритм исправления.
Итак, ситуация следующая: после обновления с версии УТ 11.5.12.х на 11.5.22.х при запуске программы возникает окно с ошибками применения расширения (в данном случае — модуля интеграции UDS Game, но проблема актуальна для любых расширений, работающих с чеками ККМ). Текст ошибки выглядит примерно так:
Не найден объект Перечисление.СтатусыЧековККМ.ЗначениеПеречисления.ТоварЗарезервирован
Не найден объект Перечисление.СтатусыЧековККМ.ЗначениеПеречисления.Отложен
Давайте разберемся, почему это происходит. Механизм расширений в 1С работает таким образом, что он «заимствует» объекты из основной конфигурации. Если разработчики фирмы «1С» удаляют или переименовывают объект в основной конфигурации, расширение теряет связь с этим объектом («ссылка становится битой»), и платформа блокирует запуск, чтобы предотвратить дальнейшие ошибки данных.
В данном случае, в новых релизах УТ 11 разработчики провели рефакторинг работы с отложенными чеками. Старая логика использовала общие статусы, но для более точного складского учета и резервирования товаров в рознице состав значений перечисления СтатусыЧековККМ был изменен.
Если мы откроем конфигуратор новой версии (11.5.22+) и найдем перечисление СтатусыЧековККМ, мы увидим, что старых значений там больше нет. Вместо них появились новые, более детализированные статусы.
Было (в старых релизах):
ТоварЗарезервированОтложенСтало (в актуальных релизах):
КОплатеОтложенБезРезервирования — новый статус для "черновиков", не влияющий на доступный остаток.ОтложенСРезервированием — новый статус, жестко резервирующий товар под клиента.ПробитИменно это несоответствие и вызывает крах расширения при старте системы.
Существует два основных пути решения этой задачи. Рассмотрим их от простого к сложному.
Поскольку ошибка возникла в тиражном решении (модуль UDS Game), первым делом необходимо проверить наличие обновлений у разработчика интеграции. Как правило, вендоры отслеживают изменения в типовых конфигурациях 1С и выпускают адаптированные версии своих продуктов.
Если вы скачаете и установите свежую версию расширения, проблема решится автоматически, так как разработчики уже внесли необходимые правки в код. Если же обновление недоступно или вы используете самописное расширение, переходим ко второму способу.
Если нам необходимо восстановить работоспособность текущего расширения самостоятельно, выполним следующие шаги. Нам потребуется доступ в конфигуратор.
Шаг 1. Удаление битых ссылок
Откройте расширение конфигурации. Найдите в дереве метаданных расширения ветку Перечисления -> СтатусыЧековККМ. Вы увидите, что значения ТоварЗарезервирован и Отложен помечены красным или серым значком (в зависимости от версии платформы), сигнализирующим о потере связи с основным объектом. Эти значения необходимо удалить из расширения.
Шаг 2. Заимствование новых значений
Теперь нужно добавить в расширение актуальные значения из основной конфигурации, чтобы использовать их в коде. Найдите в основной конфигурации (окно слева или "Основная конфигурация") перечисление СтатусыЧековККМ и добавьте в расширение следующие значения:
ОтложенБезРезервированияОтложенСРезервированиемШаг 3. Рефакторинг программного кода
Самый важный этап. Нам нужно найти все места в модулях расширения, где использовались старые статусы, и заменить их на новые. Воспользуйтесь глобальным поиском по текстам модулей расширения.
Логика замены должна быть следующей:
Пример того, как нужно изменить код. Допустим, у вас была проверка:
Если Объект.Статус = Перечисления.СтатусыЧековККМ.ТоварЗарезервирован Тогда
// Какая-то логика интеграции
КонецЕсли;
Вам необходимо переписать этот блок следующим образом:
// Адаптация под 11.5.22+
Если Объект.Статус = Перечисления.СтатусыЧековККМ.ОтложенСРезервированием Тогда
// Какая-то логика интеграции
КонецЕсли;
Аналогично поступаем со вторым статусом:
// Было:
// Если Объект.Статус = Перечисления.СтатусыЧековККМ.Отложен Тогда...
// Стало:
Если Объект.Статус = Перечисления.СтатусыЧековККМ.ОтложенБезРезервирования Тогда
// Логика
КонецЕсли;
После внесения изменений в код обязательно выполните проверку в режиме предприятия. Обратите внимание на следующие моменты, так как обновление релиза было глобальным:
Следуя этой инструкции, вы сможете оперативно восстановить работу магазина после обновления, даже если разработчик расширения еще не выпустил официальный патч.