УФ Как найти строку таблицы по значению в колонке и сделать её текущей?
УФ Как найти строку таблицы по значению в колонке и сделать её текущей?
НайтиСтроки( не работает.
в ТаблицаНаФорме.ТекущаяСтрока = полагается записать идентификатор строки.
Как его получить?
СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("КлючСвязи", КлючСвязи);
Элементы.ТаблцаНаФорме.НайтиСтроки(СтруктураДляПоиска);
А так пытаюсь обратиться к таблице
СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("КлючСвязи", КлючСвязи);
Объект.ИмяТабличнойЧасти.НайтиСтроки(СтруктураДляПоиска);
(24) Будь добр, напиши пожалуйста к чему относится ПолучитьИдентификатор()
В строке найденной в источнике нет такого метода.
(21) найти строки возвращает массив строк.
Ты не можешь массив назначить на текСтроку. это уже разные типы.
ТекущаяСтрока =
значение должно быть равно тоже именно строке. Одной строке.
Либо тогда тебе еще надо массив обойти 7 в нем уже будет тип конертной строки. целой.
(21)
ТаблицаФормы (FormTable)
ДанныеСтроки (RowData)
Синтаксис:
Тип: Произвольный.
Строка таблицы, данные которой необходимо получить. Тип параметра зависит от типа редактируемого значения.
Возвращаемое значение:
Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементДерева; ДанныеФормыЭлементКоллекции.
Для таблиц, связанных с разными типами данных, тип возращаемого значения данного метода может различаться:
Для динамического списка тип свойства — ДанныеФормыСтруктура;
Для дерева значений — ДанныеФормыЭлементДерева;
Для остальных (таблица значений, табличные части и др.) — ДанныеФормыЭлементКоллекции.
Описание:
Возвращает значение, содержащее данные указанной строки.
Тонкий клиент, веб-клиент, толстый клиент.
Из данных строки получить идентификатор
(29) Да, увы. У реквизита типа таблица на управляемой форме, источником которой является запрос или таб.часть документа, метода НайтиСтроки( почему-то нет, и именно в этом проблема.
Табличная часть в 1С
Многие объекты метаданных в 1С могут иметь табличную часть. У одного объекта может быть создано неограниченное количество табличных частей.
Табличная часть может быть создана только как подчиненный объект у какого-либо объекта метаданных, например у справочника или у документа.
Строка табличной части не является отдельным объектом. К строке можно обратиться только по индексу строки в табличной части.
Программно нельзя создать табличную часть через конструктор. Можно только получить к ней доступ через основной объект:
Строка табличной части
Добавить новую строку табличной части можно с помощью методов Добавить и Вставить. Через точку от строки табличной части можно обращаться к реквизитам строки:
Заполнение табличной части
Заполнить табличную часть можно по одной строке с помощью методов Добавить и Вставить, а также с помощью методов Загрузить и ЗагрузитьКолонку для массового заполнения табличной части:
Перебор табличной части
Перебрать табличную часть можно в цикле:
Удаление строк табличной части
Удалить одну строку табличной части можно с помощью метода Удалить. Для удаления всех строк применяется метод Очистить.
Как выгрузить табличную часть
Табличную часть можно выгрузить в таблицу значений методом Выгрузить. Также можно выгрузить в массив все значения одной колонки методом ВыгрузитьКолонку:
Методом ВыгрузитьКолонки можно создать пустую таблицу значений с такими же колонками, как у табличной части:
Итог по табличной части
Для получения итога по числовой колонке табличной части можно воспользоваться методом Итог:
Свернуть табличную часть
Чтобы свернуть табличную часть можно воспользоваться методом Свернуть. Первым параметром указывается список колонок группировки, вторым колонки суммирования. Все колонки табличной части должны быть указаны или в первом или во втором параметре.
Сортировка табличной части
Для сортировки табличной части используется метод Сортировать:
Поиск в табличной части
Чтобы найти строку в табличной части можно воспользоваться методами Найти и НайтиСтроки. Метод Найти позволяет найти одну (первую попавшуюся) строку по значению. Метод НайтиСтроки позволяет найти несколько строк, подходящих под условие:
ОЧИСТКА ТАБЛИЧНОЙ ЧАСТИ ДОКУМЕНТА
Каждый раз при выполнении кода могут добавляться новые строки, а вполне возможно, что пользователю старые строки не нужны. Поэтому, чтобы очищать имеющиеся строки, перед добавлением новых строк можно воспользоваться методом Очистить объекта СписокТоваров, который имеет тип ДанныйФормыКоллекция.
После выполнения этого метода вся табличная часть будет очищена.
ТЕКУЩАЯ СТРОКА ТАБЛИЧНОЙ ЧАСТИ
В процессе работы может возникнуть необходимость отработать текущую строку табличной части, т.е. ту строку, которая в данный момент выделена.

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

Для того, чтобы отработать изменение текущего поля цены, создадим обработчик события ПриИзменении этого поля.

В этом обработчике напишем код, который будет пересчитывать значения полей текущей строки табличной части.
Ещё пример: я создал команду, которая должна увеличивать количество в текущий строке табличной части в два раза и пересчитывать сумму. Эта команда размещена в командной панели таблицы и имеет следующий код:
Теперь доработаем этот пример: после увеличения текущей строки будем сдвигать текущую строку на строку вниз. Для этого допишем предыдущий код:
В этом коде мы получаем идентификатор текущий строки при помощи свойства таблицы управляемой формы ТекущаяСтрока, и если мы не выходим за приделы таблицы, то сдвигаем нашу текущую строку на один шаг вниз.
Также при помощи текущей строки можно находить аналогичную строку в соответствующей табличной части основного реквизита формы Объект, которую также можно изменять (строка на форме тоже изменится автоматически). Мы ранее сделали пересчет суммы при изменении цены, теперь сделаем пересчет суммы при изменении количества, но напрямую через реквизит Объект.
Методы таблиц значений 1С 8.3. Часть 1. Поиск и копирование
Продолжаем изучать программную работу с таблицей значений в 1С. В прошлых статьях мы научились создавать таблицу значений (как программно, так и на управляемой форме), добавлять колонки и строки таблицы значений. Осталось научиться работать с самой таблицей значений. В первой части мы узнаем, как находить строки по нужному отбору, и научимся копировать таблицу значений с нужным отбором.
Поиск в таблице значений 1С 8.3
Поиск в таблице значений можно осуществить с помощью двух методов: Найти и НайтиСтроки. Метод Найти является функцией, которая вернёт первую строку, где встречается искомое значение. Рекомендуется метод применять для поиска уникальных значений, т.к. при наличии нескольких строк с искомым значением, будет возвращена только одна. Если же нам нужно найти все строки, где встречается искомое значение, то необходимо использовать метод НайтиСтроки, который возвращает массив строк с нужным значением.
Разберем оба этих метода на примере.
Метод Найти таблицы значений 1С 8.3
Этот метод является функцией, которая возвращает строку, если искомое значение найдено, и Неопределено, если нет. При помощи этого метода можно найти любое значение, которое имеется в таблице значений. Причем, не обязательно знать колонку, где это значение может содержаться.
Данная функция имеет следующий синтаксис:
Найти(Значение, Колонки)
Значение – то значение, которое мы ищем в таблице.
Колонки – колонки таблицы значений, по которым осуществляется поиск (необязательный параметр, можно осуществлять поиск по всем колонкам таблицы значений).
Работа этого метода показана на следующем примере:
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «ФИО» );
ТЗ . Колонки . Добавить ( «ДатаРождения» );
//первая строка
НСтр = ТЗ . Добавить ();
НСтр . ФИО = «Иванов И.И» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 15 );
//вторая строка
НСтр = ТЗ . Добавить ();
НСтр . ФИО = «Петров П.С» ;
НСтр . ДатаРождения = Дата ( 1984 , 5 , 25 );
//третья строка
НСтр = ТЗ . Добавить ();
НСтр . ФИО = «Тарасов К.В» ;
НСтр . ДатаРождения = Дата ( 1987 , 6 , 11 );
//первая строка
стрТарасов = ТЗ . Найти ( «Тарасов К.В» , «ФИО» );
Если мы посмотрим на значение переменной стрТарасов в отладке, то увидим ссылку на конкретную строку таблицы значений.

