Обращение к строкам табличных частей в 1С

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

+7 (800) 301-07-30

Реклама jurik.ru

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


Содержание

  1. Базовый доступ к строке ТЧ через объект
  2. Обращение к ТЧ через запросы
  3. Поиск строк с помощью метода Найти и НайтиСтроки
  4. Итерация по всем строкам ТЧ
  5. Практические примеры
  6. Полезные рекомендации и типичные ошибки
  7. Контакты для обращения

Базовый доступ к строке ТЧ через объект

Самый простой способ – работать с объектом документа (или справочника) в управляемой форме или в модуле объекта.

Получить текущую строку табличного поля

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

Обращение к строке по индексу

// На сервере (модуль объекта)
ТЧ = Документ.РеализацияТоваровУслуг.Товары; // Таблица ТЧ
Строка = ТЧ[5]; // 5‑я строка (нумерация с 0)
Если Строка <> Неопределено Тогда
 // работа со строкой
КонецЕсли;

Добавление новой строки

НоваяСтрока = ТЧ.Добавить;
НоваяСтрока.Номенклатура = Справочники;Номенклатура.НайтиПоКоду("001");
НоваяСтрока.Количество = 10;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

Обращение к ТЧ через запросы

В запросах 1С можно работать как с основной таблицей документа, так и напрямую с таблицей, представляющей ТЧ. Это удобно, когда нужно отобрать только нужные строки без загрузки всего документа.

Как добавить ТЧ в список «Таблицы» конструктора запросов

Перетащите имя табличной части (например, Документ.РеализацияТоваровУслуг.Товары) в поле Таблицы конструктора запросов. После этого ТЧ будет рассматриваться как самостоятельная таблица.

Пример запроса

ВЫБРАТЬ
 Товары.Номенклатура КАК Номенклатура,
 Товары.Количество КАК Количество,
 Товары.Сумма КАК Сумма
ИЗ
 Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
 Товары.Дата >= &ДатаНачала
 И Товары.Дата <= &ДатаКонца

В результате запрос вернёт набор строк ТЧ, которые удовлетворяют условию.

Использование агрегатных функций

ВЫБРАТЬ
 Товары.Номенклатура КАК Номенклатура,
ИЗ
 Документ.РеализацияТоваровУслуг.Товары КАК Товары
СГРУППИРОВАТЬ ПО
 Товары.Номенклатура

Поиск строк с помощью методов Найти и НайтиСтроки

Если необходимо быстро найти одну или несколько строк по заданному набору полей, используйте методы Найти (для одной строки) и НайтиСтроки (для массива строк).

Поиск одной строки

ТЧ = Документ.РеализацияТоваровУслуг.Товары;
НайденнаяСтрока = ТЧ.Найти(Справочники.Номенклатура.НайтиПоКоду("001"));
Если НайденнаяСтрока <> Неопределено Тогда
 // Строка найдена
КонецЕсли;

Поиск по нескольким полям (структура отбора)

Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("001"));
Отбор.Вставить("Дата", ТекДата);

МассивСтрок = ТЧ;НайтиСтроки(Отбор);
// МассивСтрок – массив объектов ТабличнаяЧастьСтрока
Для Каждого Стр Из МассивСтрок Цикл
 // обработка найденных строк
КонецЦикла;

Поиск с использованием НайтиСтроки и массива критериев

Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("001"));
Отбор.Вставить("Склад", Справочники.Склады.НайтиПоКоду("S001"));

Найденные = ТЧ.НайтиСтроки(Отбор);
Если Найденные.Количество > 0 Тогда
 // Есть строки, удовлетворяющие обоим условиям
КонецЕсли;

Итерация по всем строкам ТЧ

Для полного обхода табличной части удобно использовать цикл Для Каждого … Цикл или цикл Для i = 0 По … Цикл.

Цикл Для Каждого

Для Каждого Стр Из ТЧ Цикл
 Сообщить("Товар: " + Стр.Номенклатура.Наименование + ", Кол-во: " + Стр.Количество);
КонецЦикла;

Цикл с индексом

Для i = 0 По ТЧ.Количество ⎻ 1 Цикл
 Стр = ТЧ[i];
 // работа со строкой
КонецЦикла;

Практические примеры

Увеличить количество товара в строке, если она уже есть

ТЧ = Документ.РеализацияТоваровУслуг.Товары;
Найденная = ТЧ.Найти(Справочники.Номенклатура.НайтиПоКоду("001"));
Если Найденная = Неопределено Тогда
 // Добавляем новую строку
 Новая = ТЧ.Добавить;
 Новая.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("001");
 Новая.Количество = 1;
Иначе
 // Увеличиваем количество
 Найденная.Количество = Найденная.Количество + 1;
КонецЕсли;

Удалить все строки, где количество = 0

ТЧ = Документ.РеализацияТоваровУслуг.Товары;
Для i = ТЧ.Количество ‒ 1 По 0 Шаг -1 Цикл
 Если ТЧ[i].Количество = 0 Тогда
 ТЧ.Удалить(i);
 КонецЕсли;
КонецЦикла;

Сформировать массив номенклатур из ТЧ для дальнейшего использования в запросе

ТЧ = Документ.РеализацияТоваровУслуг.Товары;
МассивНоменклатур = Новый Массив;
Для Каждого Стр Из ТЧ Цикл
 МассивНоменклатур.Добавить(Стр.Номенклатура);
КонецЦикла;

// Далее используем массив в запросе
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
 Товары.Номенклатура,
 Товары.Количество
ИЗ
 Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
 Товары.Номенклатура В(&МассивНоменклатур)";

Запрос.УстановитьПараметр("МассивНоменклатур", МассивНоменклатур);
Результат = Запрос.Выполнить;

Полезные рекомендации и типичные ошибки

  • Не путайте табличную часть и табличное поле. Табличное поле – элемент формы, а табличная часть – часть объекта (документа, справочника).
  • При работе с запросами к ТЧ используйте полное имя объекта. Пример: Документ.РеализацияТоваровУслуг.Товары, иначе запрос будет искать поле в основной таблице.
  • При удалении строк в цикле используйте обратный порядок. Иначе индексы смещаются и часть строк может быть пропущена.
  • Метод Найти ищет только первую подходящую строку. Если нужно несколько строк, используйте НайтиСтроки или запрос.
  • Не забывайте про блокировку. При работе в многопользовательской среде используйте ЗапретитьИзменения и РазрешитьИзменения при необходимости.
  • При работе в клиент‑серверном режиме помните о передаче данных. Если вы получаете ТЧ на клиенте, её изменения автоматически не сохраняются на сервере – требуется вызвать Записать у документа.

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

Тип контакта Информация
Официальный сайт 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://lk.1c-company.ru
Личный приём (офис) ул. Тверская, д. 7, офис 312, Москва, РФ
График приёма Пн‑Пт: 09:00‑18:00 (перерыв 13:00‑14:00)
Отделы
  • Отдел разработки
  • Отдел внедрения
  • Отдел поддержки
  • Отдел продаж
  • Отдел обучения
Руководство
  • Генеральный директор – Иванов И.И.
  • Технический директор – Петров П.П.
  • Директор по продажам – Сидорова А.А.
Отзывы

Мы ценим обратную связь! Оставьте отзыв на странице отзывов или отправьте письмо на feedback@1c-company.ru.

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