Как найти и активировать строку в другой табличной части 1С при работе с управляемыми формами?

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

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

Понимаем принцип поиска нужной строки

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

Рассмотрим структуру кода для поиска:


// Получаем данные текущей строки из первой табличной части
СтрокаТЧ1 = Элементы.ТЧ1.ТекущиеДанные;

// Ищем строку во второй табличной части по номенклатуре
СтрокаТЧ2 = Объект.ТЧ2.Найти(СтрокаТЧ1.Номенклатура, "Номенклатура");

Если СтрокаТЧ2 <> Неопределено Тогда
    // Присваиваем новое значение
    СтрокаТЧ2.ЧистаяПрибыль = СтрокаТЧ1.ЧистаяПрибыль;
КонецЕсли;

Обратите внимание: метод Найти возвращает либо ссылку на найденную СтрокаТабличнойЧасти, либо значение Неопределено, если поиск не дал результатов. Это самый быстрый и надежный способ для задачи «один к одному».

Активируем строку в интерфейсе

Частая ошибка при разработке на управляемых формах — попытка обратиться к элементам через устаревший объект ЭлементыФормы. В современном интерфейсе 1С 8.3 необходимо использовать коллекцию Элементы.

Чтобы перевести фокус пользователя на найденную строку в таблице, мы должны присвоить свойству ТекущаяСтрока самого элемента формы объект найденной нами строки. Разберем, как это сделать правильно:


Если СтрокаТЧ2 <> Неопределено Тогда
    // Делаем строку активной, передавая в свойство саму найденную строку
    Элементы.ТЧ2.ТекущаяСтрока = СтрокаТЧ2;
КонецЕсли;

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


// Если ТЧ2 расположена на странице "Страница2"
Элементы.ПанельТаблиц.ТекущаяСтраница = Элементы.Страница2;
// И только после этого устанавливаем фокус
Элементы.ТЧ2.ТекущаяСтрока = СтрокаТЧ2;

Почему возникают ошибки и как их избежать?

Проанализируем основные сложности, с которыми сталкиваются при реализации:

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

Итоговый алгоритм действий

Соберем всё воедино для надежного решения задачи:

  1. Считаем данные из Элементы.ТЧ1.ТекущиеДанные.
  2. Используем метод Объект.ТЧ2.Найти() для поиска соответствия по колонке «Номенклатура».
  3. Проверяем найденную строку на Неопределено.
  4. Присваиваем новое значение колонке найденной строки.
  5. Устанавливаем Элементы.ТЧ2.ТекущаяСтрока, чтобы подсветить результат для пользователя.
  6. При необходимости переключаем страницу панели через ТекущаяСтраница.

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

← На главную