Как управляемых формах заполнить реквизит формы

Вывод результата запроса на форму УП в таблицу значений (аналог СоздатьКолонки() для УП) 2
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки(): Процедура ПоискНажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДокументоОборот.Этап,
| ДокументоОборот.Отдел,
| Докуме


Как обновить динамический список или реквизит на форме клиента? 25
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр


Как отобразить дерево значений на управляемой форме 0
Создадим новую внешнюю обработку. Добавляем управляемую форму и создаем обработчик ПриСозданииНаСервере(). Никаких реквизитов и элементов “вручную” не добавляем, будем делать это программно. НаСервере
Процедура ПриСозданииНаСервере(Отказ, Станда


Как передать таблицу значений с сервера на клиент? 5
Многие спрашиваю, как передать тз с сервера на клиент — ниже несколько вариантов как это можно реализовать: Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр НаКлиенте
Процедура ПолучитьТаблицу НаСервер(Команд а)
ТЗВСтроке = ПолучитьТЗНаС


Комиссионная торговля 0
Добрый день. УТ11 (11.4.13.46) Наша организация принимает товар на комиссию. В отчете комитенту цена комитента — ставится последняя, а нужно по фактическому поступлению. Подскажите пожалуйста, может кто то сталкивался с подобной проблемой. Спасибо.


Посмотреть все результаты поиска похожих

Знакомство с управляемой формой 1С лучше всего начинать с реквизитов. Что такое реквизит управляемой формы?  По своей сути, это данные, которые привязаны именно к форме: они создаются, хранятся, отображаются (по возможности) и редактируются на форме. Вне контекста формы эти данные не могут существовать. Сам по себе реквизит не может отображаться на форме. Для этого служат элементы формы, которые связаны с реквизитами форм.

Научимся создавать простые реквизиты формы и размещать их на форме.

Управляемое приложение 1С 8.3

Для этого в конфигураторе 1С создадим пустую форму. Пусть это будет форма некой внешней обработки. В этой форме нас интересует закладка Реквизиты

Пустая управляемая форма

В этой закладке сейчас только один реквизит – основной. Он нас пока не интересует, работа с основным реквизитом эта тема отдельной статьи. Пока разберемся с простыми реквизитами.

Для того, чтобы добавить реквизит необходимо нажать на кнопку «Добавить реквизит» командной панели закладки «Реквизиты»

Добавить реквизит управляемой формы

После этого будет добавлен реквизит управляемой формы 1С с типом по умолчанию (строка) и справа откроется палитра свойств этого реквизита.

Палитра свойств реквизита управляемой формы

В этой палитре мы можем установить имя, заголовок, а так же тип реквизита управляемой формы.

Для тренировки создадим четыре реквизита с типом строка:  Фамилия, Имя, Отчество и ФИО. И один реквизит с типом дата: ДатаРождения.

Реквизиты на управляемой форме

Разместим реквизиты на форме. Сделать это просто: необходимо нужный реквизит мышкой «перетащить»  из закладки «Реквизиты» на закладку «Элементы»

Перетаскиваем реквизит в элементыПеретащим все реквизиты на формы, и с помощью кнопок «Вверх», «Вниз» удобно расположим их на форме.

Реквизиты на управляемой форме 1С

Сейчас мы сделали такую примитивную форму, на которой расположили реквизиты. После того, как мы «перетащили»  реквизит в элементы, то на форме был создан элемент формы. В нашем случае это поле формы. Если мы сейчас зайдем в палитру свойств поля ввода, то увидим, что он связан с реквизитом посредством  свойства ПутьКДанным.

Свойство ПутьКДанным элемента формы

Если нажать на кнопку «…» свойства ПутьКДанным, то у разработчика есть возможность поменять привязанный к этому элементу реквизит формы.

Изменяем свойство ПутьКДанным элемента формы

Сейчас научимся использовать реквизиты в программном коде. Из статьи, посвященной архитектуре управляемой формы 1С 8.3 Вы знаете, что выполнение кода на форме возможно под директивами &НаКлиенте &НаСервере и  &НаСервереБезКонтекста.  Доступ к реквизитам формы возможен только в процедурах и функциях, которые выполняются на &НаКлиенте и &НаСервере.

Для наглядности выполним небольшую задачу: создадим команду, при выполнении которой Фамилия, Имя, Отчество и дата Рождения будут складываться в ФИО + Дата рождения.

Создадим локальную команду формы. Для этого на закладке «Команды» в подзакладке «Команды формы» необходимо нажать на кнопку «Добавить»

Добавление команды управляемой формы 1С

После создания команды, справа откроется палитра свойств новой команды, где мы зададим её название.

Название команды управляемой формы 1С

Но команда – это выполнение некоторых действий на форме.  Чтобы действия осуществились необходимо создать обработчик команды. Для создания обработчика команды нужно нажать на кнопку «Лупа» свойства действия. После этого откроется окно выбора места размещения обработчика.

Выбор расположения обработчика команды управляемой формы

Мы выберем расположение НаКлиенте, поскольку для тех действий, которые мы хотим осуществить вполне хватит клиентского контекста.

После выбора места расположения обработчика, в модуле формы будет создана процедура под директивой &НаКлиенте, в которой мы напишем несложный код. В этом коде к реквизитам формы мы будем обращаться просто как к переменным. Мы можем это делать в клиентском и серверном контексте.

&НаКлиенте
Процедура СформироватьФИО(Команда)

    ФИО = Фамилия + " " +
               Имя + " " +
               Отчество + ", д.р. " +

    Формат(ДатаРождения, "ДЛФ=D");

КонецПроцедуры

В этом коде, я преобразовал дату в строку при помощи функции формат.

Обратите внимание, после создание процедуры в палитре свойств команды свойство Действие заполнилось названием нашей новой процедуры.

Свойство Действие команды управляемой формы

И последним шагом нам осталось нашу команду разместить на управляемой форме. Просто перетащим её мышкой в закладку Элементы

Перетаскиваем команду в закладки Элементы

При этом на форме появится кнопка.

Сохраним обработку и попробуем выполнить нашу команду.

Работа команды на управляемой форме

Как видите, к реквизитам формы в модуле формы можно обращаться напрямую, как к переменным, но только если процедура или функция выполняется под директивами &НаКлиенте и &НаСервере.

Управляемое приложение 1С 8.3

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси»

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 15% — 48PVXHeYu

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Содержание:

1.     Добавление реквизитов на 1С управляемые формы

2.     Добавить элементы на форму

3.     Установка событий элементам формы

При адаптации типовых конфигураций 1С часто приходится изменять в 1С 8 управляемые формы. Такие адаптации сложно потом поддерживать при обновлении. Такие изменения приходится вносить вручную заново, перепроверять корректность изменений в каждом обновлении. И если таких изменений множество, то каждое обновление может представлять серьезные трудозатраты. Есть несколько решений, которые позволяют упростить поддержку и обновление измененных систем 1С. Одно из них – это программное изменение форм.

Вести разработку в таком режиме получается немного дольше, чем прямое изменение формы. Но это хорошо компенсируется в дальнейшем при поддержке и обновлении системы 1С. На самом деле ничего сложного в этом нет, просто нужно привыкнуть.

Чтобы упростить разработку изменений формы, можно воспользоваться небольшой хитростью. Все изменения можно сначала внести на форму через конфигурирование и отладить доработку формы. После преобразовать программные изменения в код.

Изменения, которые нужны в форме изначально, стоит вносить в процедуре «ПриСозданииНаСервере». Для внесения изменений лучше сделать отдельную процедуру (например, «ДополнитьФормуПрограммно») и вызывать ее в штатной процедуре «ПриСозданииНаСервере», тогда изменение типовой формы 1С будет выглядеть одной строчкой:

Согласитесь, обновить доработанную таким образом форму значительно проще, чем вручную сравнивать и вносить все изменения формы при каждом обновлении. Конечно при сильном изменении типовой формы, могут потребоваться правки в процедуре программного дополнения формы, но такие случаи довольно редкие.

Рассмотрим на примерах, как делать доработку управляемых форм кодом в 1С. 

1.          Добавление реквизитов на 1С управляемые формы

Если в ходе разработки изменилась типовая структура объекта, то добавлять новые реквизиты на форму нет необходимости. Эти реквизиты будут доступны по пути «Объект.НовыйРеквизит».

Но иногда нужно добавить реквизит формы. Например, «Статус документа», который будет заполняться из специального регистра при открытии формы. Добавить новые реквизиты можно, открыв в 1С табличный документ, управляемая форма изменяется через команду ИзменитьРеквизиты(«ДобавляемыеРеквизиты», «УдаляемыеРеквизиты»).

«ДобавляемыеРеквизиты» и «УдаляемыеРеквизиты» – это массивы с элементами типа «РеквизитФормы». Тут все просто – «Добавляемые» добавляются, «Удаляемые» – удаляются.

Функция РеквизитФормы («ИмяРеквизита», «ТипРеквизита», «Путь», «Заголовок») создает объект типа «РеквизитФормы».

Тут важно понимать, что «ИмяРеквизита» содержит имя без точек. То есть имя без пути реквизита. Если нужно добавить реквизит, например, табличной части объекта, то уже в реквизите «Путь» указать путь к ТЧ реквизита – «Объект.Товары». «ТипРеквизита» задается через объект «ОписаниеТипов».

В примере ниже я добавил два реквизита «ЭтоСборка» для табличной части «Товары» у объекта и «СтатусОбработки» на форму документа. 

2.          Добавить элементы на форму

После программного добавления реквизитов на форму нужно добавить элементы на форму или изменить свойства текущих.

Для добавления новых элементов на форму есть два метода:

­-Элементы.Добавить(«ИмяЭлемента», «ТипЭлемента», «Родитель»).

-Элементы.Вставить(«ИмяЭлемента», «ТипЭлемента», «Родитель», «Элемент»).

«ИмяЭлемента» должно быть уникальным в рамках элементов формы. Лучше добавить какой-то префикс, чтобы не возникло пересечений с типовыми элементами формы.

«ТипЭлемента» имеет не так уж много вариантов. Это «ПолеФормы», «ГруппаФормы», «ДекорацияФормы», «КнопкаФормы» и «ТаблицаФормы». Все остальные свойства назначаются через «Вид» создаваемого элемента. Например, поле с типом булево лучше сделать «флажком», установив вид элементу «ВидПоляФормы.ПолеФлажка».

В свойстве «Родитель» нужно указать группу или таблицу формы, в которую будет входить новый элемент. Также можно добавить элемент непосредственно на управляемую форму без подчинения другим элементам.

Для функции вставить дополнительно указывается «Элемент», перед которым будет вставлен новый создаваемый элемент формы.

На примере ниже я добавил статус обработку в форму шапки и поле флажка в табличную часть товары перед единицей измерения. 

3.          Установка событий элементам формы

Ну и конечно же, мало просто добавить элементы на форму. Система должна реагировать на действия пользователя с формой.

Для установки событий элементам нужно использовать процедуру УстановитьДействие («ИмяСобытия», «Действие»).

«ИмяСобытия» — имя события, которое нужно отработать. Например, «ПриИзменении», «Очистка», «ОбработкаВыбора» и т.п.

«Действие» — процедура отработки события. Самое главное процедура должна содержать параметры необходимые для выполняемого события. Например, процедура «ПриИзменении» должна иметь параметр «Элемент».

Также программно можно задавать прочие доступные свойства новых элементов формы. Например, установить видимость кнопки очистки:

НовыйЭлемент.КнопкаОчистки = Истина;

Получилась вот такая процедура программного заполнения управляемой формы:

Код для копирования:

&НаСервере

Процедура КЛ_ДополнитьФормуПрограммно()

МассивРеквизитовФормы = Новый Массив;

//Новый реквизит Товары.КЛ_ЭтоСборка

НовыйРеквизитФормы = Новый РеквизитФормы(«КЛ_ЭтоСборка»,

           Новый ОписаниеТипов(«Булево»)

           ,»Объект.Товары»

           ,»Это сборка»);

МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);

