Команда заполнения формы 1с
Автоматическое заполнение командной панели в форме
Для удобства и ускорения разработки форм в платформе 1С:Предприятие 8 реализована возможность автоматического заполнения командных панелей.
Данная возможность также позволяет избежать необходимости модернизации уже разработанных форм (в контексте командных панелей). Это может потребоваться в случае добавления в платформу новой функциональности или же вследствие изменений в разрабатываемой конфигурации.
Пример. В конфигурации имеется документ РасходнаяНакладная с разработанной формой документа, в которую вставлена автоматически заполняемая командная панель. В конфигурацию добавляется документ ПриходнаяНакладная, и для него настраивается возможность ввода на основании документа РасходнаяНакладная. При этом автоматически в форме документа РасходнаяНакладная, в командной панели, появится подменю "Ввести на основании" с кнопкой, инициирующей ввод документа ПриходнаяНакладная на основании данного документа.
Набор действий и порядок их выполнения зависят от значения свойства " Источник действий " командной панели.
Источники действий
Источник действий командной панели не только предоставляет набор действий и стандартных подменю для редактирования кнопок панели, но и формирует панель предопределенным набором кнопок в режиме автоматического заполнения командной панели.
В качестве источника действий для командной панели могут быть выбраны:
- все источники - служит для объединения действий от всех возможных источников формы, обработка действий при этом будет зависеть от активного элемента формы;
- форма - обычно используется в случаях, когда панель должна содержать действия, предоставляемые формой и элементами управления, связанными с реквизитом формы по умолчанию; действия будут обрабатываться данными элементами управления и формой;
- конкретный элемент управления - предназначен для непосредственной привязки командной панели к элементу управления; действия от панели с таким источником будут обрабатываться только данным элементом управления.
Каждый из вариантов источника действий обладает особенностями как в процессе заполнения командных панелей кнопками, так и в порядке выполнения действий, установленных в кнопках.
Порядок заполнения командных панелей
Все источники - в этом случае для заполнения командной панели используются действия, предоставленные всеми имеющимися в форме источниками (форма и все элементы управления, предоставляющие действия).
Форма - для заполнения командной панели используются действия, предоставленные формой и элементами управления, связанными с реквизитом формы по умолчанию (выделен жирным шрифтом на закладке "Реквизиты" редактора формы).
Конкретный элемент управления - для заполнения командной панели используются действия, предоставляемые данным элементом управления. Подобным источником действий может служить элемент управления ТабличноеПоле.
Если источник действий является по сути составным (все источники или форма), то действия от различных источников объединяются. При объединении дублирующиеся действия игнорируются.
Порядок выполнения действий и обновления состояния кнопок
Действие может быть инициировано пользователем либо путем нажатия на кнопку командной панели, либо нажатием на клавиатуре сочетания клавиш, назначенного кнопке.
Под обновлением состояния кнопок командной панели в данном случае подразумевается запрет/разрешение кнопки, установку пометки и т.д. Обновление состояния происходит в моменты бездействия системы. На текущее состояние кнопки панели влияет множество внешних (по отношению к кнопке) факторов, а также значения свойств кнопки, соответствующих тому или иному состоянию (например, свойства: " Доступность ", " Пометка "). Состояние доступности и пометки кнопки зависят в первую очередь от значений соответствующих свойств. Поясним данное высказывание на примере состояния доступности кнопки командной панели и, связанного с этим состоянием, свойства " Доступность ": если свойство установлено в значение Истина , то реальная доступность кнопки определяется платформой на основе текущего состояния источника данных; в противном случае кнопка считается недоступной (вне зависимости от текущего состояния источника данных).
Рассмотрим порядок обновления состояния кнопок командной панели и выполнения действий. Этот порядок зависит от вида действия, установленного в кнопке, и от значения свойства " Источник действий ". В случае, когда действием является вызов процедуры, состояние кнопки (доступность) определяется платформой исходя из наличия указанной в действии процедуры; в случае доступности кнопки, при инициации действия будет вызвана соответствующая процедура модуля. Для действий, отрабатываемых платформой, порядок выполнения следующий:
Все источники - сначала производится попытка обновить состояние кнопки (или выполнить действие) посредством элементов управления, связанных с реквизитом формы по умолчанию. Далее, в случае неудачи, попытка производится для активного элемента управления и, затем, для самой формы.
Форма - сначала производится попытка обновить состояние кнопки (или выполнить действие) посредством элементов управления, связанных с реквизитом формы по умолчанию. Далее, в случае неудачи, попытка производится для формы.
Конкретный элемент управления - действия выполняются (или обновляется состояние) непосредственно источником, вне зависимости от его активности в форме.
Свойство "Автозаполнение"
Установка значение Истина свойству " Автозаполнение " командной панели приводит к автоматическому заполнению кнопками в соответствии с выбранным источником действий. Автоматически добавленные кнопки не сохраняются в панели, их набор и порядок определяется платформой и зависит от множества факторов (в основном от текущего состояния источника действий). В случае установленного свойства " Автозаполнение " изменение состава кнопок, предоставляемого источником действий, автоматически отражается на составе кнопок командной панели, связанной с ним. Для подобных кнопок отсутствует возможность редактирования их свойств или изменения положения в командной панели.
Имена кнопок
Автоматически вставленные кнопки не имеют строго предопределенных имен, значения имен для них назначаются в процессе заполнения панели. Таким образом имя кнопки зависит от порядка вставки кнопки в панель и, следовательно, не рекомендуется ориентироваться на имена подобных кнопок в процессе программирования формы.
Однако из этого правила есть исключения.
Добавление кнопок в автоматически заполненные подменю
В автоматически заполненные панели и подменю имеется возможность добавления неавтоматических кнопок. При этом в случае добавления таких кнопок в подменю, имя кнопки подменю будет зафиксировано и будет оставаться неизменным до тех пор, пока данное подменю содержит кнопки, добавленные вручную.
Ручное заполнение панели
Быстрое заполнение панели кнопками с возможностью их последующего редактирования можно осуществить через контекстное меню командной панели. Для этого необходимо выбрать пункт контекстного меню " Заполнить автоматически ". Командная панель заполниться кнопками аналогично случаю с установленным свойством " Автозаполнение ", однако, кнопки панели будут доступны для редактирования и появится возможность изменять их состав и порядок.
Заполнение системного подменю
Аналогично командной панели возможностью автозаполнения обладают подменю, предоставляемые источником действий. При вставке такого подменю в панель происходит его автоматическое заполнение. Для заполнения кнопками с возможностью редактирования следует воспользоваться контекстным меню кнопки и выбрать пункт " Заполнить автоматически ".
Версия БСП: 3.1.4
Подсистема: Подключаемые команды
Раздел ИТС: Библиотека стандартных подсистем 3.1.4. Документация -> Глава 3. Настройка и использование подсистем при разработке конфигурации -> Подключаемые команды
Как понятно из названия статьи, подсистема “Подключаемые команды” является частью библиотеки стандартных подсистем (далее БСП).
В каждом прикладном решении есть объекты входящие в эту подсистему. Следовательно, для этих объектов можно подключать дополнительные команды.
И именно слово “подключать” подойдет здесь лучше всего. Сейчас коротко объясню почему:
Немного "воды" и ностальгических воспоминаний:
В те стародавние времена, когда появление в платформе менеджера временных таблиц и системы компоновки данных воспринималось как чудо чудесное, было принято все команды добавлять на форму вручную. Т.е. нужна тебе кнопка заполнения - ты добавляешь кнопку на форму и связываешь ее с процедурой обработки нажатия.
Затем появились зачатки БСП. Для отдельных объектов прикладных решений стало доступно подключение обработок заполнения табличных частей.
Но разработчики пошли дальше и теперь все типовые прикладные решения в обязательном порядке строятся на базе БСП.
Это значит, что все объекты в типовых прикладных решениях подключены к различным подсистемам БСП, в том числе и к подсистеме "Подключаемые команды".
Узнать какие объекты входят в эту подсистему можно через определяемый тип "ОбъектСДополнительнымиКомандами".
Если объект, который Вам нужен уже включен в эту подсистему, то к нему можно подключить дополнительные команды, при этом не внося изменений в сам объект.
Ближе к делу.
В качестве примера я использовал заполнение документа “Премия" типового прикладного решения “1С:Зарплата и управление персоналом 3”.
Допустим, нам нужно реализовать такой алгоритм расчета премии, который сложно выполнить с помощью типового расчета.
Для этой цели отлично подойдет подключаемая команда заполнения.
В файлах публикации Вы можете скачать шаблон-заготовку, а также готовый вариант обработки заполнения документа «Премия».
Итак, приступим …
В первую очередь в модуле объекта нужно заполнить функцию СведенияОВнешнейОбработке.
В параметрах регистрации укажем “ЗаполнениеОбъекта”. Это в дальнейшем повлияет на расположение кнопки на форме объекта назначения. (все варианты см. ИТС).
Определим объекты, к которым мы подключаем нашу обработку. В нашем случае это один документ “Премия”
Заполним остальные поля параметров регистрации
Добавим команду открытия обработки, которая в дальнейшем появится в документе «Премия». «Вид использования» выбираем «ОткрытиеФормы».
Описание других видов использования:
ОткрытиеФормы - используется, когда необходимо постоянное взаимодействие с пользователем и отображение промежуточных результатов перед их записью в объект назначения. Также применяется для отчетов.
ВызовКлиентскогоМетода - используется, когда функционал необходимо реализовать на клиентской машине, но открывать форму обработки не нужно. Например ввод на основании.
ВызовСерверногоМетода - используется, когда не нужно общаться с пользователем и весь функционал можно реализовать на стороне сервера. Выполнение команды в данном случае происходит в модуле объекта обработки.
ЗаполнениеФормы - является разновидностью вызова серверного метода, поэтому взаимодействие с пользователем также не предусмотрено. Но в данном случае можно получить контекст формы.
В процедуре "ВыполнитьКоманду" модуля объекта в третьем параметре "ПараметрыКоманды" можно обратиться к форме владельца. Для этого нужно использовать конструкцию "ПараметрыКоманды.ЭтаФорма".
В нашем примере применяется взаимодействие с пользователем, поэтому выбираем вариант "ОткрытиеФормы".
Теперь наша обработка технически готова к добавлению в состав дополнительных отчетов и обработок типового прикладного решения!
Осталось добавить механизм расчета премии и сохранения результатов расчета.
Немного подробнее о механизме открытия формы обработки…
При добавлении команды в таблицу команд мы указали вид команды «ОткрытиеФормы». Это значит, что при выполнении команды «Рассчитать премию» будет открыта основная форма нашей обработки.
В этой форме перечислены ключевые параметры, в которые БСП будет записывать данные необходимые для выполнения обработки.
Для вида использования «ОткрытиеФормы» существуют следующие параметры:
- ДополнительнаяОбработкаСсылка – ссылка на элемент справочника «ДополнительныеОтчетыИОбработки».
- ИдентификаторКоманды – идентификатор, заданный для команды при добавлении в таблицу команд в модуле объекта.
- ОбъектыНазначения – массив ссылок объектов назначений. Если обработка вызывается из формы объекта, то в массиве будет одна запись. Если обработка вызывается из формы списка, то в массиве будет столько записей сколько выбрано строк.
Кроме того, в данном случае можно обратиться к контексту формы объекта-владельца. Это делается через конструкцию «ВладелецФормы.Объект» в процедуре формы «ПриОткрытии». Конструкция «ВладелецФормы.Объект» дает возможность считывать необходимые данные из объекта-владельца, а также записать в объект результаты расчета премии.
Переходим к расчету премии…
Для получения актуальных данных документа «Премия» будем использовать конструкцию «ВладелецФормы.Объект» в процедуре «ПриОткрытии».
Процедура «ЗаполнитьРеквизитыФормыНаСервере» считывает актуальные значения реквизитов объекта владельца и через модуль объекта записывает их в реквизиты обработки.
На форме добавлены две команды «РассчитатьПремию» и «ПеренестиВДокумент».
По команде «РассчитатьПремию» вызывается процедура модуля объекта с расчетом.
Здесь записан самый примитивный расчет, ибо цель статьи показать работу подключаемой обработки, а не разбирать ньюансы расчета сумм премии.
По команде «ПеренестиВДокумент» вызывается процедура «ПеренестиВДокументОтвет»:
- Выполняется цикл по табличной части «РасчетПремии» обработки.
- Для каждой строки выполняется поиск строки в табличной части «Начисления» документа владельца. Если строка найдена, тогда колонка «Результат» обработки переносится в колонку «Результат» документа.
После завершения цикла имеет смысл принудительно установить флаг модифицированности формы объекта-владельца, а также принудительно закрыть форму обработки.
Теперь обработку можно добавить в список дополнительных отчетов и обработок прикладного решения и проверить как она функционирует.
В разных типовых прикладных решениях кнопка заполнения на форме может отображаться в разных местах. Для «1С:Зарплата и управление персоналом 3» кнопка появится здесь:
Довольно часто встречаются задачи, когда нужно организовать программное заполнение формы какого-то объекта. Скажем, у нас есть форма документа, на форме есть реквизиты, и нам нужно сделать команду, которая заполнит эти реквизиты. Данные для заполнения предполагается получать запросом.
Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида "Заполнение объекта".
Заполнение формы объекта с помощью внешней обработки
Строка с соответствующим параметром в модуле обработки:
Подключив обработку и указав, для какого документа она назначена, мы получим в форме документа команду. Тип команды задаётся при создании внешней обработки, и от него зависит, где и как будет выполняться обработчик команды. Для наших целей может подойти один из следующих типов команд:
- ВызовСерверногоМетода – обработчик команды располагается в модуле обработки;
- ВызовКлиентскогоМетода – обработчик команды располагается в модуле формы обработки;
- ЗаполнениеФормы – обработчик команды располагается в модуле обработки и позволяет работать с данными формы. Также позволяет вызвать серверную процедуру из модуля формы объекта. При этом можно заполнить форму не записывая объект.
Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.
В конечном итоге код в модуле обработки будет выглядеть примерно так:
В общем счёте задача решена. Однако, у такого способа есть небольшой недостаток – команда на форме размещается в определённом месте, а не там, где мы хотим её разместить. К примеру, на форме уже есть группа команд, включающая в себя команды заполнения, и мы хотели бы видеть новую команду в этой группе, но при подключении обработки команда на форме будет расположена отдельно от группы.
В связи с этим можно реализовать другой способ: добавить команду непосредственно в форму объекта – либо в основной конфигурации, либо в расширении – а обработчик команды организовать в модуле формы.
Заполнение формы объекта посредством обработчика команды в модуле формы
Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.
Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом "ДанныеФормыСтуктура". Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка "Объект недоступен для изменения".
Можно получить объект документа Объект . Ссылка . ПолучитьОбъект () , и заполнить его данными. Но тогда, чтобы увидеть данные в открытой форме, объект придётся записать, а это не очень хорошо.
Будет лучше, если данные добавятся без записи, и мы можем это сделать с помощью метода РеквизитФормыВЗначение . Этот метод преобразует реквизит формы в объект прикладного типа, и вот этот объект прикладного типа мы можем заполнить, а затем, уже заполненный, преобразовать обратно с помощью метода ЗначениеВРеквизитФормы . Выглядеть это будет примерно так:
Редактор формы используется для создания и редактирования форм объектов прикладного решения. Формы объектов используются системой для визуального отображения данных в процессе работы пользователя.
Любая форма представляет совокупность нескольких составляющих:- элементов — объектов, определяющих визуальное представление формы и осуществляющих взаимодействие с пользователем,
- командного интерфейса — совокупности команд, отображаемых в форме;
- реквизитов — объектов, данные которых форма использует в своей работе.
- команд — действий, которые определены в данной конкретной форме,
- параметров — объектов, значения которых характеризуют саму форму, используются при ее создании и остаются постоянными в процессе «жизни» формы,
- модуля — программы на встроенном языке, отвечающей за работу с элементами и за обработку событий;
Редактор формы содержит несколько закладок, обеспечивающих редактирование всех составляющих формы.
В отдельном окне, в нижней части редактора, отображается внешний вид формы в режиме 1С:Предприятие.
Редактирование элементов
Редактор форм позволяет разработчику использовать широкий набор возможностей для изменения внешнего вида формы — того вида, который форма будет иметь в режиме 1С:Предприятие. Перечислим основные из этих возможностей:
Редактор форм позволяет добавлять в форму специальные элементы, которые помогают придать форме собственный узнаваемый стиль, сделать доступ к данным простым и понятным, а также разместить большой объем информации на ограниченной площади.
Тогда в режиме 1С:Предприятие она будет выглядеть следующим образом:
Заголовок каждой группы — страницы отображается на отдельной закладке. Разработчик имеет возможность задать режим отображения закладок: снизу или сверху:
Например, закладки можно расположить снизу:
Элементы
Редактор позволяет добавлять в форму различные элементы. Добавлять элементы можно с помощью команды добавления или путем перетаскивания реквизитов формы в дерево элементов:
Все элементы формы представляются в виде иерархической структуры, корнем которой является сама форма. Это позволяет быстро перемещаться к нужному элементу формы:
Располагая элементы выше/ниже в дереве, подчиняя их другим элементам и задавая свойства элементов-групп можно задавать порядок, в котором пользователь будет обходить элементы управления формы при вводе и редактировании данных. В режиме 1С:Предприятие элементы формы будут обходиться в порядке их иерархии и в соответствии с тем, какой тип группировки выбран для групп: вертикальная или горизонтальная.
Разделители
Разделители являются специальными элементами, с помощью которых возможно перераспределение пространства формы без изменения ее размеров. Платформа в режиме 1С:Предприятие самостоятельно добавляет эти элементы в форму. Разделитель обладает способностью «захватываться» мышью и перемещаться внутри формы в ее пределах с учетом возможности расположения других элементов и ориентации разделителя:
При перемещении разделителя, все элементы, связанные с разделителем, будут изменять свои размеры или перемещаться.
Модуль формы
Для редактирования модуля формы конфигуратор вызывает редактор текстов и модулей. Этот редактор предоставляет разработчику большое разнообразие возможностей для создания и изменения текста модуля. Подробнее…
Реквизиты формы
Редактирование реквизитов формы выполняется в списке, который позволяет создавать новые реквизиты, изменять имеющиеся и удалять ненужные реквизиты. Свойства реквизитов задаются с помощью палитры свойств.
Если у формы существует основной реквизит, определяющий поведение формы, отличное от типового, — он выделяется жирным шрифтом.
Командный интерфейс формы
Командный интерфейс формы редактируется в дереве. Основные ветви дерева содержат команды, добавленные в панель навигации окна, в котором будет показана форма, и в командную панель формы. Внутри каждой из этих ветвей команды разделены по стандартным группам.
Часть команд в командный интерфейс платформа добавляет автоматически. Наряду с этим разработчик самостоятельно может добавить в командный интерфейс команды, перетащив их из списка команд формы или из списка доступных глобальных команд. Для всех команд, добавленных в командный интерфейс, разработчик может задать их видимость для различных ролей, определенных в конфигурации.
Команды формы
Команды формы редактируются в списке. Разработчик имеет возможность добавить, удалить команды формы и задать их свойства с помощью палитры свойств. В том числе назначить для команды процедуру, которая будет выполняться при вызове этой команды пользователем.
На закладках Стандартные команды и Глобальные команды разработчику предоставляются списки команд, генерируемых платформой и доступных для использования в данной форме. Их свойства изменять нельзя, можно только добавлять их в форму.
С помощью мыши разработчик может перетащить команду в командный интерфейс формы. Также можно перетащить команду и прямо в дерево элементов, если нужно, например, отобразить эту команду в виде кнопки, расположенной в форме.
Параметры формы
Параметры формы редактируются в списке. Разработчик имеет возможность добавить, удалить параметры формы и задать их свойства с помощью палитры свойств.
Читайте также: