ДД коллеги, задам может глупый вопрос, но ответа нигде не нашел...

Все знают и пользуются методом НайтиСтроки ТЧ. возвращает Массив, в котором "скопированы" названия колонок ТЧ. Программное обращение к данному массиву сродни обращению к Структуре. Например:

НайденныеСтроки[0].Сумма

Задался вопросом как определить есть ли в массиве условно говоря столбец с нужным названием? В Массиве нет как в Структуре свойство ИмяКлюча.

Кто что знает?
---
```1c
    Док = Документы.Документ1.СоздатьДокумент();
    НС = Док.ТабличнаяЧасть1.Добавить();
    Сообщить(ТипЗнч(НС));
    Мт = Метаданные.найтиПоТипу(ТипЗнч(НС));
    Сообщить(Мт.Родитель());
```

дальше сам
---
```1c
    ТЗ = ТаблТоваров.ВыгрузитьКолонки();
    Колонки = ТЗ.Колонки;
    Если Колонки.Найти("ИмяКолонки") = Неопределено Тогда
    // нет такой колонки
    КонецЕсли;
```
---
НайтиСтроки возвращает массив строкТЧ, строкаТЧ это отдельный программный объект. Вот массив этих объектов и возвращается.
Вы когда МояТЧ.Добавить() - пишете, вы вызываете конструктор объекта СтрокаТЧ.
---
Я это знаю. Вопрос в другом! Хорошо, сформулирую чуть по другому: как найти определенное название Колонки в ТЧ ? или в массиве строк?
---
некрасиво но быстро Попытка МояСтрока[КакаяТоКолонка] Исключение КонецПопытки. Красиво сейчас покажу
---
```1c
    Док = Документы.Документ1.СоздатьДокумент();
    НС = Док.ТабличнаяЧасть1.Добавить();
    Сообщить(ТипЗнч(НС));
    Мт = Метаданные.найтиПоТипу(ТипЗнч(НС));
    Сообщить(Мт.Родитель());
```

дальше сам
---
Спасибо навел на хорошую мысль! Получилось не сложно. Вот так:

```1c
    Для каждого Строчка Из ТаблицаВыб Цикл
    ТаблТоваров = Строчка.Документ.Товары;
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", Строчка.Номенклатура);
    СтрокаНомен = ТаблТоваров.НайтиСтроки(ПараметрыОтбора);
    Строчка.Цена = СтрокаНомен[0].Цена;
    ИскомаяКолонка = Метаданные.НайтиПоТипу(ТипЗнч(ТаблТоваров)).Реквизиты.СуммаНДС;
    Если ИскомаяКолонка <> Неопределено Тогда
    Строчка.НДС = СтрокаНомен[0].СуммаНДС;
    КонецЕсли;
    КонецЦикла;
```
---
для такого кода можно не искать колонку в метаданных. Воспользоваться заполнением свойств.

```1c
    Для каждого Строчка Из ТаблицаВыб Цикл
    ТаблТоваров = Строчка.Документ.Товары;
    ПараметрыОтбора = Новый Структура("Номенклатура", Строчка.Номенклатура);
    СтрокаНомен = ТаблТоваров.НайтиСтроки(ПараметрыОтбора);
    Если СтрокаНомен.Количество() > 0 Тогда
    ЗаполнитьЗначенияСвойств(Строчка,СтрокаНомен[0]);
    КонецЕсли;
    КонецЦикла;
```
---
А это уже реквизиты. Ищи в метаданных.
---
массив содержит только значения.
В данном случае ссылки на строки ТЧ.
Имена колонок можно получить у самой ТЧ.
---
есть такая тема что массив строк ТЧ (ладно, ссылок на строки ТЧ) уедет в ОбщийМодуль.ОбщийМетод() параметром и там надо без доступа к самому объекту владельцу ТЧ понять с чем имеем дело.
Может у ТС не так, но задачка интересная
---
а можно передавать просто массив цифр и требовать найти колонки неизвестной ТЧ.
Для правильной работы необходимо предоставить необходимы минимум исходных данных.
Передавать в метод помимо массива ссылок ТЧ и данные о самой ТЧ.
---
"надо изучать и другие языки программирования"(с) spacecraft - в java у вас бы не возникло таких вопросов, т.к. любой объект это прежде всего объект со всеми вытикающими свойствами и методами.

Вот у любого объекта 1С есть косвенный реквизит по которому что то можно сделать еще это его тип.
---
т.к. любой объект это прежде всего объект со всеми вытикающими свойствами и методами.
Вот только не надо... иначе не было бы там рефлексии. Просто в 1С это еще хуже.
---
Покажи как? ))))
---
пример, на котором показывать где?
---
Как в ТЧ найти нужную колонку? Вопрос не праздный - получаю таблицу Товары с разных документов. В некоторых нет НДС - соответственно разный механизм обработки...
---
см 11
---
Отвечай за "базар", а не отделывайся набором слов: покажи как "...Имена колонок можно получить у самой ТЧ"
---
не хами. Если не понятна эта фраза, то проблема не в этой фразе.
Ты передаешь что? ТЧ или таки ДанныеФормыКоллекция? Проверь тип данных, которые передаешь и попытайся понять разницу.
---
Простой пример: никуда ничего не передаю:

```1c
    ТаблТоваров = Строчка.Документ.Товары;
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", Строчка.Номенклатура);
    СтрокаНомен = ТаблТоваров.НайтиСтроки(ПараметрыОтбора);
```
---
```1c
    ТЗ = ТаблТоваров.ВыгрузитьКолонки();
    Колонки = ТЗ.Колонки;
    Если Колонки.Найти("ИмяКолонки") = Неопределено Тогда
    // нет такой колонки
    КонецЕсли;
```
---
Спс, да можно и так...
---
Как вариант воспользоваться БСП, есть метод в общем модуле ОбщегоНазначенияКлиентСервер.ЕстьСвойствоОбъекта
Вроде так называется

Там проверка без обращения к метаданным

Условно говоря создается структура с ключом имени вашей проверяемой колонки, заполняется уникальным идентификатором
После этого вызывается ЗаполнитьЗначенияСвойств
И проверка, что значение структуры совпадает с вышеуказанным идентификатором

Если не совпадает, значит заполнение прошло и данная колонка есть у строки
---
Метаданные.НайтиПоТипу(ТипЗнч(СтрокаНомен[0])).Родитель().ТабличныеЧасти[ТипЗнч(СтрокаНомен[0].Имя].Реквизиты

писал на вскидку, но догадаешься

ПС. дофига ошибок, так лучше:

```1c
    типЗначения = ТипЗнч(СтрокаНомен[0]);
    Мт = Метаданные.НайтиПоТипу(типЗначения).Родитель();
```

КоллекцияКолонок = Мт.ТабличныеЧасти[Метаданные.НайтиПоТипу(типЗначения).Имя].Реквизиты;