Табличные части в запросах 1С

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

+7 (800) 301-07-30

Реклама jurik.ru

Табличные части – это встроенные в документы и справочники структуры, позволяющие хранить произвольные наборы строк (например, список товаров в документе Поступление или список детей в справочнике Сотрудники)․
В запросах 1С (язык запросов Запрос) к табличным частям можно обращаться так же, как к обычным реквизитам, но с некоторыми особенностями․

Основы обращения к табличным частям

Синтаксис «ТабличнаяЧасть․Реквизит»

Для получения данных из табличной части используется точечный синтаксис:

SELECT
 Документы․Продажа․Ссылка КАК Документ,
 Документы․Продажа․Товары․Номенклатура КАК Товар,
 Документы․Продажа․Товары․Количество КАК Количество
FROM
 Документы․Продажа КАК Продажа

В примере Товары – имя табличной части, а Номенклатура и Количество – её реквизиты․

Алиасы (псевдонимы) таблиц и табличных частей

Для удобства и избежания конфликтов имён рекомендуется задавать алиасы:

SELECT
 Док․Ссылка КАК Документ,
 ТЧ․Наименование КАК Товар,
 ТЧ․Количество КАК Кол
FROM
 Документы․Продажа КАК Док
 ЛЕВОЕ СОЕДИНЕНИЕ Док․Товары КАК ТЧ
 ПО Док․Ссылка = ТЧ․СсылкаДокумента

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

Частая задача – вывести список объектов (например, сотрудников), у которых есть записи в табличной части, а также объекты без записей, пометив их отдельным флагом․

LEFT JOIN (ЛЕВОЕ СОЕДИНЕНИЕ)

Для получения всех строк из «главной» таблицы и только совпадающих строк из табличной части используется ЛЕВОЕ СОЕДИНЕНИЕ․ Если в табличной части нет записей, поля будут NULL․

SELECT
 Сотрудники․Ссылка КАК Сотрудник,
 ТЧ․ГодРождения КАК ГодРожденияДетей,
 CASE
 WHEN ТЧ․Ссылка IS NULL THEN 1 -- бездетный сотрудник
 ELSE 0
 END КАК Бездетный
FROM
 Справочник․Сотрудники КАК Сотрудники
 ЛЕВОЕ СОЕДИНЕНИЕ Сотрудники․Дети КАК ТЧ
 ПО Сотрудники․Ссылка = ТЧ․СсылкаСотрудника
 И ТЧ․ГодРождения > 2000

Фильтрация пустых и непустых записей

Чтобы оставить только те строки, где табличная часть пуста, добавляем условие ТЧ․Ссылка IS NULL в ГДЕ:

SELECT
 Сотрудники․Ссылка КАК Сотрудник,
 1 КАК Бездетный
FROM
 Справочник․Сотрудники КАК Сотрудники
 ЛЕВОЕ СОЕДИНЕНИЕ Сотрудники․Дети КАК ТЧ
 ПО Сотрудники․Ссылка = ТЧ․СсылкаСотрудника
WHERE
 ТЧ․Ссылка IS NULL

Практический пример: сотрудники и их дети

SELECT
 Сотрудники․Ссылка КАК Сотрудник,
 Сотрудники․Дети․ГодРождения КАК ГодРождения
FROM
 Справочник․Сотрудники КАК Сотрудники
WHERE
 Сотрудники․Дети․ГодРождения > 2000

Требовалось добавить в результат всех сотрудников, а бездетных отметить галочкой․ Ниже – готовый запрос:

SELECT
 Сотрудники․Ссылка КАК Сотрудник,
 ТЧ․ГодРождения КАК ГодРождения,
 CASE
 WHEN ТЧ․Ссылка IS NULL THEN 1 -- бездетный
 ELSE 0
 END КАК Бездетный
FROM
 Справочник․Сотрудники КАК Сотрудники
 ЛЕВОЕ СОЕДИНЕНИЕ Сотрудники․Дети КАК ТЧ
 ПО Сотрудники․Ссылка = ТЧ․СсылкаСотрудника
 И ТЧ․ГодРождения > 2000

В результате получаем:

  • Сотрудники с детьми, соответствующими условию (поле Бездетный = 0);
  • Сотрудники без детей (поле Бездетный = 1 и ГодРождения = NULL)․

Часто встречающиеся ошибки

  1. Отсутствие алиаса у табличной части․ При использовании нескольких табличных частей в запросе без алиасов будет конфликт имён․
  2. Неправильный тип соединения․ Если использовать ВНУТРЕННЕЕ СОЕДИНЕНИЕ, то записи без табличных частей просто исчезнут․
  3. Фильтрация в секции ГДЕ вместо ON․ Условие, относящееся к табличной части, должно быть в ON, иначе будут отфильтрованы и главные строки․

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

  • Используйте ЛЕВОЕ СОЕДИНЕНИЕ только с необходимыми полями – лишние реквизиты увеличивают объём данных․
  • Если требуется только наличие записей, заменяйте выборку полей на EXISTS(SELECT 1 FROM ․․․)․
  • Для больших таблиц создавайте индексы по полям, участвующим в условии ON (например, ГодРождения)․

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

Официальный сайт: https://example-company;ru

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

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

  • Отдел технической поддержки – +7 (495) -23‑45‑67
  • Отдел продаж – +7 (495) -65‑43‑21
  • Юридический отдел – +7 (495) -11‑22‑33

Электронный адрес: support@example-company․ru

Личный кабинет: https://example-company․ru/cabinet

Личный приём (по записи): Записаться онлайн

График приёма:

  • Пн‑Пт: 09:00 – 18:00
  • Сб: 10:00 – 14:00
  • Вс: выходной

Отделы компании:

  1. Техническая поддержка
  2. Разработка и внедрение
  3. Продажи и маркетинг
  4. Бухгалтерия и финансы
  5. Юридический отдел

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

  • Генеральный директор – Иванов И․И․
  • Технический директор – Петров П․П․
  • Директор по продажам – Сидорова А․А․

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

«Отличная поддержка, быстро решают любые вопросы по 1С!» – ООО «СтройИнвест»

«Наша компания экономит до 30 % времени благодаря рекомендациям по работе с табличными частями․» – ЗАО «ТехноСервис»


Надеемся, что статья помогла разобраться, как правильно обращаться к табличным частям в запросах 1С, как отбирать нужные строки и включать в результат записи без табличных данных․ При возникновении вопросов – смело используйте указанные выше контакты․