Last active
August 12, 2023 14:35
-
-
Save Roffild/0f205965a5615586f4ec9b2455a1bd09 to your computer and use it in GitHub Desktop.
ПолеВвода.ДоступныеТипы и ОграничениеТипа в 1С:Предприятие 8.3.22.1923 (2023г.)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Пример выбора Страны без добавления в справочник. | |
// Позволяет выбрать Страну из классификатора при отсутствии в справочнике. | |
// | |
// 1С:Предприятие 8.3.22.1923 (2023г.): | |
// ДоступныеТипы ни на что не влияет для всех типов (кроме "ОписаниеТипов"). | |
// ОграничениеТипа влияет на Выбор и значение. | |
// | |
// Это часть для реквизита типа "ОписаниеТипов". | |
// Свойства: ДоступныеТипы, РазрешитьСоставнойТип, ТипыВВидеДерева. | |
// В справке находятся в | |
// "Общие объекты > Описание типов значений > Расширение поля ввода для описания типа > Свойства". | |
// Поэтому эти свойства влияют только на Выбор для "ОписаниеТипов". | |
// | |
// В этом примере: | |
// ДоступныеТипы используется для хранения Типа. | |
// ОграничениеТипа устанавливается перед Выбором и снимается после Выбора. | |
// | |
// Логика действия после Выбора пользователя: | |
// Если ТипЗнч(ВыбраннаяСтрана) = Тип("СправочникСсылка.СтраныМира") Тогда | |
// //в РеквизитСтрана запишется Ссылка | |
// Иначе | |
// // в РеквизитСтрана попадет Строка для последующей записи в ИБ, когда пользователь одобрит | |
// КонецЕсли; | |
&НаКлиенте | |
Перем БезТипов; // кеш | |
&НаСервере | |
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) | |
// РеквизитСтрана = Новый ОписаниеТипов("СправочникСсылка.СтраныМира,Строка"); | |
Поле = Элементы.Страна; | |
Поле.ДоступныеТипы = Новый ОписаниеТипов("СправочникСсылка.СтраныМира"); | |
// Установка стиля Поля, чтобы пользователь видел возможность Выбора: | |
Поле.ВыбиратьТип = Ложь; | |
Поле.КнопкаВыбора = Истина; | |
Поле.КнопкаВыпадающегоСписка = Истина; | |
Поле.КнопкаОткрытия = Ложь; | |
Поле.КнопкаОчистки = Ложь; | |
Поле.КнопкаРегулирования = Ложь; | |
Поле.КнопкаСоздания = Ложь; | |
Поле.КнопкаСпискаВыбора = Истина; | |
Поле.КартинкаКнопкиВыбора = БиблиотекаКартинок.Найти; | |
Поле.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ОтображатьВВыпадающемСпискеИВПолеВвода; | |
КонецПроцедуры | |
&НаКлиенте | |
Процедура ПриОткрытии(Отказ) | |
БезТипов = Новый ОписаниеТипов(""); // кеш | |
КонецПроцедуры | |
&НаКлиенте | |
Процедура СтранаАвтоПодбор(Элемент, Текст, | |
ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) | |
СтандартнаяОбработка = Ложь; | |
ПараметрыПолученияДанных = Новый Структура( | |
"СтрокаПоиска,Отбор", Элемент.ТекстРедактирования, Новый Структура() | |
); | |
ДанныеВыбора = СтранаАвтоПодборСервер(ПараметрыПолученияДанных); | |
КонецПроцедуры | |
&НаСервереБезКонтекста | |
Функция СтранаАвтоПодборСервер(Знач ПараметрыПолученияДанных) | |
Возврат РаботаСАдресами.ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(ПараметрыПолученияДанных); | |
КонецФункции | |
&НаКлиенте | |
Процедура СтранаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) | |
// Приходится использовать ОграничениеТипа, чтобы появилось нужное окно для Выбора. | |
Элемент.ОграничениеТипа = Элемент.ДоступныеТипы; | |
КонецПроцедуры | |
&НаКлиенте | |
Процедура СтранаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) | |
Элемент.ОграничениеТипа = БезТипов; // Для присвоения Строки ограничение нужно снять. | |
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда | |
ВыбранноеЗначение.Свойство("Наименование", ВыбранноеЗначение); | |
// Иначе Тип("Строка") | |
КонецЕсли; | |
КонецПроцедуры |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment