Как обратится к табличной части в 1с

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Табличные части (ТЧ) – один из самых часто используемых механизмов в 1С:Предприятие. Они позволяют хранить набор строк‑записей‚ связанных с объектом (документом‚ справочником‚ обработкой и т.п.). В статье рассматриваются два основных способа обращения к ТЧ:

  • Через конструктор запросов – когда требуется получить данные непосредственно из СУБД.
  • Программно (на клиенте и сервере) – для работы с текущими данными формы‚ обработки или бизнес‑логики.

Обращение к табличной части в конструкторе запросов

Что нужно знать

В 1С:Предприятие 8.x каждая табличная часть имеет собственный «виртуальный» объект‑таблицу‚ который можно добавить в раздел Таблицы конструктора запросов. При этом запрос будет формироваться к вложенной таблице‚ а не к полю основной таблицы.

Пример создания запроса

Допустим‚ у нас есть документ ПоступлениеТоваровУслуг с табличной частью Товары. Чтобы получить список всех товаров с их количеством и ценой‚ делаем следующее:

Запрос = Новый Запрос;
Запрос.Текст = 
 "ВЫБРАТЬ
 Товары.Номенклатура КАК Номенклатура‚
 Товары.Количество КАК Количество‚
 Товары.Цена КАК Цена
 ИЗ
 Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
 ГДЕ
 Товары.Количество > 0";
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
ПОКА Выборка;Следующий ЦИКЛ
 Сообщить(СтрокаФормат("Товар: %1‚ Кол-во: %2‚ Цена: %3"‚
 Выборка.Номенклатура‚ Выборка.Количество‚ Выборка.Цена));
КОНЕЦЦИКЛА;

Обратите внимание на запись Документ.ПоступлениеТоваровУслуг.Товары – именно так указывается путь к таблице ТЧ.

Объединение с основной таблицей

Если требуется вывести данные как из заголовка документа‚ так и из его ТЧ‚ используют LEFT JOIN (или INNER JOIN) между основной таблицей и таблицей ТЧ:

Запрос.Текст = 
 "ВЫБРАТЬ
 Документ.Номер КАК НомерДок‚
 Документ.Дата КАК ДатаДок‚
 Товары.Номенклатура КАК Товар‚
 Товары;Количество КАК Кол‚
 Товары.Сумма КАК Сумма
 ИЗ
 Документ.ПоступлениеТоваровУслуг КАК Документ
 ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
 ПО Документ.Ссылка = Товары.Ссылка";

Программное обращение к табличной части

На клиенте (в обработчике формы)

Самый простой способ – через объект ЭлементыФормы и свойство ТекущиеДанные табличной части.

Процедура ПриИзмененииТЧ(Элемент)
 ТекСтрока = Элемент.ТекущиеДанные;
 Если ТекСтрока = Неопределено Тогда
 Возврат;
 КонецЕсли;
 // Пример: вывести значение реквизита "Сумма"
 Сообщить("Сумма строки = " + ТекСтрока.Сумма);
КонецПроцедуры

На сервере (в модуле объекта)

Для обработки больших объёмов данных лучше использовать запрос к ТЧ‚ но иногда требуется прямой обход записей.

Процедура ОбработатьТЧ(ДокументСсылка)
 Док = Документы.ПоступлениеТоваровУслуг.ПолучитьОбъект(ДокументСсылка);
 Для Каждого Строка ТЧ Из Док.Товары Цикл
 // Строка – объект ТабличнаяЧасть.Строка
 Сообщить(Строка.Номенклатура + " – " + Строка.Количество);
 КонецЦикла;
КонецПроцедуры

Работа с табличными частями справочников и обработок

Синтаксис одинаковый‚ меняется только путь к объекту:

  • Справочник: Справочники.Контрагенты.Характеристики
  • Обработка: Обработка;ОбменДанными.Таблица

Получение текущих данных на сервере

