Табличные части – это встроенные в документы и справочники структуры, позволяющие хранить произвольные наборы строк (например, список товаров в документе Поступление или список детей в справочнике Сотрудники)․
В запросах 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)․
Часто встречающиеся ошибки
- Отсутствие алиаса у табличной части․ При использовании нескольких табличных частей в запросе без алиасов будет конфликт имён․
- Неправильный тип соединения․ Если использовать
ВНУТРЕННЕЕ СОЕДИНЕНИЕ, то записи без табличных частей просто исчезнут․ - Фильтрация в секции
ГДЕвместо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С!» – ООО «СтройИнвест»
«Наша компания экономит до 30 % времени благодаря рекомендациям по работе с табличными частями․» – ЗАО «ТехноСервис»
Надеемся, что статья помогла разобраться, как правильно обращаться к табличным частям в запросах 1С, как отбирать нужные строки и включать в результат записи без табличных данных․ При возникновении вопросов – смело используйте указанные выше контакты․