//Новый реквизит КЛ_СтатусОбработки

НовыйРеквизитФормы = Новый РеквизитФормы(«КЛ_СтатусОбработки»,

           Новый ОписаниеТипов(«ПеречислениеСсылка.СтатусыДокументовРеализации»)

           ,

           ,»Статус обработки»);

МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);

ИзменитьРеквизиты(МассивРеквизитовФормы);

НовыйЭлемент = Элементы.Добавить(«КЛ_СтатусОбработки», Тип(«ПолеФормы»), Элементы.ГруппаШапкаЛевая);

НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

НовыйЭлемент.КнопкаОчистки = Истина;

НовыйЭлемент.УстановитьДействие(«ПриИзменении»,»КЛ_ПриИзмененииСтатусаОбработки»);

НовыйЭлемент = Элементы.Вставить(«КЛ_ЭтоСборка», Тип(«ПолеФормы»),Элементы.Товары,Элементы.ТоварыКоличество);

НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;

КонецПроцедуры

Специалист компании ООО «Кодерлайн»

Кирилл Карцев.

Посмотрим, как можно программно добавить реквизиты и новые элементы на форму. В форме элемента справочника «Номенклатура» создадим два реквизита формы и элементы для них. Новые элементы объединим в группу с горизонтальной группировкой.

