В 1С:Предприятие табличные части (ТЧ) – это встроенные таблицы, которые находятся внутри документов, справочников, регистров и других объектов. Часто возникает необходимость получить доступ к данным ТЧ из модуля объекта (модуля документа). В статье рассмотрим все варианты обращения, их синтаксис, особенности выполнения на клиенте и сервере, а также лучшие практики.
Содержание
- Основные понятия
- Прямой доступ к ТЧ
- Обращение через запрос
- Поиск строки по идентификатору
- Работа в серверных модулях
- Типичные ошибки и рекомендации
- Контакты для обращений
Основные понятия
- Табличная часть – это свойство объекта, которое представляет собой массив строк (
ТаблицаЗначений). - Каждая строка ТЧ имеет индекс (начинается с 0) и идентификатор (
УникальныйИдентификатор), если в ТЧ включено поле Ссылка. - Доступ к ТЧ может осуществляться как из клиентского, так и из серверного кода. При работе с большим объёмом данных рекомендуется использовать серверные процедуры.
Прямой доступ к табличной части
Обращение к ТЧ как к полю объекта
Самый простой способ – обратиться к ТЧ через имя реквизита, объявленного в модуле документа.
Процедура ПриЗаписи(Отказ, РежимЗаписи)
// Предположим, что в документе есть ТЧ «Товары»
Для Каждого Строка Из ЭтотОбъект.Товары Цикл
// Доступ к полям строки
Номенклатура = Строка.Номенклатура;
Количество = Строка.Количество;
// Выполняем нужные действия
КонецЦикла;
КонецПроцедуры
Доступ к конкретной строке по индексу
Если известен индекс строки (например, первая строка), можно обратиться так:
ПерваяСтрока = ЭтотОбъект.Товары[0];
Сообщить("Товар: " + ПерваяСтрока.Номенклатура);
Доступ к строке по уникальному идентификатору
Для ТЧ, в которой включено поле Ссылка, удобно искать строку по её УникальныйИдентификатор:
Идентификатор = "e3f7c9b2-..."; // GUID строки
Строка = ЭтотОбъект.Товары.НайтиПоИдентификатору(Идентификатор);
Если Строка <> Неопределено Тогда
Сообщить("Найдено: " + Строка.Номенклатура);
КонецЕсли;
Обращение к табличной части через запрос
Иногда требуется получить данные ТЧ в виде набора, отфильтровать их или выполнить агрегатные функции. Для этого в конструкторе запросов можно указать ТЧ как отдельную таблицу.
Пример простого запроса
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Товары.Номенклатура,
Товары.Количество,
Товары.Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Ссылка = &ДокументСсылка";
Запрос.УстановитьПараметр("ДокументСсылка", ЭтотОбъект.Ссылка);
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
Пока Выборка.Следующий Цикл
Сообщить(Строка(Выборка.Номенклатура) + " – " + Строка(Выборка.Количество));
КонецЦикла;
Использование агрегатных функций
Запрос.Текст =
"ВЫБРАТЬ
СУММА(Товары.Сумма) КАК ОбщаяСумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Ссылка = &ДокументСсылка";
Запрос.УстановитьПараметр("ДокументСсылка", ЭтотОбъект.Ссылка);
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
Если Выборка.Следующий Тогда
Сообщить("Общая сумма: " + Выборка.ОбщаяСумма);
КонецЕсли;
Поиск строки по индексу и по идентификатору
Для быстрого доступа к нужной строке рекомендуется использовать один из методов коллекции ТаблицаЗначений:
- НайтиПоИдентификатору(Идентификатор) – ищет строку по GUID.
- Найти(ЗначенияКолонок) – ищет строку по набору значений полей.
- Получить(Индекс) – возвращает строку по индексу.
Пример использования Найти:
Строка = ЭтотОбъект.Товары.Найти(Новый Структура("Номенклатура,Количество", Номенклатура, 5));
Если Строка <> Неопределено Тогда
Сообщить("Найдена строка с суммой " + Строка.Сумма);
КонецЕсли;
Работа в серверных модулях
Если требуется обработать ТЧ на сервере (например, в обработчике ПриЗаписи или в серверном методе), следует помнить о следующем:
- В серверных процедурах объект документа уже находится в режиме Запись, поэтому любые изменения в ТЧ автоматически сохраняются.
- Для получения доступа к ТЧ без загрузки всех строк используйте запрос с ограничением
ИЗ ... ТЧ КАК ТЧ. - Если необходимо изменить ТЧ из внешней обработки, передайте объект документа в параметре процедуры.
Пример серверного метода, вызываемого из клиентского кода:
&НаСервере
Функция СуммироватьТовары(ДокументСсылка) Экспорт
Док = Документы.РеализацияТоваровУслуг.ПолучитьОбъект(ДокументСсылка);
Сумма = 0;
Для Каждого Строка Из Док.Товары Цикл
Сумма = Сумма + Строка.Сумма;
КонецЦикла;
Возврат Сумма;
КонецФункции
Типичные ошибки и рекомендации
Ошибка «Объект не найден»
Часто возникает, когда пытаются обратиться к ТЧ до того, как объект был загружен. Убедитесь, что объект существует (Если ЭтотОбъект = Неопределено Тогда …) и что ТЧ действительно заполнена.
Неоптимальные запросы
Запрос, который выбирает всю ТЧ без фильтра, может сильно тормозить. Всегда добавляйте условия ГДЕ и используйте индексы (поле Ссылка).
Работа с клиентскими и серверными данными одновременно
Если в клиентском модуле меняете ТЧ, а затем вызываете серверный метод, передайте изменённый объект через ПередатьЗначение или используйте Объект.Записать перед вызовом.
Рекомендации
- Для чтения больших ТЧ используйте запросы, а не перебор в цикле.
- При необходимости часто обращатся к одной и той же строке храните её
УникальныйИдентификаторв переменной. - Всегда проверяйте
Если Строка = Неопределено Тогда …после поиска. - Для массового изменения ТЧ используйте метод
Таблица.Записатьпосле завершения цикла.
Контакты для обращений
Если у вас возникли вопросы по работе с табличными частями, вы можете связаться с нами любым удобным способом.
- Официальный сайт: https://www.example-1c-support.ru
- Горячая линия: +7 (495) -23‑45‑67
- Номера телефонов:
- Техническая поддержка – +7 (495) -23‑45‑68
- Отдел продаж – +7 (495) -23‑45‑69
- Электронный адрес: support@example-1c-support.ru
- Личный кабинет: https://cabinet.example-1c-support.ru
- Личный приём (консультация): записаться можно через форму «Личный приём»
- График приёма:
- Пн‑Пт: 09:00 – 18:00
- Сб: 10:00 – 15:00
- Вс: выходной
- Отделы:
- Отдел разработки – dev@example-1c-support.ru
- Отдел внедрения – impl@example-1c-support.ru
- Отдел обучения – train@example-1c-support.ru
- Руководство:
- Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Отзывы: оставлять отзывы можно на странице «Отзывы клиентов». Мы ценим каждое мнение и стараемся улучшать сервис.
Обращение к табличной части из модуля документа – одна из базовых задач в 1С:Предприятие. Выбор конкретного способа зависит от объёма данных, места выполнения (клиент/сервер) и требуемой производительности; Применяя приведённые примеры и рекомендации, вы сможете писать чистый, быстрый и надёжный код.
Если после прочтения статьи остались вопросы – смело используйте указанные выше контакты. Мы всегда готовы помочь!