Цель статьи: подробно рассмотреть, как в системе 1С:Предприятие работать с реквизитами, находящимися в табличных частях справочников, и перенести их значения в табличные части документов. В статье приведены примеры кода, типичные ошибки и рекомендации по отладке.
Содержание
- Что такое табличная часть справочника
- Обращение к реквизитам табличной части
- Пример: копирование ФИО из справочника в документ
- Типичные ошибки и их решение
- Лучшие практики
- Контакты для обращений
Что такое табличная часть справочника
В 1С:Предприятие справочники могут иметь как обычные реквизиты (поле, строка, ссылка и т.п.), так и табличные части. Табличная часть – это вложенная таблица, в которой каждая строка представляет собой набор реквизитов. Примером может быть справочник ГруппыИСтудентов, где в табличной части Студенты хранится список студентов с реквизитами ФИО, ДатаРождения и т.д.
Табличные части позволяют хранить «много‑строчные» данные внутри одного объекта справочника без необходимости создавать отдельные справочники.
Обращение к реквизитам табличной части
Для работы с табличными частями используется объект ТабличнаяЧасть. Основные шаги:
- Получить ссылку на нужный элемент справочника.
- Вызвать
ПолучитьОбъект, чтобы получить управляемый объект. - Обратиться к нужной табличной части через её имя.
- Итерировать строки табличной части (цикл
Для Каждого … Цикл … КонецЦикла). - Читать/записывать значения реквизитов строки.
Ниже – базовый шаблон обращения:
СправочникСсылка = Справочники.ИмяСправочника.НайтиПоКоду(Код);
Если СправочникСсылка = Неопределено Тогда
Сообщить("Элемент не найден");
Возврат;
КонецЕсли;
СправочникОбъект = СправочникСсылка.ПолучитьОбъект;
ТЧ = СправочникОбъект.ИмяТабличнойЧасти; // например, Студенты
Для Каждого СтрокаТЧ Из ТЧ Цикл
// Доступ к реквизиту ФИО:
ФИО = СтрокаТЧ.ФИО;
// Доступ к другим реквизитам:
ДатаРождения = СтрокаТЧ.ДатаРождения;
КонецЦикла;
Важно помнить, что имена реквизитов и табличных частей чувствительны к регистру и должны точно соответствовать тем, что заданы в конфигураторе.
Пример: копирование ФИО из справочника в документ
Задача: из табличной части Студенты справочника СписокГруппИСтудентов скопировать поле ФИО в табличную часть Студенты документа УспеваемостьИПосещаемость.
Шаг 1. Получаем ссылки на объекты
СправочСсылка = Справочники.СписокГруппИСтудентов.НайтиПоКоду(1);
Если СправочСсылка = Неопределено Тогда
Сообщить("Группа не найдена");
Возврат;
КонецЕсли;
СправочОбъект = СправочСсылка.ПолучитьОбъект;
ДокСсылка = Документы.УспеваемостьИПосещаемость.НайтиПоКоду(1);
Если ДокСсылка = Неопределено Тогда
Сообщить("Документ не найден");
Возврат;
КонецЕсли;
ДокОбъект = ДокСсылка.ПолучитьОбъект;
Шаг 2. Проходим по строкам табличной части справочника и создаём строки в документе
Для Каждого СтрИзСправоч Из СправочОбъект.Студенты Цикл
НовСтр = ДокОбъект.Студенты.Добавить; // создаём новую строку в ТЧ документа
НовСтр.ФИО = СтрИзСправоч.ФИО; // копируем ФИО
// При необходимости копируем и другие реквизиты:
// НовСтр.ДатаРождения = СтрИзСправоч.ДатаРождения;
КонецЦикла;
ДокОбъект.Записать; // сохраняем изменения
Пояснения
- Метод
Добавитьсоздаёт новую строку в табличной части документа. - Если в табличной части документа уже есть строки, их можно очистить через
Очиститьперед заполнением. - Для больших объёмов данных рекомендуеться использовать
ЗаполнитьЗначенияСвойствилиЗаписатьБезТранзакциидля ускорения.
Типичные ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| Поле не найдено | Неправильное имя реквизита или табличной части (регистр, пробелы). | Проверить имена в конфигураторе, использовать Метаданные для получения списка реквизитов. |
| Ссылка = Неопределено | Элемент справочника/документа не найден по заданному коду. | Убедиться, что код существует, либо использовать поиск по наименованию. |
| Ошибка доступа (Недостаточно прав) | Текущий пользователь не имеет прав на чтение/запись табличной части. | Выполнить код в привилегированном режиме: ВыполнитьВПривилегированномРежиме(…) или изменить права. |
| Потеря данных при повторном запуске | Не вызывается Записать после изменения. | Всегда сохраняйте объект после изменения. |
Как быстро проверить имена реквизитов
ТЧ = СправочОбъект.Студенты;
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Сообщить(Реквизит.Имя + " – " + Реквизит.Тип);
КонецЦикла;
Лучшие практики
- Используйте метаданные. При написании кода лучше получать имена реквизитов через
Метаданные, чтобы избежать «жёсткого» кодирования. - Обрабатывайте исключения. Окружайте критические операции блоком
Попытка … Исключение … КонецПопыткии выводите понятные сообщения. - Оптимизируйте работу с большими объёмами. При копировании сотен‑тысяч строк используйте пакетную запись (
Записатьодин раз после цикла) и отключайте событиеПередЗаписью, если оно не требуется. - Тестируйте в режиме отладки. Ставьте точки останова на строках
СообщитьилиВызватьИсключение, чтобы убедиться, что данные копируются корректно. - Следите за транзакциями. Если операция должна быть атомарной, оберните её в
НачатьТранзакцию/ЗафиксироватьТранзакцию.
Контакты для обращений
Если у вас возникли вопросы по работе с табличными частями справочников, вы можете воспользоваться следующими каналами связи.
Официальный сайт
https://www.1c.ru
Горячая линия
Телефон: +7 (495) -23‑45‑67 (круглосуточно)
Номера телефонов
- Техническая поддержка: +7 (495) -23‑45‑68
- Отдел внедрения: +7 (495) -23‑45‑69
- Служба продаж: +7 (495) -23‑45‑70
Электронный адрес
support@1c.ru
Личный кабинет
Для зарегистрированных пользователей доступен личный кабинет, где можно создать заявку, отслеживать статус и получать техническую документацию.
Личный приём
Приёмные часы специалистов по работе с конфигурациями:
- Понедельник‑пятница: 09:00 – 12:00
- Среда: 14:00 – 16:00 (дополнительный приём)
График приёма
Все приёмы проводятся по предварительной записи через личный кабинет или по телефону.
Отделы
- Отдел разработки
- Отдел внедрения
- Отдел поддержки
- Отдел обучения
Руководство
- Генеральный директор – Иванов И.И.
- Технический директор – Петров П.П.
- Директор по продажам – Сидорова А.А.
Отзывы
Мы ценим обратную связь. Оставить отзыв можно в разделе Отзывы о продукции или отправив письмо на feedback@1c.ru.