Есть значение как найти строку

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

Метод Найти

Метод таблицы значений Найти, предназначен для поиска строки таблицы, содержащей указанное значение. Если строк содержащих значение будет несколько, будет найдена только первая из них. Эту особенность надо учитывать. Поиск осуществляется только на «равно». Синтаксис метода:

Таблица.Найти(<Значение>, <Колонки>)

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

Рассмотрим простой пример. У нас есть таблица значений с колонками: Номенклатура, Количество, Цена, Сумма. Найдем строку, содержащую значение 2 в колонке Количество или в колонке Цена.

Значение = 2;	
СписокКолонок = "Количество, Цена";
	
СтрокаТаблицы = ТаблицаТоваров.Найти(Значение, СписокКолонок);
	
Если Не СтрокаТаблицы = Неопределено Тогда
    Сообщить(СтрокаТаблицы.Номенклатура);	
КонецЕсли;

После поиска, обязательно делаем проверку на Неопределено. Иначе, в случае не найденной строки, можно получить ошибку.

При изменении значений в найденной строке, изменяются и значения в самой таблице. Это логично, так как мы работаем непосредственно со строкой таблицы значений.

Метод НайтиСтроки

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

Таблица.НайтиСтроки(<ПараметрыОтбора>)

Параметры отбора — это структура, где ключ — имя колонки таблицы, а значение — значение, по которому будет осуществляться поиск в данной колонке. Поиск элементов осуществляется только на «равно». Данный метод возвращает массив найденных строк таблицы, либо пустой массив, если по данным условиям ничего не найдено.

Пример 2. Пусть у нас есть Таблица значений содержащаяся в переменной Таблица, у которой есть колонки Наименование и Код.

Отбор = Новый Структура;
Отбор.Вставить("Наименование", "Сапоги");
Отбор.Вставить("Код", "000000111");

НайденныеСтроки = Таблица.НайтиСтроки(Отбор);

Для Каждого СтрокаТаблицы из НайденныеСтроки Цикл
    //Ваш код для обработки найденной строки таблицы значений
КонецЦикла;

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

Другие способы найти строки таблицы значений

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

Пример 3. Воспользуемся таблицей из самого первого примера. Обработаем строки, цена в которых находится в интервале от 100 до 1000.

Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
		
    Если СтрокаТаблицы.Цена >= 100
        И СтрокаТаблицы.Цена <= 1000 Тогда
			
	//Код по обработке найденной строки
			
    КонецЕсли;
		
КонецЦикла;

Пример 4. Сделаем тоже самое при помощи запроса.

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаТоваров", ТаблицаТоваров);

Запрос.Текст = 
"ВЫБРАТЬ
|    ТаблицаТоваров.Номенклатура КАК Номенклатура,
|    ТаблицаТоваров.Количество КАК Количество,
|    ТаблицаТоваров.Цена КАК Цена
|ПОМЕСТИТЬ ТаблицаТоваров
|ИЗ
|    &ТаблицаТоваров КАК ТаблицаТоваров
|;
|/////////////////////////////////////////////////
|ВЫБРАТЬ
|    ТаблицаТоваров.Номенклатура КАК Номенклатура,
|    ТаблицаТоваров.Количество КАК Количество,
|    ТаблицаТоваров.Цена КАК Цена
|ИЗ
|    ТаблицаТоваров КАК ТаблицаТоваров
|ГДЕ
|    ТаблицаТоваров.Цена МЕЖДУ 100 И 1000";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    //Код по обработке найденной строки
КонецЦикла;

Стоит заметить, что данные найденные запросом никак не связаны с таблицей значений. Это стоит учитывать, если вам необходимо изменять исходные данные.


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

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

Разберем оба этих метода на примере.

Метод Найти таблицы значений 1С 8.3

Этот метод является функцией, которая возвращает строку, если искомое значение найдено, и Неопределено, если нет. При помощи этого метода можно найти любое значение, которое имеется в таблице значений. Причем, не обязательно знать колонку, где это значение может содержаться.

Данная функция имеет следующий синтаксис:

Найти(Значение, Колонки)

Где:

