Особенности работы связи по типу у поля ввода
У элемента формы «Поле ввода» есть возможность настройки связи по типу. Связь по типу позволяет автоматически ограничивать набор допустимых типов поля ввода, в зависимости от значения какого-либо реквизита. Эта возможность, в частности, используется для настройки зависимости значения субконто от вида субконто. Если связь настроена, то при изменении значения вида субконто в поле ввода значения субконто будет автоматически ограничен тип. То есть пользователю при вводе значения субконто будут доступны только значения тех типов, которые определены у вида субконто.
Важно помнить, что связь по типу изменяет только настройку поля, но не само значение реквизита, с которым связано поле. Это связано с тем, что связь настраивается со значением реквизита. При этом значение реквизита может изменяться не только в результате интерактивных действий пользователя. Например, при открытии формы реквизит изменит свое значение, так как происходит загрузка объекта, который редактирует данная форма.
Допустим, существует документ, у которого есть реквизиты Вид и Значение, соответственно хранящие вид и значение субконто. У вида субконто изменили тип. Тогда при открытии документа у поля ввода, связанного с реквизитом Значение, отработает связь по типу. Доступные типы поля ввода будут ограничены по виду субконто, но значение реквизита не должно измениться, так как иначе пользователь не увидит настоящего значения реквизита, а увидит уже приведенное значение.
Из-за того что при отработке связи по типу значение реквизита не изменяется, возникает эффект, когда пользователю доступен для ввода только один тип, но при нажатии на кнопку выбора ему предлагается выбрать этот единственный тип. Для того что бы избежать данного эффекта, нужно обрабатывать изменение значения вида субконто и приводить значение субконто к допустимому типу.
Например, есть форма, в которую вставлены поля ПолеВводаВидСубконто, ПолеВводаЗначениеСубконто, и они связаны с реквизитами формы ВидСубконто и ЗначениеСубконто соответственно. У элемента формы ПолеВводаЗначениеСубконто настроена связь по типу с реквизитом формы ВидСубконто. Для того чтобы связь работала корректно, нужно событию ПриИзменении поля ввода ПолеВводаВидСубконто назначить обработчик следующего содержания:
В данном фрагменте кода у нового значения вида субконто берется описание типа, и с помощью него значение субконто приводится к допустимому типу.
Поле ввода, редактирующее значение субконто, можно связать по типу не только непосредственно с видом субконто, но и с видом субконто счета. Для этого надо настроить связь по типу с реквизитом, содержащим счет. При этом у поля ввода появится свойство «Вид субконто». В нем указывается номер вида субконто на счете. То есть если указан вид субконто 1, то при изменении значения счета, полю вводу будет назначен тип из первого вида субконто счета. В этом случае для корректной работы связи надо обрабатывать изменение значения счета. А обработчик события «При изменении» будет выглядеть следующим образом:
В данном примере при изменении значения счета берется первый вид субконто счета и с помощью его типа приводится значение субконто. Важно отметить, что при указании вида субконто в свойстве нумерация ведется с 1, а при обращении к массиву видов субконто программно нумерация производится с 0.
Как назначить конкретный тип элементу управления, который связан с реквизитом формы, имеющим составной тип?
Для этого можно присвоить реквизиту формы значение пустой ссылки нужного типа. Например, для поля ввода, связанного с реквизитом, который может принимать значение ссылки на справочники физических и юридических лиц, назначение нужного типа может выглядеть следующим образом:
ПолеВвода1 Однако если в этом случае в поле ввода нажать кнопку очистки, снова будет предложен выбор типа значения из двух возможных типов. Избежать этого можно двумя способами:
Во-первых, можно запретить выбор типа в поле ввода (свойство ВыбиратьТип ). В этом случае нажатие на кнопку очистки не будет приводить к сбросу типа в поле ввода.
Во-вторых, можно использовать свойство поля ввода ОграничениеТипа , задающее возможные типы данных, которые могут быть введены в поле ввода, и приводить значение соответствующего реквизита к нужному типу:
Как установить тип значения у поля ввода 1с
Если поле ввода в колонке ТЗ, то можно юзать ТипЗначения, иначе юзай ПривестиЗначение и ОграничениеТипа
Я записывал : П1.ТипЗначения = «Число»; Ошибку выдал
ОписаниеТипов ?
а если просто пометить значение нужного типа (пр. Спр.XXX.ПустаяСсылка)
Так сложно что ли. Установить тип для П1 Числовым.
(9) Поддерживаю.
Неужели трудно почитать СП чтобы сделать тип числовым?
Во первой надо разобраться что в данных поля ввода, какой у него тип значения.
КЧ = Новый КвалификаторыЧисла(12,2);
Массив = Новый Массив;
Массив.Добавить(Тип(«Число»));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
Поле.ТипЗначения =ОписаниеТиповЧ;
Если задан тип составной и он включает «число» то нужно сделать:
ОписаниеТипа = Новый ОписаниеТипов(«Число»);
ПолеВвода1 = ОписаниеТипа.ПривестиЗначение(ПолеВвода1);
ЭлементыФормы.ПолеВвода1.ВыбиратьТип = Ложь;
Как установить тип значения у поля ввода 1с
Управляемые формы;
Задача.
Например, есть табличная часть с двумя колонками «ВидПоступленияДС» и «Аналитика». Поле «Аналитика» может содержать значения составного типа. Необходимо, в зависимости от введенного значения в поле «ВидПоступленияДС», установить нужный тип для поля «Аналитика».
Решение.
В событии «ПриИзменении» поля ввода «ВидПоступленияДС» пропишем следующий код:
&НаКлиенте
Процедура ОсновнаяВидПоступленияДСПриИзменении(Элемент)
ТекСтрока = Элементы.Основная.ТекущиеДанные;
Если ТекСтрока.ВидПоступленияДС = ПредопределенноеЗначение("Перечисление.ВидыПоступленияДС.ОплатаОтКлиента") Тогда
ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
ИначеЕсли ТекСтрока.ВидПоступленияДС = ПредопределенноеЗначение("Перечисление.ВидыПоступленияДС.ПрочиеПоступленияДС") Тогда
ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.СтатьиПриходаДС");
Иначе
ТекСтрока.Аналитика = Неопределено;
Возврат;
КонецЕсли;
ТекСтрока.Аналитика = ОписаниеТипов.ПривестиЗначение(ТекСтрока.Аналитика);
КонецПроцедуры