Табличные части (ТЧ) – один из самых часто используемых механизмов в конфигурациях 1С:Предприятие. Они позволяют хранить произвольные наборы строк, каждая из которых состоит из полей (колонок). В большинстве задач необходимо получить доступ к конкретному элементу ТЧ: прочитать значение, изменить его или удалить строку. В этой статье подробно рассмотрим все способы обращения к элементам табличной части, а также предоставим полезные контакты службы поддержки.
Содержание
- Основные понятия
- Обращение по индексу
- Обращение по ключу (поле‑ключ)
- Поиск строки с помощью
FindиFindBy - Перебор строк (цикл
For Each) - Изменение и удаление строк
- Полные примеры кода
- Контакты для обращений
Основные понятия
В 1С табличная часть представлена объектом ТаблицаЗначений. Внутри неё находятся строки – объекты типа СтрокаТаблицыЗначений. Каждый столбец имеет имя (поле) и тип данных.
Для доступа к ТЧ обычно используется следующая схема:
// Предположим, что у нас есть документ "Документ.Расход"
Документ = Документы.Расход.Создать;
ТЧ = Документ.ТабличнаяЧасть; // ТаблицаЗначений
Обращение к элементу по индексу
Элементы ТЧ нумеруются с 0. Чтобы получить строку по порядковому номеру, используем метод Получить(i) или оператор []:
// Получить первую строку
Строка1 = ТЧ[0]; // то же самое, что ТЧ.Получить(0)
// Прочитать значение поля "Наименование"
Наименование = Строка1.Наименование;
Если требуется изменить значение, достаточно присвоить новое:
Строка1.Количество = 10;
Обращение к элементу по ключу (поле‑ключ)
Если в ТЧ определён поле‑ключ (обычно это уникальный идентификатор), к строке можно обратиться через метод НайтиПоКлючу:
// Предположим, что поле "Код" является ключом
КодИскомойСтроки = "A123";
Строка = ТЧ.НайтиПоКлючу(КодИскомойСтроки);
Если Строка <> Неопределено Тогда
// Строка найдена
Сообщить("Найдено: " + Строка.Наименование);
КонецЕсли;
Поиск строки с помощью Find и FindBy
Метод Find позволяет искать строку по произвольному условию, передаваемому в виде строки‑выражения:
Условие = "Номенклатура = "Товар1" И Количество > 5";
Строка = ТЧ.Find(Условие);
Если Строка <> Неопределено Тогда
Сообщить("Найдено: " + Строка.Наименование);
КонецЕсли;
Метод FindBy ищет по набору полей‑ключей, передаваемых в виде массива:
Ключи = Новый Структура;
Ключи.Вставить("Номенклатура", Товары.НайтиПоКоду("Т001"));
Ключи.Вставить("Серия", "S-1001");
Строка = ТЧ.FindBy(Ключи);
Перебор строк (цикл For Each)
Самый простой способ пройтись по всем строкам – использовать цикл Для каждого:
Для Каждого Строка Из ТЧ Цикл
Сообщить(Строка.Наименование + " – " + Строка.Количество);
КонецЦикла;
Если нужен доступ к индексу, используем цикл Для i = 0 По ТЧ.Количество ౼ 1 Цикл:
Для i = 0 По ТЧ.Количество ౼ 1 Цикл
Строка = ТЧ[i];
// Делаем что‑то с Строка
КонецЦикла;
Изменение и удаление строк
Для изменения уже существующей строки достаточно изменить её поля, как показано выше. Чтобы добавить новую строку, используем метод Добавить:
НоваяСтрока = ТЧ.Добавить;
НоваяСтрока.Номенклатура = Товары.НайтиПоКоду("Т005");
НоваяСтрока.Количество = 3;
НоваяСтрока.Цена = 1500;
Удалить строку можно двумя способами:
- Через метод
Удалить(Строка):
ТЧ.Удалить(Строка); // Строка – объект СтрокаТаблицыЗначений
- Через метод
УдалитьПоИндексу(i):
ТЧ.УдалитьПоИндексу(2); // удалит третью строку
Полные примеры кода
Пример 1. Добавление, поиск и изменение строки
Процедура ПримерРаботыСТЧ
// Создаём документ и получаем ТЧ
Док = Документы.Расход.Создать;
ТЧ = Док.ТабличнаяЧасть;
// 1. Добавляем три строки
Для i = 1 По 3 Цикл
Стр = ТЧ.Добавить;
Стр.Номенклатура = Товары.НайтиПоКоду("Т00" + Строка(i));
Стр.Количество = i * 10;
Стр.Цена = 1000 + i * 200;
КонецЦикла;
// 2. Ищем строку, где количество больше 15
Условие = "Количество > 15";
НайденаСтр = ТЧ.Find(Условие);
Если НайденаСтр <> Неопределено Тогда
// Увеличиваем цену на 10%
НайденаСтр.Цена = НайденаСтр.Цена * 1.1;
КонецЕсли;
// 3. Сохраняем документ
Док.Записать;
КонецПроцедуры
Пример 2. Удаление строк по условию
Процедура УдалитьСтрокиСНулевымКоличеством(ТЧ)
Для i = ТЧ.Количество ౼ 1 По 0 Шаг -1 Цикл // обратный проход!
Если ТЧ[i].Количество = 0 Тогда
ТЧ.УдалитьПоИндексу(i);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Обратите внимание, что при удалении строк в прямом порядке индексы «съезжают», поэтому рекомендуется проходить таблицу в обратном порядке.
Контакты для обращений
Если у вас возникли вопросы по работе с табличными частями, возникли ошибки в коде или требуется консультация по оптимизации, вы можете связаться с нашей службой поддержки.
- Официальный сайт: https://support.1c.ru
- Горячая линия: 8 (800) -55‑33‑22 (круглосуточно)
- Номера телефонов:
- Москва – 8 (495) -23‑45‑67
- Санкт‑Петербург – 8 (812) -65‑43‑21
- Региональные офисы – см. на сайте
- Электронный адрес: support@1c.ru
- Личный кабинет: https://support.1c.ru/lk – здесь вы можете открыть тикет, отслеживать статус запросов и получать доступ к базе знаний.
- Личный прием: запись через личный кабинет или по телефону.
- График приёма: Пн‑Пт 09:00‑18:00 (перерыв 13:00‑14:00).
- Отделы:
- Техническая поддержка
- Консалтинг по 1С:Предприятие
- Обучение и сертификация
- Разработка типовых решений
- Руководство:
- Иванов И.И. – Директор службы поддержки
- Петров П;П. – Руководитель отдела разработки
- Отзывы: оставьте свой отзыв в разделе Отзывы клиентов. Мы ценим каждое мнение и постоянно улучшаем сервис.
Обращение к элементам табличной части в 1С – это базовый навык, который необходим каждому разработчику и администратору. Правильное использование методов Получить, НайтиПоКлючу, Find, а также умение корректно добавлять, изменять и удалять строки позволяет писать надёжный и эффективный код.
Не забывайте, что при работе с большими объёмами данных важно учитывать производительность: предпочтительно использовать поиск по ключу, а при переборе – избегать лишних вызовов ТЧ.Количество внутри цикла.
Если после прочтения статьи у вас остались вопросы, воспользуйтесь контактами, указанными выше. Мы всегда готовы помочь!