Если нужно получить данные‚ которые ещё не записаны в базу (например‚ в обработчике НаСервере после изменения формы)‚ используйте метод ТекущиеДанные у объекта формы‚ передавая его в серверный модуль через ВызватьНаСервере.

Часто встречающиеся ошибки
  1. Неправильный путь к ТЧ в запросе. Нужно указывать полное имя: Документ.ИмяДокумента.ИмяТЧ.
  2. Отсутствие ссылки на запись ТЧ. При обходе в цикле убедитесь‚ что объект Документ получен через ПолучитьОбъект‚ иначе Товары будет пустой.
  3. Работа с ТЧ в режиме «НаКлиенте» без синхронизации. При изменении данных на клиенте они не попадают в СУБД до Записать документа.

Лучшие практики
  • Для больших объёмов данных используйте запросы к ТЧ‚ а не обход в цикле.
  • Всегда проверяйте ТекущиеДанные на Неопределено перед обращением.
  • Если требуется объединить данные из нескольких ТЧ‚ используйте UNION ALL в запросе.
  • Для ускорения запросов создавайте индексы по полям‚ часто используемым в ГДЕ и СОРТИРОВКА.

Пример полного сценария

Сценарий: пользователь открывает форму документа «Отчет о продажах»‚ нажимает кнопку «Сформировать»‚ система формирует запрос к табличной части «Продажи»‚ выводит результат в табличный элемент формы.

Процедура СформироватьОтчет(Команда)
 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 Продажи.Дата КАК Дата‚
 Продажи.Номенклатура КАК Товар‚
 СУММА(Продажи.Количество) КАК Количество‚
 СУММА(Продажи.Сумма) КАК Сумма
 ИЗ
 Документ.ОтчетОПродажах.Продажи КАК Продажи
 СГРУППИРОВАТЬ ПО
 Продажи.Дата‚

 Продажи.Номенклатура
 УПОРЯДОЧИТЬ ПО
 Продажи.Дата УБЫВ";
 Результат = Запрос.Выполнить;
 Выборка = Результат.Выбрать;
 // Очистим табличный элемент формы
 ЭлементыФормы.ТаблицаОтчета.Очистить;
 Пока Выборка.Следующий Цикл
 НоваяСтрока = ЭлементыФормы.ТаблицаОтчета.Добавить;
 НоваяСтрока.Дата = Выборка.Дата;
 НоваяСтрока.Товар = Выборка.Товар;
 НоваяСтрока.Количество = Выборка.Количество;
 НоваяСтрока.Сумма = Выборка.Сумма;
 КонецЦикла;
КонецПроцедуры

Контактная информация для обращений

Официальный сайт

https://www.example-1c-support.ru

Горячая линия

+7 (495) -23‑45‑67 (круглосуточно)

Номера телефонов
  • Техническая поддержка: +7 (495) -23‑45‑68
  • Отдел продаж: +7 (495) -23‑45‑69
  • Консультации по 1С:Предприятию: +7 (495) -23‑45‑70

Электронный адрес

support@example-1c-support.ru

Личный кабинет

Для зарегистрированных пользователей доступен личный кабинет‚ где можно отслеживать статус запросов‚ скачивать обновления и получать персональные рекомендации.

Личный приём

Приём специалистов в офисе по предварительной записи.

График приёма
  • Пн‑Пт: 09:00 – 18:00
  • Сб: 10:00 – 14:00
  • Вс: выходной

Отделы
  1. Отдел технической поддержки
  2. Отдел внедрения и адаптации
  3. Отдел разработки конфигураций
  4. Отдел обучения и сертификации

Руководство
  • Генеральный директор – Иванов И.И.
  • Технический директор – Петров П.П.
  • Директор по развитию – Сидорова С.С.

Отзывы

Мы ценим обратную связь. Оставить отзыв можно на странице «Отзывы клиентов» или отправив письмо на feedback@example-1c-support.ru.


Дата публикации: