Табличные части – один из самых часто используемых механизмов в конфигурациях 1С:Предприятие. Они позволяют хранить набор строк‑записей, связанных с объектом (документом, справочником, регистром). Вопрос «как обратиться к табличной части из модуля объекта» возникает у большинства разработчиков, особенно при написании бизнес‑логики, автоматизации заполнения и проверок.
Что такое табличная часть и где она хранится?
- Объект – документ, справочник, план видов характеристик и т.п.
- Табличная часть – вложенный набор записей, реализованный как объект
ДокументТабличнаяЧасть(илиСправочникТабличнаяЧасть). - Внутри модуля объекта табличная часть доступна через её имя, объявленное в метаданных (например,
Товары).
Пример: в документе ПриходнаяНакладная табличная часть называется Товары. В коде модуля объекта мы будем работать с объектом ПриходнаяНакладная.Товары.
Прямой доступ к полям строки
Если необходимо обратиться к полю первой строки, достаточно написать:
Товары[0].Цена; // или Товары0.Цена в старом синтаксисе
В модуле объекта можно опустить имя объекта, т.к. Товары уже является полем текущего объекта.
Перебор всех строк
Самый распространённый способ – использовать цикл Для каждого … Из … Цикл:
Для каждого СтрокаТовары Из Товары Цикл
Сообщить("Товар: " + СтрокаТовары.Номенклатура + ", Кол-во: " + СтрокаТовары.Количество);
КонецЦикла;
Поиск строк по условию
Для быстрого отбора используется метод НайтиСтроки(Отбор):
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", НужныйТовар);
НайденныеСтроки = Товары.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество > 0 Тогда
// работа с первой найденной строкой
ПерваяСтрока = НайденныеСтроки[0];
ПерваяСтрока.Количество = ПерваяСтрока.Количество + 10;
КонецЕсли;
Доступ к текущей строке формы
В управляемой форме текущая строка доступна через объект Элементы.Товары.ТекущаяСтрока. В модуле объекта её можно получить, передав в процедуру объект строки:
Процедура ОбработатьТекущуюСтроку(ТекСтр)
// ТекСтр – объект ТабличнаяЧастьСтрока
ТекСтр.Цена = ТекСтр.Цена * 1.1; // увеличение цены на 10%
КонецПроцедуры;
Заполнение табличной части из обработок и серверных процедур
Заполнение из клиентского модуля формы
Если требуется заполнить табличную часть данными из внешних источников (например, договоры контрагента), обычно используют клиент‑серверный подход:
Процедура КонтрагентПриИзменении(Элемент) Экспорт
ЗаполнитьДоговорыНаСервере;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДоговорыНаСервере
// Объект – текущий документ
Договоры = Справочники.Договоры.Выбрать(Контрагент = Объект.Контрагент);
Для каждого Договор Из Договоры Цикл
НоваяСтрока = Объект.Договоры.Добавить;
НоваяСтрока.Договор = Договор.Ссылка;
НоваяСтрока.Дата = ТекущаяДата;
КонецЦикла;
КонецПроцедуры
Обработка, вызываемая из формы документа
Для сложных сценариев удобно вынести логику в отдельный общий модуль и передавать в него текущую строку табличной части:
/// В модуле формы
Процедура КнопкаЗаполнитьНажатие(Кнопка)
Для каждого Строка Из Товары Цикл
ОбщийМодульЗаполнение.ЗаполнитьСтроку(Строка);
КонецЦикла;
КонецПроцедуры
/// В общем модуле
Процедура ЗаполнитьСтроку(СтрокаТовары) Экспорт
// Пример: автоматическое заполнение цены из справочника
Товар = Справочники.Номенклатура.Получить(СтрокаТовары.Номенклатура);
Если Товар <> Неопределено Тогда
СтрокаТовары.Цена = Товар.ЦенаПродажи;
КонецЕсли;
КонецПроцедуры
Лучшие практики и типичные ошибки
- Не использовать объект/Записать/Прочитать внутри цикла перебора строк – это приводит к потере производительности и возможным конфликтам блокировок.
- Для больших табличных частей предпочтительно использовать Запросы (табличная модель запросов) вместо перебора в памяти.
- Всегда проверяйте
Если Строка = Неопределено Тогда … КонецЕсли;– защита от пустых ссылок. - При работе в режиме Тонкий клиент помните, что объекты
ЗапросиОбъектнедоступны в клиентском контексте – используйте&НаСервере. - Если необходимо изменить несколько полей одной строки, делайте это в одной транзакции, а не вызывайте
Записатьпосле каждой правки.
Часто задаваемые вопросы (FAQ)
- Как получить доступ к табличной части из общего модуля?
Передайте в процедуру объект документа (или конкретную строку) в качестве параметра:ОбщийМодуль.ОбработатьТабличнуюЧасть(Объект.Товары); - Можно ли изменить табличную часть из формы без обращения к серверу?
Да, если клиент работает в полном клиенте. В тонком клиенте любые изменения сохраняются только после вызова серверной процедуры. - Как удалить текущую строку табличной части?
Элементы.Товары.УдалитьТекущуюСтроку; // в модуле формы // или Товары.Удалить(ТекСтрока); // в модуле объекта
Контактная информация для обращений
Официальный сайт: https://1c.ru
Горячая линия: +7 (495) -77‑77‑77 (круглосуточно)
Номера телефонов технической поддержки:
- Москва, +7 (495) -23‑45‑67
- Санкт‑Петербург, +7 (812) -34‑56‑78
- Региональная поддержка, +7 (800) -55‑00‑00
Электронный адрес: support@1c.ru
Личный кабинет пользователя: https://login.1c.ru
Личный приём (для юридических лиц): г. Москва, ул. Тверская, 7, офис 310
График приёма: Пн‑Пт 09:00‑18:00 (перерыв 13:00‑14:00)
Отделы:
- Отдел разработки – +7 (495) -23‑45‑67
- Отдел внедрения – +7 (495) -34‑56‑78
- Отдел поддержки – +7 (495) -45‑67‑89
Руководство:
- Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по развитию – Сидорова А.А.
Отзывы клиентов:
“Профессиональная поддержка 1С помогла нам быстро внедрить автоматизацию складского учета.” – ООО «Логистика», 2025 г.
“Отличный сервис, быстрый отклик на запросы.” – ЗАО «ТехноПлюс», 2024 г;
Обращение к табличной части документа в модуле объекта 1С – фундаментальная операция, от которой зависит корректность бизнес‑логики. Правильный выбор контекста (клиент/сервер), использование методов НайтиСтроки, Добавить, Удалить и соблюдение рекомендаций по производительности позволяют писать чистый, поддерживаемый код.
Если после прочтения статьи у вас остались вопросы, воспользуйтесь контактными данными, указанными выше, или обратитесь в службу поддержки 1С.