При обновлении конфигурации 1С:ERP Управление предприятием до версии 2.5.8.383 и выше, многие специалисты сталкиваются с неприятной ситуацией: стандартный отчет ОстаткиИДоступностьТоваров перестает открываться, выдавая ошибку: "Недопустимое значение параметра КлючВарианта в функции ВариантыОтчетов.ОписаниеВарианта: вариант 'ИспользоватьНазначенияБезЗаказа' отсутствует в отчете 'ОстаткиИДоступностьТоваров'". При этом ни обновление вспомогательных данных, ни запуск с параметром /ЗапуститьОбновлениеИнформационнойБазы не помогают.
В рамках данной статьи мы подробно разберем, почему возникает эта проблема, как она связана с особенностями платформы 8.3.22 и что нужно сделать, чтобы отчет снова заработал корректно. Также мы проанализируем ситуацию, когда отчет открывается, но показывает недостоверные данные.
Разберем ситуацию, которая является наиболее частой причиной падения отчета. Проблема кроется в изменении логики работы платформы 8.3.22 (особенно релизов уровня 1750) с заимствованными объектами в расширениях. В этой версии платформы механизм объединения (мержинга) макетов компоновки данных (СКД) начал работать иначе.
Если в вашем расширении заимствован отчет ОстаткиИДоступностьТоваров и в него добавлен макет ОсновнаяСхемаКомпоновкиДанных (даже если вы не вносили в него изменений, а просто «затянули» для будущего использования), платформа 8.3.22 может воспринять его как пустую переопределенную схему. В основной конфигурации в версии 2.5.8 в этот отчет был добавлен новый вариант ИспользоватьНазначенияБезЗаказа. Поскольку ваше расширение «подменяет» актуальную схему своей старой или «пустой» версией, код конфигурации не находит требуемый вариант, что и приводит к критической ошибке.
Рассмотрим шаги для исправления:
ОстаткиИДоступностьТоваров.ОсновнаяСхемаКомпоновкиДанных внутри этого отчета в расширении.Проанализируем ситуацию: после удаления макета из расширения и перезапуска сеанса, система увидит все предопределенные варианты отчета, включая ИспользоватьНазначенияБезЗаказа, и ошибка исчезнет.
Даже если отчет начал открываться, вы можете заметить, что цифры в нем не соответствуют реальности. Начиная с версии 2.5.8, механизм отчета «Остатки и доступность» был серьезно переработан. Теперь он не собирает данные «на лету» из множества регистров накопления, а опирается на специальный регистр-агрегатор — РегистрСведений.РаспределениеЗапасов.
Этот регистр заполняется фоновыми заданиями. Если в базе есть некорректные заказы (например, загруженные из маркетплейсов без контроля обеспечения) или произошел сбой при обновлении ИБ, данные в этом регистре становятся недостоверными. Рассмотрим, как принудительно актуализировать эти данные.
Выясним причину расхождений: отчет может «врать», если записи в регистре РаспределениеЗапасов не были обновлены после проведения документов. Для исправления ситуации можно воспользоваться программным вызовом процедуры обновления всех запасов.
Пример кода для исправления данных:
Вы можете создать внешнюю обработку или воспользоваться консолью кода (в режиме «Технического специалиста»), чтобы выполнить следующую команду:
// Принудительное обновление всех данных в агрегирующем регистре
РегистрыСведений.РаспределениеЗапасов.ОбновитьВсеРаспределениеЗапасов();
Эта процедура инициирует полный пересчет остатков и резервов на основе первичных данных регистров ТоварыНаСкладах, ТоварыКОтгрузке и других. Помните, что на больших базах этот процесс может занять значительное время и создать нагрузку на сервер.
Посмотрим на проблему шире. Чтобы избежать подобных ошибок в будущем при обновлении на новые релизы ERP и платформы, рекомендуем придерживаться следующих правил:
Администрирование -> Обслуживание -> Обновление программы -> Результаты обновления. Убедитесь, что все дополнительные процедуры обработки данных (особенно связанные с распределением запасов) завершены успешно.Иногда типовой алгоритм распределения запасов может содержать логические ошибки при работе с нестандартными заказами. Если ОбновитьВсеРаспределениеЗапасов() не помогает, программисты прибегают к корректировке общего модуля РаспределениеЗапасов. Рассмотрим пример того, какие участки кода могут требовать внимания:
// В общем модуле РаспределениеЗапасов часто требуется анализ
// процедур ОбновлениеИБПоТовару и ОшибкиПроверкиКорректностиЗаписей.
// Если типовой механизм не учитывает специфику ваших заказов,
// проверку можно переориентировать напрямую на регистры остатков:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.В НаличииОстаток КАК Наличие,
| ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток КАК Резерв
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|... // далее сравнение с данными регистра РаспределениеЗапасов";
Однако, прежде чем вносить изменения в код, всегда пробуйте штатное удаление заимствованных объектов из расширения, так как в 90% случаев проблема КлючВарианта вызвана именно «зависшим» макетом в расширении, который не соответствует новой структуре метаданных ERP.
Подведем итог: если после обновления ERP 2.5.8 ваш отчет «Остатки и доступность» выдает ошибку варианта — первым делом очистите расширения от заимствованной СКД. Если же отчет работает, но показывает неверные остатки — выполните полную актуализацию регистра распределения запасов.