1с как найти строку в табличной части документа по реквизиту

 +9 

   

Распечатать

1С 8.x : Найти строку в табличной части документа

Для поиска необходимого значения воспользуемся функцией НайтиСтроки().

Код 1C v 8.2 УП

 &НаСервере
Процедура НайтиТовар(СправочникНоменклатураСсылка)

Перем Отбор, НайденноеЗначение, Сч;

Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", СправочникНоменклатураСсылка);
НайденноеЗначение = Объект["ТЧНоменклатура"].НайтиСтроки(Отбор);

Если НайденноеЗначение.Количество() > 0 Тогда

Сч = 1;
Пока НайденноеЗначение.Количество() >= Сч Цикл
Сообщить(НайденноеЗначение[0].Наименование);
Сч = Сч + 1;
КонецЦикла;

КонецЕсли;

КонецПроцедуры


Код 1C v 8.х

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

// Необходимо найти МассивСтрок, состоящий из строк табличной части документа по 2 значениям.
СтруктураДляПоиска = Новый Структура;
структураДляПоиска.Вставить("Артикул",Артикул);
структураДляПоиска.Вставить("КодПартии",СтруктураПараметров.КодПартии);

МассивСтрок = ДокументДляДополнения.Товары.НайтиСтроки(структураДляПоиска);


Выгружаем колонку

Код 1C v 7.x

 ВыгрузитьТабличнуюЧасть("Товар")

Далее через НайтиЗначение ищем необходимую строку

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

Найти строку по заданным параметрам

Для решения задачи поиска строк в ТЧ будем использовать функцию НайтиСтроки.

Синтаксис: НайтиСтроки(<ПараметрыОтбора>)
Параметры: <ПараметрыОтбора> (обязательный)
Тип: Структура. Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры – искомое значение.
Возвращаемое значение: Массив из строк табличной части, соответствующих заданному условию поиска.
Замечание! Массив хранит ссылки на строки табличной части, то есть при изменении строки в табличной части, значение в массиве тоже будет изменено.
Описание: Осуществляет поиск строк табличной части, соответствующих заданному условию поиска.

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

Найти все строки ТЧ с определенным значением задачи.

  1. Создадим структуру отбор и установим значение задачи
  2. Применим функцию НайтиСтроки к нужной табличной части
  3. В переменной МассивНайденныхСтрок будут ссылки на строки таблицы которые содержат нужную нам задачу
Отбор = Новый Структура("Задача",ДокументСсылкаЗадача);
МассивНайденныхСтрок = ТЧПодзадачи.НайтиСтроки(Отбор);

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

Найти все строки ТЧ с определенным значением номенклатуры и количества

  1. Создаем структуру для отбора
  2. Устанавливаем два параметра поиска (если параметров больше устанавливаем столько, сколько надо)
  3. Ищем в таблице нужные строки
  4. Получаем переменную МассивНайденныхСтрок с нужными данными
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура",СправочникНоменклатураСсылка);
Отбор.Вставить("Количество",ИскомоеКоличество);

МассивНайденныхСтрок = РеализацияТовароУслуг.Товары.НайтиСтроки(Отбор);   

В примере номер три реализуем процедуру которая сообщит все цены номенклатуры в определенном документе.

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

Порядок действий будет похож на прошлые два примера:

  1. Создаем отбор и устанавливаем значения поиска
  2. Ищем в табличной части
  3. Сообщаем все цены которые нашли
&НаСервере
Процедура НайтиЦеныНаТовар(Документ,СправочникНоменклатураСсылка)
	Отбор = Новый Структура("Номенклатура", СправочникНоменклатураСсылка);
	МассивНайденныхСтрок = Документ["Товары"].НайтиСтроки(Отбор);
	Для Каждого ЭлМас Из  МассивНайденныхСтрок Цикл
		Сообщить(ЭлМас.Цена);
	КонецЦикла;
КонецПроцедуры   

В 1с существует метод Найти(), это устаревший метод для его не стоит использовать.

Дополнительные материалы по теме:

  1. Заметки и учебные примеры по программированию у меня на сайте ищите – тут
  2. Интересная статья про НайтиСтроки – тут

Для поиска необходимого значения воспользуемся функцией НайтиСтроки().

Код 1C v 8.2 УП

 &НаСервере
      
Процедура НайтиТовар(СправочникНоменклатураСсылка)

Перем Отбор, НайденноеЗначение, Сч;

Отбор = Новый Структура();
Отбор.Вставить("Номенклатура", СправочникНоменклатураСсылка);
НайденноеЗначение = Объект["ТЧНоменклатура"].НайтиСтроки(Отбор);

Если НайденноеЗначение.Количество() > 0 Тогда

