Программно заполнить реквизиты обработки 1с

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


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


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


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


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


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

Следующая ситуация: имеется внешняя обработка с некоторым набором реквизитов (СписокСтатей1, …, СписокСтатей9, ВидРасчета — тип: СписокЗначений). У обработки есть две управляемые формы — «Форма» и «ФормаНастройки». Из «Формы» вызывается «ФормаНастройки», затем по кнопке «ВосстановитьПоУмолчанию» происходит заполнение реквизитов формы:

[code]

&НаСервере

Процедура ВосстановитьНаСервере()

    
    ТекОбработка = РеквизитФормыВЗначение(«ОбработкаОбъект»);

    
    ТекОбработка.СписокСтатей1.Очистить(); //Оплата за сверхурочные часы, включая НДФЛ 13%:

    ТекОбработка.СписокСтатей1.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду(«СВХУР»));

    ТекОбработка.СписокСтатей1.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду(«ПРАЗД»));

    ТекОбработка.СписокСтатей1.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду(«ПРДОП»));

    
        // и т.д.

    
    ТекОбработка.ВидРасчета.Очистить();

    ТекОбработка.ВидРасчета.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду(«БЛН»));

    
    ЗначениеВРеквизитФормы(ТекОбработка, «ОбработкаОбъект»);

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

&НаКлиенте

Процедура Восстановить(Команда)

    ВосстановитьНаСервере();

КонецПроцедуры [/code]

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

    Как я понимаю, проблема при заполнении реквизитов обработки в «ФормеНастройки». Т.е. если бы это был внутренний прикладной объект БД (Справочник, Документ), тогда перед обновлением реквизита на форме (ЗначениеВРеквизитФормы) достаточно было бы записать объект и тогда на «Форме» значение реквизита ВидРасчета было бы с данными. Однако в данном случае у объекта ВнешняяОбработка метода Записать() нет. Как мне заполнить реквизиты обработки, чтобы я мог использовать их в запросе, в другой форме?

Рассмотрим такую задачу. Есть сложная форма, с большим количеством реквизитов. Для многих из них в конфигураторе установлено свойство ЗаполнятьИзДанныхЗаполнения. В результате при открытии этой формы для нового объекта ее реквизиты могут быть заполнены различными начальными значениями. Это зависит и от точки навигации, в которой расположена команда создания нового объекта, и от программного алгоритма, описанного в модуле самого объекта.

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

Можно было бы получить программный объект формы и затем напрямую установить значения ее реквизитов. Но тогда в этом месте программного кода пришлось бы дублировать весь тот алгоритм, который отвечает за начальное заполнение формы. Это может быть трудоемко, и поддерживать такое решение сложно, т. к. при изменении этого алгоритма его придется менять не в одном месте, в модуле объекта, а синхронно еще в нескольких местах конфигурации. Нет никакой гарантии, что что-то не будет пропущено и что все такие изменения будут работать правильно.

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

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

ЭлементыОтбора = Новый Структура("Поставщик, Склад", СсылкаНаПоставщика, СсылкаНаСклад);
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора);
ОткрытьФорму("Документ.Накладная.ФормаОбъекта", ПараметрыФормы);

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

В нашем случае платформа передала бы в данные заполнения ссылку на поставщика и ссылку на склад, по которым отобран список накладных. Поэтому мы в данные заполнения передаем структуру, содержащую два элемента: для реквизита Поставщик — ссылку на поставщика, а для реквизита Склад — ссылку на склад.

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)

    Если ДанныеЗаполнения = Неопределено Тогда 
        // «Простой» ввод новой накладной
        // ..........                     
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
        // Новая накладная создается командой из отобранного списка накладных
        Поставщик = ДанныеЗаполнения.Поставщик;
        Склад = ДанныеЗаполнения.Склад;
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда
        // Новая накладная создается на основании элемента справочника «Поставщики»
        Поставщик = ДанныеЗаполнения.Ссылка;
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Склады") Тогда
        // Новая накладная создается на основании элемента справочника «Склады»
        Склад = ДанныеЗаполнения.Ссылка;
    КонецЕсли;

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

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

В этом случае можно создать программно объект, а затем вызвать его метод Заполнить(). В этом случае платформа выполнит все те же действия и вызовет все те же события, которые она бы вызвала в случае интерактивного создания нового объекта. В метод Заполнить() в качестве параметра точно так же можно передать структуру, содержащую данные заполнения:

