Табличные части (ТЧ) – один из самых мощных механизмов платформы 1С:Предприятие. Они позволяют хранить произвольный набор строк с произвольным набором полей внутри документов, справочников и регистров. Часто возникает необходимость получить доступ к конкретной строке ТЧ: прочитать её данные, изменить, удалить или добавить новую. В статье рассмотрим все основные способы обращения к строкам табличной части, от простого обращения через объект до использования запросов и методов поиска.
Содержание
- Базовый доступ к строке ТЧ через объект
- Обращение к ТЧ через запросы
- Поиск строк с помощью метода
НайтииНайтиСтроки - Итерация по всем строкам ТЧ
- Практические примеры
- Полезные рекомендации и типичные ошибки
- Контакты для обращения
Базовый доступ к строке ТЧ через объект
Самый простой способ – работать с объектом документа (или справочника) в управляемой форме или в модуле объекта.
Получить текущую строку табличного поля
// На клиенте (управляемая форма)
ТекСтрока = ЭлементыФормы.ТабличноеПолеТовары.ТекущаяСтрока;
Если ТекСтрока <> Неопределено Тогда
Номенклатура = ТекСтрока.Номенклатура;
Количество = ТекСтрока.Количество;
КонецЕсли;
Обращение к строке по индексу
// На сервере (модуль объекта)
ТЧ = Документ.РеализацияТоваровУслуг.Товары; // Таблица ТЧ
Строка = ТЧ[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 (круглосуточно) |
| Номера телефонов |
|
| Электронный адрес | support@1c-company.ru |
| Личный кабинет | https://lk.1c-company.ru |
| Личный приём (офис) | ул. Тверская, д. 7, офис 312, Москва, РФ |
| График приёма | Пн‑Пт: 09:00‑18:00 (перерыв 13:00‑14:00) |
| Отделы |
|
| Руководство |
|
| Отзывы | Мы ценим обратную связь! Оставьте отзыв на странице отзывов или отправьте письмо на |
Если у вас возникли вопросы по работе с табличными частями в 1С, пожалуйста, используйте любой из указанных способов связи – наши специалисты помогут быстро решить проблему.