Разработка интерфейса в среде 1С:Предприятие 8.3 на управляемых формах иногда преподносит сюрпризы: мы добавляем команду, создаем кнопку в конфигураторе, видим её на макете формы, но после запуска отладки в пользовательском режиме кнопка бесследно исчезает. Разберем детально, почему это происходит и как вернуть элемент управления на законное место.
Прежде чем приступать к глубокому анализу кода, убедимся в самом очевидном. Проанализируем состояние значка конфигурации. Если синий цилиндр (символ базы данных) на панели инструментов активен, значит, изменения внесены в конфигурацию, но не применены к базе данных. Нажмем F7 или выберем пункт меню Конфигурация — Обновить конфигурацию базы данных. Проверим также, не запущено ли несколько сеансов под разными пользователями, что иногда мешает корректному обновлению динамических изменений.
Это самая частая причина «пропажи» элементов. Платформа 1С запоминает индивидуальные настройки формы для каждого пользователя. Если вы или пользователь ранее открывали эту форму и использовали команду Изменить форму, система сохранила это состояние. Новые кнопки, добавленные позже в конфигураторе, могут просто не попасть в этот сохраненный «снимок» интерфейса.
Выясним, как это исправить. В режиме пользователя в правом верхнем углу окна формы нажмем кнопку Ещё, выберем пункт Изменить форму. В открывшемся окне нажмем кнопку Установить стандартные настройки. Это заставит платформу игнорировать старый кэш настроек и отобразить форму именно так, как она спроектирована в конфигураторе.
Рассмотрим свойства самой кнопки и команды. В 1С существует понятие Пользовательской видимости, которая настраивается в разрезе ролей. Если у новой кнопки снята галочка видимости для конкретной роли, под которой вы авторизованы, кнопка не отобразится.
Выполним следующие действия:
Проанализируем связь элемента формы с метаданными. Если кнопка или команда привязана к Функциональной опции (ФО), её отображение напрямую зависит от значения этой опции в базе данных. Если константа или реквизит, на котором строится ФО, имеет значение Ложь, платформа принудительно скроет кнопку, даже если в коде прописано Видимость = Истина.
Проверьте свойство Функциональные опции у команды и у самой кнопки. Если там указана опция, убедитесь, что в пользовательском интерфейсе (обычно в разделе настроек программы) соответствующая опция включена.
Посмотрим на процедуры ПриСозданииНаСервере или ПриОткрытии. Часто в типовых конфигурациях или сложных самописных решениях разработчики управляют интерфейсом программно. Код может скрывать группы элементов или отдельные кнопки в зависимости от условий (статус документа, права текущего пользователя, заполненность реквизитов).
Попробуем найти в модуле формы упоминание нашей кнопки. Если кнопка называется КнопкаВернуть, выполним глобальный поиск по тексту модуля (Ctrl+F). Разберем пример кода, который может блокировать отображение:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Программное скрытие кнопки в зависимости от статуса
Если Объект.Статус = Перечисления.СтатусыДокументов.Закрыт Тогда
Элементы.КнопкаВернуть.Видимость = Ложь;
КонецЕсли;
// Или скрытие по ролям программным способом
Если Не РольДоступна("ПолныеПрава") Тогда
Элементы.КнопкаВернуть.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Для диагностики установим точку останова в конце процедуры ПриСозданииНаСервере и проверим значение свойства Элементы.КнопкаВернуть.Видимость в табло отладчика.
Если кнопка связана не с командой формы, а с Общей командой или командой объекта метаданных, необходимо проверить права доступа. Если у пользователя в его роли нет права Просмотр или Выполнение на саму команду, кнопка, к которой она привязана, будет автоматически скрыта платформой. Проанализируем дерево метаданных и убедимся, что в нужных ролях проставлены соответствующие флаги доступа.
Выясним, куда именно была добавлена кнопка. Если она находится в командной панели, у которой установлено свойство Автозаполнение = Истина, платформа самостоятельно управляет составом кнопок. Ваша кнопка может быть вытеснена в подменю Ещё.
Проверьте свойство кнопки Только в Еще. Если там установлено значение Да, на основной панели вы её не увидите. Также обратите внимание на свойство Вариант управления видимостью у группы, в которую входит кнопка — иногда родительские элементы скрывают своих «детей» из-за настроек компоновки.
Если ваша конфигурация находится на поддержке и вы используете расширения, проанализируйте, нет ли в расширении этой же формы. Если форма заимствована в расширение, то изменения, вносимые в основной конфигурации, могут не отображаться, так как форма из расширения имеет приоритет. В этом случае кнопку нужно добавлять непосредственно в форму внутри расширения.
В редких случаях проблема кроется в «залипшем» кэше платформы. Попробуем удалить базу из списка в стартере 1С и добавить её заново — это самый простой способ очистить локальный кэш. Также убедитесь, что обработчик команды описан корректно. Если процедура команды помечена только как &НаСервере, но вызывается с клиента без соответствующей клиентской обертки (или наоборот), платформа может не отрисовать кнопку, так как контекст исполнения недоступен.
Резюме: Если кнопка видна в конфигураторе, но отсутствует в режиме пользователя, начните со сброса настроек формы (Установить стандартные настройки) и проверки Пользовательской видимости в свойствах. В 90% случаев решение кроется именно в этих двух пунктах.