Сч = 1;
Пока НайденноеЗначение.Количество() >= Сч Цикл
Сообщить(НайденноеЗначение[0].Наименование);
Сч = Сч + 1;
КонецЦикла;

КонецЕсли;

КонецПроцедуры


Код 1C v 8.х

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

// Необходимо найти МассивСтрок, состоящий из строк табличной части документа по 2 значениям.
СтруктураДляПоиска = Новый Структура;
структураДляПоиска.Вставить("Артикул",Артикул);
структураДляПоиска.Вставить("КодПартии",СтруктураПараметров.КодПартии);

МассивСтрок = ДокументДляДополнения.Товары.НайтиСтроки(структураДляПоиска);


Виртуальный 1С помощник


Выгружаем колонку

Код 1C v 7.x

 ВыгрузитьТабличнуюЧасть("Товар")

Далее через НайтиЗначение ищем необходимую строку

Информация взята с сайта http://helpf.pro

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

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

Я
   Тактик

18.09.13 — 11:41

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

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

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

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

  

Партнерская программа EFSOL Oblako

   Тактик

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С над вами издевнулась — заставила пергонять впустую туда-сюда бесполезную инфо, что вызывает недопонимание процессов и логики, а вы и рады собачится )))

На чтение 3 мин. Просмотров 829 Опубликовано 15.12.2019

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

Содержание

  1. Синтаксис
  2. Параметры
  3. Возвращаемое значение
  4. Описание
  5. Доступность
  6. Пример использования
  7. Таблица значений найти строки. Пример

Синтаксис

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

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

Параметры

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

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

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

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

Описание

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

Доступность

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

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

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

//Корректировать строку табличной части документа
//»ОС» — наименование табличной части
Тч = Док . ОС ;
Тч[ 0 ] . НалоговаяГруппаОС = Справочники . НалоговыеГруппы . НайтиПоНаименованию ( «Четвертая (с 2004 г)» );
Док . Записать ( РежимЗаписиДокумента . Проведение );

//——————————————————————
//Поиск в табличной части документа
//»Платежи» — наименование табличной части
Сообщить ( Док . Платежи . Найти ( ТоЧтоНужноНайти , «РеквизитВТабЧастиГдеИскатьЗначение» )[ «РеквизитВТабЧастиОткудаВзятьЗначение» ]);

//——————————————————————
//Cделать текущей строку табличной части формы документа
//»Выписки» — наименование табличной части
ЗаписьВыписка = ДокБанковскаяВыписка . Выписки . Добавить ();
ЗаписьВыписка . Реквизит1 = «Реквизит1» ;
ЗаписьВыписка . Реквизит2 = «Реквизит2» ;

ФормаВыписка = ДокБанковскаяВыписка . ПолучитьФорму ( «ФормаДокумента» );
ФормаВыписка . ЭлементыФормы . Выписки . ТекущаяСтрока = ЗаписьВыписка ;
ФормаВыписка . Открыть ();

//——————————————————————
//Удалить записи из табличной части документа с помощью структуры
Отбор = Новый Структура ;
Отбор . Вставить ( «КодОбъекта» , ЗначениеКодОбъекта );

Документ = Документы . ПриходнаяНакладная . НайтиПоНаименованию ( «Наименование» ). ПолучитьОбъект ();

//Удаляем записи табличной части
ЗаписиТабЧасти = Документ [ «НазваниеТабЧасти» ]. НайтиСтроки ( Отбор );
Для Каждого ЗаписьТабЧасти Из ЗаписиТабЧасти Цикл
Документ [ «НазваниеТабЧасти» ]. Удалить ( ЗаписьТабЧасти );
КонецЦикла;

//——————————————————————
//Удалить строки (записи) из табличной части документа в цикле (при переборе)
Док = ДокБанковскаяВыписка . ПолучитьОбъект ();
КоличествоЗаписей = Док . Выписки . Количество ();
КоличествоОборотов = 0 ;
Для ъ = 0 По КоличествоЗаписей — 1 Цикл
КоличествоОборотов = КоличествоОборотов + 1 ;

Если Док . Выписки [ ъ ]. ИмяПоля = Истина Тогда
Док . Выписки . Удалить ( Док . Выписки [ ъ ]);
ъ = ъ — 1 ;
КонецЕсли;

Если КоличествоОборотов = КоличествоЗаписей Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Док . Записать ();

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

Таблица значений найти строки. Пример

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

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

Синтаксис

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

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

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

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

Параметры

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

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

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

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

Описание

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

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

Доступность

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

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

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

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

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

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

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

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

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

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

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

Метод Найти

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Другие крутые статьи на нашем сайте:

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

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