1с состав команд программно
Одним из требований для прохождения аудита расширения в модели сервиса является программная модификация управляемых форм без заимствования самой формы в расширение.
Мы рассмотрим основные составляющие этой задачи: добавление реквизитов, добавление элементов формы и назначение обработчиков событий элементов формы.
Добавление реквизитов
Для добавления реквизитов используется метод объекта ФормаКлиентскогоПриложения
Реквизиты формы, добавленные через конфигуратор, удалить невозможно, поэтому второй аргумент процедуры можно не указывать.
Переменная ДобавляемыеРеквизиты является массивом объектов типа РеквизитФормы .
Например, если мы создаем таблицу значений из двух колонок, то программный код для их создания будет выглядеть следующим образом:
Процедуру ИзменитьРеквизиты логично вызывать из обработчика ПриСозданииНаСервере , но т.к. мы не заимствуем форму в расширение, то следует найти другую точку входа. Для конфигураций УТ 11, КА 2 и ERP 2 существует типовой механизм упрощенного изменения конфигураций. Нас интересует модуль МодификацияКонфигурацииПереопределяемый , в состав которого входит процедура
Данную процедуру можно заимствовать в расширение, добавить проверку имени формы и вставить код изменения реквизитов:
Для остальных конфигураций придется переопределять другие процедуры. Например
Использование той или иной процедуры следует проверить в модуле редактируемой формы.
Изменение элементов формы
Управление элементами формы производится через коллекцию Элементы объекта ФормаКлиентскогоПриложения , с помощью которой можно добавлять, удалять, изменять свойства элементов формы, а также перемещать элементы формы между родителями.
Для добавления нового элемента формы требуется передать в функцию Добавить данной коллекции имя элемента, его тип и родителя (при необходимости). Например:
По аналогии с добавлением реквизитов, данный код можно выполнять в функциях МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере (УТ, КА, ERP) , ПодключаемыеКоманды.ПриСозданииНаСервере или ВерсионированиеОбъектов.ПриСозданииНаСервере .
При создании новых элементов формы старайтесь добавлять к их именам префикс своего расширения, чтобы избежать конфликтов с элементами формы типовой конфигурации. Этот же совет следует применять к именованию реквизитов формы, процедур, функций и глобальным переменным.
Обработка событий формы
Выполнить код по событию элемента формы можно двумя способами:
- Создать команду, указать для этой команды имя обработчика события и назначить эту команду элементу формы
- Выполнить метод УстановитьДействие элемента формы, чтобы указать имя обработчика события в модуле формы
Оба метода предполагают наличие в модуле формы процедуры с сигнатурой, соответствующей обработчику события. Для первого способа в модуле формы должна быть клиентская процедура, принимающая единственный аргумент - Команда. Для второго - всё зависит от события, для которого выполняется обработчик. Так, например, для события ПриИзменении элемента формы с типом ПолеВвода будет требоваться процедура, принимающая единственный аргумент - ЭлементФормы . А для события ПередНачаломДобавления таблицы формы - целых 6 аргументов ( ЭлементФормы , Отказ , Копирование , Родитель , ЭтоГруппа , Параметр ). Поэтому для некоторых событий попросту невозможно подобрать соответствующие клиентские методы в модуле формы и заимствования формы в расширение не избежать.
Для самых простых случаев (команда или событие без параметров) можно использовать следующие комбинации обработчиков и переопределяемых процедур:
- обработчик Подключаемый_ВыполнитьПереопределяемуюКоманду с переопределением процедуры МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду для УТ, КА и ERP;
- обработчик Подключаемый_ВыполнитьКоманду с переопределением процедуры ПодключаемыеКомандыКлиент.ВыполнитьКоманду
При этом в предопределенной процедуре обязательно проверять имя команды (или имя элемента формы) и имя самой формы.
Либо вариант с использованием команд:
Обратите внимание, что при использовании процедур, не предназначенных для программной обработки команд, следует возвращать поток выполнения методом глобального контекста ПродолжитьВыполнение , чтобы не нарушить работу типовых механизмов.
Полезные советы
Работа с динамическими списками
Довольно частой задачей является модификация в расширении текста запроса динамического списка. Многие разработчики просто копируют текст запроса из конфигуратора, редактируют его и заменяют стандартный в свойстве ТекстЗапроса объекта Динамический список .
Для небольших изменений гораздо лучше воспользоваться объектом СхемаЗапроса , появившемся в версии платформы 8.3.5. Он позволит всегда иметь актуальный текст запроса, если он поменяется при обновлении конфигурации.
Переопределение открываемой формы
В некоторых случаях, когда требуется кардинальное изменение формы, следует не забывать о возможности переопределения открываемой формы в модуле менеджера объекта метаданных.
Для этого следует реализовать новую форму (не заимствовать её, а написать с нуля) и в модуле менеджера переопределить процедуру ОбработкаПолученияФормы .
Данный метод следует использовать с осторожностью или ограничивать его использование ключами открытия формы, т.к. в этом случае мы делаем недоступной типовую форму.
Как управлять расположением команд в командной панели формы?
В 1С Предприятии 8.2 внешний вид формы определяется расположением и свойствами элементов в дереве элементов формы. На основе этих свойств система сама "рисует" форму, в частности, командную панель формы.
Любая группа кнопок (командная панель, подменю, группа кнопок, контекстное меню) заполняется по одинаковым правилам:
- сначала идут кнопки, предоставляемые источником команд, с которым связана данная группа;
- затем идёт фрагмент командного интерфейса, если источник команд подразумевает его включение;
- затем идут пользовательские команды, добавленные в данную группу;
- затем идёт подменю Все действия (только для командной панели);
- и в конце идёт кнопка Справка в том случае если она была предоставлена источником команд.
Рассмотрим самый простой вариант, когда в форме элемента справочника созданы две команды и помещены в командную панель формы.
В результате в режиме 1С:Предприятия расположение кнопок, соответствующих созданным командам Команда1 , Команда2 соответствует описанному выше алгоритму: в командной панели формы и в подменю Все действия сначала расположены команды, предоставляемые источником команд - формой элемента справочника (например, Записать и закрыть, Записать и др.), затем команды, созданные разработчиком ( Команда1 , Команда2 ), и затем команда Справка .
Однако у разработчика есть несколько способов существенно вмешаться в этот процесс и повысить удобочитаемость командной панели, контекстного меню и т.п. Какие же есть возможности изменить состав и порядок кнопок?
1. Можно отделить команды, созданные разработчиком, от других команд разделителем.
Для этого нужно создать в командной панели группу вида Группа кнопок и перенести в нее эти команды.
2. Можно расположить какие-то команды разработчика в начале группы команд.
Для этого нужно отменить у группы источник команд (для контекстного меню и автоматической командной панели нужно выключить флажок Автозаполнение ), затем добавить в группу свою кнопку, после нее добавить группу вида Группа кнопок и у этой группы установить источник команд - например, Форма .
В результате в режиме 1С:Предприятия командная панель формы и подменю Все действия будут иметь следующий вид.
3. Можно переместить автоматически заполняемые кнопки.
Для этого нужно поместить в дерево командной панели или контекстного меню кнопку, связанную с той же командой, которая заполняется из источника данных (например, Удалить , Скопировать и др.). Автоматически такая кнопка не будет размещена среди стандартных команд и, таким образом, можно переместить стандартную команду в другое место.
В результате в режиме 1С:Предприятия командная панель формы и подменю Все действия будут иметь следующий вид.
Чтобы пиктограмма команды Удалить отображалась в командной панели формы, нужно установить свойство этой кнопки ТолькоВоВсехДействиях в значение Нет .
4. Можно изменить порядок и видимость кнопок фрагмента командного интерфейса, предоставляемого источником команд Форма .
Например, у объекта конфигурации справочник Контрагенты существует команда Команда3 . Эта команда имеет группу размещения команд - Командная панель формы.Важное и тип параметра команды - СправочникСсылка.Контрагенты .
После установки этих свойств, Команда3 становится доступна закладке Командный интерфейс формы объекта, тип которого имеет команда и располагается в командной панели формы после стандартных команд, поставляемых формой элемента справочника.
В результате в режиме 1С:Предприятия командная панель формы и подменю Все действия будут иметь следующий вид.
Команда3 входит в группу команд фрагмента командного интерфейса. Если Вас не устраивает место, в которое вставляется фрагмент командного интерфейса, можно поместить в командную панель группу вида Группа кнопок и у этой группы установить источник команд - Глобальные команды командной панели формы .
В этом случае автоматическое размещение фрагмента будет отменено (по аналогии со стандартной кнопкой, добавленной вручную), и фрагмент командного интерфейса будет выводиться в новой группе.
Что же касается содержимого фрагмента командного интерфейса, то его редактирование доступно на закладке Командный интерфейс редактора формы.
5. Можно включить/выключить видимость стандартных команд, предоставляемых источником команд, например - Форма .
Для этого нужно открыть окно Состав команд в палитре свойств формы.
В заключение заметим, что возможности изменить порядок кнопок, предоставляемых источником команд, нет. Если такая необходимость появится, нужно отменить источник у группы команд, и полностью заполнить группу вручную.
Введение в управляемая форма 1С реквизиты элементы команды
Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.
Программное переопределение обработчиков событий формы и элементов формы
В теле модуля формы:
А в новой процедуре нужно добавить вызов основной, если такая процедура есть.
Аналогично можно поступить и с обработчиками элементов формы:
Программное создание групп формы.
Доступные виды групп формы:
Программное добавление команды на форму.
Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.
Программное создание декораций форм.
Программное добавление реквизита на форму.
Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.
Вывод реквизитов на форму.
Вызов процедур при создании на сервере 1С
После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.
Некоторые советы при программном редактировании формы
Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:
Читайте также: