1с отключить контекстное меню программно
Как управлять расположением команд в командной панели формы?
В 1С Предприятии 8.2 внешний вид формы определяется расположением и свойствами элементов в дереве элементов формы. На основе этих свойств система сама "рисует" форму, в частности, командную панель формы.
Любая группа кнопок (командная панель, подменю, группа кнопок, контекстное меню) заполняется по одинаковым правилам:
- сначала идут кнопки, предоставляемые источником команд, с которым связана данная группа;
- затем идёт фрагмент командного интерфейса, если источник команд подразумевает его включение;
- затем идут пользовательские команды, добавленные в данную группу;
- затем идёт подменю Все действия (только для командной панели);
- и в конце идёт кнопка Справка в том случае если она была предоставлена источником команд.
Рассмотрим самый простой вариант, когда в форме элемента справочника созданы две команды и помещены в командную панель формы.
В результате в режиме 1С:Предприятия расположение кнопок, соответствующих созданным командам Команда1 , Команда2 соответствует описанному выше алгоритму: в командной панели формы и в подменю Все действия сначала расположены команды, предоставляемые источником команд - формой элемента справочника (например, Записать и закрыть, Записать и др.), затем команды, созданные разработчиком ( Команда1 , Команда2 ), и затем команда Справка .
Однако у разработчика есть несколько способов существенно вмешаться в этот процесс и повысить удобочитаемость командной панели, контекстного меню и т.п. Какие же есть возможности изменить состав и порядок кнопок?
1. Можно отделить команды, созданные разработчиком, от других команд разделителем.
Для этого нужно создать в командной панели группу вида Группа кнопок и перенести в нее эти команды.
2. Можно расположить какие-то команды разработчика в начале группы команд.
Для этого нужно отменить у группы источник команд (для контекстного меню и автоматической командной панели нужно выключить флажок Автозаполнение ), затем добавить в группу свою кнопку, после нее добавить группу вида Группа кнопок и у этой группы установить источник команд - например, Форма .
В результате в режиме 1С:Предприятия командная панель формы и подменю Все действия будут иметь следующий вид.
3. Можно переместить автоматически заполняемые кнопки.
Для этого нужно поместить в дерево командной панели или контекстного меню кнопку, связанную с той же командой, которая заполняется из источника данных (например, Удалить , Скопировать и др.). Автоматически такая кнопка не будет размещена среди стандартных команд и, таким образом, можно переместить стандартную команду в другое место.
В результате в режиме 1С:Предприятия командная панель формы и подменю Все действия будут иметь следующий вид.
Чтобы пиктограмма команды Удалить отображалась в командной панели формы, нужно установить свойство этой кнопки ТолькоВоВсехДействиях в значение Нет .
4. Можно изменить порядок и видимость кнопок фрагмента командного интерфейса, предоставляемого источником команд Форма .
Например, у объекта конфигурации справочник Контрагенты существует команда Команда3 . Эта команда имеет группу размещения команд - Командная панель формы.Важное и тип параметра команды - СправочникСсылка.Контрагенты .
После установки этих свойств, Команда3 становится доступна закладке Командный интерфейс формы объекта, тип которого имеет команда и располагается в командной панели формы после стандартных команд, поставляемых формой элемента справочника.
В результате в режиме 1С:Предприятия командная панель формы и подменю Все действия будут иметь следующий вид.
Команда3 входит в группу команд фрагмента командного интерфейса. Если Вас не устраивает место, в которое вставляется фрагмент командного интерфейса, можно поместить в командную панель группу вида Группа кнопок и у этой группы установить источник команд - Глобальные команды командной панели формы .
В этом случае автоматическое размещение фрагмента будет отменено (по аналогии со стандартной кнопкой, добавленной вручную), и фрагмент командного интерфейса будет выводиться в новой группе.
Что же касается содержимого фрагмента командного интерфейса, то его редактирование доступно на закладке Командный интерфейс редактора формы.
5. Можно включить/выключить видимость стандартных команд, предоставляемых источником команд, например - Форма .
Для этого нужно открыть окно Состав команд в палитре свойств формы.
В заключение заметим, что возможности изменить порядок кнопок, предоставляемых источником команд, нет. Если такая необходимость появится, нужно отменить источник у группы команд, и полностью заполнить группу вручную.
Есть программно созданная таблица значений. Надо Изменить в ней контекстное меню. От команд добавить, скопировать, удалить, переместить вверх/вниз избавилась так: Остались Изменить, ВыделитьВсе, Копировать. Как их убрать, если программно недоступно свойство контекстного меню Автозаполнение или СоставКоманд (этих пунктов просто нет)? Добавляю свои команды так: Пункт1=Элементы.Добавить("ТЗКонтекстноеМенюПункт1", Тип("КнопкаФормы"), Элементы.ТабЗН.КонтекстноеМеню); Пункт2.ИмяКоманды="Забронировать"; Эти 2 команды созданы в конфигураторе и они после добавления доступны через Элементы.ТабЗН.КонтекстноеМеню.ПодчиненныеЭлементы А вот стандартных команд там нет. Удалить их, наверное, нельзя, но убрать из видимости пользователя через свойство Видимость должно быть осуществимо. Но как их найти чтоб обратиться вообще? Для созданной на форме ТЗ с именем Реквизит1 такой код ничего не даёт (Но зато в подчинённых элементах есть все кнопки): Гуглила это. Проблема есть - решений нет. На форуме 2 года назад была такая ветка, но она осталась без решения. Может, сдвинулся прогресс уже.
Эх лентяй. я уж на что лентяй и то фотку нашел за пару минут. Да есть такая трабла, надо бы ее в саппорт 1С кинуть. Сча решается только через создание элемента в конфигураторе и через снятие галочки "автозаполнение"
Таблицу создай не программно (пустую без колонок), а вот заполняй ее уже программно.
+ если бы эти автоэлементы были через обход коллекции доступны чтобы Видимость=Ложь сделать, так нету их тама
это костыли 1с. и их тьма. то нажатие кнопки. только доступно для групп кнопок. если просто кнопки то фиг там. то тут. то там. зато рюшки штампуют на ура.
Я не бот) Ладно бы тема была по ассемблеру какому. Там редко верят если видят в профиле жен - 20 лет. А у нас на курсе 3м был ассемблер! Интересно, конечно, где, но не надо открывать это знание для всех. И, может, там не я) А по поводу отсутствия решения печаль, конечно. Но авось кто знает тайну постижения этой силы)
ха фотку в фейсбуке поменяла с прошлого раза. вряд ли есть другая Алёна из БрГУ :)
Всегда знала, что ФС - зло, но надо было завести по делу. Вроде универ свой не палила) У нас на факультете девочки в группах в большом количестве не содержатся (0-5 обычно). Но на потоке целых 2 Алёны. Ситуация на 5м курсе: Сидит весь курс, люди с параллельного потока не очень хорошо друг друга знают. Передаю записку другой девочке Алёне с надписью "Алёне НомерГруппы". Парень с параллельного нашему потока где-то в середине цепочки передачи передаёт записку обратно мне, т.к. знает меня как Алёна. Ему говорят: "Не этой Алёне". Он: "У нас что, две Алёны?" Так что есть ещё Алёны в нашем универе моего возраста)
Об этом я не подумала. Прирождённый следопыт, что ещё сказать)
Так вот откуда про с++ узнали. Нарыла вопросы по курсачу с первого курса. Аж вздрогнула как вспомнила этот кошмар(
Как и в любом другом Windows приложении, в 1С контекстное меню вызывается щелчком правой кнопки мышки на элементе формы. Состав меню и наборы выполняемых команд могут редактироваться:
- Вручную, созданием соответствующего списка и определением набор процедур;
- Автоматически.
Принципам работы с контекстным меню и посвящена наша статья. Мы постараемся рассмотреть вопросы включения, отключения этого элемента на управляемых и обычных формах, а также принципы программного создания списка команд, вызываемых правой кнопкой мышки.
Автоматическое создание контекстного меню
Включение и отключение контекстного меню любого элемента формы происходит непосредственно в конфигураторе. При этом следует иметь ввиду, что для управляемых и для обычных форм возможность выполнения этого действия реализована по-разному.
Допустим, условие задачи предполагает наличие контекстного меню у элемента формы «ТабличныйДокумент». Решим эту задачу для обычной формы внешней обработки.
Выключение галочки «АвтоКонтекстноеМеню» позволяет разработчику создать меню, состоящее только из собственных пунктов. Если же флажок активирован, автоматически созданное меню будет располагаться под списком команд, сформированным пользователем.
В свойствах параметра «КонтекстноеМеню» можно определить типовой список команд, который существует на форме (Рис.2).
В нашем случае мы можем:
- Связать контекстное меню с командной панелью формы обработки;
- Вызвать те же действия, которые включены в выпадающий список команды «Действия»;
- Определить тот же набор пунктов, который реализован в основных действиях формы.
Если мы хотим, чтобы в выпадающем по правому клику списке был реализован набор команд, характерный для табличного поля, мы должны:
- Создать командную панель, для которой источником действий будет выступать наше табличное поле;
- Снять видимость с этого элемента;
- Установить в параметре «КонтекстноеМеню» нашу командную панель.
Решим эту же задачу для управляемых форм. Процесс создания формы и добавление на нее нового реквизита мы отдельно рассматривать не будем. Обратим внимание на тот факт, что не в свойствах поля (Рис.3), не в свойствах реквизита формы, не в свойствах элемента параметра, связанного с контекстным меню нет.
Включить контекстное меню можно, если по элементу формы «Реквизит1» кликнуть правой кнопкой мыши (Рис.4). В выпавшем списке выберем пункт «Показать контекстное меню».
После этого дерево элементов формы получит новую ветку (Рис.5)
Теперь рассмотрим процесс заполнения контекстного меню.
Ручное заполнение пунктов меню
Реализацию ручного заполнения контекстного меню элемента обычной формы можно осуществить простым добавлением кнопок в командную панель, которая определена в соответствующем параметре.
Для управляемой формы набор команд, реализованных в выпадающем списке можно определить, перетаскиванием их с закладки «Команды» в соответствующую ветку дерева элементов (Рис.6).
При этом важно понимать, что в качестве пунктов меню могут выступать не только команды формы, но и стандартные и глобальные команды.
Программное добавление контекстного меню и списка команд в нем
Допустим, перед нами как разработчиками стоит задача в создании в контекстном меню команд, которые перемещают строки табличной части вверх и вниз по списку. Сами процедуры перемещения мы описывать не будем, рассмотрим только программное добавление соответствующих пунктов.
- У формы создадим обработчик события ПриОткрытии;
- Процедуры разместим на клиенте и на сервере, так как для работы нам понадобятся элементы формы, использование директив без контекста не имеет смысла;
- Важное замечание: сами команды должны быть определены и прописаны, иначе запуск обработки не состоится;
- Наша форма будет иметь вид, представленный на Рис.7; Рис.7
- Перейдем к программированию;
- В первую очередь добавим новые элементы код на Рис.8; Рис.8
- Определим представление новых элементов и соответствующие команды (Рис.9); Рис.9
После этих действий контекстное меню будет выглядеть как на Рис.10
Если нам не нужны остальные действия с таблицей, и мы хотим, чтобы меню состояло только из наших пунктов, нам придется добавить еще несколько строк кода.
Первая мысль, которая приходит в голову – отключить автозаполнение. Если бы наше контекстное меню не было создано программно, мы бы так и сделали, однако попытки обнаружить соответствующее свойство у созданного с помощью кода меню (у автора статьи) не увенчались успехом. И было принято решение сделать все предопределенные строки списка невидимыми.
Для этого, перед вышеприведенным кодом был вставлен следующий цикл (Рис.11):
Таким образом, все подчиненные элементы контекстного меню стали не видны, и оно приобрело вид, как на Рис.12
andrew76 --> andrew76На форме (обычной) имеется поле ввода со следующими параметрами
Автоконтекстное меню - включено.
Контекстное меню - отсутствует.
Только просмотр -включено.
Редактирование текста-выключено.
При клике мышью на поле ввода всплывает контекстное меню (как положено).Но там есть одна нежелательная команда-"Очистить".
Как её сделать неактивной? Как запретить отдельные команды в контекстном меню элемента формы Поле Ввода ?
Но есть еще одно большое препятствие. Shift+F4 - не получится заблокировать. Правильно поставленный вопрос содержит до 90% ответа. andrew76 --> andrew76
Странно,поле только для чтения в принципе.
pablo --> pabloЧитайте также: