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