Сейчас форма имеет следующий вид:

После добавления новых элементов она будет иметь вид:

Итак, добавляем реквизиты:

  • ЕдиницаИзмерения, тип СправочникСсылка.ЕдиницыИзмерения;
  • ТекущийОстаток, тип Число.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    #Область ДобавлениеРеквизитовФормы

    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив();

    // Описываем новые ревизиты формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        ,
        "Единица измерения"
    );
    РеквизитТекущийОстаток = Новый РеквизитФормы(
        "ТекущийОстаток",
        Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)),
        ,
        "Текущий остаток"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);
    ДобавляемыеРеквизиты.Добавить(РеквизитТекущийОстаток);

    // Добавляем новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);

    #КонецОбласти

    #Область ДобавлениеЭлементовФормы

    // Добавляем группу без отображения на форме
    НоваяГруппаФормы = Элементы.Добавить(
        "ЕдиницаИзмеренияОстаток",
        Тип("ГруппаФормы")
    );
    НоваяГруппаФормы.Вид                 = ВидГруппыФормы.ОбычнаяГруппа;
    НоваяГруппаФормы.Отображение         = ОтображениеОбычнойГруппы.Нет;
    НоваяГруппаФормы.ОтображатьЗаголовок = Ложь;
    НоваяГруппаФормы.Группировка         = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;

    // Добавляем элементы внутрь новой группы
    НовыйЭлемент = Элементы.Добавить(
        "ЯчейкаХранения",
        Тип("ПолеФормы"),
        НоваяГруппаФормы
    );
    НовыйЭлемент.ПутьКДанным    = "ЕдиницаИзмерения";
    НовыйЭлемент.Вид            = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр = Истина;

    НовыйЭлемент = Элементы.Добавить(
        "ТекущийОстаток",
        Тип("ПолеФормы"),
        НоваяГруппаФормы
    );
    НовыйЭлемент.ПутьКДанным    = "ТекущийОстаток";
    НовыйЭлемент.Вид            = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр = Истина;

    #КонецОбласти

    #Область ЗаполнениеДанных

    // Имитируем заполнение данных
    ЭтаФорма.ЕдиницаИзмерения = ПредопределенноеЗначение(
        "Справочник.ЕдиницыИзмерения.Штука"
    );
    ЭтаФорма.ТекущийОстаток = 12;

    #КонецОбласти

