В данном материале мы рассмотрим распространённую проблему, когда общая команда 1С, например, "История изменений", отображается выборочно для пользователя: в одних документах она присутствует на панели навигации, а в других отсутствует, даже если для пользователя есть все необходимые права и документ присутствует в типе параметра команды. Мы разберем возможные причины такого поведения и предложим несколько решений, основываясь на опыте разработчиков и данных из типовых конфигураций.
Первым делом необходимо убедиться, что основные настройки видимости команды корректны. Откроем конфигуратор, чтобы детально изучить свойства общих команд, и перейдем к форме соответствующего документа, где команда не отображается.
ЗаказКлиента.ФормаДокумента).В рассматриваемом случае автор темы подтвердил, что галка "Видимость" стояла (сообщение 3), поэтому мы перейдем к более глубоким причинам.
Автор темы нашел решение, которое оказалось эффективным в его случае (сообщение 4): "Грохнул команду, создал заново - появилась везде."
Почему это сработало? Сообщение 5 предлагает очень логичное объяснение: видимость по ролям. Когда команда создается заново, ее настройки видимости по ролям (и, возможно, другие скрытые параметры, которые могли быть некорректно заданы или повреждены) устанавливаются в значения по умолчанию. Как правило, значения по умолчанию разрешают видимость для всех ролей или наиболее общих ролей, которые есть у большинства пользователей.
Если ранее для команды вручную или программно были изменены настройки видимости для определенных ролей, и у проблемного пользователя отсутствовала нужная роль, или его роль была исключена из списка видимых, то команда не отображалась. Повторное создание команды сбрасывает эти индивидуальные (иногда неочевидные) настройки видимости по ролям, устанавливая их в исходное, более широкое значение.
Поэтому, если другие простые способы не помогают, попробуйте этот радикальный метод. Однако, перед удалением команды, обязательно сделайте резервную копию конфигурации и запишите все ее параметры, чтобы можно было максимально точно восстановить их при повторном создании. Это особенно важно для общих команд, которые могут использоваться в различных местах конфигурации.
Очень часто видимость общих команд в 1С управляется функциональными опциями (ФО). Это мощный механизм, позволяющий гибко включать или отключать функциональность в зависимости от настроек системы или прав пользователя. В сообщениях 7, 8 и 9 очень подробно описан этот аспект, который является одной из наиболее частых причин избирательного отображения команд.
Функциональная опция — это объект конфигурации, который связывает некоторую функциональность (например, видимость команды или целого раздела интерфейса) с определенным условием. Это условие обычно хранится в регистре сведений, константе или определяется программно и может зависеть от различных факторов, таких как настройки учета, установленные флажки в параметрах программы или даже права текущего пользователя.
В нашем случае, команда "История изменений" может быть связана с функциональной опцией, отвечающей за версионирование объектов конфигурации.
НастройкиВерсионированияОбъектаКак указывает сообщение 8, видимость команды версионирования (в данном случае "История изменений") часто определяется функциональной опцией НастройкиВерсионированияОбъекта. Важно внимательно проверять название, чтобы не путать ее с похожими объектами, например, НастройкиВерсионированияОбъектов, которая может быть регистром или другой сущностью.
Эта функциональная опция хранит свое значение в ресурсе определенного регистра сведений: РегистрСведений.НастройкиВерсионированияОбъектов.Ресурс.Использовать.
Что это значит на практике? Система проверяет этот регистр для конкретного объекта, в контексте которого открывается форма (например, документа ЗаказКлиента). Если для данного типа объекта (Документ.ЗаказКлиента) в этом регистре сведений существует запись, где ресурс Использовать установлен в значение Истина, то функциональная опция разрешит показ команды "История изменений". Если же запись для данного типа объекта отсутствует, или значение Использовать установлено в Ложь, команда будет скрыта.
Это может объяснить, почему команда могла быть видна для документа ПеремещениеТоваров (поскольку для него в регистре НастройкиВерсионированияОбъектов использование версионирования установлено в Истина) и не видна для документа ЗаказКлиента (где использование версионирования могло быть отключено или не настроено).
ТипОбъектаКонфигурации влияет на видимостьСообщение 9 детально раскрывает механизм передачи параметров функциональным опциям и их влияние на видимость. В типовых конфигурациях 1С, особенно в управляемых формах, часто используется специальный параметр функциональной опции ТипОбъектаКонфигурации.
Когда форма документа открывается, система может динамически передавать этому параметру полное имя метаданных текущего объекта (например, Документ.ЗаказКлиента). Это позволяет функциональной опции определить контекст и специфически решить, нужно ли показывать команду для данного конкретного типа объекта или нет, основываясь на внутренних настройках или регистре сведений.
Ключевой момент, связанный с правами пользователя:
Если у пользователя есть роль "ПолныеПрава", то, как правило, в параметр ТипОбъектаКонфигурации корректно передается полное имя объекта метаданных. В этом случае функциональная опция сможет правильно проверить регистр НастройкиВерсионированияОбъектов для данного типа объекта и показать команду, если версионирование включено.
Однако, если у пользователя нет роли "ПолныеПрава", то в некоторых типовых реализациях (как показано в примере кода из сообщения 9) в параметр ТипОбъектаКонфигурации может передаваться значение Неопределено. В таком случае функциональная опция не сможет точно определить, для какого конкретного объекта нужно проверять настройку версионирования, и по умолчанию может принять решение о скрытии команды, так как нет явного указания на ее показ.
Рассмотрим пример кода из типовой конфигурации (сообщение 9), который иллюстрирует эту логику в процедуре ПриСозданииНаСервере формы. Этот код выполняется на сервере при открытии формы:
Процедура ПриСозданииНаСервере(Форма) Экспорт
Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь.Имя) ИЛИ РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда
ИмяФормыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".");
ПолноеИмяМетаданных = ИмяФормыМассив[0] + "." + ИмяФормыМассив[1];
Иначе
ПолноеИмяМетаданных = Неопределено;
КонецЕсли;
Форма.УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ТипОбъектаКонфигурации", ПолноеИмяМетаданных));
КонецПроцедуры
Из этого кода видно, что без полных прав параметр ТипОбъектаКонфигурации становится Неопределено. Если ваша функциональная опция НастройкиВерсионированияОбъекта не настроена обрабатывать Неопределено как условие для показа команды, то это приведет к скрытию. Если это ваш случай, вам потребуется либо предоставить пользователю роль "ПолныеПрава" (что не всегда является безопасным или желательным решением), либо изменить логику в коде, чтобы параметр передавался корректно и для пользователей без полных прав, либо включить версионирование для нужного типа объекта в регистре НастройкиВерсионированияОбъектов через соответствующий интерфейс (например, раздел "НСИ и администрирование" -> "Администрирование" -> "Общие настройки" -> "Версионирование объектов").
Важный совет: Проверьте регистр сведений НастройкиВерсионированияОбъектов. Убедитесь, что для ЗаказКлиента там установлена галочка Использовать в значении Истина. Это можно сделать через стандартный интерфейс конфигурации, а также проанализировав профили доступа для пользователей.
Помимо вышеперечисленных, существует ряд других факторов, которые могут влиять на видимость команд и которые стоит проверить, если основные методы не принесли результата.
Некорректное отображение элементов интерфейса часто бывает связано с поврежденным или устаревшим кэшем пользователя. Система 1С хранит много пользовательских настроек и данных о конфигурации в локальных файлах.
<username> на имя пользователя Windows):C:\Users\<username>\AppData\Roaming\1C\1CE\ (для тонкого клиента)C:\Users\<username>\AppData\Local\1C\1CE\ (для толстого клиента)C:\Users\<username>\AppData\Roaming\1C\1Cv8\ (общие настройки, могут содержать кэш настроек интерфейса)a1b2c3d4-e5f6-7890-1234-567890abcdef).Пользователь мог случайно или намеренно скрыть команду для себя. В режиме "Предприятие" редактор форм позволяет изменять состав команд и свойства элементов в реальном времени.
ЗаказКлиента) под учетной записью проблемного пользователя.Хотя автор темы и указал, что дело не в правах прямо, в сложных конфигурациях RLS (Row Level Security) может косвенно влиять на видимость команд. Если видимость команды зависит от наличия у пользователя доступа к определенным данным, а RLS скрывает эти данные в одном документе (например, ЗаказКлиента), но не в другом (ПеремещениеТоваров), это может быть причиной. Мы рекомендуем проанализировать профили доступа и настройки RLS для данного пользователя, чтобы исключить влияние динамического определения прав, основанного на данных.
После изменений в конфигураторе (особенно при работе с общими командами, функциональными опциями или изменениями метаданных) всегда важно убедиться, что конфигурация базы данных полностью актуализирована. Иногда могут возникать расхождения между конфигурацией и КБД, что приводит к непредсказуемому поведению элементов интерфейса.
Команда может быть привязана к нескольким функциональным опциям одновременно. Если хоть одна из них возвращает Ложь (то есть, условие ее показа не выполняется), команда будет скрыта, даже если остальные функциональные опции разрешают ее показ. Внимательно проверьте все функциональные опции, которые могут быть связаны с данной командой, и убедитесь, что все условия для их показа выполняются.
Для самого глубокого и точного анализа проблемы рекомендуем использовать отладчик 1С. Это позволит пошагово проследить логику работы системы и точно определить, на каком этапе принимается решение о скрытии команды.
ПриСозданииНаСервере форм проблемных документов (как показано в примере выше).ЗаказКлиента) и проанализируйте значения переменных, условия в операторах Если и логику выполнения кода. Это поможет точно определить, почему условие видимости команды не выполняется.Проблема с избирательным отображением общих команд в 1С может иметь множество причин, от простых настроек интерфейса до сложной логики функциональных опций и прав доступа. Мы рекомендуем начинать с базовых проверок в конфигураторе, затем переходить к анализу функциональных опций и регистрам, управляющим ими. В случае если проблема остается, рассмотрите более радикальные меры, такие как удаление и повторное создание команды, или очистка кэша пользователя. Отладка всегда поможет выяснить точную причину, если другие методы не привели к успеху, давая возможность точечно исправить поведение системы.