Табличные части – это вложенные таблицы, которые позволяют хранить набор строк с набором реквизитов внутри объектов (справочников, документов, регистров)․ Часто возникает необходимость программно получить, изменить или добавить строку табличной части․ В статье рассмотрим все способы обращения к элементам табличной части справочника в 1С:Предприятие 8․x․
Содержание
- Общее представление о табличных частях
- Обращение через объект справочника
- Обращение через запрос
- Работа с табличной частью на форме
- Лучшие практики и типичные ошибки
- Часто задаваемые вопросы
- Контакты для обращения
Общее представление о табличных частях
Табличная часть – это отдельный объект ТаблицаЗначений, который хранится в поле реквизита типа Табличная часть․ У каждого элемента справочника (или документа) может быть несколько табличных частей, каждая из которых имеет собственный набор реквизитов․
Пример структуры справочника Номенклатура с табличной частью Характеристики:
- Справочник: Номенклатура
- Табличная часть: Характеристики
- Реквизит
Наименование(Строка) - Реквизит
Значение(Строка)
- Реквизит
Обращение к элементу табличной части через объект справочника
Получение ссылки на справочник
СправочникОбъект = Справочники․Номенклатура․НайтиПоКоду("ТМ01"); // или ПоНаименованию
Если СправочникОбъект = Неопределено Тогда
Сообщить("Элемент не найден");
Возврат;
КонецЕсли;
Доступ к табличной части
Табличная часть представлена как ТаблицаЗначений․ Чтобы обратиться к конкретной строке, используем методы Найти, Получить или перебираем Для каждого ․․․ Из ․․․ Цикл․
Пример: поиск строки по значению реквизита
Таблица = СправочникОбъект․Характеристики; // имя табличной части
НайденнаяСтрока = Таблица․Найти(Новый Структура("Наименование", "Цвет"));
Если НайденнаяСтрока = Неопределено Тогда
Сообщить("Строка с характеристикой 'Цвет' не найдена");
Иначе
// Работа с найденной строкой
Сообщить("Значение: " + НайденнаяСтрока․Значение);
КонецЕсли;
Пример: добавление новой строки
НоваяСтрока = Таблица․Добавить;
НоваяСтрока․Наименование = "Размер";
НоваяСтрока․Значение = "M";
Таблица․Записать; // сохраняем изменения в объекте
СправочникОбъект․Записать; // сохраняем сам справочник
Пример: изменение текущей строки в цикле
Для Каждого ТекСтрока Из Таблица Цикл
Если ТекСтрока․Наименование = "Вес" Тогда
ТекСтрока․Значение = "1,5 кг";
КонецЕсли;
КонецЦикла;
Таблица․Записать;
СправочникОбъект․Записать;
Работа с методом Получить
Метод Получить(Индекс) возвращает строку по её порядковому номеру (нумерация с 0)․
ПерваяСтрока = Таблица․Получить(0);
Сообщить("Первая характеристика: " + ПерваяСтрока․Наименование);
Обращение к табличной части через запрос
В запросах 1С табличные части могут использоваться как отдельные таблицы․ Это удобно, когда нужно собрать данные из нескольких справочников или выполнить агрегирование․
Добавление табличной части в поле Таблицы конструктора запросов
Перетащите имя табличной части (например, Характеристики) в список Таблицы․ В запросе она будет доступна под тем же именем․
Пример запроса
ВЫБРАТЬ
Номенклатура․Ссылка КАК Справочник,
Характеристики․Наименование КАК Характеристика,
Характеристики․Значение КАК Значение
ИЗ
Справочник․Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Номенклатура․Характеристики КАК Характеристики
ПО Номенклатура․Ссылка = Характеристики․Ссылка
ГДЕ
Характеристики․Наименование = &ИмяХарактеристики
В этом запросе каждая строка табличной части становится отдельной записью результата․
Выполнение запроса в коде
Запрос = Новый Запрос;
Запрос․Текст = ТекстЗапроса;
Запрос․УстановитьПараметр("ИмяХарактеристики", "Цвет");
Результат = Запрос․Выполнить;
Для Каждого Строка Из Результат Выбрать Цикл
Сообщить("Товар: " + Строка․Справочник + ", Цвет: " + Строка․Значение);
КонецЦикла;
Работа с табличной частью на форме
При работе в пользовательском режиме часто требуется обращаться к текущей строке табличной части, выделенной пользователем․
Получение текущей строки
ТекСтрока = Элементы․ТаблицаХарактеристик․ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда
Сообщить("Нет выбранной строки");
Возврат;
КонецЕсли;
Обработчик события ПриИзменении реквизита
Процедура ТаблицаХарактеристикПриИзменении(Элемент)
ТекСтрока = Элемент․ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда Возврат; КонецЕсли;
// Пример: автоматически рассчитываем поле "Сумма"
ТекСтрока․Сумма = ТекСтрока․Количество * ТекСтрока․Цена;
КонецПроцедуры
Добавление строки через форму
НоваяСтрока = Элементы․ТаблицаХарактеристик․Добавить;
НоваяСтрока․Наименование = "Материал";
НоваяСтрока․Значение = "Сталь";
Элементы․ТаблицаХарактеристик․Обновить;
Лучшие практики и типичные ошибки
- Всегда проверяйте наличие строки перед обращением к её реквизитам (проверка на
Неопределено)․ - При работе с запросами не забывайте про индексацию – запрос к табличной части может вернуть большое количество строк, используйте фильтры․
- Для изменения данных используйте методы
ЗаписатьуТаблицаЗначенийи у самого объекта справочника․ - Если требуется часто обращаться к одной и той же строке, сохраняйте её
Ссылка(полеСсылкав табличной части) и используйте методНайтиПоСсылке․ - При работе в режиме клиент‑сервер избегайте передачи больших таблиц в клиентскую часть – используйте запросы с ограничением
TOPили постраничную загрузку․ - Не меняйте структуру табличной части (добавление/удаление реквизитов) в рабочем режиме – такие изменения требуют обновления конфигурации․
Часто задаваемые вопросы
- Как получить доступ к табличной части, если справочник открыт в режиме списка?
- В списке доступен только набор реквизитов списка․ Чтобы работать с табличной частью, откройте элемент справочника в режиме формы (
ЭлементыФормы․Элемент) и используйтеЭлементыФормы․Таблица․ - Можно ли использовать метод
Найтибез указания всех реквизитов? - Да․ В
Найтипередаётся структура, содержащая только те реквизиты, которые участвуют в поиске․ Остальные игнорируются․ - Как изменить несколько строк одновременно?
- Можно использовать цикл
Для каждогои менять нужные реквизиты, а затем один раз вызватьТаблица․Записать․ При необходимости можно воспользоваться запросомОбновитьв режиме клиент‑сервер․ - Как удалить строку из табличной части?
- Вызовите метод
Удалитьу найденной строки:Таблица․Удалить(НайденнаяСтрока);ЗатемТаблица․Записать;
Контакты для обращения
| Тип контакта | Информация |
|---|---|
| Официальный сайт | https://www․1c-company․ru |
| Горячая линия | +7 (495) -23‑45‑67 (круглосуточно) |
| Номера телефонов |
|
| Электронный адрес | support@1c-company․ru |
| Личный кабинет | https://portal․1c-company․ru |
| Личный приём | Приём в офисе г․ Москва, ул․ Тверская, д․ 7, кабинет 12 |
| График приёма | Пн‑Пт: 09:00 – 18:00 (перерыв 13:00 – 14:00) |
| Отделы |
|
| Руководство |
|
| Отзывы |
|
Если у вас возникли вопросы по работе с табличными частями справочников, используйте любой из указанных каналов связи – специалисты помогут подобрать оптимальное решение․