КонецПроцедуры

Для удаления необходимо передать массив реквизитов на удаление в качестве второго параметра метода формы ИзменитьРеквизиты(). Удалять можно только реквизиты, созданные программно.

Теперь посмотрим, как можно изменить основной реквизит формы. Изменим табличную часть Состав документа РасходнаяНакладная:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив();

    // Описываем новый ревизит формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        "Объект.Состав",
        "Единица измерения"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);

    // Добавляем новый реквизит в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);

    // Добавляем элемент формы для нового реквизита
    НовыйЭлемент = Элементы.Добавить(
        "ЕдиницаИзмерения",
        Тип("ПолеФормы"),
        Элементы.Состав
    );
    НовыйЭлемент.ПутьКДанным = "Объект.Состав.ЕдиницаИзмерения";
    НовыйЭлемент.Вид         = ВидПоляФормы.ПолеВвода;

КонецПроцедуры

Важно понимать, что данные добавленного реквизита сохраняться в ИБ не будут.

Поиск:
1С:Предприятие • Изменить реквизиты • При создании на сервере • Реквизит • Управляемая форма • Элемент формы

В данной статье описаны примеры программного создания объектов управляемой формы 1С : элементов, команд, реквизитов, а также описание стандартных возможностей для работы с ними.

Contents

  • 1 Введение в управляемая форма 1С реквизиты элементы команды
  • 2 Программное переопределение обработчиков событий формы и элементов формы
  • 3 Программное создание групп формы.
  • 4 Программное добавление команды на форму.
  • 5 Программное создание декораций форм.
  • 6 Программное добавление реквизита на форму.
  • 7 Вывод реквизитов на форму.
  • 8 Вызов процедур при создании на сервере 1С
  • 9 Некоторые советы при программном редактировании формы
  • 10 Полезные ссылки

Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.

Примеры работы с объектом «ДанныеФормыКоллекция» и созданием дин. списка и таблицы значений программно можно будет посмотреть в части 2.

Для запуска обработки в режиме предприятия необходимо наличие объектов «Справочники.Номенклатура», подчиненный ему «Справочники.ХарактеристикиНоменклатуры» и «РегистрыСведений.ЦеныНоменклатуры”.

