Насерверебезконтекста получить реквизит формы

Задача заключается в том, чтобы получить реквизит от ссылочного значения, хранящегося в реквизите формы. Например у документа Накладная есть реквизит ссылочного типа – Поставщик. Необходимо получить ИНН этого поставщика:


Мы находимся в модуле формы на клиенте. В контексте клиента ссылочные типы очень сильно ограничены в своих возможностях. В частности, нельзя получить значение реквизита от ссылки «через точку». Это можно сделать только в контексте сервера.

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

Например, локальная команда формы, вызывающая серверную функцию, будет выглядеть следующим образом:

&НаКлиенте
Процедура ПолучитьИННПоставщика(Команда)
   ИННПоставщика = ПолучитьИНННаСервере(Объект.Поставщик);
КонецПроцедуры 

А функцию ПолучитьИНННаСервере() опишем здесь же, в модуле формы:

&НаСервереБезКонтекста
Функция ПолучитьИНННаСервере(СсылкаНаПоставщика)
   Возврат СсылкаНаПоставщика.ИНН;
КонецФункции   

Таким образом на сервере мы сразу же получаем значение реквизита «через точку» от полученной ссылки и возвращаем его на клиента.

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

   Serzhant

20.09.10 — 08:17

Столкнулся с такой проблемой: Есть прикладное решение в V8.1 хочу перевести его на V8.2

В конфигурации есть справочник «Животное» с реквизитами «Отец» и «Мать» с типом СправочникСсылка.Животное и табличной частью «Родословная», которая автоматически формируется при наступлении событий ОтецПриИзменении и МатьПриИзменении

В V8.1 все работало так:

&НаКлиенте

Процедура ОтецПриИзменении(Элемент)

СтрокаТабличнойЧасти=ЭлементыФормы.Родословная.ТекущиеДанные;

СтрокаТабличнойЧасти.Дед=ЭлементыФормы.Отец.Значение.Отец;

СтрокаТабличнойЧасти.Прадед=ЭлементыФормы.Отец.Значение.Отец.Отец;



и т.д. до 4-го колена

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

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

Может кто знает, как все это реализовать в 8.2. Помогите пожалуйста!!!

  

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

   Ksandr

1 — 20.09.10 — 08:20

У тебя проблемы в том, что ты не сможешь получить доступ к объекту в реквизите ТЧ и его реквизитам, поэтому тебе нужно сделать функцию &НаСервереБезКОнтекста ПолучитьОтца(Реквизит) и в ней Возврат Реквизит.Отец

   Ksandr

2 — 20.09.10 — 08:23

Я бы сделал еще название реквизитов Отец_1 Отец_2 Отец_3 Отец_4, тогда можно рекурсивной функцией все забацать

   Mitriy

3 — 20.09.10 — 08:25

а я бы вообще за такой код табуреткой по пальцам настучал…
Запрос — наше все…

   Ksandr

4 — 20.09.10 — 08:26

(3) согласен, в запросе получить все, а потом ЗаполнитьЗначениеСвойств()

   Serzhant

5 — 21.09.10 — 08:03

Огромное всем спасибо за ответы!
Помогло!!!

   orefkov

6 — 21.09.10 — 08:30

(0)

Э, простите, а ничего, что дедов так-то бывает два, прадедов четыре, прапрадедов 8, а в 4 колене — 16 ?

И ты их всех вот таким кодом вытаскиваешь?

И зачем хранить родословную в табличной части справочника?

   Trainee

7 — 21.09.10 — 10:35

Помогите … я креведко, но я не понимаю:

&НаКлиенте

Процедура ДолжностьОбработкаВыбора(Элемент)

   Стр = Элементы.Сотрудники.ТекущиеДанные; // СТРОКА НЕ РАБОТАЕТ  

   Данные = ПолучитьДолжностьСервер(Стр.Должность);

Стр.Оклад = Данные.Оклад;

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

&НаСервереБезКонтекста

Функция ПолучитьДолжностьСервер(Должность)

   
   Данные = Новый Структура (Должность.Оклад);

   Возврат Данные;

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

… Справочник называется «Сотрудники». Читаю Радченко. Не помогает.

  

