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

  Маркет42 - Место для твоих разработок  

Событие «При изменении» для реквизита программно добавленного на форму.

Я
   Юзер123

15.09.20 — 15:32

Доброго времени.

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

Как вызвать обработчик события при изменении для этого реквизита?

  

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

   Юзер123

1 — 15.09.20 — 15:44

Т.е. надо при выборе  на форме значения этого нового реквизита заполнять другие реквизиты.

   RomanYS

2 — 15.09.20 — 15:50

Элементы.Твойреквизит.УстановитьДействие(«ПриИзменении», «ИмяПроцедуы»);

Только процедура должна быть в самой форме вроде

   Юзер123

3 — 15.09.20 — 15:55

(2)  Сама процедура «ПриИзменении» или Процедура  добавления элемента.

   Юзер123

4 — 15.09.20 — 15:57

Да все ок.  

РАботает.

  

RomanYS

5 — 15.09.20 — 15:58

(3) процедура-обработчик. Добавить элемент и установить действие можно и в ОМ

Быстрый старт в Python для 1С Разработчиков | 1s-to-python.ru

Heltarion

2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

1

Как вызвать процедуру ПриИзмененнии, для изменяемого реквизита?

03.08.2012, 12:45. Показов 9599. Ответов 6

Метки нет (Все метки)


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

1C
1
2
3
4
5
6
7
8
ДокументПКО = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
ДокументПКО.ВидОперации = Перечисления.ВидыОперацийПКО.ПрочийПриход;
ДокументПКО.Дата = стр.ДатаПоступления;
ДокументПКО.СчетКасса = ПланыСчетов.Хозрасчетный.КассаОрганизации;
ДокументПКО.СчетУчетаРасчетовСКонтрагентом =  ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД; 
ДокументПКО.Комментарий = "ЗАГРУЗКА ИЗ ПО"; 
ДокументПКО.СуммаДокумента = стр.Сумма;
ДокументПКО.ЗАписать();

Пытался заполнять через форму, но обработчик события «ПриИзмененнииСуммыДокумента» не сработал



0



2923 / 844 / 324

Регистрация: 30.04.2009

Сообщений: 2,633

03.08.2012, 13:16

2

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

Добавлено через 1 минуту
или вам нужно программно вызвать????

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

Добавлено через 9 минут
ну и естественно она должна быть экспортной



0



2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

04.08.2012, 09:59

 [ТС]

3

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

Я нашел один пример как это делается, но ничего в нем не понял. Суть данного метода следующая:
Создается форма пустышка, где интерактивно выбирается/вводится реквизит, потом программно форме пустышке назначают владельца (в моем случае это: ПриходныйКассовыйОрдер). Далее форме ПриходныйКассовыйОрдера с помощью функции «ОповеститьОВыборе» сообщают, что выбор конкретного реквизита сделан, после чего запускается стандартная процедура обработки события для данного ПоляВвода, предусмотренная 1С. Что-то в этом роде, беда в том, что я не понял как это сделать.



0



900 / 877 / 8

Регистрация: 15.03.2012

Сообщений: 2,680

04.08.2012, 14:07

4

Скопируйте процедуру из формы в свою обработку и вызывайте её. Зачем мудрить то?



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

04.08.2012, 18:20

5

Вариант: В форме обработки ПриОткрытии() запускается нужная функция, Отказ=Истина. (или Закрыть())

Добавлено через 27 секунд
Само собой из дока обработка.открытьформу



0



2 / 2 / 0

Регистрация: 21.11.2011

Сообщений: 57

21.08.2012, 10:32

 [ТС]

6

Цитата
Сообщение от Fenomen
Посмотреть сообщение

Скопируйте процедуру из формы в свою обработку и вызывайте её. Зачем мудрить то?

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



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

21.08.2012, 18:48

7

Я ж пейсал: запустите функцию самой обработкой, тогда хоть атрибуты обработки будут доступны. А если вызываются глобальники других конфигураций — тогда извиняйте: иного выхода, как перетащить всё в свою нет



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

