Как реализовать связанные поля «Область» и «Город» в форме 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Рассмотрев архитектурные особенности платформы 1С:Предприятие, разберем основные способы реализации такой связи — от использования подчиненных справочников до настройки фильтрации по произвольным реквизитам без изменения структуры метаданных.

Способ 1. Использование подчиненного справочника (связь «Владелец»)

Самый простой и стандартный способ решения задачи в платформе 1С — сделать справочник «Города» подчиненным справочнику «Области».

  1. В конфигураторе открываем свойства справочника Города.
  2. На вкладке Владельцы добавляем справочник Области.
  3. На форме элемента или документа размещаем оба поля. При установке для поля «Город» связи по владельцу платформа автоматически фильтрует список городов.

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

Способ 2. Декларативная настройка «Связи параметров выбора»

Если справочники не связаны отношением подчинения, а в справочнике Города создан реквизит Область (с типом СправочникСсылка.Области), фильтрацию можно настроить без написания кода через свойства элемента формы.

Разберем по шагам процедуру настройки:

  1. В форме выбираем элемент управления для поля Город и открываем его палитру свойств.
  2. Находим свойство Связи параметров выбора и открываем окно настройки.
  3. Добавляем новую строку связи: в качестве Имени параметра указываем Отбор.Область, а в качестве Элемента выбыраем поле формы Область.

Данный подход работает во всех сценариях ввода: при открытии формы выбора, при автоподборе по строке и в списке быстрого выбора.

Способ 3. Программное управление отбором

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

Первый вариант — установка отбора через коллекцию ПараметрыВыбора в событии ПриИзменении поля «Область»:


&НаКлиенте
Процедура ОбластьПриИзменении(Элемент)
    
    // Очищаем зависимое поле при смене области
    Объект.Город = Справочники.Города.ПустаяСсылка();
    
    // Устанавливаем новый отбор для элемента формы Город
    МассивОтбора = Новый Массив;
    МассивОтбора.Добавить(Новый ЭлементОтбора("Отбор.Область", Объект.Область));
    
    Элементы.Город.ПараметрыВыбора = Новый ФиксированныйМассив(МассивОтбора);
    
КонецПроцедуры

Второй вариант — перехват события НачалоВыбора для поля «Город» и передача структуры отбора при открытии формы выбора:


&НаКлиенте
Процедура ГородНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    Если ЗначениеЗаполнено(Объект.Область) Тогда
        СтандартнаяОбработка = Ложь;
        
        ПараметрыОткрытия = Новый Структура;
        ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Область", Объект.Область));
        
        ОткрытьФорму("Справочник.Города.ФормаВыбора", ПараметрыОткрытия, Элемент);
    КонецЕсли;
    
КонецПроцедуры

Очистка зависимого поля при изменении ведущего реквизита

Проанализируем важный сценарий взаимодействия: если пользователь выбрал область «Московская область» и город «Балашиха», а затем изменил область на «Тверская область», ранее выбранный город становится недействительным.

Для исключения некорректных данных необходимо обязательно очищать поле Город при смене области в обработчике ПриИзменении, либо настроить свойство Режим изменения связанного значения в окне «Связи параметров выбора» на значение Очищать.

Особенности и альтернативные варианты

Выясним технические нюансы применения различных подходов в зависимости от архитектуры приложения:

  1. Управляемые и обычные формы: Механизм «Связи параметров выбора» по произвольным реквизитам полноценно поддерживает платформа управляемого приложения (1С v8.3). В обычных формах фильтрацию по реквизиту необходимо реализовывать программно в событии НачалоВыбора.
  2. Связь через регистр сведений: Если связь между регионами и населенными пунктами не является жесткой (например, один город может относиться к нескольким регионам), структуру связей хранят в независимом регистре сведений, а выборку формируют динамически запросом.
  3. Использование Библиотеки Стандартных Подсистем (БСП): В реальных типовых конфигурациях для работы с адресами рекомендуется задействовать штатную подсистему «Адресный классификатор», в которой механизмы ввода, проверки и нормализации адресов по классификаторам ФИАС/ГАР уже реализованы «из коробки».
← На главную