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