21.08.2012, 18:48

7

Ранее мы добавили свой дополнительный реквизит «СНИЛС» для внутреннего документа и сделали закладку с дополнительными реквизитами первой на форме.

Пришло время улучшить юзабилити нашего реквизита. Как известно СНИЛС имеет определённый формат ввода. Кроме того, он содержит контрольное число в виде двух последних цифр для проверки корректности его ввода. Учитывая это, будет хорошим тоном по отношению к пользователям, если мы поможем ему корректно указать СНИЛС для сотрудника, а в случае ошибки предупредить его об этом.

Делаем маску ввода для дополнительного реквизита

Номер СНИЛС представляет собой строку следующего формата «XXX-XXX-XXX XX», где Х это цифра от 0 до 9. Последняя группа символов XX представляет собой контрольное число. К сожалению типовой механизм не позволяет задать маску ввода для дополнительных реквизитов. Поэтому внесем изменения в программный код. Создание полей на форме для дополнительных реквизитов происходит динамически при создании формы на сервере, либо при изменении некоторых реквизитов в уже открытой форме. Первичный вызов процедуры создания дополнительных реквизитов выглядит так:

&НаСервере

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

...

УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры);

...

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

Само создание полей формы происходит в процедуре

УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме()

Откроем общий модуль УправлениеСвойствами и найдем там эту процедуру. Внесем туда изменения — добавим в конце вызов своей процедуры:

Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено, ПоляНадписей = Ложь, СкрытьУдаленные = Неопределено) Экспорт

...

маг_РаботаСДокументами.ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ОписаниеОбъекта, ПоляНадписей) ;

...

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

Теперь в общий модуль маг_РаботаСДокументами добавим  саму реализацию этой процедуры:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект, ПоляНадписей) Экспорт

Если ТипЗнч(Объект.Ссылка) <> Тип(«СправочникСсылка.ВнутренниеДокументы») Тогда

Возврат;

КонецЕсли;

ВидДокументаСтрокой = «»+Форма.Объект.ВидДокумента;

Если ВидДокументаСтрокой = «Заявка на прием» тогда

//Получим уникальное имя для реквизита СНИЛС

ИмяДопРеквизита = маг_ПовторноеИспользование.УникальноеИмяДопРеквизита(Объект.ВидДокумента, «СНИЛС»);

Рек = Форма.Элементы.Найти(ИмяДопРеквизита);

Если Рек <> Неопределено тогда

Рек.Маска = «999-999-999 99»;

Рек.УстановитьДействие(«ПриИзменении», «маг_СНИЛСПриИзменении»);

КонецЕсли;

КонецЕсли;

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

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

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

Функция УникальноеИмяДопРеквизита(ВидДокумента, ИмяРеквизита)  Экспорт

УстановитьПривилегированныйРежим(Истина);

Набор = ВидДокумента.НаборСвойств;

Результат  = «»;

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ ПЕРВЫЕ 1

| ВЫБОР

| КОГДА Наборы.ПометкаУдаления

| ТОГДА &ПустойНабор

| ИНАЧЕ Наборы.Ссылка

| КОНЕЦ КАК Набор,

| Наборы.Свойство

|ИЗ

| Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК Наборы

|ГДЕ

| Наборы.Ссылка = &Ссылка

| И Наборы.Свойство.Заголовок = &Наименование»;

Запрос.УстановитьПараметр(«Наименование», ИмяРеквизита);

Запрос.УстановитьПараметр(«Ссылка», Набор);

Запрос.УстановитьПараметр(«ПустойНабор», Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка());

РезультатЗапроса = Запрос.Выполнить();

Выб = РезультатЗапроса.Выбрать();

Если Выб.Следующий() тогда

ИмяУникальнаяЧасть =

СтрЗаменить(ВРег(Строка(Выб.Набор.УникальныйИдентификатор())), «-«, «x»)