Значение – то значение, которое мы ищем в таблице.

Колонки – колонки таблицы значений, по которым осуществляется поиск (необязательный параметр, можно осуществлять поиск по всем колонкам таблицы значений).

Работа этого метода показана на следующем примере:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«ФИО»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//первая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Иванов И.И»;
НСтр.ДатаРождения = Дата(1981,1,15);
//вторая строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Петров П.С»;
НСтр.ДатаРождения = Дата(1984,5,25);
//третья строка
НСтр = ТЗ.Добавить();
НСтр.ФИО = «Тарасов К.В»;
НСтр.ДатаРождения = Дата(1987,6,11);
//первая строка
стрТарасов = ТЗ.Найти(«Тарасов К.В»,«ФИО»);

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

Метод найти таблицы значений 1С

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

Метод найти таблицы значений 1С

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

Неопределено в результате метода найти таблицы значений

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

Неопределено в результате метода найти таблицы значений

Метод НайтиСтроки таблицы значений 1С 8.3

Если метод Найти возвращает конкретную строку таблицы значений, то метод НайтиСтроки, возвращает массив строк, которые соответствуют нужному условию. Данный метод имеет следующий синтаксис

НайтиСтроки(СтруктураПоиска)

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

Переделаем предыдущую таблицу значений:

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

Теперь найдем все строки таблицы значений, где встречается имя Петр

МассивСтрок = ТЗ.НайтиСтроки(Новый Структура(«Имя»,«Петр»));

Посмотрим на результат.

Метод НайтиСтроки таблицы значений 1С

Или найдем всех Петров, родившихся 11.06.1987 года.

ПараметрыПоиска = Новый Структура(«Имя,ДатаРождения»,«Петр»,Дата(1987,6,11));
МассивСтрок = ТЗ.НайтиСтроки(ПараметрыПоиска);

В этот раз найденных строк будет меньше.

Метод НайтиСтроки таблицы значений 1С

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

Метод НайтиСтроки возвращает пустой массив

Причем обратите внимание, в массиве содержится ссылка на строку таблицы значений. Это значит, что если Вы измените строку в массиве, то также изменится строка в таблице значений.

Скопировать таблицу значений 1С

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

Метод СкопироватьКолонки таблицы значений 1С 8.3

Данный метод является функцией, которая возвращает пустую таблицу значений, с набором колонок, как у изначальной. У этого метода следующий синтаксис:

СкопироватьКолонки(СписокКолонок)

Где, параметр СписокКолонок  необязательный параметр, в нем должны быть перечислены имена колонок, которые присутствуют в изначальной таблице, и которые должны быть в новой. Если он не указан, то в новой таблице значений будут такие же колонки, что и в изначальной.

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Фамилия»);
ТЗ.Колонки.Добавить(«Имя»);
ТЗ.Колонки.Добавить(«ДатаРождения»);
//новые таблицы
НовТЗ1 = ТЗ.СкопироватьКолонки();
НовТЗ2 = ТЗ.СкопироватьКолонки(«Фамилия,Имя»);

В примере выше, в таблице НовТЗ1 будет тот же набор колонок, что и в таблице ТЗ, а в таблице НовТЗ2 будут только колонки Фамилия и Имя.

Метод Скопировать таблицы значений 1С 8.3

Научимся копировать одну таблицу значений в другую, а в этом нам поможет метод Скопировать. Этот метод является функцией, которая возвращает новую таблицу значений. У него имеется два синтаксиса

Скопировать(Строки,Колонки)

Где:

Строки – массив строк таблицы значений, которые должны будут присутствовать в новой таблице. Необязательный параметр, если он пуст, то копируются все строки.

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

Второй вариант синтаксиса

Скопировать(ПараметрыОтбора, Колонки).

Где:

ПараметрыОтбора – структура, при помощи которой мы отберем нужные строки в новую таблицу значений. В качестве ключей структуры должны быть перечислены названия  колонок, по которым будет вестись отбор, а в качестве значений – те значения, по которым должны отобраться нужные строки.

