Обращение к табличным частям в 1С:Предприятие

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

+7 (800) 301-07-30

Реклама jurik.ru

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


Содержание

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

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

  • Табличная часть – это свойство объекта, которое представляет собой массив строк (ТаблицаЗначений).
  • Каждая строка ТЧ имеет индекс (начинается с 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С:Предприятие. Выбор конкретного способа зависит от объёма данных, места выполнения (клиент/сервер) и требуемой производительности; Применяя приведённые примеры и рекомендации, вы сможете писать чистый, быстрый и надёжный код.

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