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