v8: Как проверить наличие колонки в строке таблицы. Ключевые слова: колонка,таблица значений,метаданные
Иногда хочется знать есть ли в строке объекта определенная колонка.
Самый простой вариант сделать это - использовать конструкцию "Попытка Исключение", например, попытаться получить значение в строке в указанной колонке и если возникнет исключение - колонки нет:
Попытка
Тмп=СтрокаТаблицыЗначений[НужноеИмяКолонки];
флЕстьКолонка=Истина;
Исключение
флЕстьКолонка=Ложь;
КонецПопытки;
Примечание. Это одно из применений универсального Книга знаний: Метод Рупора
Однако использование попытка исключение не является хорошим тоном в программировании на 1С (это вызывает трудности отладки и крушение внутри транзакций). Поищем другие пути.
Для строки документа или справочника можно проверить наличие колонки через метаданные.
Функция ЕстьРеквизитСтрокиТабличнойЧасти(СтрокаТаблицыЗначений, НужноеИмяКолонки) Экспорт
МД=Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТаблицыЗначений));
Если МД.Реквизиты.Найти(НужноеИмяКолонки)=Неопределено Тогда
Возврат ложь;
Иначе
Возврат истина;
КонецЕсли;
КонецФункции
А для таблиц значений Тюшкин Андрей предложил такой, немного изощренный, способ:
УИД = Новый УникальныйИдентификатор();
ВременнаяСтруктура = Новый Структура(НужноеИмяКолонки, УИД);
ЗаполнитьЗначенияСвойств(ВременнаяСтруктура, СтрокаТаблицыЗначений, НужноеИмяКолонки);
флЕстьКолонка=ВременнеяСтруктура[НужноеИмяКолонки] <> УИД;
|