Как динамически изменять тип поля во второй колонке таблицы в зависимости от значения первой?

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

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

Использование свойства «Связь по типу»

Наиболее предпочтительным и современным способом решения является использование свойства СвязьПоТипу. Это декларативный механизм платформы, который не требует написания программного кода.

  1. Откройте форму в Конфигураторе.
  2. Перейдите в свойства той колонки таблицы, тип которой должен меняться (зависимая колонка).
  3. Найдите свойство СвязьПоТипу и в открывшемся окне выберите «управляющий» реквизит (вашу первую колонку).
  4. Теперь платформа автоматически будет приводить тип данных зависимой колонки к типу, который был выбран в управляющей колонке.

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

Программное управление типом через ОписаниеТипов

В ситуациях, когда стандартная «Связь по типу» не подходит (например, если требуется добавить дополнительную логику фильтрации или сложные проверки), мы можем управлять типом данных программно. Для этого разберем алгоритм, основанный на использовании объекта ОписаниеТипов.

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


// Получаем текущие данные строки таблицы
ТекущиеДанные = Элементы.ИмяВашейТаблицы.ТекущиеДанные;

// Формируем массив допустимых типов на основе выбранного значения в первой колонке
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипЗнч(ТекущиеДанные.Колонка1));

// Создаем описание типов
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);

// Очищаем значение, чтобы избежать несоответствия типов
ПустоеЗначение = ОписаниеТипов.ПривестиЗначение(Неопределено);
ТекущиеДанные.Колонка2 = ПустоеЗначение;

// Устанавливаем ограничение типа для элемента управления колонки
Элементы.ИмяВашейТаблицыКолонка2.ОграничениеТипа = ОписаниеТипов;

Важные рекомендации при реализации

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

Таким образом, мы выяснили, что для решения задачи изменения типа ячейки существует два пути: простой (через настройки формы) и гибкий (через программное управление). Мы рекомендуем всегда начинать с использования СвязьПоТипу, и только если функциональности этого механизма недостаточно для ваших специфических задач, переходить к использованию ОграничениеТипа и объекта ОписаниеТипов.

← На главную