+ «_»

+ СтрЗаменить(ВРег(Строка(Выб.Свойство.УникальныйИдентификатор())), «-«, «x»);

Результат = «ДополнительныйРеквизитЗначение_» + ИмяУникальнаяЧасть;

КонецЕсли;

Возврат Результат;

КонецФункции

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

Ввод СНИЛС по маске

Маска для поля СНИЛС

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

Для проверки корректности ввода СНИЛС используем типовую функцию из 1С:ЗУП. Поместим данную функцию в наш общий модуль маг_РаботаСДокументами. Ниже сама функция:

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

29

30

31

32

33

34

Функция СтраховойНомерПФРСоответствуетТребованиям(СтраховойНомер) Экспорт

Результат = Истина;

СтрокаЦифр=СтрЗаменить(Лев(СтраховойНомер,11),«-«,«»);

Если ПустаяСтрока(СтрокаЦифр) Тогда

Возврат Ложь;

КонецЕсли;

Попытка

П1 = Число(СтрокаЦифр);

КонтрольноеЧисло=Число(Прав(СтраховойНомер,2));

Исключение

Возврат Ложь;

КонецПопытки;

Если Число(Лев(СтрокаЦифр,9)) > 1001998 Тогда

Всего=0;

Для Сч = 1 По 9 Цикл

Всего=Всего+Число(Сред(СтрокаЦифр,10Сч,1))*Сч

КонецЦикла;

Остаток=Всего%101;

Остаток=?(Остаток=100,0,Остаток);

Если Остаток<>КонтрольноеЧисло Тогда

Результат = Ложь;

КонецЕсли;

Иначе

Результат = Ложь;

КонецЕсли;

Возврат Результат;

КонецФункции

Помните, мы программно назначили обработчик на поле дополнительного реквизита. Теперь добавим саму процедуру для обработчика ПриИзменении в модуль формы элемента справочника «ВнтуренниеДокументы»:

&НаКлиенте

Процедура маг_СНИЛСПриИзменении(Элемент)

Если НЕ маг_РаботаСДокументами.СтраховойНомерПФРСоответствуетТребованиям(Элемент.ТекстРедактирования) тогда

ПоказатьПредупреждение(,«СНИЛС указан неверно!!!»);

КонецЕсли;

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

Теперь, если пользователь ошибется при вводе СНИЛСа, то система предупредит его и выдаст сообщение о некорректном значении:

Предупреждение о некорректном СНИЛСе

Предупреждение

Итоги

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

Получаем доступ к событиям элементов формы дополнительных реквизитов на примере конфигурации «Управление торговлей 11.2».

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

Дополнительные реквизиты – штука тонкая. Они могут присутствовать на форме объекта, а могут и не присутствовать. Например, в конфигурации «Управление торговлей 11.2», когда мы открываем форму документа «Поступление услуг и прочих активов», дополнительные реквизиты там отсутствуют. Это можно видеть в отладчике. И только когда мы переходим на вкладку «Дополнительно», происходит отложенная инициализация формы и после этого дополнительные реквизиты появляются в форме.

В связи с таким поведением формы, нам придётся назначать обработчик для события элемента формы дополнительного реквизита программно. Сделаем это с помощью метода УстановитьДействие().

Как мы уже отметили, в УТ 11.2 в документе «Поступление услуг и прочих активов» дополнительные реквизиты появляются на форме при переходе на вкладку «Дополнительно». Переход обрабатывается в следующей процедуре, которая расположена в модуле формы документа:

&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)

	// Текст процедуры

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

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

ЭтаФорма.Элементы.ДополнительныйРеквизитЗначение_AFD1AFD8xC18C

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

&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)

	// Текст процедуры
	
	УстановитьДействиеДляДопРеквизита();
	
КонецПроцедуры

В модуле формы создаём серверную процедуру:

