Запрос обращение к табличной части документа

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

+7 (800) 301-07-30

Реклама jurik.ru

Цель статьи: подробно рассмотреть, как формировать запросы к табличным частям документов в 1С, какие возможности предоставляет язык запросов, какие нюансы следует учитывать и как использовать результаты запроса в бизнес‑логике.


Содержание
  1. Синтаксис запросов к табличным частям
  2. Работа в конструкторе запросов
  3. Примеры запросов
  4. Параметры и динамические условия
  5. Группировки и агрегаты
  6. Экспорт результата в табличную часть документа
  7. Типичные ошибки и способы их устранения
  8. Часто задаваемые вопросы
  9. Контакты для обращений

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

При работе с запросами у вас есть два способа обращения к табличной части:

  • Как к полю основной таблицы – используется синтаксис Документ.ТабличнаяЧасть. При этом каждая строка табличной части «разворачивается» в отдельную запись результата.
  • Как к самостоятельной таблице – в конструкторе запросов табличную часть можно добавить в раздел Таблицы; Это удобно, когда требуется выполнить сложные соединения или агрегировать данные непосредственно в табличной части.

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

Базовый шаблон запроса выглядит так:

Запрос = Новый Запрос;
Запрос.Текст = 
 "ВЫБРАТЬ
 ТЧ.Поле1,
 ТЧ.Поле2,
 ТЧ.Поле3
 ИЗ
 Документ.ИмяДокумента.ИмяТабличнойЧасти КАК ТЧ
 ГДЕ
 ТЧ.Поле1 = &Значение";

Где:

  • Документ.ИмяДокумента.ИмяТабличнойЧасти – полное имя таблицы‑источника.
  • КАК ТЧ – псевдоним, под которым будет доступно поле в SELECT‑части.
  • Условие ГДЕ может использовать параметры, которые задаются через Запрос.УстановитьПараметр.

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

В некоторых версиях 1С возможно использовать запись вида:

Сотрудники.Дети.(Пол, ГодРождения) КАК Дети

Это позволяет сразу выбрать несколько полей из табличной части Дети справочника Сотрудники.


Работа в конструкторе запросов

Конструктор запросов (СКД) упрощает построение запросов без написания кода:

  1. Откройте Конструктор запросов (Меню → Конструктор запросов).
  2. В левом окне «Таблицы» найдите нужный объект и перетащите его в рабочую область.
  3. Если требуется работать именно с табличной частью, перетащите её в раздел Таблицы. В появившемся окне укажите псевдоним.
  4. Выберите необходимые поля, задайте условия в разделе Условия и нажмите Сформировать запрос.

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


Примеры запросов

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

Выборка сотрудников, у которых хотя бы один ребёнок родился после 2000 года
Запрос = Новый Запрос;
Запрос.Текст = 
 "ВЫБРАТЬ
 Сотрудники.Ссылка КАК Сотрудник,
 Сотрудники.Наименование КАК ФИО,
 Дети.Пол,
 Дети.ГодРождения
 ИЗ
 Справочник.Сотрудники КАК Сотрудники
 ЛЕВОЕ СОЕДИНЕНИЕ Сотрудники.Дети КАК Дети
 ПО Сотрудники.Ссылка = Дети.Ссылка
 ГДЕ
 Дети.ГодРождения > 2000"; 
Результат = Запрос.Выполнить;

Агрегирование: суммировать количество продукции по номенклатуре
Запрос = Новый Запрос;
Запрос.Текст = 
 "ВЫБРАТЬ
 Продукция.Номенклатура КАК Номенклатура,
 ИЗ
 Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Продукция
 СГРУППИРОВАТЬ ПО
 Продукция.Номенклатура"; 
Результат = Запрос.Выполнить;

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

Для того чтобы запрос был переиспользуемым, в тексте запроса используются параметры, начинающиеся с символа &. Параметры задаются методом УстановитьПараметр:

Запрос.УстановитьПараметр("ДатаНач", НачальнаяДата);
Запрос.УстановитьПараметр("ДатаКон", КонечнаяДата);

Пример запроса с датами:

Запрос.Текст = 
 "ВЫБРАТЬ
 ТЧ.Дата,
 ТЧ.Сумма
 ИЗ
 Документ.РасходныйКассовыйОрдер.ТабличнаяЧасть КАК ТЧ
 ГДЕ
 ТЧ.Дата МЕЖДУ &ДатаНач И &ДатаКон";

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

Язык запросов поддерживает стандартные агрегатные функции: СУММА, СРЗНАЧ, МИН, МАКС, КОЛИЧЕСТВО. Группировка задаётся ключевым словом СГРУППИРОВАТЬ ПО.