Программное переопределение обработчиков событий формы и элементов формы

Переопределить обработчики событий формы можно в обработчике «ПриСозданииНаСервере» (кроме самого обрабочика «ПриСозданииНаСервере») или в теле модуля формы в контексте сервера (например, Переопределение событий ПриЧтениинаСервере и ПриСозданииНаСервере).

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭтаФорма.УстановитьДействие(“ОбработкаВыбора”, “пр_ОбработкаВыбора”)
КонецПроцедуры

В теле модуля формы:

#Если Сервер Тогда
    ЭтаФорма.УстановитьДействие("ПриСозданииНаСервере", "пр_ПриСозданииНаСервере");
#КонецЕсли

А в новой процедуре нужно добавить вызов основной, если такая процедура есть.

&НаСервере
Процедура пр_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПриСозданииНаСервере(Отказ, СтандартнаяОбработка);
КонецПроцедуры

Аналогично можно поступить и с обработчиками элементов формы:

Элементы.Номенклатура.УстановитьДействие(“ПриИзменении”, “пр_НоменклатураПриИзменении”)

Программное создание групп формы.

&НаСервере
Процедура пр_СоздатьГруппы()
    
    ГруппаСтраницы =  Элементы.Добавить("пр_Страницы", Тип("ГруппаФормы"),ЭтаФорма);
    ГруппаСтраницы.Вид = ВидГруппыФормы.Страницы;
    
    НоваяСтраница = Элементы.Добавить("пр_Страница", Тип("ГруппаФормы"),ГруппаСтраницы);
    НоваяСтраница.Вид = ВидГруппыФормы.Страница;
    НоваяСтраница.Заголовок = "Страница 1";
    
    НоваяГруппа = Элементы.Добавить("пр_Группа1", Тип("ГруппаФормы"),НоваяСтраница);
    НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
    НоваяГруппа.Заголовок = "Группа 1";
    
КонецПроцедуры

Доступные виды групп формы:

Программное добавление команды на форму.

Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.

&НаСервере
Процедура пр_СоздатьНовуюКоманду()
    
    //создать новую команду у формы
    НоваяКоманда    		 = Команды.Добавить("пр_Команда1");
    НоваяКоманда.Действие     = "пр_Команда1";
    НоваяКоманда.Картинка     = БиблиотекаКартинок.Облако;
    НоваяКоманда.Отображение = ОтображениеКнопки.Картинка;
    
    //вывести команду в элементы
    ЭлементКоманда    			 = Элементы.Добавить("пр_Команда1", Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
    ЭлементКоманда.Заголовок     = "Вывести сообщение";
    ЭлементКоманда.ИмяКоманды     = "пр_Команда1";

    //удалить команду
    //Команды.Удалить(НоваяКоманда);
    
КонецПроцедуры

&НаКлиенте
Процедура пр_Команда1(Команда)
    
    Сообщить("Команда выполнена.");
    
КонецПроцедуры

Программное создание декораций форм.

&НаСервере
Процедура пр_СоздатьДекорацию()
    
    //добавить надпись
    Элемент    			 = Элементы.Добавить("Надпись1", Тип("ДекорацияФормы"), Элементы["пр_Группа1"]);
    Элемент.Вид    		 = ВидДекорацииФормы.Надпись;
    Элемент.Заголовок    	 = "Добавленная надпись";
 
    //для того, чтобы добавить картинку, необходимо выбрать ВидДекорацииФормы.Картинка
    Элемент = Элементы.Добавить("Картинка1", Тип("ДекорацияФормы"), Элементы["пр_Группа1"]);
    Элемент.Вид = ВидДекорацииФормы.Картинка;
    Элемент.Картинка = БиблиотекаКартинок.Бесконечность;  
  
КонецПроцедуры

Программное добавление реквизита на форму.

Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.

&НаСервере
Процедура пр_СоздатьРеквизиты()
    
	// Массив для новых реквизитов
	ДобавляемыеРеквизиты    = Новый Массив;
   	 
	// Опишем ревизиты формы
	Реквизит_Использование = Новый РеквизитФормы("пр_Использование",    Новый ОписаниеТипов("Булево"), "", "Использование");
	Реквизит_Номенклатура = Новый РеквизитФормы("пр_Номенклатура",    Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "", "Номенклатура");
	Реквизит_Характеристика = Новый РеквизитФормы("пр_Характеристика",    Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"), "", "Характеристика");
  	 Реквизит_Количество = Новый РеквизитФормы("пр_Количество",    Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), "", "Количество");
  	 Реквизит_УдалитьКоличество = Новый РеквизитФормы("пр_УдалитьКоличество",    Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), "", "Удалить_Количество");
       //если используется БСП, то можно для определения описания типов использовать функцию
       //ОбщегоНазначения.ОписаниеТипаСтрока(ДлинаСтроки)
       //ОбщегоНазначения.ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено)
       //ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты)
  	 Реквизит_Информация = Новый РеквизитФормы("пр_Информация",    ОбщегоНазначения.ОписаниеТипаСтрока(100), "", "Информация");
    
       // Для наглядности заполним массив после описания реквизитов формы
	ДобавляемыеРеквизиты.Добавить(Реквизит_Использование);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Номенклатура);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Характеристика);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Количество);
	ДобавляемыеРеквизиты.Добавить(Реквизит_УдалитьКоличество);
	ДобавляемыеРеквизиты.Добавить(Реквизит_Информация);
    
	// Добавим новые реквизиты в форму
	ИзменитьРеквизиты(ДобавляемыеРеквизиты);
   	 
