Skip to content

Instantly share code, notes, and snippets.

@Roffild
Last active August 12, 2023 14:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Roffild/0f205965a5615586f4ec9b2455a1bd09 to your computer and use it in GitHub Desktop.
Save Roffild/0f205965a5615586f4ec9b2455a1bd09 to your computer and use it in GitHub Desktop.
ПолеВвода.ДоступныеТипы и ОграничениеТипа в 1С:Предприятие 8.3.22.1923 (2023г.)
// Пример выбора Страны без добавления в справочник.
// Позволяет выбрать Страну из классификатора при отсутствии в справочнике.
//
// 1С:Предприятие 8.3.22.1923 (2023г.):
// ДоступныеТипы ни на что не влияет для всех типов (кроме "ОписаниеТипов").
// ОграничениеТипа влияет на Выбор и значение.
//
// Это часть для реквизита типа "ОписаниеТипов".
// Свойства: ДоступныеТипы, РазрешитьСоставнойТип, ТипыВВидеДерева.
// В справке находятся в
// "Общие объекты > Описание типов значений > Расширение поля ввода для описания типа > Свойства".
// Поэтому эти свойства влияют только на Выбор для "ОписаниеТипов".
//
// В этом примере:
// ДоступныеТипы используется для хранения Типа.
// ОграничениеТипа устанавливается перед Выбором и снимается после Выбора.
//
// Логика действия после Выбора пользователя:
// Если ТипЗнч(ВыбраннаяСтрана) = Тип("СправочникСсылка.СтраныМира") Тогда
// //в РеквизитСтрана запишется Ссылка
// Иначе
// // в РеквизитСтрана попадет Строка для последующей записи в ИБ, когда пользователь одобрит
// КонецЕсли;
&НаКлиенте
Перем БезТипов; // кеш
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// РеквизитСтрана = Новый ОписаниеТипов("СправочникСсылка.СтраныМира,Строка");
Поле = Элементы.Страна;
Поле.ДоступныеТипы = Новый ОписаниеТипов("СправочникСсылка.СтраныМира");
// Установка стиля Поля, чтобы пользователь видел возможность Выбора:
Поле.ВыбиратьТип = Ложь;
Поле.КнопкаВыбора = Истина;
Поле.КнопкаВыпадающегоСписка = Истина;
Поле.КнопкаОткрытия = Ложь;
Поле.КнопкаОчистки = Ложь;
Поле.КнопкаРегулирования = Ложь;
Поле.КнопкаСоздания = Ложь;
Поле.КнопкаСпискаВыбора = Истина;
Поле.КартинкаКнопкиВыбора = БиблиотекаКартинок.Найти;
Поле.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ОтображатьВВыпадающемСпискеИВПолеВвода;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
БезТипов = Новый ОписаниеТипов(""); // кеш
КонецПроцедуры
&НаКлиенте
Процедура СтранаАвтоПодбор(Элемент, Текст,
ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыПолученияДанных = Новый Структура(
"СтрокаПоиска,Отбор", Элемент.ТекстРедактирования, Новый Структура()
);
ДанныеВыбора = СтранаАвтоПодборСервер(ПараметрыПолученияДанных);
КонецПроцедуры
&НаСервереБезКонтекста
Функция СтранаАвтоПодборСервер(Знач ПараметрыПолученияДанных)
Возврат РаботаСАдресами.ЗаполнитьДанныеВыбораАвтоподбораПоСтранам(ПараметрыПолученияДанных);
КонецФункции
&НаКлиенте
Процедура СтранаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Приходится использовать ОграничениеТипа, чтобы появилось нужное окно для Выбора.
Элемент.ОграничениеТипа = Элемент.ДоступныеТипы;
КонецПроцедуры
&НаКлиенте
Процедура СтранаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Элемент.ОграничениеТипа = БезТипов; // Для присвоения Строки ограничение нужно снять.
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
ВыбранноеЗначение.Свойство("Наименование", ВыбранноеЗначение);
// Иначе Тип("Строка")
КонецЕсли;
КонецПроцедуры
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment