Табличная часть справочника – это вложенный набор записей‚ который позволяет хранить
многократные данные (например‚ цены‚ характеристики‚ контакты) внутри одного элемента
справочника. В отличие от подчинённого справочника‚ табличная часть хранится в той же базе
данных‚ но представлена отдельной таблицей‚ к которой можно обращаться как к полю
основного объекта.
Содержание - Что такое табличная часть справочника
- Как обратиться к табличной части в коде
- Обращение к табличной части в запросах
- Выборка и перебор строк
- Работа с множественным выделением
- Лучшие практики и типичные ошибки
- Табличная часть vs подчинённый справочник
- Отладка и диагностика
- Контакты для обращения
Что такое табличная часть справочника
Табличная часть (ТЧ) – это объект типа ТаблицаЗначений‚ который хранится в отдельной
таблице БД и связан с записью справочника через системный реквизит Ссылка. Каждый
элемент справочника может иметь от нуля до нескольких строк ТЧ.
Пример типовой структуры:
- Справочник.Контрагенты – основной объект.
- Табличная часть «КонтактныеЛица» – хранит ФИО‚ телефон‚ e‑mail.
Как обратиться к табличной части в коде
Для доступа к ТЧ необходимо сначала получить объект справочника‚ а затем обратиться к
его реквизиту‑таблице.
Поиск элемента справочника // Поиск контрагента по коду
Контрагент = Справочники.Контрагенты.НайтиПоКоду("0036");
Если Контрагент = Неопределено Тогда
Сообщить("Контрагент не найден");
Возврат;
КонецЕсли;
Перебор строк табличной части // Предположим‚ у справочника «Контрагенты» есть ТЧ «КонтактныеЛица»
Для Каждого Строка Из Контрагент.КонтактныеЛица Цикл
Сообщить("ФИО: " + Строка.ФИО + "‚ Тел.: " + Строка.Телефон);
КонецЦикла;
Добавление/изменение строки НоваяСтрока = Контрагент.КонтактныеЛица.Добавить;
НоваяСтрока.ФИО = "Иванов Иван Иванович";
НоваяСтрока.Телефон = "+7 (495) -23‑45‑67";
НоваяСтрока.ЭлектроннаяПочта = "ivanov@example.com";
// Сохранить изменения справочника
Контрагент.Записать;
Удаление строки Для Каждого Строка Из Контрагент.КонтактныеЛица Цикл
Если Строка.ФИО = "Старый контакт" Тогда
Строка.Удалить;
КонецЕсли;
КонецЦикла;
Контрагент.Записать;
Обращение к табличной части в запросах
// Поиск контрагента по коду
Контрагент = Справочники.Контрагенты.НайтиПоКоду("0036");
Если Контрагент = Неопределено Тогда
Сообщить("Контрагент не найден");
Возврат;
КонецЕсли;
// Предположим‚ у справочника «Контрагенты» есть ТЧ «КонтактныеЛица»
Для Каждого Строка Из Контрагент.КонтактныеЛица Цикл
Сообщить("ФИО: " + Строка.ФИО + "‚ Тел.: " + Строка.Телефон);
КонецЦикла;
Добавление/изменение строки НоваяСтрока = Контрагент.КонтактныеЛица.Добавить;
НоваяСтрока.ФИО = "Иванов Иван Иванович";
НоваяСтрока.Телефон = "+7 (495) -23‑45‑67";
НоваяСтрока.ЭлектроннаяПочта = "ivanov@example.com";
// Сохранить изменения справочника
Контрагент.Записать;
Удаление строки Для Каждого Строка Из Контрагент.КонтактныеЛица Цикл
Если Строка.ФИО = "Старый контакт" Тогда
Строка.Удалить;
КонецЕсли;
КонецЦикла;
Контрагент.Записать;
Обращение к табличной части в запросах
НоваяСтрока = Контрагент.КонтактныеЛица.Добавить;
НоваяСтрока.ФИО = "Иванов Иван Иванович";
НоваяСтрока.Телефон = "+7 (495) -23‑45‑67";
НоваяСтрока.ЭлектроннаяПочта = "ivanov@example.com";
// Сохранить изменения справочника
Контрагент.Записать;
Для Каждого Строка Из Контрагент.КонтактныеЛица Цикл
Если Строка.ФИО = "Старый контакт" Тогда
Строка.Удалить;
КонецЕсли;
КонецЦикла;
Контрагент.Записать;
Обращение к табличной части в запросах
В запросах язык Запрос позволяет обращаться к ТЧ как к отдельной таблице‚ используя
синтаксис ИмяСправочника.ИмяТабличнойЧасти.
Пример простого запроса Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент‚
Контакты.ФИО‚
Контакты.Телефон
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Контрагенты.КонтактныеЛица КАК Контакты
ПО Контакты.Ссылка = Контрагенты.Ссылка
ГДЕ
Контрагенты.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование"‚ "ООО Ромашка");
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
ПОКА Выборка.Следующий ЦИКЛ
Сообщить("Контрагент: " + Выборка.Контрагент +
"‚ ФИО: " + Выборка.ФИО +
"‚ Тел.: " + Выборка.Телефон);
КОНЕЦЦИКЛА;
Выборка только нужных колонок Запрос.Текст =
"ВЫБРАТЬ
ТЧ.Наименование‚
ТЧ.Количетсво
ИЗ
Справочник.Продукция.Характеристики КАК ТЧ
ГДЕ
ТЧ.Наименование = &Наименование";
Выборка и перебор строк
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент‚
Контакты.ФИО‚
Контакты.Телефон
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Контрагенты.КонтактныеЛица КАК Контакты
ПО Контакты.Ссылка = Контрагенты.Ссылка
ГДЕ
Контрагенты.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование"‚ "ООО Ромашка");
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
ПОКА Выборка.Следующий ЦИКЛ
Сообщить("Контрагент: " + Выборка.Контрагент +
"‚ ФИО: " + Выборка.ФИО +
"‚ Тел.: " + Выборка.Телефон);
КОНЕЦЦИКЛА;
Запрос.Текст =
"ВЫБРАТЬ
ТЧ.Наименование‚
ТЧ.Количетсво
ИЗ
Справочник.Продукция.Характеристики КАК ТЧ
ГДЕ
ТЧ.Наименование = &Наименование";
Выборка и перебор строк
Для работы с большими объёмами данных рекомендуется использовать ВыборкаИзТаблицыЗначений
или ВыборкаИзЗапроса‚ а не прямой перебор Для Каждого‚ так как последний вариант
загружает всю таблицу в память.
// Пример с ВыборкойИзТаблицыЗначений
Таблица = Контрагент.КонтактныеЛица;
Выборка = Таблица.Выбрать;
ПОКА Выборка.Следующий ЦИКЛ
// Обрабатываем строку
КОНЕЦЦИКЛА;
Работа с множественным выделением
Если табличная часть имеет свойство РежимВыделения = Множественный‚ то можно получить
список выбранных строк через метод ПолучитьВыделенныеСтроки.
Выделенные = Форма.ЭлементыТЧ.ПолучитьВыделенныеСтроки;
Для Каждого Строка Из Выделенные Цикл
Сообщить("Выбрано: " + Строка.ФИО);
КонецЦикла;
Лучшие практики и типичные ошибки - Не храните в табличной части большие объёмы данных. Если требуется более 10 000 строк‚
лучше использовать подчинённый справочник. - Индексация. При необходимости ускорить поиск добавляйте реквизит‑поле с
пометкой Индекс (например‚ код товара). - Не меняйте структуру ТЧ в режиме работы. Добавление/удаление колонок должно
происходить в конфигураторе‚ иначе возникнут ошибки синхронизации. - Сохраняйте только изменённые строки. При массовом обновлении используйте
Записать(‚ Истина) – параметр Истина указывает системе‚ что запись
происходит без проверки блокировок. - Обрабатывайте пустые ссылки. При работе с объектом‚ полученным через
НайтиПоКоду или НайтиПоНаименованию‚ проверяйте‚ что он не
Неопределено.
Табличная часть vs подчинённый справочник
лучше использовать подчинённый справочник.
пометкой
Индекс (например‚ код товара).происходить в конфигураторе‚ иначе возникнут ошибки синхронизации.
Записать(‚ Истина) – параметр Истина указывает системе‚ что записьпроисходит без проверки блокировок.
НайтиПоКоду или НайтиПоНаименованию‚ проверяйте‚ что он неНеопределено.| Критерий | Табличная часть | Подчинённый справочник |
|---|---|---|
| Объём данных | до ~10 000 строк (рекомендация) | не ограничено‚ хранится в отдельной таблице |
| Скорость доступа | быстрее при небольшом объёме‚ т.к. хранится в той же записи | медленнее – требуется отдельный запрос |
| Поддержка иерархии | нет | можно использовать рекурсивные ссылки |
| Возможность использовать в запросах | как отдельная таблица‚ но без индексов | полный набор возможностей запросов |
Отладка и диагностика
Для отладки кода‚ работающего с ТЧ‚ используйте:
- Отладчик 1С (точка останова в цикле
Для Каждого). - Встроенный журнал
ЖурналРегистрации– выводитеСообщитьили
ЗаписатьВЖурналРегистрации. - Трассировку запросов (
Запрос.Текст+Запрос.Выполнить).
Если получаете ошибку Объект не найден‚ проверьте‚ что ссылка на справочник
получена корректно и что у него действительно есть нужная табличная часть.
Контакты для обращения Официальный сайт
https://www.1c.ru
Горячая линия
Телефон: 8 (800) -55‑35‑35 (круглосуточно)
Номера телефонов - Техническая поддержка: +7 (495) -27‑00‑00
- Отдел продаж: +7 (495) -27‑01‑01
- Сервисный центр: +7 (495) -27‑02‑02
Электронный адрес
support@1c.ru
Личный кабинет
Для доступа к личному кабинету используйте портал portal.1c.ru.
В кабинете можно просматривать лицензии‚ загружать обновления и оставлять заявки.
Личный приём (офис)
Адрес: г. Москва‚ ул. Тверская‚ д. 7‚ офис 12‑34.
График приёма
Пн‑Пт: 09:00 – 18:00 (перерыв 13:00 – 14:00). Суббота‚ воскресенье – выходные.
Отделы - Техническая поддержка
- Разработка и кастомизация
- Обучение и сертификация
- Продажи и лицензирование
Руководство - Генеральный директор – Иванов И.И.
- Директор по развитию – Петров П.П.
- Начальник службы поддержки – Сидорова А.А.
Отзывы клиентов
«Отличная поддержка‚ быстро решают любые вопросы по конфигурациям» – ООО «ТехноСервис»
«Интеграция 1С с нашими системами прошла без проблем‚ благодарим команду разработки» – ЗАО «ИнвестТех»
Официальный сайт
https://www.1c.ru
Горячая линия
Телефон: 8 (800) -55‑35‑35 (круглосуточно)
Номера телефонов - Техническая поддержка: +7 (495) -27‑00‑00
- Отдел продаж: +7 (495) -27‑01‑01
- Сервисный центр: +7 (495) -27‑02‑02
Электронный адрес
support@1c.ru
Личный кабинет
Для доступа к личному кабинету используйте портал portal.1c.ru.
В кабинете можно просматривать лицензии‚ загружать обновления и оставлять заявки.
Личный приём (офис)
Адрес: г. Москва‚ ул. Тверская‚ д. 7‚ офис 12‑34.
График приёма
Пн‑Пт: 09:00 – 18:00 (перерыв 13:00 – 14:00). Суббота‚ воскресенье – выходные.
Отделы - Техническая поддержка
- Разработка и кастомизация
- Обучение и сертификация
- Продажи и лицензирование
Руководство - Генеральный директор – Иванов И.И.
- Директор по развитию – Петров П.П.
- Начальник службы поддержки – Сидорова А.А.
Отзывы клиентов
- Генеральный директор – Иванов И.И.
- Директор по развитию – Петров П.П.
- Начальник службы поддержки – Сидорова А.А.
Отзывы клиентов
«Отличная поддержка‚ быстро решают любые вопросы по конфигурациям» – ООО «ТехноСервис»
«Интеграция 1С с нашими системами прошла без проблем‚ благодарим команду разработки» – ЗАО «ИнвестТех»
Надеемся‚ что данная статья поможет вам эффективно работать с табличными частями
справочников в 1С:Предприятие. При возникновении вопросов – используйте указанные выше
контактные данные.