КонецПроцедуры

&НаСервере
Процедура пр_УдалитьРеквизиты()
    
	// Массив для удаляемых реквизитов
	УдаляемыеРеквизиты    = Новый Массив;
    
    //указываем путь к удаляемому реквизиту
	УдаляемыеРеквизиты.Добавить("пр_УдалитьКоличество");
    //К добавленным реквизитам нужно обращаться через переменную ЭтаФорма
    
	// Добавим новые реквизиты в форму
	ИзменитьРеквизиты(,УдаляемыеРеквизиты);
   	 
КонецПроцедуры

Вывод реквизитов на форму.

&НаСервере
Процедура пр_ВывестиРеквизитыНаФорму()
    
    НовыйЭлемент = Элементы.Добавить("пр_Использование", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Использование";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеФлажка;
    НовыйЭлемент.ПоложениеЗаголовка    	   = ПоложениеЗаголовкаЭлементаФормы.Право;
    //установим обработчик события элементы
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "пр_ИспользованиеПриИзменении");
    
    НовыйЭлемент = Элементы.Добавить("пр_Номенклатура", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Номенклатура";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеВвода;
    //установить параметр выбора элемента
    НовыйМассив = Новый Массив();
    НовыйПараметр = Новый ПараметрВыбора("Отбор.ПометкаУдаления", Ложь);
    НовыйМассив.Добавить(НовыйПараметр);
    НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
	НовыйЭлемент.ПараметрыВыбора = НовыеПараметры;
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "пр_НоменклатураПриИзменении");

    НовыйЭлемент = Элементы.Добавить("пр_Характеристика", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Характеристика";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеВвода;
	НовыйЭлемент.Заголовок                	= "Характеристика номенклатуры";
    //добавить связь параметров выбора по реквизиту владелец в зависимости от выбранной номенклатуры
    НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Владелец", "пр_Номенклатура");
    НовыйМассив = Новый Массив();
    НовыйМассив.Добавить(НоваяСвязь);
	НовыйЭлемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыйМассив);    
    НовыйЭлемент.УстановитьДействие("ПриИзменении", "пр_ХарактеристикаПриИзменении");
    
    НовыйЭлемент = Элементы.Добавить("пр_Количество", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Количество";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеВвода;
    //установить формат
	НовыйЭлемент.ФорматРедактирования   	   = "ЧДЦ=0; ЧРГ=.; ЧН=Отсутствует";
    
    НовыйЭлемент = Элементы.Добавить("пр_Информация", Тип("ПолеФормы"), Элементы.пр_Страница1);
	НовыйЭлемент.ПутьКДанным              	= "пр_Информация";
	НовыйЭлемент.Вид                      	= ВидПоляФормы.ПолеВвода;
    //установить список выбора
    НовыйЭлемент.РежимВыбораИзСписка    	   = Истина;
    Массив = Новый Массив;
    Массив.Добавить("Необходимо дозаказать");    
    Массив.Добавить("Достаточно");    
    Массив.Добавить("Оформить полный заказ");    
    НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Массив);
    
КонецПроцедуры

&НаКлиенте
Процедура пр_ИспользованиеПриИзменении(Элемент)
КонецПроцедуры

Вызов процедур при создании на сервере 1С

После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.

&НаСервере

&НаСервере
Процедура пр_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	//установим заголовок формы 
	ЭтаФорма.Заголовок 		= "Шаблон для программной работы с реквизитами, командами и элементами формы";
	ЭтаФорма.АвтоЗаголовок 	= Ложь;
	
	пр_СоздатьГруппы();
	пр_СоздатьНовуюКоманду();
	пр_СоздатьДекорацию();
	пр_СоздатьРеквизиты();
	пр_УдалитьРеквизиты();
	пр_ВывестиРеквизитыНаФорму();
	