Рассмотрим примеры с обоими вариантами параметров.  Будем использовать ту же таблицу, что и в предыдущих примерах, но отберем только те строки, у которых год рождения 1981.

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

Посмотрим на результат работы этой функции

Метод Скопировать таблицы значений 1С

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

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

В этот раз будет следующий результат.

Метод Скопировать таблицы значений 1С

Методы таблиц значений 1С 8.3. Часть 2. Сортировка, итоги и свертка.

Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект.

Более подробно и основательно работа с таблицей значений в дается в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Осуществляет поиск строки таблицы по значению.

Синтаксис

Метод Найти() имеет следующий синтаксис:

СтрокаТаблицыЗначений Найти(Значение, [Колонки=""])

А также альтернативный англоязычный синтаксис:

ValueTableString Find(Value, [Columns=""])

Параметры

Описание параметров метода Найти():

Имя параметра* Тип Описание
Значение Произвольный Искомое значение.
Колонки Строка Список имен колонок, разделенных запятыми, по которым производится поиск. Значение по умолчанию: пустая строка
*Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

СтрокаТаблицыЗначений — строка, в которой содержится искомое значение
Неопределено — если значение не найдено

Описание

Метод Найти() осуществляет поиск строки таблицы значений, содержащей искомое значение. По умолчанию, поиск осуществляется по всей таблице значений. Если указать параметр Колонки, поиск будет осуществляется только в указанных колонках таблицы значений.

Внимание! Метод находит только первую строку с указанным значением. Чтобы найти все строки, воспользуйтесь методом ТаблицаЗначений.НайтиСтроки()

Доступность

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

Пример использования

Пример кода с использованием метода Найти():

//создаем таблицу товаров
тз = Новый ТаблицаЗначений;
тз.Колонки.Добавить("Код");
тз.Колонки.Добавить("Наименование");
тз.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
тз.Колонки.Добавить("Цена"	, Новый ОписаниеТипов("Число"));
тз.Колонки.Добавить("Сумма"	, Новый ОписаниеТипов("Число"));

//добавляем товары и цены
НоваяСтрока = тз.Добавить();
НоваяСтрока.Код = "001";
НоваяСтрока.Наименование = "Стул деревянный";
НоваяСтрока.Количество = 2;
НоваяСтрока.Цена = 2000;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

НоваяСтрока = тз.Добавить();
НоваяСтрока.Код = "001";
НоваяСтрока.Наименование = "Стол деревянный";
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = 8000;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

//выводим итоговую информацию
найдСтрока = тз.Найти("Стол деревянный", "Наименование");
Если НЕ найдСтрока = Неопределено Тогда
	Сообщить("Найден товар: " + найдСтрока.Наименование + " на сумму " + найдСтрока.Сумма);
КонецЕсли

Читайте также:

Программная работа с таблицей значений

Поделиться страницей в соц.сетях

НАЙТИ, НАЙТИБ (функции НАЙТИ, НАЙТИБ)

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Еще…Меньше

В этой статье описаны синтаксис формулы и использование функций НАЙТИ и НАЙТИБ в Microsoft Excel.

Описание

Функции НАЙТИ и НАЙТИБ находят вхождение одной текстовой строки в другую и возвращают начальную позицию искомой строки относительно первого знака второй строки.

Важно: 

  • Эти функции могут быть доступны не на всех языках.

  • Функция НАЙТИ предназначена для языков с однобайтовой кодировкой, а функция НАЙТИБ — для языков с двухбайтовой кодировкой. Заданный на компьютере язык по умолчанию влияет на возвращаемое значение указанным ниже образом.

  • Функция НАЙТИ при подсчете всегда рассматривает каждый знак, как однобайтовый, так и двухбайтовый, как один знак, независимо от выбранного по умолчанию языка.

  • Функция НАЙТИБ при подсчете рассматривает каждый двухбайтовый знак как два знака, если включена поддержка языка с БДЦС и такой язык установлен по умолчанию. В противном случае функция НАЙТИБ рассматривает каждый знак как один знак.

К языкам, поддерживающим БДЦС, относятся японский, китайский (упрощенное письмо), китайский (традиционное письмо) и корейский.