ОбъектНакладной = Документы.Накладная.СоздатьДокумент();
ЭлементыОтбора = Новый Структура(
    "Поставщик, Склад",
    СсылкаНаПоставщика,
    СсылкаНаСклад
);
ОбъектНакладной.Заполнить(ЭлементыОтбора);
// Действия, имитирующие интерактивный ввод данных пользователем
// ..........
ОбъектНакладной.Дата = ТекущаяДатаСеанса();
// ..........
ОбъектНакладной.Записать();

Поиск:
1С:Предприятие • Заполнить • Заполнять из данных заполнения • Значение заполнения • Обработка заполнения • Управляемая форма

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

Прежде чем мы начнем разбирать вопросы программной работы с документами в 1С 8.3, хочу обратить Ваше внимание, что на управляемой форме в режиме тонкого клиента мы можем программно работать (создавать, записывать и проводить) с документами только в серверном контексте. То есть, ваша процедура или функция должна выполняться под директивами &НаСервере или &НаСервереБезКонтекста.

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

Создать документ 1С программно

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

Реквизиты документа в 1С 8.3

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

Форма обработки для создания документа

Для этой команды, я сделаю обработчики на клиенте и на сервере.

Создание обработчиков команды

В серверном обработчике мы и напишем код, который и будет создавать документ..

&НаСервере
Процедура СоздатьДокументПриходаНаСервере()

    ДокПриход = Документы.ПриходТовара.СоздатьДокумент();

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

&НаКлиенте
Процедура СоздатьДокументПрихода(Команда)
    СоздатьДокументПриходаНаСервере();
КонецПроцедуры

В этом коде я обратился к менеджеру документа ПриходТовара  (строка Документы.ПриходТовара), и использовал функцию менеджера документа СоздатьДокумент, которая и создает документ-объект. Переменная ДокПриход, которую мы создали будет иметь тип ДокументОбъект.ПриходТовара.

Следующим шагом, я присвою дату этому документу, для простоты, это будет текущая дата.

ДокПриход = Документы.ПриходТовара.СоздатьДокумент();
ДокПриход.Дата = ТекущаяДата();

Номер я присваивать не буду, потому что у объекта моего документа включено свойство Автонумерация.

Свойство автонумерация документа

В принципе, этого вполне достаточно, чтобы наш документ существовал. Но создав его при помощи функции СоздатьДокумент, мы не записали его непосредственно в базу. После выполнения кода выше, ни какого документа в базе не появится!

Записать документ 1С программно

Для того, чтобы документ 1С появился в базе, его необходимо записать.  Делается это при помощи метода документа-объекта Записать. Этот метод позволяет и записать, и провести документ. Он имеет два параметра, которые я разберу ниже. Но, метод Записать также можно использовать и без параметров, тогда он будет просто записывать документ. Что мы и сделаем.

ДокПриход = Документы.ПриходТовара.СоздатьДокумент();
ДокПриход.Дата = ТекущаяДата();
ДокПриход.Записать();

Все теперь документ появится в базе.

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

Создание пустого документа

Для того, чтобы что-то в нем появилось, нам необходимо заполнить этот документ.

Заполнить документ 1С программно

У нашего документа два реквизита «шапки» – Склад и Комментарий. Создадим на форме обработки реквизит управляемой формы Склад с соответствующим типом, для последующей записи его в шапку документа, а реквизит комментарий заполним в ручную.

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

Присвоим реквизитам созданного объекта-документа нужные значения, просто обратившись через точку к этим реквизитам.

ДокПриход = Документы.ПриходТовара.СоздатьДокумент();
ДокПриход.Дата = ТекущаяДата();
ДокПриход.Склад = Склад;
ДокПриход.Комментарий = "#Документ создан автоматически обработкой"
ДокПриход.Записать();

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

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

ДокПриход = Документы.ПриходТовара.СоздатьДокумент();
ДокПриход.Дата = ТекущаяДата();
ДокПриход.Склад = Склад;
ДокПриход.Комментарий = "#Документ создан автоматически обработкой";
Для Каждого стрТЗ Из ТЗ Цикл
    НовСтрТЧДокумента = ДокПриход.СписокТоваров.Добавить();
    НовСтрТЧДокумента.Номенклатура = стрТЗ.Номенклатура;
    НовСтрТЧДокумента.Количество   = стрТЗ.Количество;
    НовСтрТЧДокумента.Цена         = стрТЗ.Цена;
    НовСтрТЧДокумента.Сумма = НовСтрТЧДокумента.Количество*НовСтрТЧДокумента.Цена;
КонецЦикла;
ДокПриход.Записать();

