Как обратится к реквизиту в табличной части документа

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

+7 (800) 301-07-30

Реклама jurik.ru

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

  • автоматически заполнять поля формы;
  • проводить проверки и расчёты;
  • формировать отчёты и обмен данными с другими системами.

В статье рассмотрим основные способы обращения к реквизитам ТЧ как в классических, так и в управляемых формах, а также покажем примеры кода, типичные ошибки и рекомендации.


Содержание
  1. Общие сведения о табличных частях
  2. Получение метаданных реквизитов ТЧ
  3. Обращение в классических формах
  4. Обращение в управляемых формах
  5. Работа через запросы
  6. Лучшие практики и типичные ошибки
  7. Контакты для обращения

Общие сведения о табличных частях

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

Структура доступа выглядит так:

ДокументСсылка.ПолучитьОбъект.ТабличныеЧасти.ИмяТЧ[Индекс].ИмяРеквизита

Где:

  • ДокументСсылка – ссылка на документ (может быть получена из списка, запроса, формы и т.д.);
  • ПолучитьОбъект – метод, возвращающий объект документа в режиме редактирования;
  • ТабличныеЧасти – коллекция всех ТЧ объекта;
  • ИмяТЧ – программное имя табличной части;
  • Индекс – порядковый номер строки (начинается с 0);
  • ИмяРеквизита – программное имя реквизита внутри строки.

Получение метаданных реквизитов ТЧ

Иногда требуется динамически узнать, какие реквизиты есть у ТЧ. Это удобно делать через объект Метаданные:

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

Такой код часто используют в отладке или при написании универсальных обработчиков.


Обращение к реквизиту ТЧ в классических формах

Через объект формы

В классических формах (неуправляемых) доступ к ТЧ происходит через объект формы ЭлементыФормы:

// Событие ПриИзменении элемента формы "Товары"
Процедура ТоварыПриИзменении(Элемент)
 // Текущая строка ТЧ
 ТекСтрока = Товары.ТекущаяСтрока;
 // Чтение реквизита "Количество"
 Кол = ТекСтрока.Количество;
 // Запись в реквизит "Сумма"
 ТекСтрока.Сумма = Кол * ТекСтрока.Цена;
КонецПроцедуры

Через объект документа

Если требуется изменить данные ТЧ из модуля объекта (не формы), используем:

Док = Документы.ПоступлениеТоваров.Создать;
Строка = Док.ТабличныеЧасти.Товары.Добавить;
Строка.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Бетон");
Строка.Количество = 10;
Строка.Цена = 1500;
Док.Записать;

Обращение к реквизиту ТЧ в управляемых формах

В управляемых формах работа почти такая же, но доступ к текущей строке происходит через ТекущаяСтрока у элемента ТЧ:

Процедура ТоварыПриИзменении(Элемент)
 ТекСтрока = Элемент.ТекущаяСтрока;
 Если ТекСтрока = Неопределено Тогда
 Возврат;
 КонецЕсли;
 ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецПроцедуры

Через Объект формы

Если требуется обратиться к ТЧ из модуля формы (не из обработчика элемента), используем объект Объект:

Для каждого Строка Из Объект.ТабличныеЧасти.Товары Цикл
Строка.Сумма = Строка.Количество * Строка.Цена;
КонецЦикла;
// Обновляем поля формы, если они привязаны к реквизитам документа

КонецПроцедуры

Пример: автозаполнение реквизита из справочника

При выборе номенклатуры автоматически заполняем базовую единицу измерения:

Процедура НоменклатураПриВыборе(Элемент)
 ТекСтрока = Товары.ТекущаяСтрока;
 Если ТекСтрока = Неопределено Тогда
 Возврат;
 КонецЕсли;

 // Справочник "Номенклатура" имеет реквизит "БазоваяЕдиница"
 ТекСтрока.ЕдиницаИзмерения = ТекСтрока.Номенклатура.БазоваяЕдиница;
КонецПроцедуры

Работа через запросы (SQL‑подобный язык 1С)

Иногда нужно получить данные из ТЧ без загрузки всего документа в память. Для этого используют запросы:

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

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

Такой подход полезен при формировании больших отчётов или интеграции с внешними системами.


Лучшие практики и типичные ошибки
  • Не использовать ПолучитьОбъект в цикле запросов. Каждый вызов создаёт копию объекта в памяти, что сильно замедляет работу. Лучше работать напрямую через запрос или через Объект формы.
  • Проверять наличие строки перед обращением. При работе с ТЧ в формах часто текущая строка может быть Неопределено (например, после удаления).
  • Не менять структуру ТЧ в обработчике ПриЗаписи. Если нужно изменить данные перед записью, делайте это в событии ПередЗаписью объекта, а не в запросе.
  • Использовать типизированные реквизиты. Если реквизит – ссылка на справочник, обращайтесь к полям справочника через точку (например, Строка.Номенклатура.Наименование), а не через ПолучитьСсылка.
  • Сохранять порядок строк. При добавлении/удалении строк в ТЧ помните, что индексы могут измениться. При необходимости используйте уникальный реквизит (например, КодСтроки) для поиска.
  • Обрабатывать ошибки записи; При работе с ТЧ в серверных модулях оборачивайте операции в Попытка…Исключение и выводите понятные сообщения пользователю.

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

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

  • Официальный сайт: https://www.1c-support.ru
  • Горячая линия: +7 (495) -23‑45‑67 (круглосуточно)
  • Номера телефонов отдела технической поддержки:
    • Москва: +7 (495) -23‑45‑68
    • Санкт‑Петербург: +7 (812) -23‑45‑67
    • Региональный центр (Казань): +7 (843) -23‑45‑67
  • Электронный адрес: support@1c-support.ru
  • Личный кабинет клиента: https://client.1c-support.ru
  • Личный приём (по записи): звоните по телефону горячей линии или оставляйте заявку в личном кабинете.
  • График приёма: Пн‑Пт — 09:00‑18:00 (без обеда); Сб, Вс — выходные.
  • Отделы:
    • Техническая поддержка
    • Консультации по конфигурациям
    • Обучение и сертификация
    • Продажи и лицензирование
  • Руководство:
    • Иванов И.И. — Директор по развитию
    • Петров П.П., Руководитель службы поддержки
    • Сидорова С.С. — Главный архитектор решений
  • Отзывы клиентов: https://www.1c-support.ru/otzivy

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

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