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