Serzhant

8 — 22.09.10 — 14:46

На самом деле у меня на форме две табличные части: «Родословная отца» и «Родословная матери» и в каждой 28 колонок. Т.е. например, прадед по отцовской линии обозначается как МММ, а прабабушка — как ММЖ.

Еще есть справочник «Семья» с реквизитами «Самец» и «Самка» и двумя табличными частями:»РодословнаяОтца» и «РодословнаяСамки», которые автоматом заполняются при изменении реквизитов.А в модуле я прописал код контроля, т.е. если хотя бы одно из значений этих таблиц совпадает между собой, то вылетает сообщение об имеющихся родственных связях. И в коде 20 000 строк :)

А по другому я как то не придумал.

Да и в восьмерке я еще ламер :) Может кто подскажет примерный код запроса и где его располагать — на клиенте или сервере.

Заранее спасибо!

На клиенте на сервере

Немного теории о стороне выполнения кода. При работе 1С в режиме клиент-сервера, запускается несколько процессов. На компьютере пользователя запускается 1cv8.exe, на сервере 1С запускается rphost.exe, rmngr.exe и ragent.exe.

ragent.exe

Приложение ragent.exe это по сути и есть наша служба агента 1С, которую мы можем посмотреть в списке служб Windows. Данное приложение отвечает за запуск всех остальных приложений и за распределение нагрузки между рабочими rphost.

rphost.exe

Приложение rphost.exe обслуживает подключения пользователей, выполняет код, написанный в конфигурации 1С. В консоли кластера rphost отображается в блоке «Рабочие процессы»

Рабочий сервер 1с rphost

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

Количество ИБ на процесс rphost

rmngr.exe

В общем случае данное приложение отвечает за выполнение регламентных заданий.

Сторона выполнения кода

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

&НаКлиенте

Код выполняется на том компьютере, за которым сидит пользователь и под теми правами, которые есть у пользователя. Файлы, созданные в процедурах &НаКлиенте будут созданы на пользовательском компьютере. Есть множество ограничений выполнения кода &НаКлиенте, например, здесь нельзя обращаться к СУБД. Это значит нельзя использовать как прямое создание запроса, так и косвенный запрос при обращении к ссылке через точку. Компьютер клиента может быть медленнее сервера, это следует учитывать при написании кода.

&НаСервере

Код выполняется на сервере 1С, в процессе rphost. Файлы, созданные в процедурах &НаСервере, будут сохранены на сервере и смогут быть записаны только в те папки, на которые у пользователя службы агента 1С есть доступ на запись. &НаСервере уже можно свободно писать запросы, обращаться к предопределенным данным и к реквизитам ссылки через точку.

&НаСервереБезКонтекста

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

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

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

И вот здесь нам как раз может помочь директива &НаСервереБезКонтекста.

Рассмотрим для примера такую ситуацию: у нас есть форма, в реквизитах формы есть таблица значений с 100 000 строк и реквизит с именем «Реквизит1». Нам необходимо в этот реквизит значение перечисления.

Пример 1:

&НаКлиенте
Процедура ВыполнитьКод(Команда)
ЗаписатьЗначение();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьЗначение()
     Реквизит1 = Перечисления.ПеречислениеДляПримера.Пример;
КонецПроцедуры

В данном примере произойдет следующее: описание формы, таблица значений с 100000 строк и реквизит1 будут преобразованы в XML, отправлены на сервер. На сервере будет выполнен небольшой неявный запрос к СУБД, в значение реквизит1 будет записан результат этого запроса, все данные опять преобразуются в XML и отправятся на сервер. Учитывая, что таблица значений очень большая, то получится, что мы большой объем данных дважды в холостую передали между клиентом и сервером. Это не оптимально.

Пример 2:

&НаКлиенте
Процедура ВыполнитьКод(Команда)
     Реквизит1 = ПолучитьЗначение();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьЗначение()
     Возврат Перечисления.ПеречислениеДляПримера.Пример;
КонецФункции

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

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

Пример 3, предположим, у нас есть название для перечисления, которое хранится в реквизите Реквизит2, мы можем его передать в качестве параметра функции:

