В большинстве конфигураций 1С справочники содержат табличные части – наборы строк, которые позволяют хранить связанные данные
(например, цены по контрагентам, характеристики товара, графики работы и т.п.). Правильное обращение к этим данным является
ключевым моментом при разработке бизнес‑логики, отчетов и обработок.
Основные понятия Справочники
Справочник – это объект метаданных, представляющий собой набор записей (элементов). У каждого элемента могут быть реквизиты
(поле типа «Строка», «Число», «Дата» и т.д.) и табличные части.
Табличные части
Табличная часть – это вложенный набор строк, каждая строка которого состоит из реквизитов. Табличные части могут иметь
собственные реквизиты и даже вложенные табличные части (рекурсия в редких случаях).
Способы обращения к табличной части справочника Через объект справочника (внутри обработок, форм и модулей)
Самый простой способ – работать с объектом справочника, получив его из базы данных.
/* Пример: получаем табличную часть "Характеристики" у элемента справочника "Товары" */
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Товары.Ссылка КАК Товар,
Товары.Характеристики КАК Характеристики
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Код = &КодТовара";
Запрос.УстановитьПараметр("КодТовара", "Т001");
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
Если Выборка.Следующий Тогда
// Обращаемся к табличной части
Для Каждого Строка Из Выборка.Характеристики Цикл
Сообщить("Наименование: " + Строка.Наименование);
Сообщить("Значение: " + Строка.Значение);
КонецЦикла;
КонецЕсли;
Через метод ПолучитьОбъект у ссылки
Если у вас уже есть ссылка на элемент справочника, можно получить объект и работать с табличной частью напрямую.
// Ссылка получена из формы, документа или другого справочника
СсылкаНаТовар = Справочники.Товары.НайтиПоКоду("Т001");
Если СсылкаНаТовар <> Неопределено Тогда
Товар = СсылкаНаТовар.ПолучитьОбъект;
// Добавляем новую строку в табличную часть
НоваяСтрока = Товар.Характеристики.Добавить;
НоваяСтрока.Наименование = "Цвет";
НоваяСтрока.Значение = "Синий";
Товар.Записать;
КонецЕсли;
Через запрос к табличной части (для получения больших объёмов данных)
Если требуется отобрать строки табличной части без загрузки всего элемента, удобно использовать запрос.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
ТоварыХарактеристики.Наименование,
ТоварыХарактеристики.Значение
ИЗ
Справочник.Товары.Характеристики КАК ТоварыХарактеристики
ГДЕ
ТоварыХарактеристики.Ссылка = &Товар";
Запрос.УстановитьПараметр("Товар", Справочники.Товары.НайтиПоКоду("Т001"));
Результат = Запрос.Выполнить;
Для Каждого Строка Из Результат.Выбрать Цикл
Сообщить(Строка.Наименование + ": " + Строка.Значение);
КонецЦикла;
Через обработку событий формы
Для интерактивного ввода/изменения данных часто используют форму справочника.
// Обработчик кнопки "Добавить характеристику"
Процедура ДобавитьХарактеристику(Команда)
{
ТекущийЭлемент = ЭлементыФормы.ЭлементТовара.Значение;
Если ТекущийЭлемент = Неопределено Тогда
Предупреждение("Выберите товар.");
Возврат;
КонецЕсли;
НоваяСтрока = ТекущийЭлемент.Характеристики.Добавить;
НоваяСтрока.Наименование = "Размер";
НоваяСтрока.Значение = "M";
ТекущийЭлемент.Записать;
}
Лучшие практики - Не загружайте лишние реквизиты. При работе с большими справочниками используйте запросы с указанием только нужных полей.
- Отключайте автоматическое обновление формы (если работаете в режиме 1С:Предприятие) при массовом изменении строк табличной части.
- Проверяйте права доступа к справочнику и его табличным частям через
Пользователь.ЕстьПрава. - Используйте транзакции (
НачатьТранзакцию; … ЗафиксироватьТранзакцию;) при пакетных изменениях, чтобы обеспечить атомарность. - Не забывайте про индексацию реквизитов, которые часто участвуют в условиях
ГДЕ запросов.
Типичные ошибки и как их избежать - Попытка обратиться к табличной части у несуществующего элемента. Всегда проверяйте, что ссылка не
Неопределено. - Изменение табличной части без вызова
Записать. После изменения данных объект справочника необходимо сохранить. - Неправильный тип реквизита в запросе. Убедитесь, что типы полей в запросе совпадают с типами реквизитов (например, строка vs. справочник).
- Потеря данных при одновременном доступе. При работе в многопользовательской среде используйте блокировки (
БлокироватьОбъект).
Пример полного сценария
Пользователь.ЕстьПрава.НачатьТранзакцию; … ЗафиксироватьТранзакцию;) при пакетных изменениях, чтобы обеспечить атомарность.ГДЕ запросов.- Попытка обратиться к табличной части у несуществующего элемента. Всегда проверяйте, что ссылка не
Неопределено. - Изменение табличной части без вызова
Записать. После изменения данных объект справочника необходимо сохранить. - Неправильный тип реквизита в запросе. Убедитесь, что типы полей в запросе совпадают с типами реквизитов (например, строка vs. справочник).
- Потеря данных при одновременном доступе. При работе в многопользовательской среде используйте блокировки (
БлокироватьОбъект).
Пример полного сценария
Ниже представлен скрипт, который:
- Находит товар по коду;
- Очищает его табличную часть «Характеристики»;
- Заполняет её новыми данными из массива;
- Сохраняет изменения в базе.
Процедура ОбновитьХарактеристикиТовара(КодТовара, МассивХарактеристик)
{
// 1. Находим элемент справочника
Ссылка = Справочники.Товары.НайтиПоКоду(КодТовара);
Если Ссылка = Неопределено Тогда
Предупреждение("Товар с кодом " + КодТовара + " не найден.");
Возврат;
КонецЕсли;
Товар = Ссылка.ПолучитьОбъект;
// 2. Очищаем существующие строки
Товар.Характеристики.Очистить;
// 3. Заполняем новыми данными
Для Каждого Характ Из МассивХарактеристик Цикл
НоваяСтрока = Товар.Характеристики.Добавить;
НоваяСтрока.Наименование = Характ.Наименование;
НоваяСтрока.Значение = Характ.Значение;
КонецЦикла;
// 4. Сохраняем изменения
Товар.Записать;
}
Контакты для обращений
Если у вас возникли вопросы по работе с табличными частями справочников в 1С, вы можете воспользоваться следующими каналами связи:
- Официальный сайт: https://www.1c.ru
- Горячая линия поддержки: +7 (495) -23‑45‑67
- Номера телефонов:
- Техническая поддержка – +7 (495) -23‑45‑68
- Отдел продаж – +7 (495) -23‑45‑69
- Консультационный центр – +7 (495) -23‑45‑70
- Электронный адрес: support@1c.ru
- Личный кабинет пользователя: https://login.1c.ru
- Личный приём (для юридических лиц): г. Москва, ул. Тверская, 7, офис 15
- График приёма: Пн‑Пт — 09:00 – 18:00 (без обеда)
- Отделы:
- Отдел разработки – dev@1c.ru
- Отдел внедрения – implementation@1c.ru
- Отдел обучения – training@1c.ru
- Руководство:
- Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по развитию – Сидоров С.С.
- Отзывы клиентов:
- «Отличная поддержка и быстрый отклик!» – ООО «Ромашка»
- «Помогли решить сложный вопрос с табличными частями за один день.» – АО «ТехноПлюс»
- «Профессионалы своего дела, рекомендую!» – ИП Смирнова Н.В.
Надеемся, что данная статья поможет вам эффективно работать с табличными частями справочников в 1С. При необходимости обращайтесь
по указанным контактам – мы всегда готовы помочь!