Табличные части (ТЧ) – один из самых часто используемых механизмов в 1С:Предприятие. Они позволяют хранить набор строк‑записей‚ связанных с объектом (документом‚ справочником‚ обработкой и т.п.). В статье рассматриваются два основных способа обращения к ТЧ:
- Через конструктор запросов – когда требуется получить данные непосредственно из СУБД.
- Программно (на клиенте и сервере) – для работы с текущими данными формы‚ обработки или бизнес‑логики.
Обращение к табличной части в конструкторе запросов Что нужно знать
В 1С:Предприятие 8.x каждая табличная часть имеет собственный «виртуальный» объект‑таблицу‚ который можно добавить в раздел Таблицы конструктора запросов. При этом запрос будет формироваться к вложенной таблице‚ а не к полю основной таблицы.
Пример создания запроса
Допустим‚ у нас есть документ ПоступлениеТоваровУслуг с табличной частью Товары. Чтобы получить список всех товаров с их количеством и ценой‚ делаем следующее:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура‚
Товары.Количество КАК Количество‚
Товары.Цена КАК Цена
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Количество > 0";
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
ПОКА Выборка;Следующий ЦИКЛ
Сообщить(СтрокаФормат("Товар: %1‚ Кол-во: %2‚ Цена: %3"‚
Выборка.Номенклатура‚ Выборка.Количество‚ Выборка.Цена));
КОНЕЦЦИКЛА;
Обратите внимание на запись Документ.ПоступлениеТоваровУслуг.Товары – именно так указывается путь к таблице ТЧ.
Объединение с основной таблицей
Если требуется вывести данные как из заголовка документа‚ так и из его ТЧ‚ используют LEFT JOIN (или INNER JOIN) между основной таблицей и таблицей ТЧ:
Запрос.Текст =
"ВЫБРАТЬ
Документ.Номер КАК НомерДок‚
Документ.Дата КАК ДатаДок‚
Товары.Номенклатура КАК Товар‚
Товары;Количество КАК Кол‚
Товары.Сумма КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг КАК Документ
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК Товары
ПО Документ.Ссылка = Товары.Ссылка";
Программное обращение к табличной части На клиенте (в обработчике формы)
Самый простой способ – через объект ЭлементыФормы и свойство ТекущиеДанные табличной части.
Процедура ПриИзмененииТЧ(Элемент)
ТекСтрока = Элемент.ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
// Пример: вывести значение реквизита "Сумма"
Сообщить("Сумма строки = " + ТекСтрока.Сумма);
КонецПроцедуры
На сервере (в модуле объекта)
Для обработки больших объёмов данных лучше использовать запрос к ТЧ‚ но иногда требуется прямой обход записей.
Процедура ОбработатьТЧ(ДокументСсылка)
Док = Документы.ПоступлениеТоваровУслуг.ПолучитьОбъект(ДокументСсылка);
Для Каждого Строка ТЧ Из Док.Товары Цикл
// Строка – объект ТабличнаяЧасть.Строка
Сообщить(Строка.Номенклатура + " – " + Строка.Количество);
КонецЦикла;
КонецПроцедуры
Работа с табличными частями справочников и обработок
Синтаксис одинаковый‚ меняется только путь к объекту:
- Справочник:
Справочники.Контрагенты.Характеристики - Обработка:
Обработка;ОбменДанными.Таблица
Получение текущих данных на сервере
Если нужно получить данные‚ которые ещё не записаны в базу (например‚ в обработчике НаСервере после изменения формы)‚ используйте метод ТекущиеДанные у объекта формы‚ передавая его в серверный модуль через ВызватьНаСервере.
Часто встречающиеся ошибки - Неправильный путь к ТЧ в запросе. Нужно указывать полное имя:
Документ.ИмяДокумента.ИмяТЧ. - Отсутствие ссылки на запись ТЧ. При обходе в цикле убедитесь‚ что объект
Документ получен через ПолучитьОбъект‚ иначе Товары будет пустой. - Работа с ТЧ в режиме «НаКлиенте» без синхронизации. При изменении данных на клиенте они не попадают в СУБД до
Записать документа.
Лучшие практики - Для больших объёмов данных используйте запросы к ТЧ‚ а не обход в цикле.
- Всегда проверяйте
ТекущиеДанные на Неопределено перед обращением. - Если требуется объединить данные из нескольких ТЧ‚ используйте
UNION ALL в запросе. - Для ускорения запросов создавайте индексы по полям‚ часто используемым в
ГДЕ и СОРТИРОВКА.
Пример полного сценария
Документ.ИмяДокумента.ИмяТЧ.Документ получен через ПолучитьОбъект‚ иначе Товары будет пустой.Записать документа.- Для больших объёмов данных используйте запросы к ТЧ‚ а не обход в цикле.
- Всегда проверяйте
ТекущиеДанныенаНеопределеноперед обращением. - Если требуется объединить данные из нескольких ТЧ‚ используйте
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
- Вс: выходной
Отделы - Отдел технической поддержки
- Отдел внедрения и адаптации
- Отдел разработки конфигураций
- Отдел обучения и сертификации
Руководство - Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по развитию – Сидорова С.С.
Отзывы
Мы ценим обратную связь. Оставить отзыв можно на странице «Отзывы клиентов» или отправив письмо на feedback@example-1c-support.ru.
Официальный сайт
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
- Вс: выходной
Отделы - Отдел технической поддержки
- Отдел внедрения и адаптации
- Отдел разработки конфигураций
- Отдел обучения и сертификации
Руководство - Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по развитию – Сидорова С.С.
Отзывы
- Отдел технической поддержки
- Отдел внедрения и адаптации
- Отдел разработки конфигураций
- Отдел обучения и сертификации
Руководство - Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по развитию – Сидорова С.С.
Отзывы
Мы ценим обратную связь. Оставить отзыв можно на странице «Отзывы клиентов» или отправив письмо на feedback@example-1c-support.ru.
Дата публикации: