Как исправить ошибку КлючВарианта в отчете Остатки и доступность после обновления ERP 2.5.8

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

При обновлении конфигурации 1С:ERP Управление предприятием до версии 2.5.8.383 и выше, многие специалисты сталкиваются с неприятной ситуацией: стандартный отчет ОстаткиИДоступностьТоваров перестает открываться, выдавая ошибку: "Недопустимое значение параметра КлючВарианта в функции ВариантыОтчетов.ОписаниеВарианта: вариант 'ИспользоватьНазначенияБезЗаказа' отсутствует в отчете 'ОстаткиИДоступностьТоваров'". При этом ни обновление вспомогательных данных, ни запуск с параметром /ЗапуститьОбновлениеИнформационнойБазы не помогают.

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

Причина 1: Конфликт расширений и платформы 8.3.22

Разберем ситуацию, которая является наиболее частой причиной падения отчета. Проблема кроется в изменении логики работы платформы 8.3.22 (особенно релизов уровня 1750) с заимствованными объектами в расширениях. В этой версии платформы механизм объединения (мержинга) макетов компоновки данных (СКД) начал работать иначе.

Если в вашем расширении заимствован отчет ОстаткиИДоступностьТоваров и в него добавлен макет ОсновнаяСхемаКомпоновкиДанных (даже если вы не вносили в него изменений, а просто «затянули» для будущего использования), платформа 8.3.22 может воспринять его как пустую переопределенную схему. В основной конфигурации в версии 2.5.8 в этот отчет был добавлен новый вариант ИспользоватьНазначенияБезЗаказа. Поскольку ваше расширение «подменяет» актуальную схему своей старой или «пустой» версией, код конфигурации не находит требуемый вариант, что и приводит к критической ошибке.

Рассмотрим шаги для исправления:

  1. Откройте конфигуратор и перейдите в список расширений.
  2. Найдите расширения, в которые заимствован отчет ОстаткиИДоступностьТоваров.
  3. Проверьте наличие макета ОсновнаяСхемаКомпоновкиДанных внутри этого отчета в расширении.
  4. Если макет есть, и вы не вносили в него существенных правок, удалите этот макет из расширения. Платформа начнет использовать актуальную схему из основной конфигурации.
  5. Если правки в СКД были необходимы, вам следует «перезахватить» макет из новой версии конфигурации и заново внести в него свои изменения.

Проанализируем ситуацию: после удаления макета из расширения и перезапуска сеанса, система увидит все предопределенные варианты отчета, включая ИспользоватьНазначенияБезЗаказа, и ошибка исчезнет.

Причина 2: Неактуальные данные в регистре Распределение запасов

Даже если отчет начал открываться, вы можете заметить, что цифры в нем не соответствуют реальности. Начиная с версии 2.5.8, механизм отчета «Остатки и доступность» был серьезно переработан. Теперь он не собирает данные «на лету» из множества регистров накопления, а опирается на специальный регистр-агрегатор — РегистрСведений.РаспределениеЗапасов.

Этот регистр заполняется фоновыми заданиями. Если в базе есть некорректные заказы (например, загруженные из маркетплейсов без контроля обеспечения) или произошел сбой при обновлении ИБ, данные в этом регистре становятся недостоверными. Рассмотрим, как принудительно актуализировать эти данные.

Выясним причину расхождений: отчет может «врать», если записи в регистре РаспределениеЗапасов не были обновлены после проведения документов. Для исправления ситуации можно воспользоваться программным вызовом процедуры обновления всех запасов.

Пример кода для исправления данных:

Вы можете создать внешнюю обработку или воспользоваться консолью кода (в режиме «Технического специалиста»), чтобы выполнить следующую команду:


// Принудительное обновление всех данных в агрегирующем регистре
РегистрыСведений.РаспределениеЗапасов.ОбновитьВсеРаспределениеЗапасов();

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

Рекомендации по работе с расширениями в ERP

Посмотрим на проблему шире. Чтобы избежать подобных ошибок в будущем при обновлении на новые релизы ERP и платформы, рекомендуем придерживаться следующих правил:

  1. Минимизируйте заимствование макетов СКД: Заимствуйте схему только в том случае, если вы действительно меняете текст запроса или настройки. Если вам нужно просто добавить поле, попробуйте сделать это через программное изменение схемы в модуле отчета расширения.
  2. Следите за версией платформы: Релиз 8.3.22.1750 считается проблемным в части работы с расширениями. Рекомендуется использовать более стабильные сборки, например, 8.3.22.1923 или переходить на ветку 8.3.23, где многие ошибки взаимодействия «расширение-схема» были исправлены.
  3. Проверяйте фоновые задания: После обновления ERP 2.5.8 обязательно зайдите в раздел Администрирование -> Обслуживание -> Обновление программы -> Результаты обновления. Убедитесь, что все дополнительные процедуры обработки данных (особенно связанные с распределением запасов) завершены успешно.

Дополнительное исправление логики (для продвинутых пользователей)

Иногда типовой алгоритм распределения запасов может содержать логические ошибки при работе с нестандартными заказами. Если ОбновитьВсеРаспределениеЗапасов() не помогает, программисты прибегают к корректировке общего модуля РаспределениеЗапасов. Рассмотрим пример того, какие участки кода могут требовать внимания:


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

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ТоварыНаСкладахОстатки.В НаличииОстаток КАК Наличие,
    |   ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток КАК Резерв
    |ИЗ
    |   РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    |... // далее сравнение с данными регистра РаспределениеЗапасов";

Однако, прежде чем вносить изменения в код, всегда пробуйте штатное удаление заимствованных объектов из расширения, так как в 90% случаев проблема КлючВарианта вызвана именно «зависшим» макетом в расширении, который не соответствует новой структуре метаданных ERP.

Подведем итог: если после обновления ERP 2.5.8 ваш отчет «Остатки и доступность» выдает ошибку варианта — первым делом очистите расширения от заимствованной СКД. Если же отчет работает, но показывает неверные остатки — выполните полную актуализацию регистра распределения запасов.

← На главную