КонецПроцедуры

Некоторые советы при программном редактировании формы

  • Если вы не используете префиксы при создании новых команд и элементов рекомендуется проверять существование создаваемых объектов по имени с помощью метода Найти(), который вернет Неопределено, если объект в коллекции не найден:
    • Элементы.Найти(«пр_Владелец»);
    • Команды.Найти(«пр_НоваяКоманда»);
  • Чтобы проверить уникальность реквизита на форме можно воспользоваться следующей функцией:
&НаКлиентеНаСервереБезКонтекста
// Функция определяет существует ли реквизит у объекта.
//
Функция ЕстьРеквизитОбъекта(мОбъект, ИмяРеквизита)
    
    КлючУникальности   = Новый УникальныйИдентификатор;
    СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
    ЗаполнитьЗначенияСвойств(СтруктураРеквизита, мОбъект);
    Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
    
КонецФункции // ЕстьРеквизитОбъекта()
  • Свойства, методы и коллекции управляемой формы описаны в синтакс-помощнике в разделе «Интерфейс (управляемый)»;
  • Изучите БСП, если она имеется в вашей конфигурации. Например в общем модуле «ОбщегоНазначения» уже описаны функции для создания объекта ОписаниеТипов, необходимого при создании новых реквизитов на форме:
    • ОбщегоНазначения.ОписаниеТипаСтрока(ДлинаСтроки) — Создает объект ОписаниеТипов, содержащий тип Строка;
    • ОбщегоНазначения.ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено) — Создает объект ОписаниеТипов, содержащий тип Число;
    • ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты) — Создает объект ОписаниеТипов, содержащий тип Дата;
    • ОбщегоНазначенияВызовСервера.ЦветСтиля(ИмяЦветаСтиля) — Функция получает цвет стиля по имени элемента стиля;
    • ОбщегоНазначенияВызовСервера.ШрифтСтиля(ИмяШрифтаСтиля) — Функция получает шрифт стиля по имени элемента стиля.

Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:

Полезные ссылки

1. Типовой механизм упрощенного изменения конфигурации в ERP 2.0 и УТ 11
2. Типовой функционал модификации конфигурации линейки ERP-решений (УТ 11, КА 2 и ERP 2)
3. 1С Управляемые Формы. Программное создание таблицы значений и динамического списка (Часть 2)

Как программно заполнить реквизит формы?

Автор archmea, 11 авг 2022, 14:16

0 Пользователей и 2 гостей просматривают эту тему.

Здравствуйте. Подскажите, пожалуйста, как программно заполнить реквизит формы? Есть справочник Заметки. У формы элемента справочника есть реквизит ФорматированныйТекст (тип ФорматированныйДокумент). Когда новый элемент справочника создается интерактивно, поле ФорматированныйТекст пользователь заполняет вручную. Во внешней обработке я программно создаю новый элемент справочника. Как мне заполнить реквизит ФорматированныйДокумент?

&НаСервере
Процедура СоздатьЗаметкуНаСервере()
    СпрЗаметки = Справочники.Заметки;
    НоваяЗаметка = СпрЗаметки.СоздатьЭлемент();
    НоваяЗаметка.ДатаИзменения = ТекущаяДата();
    НоваяЗаметка.Предмет = Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович");
    НоваяЗаметка.Пометка = Перечисления.ЦветаЗаметок.Зеленый;
    Текст = "Тест5" + Символы.ПС + "тест 5";
    НоваяЗаметка.Содержание = Новый ХранилищеЗначения(Текст);
    НоваяЗаметка.Записать();
КонецПроцедуры


archmea, так после создания элемента, откройте его,
если ваша форма элемента настроена на это
НоваяЗаметка.Содержание = Новый ХранилищеЗначения(Текст);
то вы увидите ваш текст

«Тест5
тест 5″

(главное правильно заполнить элемент, а функционал формы отображает его по своим алгоритмам)

  • 1 пользователь сказал спасибо!

если помогло нажмите: Спасибо!


LexaK, открывала, конечно. Текста нет.  :(


Так может, в хранилище-то не строку сохранять, а форматированный документ?

  • 1 пользователь сказал спасибо!


antoneus, может)

    ФормДок = Новый ФорматированныйДокумент;
    ФормДок.Добавить(Текст, Тип("ТекстФорматированногоДокумента"));
    НоваяЗаметка.Содержание = Новый ХранилищеЗначения(ФормДок);
