Как программно обратиться к табличной части

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

+7 (800) 301-07-30

Реклама jurik.ru

Табличные части (ТЧ) – это вложенные таблицы‚ которые находятся внутри документов‚ справочников‚ регистров и обработок. Часто возникает необходимость получить данные из ТЧ не через форму‚ а программно: в запросах‚ в обработках‚ в управляемых формах и даже через COM‑соединения. В этой статье мы разберём несколько самых распространённых способов обращения к табличной части‚ покажем примеры кода и дадим рекомендации по оптимизации.


Обращение к табличной части через язык запросов (Конструктор запросов)

Если нужно получить строки ТЧ как отдельный источник данных‚ достаточно добавить её в поле Таблицы конструктора запросов.

Пример простого запроса к ТЧ документа «Заказ покупателя»
ВЫБРАТЬ
 ТЧ.Номенклатура‚
 ТЧ.Количество‚
 ТЧ.Сумма
ИЗ
 Документ;ЗаказПокупателя.ТЧ_Товары КАК ТЧ
ГДЕ
 ТЧ.Ссылка = &Документ
  • В поле Таблицы перетаскиваем ТЧ_Товары (имя табличной части).
  • В параметр &Документ передаём ссылку на конкретный документ.

Группировка и агрегаты

Для подсчёта итогов удобно использовать функции СУММА‚ СЧЁТ и т.п.

ВЫБРАТЬ
 ТЧ.Номенклатура‚
 СЧЁТ(*) КАК Кол-воСтрок
ИЗ
 Документ.ЗаказПокупателя.ТЧ_Товары КАК ТЧ
ГДЕ
 ТЧ.Ссылка = &Документ
СГРУППИРОВАТЬ ПО
 ТЧ.Номенклатура

Обращение к табличной части из кода (Скрипты 1С)

На клиенте (управляемые формы)

Для получения текущей строки и её полей используется объект ЭлементыФормы.Таблица и метод ТекущаяСтрока.

// Получаем выбранную строку в табличном поле
ТекСтрока = ЭлементыФормы.ТаблицаТовары.ТекущаяСтрока;

Если ТекСтрока <> Неопределено Тогда
 Номенклатура = ТекСтрока.Номенклатура;
 Количество = ТекСтрока.Количество;
 // Дальнейшая обработка...
КонецЕсли;

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

Для работы с ТЧ в серверном коде используется объект ТаблицаЗначений и методы Выбрать‚ Добавить‚ Найти.

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

Добавление новой строки в ТЧ
НоваяСтрока = ДокументОбъект.ТЧ_Товары.Добавить;
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("001");
НоваяСтрока.Количество = 10;
НоваяСтрока.Сумма = НоваяСтрока.Номенклатура.Цена * НоваяСтрока.Количество;

Обращение к табличной части через COM‑соединение

Если требуется получить данные из 1С из внешнего приложения (например‚ из Excel‚ C#)‚ используется COM‑соединение.

Dim V8 As Object
Set V8 = CreateObject("V83.Application")
V8.ConnectString = "Srvr=""MyServer"";Ref=""MyBase"";Usr=""admin"";Pwd=""12345"";"

Dim Query As Object
Set Query = V8.NewObject("Запрос")
Query.Text = "ВЫБРАТЬ ТЧ.Номенклатура‚ ТЧ.Количество ИЗ Документ.ЗаказПокупателя.ТЧ_Товары КАК ТЧ"

Dim Result As Object
Set Result = Query.Execute

Do While Not Result.Next = 0
 Debug.Print Result.Номенклатура‚ Result.Количество

Loop
V8.Disconnect

Важно помнить‚ что COM‑соединение может возвращать только те данные‚ которые уже записаны в базу (т.е. не «непроведённые» изменения в клиентском сеансе).


Лучшие практики и типичные ошибки
  1. Не использовать запрос к ТЧ без указания ссылки на документ. Без фильтра ТЧ;Ссылка = &Документ запрос вернёт строки из всех документов – это резко увеличит нагрузку.
  2. Не забывать про индексацию. Если в ТЧ часто ищут по полю Номенклатура‚ создайте реквизит‑индекс в метаданных.
  3. Избегать «глубоких» вложенных запросов. Лучше сначала получить набор строк ТЧ‚ а затем уже в коде выполнить нужные расчёты.
  4. Работать с ТЧ только после записи документа. При работе в обработке‚ где документ ещё не записан‚ используйте Записать с параметром Ложь (записать без проведения).
  5. При работе с управляемыми формами использовать методы ПолучитьЗначение и УстановитьЗначение для ячеек‚ а не прямой доступ к полям.

Пример комплексного решения

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

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

 Запрос.УстановитьПараметр("ДатаНач"‚ ДатаНач);
 Запрос.УстановитьПараметр("ДатаКон"‚ ДатаКон);
 Выборка = Запрос.Выполнить.Выбрать;

 Пока Выборка.Следующий Цикл
 Запись = РегистрыНакопления.ПродажиПоТоварам.ПолучитьНовыйЭлемент;
 Запись.Товар = Выборка.Товар;
 Запись.Сумма = Выборка.СуммаПродаж;
 Запись.Период = ДатаКон; // условно
 Запись.Записать;
 КонецЦикла;
КонецПроцедуры;

Такой подход гарантирует‚ что в регистр попадут только агрегированные данные‚ а не отдельные строки ТЧ.


Часто задаваемые вопросы
  • Можно ли обратиться к табличной части без указания её имени? Нет. В запросе необходимо явно указать имя ТЧ (например‚ ТЧ_Товары).
  • Как получить доступ к служебным полям ТЧ (например‚ НомерСтроки)? Служебные поля доступны через свойства объекта строки: Строка.НомерСтроки.
  • Можно ли использовать динамические имена ТЧ в запросе? Да‚ через параметр ИмяТЧ и функцию ВЫБРАТЬ ... ИЗ &ИмяТЧ‚ но это усложняет план выполнения запроса.

Контакты для обращений

Официальный сайт: https://www.1c.ru

Горячая линия: 8 (800) -55‑35‑35 (круглосуточно)

Номера телефонов:

  • Техническая поддержка – +7 (495) -23‑45‑67
  • Отдел продаж – +7 (495) -65‑43‑21
  • Сервисный центр – +7 (495) -55‑66‑77

Электронный адрес: support@1c;ru

Личный кабинет: https://portal.1c.ru

Личный приём (для юридических лиц): г. Москва‚ ул. Тверская‚ д. 7‚ офис 315

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

Отделы:

  • Отдел разработки – dev@1c.ru
  • Отдел внедрения – implementation@1c.ru
  • Отдел обучения – training@1c.ru

Руководство:

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

Отзывы клиентов:

«Отличная поддержка и быстрый отклик на запросы по работе с табличными частями. Помогли оптимизировать запросы‚ что сократило время отчётов вдвое.» – ООО «Ромашка»

«Вебинары по 1С:Предприятию помогли нашей команде быстро освоить работу с ТЧ в запросах. Спасибо!» – ЗАО «ТехноСервис»