В этом коде я обращаюсь к табличной части документа-объекта посредством точки (строка ДокПриход.СписокТоваров), получаю табличную часть этого объекта, и используя метод Добавить, создаю новую строку табличной части. А потом заполняю реквизиты табличной части документа данными из таблицы значений. Поскольку у нас названия реквизитов табличной части и таблицы значений совпадают, мы можем упростить код заполнения табличной части, используя метод ЗаполнитьЗначенияСвойств.

Для Каждого стрТЗ Из ТЗ Цикл
    НовСтрТЧДокумента = ДокПриход.СписокТоваров.Добавить();
    ЗаполнитьЗначенияСвойств(НовСтрТЧДокумента,стрТЗ);
    НовСтрТЧДокумента.Сумма = НовСтрТЧДокумента.Количество*НовСтрТЧДокумента.Цена;
КонецЦикла;


Всё! Мы можем смело создать документ, который будет заполнен.

Создание и заполнение документа 1С

Создание и заполнение документа 1С

Провести документ 1С программно

Все документы, которые мы создавали ранее были не проведены. Если мы хотим, чтобы документ был записан проведенным, то необходимо записывать его немного по-другому. Если раньше мы использовали метод Записать объекта документа без параметров, то теперь необходимо применять параметры этого метода. Данный метод имеет следующий синтаксис.

Записать(<РежимЗаписи>,<РежимПроведения>)

Оба параметра это системные перечисления. Первый параметр это перечисление РежимЗаписиДокумента, которое может принимать следующие значения:

РежимЗаписиДокумента.Запись
РежимЗаписиДокумента.Проведение
РежимЗаписиДокумента.ОтменаПроведения

Т.е. мы можем записать документ, провести документ и отменить проведение документа.

Во втором параметр РежимПроведения необходимо указывать системное перечисление РежимПроведениеДокумента, которое может принимать следующие значения:

РежимПроведенияДокумента.Неоперативный
РежимПроведенияДокумента.Оперативный

Т.е. мы можем провести документ как в оперативном режиме, так и в неоперативном. Если этот параметр не указан, то документ проводится в неоперативном режиме.

Изменим запись нашего документа: пусть он проводится в оперативном режиме.

ДокПриход.Записать(РежимЗаписиДокумента.Проведение,
                   РежимПроведенияДокумента.Оперативный);

Теперь документ будет сразу проведен при создании.

Изменить документ 1С программно

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

Обработка изменения документа

Как и в прошлый раз, я создам обработчик команды на сервере и на клиенте. И в серверном обработчике напишу код получения объекта из ссылки документа.

&НаСервере
Процедура ИзменитьДокументНаСервере()

    ДокОбъект = ДокументПрихода.ПолучитьОбъект();

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

&НаКлиенте
Процедура ИзменитьДокумент(Команда)
    ИзменитьДокументНаСервере();
КонецПроцедуры

Мы получили объект документа, используя метод ссылки на документ ПолучитьОбъект. Имейте в виду, что этот метод можно использовать или на сервере, или клиенте в режиме толстого клиента.  Переменная, которую мы создали будет иметь тип ДокументОбъект.ПриходТовара.

Изменим склад и проведем документ. В этот раз проведем в неоперативном режиме.

ДокОбъект = ДокументПрихода.ПолучитьОбъект();
ДокОбъект.Склад = Склад;
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение,
                   РежимПроведенияДокумента.Неоперативный);


Открыть документ 1С программно

Научимся открывать документ 1С программно. Для этого мы доработаем предыдущую обработку: после изменения документа откроем основную форму этого объекта для просмотра и возможного редактирования. Для открытия формы документа, мы будем использовать метод  ОткрытьФорму, в котором будем использовать параметр Ключ, где укажем ссылку на открываемый документ.

&НаСервере
Процедура ИзменитьДокументНаСервере()
    ДокОбъект = ДокументПрихода.ПолучитьОбъект();
    ДокОбъект.Склад = Склад;
    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение,
                       РежимПроведенияДокумента.Неоперативный);
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьДокумент(Команда)
    ИзменитьДокументНаСервере();
    ПараметрыОткрытия = Новый Структура("Ключ",ДокументПрихода);
    ОткрытьФорму("Документ.ПриходТовара.ФормаОбъекта",
                 ПараметрыОткрытия,,,,,,
                 РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры

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

Обработка изменения документа

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

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

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

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

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

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

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

Вступайте в мои группы:

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

Файлы материала
Описание

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

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

Для примера, стоит задача в конфигурации ЗУП 3.1 добавить реквизит «Способ отражения зарплаты в БУ» для позиции штатного расписания в группе “Дополнительные данные”.

Способ отражение в позиции штатного расписания

Создадим расширение и выполним следующую последовательность действий:

  1. Добавим в расширение справочник “Штатное расписание” и создадим реквизит “АВ_СпособОтражения” с типом данных “СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете”

добавление реквизита АВ_СпособОтражения в расширение

2. Заберем в расширение процедуру “ПриСозданииНаСервере” из общего модуля “УправлениеСвойствами”, программно добавим поле в форму и свяжем его с реквизитом объекта добавленного на первом шаге.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ШтатноеРасписание.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_СпособОтражения»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы);