Всё получилось, спасибо)


Заполнить поле формы

Я
   PeterBayan

07.12.11 — 09:44

В 8.2 в элементе управляемой формы «ПолеФормы» вида «ПолеВвода» необходимо программно установить значение через элемент формы, то есть Элементы.ДатаНачала….Как это сделать по аналогии с 8.1 ЭлементыФормы.ДатаНачала.Значение=…?

  

Партнерская программа EFSOL Oblako

   GROOVY

1 — 07.12.11 — 09:46

Значение через элемент формы не устанавливают.

   Wobland

2 — 07.12.11 — 09:46

реквизит же связан с элементом? или как это в терминах УФ звучит?

   GROOVY

3 — 07.12.11 — 09:46

Обращайтесь напрямую к реквизиту (формы).

   Defender aka LINN

4 — 07.12.11 — 09:49

ЭлементыФормы.ДатаНачала.Значение — вас кто учил так значения реквизитам давать, интересно?

   chingiz

5 — 07.12.11 — 09:50

(0) ДатаНачала =

   PeterBayan

6 — 07.12.11 — 09:53

Проблема в том, что поле формы не заполняется значением соответствующего ему реквизита. То есть, программно я пишу:ДатаНачала=хххххх, открываю форму, где имеется поле ,связанное с соответствующим реквизитом, там пусто

   vmv

7 — 07.12.11 — 09:56

(6) свойство «ПутьКДанным» посмотрите на форме у этого ЭЛЕМЕНТА

   GROOVY

8 — 07.12.11 — 09:59

(6) Такого не может быть.

   PeterBayan

9 — 07.12.11 — 10:02

Свойство «ПутьКДанным» установлено: Объект.ДатаНачала. То есть ДатаНачала-это реквизит объекта, а не формы, может в этом все дело?

   GROOVY

10 — 07.12.11 — 10:04

Так и обращайтесь к нему как Объект.ДатаНачала =

   Sulimov

11 — 07.12.11 — 10:06

Я вот так делал, все работает:

&НаКлиенте

   Процедура ПриОткрытии(Отказ)

       ЭтаФорма.Объект.НачПериода = НачалоМесяца(ТекущаяДата());

       ЭтаФорма.Объект.КонПериода = КонецМесяца(ТекущаяДата());

       
       ПрочитатьНаСервере()

КонецПроцедуры

   vmv

12 — 07.12.11 — 10:08

(11) абалдет, не делай так больше

   GROOVY

13 — 07.12.11 — 10:08

(11) Мда…

Без ЭтаФорма!

   GROOVY

14 — 07.12.11 — 10:09

Обращаться к элементам формы нужно для управления ими а не их значениями. Например сделать их доступными или невидимыми, изменить ширину, шрифт и пр.

   GROOVY

15 — 07.12.11 — 10:10

(11) Это фаще жесть…

   Sulimov

16 — 07.12.11 — 10:12

А что такого страшного случиться, если оставить ЭтаФорма.Объект….?

   GROOVY

17 — 07.12.11 — 10:15

Случится понимание полного непонимания того что пишет автор. Автор не понимает к чему он в контексте может обращаться, к чему нет.

Вообще можно писать: ЭтаФОрма.ЭтаФОрма.ЭтаФорма.Объект. …

   PeterBayan

18 — 07.12.11 — 11:29

А почему при открытии подчиненной формы с основным реквизитом, таким же как у владельца этой формы, элементы формы не заполняются данными реквизита объекта?

   GROOVY

19 — 07.12.11 — 11:33

(18) Форма управляемая? Открывается интерактивно или программно? Что передается в форму? Связи параметров выбора настроены? Почему данные должны заполняться сами?

   PeterBayan

20 — 07.12.11 — 11:39

Форма управляемая, открывается программно. Все.

   GROOVY

21 — 07.12.11 — 11:50

При программном открытии параметры заполнения передаются? Код в студию.

   PeterBayan

22 — 07.12.11 — 12:21

похоже здесь у меня пробел знаний. Параметры не передаются

  

GROOVY

23 — 07.12.11 — 12:23

Понравилась статья? Поделить с друзьями:
  • Какие реквизиты обязательны в договоре поставки
  • Какие документы необходимы для открытия бизнеса
  • Как управлять бизнесом в гта 5 в одиночной игре
  • Какие реквизиты обязательны для делового письма
  • Какие документы нужны чтобы открыть свой бизнес