После обновления конфигурации 1С:Розница 2.3 до версии 2.3.9.42 многие пользователи сталкиваются с критической ошибкой при попытке поиска дисконтной карты по номеру телефона в режиме рабочего места кассира (РМК). Система выдает сообщение: "{(43, 2)}: Не задано значение параметра "ПустойВладелец" >&ПустойВладелец КАК ВладелецКарты". Эта проблема особенно часто проявляется в узлах распределенной информационной базы (РИБ), тогда как в центральном узле функционал может работать корректно. Давайте подробно разберем, почему возникает эта ошибка и какие шаги можно предпринять для ее устранения.
Суть проблемы:
Сообщение об ошибке прямо указывает на то, что в тексте запроса, который выполняется для поиска дисконтной карты, используется параметр с именем ПустойВладелец, но перед выполнением запроса этот параметр не был инициализирован, то есть ему не было присвоено никакое значение. Это говорит о том, что в новой версии конфигурации 1С:Розница изменилась логика работы с дисконтными картами, и теперь система более требовательна к наличию или корректной инициализации данного параметра, особенно при работе с данными о владельцах карт (возможно, неперсонифицированных или обезличенных).
Стек вызовов, приведенный в сообщении об ошибке, указывает на модуль РозничныеПродажиСервер и процедуры в обработке РМКУправляемыйРежим, что подтверждает связь проблемы именно с функционалом поиска карт в РМК.
Если ошибка проявляется только в узлах РИБ, а в центральной базе все работает исправно, это является сильным индикатором проблем с обменом данными или их рассогласованностью. Обновление конфигурации могло внести изменения, которые требуют новых данных или корректного заполнения существующих, а эти изменения могли не полностью или некорректно синхронизироваться в подчиненный узел.
Контрагенты или ФизическиеЛица.Одним из вероятных сценариев является то, что в вашей базе данных имеются дисконтные карты, у которых реквизит "Владелец карты" не заполнен. Если до обновления система позволяла такие ситуации и корректно их обрабатывала, то в новой версии логика могла измениться, требуя обязательного заполнения этого поля или явной обработки "пустого владельца".
Контрагенты или ФизическиеЛица элемент с названием "Розничный покупатель" или "Неизвестный владелец" и установить его для всех карт без владельца.Ошибки, возникающие после обновления на конкретный релиз, — явление достаточно распространенное. Вполне возможно, что проблема с параметром ПустойВладелец была оперативно выявлена разработчиками 1С и исправлена в одном из последующих релизов конфигурации "Розница".
Если обновление на новый релиз в данный момент невозможно (например, из-за длительности тестирования или других организационных причин), а работа кассы должна быть восстановлена немедленно, то создание простого расширения конфигурации является эффективным и безопасным выходом. Расширения позволяют дорабатывать функционал без изменения основной конфигурации, сохраняя ее на поддержке.
РозничныеПродажиСервер, так как именно в нем, согласно стеку ошибки, происходит сбой в строке 3760, где выполняется запрос.НайтиКарту).ЗапросПоиска.Выполнить или ЗапросПоиска.Выполнить.Выбрать), мы должны принудительно установить значение для параметра ПустойВладелец. Например, мы можем установить ему значение пустой ссылки соответствующего справочника или Неопределено, в зависимости от того, какой тип данных ожидается в запросе.Пример концептуального изменения кода в расширении (без точной строки и имени функции, предполагаем):
// В расширении, в заимствованном модуле РозничныеПродажиСервер
// Переопределяем функцию/процедуру, которая вызывает ошибку
Функция НайтиКарту(ПараметрыПоиска, ДополнительныеПараметры) Экспорт
ЗапросПоиска = Новый Запрос;
// ... Ваш существующий код запроса ...
// Добавляем установку параметра ПустойВладелец
Если НЕ ЗапросПоиска.Параметры.Свойство("ПустойВладелец") Тогда
// Проверяем, существует ли параметр перед добавлением
// Если параметр должен быть ссылкой на Контрагента
ЗапросПоиска.УстановитьПараметр("ПустойВладелец", Справочники.Контрагенты.ПустаяСсылка());
// Или если параметр может быть Неопределено
// ЗапросПоиска.УстановитьПараметр("ПустойВладелец", Неопределено);
КонецЕсли;
Выборка = ЗапросПоиска.Выполнить().Выбрать();
// ... Остальной код функции ...
Возврат Выборка;
КонецФункции
Важно: Для точного определения места и способа установки параметра потребуется отладка конфигурации и анализ кода в месте возникновения ошибки.
Это радикальный, но часто самый действенный метод решения проблем с рассогласованностью данных и метаданных в распределенных информационных базах. Если мы абсолютно уверены, что в центральной базе все данные и конфигурация находятся в корректном состоянии, мы можем пересоздать проблемный узел РИБ.
Риски: Эту операцию должен выполнять опытный специалист, так как существует риск потери данных, которые были созданы в узле РИБ и еще не успели выгрузиться в центральную базу (например, чеки за текущую смену, непереданные оплаты). Мы должны убедиться, что все критически важные данные из удаленного узла выгружены в центр перед его пересозданием.
Мы рассмотрели несколько подходов к решению проблемы "Не задано значение параметра 'ПустойВладелец'". Начинать следует с проверки данных и обновления конфигурации. Если эти методы не помогают или требуют времени, расширение и пересоздание РИБ могут стать эффективными альтернативами. Помните, что всегда важно действовать осторожно и выполнять резервное копирование перед любыми серьезными изменениями в конфигурации или данных.