&НаСервере
Процедура УстановитьДействиеДляДопРеквизита()
		
	ЭтаФорма.Элементы.ДополнительныйРеквизитЗначение_AFD1AFD8xC18C.УстановитьДействие("ПриИзменении", "МойОбработчик");
	
КонецПроцедуры

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

&НаКлиенте
Процедура МойОбработчик()
	
	// Текст процедуры
	
КонецПроцедуры

Вот вроде бы и всё.

Содержание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере

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

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

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

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

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

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

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

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

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

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

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

           ,

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

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

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

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

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

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

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

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

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

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

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

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

У
каждого наверное хоть раз возникала необходимость после записи значения
в какое либо поле ввода вызвать для него обработчик события
ПриИзменении, а о вызове самого события вам приходилось только мечтать. В
этой статье приводится программный способ вызова этого события.
Автор статьи: TormozIT | Редакторы: Гений 1С
Последняя редакция №14 от 11.07.07 |

Ключевые слова: ПриИзменении, программно, элемент управления, интерактивная, запись

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

// Интерактивно записывает значение в элемент управления.
//  Интерактивность заключается в срабатывании
// события ПриИзменении у элемента управления.
//
// Параметры:
//  ЭлементУправления – ЭлементУправления – которому присваиваем значение;
//  Значение     – Произвольный – присваиваемое значение;
//  *ФормаИнициатор - Форма, *Неопределено - которая будет 
//  использована в качестве инициатора события;
//       если не указана, то будет создана временная форма-пустышка.
//
Процедура ЛксИнтерактивноЗаписатьВЭлементУправления(ЭлементУправления, Значение,
ФормаИнициатор = Неопределено) Экспорт Перем СтарыйВладелец, СтарыйЗакрыватьПриВыборе; Если ФормаИнициатор = Неопределено Тогда ФормаИнициатор = ПолучитьОбщуюФорму("Пустышка", ЭлементУправления); Иначе СтарыйВладелец = ФормаИнициатор.ВладелецФормы; СтарыйЗакрыватьПриВыборе = ФормаИнициатор.ЗакрыватьПриВыборе; ФормаИнициатор.ВладелецФормы = ЭлементУправления; ФормаИнициатор.ЗакрыватьПриВыборе = Ложь; КонецЕсли; ФормаИнициатор.ОповеститьОВыборе(Значение); Если СтарыйЗакрыватьПриВыборе <> Неопределено Тогда ФормаИнициатор.ВладелецФормы = СтарыйВладелец; ФормаИнициатор.ЗакрыватьПриВыборе = СтарыйЗакрыватьПриВыборе; КонецЕсли; КонецПроцедуры // ЛксИнтерактивноЗаписатьВЭлементУправления() // Интерактивно записывает значение в элемент управления колонки табличного поля. // Интерактивность заключается в срабатывании события ПриИзменении // у элемента управления. // Строка табличного поля должна находиться в режиме редактирования, // иначе никаких изменений данных не произойдет. // // Параметры: // ТабличноеПоле - ТабличноеПоле - строка которого редактируется; // Колонка – КолонкаТабличногоПоля – в элемент управления которой записываем; // Значение – Произвольный – присваиваемое значение; // *ФормаИнициатор - Форма, *Неопределено - которая будет // использована в качестве инициатора события; // если не указана, то будет создана временная форма-пустышка. // Процедура ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля(ТабличноеПоле, Колонка,
Значение, ФормаИнициатор = Неопределено) Экспорт ТабличноеПоле.ТекущаяКолонка = Колонка; ЛксИнтерактивноЗаписатьВЭлементУправления(Колонка.ЭлементУправления,
Значение, ФормаИнициатор); КонецПроцедуры // ЛксИнтерактивноЗаписатьВКолонкуТабличногоПоля()

Если в контексте доступна какая то форма, то лучше ее передать в качестве параметра ФормаИнициатор, т.к. это будет быстрее, чем создавать каждый
раз форму-пустышку.

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

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

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