//Вместо Добавить() можно использовать метод Вставить()

//в 4-й параметре указывается Элемент перед которым должен быть вставлен новый элемент.

//ЭлементФормы = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы, Форма.Элементы.Найти(«ИмяСледующегоЭлементаФормы»));

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_СпособОтражения»;

//ЭлементФормы.МногострочныйРежим = Истина;

//ЭлементФормы.Высота = 3;

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Образец расширения для скачивания в начале описания.

Программное добавление реквизита в табличную часть формы

Например, таким же способом, добавим в табличную часть “Рабочие места” реквизит “Спецжиры” с типом “Булево”.

Результат спецоценки условий труда с  колонкой спецжиры

Добавление реквизита в табличную часть

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Документ.РезультатыСпецоценкиУсловийТруда.Форма.ФормаДокумента» Тогда

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

ИмяЭлемента = «АВ_ЕстьСпецжиры»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(«Спецжиры», Тип(«ПолеФормы»), Форма.Элементы.РабочиеМеста);        

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

ЭлементФормы.ПутьКДанным = «Объект.РабочиеМеста.АВ_ЕстьСпецжиры»;

//ЭлементФормы.ТолькоПросмотр = Истина;

КонецЕсли;

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

КонецЕсли;

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

В результате получим табличную часть с новой колонкой.

Программное добавление табличной части на форму

Аналогично добавим табличную часть “АВ_ВредныеФакторы” на форму справочника “Профессии”.

Табличная часть добавленная через расширение

Добавление табличной части на форму

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ПрофессииРабочих.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_ВредныеФакторы»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда   

ЭлементФормыТаблица = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ТаблицаФормы»), ГруппаФормы);  

ЭлементФормыТаблица.ПутьКДанным = «Объект.АВ_ВредныеФакторы»;

ЭлементФормы = Форма.Элементы.Добавить(«ВредныйФактор», Тип(«ПолеФормы»), ЭлементФормыТаблица);

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_ВредныеФакторы.ВредныйФактор»;    

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Связь реквизитов формы с элементами формы

Кроме того, реквизиты формы можно создавать программно и связывать их с элементами формы

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

// Массив для новых реквизитов

ДобавляемыеРеквизиты = Новый Массив;

// Опишем ревизиты формы

Реквизит_РабочееМесто = Новый РеквизитФормы(«АВ_РабочееМесто», Новый ОписаниеТипов(«СправочникСсылка.РабочиеМестаОхраныТруда»), , «Рабочее место»);

// Заполним массив после описания реквизитов формы

ДобавляемыеРеквизиты.Добавить(Реквизит_РабочееМесто);

// Добавим новые реквизиты в форму

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

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

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

...

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

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

Форма.АВ_РабочееМесто = Форма.Объект.АВ_РабочееМесто;

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


Расширения, Типовые приемы, Шаблоны и заготовки

Инициализация реквизитов при создании нового объекта

Один из методов упрощения работы пользователя — это заполнение реквизитов нового объекта (элемент справочник, документ) значениями по умолчанию. Реализовать заполнение реквизитов можно двумя способами:

  1. в обработчике события формы элемента — ПриСозданииНаСервере;
  2. в обработчике события объекта — ОбработкаЗаполнения.

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


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

// Если ссылка у объекта пустая, значит он еще не записан,
// а следовательно он является новым объектом.
ЭтоНовыйОбъект = Объект.Ссылка.Пустая();

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

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

Второй способ намного проще, т.к. он предусмотрен платформой и рекомендован к использованию. Создадим в модуле объекта обработчик события ОбработкаЗаполнения и напишем программный код по заполнению реквизитов объекта без каких-либо проверок, потому что данное событие возникает при интерактивном вводе нового объекта. Более подробное описание обработчика события см. в синтакс-помощнике.


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

ЭтотОбъект.Ответственный = Пользователи.ТекущийПользователь();
ЭтотОбъект.Комментарий = "Документ создан " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

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

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

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