При переходе на новые версии платформы 1С:Предприятие 8.3 или при переносе данных в новые информационные базы пользователи часто сталкиваются с неприятной ошибкой: «Недопустимое имя панели». Чаще всего это происходит в момент записи нового пользователя, если установлена галочка «Вход в программу разрешен». Эта проблема характерна для современных конфигураций на базе управляемых форм, таких как 1С:Комплексная автоматизация 2, 1С:ERP, Управление торговлей 11 и Управление нашей фирмой.
В этой статье мы подробно разберем, почему возникает данная ошибка, как она связана с архитектурой интерфейса «Такси» и какие существуют способы её решения — от простых административных действий до программной правки кода через расширения.
Проанализируем техническую сторону вопроса. Корень проблемы кроется в эволюции платформы 1С. Начиная с версии 8.3.15, разработчики компании «1С» существенно переработали механизмы отображения интерфейса «Такси». До этого момента в системе существовал единый программный объект — ПанельИнструментов. Однако в более свежих версиях платформы этот объект был упразднен и разделен на три самостоятельные панели:
Ошибка возникает тогда, когда конфигурация (её программный код) пытается обратиться к стационарному имени ПанельИнструментов, которое новая платформа больше не поддерживает. Если ваша конфигурация (например, старый релиз КА 2.4) еще «не знает» о разделении панелей, а платформа уже обновлена до версии 8.3.15, 8.3.18 или выше, возникает конфликт имен.
Рассмотрим самый правильный и безопасный метод. Поскольку ошибка вызвана устаревшим кодом в Библиотеке стандартных подсистем (БСП), которая встроена в вашу программу, наиболее логичным решением будет обновление самой конфигурации до актуального релиза.
Разработчики 1С уже исправили это поведение в выпусках Комплексной автоматизации начиная с версии 2.4.13 и выше. При обновлении программный код модулей будет приведен в соответствие с требованиями актуальной платформы. Если у вас есть возможность провести обновление — это решит проблему раз и навсегда для всех пользователей.
Если по каким-то причинам вы не можете обновить конфигурацию прямо сейчас (например, она сильно доработана), мы можем применить «хирургическое» вмешательство с помощью механизма расширений. Это позволит нам не снимать основную конфигурацию с поддержки.
Разберем по шагам процесс исправления в общем модуле ПользователиПереопределяемый. Ошибка обычно локализована в процедуре ПриУстановкеНачальныхНастроек, где система пытается программно сформировать состав панелей для нового пользователя.
Создадим новое расширение и добавим в него процедуру со следующим кодом:
&Вместо("ПриУстановкеНачальныхНастроек")
Процедура ПриУстановкеНачальныхНастроек2(НачальныеНастройки) Экспорт
НачальныеНастройки.НастройкиИнтерфейса.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.КартинкаИТекст;
НачальныеНастройки.НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Такси;
Если НачальныеНастройки.НастройкиТакси <> Неопределено Тогда
НастройкиСостава = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения;
ГруппаЛево = Новый ГруппаНастройкиСоставаИнтерфейсаКлиентскогоПриложения;
// В следующей строке и была ошибка: удаляем или комментируем обращение к "ПанельИнструментов"
// ГруппаЛево.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельИнструментов"));
// Вместо нее добавляем стандартные панели, которые понимает новая платформа
ГруппаЛево.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельРазделов"));
ГруппаЛево.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельОткрытых"));
НастройкиСостава.Лево.Добавить(ГруппаЛево);
НачальныеНастройки.НастройкиТакси.УстановитьСостав(НастройкиСостава);
КонецЕсли;
КонецПроцедуры
Использование аннотации &Вместо позволяет полностью перехватить управление и исключить вызов ошибочного кода, который обращается к несуществующей ПанелиИнструментов.
Иногда ошибка проявляется выборочно или сохраняется из-за «мусора» в системных таблицах базы данных. Посмотрим, как можно решить проблему административными инструментами без написания кода.
Попробуем выполнить очистку настроек интерфейса для проблемных пользователей:
Настройки рабочего стола и Настройки интерфейса.После этой операции при первом входе пользователя система будет вынуждена сформировать интерфейс заново, опираясь на текущие алгоритмы платформы, что часто помогает избежать ошибки Недопустимое имя панели.
Как показывает практика, иногда ошибка исчезает после выполнения технического обслуживания информационной базы. Проанализируем ситуацию: при записи пользователя 1С обращается к системной таблице SystemSettings. Если в ней содержатся некорректные данные, оставшиеся от предыдущих версий или после переноса остатков, платформа может выдавать ошибку.
Попробуем выполнить следующие действия:
.dt)..dt) в новую базу.В процессе загрузки 1С пересоздает индексы и внутренние структуры таблиц. Этот метод часто срабатывает как «магическое» средство, так как принудительно очищает кэш и исправляет мелкие несоответствия в системных настройках, которые не видны из пользовательского интерфейса.
Рассмотрим важный нюанс: даже если в свойствах вашей конфигурации установлен Режим совместимости с версией 8.3.12, фактическое выполнение кода происходит на платформе 8.3.18 (или другой установленной у вас). Несмотря на режим совместимости, механизмы отрисовки графического интерфейса «Такси» все равно могут требовать соблюдения новых правил именования панелей. Поэтому не полагайтесь только на настройки совместимости — используйте либо обновление конфигурации, либо программное расширение, описанное выше.
Резюме: Если вы столкнулись с ошибкой «Недопустимое имя панели», в первую очередь проверьте возможность обновления конфигурации. Если обновление невозможно, используйте расширение для корректировки общего модуля ПользователиПереопределяемый, заменив устаревшую ПанельИнструментов на актуальные ПанельРазделов и ПанельОткрытых.