Точно такой же результат будет, если мы очистим второй параметр.

Если же мы сделаем поиск по второй колонке, то результат будет Неопределено.

Такой же результат Неопределено будет и при поиске несуществующего значения.

Метод НайтиСтроки таблицы значений 1С 8.3
Если метод Найти возвращает конкретную строку таблицы значений, то метод НайтиСтроки, возвращает массив строк, которые соответствуют нужному условию. Данный метод имеет следующий синтаксис
НайтиСтроки(СтруктураПоиска)
У этого метода один параметр — структура, где в качестве ключей задаются названия колонок, по которым будет вестись поиск, а в качестве значений – те значения, по которым должен осуществляться поиск. Таким образом, если в методе Найти мы могли вести поиск только по одному значению, то при помощи метода НайтиСтроки можно осуществлять поиск по комбинации значений в разных колонках.
Переделаем предыдущую таблицу значений:
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «Фамилия» );
ТЗ . Колонки . Добавить ( «Имя» );
ТЗ . Колонки . Добавить ( «ДатаРождения» );
//первая строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Иванов» ;
НСтр . Имя = «Петр» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 15 );
//вторая строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Иванов» ;
НСтр . Имя = «Алексей» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 25 );
//третья строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Григорьев» ;
НСтр . Имя = «Петр» ;
НСтр . ДатаРождения = Дата ( 1987 , 6 , 11 );
Теперь найдем все строки таблицы значений, где встречается имя Петр
МассивСтрок = ТЗ . НайтиСтроки (Новый Структура ( «Имя» , «Петр» ));
Посмотрим на результат.

Или найдем всех Петров, родившихся 11.06.1987 года.
ПараметрыПоиска = Новый Структура ( «Имя,ДатаРождения» , «Петр» , Дата ( 1987 , 6 , 11 ));
МассивСтрок = ТЗ . НайтиСтроки ( ПараметрыПоиска );
В этот раз найденных строк будет меньше.

