При разработке интерфейсов на обычных формах в 1С разработчики часто сталкиваются с задачей замены стандартного контекстного меню таблицы значений на пользовательское. Однако нередко возникает ситуация: флаг автоматического меню снят, создана и подвязана своя командная панель, но при нажатии правой кнопкой мыши по табличному полю все равно открывается стандартный список команд. Проанализируем, почему так происходит, каков правильный порядок настройки и как устранить возможные технические сбои.
Чтобы закрепить за табличным полем произвольное контекстное меню, разберем последовательность действий, которую необходимо выполнить в палитре свойств элементов формы:
КоманднаяПанель. В ее свойствах укажем параметр ИсточникДействий — выберем в нем наше табличное поле. Это необходимо для того, чтобы стандартные команды (например, добавление или удаление строк) вызывались корректно.Автозаполнение (Autofill).АвтоКонтекстноеМеню.КонтекстноеМеню табличного поля выберем созданную ранее командную панель.Если после выполнения всех настроек на экране продолжает появляться стандартное меню, проанализируем основные технические причины этой проблемы:
АвтоКонтекстноеМеню или привязана своя командная панель, клик по ячейке этой колонки вызовет именно меню колонки, а не общее меню таблицы.Автозаполнение, платформа автоматически сформирует в ней полный стандартный набор кнопок таблицы. Визуально такое меню будет выглядеть так, будто настройки вовсе не применились.ИсточникДействий не указано табличное поле, команды станут неактивными (серыми).В случаях, когда все свойства выставлены верно, но поведение формы не меняется, причиной является застрявший кэш конфигурации или сеанса. Выясним, как это исправить:
/ClearCache.AppData\Local\1C\1Cv8 и AppData\Roaming\1C\1Cv8).Рассмотрим кратко отличия данного механизма при работе с управляемым интерфейсом (управляемыми формами):
В управляемых формах логика отличается от обычных форм. У элемента ТаблицаФормы в дереве элементов уже существует подчиненная системная группа КонтекстноеМеню. Чтобы полностью изменить его состав, достаточно отключить свойство Автозаполнение у этой группы и поместить внутрь нее пользовательские команды или кнопки.
Если требуется менять доступность или видимость пунктов контекстного меню динамически в зависимости от выделенной строки, следует использовать обработчики событий ПриАктивизацииСтроки или ПриАктивизацииЯчейки.