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