Как в 1с обратится к табличной части справочника

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

+7 (800) 301-07-30

Реклама jurik.ru

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

Основные понятия

Справочники

Справочник – это объект метаданных, представляющий собой набор записей (элементов). У каждого элемента могут быть реквизиты
(поле типа «Строка», «Число», «Дата» и т.д.) и табличные части.

Табличные части

Табличная часть – это вложенный набор строк, каждая строка которого состоит из реквизитов. Табличные части могут иметь
собственные реквизиты и даже вложенные табличные части (рекурсия в редких случаях).

Способы обращения к табличной части справочника

Через объект справочника (внутри обработок, форм и модулей)

Самый простой способ – работать с объектом справочника, получив его из базы данных.

/* Пример: получаем табличную часть "Характеристики" у элемента справочника "Товары" */
Запрос = Новый Запрос;
Запрос.Текст = 
 "ВЫБРАТЬ
 Товары.Ссылка КАК Товар,
 Товары.Характеристики КАК Характеристики
 ИЗ
 Справочник.Товары КАК Товары
 ГДЕ
 Товары.Код = &КодТовара";

Запрос.УстановитьПараметр("КодТовара", "Т001");
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;

Если Выборка.Следующий Тогда
 // Обращаемся к табличной части
 Для Каждого Строка Из Выборка.Характеристики Цикл
 Сообщить("Наименование: " + Строка.Наименование);
 Сообщить("Значение: " + Строка.Значение);
 КонецЦикла;
КонецЕсли;

Через метод ПолучитьОбъект у ссылки

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

// Ссылка получена из формы, документа или другого справочника
СсылкаНаТовар = Справочники.Товары.НайтиПоКоду("Т001");
Если СсылкаНаТовар <> Неопределено Тогда
 Товар = СсылкаНаТовар.ПолучитьОбъект;
 // Добавляем новую строку в табличную часть
 НоваяСтрока = Товар.Характеристики.Добавить;
 НоваяСтрока.Наименование = "Цвет";
 НоваяСтрока.Значение = "Синий";
 Товар.Записать;
КонецЕсли;

Через запрос к табличной части (для получения больших объёмов данных)

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

Запрос = Новый Запрос;
Запрос.Текст = 
 "ВЫБРАТЬ
 ТоварыХарактеристики.Наименование,
 ТоварыХарактеристики.Значение
 ИЗ
 Справочник.Товары.Характеристики КАК ТоварыХарактеристики
 ГДЕ
 ТоварыХарактеристики.Ссылка = &Товар";

Запрос.УстановитьПараметр("Товар", Справочники.Товары.НайтиПоКоду("Т001"));
Результат = Запрос.Выполнить;
Для Каждого Строка Из Результат.Выбрать Цикл
 Сообщить(Строка.Наименование + ": " + Строка.Значение);
КонецЦикла;

Через обработку событий формы

Для интерактивного ввода/изменения данных часто используют форму справочника.

// Обработчик кнопки "Добавить характеристику"
Процедура ДобавитьХарактеристику(Команда)
{
 ТекущийЭлемент = ЭлементыФормы.ЭлементТовара.Значение;
 Если ТекущийЭлемент = Неопределено Тогда
 Предупреждение("Выберите товар.");
 Возврат;
 КонецЕсли;

 НоваяСтрока = ТекущийЭлемент.Характеристики.Добавить;
 НоваяСтрока.Наименование = "Размер";
 НоваяСтрока.Значение = "M";
 ТекущийЭлемент.Записать;
}

Лучшие практики
  • Не загружайте лишние реквизиты. При работе с большими справочниками используйте запросы с указанием только нужных полей.
  • Отключайте автоматическое обновление формы (если работаете в режиме 1С:Предприятие) при массовом изменении строк табличной части.
  • Проверяйте права доступа к справочнику и его табличным частям через Пользователь.ЕстьПрава.
  • Используйте транзакции (НачатьТранзакцию; … ЗафиксироватьТранзакцию;) при пакетных изменениях, чтобы обеспечить атомарность.
  • Не забывайте про индексацию реквизитов, которые часто участвуют в условиях ГДЕ запросов.

Типичные ошибки и как их избежать
  1. Попытка обратиться к табличной части у несуществующего элемента. Всегда проверяйте, что ссылка не Неопределено.
  2. Изменение табличной части без вызова Записать. После изменения данных объект справочника необходимо сохранить.
  3. Неправильный тип реквизита в запросе. Убедитесь, что типы полей в запросе совпадают с типами реквизитов (например, строка vs. справочник).
  4. Потеря данных при одновременном доступе. При работе в многопользовательской среде используйте блокировки (БлокироватьОбъект).

Пример полного сценария

Ниже представлен скрипт, который:

  • Находит товар по коду;
  • Очищает его табличную часть «Характеристики»;
  • Заполняет её новыми данными из массива;
  • Сохраняет изменения в базе.
Процедура ОбновитьХарактеристикиТовара(КодТовара, МассивХарактеристик)
{
 // 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С. При необходимости обращайтесь
по указанным контактам – мы всегда готовы помочь!