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