&НаКлиенте
Процедура ВыполнитьКод(Команда)
     Реквизит1 = ПолучитьЗначение(Реквизит2);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьЗначение(ИмяЭлементаПеречисления)
     Возврат Перечисления.ПеречислениеДляПримера[ИмяЭлементаПеречисления];
КонецФункции

Ну и напоследок еще один пример, как делать не надо:

&НаКлиенте
Процедура ВыполнитьКод(Команда)
     Реквизит1 = ПолучитьЗначение(ЭтаФорма);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьЗначение(Форма)
     Возврат Перечисления.ПеречислениеДляПримера[ИмяЭлементаПеречисления];
КонецФункции

Если мы в качестве параметра передаем ЭтаФорма, то по факту мы внеконтекстный вызов превращаем в контекстный. Если без этого не обойтись, то стоит делать контекстный вызов.

Как получить реквизит от ссылочного значения на клиенте

На чтение 2 мин Просмотров 6.3к. Опубликовано 20.04.2017

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

На стороне клиента код вида
Контрагент.ИНН
приведет к ошибке. Такие конструкции возможны только на сервере.

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

&НаКлиенте
Процедура ПолучитьИНН(Команда)
// Вызов серверной внеконтекстной функции
ИННКонтрагента =
ПолучитьИНННаСервере(Контрагент)
;
Сообщить("ИНН контрагента: " + ИННКонтрагента);
КонецПроцедуры

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

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


Внимание!

При работе с конфигурациями, в которые встроена библиотека стандартных подсистем, вместо получения реквизита через точку рекомендуется использовать функцию ЗначениеРеквизитаОбъекта() из общего модуля ОбщегоНазначения. Таким образом, строку

Возврат Контрагент.ИНН;

можно заменить на:

Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН");


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

Рассмотрим пример: на форме документа рядом с полем ввода контрагента должен выводиться его ИНН. Для этого перенесем реквизит ИНН на форму:

Выбор подчиненного реквизита

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

OverDozero

262 / 218 / 94

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

Сообщений: 1,342

1

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

20.06.2019, 19:24. Показов 5150. Ответов 5

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


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

1C
1
2
3
4
5
6
7
8
9
10
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ОстаткиОстатки.Склад КАК Склад,
                   |    ОстаткиОстатки.Крышки КАК Крышки,
                   |    ОстаткиОстатки.КоличествоОстаток КАК КоличествоОстаток
                   |ИЗ
                   |    РегистрНакопления.Остатки.Остатки КАК ОстаткиОстатки
                   |ГДЕ
                   |    ОстаткиОстатки.Склад = &Склад
                   |И ОстаткиОстатки.КоличествоОстаток > 0"

Не могу получить значение этого реквизита
В модуле формы объявил:

1C
1
2
3
4
&НаСервереБезКонтекста
Функция   ПолучитьЗначениеРеквизитаНаСервере(Объект,Склад) 
    Возврат Объект.Склад;
    КонецФункции

В модуле объекта:
&НаКлиенте
Функция ПолучитьСклад(Элемент)
Объект.Склад = ПолучитьЗначениеРеквизитаНаСервере(Объект.Склад,»С клад»);
КонецФункции

В процедуре проведения:

1C
1
2
3
4
Процедура ОбработкаПроведения(Отказ, Режим)
    Склад = ПолучитьСклад();
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ

На строке:Склад = ПолучитьСклад() — Процедура или функция с указанным именем не определена (ПолучитьСклад)
Как передать в обработку проведения параметр «Склад»?
Всем заранее спасибо



0



Tklwegsd

Эксперт 1С

841 / 604 / 211

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

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

20.06.2019, 19:50

2

«Склад» — это реквизит документа что ли?

Тогда так:

1C
1
Запрос.УстановитьПараметр("Склад", Склад);

Реквизиты документа и так доступны в модуле объекта.



0



OverDozero

262 / 218 / 94

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

Сообщений: 1,342

20.06.2019, 19:58

 [ТС]

3

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

«Склад» — это реквизит документа что ли?

Может неверно выразился.В УФ имеется поле «Склад» ссылочного типа на справочник.
В модуле объекта не видно.Переменная не определена (Объект)

