Программное добавление элементов обычных форм
В основном элементы формы задаются статически через конфигуратор. Но иногда требуется программное изменение формы. В обычном приложении не предусмотрено программное создание реквизитов формы, но можно программно добавлять элементы формы. В управляемом приложении доступно программное добавление элементов и реквизитов управляемых форм.
Добавление поля ввода
В данном примере на форму добавляется новое поле ввода, для него необходимо задать привязку к реквизиту. Имя реквизита к которому будет привязано поле ввода, задается через свойство «Данные». Для позиционирования элемента на форме задаются значения свойств отвечающих за положение.
Добавление кнопки обычной формы
При программном добавлении кнопки необходимо установить процедуру, которая будет выполняться при нажатии. Обработчик действия для кнопки устанавливается функцией «УстановитьДействие». Так же необходимо задать заголовок кнопки и определить значения свойств отвечающих за положение.
Добавление надписи обычной формы
В свойстве «Заголовок» указывается заголовок надписи. Для позиционирования элемента на форме задаются значения свойств отвечающих за положение.
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
Программирование в 1С для всех
В этой статье начнем разбирать основные элементы управляемой формы 1С 8.3. Управление формой осуществляется посредством различных элементов формы, которые расположены иерархически на закладке Элементы конструктора формы. Самым главным элементом является сама форма, которая расположена вверху иерархии элементов, а остальные элементы ей подчинены.
Все элементы формы можно разделить на пять групп: поля, элементы группировки, кнопки, декорации и таблицы. В своих статьях я разберу каждую из групп. В этой статье мы начнем изучать один из видов элемента поле — поле ввода, но перед этим научимся добавлять элемент на форму.
Добавление элементов на форму
Делается это достаточно просто: необходимо выделить элемент Форма в окне Элементы конструктора формы и нажать на кнопку «Добавить». После этого откроется окно, в котором необходимо выбрать нужный тип элемента
После выбора, элемент нужного появится в окне Элементы.
Элемент управляемой формы Поле
Разберем элемент управляемой формы Поле. Этот элемент нужен для ввода информации на форме. А также для отображения какой-либо информации. После того, как Вы добавите этот элемент на форму, справа откроется палитра свойств элемента формы. Пока Вас должны интересовать два свойства – ПутьКДанным и Вид.
В свойстве ПутьКДанным разработчик может связать элемент формы с нужным реквизитом формы. Обратите внимание, что после того, как был добавлен элемент Поле ввода на форму он не отобразился на самой форме. Это произошло потому, что наш новый элемент не связан с реквизитом формы. Для примера я создал на форме обработки несколько реквизитов с разными примитивными типами и один реквизит с ссылочным типом.
Здесь и далее используется конфигурация, созданная в книге «Программировать в 1С за 11 шагов»
Теперь свяжем наш недавно добавленный элемент формы с одним из реквизитов, для этого выберем нужный реквизит с свойстве элемента ПутьКДанным.
После этого заполнятся свойства ПутьКДанным и Вид, а сам элемент отобразится в представлении формы.
Обратите внимание на свойство элемента Вид. При помощи этого свойства определяется функциональность поля ввода. Можно выбрать различные значения этого свойства.
В зависимости от выбранного значения будет определятся функционал. На рисунках выше выбрано значение – поле ввода, т.е. мы можем вводить какие-либо значения в это поле ввода, а если выбрать значение поле надписи, то ни чего вводить мы не сможем.
Этот значение свойств Вид поля ввода удобно выбирать, когда нужно просто показать справочную информацию пользователю.
Теперь добавим новый элемент формы с типом Поле ввода и свяжем его с реквизитом РеквзитДата посредством уже знакомого нам свойства ПутьКДанным
Как Вы видите вид поля ввода поменялся, а так же поменяется возможный выбор значений свойства Вид.
Таким образом, делаем вывод – функциональность поля ввода зависит от типа реквизита.
Для реквизита с типом Булево будут доступны следующие значения свойства Вид.
А для реквизита с ссылочным типом будут доступны иные значения свойства Вид.
Более подробно работа с элементами формы на практичных примерах дается в книге «Основы разработки в 1С:Такси. Разработка управляемого приложения за 12 шагов».
Иногда кажется, что изучить язык программирование в 1С сложно и трудно. В действительности программировать в 1С — легко. Помогут Вам легко и быстро освоить программирование в 1С мои книги: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»
Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 11 шагов»
Эта книга подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Программное добавление и изменение элементов управляемых форм
Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.
Программная модификация формы может потребоваться в нескольких случаях:
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
Изменение команд формы
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
Изменение реквизитов формы
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
Изменение элементов формы
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
Добавление реквизита и связанного с ним поля ввода:
Назначение элементу формы обработчика события:
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры
Внимание!
Внимание!
Скачать обработку с примерами программного поиска и изменения реквизитов, команд и элементов управляемой формы можно ЗДЕСЬ.
Остались вопросы?
Спросите в комментариях к статье.
2 комментария
Ваш текст:
В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы.
Верный текст:
(необязательный)
Тип: Массив.
Массив, содержащий СТРОКИ, описывающие ПУТИ к удаляемым реквизитам.
В данной статье описаны примеры программного создания объектов управляемой формы 1С : элементов, команд, реквизитов, а также описание стандартных возможностей для работы с ними.
Введение в управляемая форма 1С реквизиты элементы команды
Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.
Примеры работы с объектом «ДанныеФормыКоллекция» и созданием дин. списка и таблицы значений программно можно будет посмотреть в части 2.
Для запуска обработки в режиме предприятия необходимо наличие объектов «Справочники.Номенклатура», подчиненный ему «Справочники.ХарактеристикиНоменклатуры» и «РегистрыСведений.ЦеныНоменклатуры”.
Программное переопределение обработчиков событий формы и элементов формы
Переопределить обработчики событий формы можно в обработчике «ПриСозданииНаСервере» (кроме самого обрабочика «ПриСозданииНаСервере») или в теле модуля формы в контексте сервера (например, Переопределение событий ПриЧтениинаСервере и ПриСозданииНаСервере).
В теле модуля формы:
А в новой процедуре нужно добавить вызов основной, если такая процедура есть.
Аналогично можно поступить и с обработчиками элементов формы:
Программное создание групп формы.
Доступные виды групп формы:
Программное добавление команды на форму.
Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить( ). Удалять можно только те команды, которые были созданы программно.
Программное создание декораций форм.
Программное добавление реквизита на форму.
Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.
Вывод реквизитов на форму.
Вызов процедур при создании на сервере 1С
После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.
Некоторые советы при программном редактировании формы
Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:
Грамотное обновление 1С
Помечать изменения комментариями
Это самое главное правило. Если изменения не отмечены комментариями, то они с вероятностью 99% будут не замечены и затерты при обновлении. Размещать комментарии надо не справа, а слева, т.к. справа они могут быть не замечены в узком окне сравнения.
Добавление своих функции в общий модуль
Если требуется добавить свою функцию, надо ее добавлять в отдельный общий модуль, а не в типовой общий модуль. В итоге придется совершать меньше операций при обновлении.
Добавление параметров в типовую функцию
Добавление больших кусков кода
Вместо добавления больших кусков кода нужно добавлять вызов функции, т.к. сопоставление плохо работает с большими кусками кода, оно может ошибочно сопоставить часть большого кода.
Комментарии к модулю писать в отдельной функции
Не стоит писать комментарии к модулю в самом модуле. Нужно создать отдельную функцию с говорящим именем, например _ОписаниеИзменений и там описать изменения.
Тогда не будет лишний раз выдаваться сообщение об изменении в основном разделе программы. При этом функцию лучше называть с подчеркивания, чтобы она была на первом месте в списке функций.
Использование обычных элементов вместо предопределенных
Можно использовать обычные элементы вместо предопределенных.
Для того, чтобы не было конфликтов кодов, лучше давать им префикс, например код задавать в виде «ПЭ- XXXX «.
Добавление вместо изменения
По возможности нужно использовать добавление вместо изменения исходного кода.
Вот в этом примере можно было бы вмешаться в типовой код, но понять логику было бы сложнее.
А добавление, хоть и вносит лишнее время выполнения кода, но смотрится прозрачнее для обновления.
Типовые задачи по доработкам типовых конфигураций
Добавление отчетов
Если просто добавить новый отчет, то могут быть проблемы с ролями, хотя обычно проблем нет.
Поэтому нужно добавить отчет в справочник дополнительных внешних обработок.
Вызов отчета лучше привязать не к пункту меню/пиктограмме.
А добавить в какую-либо связанную с отчетом форму, например, в форму списка справочника.
Код вызова отчета будет выглядет так:
Если вы добавили свой документ, то ему хочется добавить типовые общие команды «Движения документа» и «Структура подчиненности». Но если поменять состав документов для типовой команды, появится постоянная проблема при обновлениях.
Поэтому можно добавить свои команды, скопировав обработки модуля команды (они там примитивные).
В своих командах указать свой собственный состав документов для команды.
Такой способ не будет мешать обновлению типовых конфигураций.
Программное добавление элементов интерфейса на обычных формах
Добавление колонок в форму списка
Нужно вставлять свои колонки после типовых кодом вроде этого:
Добавление кнопок в панель действий
Нужно программно добавить кнопку и обработчик события по ее нажатию.
Шаг 1 . В процедуру при открытии программно добавляем кнопку на панель.
Шаг2 . Добавляем обработчик нажатия
Процедура ОтчетПоВакансиям ( Элемент ) Экспорт
Предупреждение ( «Отчет» );
КонецПроцедуры
Назначение обработчиков событий
Все обработчики событий назначать в модуле. При обновлении можно забыть прописать их и функциональность будет нарушена.
Тем более, что обработчики прописываются просто.
Добавление новых команд на форму «Рабочий стол»
Добавлять новые команды в интерфейс можно только вручную, это неудобно для обновлений.
В большинстве типовых конфигураций используется рабочий стол.
Он описывается в обработке «Рабочий стол».
Чтобы добавить на него команду, нужно внести код добавления команды в «При открытии» этой обработки.
Нужно подобрать место, где разместить кнопку, посмотреть координаты соседних верхней кнопки (координата лево) и левой кнопки (координата верх). Размеры всех кнопок одинаковы.
Вместо кнопки используется надпись, т.к. она позволяет переносить текст надписи на новую строку.
Возможно, будет проблема с наличием свободного пространства для кнопок. Тогда можно сделать вызов списка с действиями при нажатии на кнопку или открытия своей формы-меню.
Вот пример, который добавляет новую кнопку вызова обработки «Рассылка поздравлений с днем рождения» и обработчик команды для нее:
// Осипов 2016-02-29 +++ Добавляю кнопку
Добавление кнопок на обычную форму
Нужно добавить в процедуру «При открытии» код:
И саму процедуру для реагирования на нажатие кнопки:
Процедура Нажатие_ВводРазовыхНачислений ( Элемент )
Добавление поля ввода на обычную форму
Если просто добавить поле ввода ссылочного типа, то не будет работать кнопка выбора. Как эту проблему решить, пока не понятно, поэтому надо добавлять реквизит формы вручную.
Программное добавление элементов интерфейса на управляемых формах
Добавление кнопок и действий под них
Можно добавить кнопку и команду для нее полностью программно.
В процедуру формы ПриСозданииНаСервере добавить код вида:
В модуль формы добавить процедуру для реагирования на событие:
&НаКлиенте
Процедура ОткрытьНастройкаПередачиТоваровДетально ( Команда )
Добавление группы элементов
Вывести колонку с добавленным полем в табличную часть
После добавления поля в табличную часть его нужно вывести на форму:
Добавить программно колонку в табличную часть
Добавить реквизит в динамический список и отобразить его на форме в табличном поле
Если в текст запроса динамического списка вносятся изменения, то необходимо также добавить поле для вывода этого реквизита. Реквизиты добавлять не требуется.
Если список является динамическим списком с произвольным запросом, то нужно будет подкорректировать запрос, например так:
Затем добавить реквизит списка и элемент:
Добавить программно поле ввода в форму элемента
Нужно указать заголовок, если он имеется.
Также в примере используется команда вставки, а не добавления, для того, чтобы вставлять в нужную позицию:
Если нужно добавить элемент в некую группу:
Если поле ввода не связано с реквизитами объекта, можно добавить реквизит программно:
Назначение обработчиков событий
Тем более, что обработчики прописываются просто.
Перемещение элементов формы
Иногда требуется переместить элементы формы, вот пример:
Программная настройка параметров выбора
Иногда нужно, чтобы при выборе значения в добавленном поле ввода показывались элементы только в соответствии с отбором.
НовыйМассив = Новый Массив();
НовыйПараметр = Новый ПараметрВыбора(«Отбор.ОприходованСкладом», Истина);
НовыйПараметр = Новый ПараметрВыбора(«Отбор.ОприходованЗакупщиком», Ложь);
НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
Использование дополнительных отчетов и обработок
Как открыть отчет/обработку из кнопки/команды
Как правильно обновлять измененные конфигурации
Как проверить, есть ли доработки в типовую конфигурацию
Нужно сравнить конфигурацию базы с конфигурацией поставщика. Если конфигурации поставщика нет, значит конфигурация полностью типовая.
Как при сравнении-объединении определить измененные объекты
Нужно зайти в пункт «Обновление» и указать новый файл конфигурации.
В окне сравнения нужно использовать фильтр по дважды измененным объектам. Будут выведены только конфликты, т.е. те объекты, которые изменены в текущей конфигурации и типовой одновременно. Их и надо обрабатывать.
К сожалению, нельзя будет сохранять промежуточный результат, т.е. нужно сделать все сравнения и только потом принять изменения.
При этом если сравнения вылетит, придется сохранять все сначала.
Проблемы после обновления
Не показываются некоторые реквизиты формы
Прочие советы
Постоянный рефакторинг при сопровождении
Если в процессе сопровождения конфигурации встречается вручную добавленный реквизит или событие, нужно постараться тут же сделать рефакторинг на его программную генерацию. Тогда при обновлении будет меньше проблем.