Табличные части (ТЧ) – один из самых мощных механизмов платформы 1С: Предприятие. Они позволяют хранить наборы строк‑записей, связанных с объектом (документом, справочником, регистром). Правильное обращение к полям ТЧ необходимо как при написании бизнес‑логики, так и при построении запросов, форм и обработок.
Содержание - Основные понятия
- Обращение к полям ТЧ в коде
- Обращение к ТЧ в запросах
- Работа с ТЧ на формах
- Типичные ошибки и нюансы
- Лучшие практики
- FAQ
- Контакты для обращений
Основные понятия - Табличная часть – отдельный набор записей, хранящийся внутри объекта.
- Каждая ТЧ имеет имя, задаваемое в метаданных (например, Товары, Контакты).
- Записи ТЧ состоят из полей (колонок), которые тоже имеют имена.
- ТЧ может быть пустой – в этом случае при выборке она не будет возвращена, если не указать соответствующий параметр.
Как выглядит объект в метаданных
- Табличная часть – отдельный набор записей, хранящийся внутри объекта.
- Каждая ТЧ имеет имя, задаваемое в метаданных (например, Товары, Контакты).
- Записи ТЧ состоят из полей (колонок), которые тоже имеют имена.
- ТЧ может быть пустой – в этом случае при выборке она не будет возвращена, если не указать соответствующий параметр.
Как выглядит объект в метаданных
В конфигураторе у объекта (например, у документа ПоступлениеТоваров) в разделе Табличные части задаётся:
Табличная часть: Товары Поля: ౼ Номенклатура (Ссылка) ⎻ Количество (Число) ౼ Цена (Число) ౼ Сумма (Число, вычисляемое)
Обращение к полям ТЧ в коде Через объект документа/справочника
Для получения доступа к ТЧ необходимо сначала получить ссылку на объект, а затем – на его табличную часть.
Документ = Документы.ПоступлениеТоваров.НайтиПоНомеру(123);
Если Документ = Неопределено Тогда
Сообщить("Документ не найден");
Возврат;
КонецЕсли;
// Обращаемся к табличной части "Товары"
ТЧ = Документ.Товары;
// Перебираем строки ТЧ
Для Каждого Строка Из ТЧ Цикл
Номенклатура = Строка;Номенклатура;
Количество = Строка.Количество;
Цена = Строка.Цена;
// Пример расчёта
Сумма = Количество * Цена;
Сообщить(Строка.ПолучитьТекст + " – Сумма: " + Формат(Сумма, "ЧГ=0.00"));
КонецЦикла;
Обращение к текущей строке в обработчике формы
Если пользователь выбирает строку в табличном поле формы, её можно получить через ЭлементыФормы.ИмяТабличногоПоля.ТекущаяСтрока:
ТекСтрока = ЭлементыФормы.Товары.ТекущаяСтрока;
Если ТекСтрока = Неопределено Тогда
Сообщить("Строка не выбрана");
Возврат;
КонецЕсли;
Сообщить("Выбранный товар: " + ТекСтрока.Номенклатура.Наименование);
Добавление/удаление строк
НоваяСтрока = ТЧ.Добавить;
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("Т001");
НоваяСтрока.Количество = 10;
НоваяСтрока.Цена = 250;
// Удалить строку
ТЧ.Удалить(ТЧ[0]); // удалит первую строку
Обращение к ТЧ в запросах Как обратиться к ТЧ как к отдельной таблице
Как обратиться к ТЧ как к отдельной таблице
В запросе можно использовать синтаксис Таблица.ИмяТЧ – это виртуальная таблица, содержащая все строки ТЧ выбранных объектов.
ВЫБРАТЬ ДокументПоступлениеТоваров.Дата КАК ДатаДок, Товары.Номенклатура КАК Товар, Товары.Количество КАК Кол, Товары.Цена КАК Цена, Товары.Количество * Товары.Цена КАК Сумма ИЗ Документ.ПоступлениеТоваров КАК ДокументПоступлениеТоваров ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары ПО ДокументПоступлениеТоваров.Ссылка = Товары.Ссылка ГДЕ ДокументПоступлениеТоваров.Дата МЕЖДУ &ДатаНач И &ДатаКон
Вложенные запросы (подзапросы) для ТЧ
ВЫБРАТЬ
Товары.Номенклатура,
СУММА(Товары.Количество) КАК ВсегоКол,
СУММА(Товары.Количество * Товары.Цена) КАК ВсегоСумма
ИЗ
(ВЫБРАТЬ
Документ.ПоступлениеТоваров.Ссылка,
Товары.Номенклатура,
Товары.Количество,
Товары.Цена
ИЗ
Документ.ПоступлениеТоваров КАК Документ
ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары
ПО Документ.Ссылка = Товары.Ссылка
ГДЕ
Документ.ПоступлениеТоваров.Дата МЕЖДУ &ДатаНач И &ДатаКон) КАК Товары
СГРУППИРОВАТЬ ПО Товары.Номенклатура
Примечание о пустых ТЧ
Если в запросе не указать ВЫБОРКА с параметром ВКЛЮЧИТЬ_ПУСТЫЕ_ТЧ, то строки объектов без записей в ТЧ не попадут в результат. Чтобы их включить, используйте:
ВЫБРАТЬ ДокументПоступлениеТоваров.Дата, Товары.Номенклатура ИЗ Документ.ПоступлениеТоваров КАК ДокументПоступлениеТоваров ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары ПО ДокументПоступлениеТоваров.Ссылка = Товары.Ссылка ВКЛЮЧИТЬ_ПУСТЫЕ_ТЧ
Работа с ТЧ на формах Привязка табличного поля к ТЧ
В конфигураторе у формы укажите элемент ТабличноеПоле и в его свойствах задайте ИмяТабличногоПоля (например, Товары). После этого в коде формы можно работать с ЭлементыФормы.Товары.
Обновление данных после изменения
Процедура ТоварыПриИзменении(Элемент)
// Пересчёт суммы в текущей строке
ТекСтрока = Элемент.ТекущаяСтрока;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецПроцедуры
Выборка строк для печати
Для печати, например, контракта, часто требуется сформировать табличный документ из ТЧ. Пример:
Процедура ПечатьКонтракта(Команда)
Док = ЭтаФорма.Объект; // текущий документ
ТабДок = Новый ТабличныйДокумент;
ТабДок.Колонки.Добавить("Товар");
ТабДок.Колонки.Добавить("Кол-во");
ТабДок.Колонки.Добавить("Цена");
ТабДок.Колонки.Добавить("Сумма");
Для Каждого Строка Из Док.Товары Цикл
НовСтрока = ТабДок.Строки.Добавить;
НовСтрока[0] = Строка.Номенклатура.Наименование;
НовСтрока[1] = Строка.Количество;
НовСтрока[2] = Строка.Цена;
НовСтрока[3] = Строка.Сумма;
КонецЦикла;
ТабДок.Показать;
КонецПроцедуры
Типичные ошибки и нюансы - Не указано имя ТЧ – в коде часто забывают добавить
.ТЧ_Имя, в результате обращаются к полю основной таблицы. - Пустая ТЧ в запросе – без
ВКЛЮЧИТЬ_ПУСТЫЕ_ТЧ такие документы исчезают из выборки. - Неправильный тип данных – поле «Сумма» часто объявляют как
Число, но в запросах используют СУММА(...) без приведения. - Изменение ТЧ без сохранения – после изменения строк ТЧ необходимо вызвать
Объект.Записать, иначе изменения не сохранятся. - Обращение к текущей строке, когда её нет – всегда проверяйте
Если ТекСтрока = Неопределено Тогда … КонецЕсли;
Лучшие практики - Именуйте ТЧ осмысленно – короткое, но понятное имя (например,
Товары, Контакты). - Используйте константы для имён колонок – это упрощает рефакторинг.
- Не храните вычисляемые значения в ТЧ – лучше рассчитывать их в момент обращения.
- Проверяйте наличие строк перед обходом –
Если ТЧ.Количество = 0 Тогда … - Для больших объёмов данных используйте запросы – перебор в коде может сильно тормозить.
- Логируйте ошибки доступа – в обработчике
Попытка…Исключение выводите подробную информацию.
Часто задаваемые вопросы (FAQ) Как получить среднюю цену продажи товара?
ВЫБРАТЬ
Товары.Номенклатура,
СРЕДНЕЕ(Товары.Цена) КАК СредняяЦена
ИЗ
Документ.ПродажаТоваров КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары
ПО Док.Ссылка = Товары.Ссылка
ГДЕ
Товары.Номенклатура = &Номенклатура
Можно ли обратиться к ТЧ из внешних обработок?
.ТЧ_Имя, в результате обращаются к полю основной таблицы.ВКЛЮЧИТЬ_ПУСТЫЕ_ТЧ такие документы исчезают из выборки.Число, но в запросах используют СУММА(...) без приведения.Объект.Записать, иначе изменения не сохранятся.Если ТекСтрока = Неопределено Тогда … КонецЕсли;- Именуйте ТЧ осмысленно – короткое, но понятное имя (например,
Товары,Контакты). - Используйте константы для имён колонок – это упрощает рефакторинг.
- Не храните вычисляемые значения в ТЧ – лучше рассчитывать их в момент обращения.
- Проверяйте наличие строк перед обходом –
Если ТЧ.Количество = 0 Тогда … - Для больших объёмов данных используйте запросы – перебор в коде может сильно тормозить.
- Логируйте ошибки доступа – в обработчике
Попытка…Исключениевыводите подробную информацию.
Часто задаваемые вопросы (FAQ) Как получить среднюю цену продажи товара?
ВЫБРАТЬ
Товары.Номенклатура,
СРЕДНЕЕ(Товары.Цена) КАК СредняяЦена
ИЗ
Документ.ПродажаТоваров КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары
ПО Док.Ссылка = Товары.Ссылка
ГДЕ
Товары.Номенклатура = &Номенклатура
Можно ли обратиться к ТЧ из внешних обработок?
ВЫБРАТЬ Товары.Номенклатура, СРЕДНЕЕ(Товары.Цена) КАК СредняяЦена ИЗ Документ.ПродажаТоваров КАК Док ЛЕВОЕ СОЕДИНЕНИЕ Товары КАК Товары ПО Док.Ссылка = Товары.Ссылка ГДЕ Товары.Номенклатура = &Номенклатура
Можно ли обратиться к ТЧ из внешних обработок?
Да, достаточно передать объект (ссылка) в обработку в параметре СсылкаНаОбъект и дальше работать так же, как в обычном коде.
Как вывести все контакты (телефон, e‑mail) из справочника «Контрагенты»?
ВЫБРАТЬ
Контрагенты.Наименование,
Контакты.ТипКонтакта,
Контакты.Значение
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ ТКонтакты КАК Контакты
ПО Контрагенты.Ссылка = Контакты.Ссылка
Контакты для обращений
Если у вас возникли вопросы по работе с табличными частями, вы можете связаться с нашей технической поддержкой.
| Тип контакта | Информация |
|---|---|
| Официальный сайт | https://www.1c-support.ru |
| Горячая линия | +7 (495) -23‑45‑67 (круглосуточно) |
| Номера телефонов |
|
| Электронный адрес | support@1c-support.ru |
| Личный кабинет | https://cabinet.1c-support.ru |
| Личный приём | г. Москва, ул. Тверская, д. 7, офис 312 |
| График приёма | Пн‑Пт: 09:00 – 18:00 (перерыв 13:00 – 14:00) |
| Отделы |
|
| Руководство |
|
| Отзывы | Мы ценим ваше мнение! Оставить отзыв можно на странице Отзывы клиентов или отправив письмо на feedback@1c-support.ru. |
Если после прочтения статьи остались вопросы – смело пользуйтесь контактами из раздела Контакты для обращений. Мы всегда готовы помочь!