Табличные части (ТЧ) – это встроенные таблицы, которые находятся в составе документов, справочников, регистров и других объектов 1С. Часто возникает необходимость работать с данными ТЧ не из формы, а непосредственно из модуля объекта (модуль документа, справочника, регистровой записи и т.п.). В статье рассмотрим, как правильно обращаться к табличным частям из модуля объекта, какие ограничения существуют и какие приёмы позволяют сделать код чистым и надёжным.
Где хранится табличная часть?
Табличная часть – это отдельный объект типа ТаблицаЗначений, который привязан к реквизиту‑табличной части. В базе данных она хранится в отдельной таблице, но в коде доступ к ней осуществляется через свойства объекта:
- Объект.ТабличнаяЧасть – ссылка на таблицу значений.
- Для документов –
ДокументОбъект.ТабличнаяЧасть. - Для справочников –
СправочникОбъект;ТабличнаяЧасть.
Прямой доступ из модуля объекта Пример чтения данных
В модуле объекта (например, Документ.ПродажаТоваров) можно обратиться к ТЧ так:
Процедура ПриЗаписи(Отказ, СтандартнаяОбработка)
// Объект – текущий документ
Таблица = Объект.Товары; // ТЧ «Товары» объявлена в конфигурации
Для Каждого Строка Из Таблица Цикл
Сообщить("Товар: " + Строка.Номенклатура + ", Кол-во: " + Строка.Количество);
КонецЦикла;
КонецПроцедуры
Запись новых строк
Процедура ДобавитьТовар(Номенклатура, Количество, Цена)
НоваяСтрока = Объект.Товары.Добавить;
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.Количество = Количество;
НоваяСтрока.Цена = Цена;
КонецПроцедуры
Доступ к ТЧ из внешних обработок и серверных процедур
Процедура ДобавитьТовар(Номенклатура, Количество, Цена) НоваяСтрока = Объект.Товары.Добавить; НоваяСтрока.Номенклатура = Номенклатура; НоваяСтрока.Количество = Количество; НоваяСтрока.Цена = Цена; КонецПроцедуры
Если требуется вызвать серверную процедуру из внешней обработки (например, из внешней обработки табличных частей), необходимо:
- Зарегистрировать обработку с видом
ЗаполнениеОбъектаи типом командыЗаполнениеФормы. Это позволяет передать объект формы в серверный модуль. - Сделать нужную процедуру экспортируемой (ключевое слово
Экспорт), чтобы её можно было вызвать из другого модуля.
Пример регистрации:
&НаКлиенте Процедура КомандаНаСервере ОбъектОбработка = Новый ВнешняяОбработкаТЧ; ОбъектОбработка.ПрочитатьТабЧастьВМодуле(Объект); КонецПроцедуры
Работа с ТЧ в управляемых формах
В управляемых формах объект документа доступен через реквизит Объект. На клиенте прямой доступ к табличной части невозможен, поэтому обычно используют серверные процедуры:
&НаКлиенте Процедура КнопкаЗаполнитьТЧ(Элемент) ОбъектДок = ФормаОбъект.Объект; // получаем объект документа ОбъектДок.ЗаполнитьТЧ(Параметры); КонецПроцедуры &НаСервере Экспорт Процедура ЗаполнитьТЧ(Параметры) // Здесь уже работаем с ТаблицаЗначений Таблица = ЭтотОбъект.Товары; // ... заполнение КонецПроцедуры
Часто встречающиеся ошибки - Пустая ТЧ – если в модуле объекта обращаемся к ТЧ, которой ещё не заполнена, будет получена пустая таблица. Убедитесь, что заполняете её до обращения.
- Неправильный контекст – попытка получить
Элементы.Товары.ТекущиеДанные из серверного кода невозможна, т.к. эти свойства существуют только на клиенте. - Отсутствие экспорта – без ключевого слова
Экспорт процедура не будет доступна из других модулей.
Лучшие практики - Разделяйте клиентскую и серверную логику: клиент – только UI, сервер – работа с ТЧ.
- Используйте
Для Каждого … Цикл для обхода строк ТЧ; при необходимости – Для i = 0 По Таблица.Количество ─ 1 Цикл для более быстрого доступа. - Сделайте процедуры, работающие с ТЧ, экспортируемыми и передавайте в них объект (или саму ТЧ) как параметр – так код будет переиспользуемым.
- При работе с внешними обработками регистрируйте их в конфигураторе, указывая правильный вид и тип команды.
Пример полной реализации
Элементы.Товары.ТекущиеДанные из серверного кода невозможна, т.к. эти свойства существуют только на клиенте.Экспорт процедура не будет доступна из других модулей.- Разделяйте клиентскую и серверную логику: клиент – только UI, сервер – работа с ТЧ.
- Используйте
Для Каждого … Циклдля обхода строк ТЧ; при необходимости –Для i = 0 По Таблица.Количество ─ 1 Циклдля более быстрого доступа. - Сделайте процедуры, работающие с ТЧ, экспортируемыми и передавайте в них объект (или саму ТЧ) как параметр – так код будет переиспользуемым.
- При работе с внешними обработками регистрируйте их в конфигураторе, указывая правильный вид и тип команды.
Пример полной реализации
Допустим, нам нужно из модуля документа Документ.ОтчетПоПродажам вызвать внешнюю обработку, которая заполняет ТЧ «Товары» на основании выбранных параметров.
&НаСервере
Экспорт Процедура ЗаполнитьТЧ(ОбъектДок, Параметры)
ТЧ = ОбъектДок.Товары;
// Очистим старые строки
ТЧ.Очистить;
// Получим данные из справочника «Товары»
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Товары.Ссылка КАК Товар,
Товары.Наименование КАК Наименование,
Товары.Цена КАК Цена
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Тип = &ТипТовара";
Запрос.УстановитьПараметр("ТипТовара", Параметры.Тип);
Результат = Запрос.Выполнить;
Для Каждого Строка Из Результат Выбрать Цикл
НоваяСтрока = ТЧ.Добавить;
НоваяСтрока.Товар = Строка.Товар;
НоваяСтрока.Наименование = Строка.Наименование;
НоваяСтрока.Цена = Строка.Цена;
НоваяСтрока;Количество = 0; // пользователь заполнит позже
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура КнопкаЗаполнитьНажатие(Элемент)
Параметры = Новый Структура;
Параметры.Вставить("ТипТовара", "ТоварДляПродажи");
// Передаём текущий объект документа в серверную процедуру
ВнешняяОбработка = Новый ВнешняяОбработкаТЧ;
ВнешняяОбработка.ЗаполнитьТЧ(ЭтотОбъект, Параметры);
КонецПроцедуры
Обращение к табличной части из модуля объекта – обычная задача в 1С. Главное помнить о разделении клиент‑сервер, о необходимости экспортировать процедуры и правильно регистрировать внешние обработки. При соблюдении этих правил код будет работать быстро, надёжно и будет легко поддерживаться.
Контакты для обращений Официальный сайт: https://www.1c-company.ru
Горячая линия: +7 (495) -23‑45‑67 (круглосуточно)
Номера телефонов:
- Техническая поддержка – +7 (495) -23‑45‑68
- Отдел продаж – +7 (495) -23‑45‑69
- Сервисный центр – +7 (495) -23‑45‑70
Электронный адрес: support@1c-company.ru
Личный кабинет: https://portal.1c-company.ru
Личный приём (офис): г. Москва, ул. Тверская, д. 7, офис 305
График приёма: Пн‑Пт 09:00‑18:00, обед 13:00‑14:00
Отделы - Отдел разработки
- Отдел внедрения
- Отдел обучения
- Отдел поддержки клиентов
Руководство - Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по продажам – Сидорова А.А.
Отзывы
Мы ценим обратную связь! Оставьте свой отзыв на странице отзывов или отправьте письмо на feedback@1c-company.ru. Ваше мнение помогает нам становиться лучше.
Официальный сайт: https://www.1c-company.ru
Горячая линия: +7 (495) -23‑45‑67 (круглосуточно)
Номера телефонов:
- Техническая поддержка – +7 (495) -23‑45‑68
- Отдел продаж – +7 (495) -23‑45‑69
- Сервисный центр – +7 (495) -23‑45‑70
Электронный адрес: support@1c-company.ru
Личный кабинет: https://portal.1c-company.ru
Личный приём (офис): г. Москва, ул. Тверская, д. 7, офис 305
График приёма: Пн‑Пт 09:00‑18:00, обед 13:00‑14:00
Отделы - Отдел разработки
- Отдел внедрения
- Отдел обучения
- Отдел поддержки клиентов
Руководство - Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по продажам – Сидорова А.А.
Отзывы
- Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по продажам – Сидорова А.А.
Отзывы
Мы ценим обратную связь! Оставьте свой отзыв на странице отзывов или отправьте письмо на feedback@1c-company.ru. Ваше мнение помогает нам становиться лучше.