1C
1
С = Объект.Склад;

Задача:Пользователь в форме указывает склад с которого происходит списание.
Вот этот склад и надо передать параметром в запрос.



0



Tklwegsd

Эксперт 1С

841 / 604 / 211

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

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

20.06.2019, 20:22

4

Лучший ответ Сообщение было отмечено OverDozero как решение

Решение

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

В модуле объекта не видно.Переменная не определена (Объект)

А так видно?

1C
1
С = Склад;



1



262 / 218 / 94

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

Сообщений: 1,342

20.06.2019, 20:39

 [ТС]

5

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

А так видно?

Как ни странно — да.
Спасибо.



0



Эксперт 1С

841 / 604 / 211

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

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

20.06.2019, 20:42

6

Повторю. Реквизиты документа и так доступны в модуле объекта.



0



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

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

ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

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

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

&НаКлиенте
Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    ИНН = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение)
    Возврат ВыбранноеЗначение.ИНН;
КонецФункции

При этом следует иметь ввиду два момента:

  • Во-первых, для получения реквизитов используется неконтекстный серверный вызов (&НаСервереБезКонтекста). Это важно, т.к. в этом обработчике нельзя использовать контекстные серверные вызовы (&НаСервере).
  • Во-вторых, любое обращение к серверу требует дополнительных ресурсов системы и может замедлять работу пользователя, особенно в случае подключения по низкоскоростному каналу связи. Поэтому нужно прежде всего внимательно оценить, а так ли необходимо в этом месте получать реквизиты ссылки или можно обойтись без этого? И если нужно получать несколько реквизитов и при этом используется какой-то сложный алгоритм — нужно постараться реализовать его так, чтобы все необходимые данные получить за один серверный вызов, вернуть их на клиента и на клиенте только поместить их в нужные поля формы, не проводя каких-то сложных вычислений.

Справка

УправляемаяФорма.ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

Параметры:

  • ВыбранноеЗначение, тип Произвольный. Результат выбора в подчиненной форме. В случае множественного выбора возвращается массив выбранных значений.
  • ИсточникВыбора, тип Произвольный. Форма, где осуществлен выбор.

Описание:

  • Возникает на клиенте при выборе объекта в одной из подчиненных форм или при вызове в одной из подчиненных форм метода ОповеститьОВыборе.
УправляемаяФорма.ОповеститьОВыборе(ЗначениеВыбора)

Параметры:

  • ЗначениеВыбора, обязательный, тип Произвольный. Результат выбора.

Описание:

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

Доступность:

  • Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение (клиент).

Примечание:

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

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

Обработка выбора в поле ввода

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

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

Для того, чтобы вмешаться в процесс выбора значения используется событие ОбработкаВыбора() элемента формы Поле. Это событие поставляется расширением поля формы для поля ввода. Обработчик этого события имеет такой синтаксис: 

ОбработкаВыбора(<Элемент>, <ВыбранноеЗначение>, <СтандартнаяОбработка>).

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

 &НаКлиенте
Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

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

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

&НаКлиенте Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ИНН = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение); КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение)
Возврат ВыбранноеЗначение.ИНН;
КонецФункции

При этом следует иметь ввиду два момента:

  • Во-первых, для получения реквизитов используется неконтекстный серверный вызов (&НаСервереБезКонтекста). Это важно, т.к. в этом обработчике нельзя использовать контекстные серверные вызовы (&НаСервере).
  • Во-вторых, любое обращение к серверу требует дополнительных ресурсов системы и может замедлять работу пользователя, особенно в случае подключения по низкоскоростному каналу связи. Поэтому нужно прежде всего внимательно оценить, а так ли необходимо в этом месте получать реквизиты ссылки или можно обойтись без этого? И если нужно получать несколько реквизитов и при этом используется какой-то сложный алгоритм – нужно постараться реализовать его так, чтобы все необходимые данные получить за один серверный вызов, вернуть их на клиента и на клиенте только поместить их в нужные поля формы, не проводя каких-то сложных вычислений.

Подробнее об использовании события ОбработкаВыбора() можно прочитать в синтакс-помощнике: Интерфейс (управляемый) – Поле формы – Расширение поля ввода – События.

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