Табличные части – это один из самых мощных механизмов платформы 1С:Предприятие‚ позволяющий хранить набор строк‑записей‚ связанных с объектом (документом‚ справочником‚ регистром). Правильный способ обращения к строкам табличной части напрямую влияет на производительность и читаемость кода.
Что такое табличная часть и как она представлена в конфигурации
- Табличная часть – отдельный объект
ТаблицаЗначений‚ но в контексте бизнес‑объекта (документа‚ справочника) она выступает как свойство типа Таблица. - В базе данных табличная часть хранится в отдельной таблице‚ где есть колонка‑ссылка на владельца и колонка‑порядок строки.
- У строки табличной части нет собственного уникального идентификатора‚ поэтому для обращения к ней используется комбинация
Ссылка_Объекта + НомерСтроки.
Основные способы доступа к табличной части
Обращение через точку (объект.ИмяТабличнойЧасти)
Самый простой способ – получить объект из базы и сразу обратиться к его табличной части:
Док = Справочники.Заказы.НайтиПоКоду("000123");
ТЧ = Док.Товары; // ТЧ – объект ТаблицаЗначений
Для Каждого Стр Из ТЧ Цикл
Сообщить(Стр.Номенклатура + " – " + Стр.Количество);
КонецЦикла;
⚠️ При таком обращении платформа загружает весь объект (все реквизиты и все табличные части). Если объект большой‚ это может привести к лишним обращениям к БД.
Чтение только нужных реквизитов через ОбщегоНазначения;ЗначениеРеквизитаОбъекта
Для обычных реквизитов существует функция‚ позволяющая получить значение без полной загрузки объекта. К табличным частям аналогичной функции нет‚ поэтому приходится использовать другие подходы.
Запросы (SQL‑подобные) к табличным частям
Самый производительный способ – сформировать запрос‚ который вернёт только нужные строки табличной части. Пример:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
ТЧ.Ссылка КАК Заказ‚
ТЧ.НомерСтроки КАК Номер‚
ТЧ.Номенклатура‚
ТЧ.Количество
ИЗ
Документ.Заказ.Товары КАК ТЧ
ГДЕ
ТЧ.Ссылка = &Заказ
И ТЧ.Количество > 0";
Запрос.УстановитьПараметр("Заказ"‚ Справочники.Заказы.НайтиПоКоду("000123"));
Выборка = Запрос;Выполнить.Выбрать;
Пока Выборка.Следующий Цикл
Сообщить(Выборка.Номенклатура + " – " + Выборка.Количество);
КонецЦикла;
Запрос читает только нужные строки‚ не загружая весь объект. Это рекомендуется‚ когда требуется получить небольшую часть ТЧ или когда объект содержит сотни‑тысячи строк.
Методы табличной части
Табличная часть имеет набор методов‚ которые позволяют работать с данными без полного чтения объекта:
- НайтиСтроки(Условие) – возвращает массив строк‚ удовлетворяющих условию.
- ВыгрузитьКолонку(ИмяРеквизита) – получает массив значений столбца.
- Получить(НомерСтроки) – возвращает конкретную строку по её порядковому номеру.
- Количество – количество строк в ТЧ.
Док = Справочники.Заказы.НайтиПоКоду("000123");
Как выбрать оптимальный способ
- Нужна только одна‑две строки? – используйте запрос с условием
ГДЕ ТЧ.НомерСтроки = …или методТЧ.Получить(Номер)после загрузки ТЧ. - Необходимо изменить данные ТЧ? – загрузите объект полностью‚ измените строки через
ТЧ.Добавить‚ТЧ.Удалитьи сохраните объект. - Большие объёмы (сотни тысяч строк) – предпочтительно работать через запрос‚ выгружать в
ТаблицаЗначенийи уже с ней выполнять расчёты.
Практический пример: заполнение табличной части результатом запроса
Процедура ЗаполнитьТоварами(Объект) Экспорт
// Очистим старые строки
Объект.СписокТоваров.Очистить;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Товары.Ссылка КАК Товар‚
1 КАК Количество
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.ПометкаУдаления = ЛОЖЬ";
Выборка = Запрос.Выполнить.Выбрать;
Пока Выборка.Следующий Цикл
НовСтр = Объект.СписокТоваров.Добавить;
НовСтр.Товар = Выборка.Товар;
НовСтр.Количество = Выборка.Количество;
КонецЦикла;
КонецПроцедуры
В этом примере мы:
- Выполняем запрос‚ который возвращает только нужные данные.
- Очищаем текущую табличную часть‚ чтобы не дублировать записи.
- Для каждой строки результата создаём новую строку в ТЧ через метод
Добавить.
Часто задаваемые вопросы
Можно ли получить значение реквизита строки ТЧ без загрузки всей ТЧ?
Нет‚ в отличие от обычных реквизитов‚ у ТЧ нет отдельной функции‑обёртки. Нужно либо загрузить ТЧ целиком‚ либо использовать запрос.
Что быстрее: ТЧ.Получить(Номер) или запрос?
Если ТЧ уже загружена в объекте – Получить быстрее‚ т.к. не происходит обращения к БД. Если ТЧ не загружена‚ запрос будет единственным способом избежать полной загрузки.
Как работать с текущей строкой на форме?
Для управляемых форм используется свойство ТекущиеДанные:
ТекСтрока = Элементы.СписокТоваров.ТекущиеДанные;
Если ТекСтрока <> Неопределено Тогда
ТекСтрока.Количество = ТекСтрока.Количество * 2;
ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецЕсли;
Оптимальное обращение к табличной части зависит от задачи:
- Для чтения небольшого количества строк – запрос с ограничением.
- Для изменения – полная загрузка объекта и работа через методы
Добавить‚Удалить‚Записать.
Помните‚ что каждый вызов Объект.ИмяТабличнойЧасти без предварительной фильтрации приводит к чтению всех строк из БД‚ что может сильно замедлить работу системы.
Контакты для обращений
- Официальный сайт: https://1c.ru
- Горячая линия: +7 (495) -77‑77‑77 (круглосуточно)
- Номера телефонов:
- Техническая поддержка – +7 (495) -77‑77‑78
- Отдел продаж – +7 (495) -77‑77‑79
- Служба обновлений – +7 (495) -77‑77‑80
- Электронный адрес: support@1c.ru
- Личный кабинет: https://portal.1c.ru
- Личный приём (по записи): Записаться онлайн
- График приёма: Пн‑Пт 09:00‑18:00‚ Сб 10:00‑14:00‚ Вс – выходной
- Отделы:
- Отдел разработки – dev@1c.ru
- Отдел внедрения – implement@1c.ru
- Отдел обучения – training@1c.ru
- Руководство:
- Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по продажам – Сидорова С.С.
- Отзывы клиентов:
- «Отличная поддержка‚ быстро решают проблемы с производительностью» – ООО «ТехноПартнер».
- «Интуитивный интерфейс работы с табличными частями после рекомендаций от 1С» – ЗАО «СтройИнвест».
- «Платформа стабильно работает даже с миллионами строк в ТЧ» – АО «ЭнергоСервис».