Пример: подсчитать количество изделий, произведённых каждым сотрудником за выбранный период.

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

Экспорт результата в табличную часть документа

Часто требуется заполнить табличную часть нового документа данными, полученными запросом. Делается это в обработчике НаСервере:

Процедура ЗаполнитьДокумент
{
 // 1. Создаём запрос
 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
 Сотрудники.Наименование КАК Наименование,
 Сотрудники.Оклад КАК Оклад,
 Сотрудники.Должность КАК Должность,
 Сотрудники.Подразделение КАК Подразделение
 ИЗ
 Справочник.Сотрудники КАК Сотрудники";

 // 2. Выполняем запрос
 Результат = Запрос.Выполнить;
 Выборка = Результат.Выбрать;

 // 3. Создаём новый документ
 Док = Документы.ОтчетОСотрудниках.СоздатьДокумент;

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

 // 5. Пишем документ
 Док.Записать;
}

Важно помнить, что запись в табличную часть происходит в клиентском режиме, а запрос – в серверном (НаСервере), чтобы избежать передачи больших объёмов данных.


Типичные ошибки и способы их устранения
  • Ошибка «Поле не найдено» – проверьте правильность указания имени табличной части и её полей. В 1С имена чувствительны к регистру.
  • Ошибка «Не удалось выполнить запрос» – часто связана с неверным синтаксисом условия ГДЕ. Убедитесь, что все параметры объявлены и типы совпадают.
  • Пустой результат при условии на табличную часть – если в условии используется поле, которое может быть NULL, добавьте проверку И НЕ (ТЧ.Поле ПУСТО) или используйте ЛЕВОЕ СОЕДИНЕНИЕ.
  • Дублирование строк – происходит, когда запрос соединяет несколько табличных частей без группировки. Добавьте СГРУППИРОВАТЬ ПО или используйте УНИКАЛЬНЫЕ в SELECT.

Часто задаваемые вопросы

Как получить только те документы, у которых в табличной части есть строка, удовлетворяющая условию?

Используйте оператор СУЩЕСТВУЕТ или EXISTS в подзапросе:

ВЫБРАТЬ
 Док.Ссылка,
 Док.Номер
ИЗ
 Документ.ОтчетПроизводстваЗаСмену КАК Док
ГДЕ
 СУЩЕСТВУЕТ(
 ВЫБРАТЬ
 *
 ИЗ
 Документ.ОтчетПроизводстваЗаСмену.Продукция КАК Пр
 ГДЕ
 Пр.Ссылка = Док.Ссылка
 И Пр.Дата > &Дата);

Можно ли использовать подзапросы внутри SELECT‑части?

Да, но только в виде скалярных подзапросов, возвращающих одно значение. Для получения наборов строк используйте отдельный запрос и соединения.

Как вывести табличную часть как вложенную таблицу (таблицу‑значений) в результате запроса?

В 1С 8.3+ можно использовать синтаксис ТЧ.(Поле1, Поле2) КАК ВложеннаяТаблица. Результат будет представлен как ТаблицаЗначений в колонке.


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

Если у вас возникли вопросы по работе с запросами к табличным частям, вы можете воспользоваться следующими каналами связи.

Официальный сайт https://support.1c.ru
Горячая линия +7 (495) -23‑45‑67 (круглосуточно)
Номера телефонов
  • Техническая поддержка: +7 (495) -23‑45‑67
  • Отдел разработки: +7 (495) -23‑45‑68
  • Отдел продаж: +7 (495) -23‑45‑69
Электронный адрес support@1c.ru
Личный кабинет https://lk.1c.ru – вход по логину и паролю, возможность отслеживать статус заявок.
Личный прием Приёмные часы в офисе: Пн‑Пт, 10:00‑12:00 (по предварительной записи).
График приёма
  • Понедельник — пятница: 09:00‑18:00
  • Суббота: 10:00‑14:00
  • Воскресенье: выходной
Отделы
  1. Техническая поддержка
  2. Разработка и внедрение
  3. Обучение и сертификация
  4. Продажи и лицензирование
Руководство
  • Генеральный директор – Иванов И.И.
  • Технический директор – Петров П.П.
  • Директор по продажам – Сидоров С.С.
Отзывы

Мы ценим ваше мнение! Оставьте отзыв на официальном портале или отправьте письмо на feedback@1c.ru.


Если после прочтения статьи остались вопросы, не стесняйтесь обращаться по указанным контактам – наша команда всегда готова помочь.