Если же мы зададим имя, которого нет в нашей таблице, то получим пустой массив.

Причем обратите внимание, в массиве содержится ссылка на строку таблицы значений. Это значит, что если Вы измените строку в массиве, то также изменится строка в таблице значений.
Скопировать таблицу значений 1С
В языке разработке 1С можно одну таблицу значений скопировать в другую. Причем можно просто скопировать структуру таблицы значений, т.е. создать точно такую же таблицу значений, с тем же набором колонок, но без строк. Такое копирование осуществляется при помощи метода СкопироватьКолонки. А также скопировать одну таблицу в другую с различными отборами, это можно сделать, используя метод Скопировать. Разберем оба этих метода.
Метод СкопироватьКолонки таблицы значений 1С 8.3
Данный метод является функцией, которая возвращает пустую таблицу значений, с набором колонок, как у изначальной. У этого метода следующий синтаксис:
СкопироватьКолонки(СписокКолонок)
Где, параметр СписокКолонок необязательный параметр, в нем должны быть перечислены имена колонок, которые присутствуют в изначальной таблице, и которые должны быть в новой. Если он не указан, то в новой таблице значений будут такие же колонки, что и в изначальной.
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «Фамилия» );
ТЗ . Колонки . Добавить ( «Имя» );
ТЗ . Колонки . Добавить ( «ДатаРождения» );
//новые таблицы
НовТЗ1 = ТЗ . СкопироватьКолонки ();
НовТЗ2 = ТЗ . СкопироватьКолонки ( «Фамилия,Имя» );
В примере выше, в таблице НовТЗ1 будет тот же набор колонок, что и в таблице ТЗ, а в таблице НовТЗ2 будут только колонки Фамилия и Имя.
Метод Скопировать таблицы значений 1С 8.3
Научимся копировать одну таблицу значений в другую, а в этом нам поможет метод Скопировать. Этот метод является функцией, которая возвращает новую таблицу значений. У него имеется два синтаксиса
Скопировать(Строки,Колонки)
Строки – массив строк таблицы значений, которые должны будут присутствовать в новой таблице. Необязательный параметр, если он пуст, то копируются все строки.
Колонки – строка имен колонок, которые перечислены через запятую. Также необязательный параметр, если он пуст, то в новой таблице будут все колонки.
Второй вариант синтаксиса
ПараметрыОтбора – структура, при помощи которой мы отберем нужные строки в новую таблицу значений. В качестве ключей структуры должны быть перечислены названия колонок, по которым будет вестись отбор, а в качестве значений – те значения, по которым должны отобраться нужные строки.
Рассмотрим примеры с обоими вариантами параметров. Будем использовать ту же таблицу, что и в предыдущих примерах, но отберем только те строки, у которых год рождения 1981.
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «Фамилия» );
ТЗ . Колонки . Добавить ( «Имя» );
ТЗ . Колонки . Добавить ( «ДатаРождения» );
//первая строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Иванов» ;
НСтр . Имя = «Петр» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 15 );
//вторая строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Иванов» ;
НСтр . Имя = «Алексей» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 25 );
//третья строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Григорьев» ;
НСтр . Имя = «Петр» ;
НСтр . ДатаРождения = Дата ( 1987 , 6 , 11 );
//формируем новый массив
МассивДляОтбора = Новый Массив ;
Для Каждого стрТЗ из ТЗ Цикл
Если Год ( стрТЗ . ДатаРождения ) = 1981 Тогда
МассивДляОтбора . Добавить ( стрТЗ );
КонецЕсли;
КонецЦикла;
//новая таблица значений
НовТЗ = ТЗ . Скопировать ( МассивДляОтбора , «Имя,ДатаРождения» );
Посмотрим на результат работы этой функции

Теперь скопируем таблицу значений, так, чтобы в новую таблицу вошли только те строки, где есть имя Петр и дата рождения равна 15.01.1981.
ТЗ = Новый ТаблицаЗначений ;
ТЗ . Колонки . Добавить ( «Фамилия» );
ТЗ . Колонки . Добавить ( «Имя» );
ТЗ . Колонки . Добавить ( «ДатаРождения» );
//первая строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Иванов» ;
НСтр . Имя = «Петр» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 15 );
//вторая строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Иванов» ;
НСтр . Имя = «Алексей» ;
НСтр . ДатаРождения = Дата ( 1981 , 1 , 25 );
//третья строка
НСтр = ТЗ . Добавить ();
НСтр . Фамилия = «Григорьев» ;
НСтр . Имя = «Петр» ;
НСтр . ДатаРождения = Дата ( 1987 , 6 , 11 );
//отбор
ПараметрыОтбора = Новый Структура ( «Имя,ДатаРождения» , «Петр» , Дата ( 1981 , 1 , 15 ));
//новая таблица значений
НовТЗ = ТЗ . Скопировать ( ПараметрыОтбора , «Имя,Фамилия» );
В этот раз будет следующий результат.

Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект.
Более подробно и основательно работа с таблицей значений в дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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