Разработка и Конфигурация · 9 мин
Как обратиться к столбцу в 1С: практическое руководство
Как обратиться к столбцу в 1С: синтаксис для табличной части документа, таблицы значений, результата запроса и динамического списка. Примеры кода и типичные ошибки.
Обращение к столбцу — одна из базовых операций во встроенном языке 1С, но её синтаксис зависит от того, с каким объектом вы работаете: табличной частью документа, таблицей значений, результатом запроса или формой. Ошибка в выборе способа приводит к типичным сообщениям вида «Поле объекта не обнаружено» или к молчаливому получению пустого значения.
Во всех случаях логика одинакова: сначала вы получаете коллекцию строк (табличную часть, таблицу значений, выборку запроса), затем конкретную строку, и только потом читаете или изменяете значение её колонки. Исключение — запрос, где столбец указывается прямо в тексте запроса, а в коде вы работаете уже с результатом.
Ниже разобраны основные сценарии с готовыми фрагментами кода, способы обращения по имени и по индексу, проверка существования колонки и типичные ошибки, которые встречаются даже у опытных разработчиков.
Как обратиться к столбцу табличной части документа или справочника
Табличная часть — это коллекция строк, встроенная в объект (документ, справочник). Чтобы прочитать или изменить значение столбца, нужно перебрать строки циклом или взять конкретную строку по индексу. Обращение к колонке выполняется через точку по её имени, заданному в конфигураторе.
// Перебор всех строк табличной части "Товары"
Для Каждого СтрокаТовара Из Объект.Товары Цикл
Сообщить(СтрокаТовара.Номенклатура); // чтение колонки
СтрокаТовара.Сумма = СтрокаТовара.Количество * СтрокаТовара.Цена; // запись
КонецЦикла;
// Обращение к первой строке по индексу (нумерация с нуля)
Если Объект.Товары.Количество() > 0 Тогда
ПерваяСтрока = Объект.Товары[0];
Сообщить(ПерваяСтрока.Цена);
КонецЕсли;
Имя колонки должно точно совпадать с именем реквизита табличной части в конфигураторе, включая регистр букв не имеет значения, но написание — критично. Если реквизита нет, при обращении возникнет ошибка «Поле объекта не обнаружено».
Как работать со столбцом таблицы значений
Таблица значений — универсальная структура для промежуточного хранения данных в памяти. Прежде чем обращаться к столбцу, его нужно добавить в коллекцию Колонки, иначе обращение вызовет ошибку. Чтение и запись выполняются так же, через точку от строки.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура");
ТЗ.Колонки.Добавить("Количество");
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000001");
НоваяСтрока.Количество = 5;
// Итог по столбцу без цикла
ВсегоКоличество = ТЗ.Итог("Количество");
У таблицы значений есть полезные методы, работающие с целым столбцом: Итог("ИмяКолонки") считает сумму, Найти(Значение, "ИмяКолонки") ищет строку по значению в колонке, НайтиСтроки(Отбор) возвращает массив подходящих строк. Это быстрее и нагляднее ручного перебора.
Как получить столбец из результата запроса
При работе с запросом столбцы (поля) задаются в тексте запроса, а в коде вы обращаетесь к ним через выборку или через выгруженную таблицу значений. Имена полей в выборке совпадают с именами в запросе или с псевдонимами, заданными через КАК.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Товар,
| Товары.Количество КАК Количество
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Товар); // обращение по псевдониму КАК
Сообщить(Выборка.Количество);
КонецЦикла;
Если выгрузить результат методом Выгрузить(), вы получите обычную таблицу значений, и дальше действуют все правила предыдущего раздела. Псевдонимы через КАК стоит давать всегда: они делают код устойчивым к изменениям структуры запроса и избавляют от автоматически сгенерированных имён вида «Поле1».
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗначениеКолонки = Выборка.ИмяПоля;
КонецЦикла;Обращение к столбцу по имени через строковую переменную
Иногда имя колонки заранее неизвестно — например, оно приходит из настроек пользователя или формируется динамически. В этом случае используется обращение через квадратные скобки со строковым выражением, аналогично работе со структурой.
ИмяКолонки = "Сумма";
Значение = СтрокаТаблицы[ИмяКолонки]; // чтение
СтрокаТаблицы[ИмяКолонки] = 1000; // запись
// Проверка существования колонки в таблице значений
Если ТЗ.Колонки.Найти(ИмяКолонки) <> Неопределено Тогда
Значение = ТЗ[0][ИмяКолонки];
КонецЕсли;
Для таблицы значений существование колонки проверяется через Колонки.Найти(). Для табличной части объекта прямой проверки нет — имя реквизита можно получить только через метаданные: Объект.Метаданные().ТабличныеЧасти.Товары.Реквизиты.Найти(ИмяКолонки).
Столбец на форме: таблица формы и динамический список
На управляемой форме столбец таблицы — это элемент формы, связанный с реквизитом данных. Важно различать: обращение к данным колонки идёт через реквизит формы (таблицу значений или дерево значений), а обращение к оформлению колонки — через коллекцию Элементы.
// Изменение данных текущей строки таблицы формы
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ТекущиеДанные.Цена = 150;
КонецЕсли;
// Изменение видимости столбца на форме
Элементы.ТоварыЦена.Видимость = Ложь;
Для динамического списка напрямую изменять данные нельзя — он предназначен для просмотра. Чтобы повлиять на состав столбцов, меняют текст запроса списка или настройки через Список.КомпоновщикНастроек. Текущую строку динамического списка получают через Элементы.Список.ТекущаяСтрока, где возвращается ключ записи (например, ссылка), а не строка с данными.
Проверка результата и типичные ошибки
После обращения к столбцу полезно убедиться, что вы получили именно то, что ожидали. Основной инструмент проверки — отладчик: поставьте точку останова на строке обращения и посмотрите значение в табло. Альтернатива — временный вывод через Сообщить() с указанием типа значения: Сообщить(ТипЗнч(Значение)).
Как проверить результат
Тип и содержимое соответствуют ожиданиям
Неопределено или пустое значение при заполненной строке
Колонки.Найти(Имя) вернул объект колонки
Вернул Неопределено — колонка не добавлена или имя неверно
После Записать() значение сохранено в базе
После перепроведения или повторного открытия значение старое — объект не был записан
Если обращение через точку выдаёт ошибку, а вы уверены в имени, проверьте, не работаете ли вы со строкой дерева значений (у неё свои колонки) или с данными формы, где коллекция называется иначе. Частая ситуация: разработчик обращается к Объект.Товары в модуле формы, тогда как данные лежат в реквизите формы с другим именем.
Часто задаваемые вопросы
Можно ли обратиться к столбцу по номеру (индексу), а не по имени?
У строки таблицы значений обращение по индексу колонки напрямую не поддерживается — только по имени. Но можно получить имя колонки по индексу через коллекцию колонок: ИмяКолонки = ТЗ.Колонки[2].Имя;, а затем обратиться Строка[ИмяКолонки].
Почему возникает ошибка «Поле объекта не обнаружено»?
Чаще всего причина в опечатке имени реквизита или в обращении к колонке, которой нет в данном объекте — например, к реквизиту шапки как к колонке табличной части. Проверьте имя в конфигураторе и убедитесь, что обращаетесь к строке, а не к самой табличной части.
Как изменить значение столбца во всех строках сразу?
Специальной команды массового присвоения нет — используется цикл Для Каждого с записью значения в каждую строку. Для вычисляемых итогов по колонке без цикла применяйте метод Итог("ИмяКолонки").
Чем отличается обращение к колонке в обычных и управляемых формах?
Принцип одинаков — через строку данных. Разница в доступе к строке: в управляемых формах текущую строку получают через Элементы.ИмяТаблицы.ТекущиеДанные, а в обычных формах работали напрямую с табличным полем и его данными. Также в управляемых формах нельзя обращаться к данным объекта напрямую — только через реквизиты формы.
Как прочитать столбец из строки, найденной по условию?
Используйте метод Найти(Значение, "ИмяКолонки") для таблицы значений или табличной части — он вернёт строку или Неопределено. Дальше обращайтесь к нужной колонке найденной строки, предварительно проверив, что результат не равен Неопределено.
Что важно запомнить
Столбец в 1С всегда доступен через строку: сначала получите строку (цикл, индекс, поиск, выборка запроса), затем обращайтесь к колонке по имени через точку или через квадратные скобки со строковой переменной. Проверяйте существование колонки и количество строк перед обращением — это устраняет большинство ошибок.