Как исправить ошибку «Параметр не найден» в динамическом списке расширения после обновления УТ 11

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

При обновлении типовых конфигураций, таких как 1С:Управление торговлей 11, разработчики часто сталкиваются с ситуацией, когда расширения, стабильно работавшие ранее, начинают выдавать критические ошибки. Одной из самых коварных является ошибка при вызове метода УстановитьЗначениеПараметра для динамического списка. Ситуация осложняется тем, что стандартная очистка кэша и удаление настроек пользователя через интерфейс «1С:Предприятие» часто не приносят результата.

В этой статье мы подробно разберем, почему возникает ошибка Параметр с указанным именем не найден, где «прячутся» настройки формы и как правильно обновить расширение, чтобы восстановить работоспособность системы. Рассмотрим ситуацию на примере формы списка справочника Номенклатура.

Проанализируем суть проблемы и технический контекст

Типичный сценарий возникновения ошибки выглядит так: после обновления конфигурации (например, на релиз 11.4.9.70) при открытии формы списка номенклатуры система выдает следующее сообщение:


{НоменклатураРасширенныйПремиум Справочник.Номенклатура.Форма.ФормаСписка.Форма(1010)}: 
Ошибка при вызове метода контекста (УстановитьЗначениеПараметра) 
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ОтборСклад", МассивСкладов); 
по причине: Параметр с указанным именем не найден

Проблема проявляется избирательно: у новых пользователей все работает корректно, а у тех, кто ранее использовал команду «Изменить форму», расширение «ломается». Это прямо указывает на то, что старые настройки внешнего вида формы конфликтуют с обновленной структурой данных в расширении.

Способ 1. Синхронизация формы расширения с основной конфигурацией

Первым делом нам необходимо выяснить, не изменился ли текст запроса или состав параметров в основной конфигурации. Когда мы заимствуем форму в расширение, 1С делает «слепок» метаданных на момент заимствования. Если в обновлении УТ разработчики 1С изменили запрос динамического списка Список (или СписокНоменклатура), ваше расширение может продолжать использовать старый текст запроса, где параметр ОтборСклад отсутствует или называется иначе.

Выполним следующие шаги для обновления формы:

  1. Откроем конфигуратор и найдем наше расширение.
  2. Перейдем к заимствованной форме (например, ФормаСписка справочника Номенклатура).
  3. Нажмем правой кнопкой мыши на форму и выберем пункт «Обновить из конфигурации». Если этот метод недоступен или не помогает, рекомендуется полностью удалить форму из расширения и заимствовать её заново.
  4. После повторного заимствования необходимо аккуратно перенести программный код и добавленные элементы формы из вашей резервной копии расширения.

Важный нюанс: Проверьте свойство Произвольный запрос у динамического списка. Если оно включено, убедитесь, что в тексте запроса действительно присутствует условие с параметром &ОтборСклад. Также проверьте галочку Использовать всегда в настройках параметров схемы компоновки данных динамического списка. Если параметр устанавливается программно, но не используется в визуальных настройках, платформа может «оптимизировать» запрос и удалить его из доступных.

Способ 2. Поиск и удаление «Иглы Кащея» в настройках пользователя

Если обновление формы не помогло, значит, проблема кроется в глубоком кэшировании настроек формы в системных таблицах базы данных. Участники обсуждения справедливо замечают, что стандартное удаление через «Настройки пользователей» в разделе НСИ и администрирование не всегда затрагивает нужные области.

Попробуем применить метод глубокой очистки настроек:

  1. Найдем пользователя, у которого возникает ошибка, в справочнике Пользователи.
  2. В карточке пользователя нажмем на кнопку (или ссылку в меню «Еще») «Настройки пользователя».
  3. Перейдем на закладку «Персональные настройки» (в некоторых версиях БСП это может называться «Настройки внешнего вида»).
  4. Найдем записи, относящиеся к форме списка номенклатуры, и полностью удалим их. Именно здесь часто хранится внутренний кэш параметров динамического списка, который «перекрывает» программные установки расширения.

Проанализируем ситуацию: почему это происходит? В Библиотеке стандартных подсистем (БСП), на которой базируется УТ 11, запросы динамических списков часто модифицируются программно «на лету» в процедуре ПриСозданииНаСервере. Если пользователь сохранил свой вариант формы, система пытается наложить старую структуру колонок и отборов на новый программный запрос, что приводит к исчезновению параметров.

Способ 3. Очистка системного хранилища через консоль администратора

Бывают случаи, когда настройки «застревают» в ХранилищеСистемныхНастроек. Если визуальные методы очистки не помогают, воспользуемся программным способом или специальной обработкой «Консоль администратора» (входит в состав инструментов разработчика).

Рассмотрим, как это работает. Каждая форма в 1С имеет уникальный ключ в хранилище настроек. При использовании расширения этот ключ может содержать префикс имени расширения. Нам нужно очистить все записи в таблице SystemSettingsStorage, где ключом объекта является путь к проблемной форме. После этого при первом открытии форма будет инициализирована «с чистого листа» по правилам расширения.

Способ 4. Защитное программирование: проверка существования параметра

Чтобы пользователи не видели критическую ошибку (так называемый «вылет» системы), мы можем применить метод безопасной установки параметров. Это не решит проблему отсутствия данных, если параметр действительно важен, но позволит форме открыться.

Добавим проверку в код расширения:


// Проверим, существует ли параметр в доступных параметрах списка
Если СписокНоменклатура.Параметры.ДоступныеПараметры.Элементы.Найти("ОтборСклад") <> Неопределено Тогда
    СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ОтборСклад", МассивСкладов);
Иначе
    // Параметр не найден в структуре запроса, запишем это в журнал регистрации для отладки
    ЗаписьЖурналаРегистрации("Расширение.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, 
        "Параметр 'ОтборСклад' не найден в динамическом списке. Проверьте настройки формы.");
КонецЕсли;

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

Подведем итоги

Разберем краткий чек-лист действий при возникновении ошибки Параметр не найден в расширении:

Следование этим шагам позволит вам эффективно справляться с последствиями обновлений типовых решений и поддерживать стабильную работу ваших доработок в расширениях.

← На главную