Синтаксис

НАЙТИ(искомый_текст;просматриваемый_текст;[нач_позиция])

НАЙТИБ(искомый_текст;просматриваемый_текст;[нач_позиция])

Аргументы функций НАЙТИ и НАЙТИБ описаны ниже.

  • Искомый_текст    — обязательный аргумент. Текст, который необходимо найти.

  • Просматриваемый_текст    — обязательный аргумент. Текст, в котором нужно найти искомый текст.

  • Начальная_позиция    — необязательный аргумент. Знак, с которого нужно начать поиск. Первый знак в тексте «просматриваемый_текст» имеет номер 1. Если номер опущен, он полагается равным 1.

Замечания

  • Функции НАЙТИ и НАЙТИБ работают с учетом регистра и не позволяют использовать подстановочные знаки. Если необходимо выполнить поиск без учета регистра или использовать подстановочные знаки, воспользуйтесь функцией ПОИСК или ПОИСКБ.

  • Если в качестве аргумента «искомый_текст» задана пустая строка («»), функция НАЙТИ выводит значение, равное первому знаку в строке поиска (знак с номером, соответствующим аргументу «нач_позиция» или 1).

  • Искомый_текст не может содержать подстановочные знаки.

  • Если find_text не отображаются в within_text, find и FINDB возвращают #VALUE! значение ошибки #ЗНАЧ!.

  • Если start_num не больше нуля, то найти и найтиБ возвращает значение #VALUE! значение ошибки #ЗНАЧ!.

  • Если start_num больше, чем длина within_text, то поиск и НАЙТИБ возвращают #VALUE! значение ошибки #ЗНАЧ!.

  • Аргумент «нач_позиция» можно использовать, чтобы пропустить нужное количество знаков. Предположим, например, что для поиска строки «МДС0093.МесячныеПродажи» используется функция НАЙТИ. Чтобы найти номер первого вхождения «М» в описательную часть текстовой строки, задайте значение аргумента «нач_позиция» равным 8, чтобы поиск в той части текста, которая является серийным номером, не производился. Функция НАЙТИ начинает со знака 8, находит искомый_текст в следующем знаке и возвращает число 9. Функция НАЙТИ всегда возвращает номер знака, считая от левого края текста «просматриваемый_текст», а не от значения аргумента «нач_позиция».

Примеры

Скопируйте образец данных из следующей таблицы и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — клавишу ВВОД. При необходимости измените ширину столбцов, чтобы видеть все данные.

Данные

Владимир Егоров

Формула

Описание

Результат

=НАЙТИ(«В»;A2)

Позиция первой «В» в ячейке A2

1

=НАЙТИ(«в»;A2)

Позиция первой «в» в ячейке A2

6

=НАЙТИ(«и»;A2;3)

Позиция первой «и» в строке А2, начиная с третьего знака

8

Пример 2

Данные

Керамический изолятор №124-ТД45-87

Медная пружина №12-671-6772

Переменный резистор №116010

Формула

Описание (результат)

Результат

=ПСТР(A2;1;НАЙТИ(» №»;A2;1)-1)

Выделяет текст от позиции 1 до знака «№» в строке («Керамический изолятор»)

Керамический изолятор

=ПСТР(A3;1;НАЙТИ(» №»;A3;1)-1)

Выделяет текст от позиции 1 до знака «№» в ячейке А3 («Медная пружина»)

Медная пружина

=ПСТР(A4;1;НАЙТИ(» №»;A4;1)-1)

Выделяет текст от позиции 1 до знака «№» в ячейке А4 («Переменный резистор»)

Переменный резистор

Нужна дополнительная помощь?

Нужны дополнительные параметры?

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

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

УФ Как найти строку таблицы по значению в колонке и сделать её текущей?

Я
   Тактик

18.09.13 — 11:41

УФ Как найти строку таблицы по значению в колонке и сделать её текущей?

НайтиСтроки( не работает.

в ТаблицаНаФорме.ТекущаяСтрока = полагается записать идентификатор строки.

Как его получить?

   Тактик

1 — 18.09.13 — 11:44

Пытаюсь найти

СтруктураДляПоиска = Новый Структура;

СтруктураДляПоиска.Вставить(«КлючСвязи», КлючСвязи);

Элементы.ТаблцаНаФорме.НайтиСтроки(СтруктураДляПоиска);

А так пытаюсь обратиться к таблице

Элементы.ТаблицаНаФорме.ТекущаяСтрока = ИндексТекущейСтроки;

   banco

2 — 18.09.13 — 11:44

(0) что значит НайтиСтроки() не работает?

   Тактик

3 — 18.09.13 — 11:46

(2) НайтиСтроки( синтаксиспомощник не предлагает, а если пишешь вручную пишет ошибку.

   Тактик

4 — 18.09.13 — 11:49

(2) Метод объекта не обнаружен (НайтиСтроки)

   Defender aka LINN

5 — 18.09.13 — 11:51

(0) «в ТаблицаНаФорме.ТекущаяСтрока = полагается записать идентификатор строки.

Как его получить?» — ты не поверишь…

(3) «НайтиСтроки( синтаксиспомощник не предлагает, а если пишешь вручную пишет ошибку.» — у работает. Что я делаю не так?

   Defender aka LINN

6 — 18.09.13 — 11:51

+(5) Хотя у табличного поля реально нет такого метода, факт

   Тактик

7 — 18.09.13 — 11:52

(5) напиши пожалуйста что ты пишешь до НайтиСтроки(

   Тактик

8 — 18.09.13 — 11:53

(6) Это не табличное поле, а элемент формы типа «таблица».

   Eugeneer

9 — 18.09.13 — 11:55

Очень легко

ТекущиеДанные = ЭлементыФормы.ГруппыНоменклатуры.ТекущиеДанные;

    НайденнаяСтрока = ДеревоНоменклатуры.Строки.Найти(ТекущиеДанные.Группа,»Номенклатура»,Истина);

    
    ЭлементыФормы.ДеревоНоменклатуры.ТекущаяСтрока = НайденнаяСтрока;

   banco

10 — 18.09.13 — 11:55

(8) а ПутьКДанным что у этого элемента?

   banco

11 — 18.09.13 — 11:56

(9) у тебя пример из обычных форм

   Тактик

12 — 18.09.13 — 11:57

«ЭлементыФормы» — это обычные формы, там я и сам знаю. Но на УФ это не работает.

   Eugeneer

13 — 18.09.13 — 11:57

(11) ща управляемые дам

   Тактик

14 — 18.09.13 — 11:57

(9) «ЭлементыФормы» — это обычные формы, там я и сам знаю. Но на УФ это не работает.

   Defender aka LINN

15 — 18.09.13 — 11:58

(8) Чо ты меня лечишь? Я прекрасно вижу, что у тебя где прямо отсюда.

   Тактик

16 — 18.09.13 — 11:59

(15) Я же писал — таблица на форме обработки. Управляемые формы. На УФ не может быть «таблицы значений»

   olegves

17 — 18.09.13 — 12:00

(1) попробуй так:

СтруктураДляПоиска = Новый Структура;

СтруктураДляПоиска.Вставить(«КлючСвязи», КлючСвязи);

Объект.ИмяТабличнойЧасти.НайтиСтроки(СтруктураДляПоиска);

   Тактик

18 — 18.09.13 — 12:01

(15) и табличного поля тоже…

   Defender aka LINN

19 — 18.09.13 — 12:01

(18) О как.

*умчался за попкорном*

   Eugeneer

20 — 18.09.13 — 12:02

Короче не могу найти старую версию обработки. В УТ11 есть типовой подбор, там пример.

При активации номенклатуры в окне с иерархией автоматом становится на родителя этой номенклатуры

   Тактик

21 — 18.09.13 — 12:02

(17) Пробовал. Великолепно ищет строки в источнике. Но как эту строку потом связать с строкой в таблице на УФ.

   Тактик

22 — 18.09.13 — 12:02

(20) Спасибо, буду смотреть.

   Eugeneer

23 — 18.09.13 — 12:03

Вот из УТ11

Форма.Элементы.ИерархияНоменклатуры.ТекущаяСтрока = ТекущиеДанные.Родитель;

   banco

24 — 18.09.13 — 12:03

(21) с этого и надо было начинать. ПолучитьИдентификатор()

   Defender aka LINN

25 — 18.09.13 — 12:04

(21) ВОЗМОЖНО, только ВОЗМОЖНО стоит таки отлипнуть от Мисты и заглянуть в СП — а нет ли там СЛУЧАЙНО каких-нибудь методов, связанных с идентификаторами?

   Тактик

26 — 18.09.13 — 12:05

(24) Будь добр, напиши пожалуйста к чему относится ПолучитьИдентификатор()

В строке найденной в источнике нет такого метода.

   Тактик

27 — 18.09.13 — 12:05

(25) я смотрел. увы, примеров кода нет, к чему этот идентификатор относится тоже не понятно

   Eugeneer

28 — 18.09.13 — 12:06

(21) найти строки возвращает массив строк.

Ты не можешь массив назначить на текСтроку. это уже разные типы.

ТекущаяСтрока =

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

Либо тогда тебе еще надо массив обойти 7 в нем уже будет тип конертной строки. целой.

   Defender aka LINN

29 — 18.09.13 — 12:06

(26) Да у тебя и у таблицы метода нет…

   olegves

30 — 18.09.13 — 12:08

(21)

ТаблицаФормы (FormTable)

ДанныеСтроки (RowData)

Синтаксис:

ДанныеСтроки(<Строка>)

Параметры:

<Строка> (обязательный)

Тип: Произвольный.

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

Возвращаемое значение:

Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементДерева; ДанныеФормыЭлементКоллекции.

Для таблиц, связанных с разными типами данных, тип возращаемого значения данного метода может различаться:

Для динамического списка тип свойства — ДанныеФормыСтруктура;

Для дерева значений — ДанныеФормыЭлементДерева;

Для остальных (таблица значений, табличные части и др.) — ДанныеФормыЭлементКоллекции.

Описание:

Возвращает значение, содержащее данные указанной строки.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.

Из данных строки получить идентификатор

   Eugeneer

31 — 18.09.13 — 12:08

Короче все есть. У меня обработка была полностью рабочая. Но я потом все переделал и это вообще исчезло.

   Тактик

32 — 18.09.13 — 12:09

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

буду благодарен если поможете мне его найти.

   Тактик

33 — 18.09.13 — 12:11

(30) Спмсибо, откуда растет идентификатор понятно.

Осталось разобраться как найти строку

   banco

34 — 18.09.13 — 12:11

(32) ты путаешь реквизит формы с элементом формы

   Тактик

35 — 18.09.13 — 12:13

(34) Виноват, действительно. Речь идет об элементе формы… может сделать его реквизитом?

   banco

36 — 18.09.13 — 12:16

(35) подожди, у тебя на форме есть таблица, какой источник(ПутьКДанным) у этой таблицы?

   Eugeneer

37 — 18.09.13 — 12:17

Сделай таблицу — табличной частью самой обработки. реквизитом объекта.

   Eugeneer

38 — 18.09.13 — 12:18

если у тебя ТЗ не является реквизитом объекта а добавлена как реквизит формы — ты действительно по ней хрен чо сделаешь.

   Defender aka LINN

39 — 18.09.13 — 12:19

(38) Маня, если ты не знаешь нифига про управляемые формы — нефиг пытаться других чему-то «учить»

   Eugeneer

40 — 18.09.13 — 12:21

(39) я вижу что ты пока ничего не знаешь раз нет результата. А он у меня есть. Я с первого дня выхода УТ11 уже писал обработки.

   banco

41 — 18.09.13 — 12:22

(40) но в (38) ты не прав

   olegves

42 — 18.09.13 — 12:23

(33)

СтруктураДляПоиска = Новый Структура;

СтруктураДляПоиска.Вставить(«КлючСвязи», КлючСвязи);

нс = Объект.ИмяТабличнойЧасти.НайтиСтроки(СтруктураДляПоиска);

ИДстроки = Элементы.ИмяТЧ.ДанныеСтроки(нс[0]).ПолучитьИдентификатор();

   olegves

43 — 18.09.13 — 12:24

+ (42) дальше сообразишь?

   Eugeneer

44 — 18.09.13 — 12:26

(41) абсолютно прав.

   Defender aka LINN

45 — 18.09.13 — 12:26

(40) Маня, ты кретин, не?

   Eugeneer

46 — 18.09.13 — 12:27

(42) даже подтверждает это.

Как мы видим Объект.ИмятабличнойЧасти это и есть табличная часть объекта. а не ТЗ добавленная как элемент формы.

   Eugeneer

47 — 18.09.13 — 12:27

(45) иди нах. с неучами не о чем говорить.

   banco

48 — 18.09.13 — 12:28

(46) если будет ТЗ как реквизит формы, тогда просто надо писать имяТЗ.НайтиСтроки()

   Eugeneer

49 — 18.09.13 — 12:35

(0) короче не ипите мосх.

Вот из синтаксиса в самой типовой

Запрос = Новый Запрос;

ТекстЗапроса =

    «ВЫБРАТЬ

    // текст запроса

    // …

    «;

Запрос.Текст = ТекстЗапроса;

СписокРаботников = Запрос.Выполнить().Выгрузить();

Отбор = Новый Структура();

Отбор.Вставить(«ФизЛицо»,Справочники.ФизическиеЛица.ПустаяСсылка());

Строки = СписокРаботников.НайтиСтроки(Отбор);

Если Строки.Количество() > 0 Тогда

    ЭлементыФормы.СписокРаботников.ТекущаяСтрока = Строки[0];

КонецЕсли;

   olegves

50 — 18.09.13 — 12:36

(46) не совсем так, это ТаблицаФормы, а чтобы она стала ТЧ, надо выполнить РеквизитФормыВЗначение()

   Infsams654

51 — 18.09.13 — 12:38

(49) какие ЭлементыФормы в УФ ?

   Тактик

52 — 18.09.13 — 13:11

УРА! Заработало!

Всем огромное спасибо за помощь. Никто не дал готового решения, но все понемногу подсказали и пазл сложился.

Как сделал:

1. На форму добавил реквизит типа «ТаблицаЗначений» (не элемент формы, а именно реквизит), в нем создал необходимые колонки.

2. Запросом заполнил полученный реквизит (РезультатЗапроса.Выгрузить())

3. Нашел строку содержащую значение в нужной колонке

СтруктураДляПоиска = Новый Структура;

СтруктураДляПоиска.Вставить(«КлючСвязи», КлючСвязи);

МассивСтрок = ТаблицаКакРеквизитФормы.НайтиСтроки(СтруктураДляПоиска);

4. Установил текущую строку по индексу.            Элементы.ТаблицаНаФорме.ТекущаяСтрока = МассивСтрок[0].ПолучитьИдентификатор();

Вывод: ЭлементыФормы только для отображения данных, если нужно сделать что-то еще используйте реквизиты формы.

   МимохожийОднако

53 — 18.09.13 — 13:12

(52)Молодца.

   Тактик

54 — 18.09.13 — 13:12

В догонку пункт 1.1. — выложил этот реквизит на форму.

   Тактик

55 — 18.09.13 — 13:13

Реквизит переименовал в ТаблицаНаФорме

   Eugeneer

56 — 18.09.13 — 13:26

(52) ну а я о чем говорил?

Тебе просто оставалось сделать Элементы

и к строке дописать .ПолучитьИдентификатор();

   Defender aka LINN

57 — 18.09.13 — 13:32

(47) Это ты про себя, что ли?

  

Odavid

58 — 18.09.13 — 13:44

(45), (47), (57) 1С над вами издевнулась — заставила пергонять впустую туда-сюда бесполезную инфо, что вызывает недопонимание процессов и логики, а вы и рады собачится )))

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Саартал как найти магические артефакты
  • Что за ошибка memory management windows 10 как исправить
  • Тачскрин тупит как исправить
  • Как найти массу зная только объем химия
  • Как найти логин сбербанк онлайн через

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии