Копирование реквизитов из табличных частей справочников в табличные части документов 1С

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

+7 (800) 301-07-30

Реклама jurik.ru

Цель статьи: подробно рассмотреть, как в системе 1С:Предприятие работать с реквизитами, находящимися в табличных частях справочников, и перенести их значения в табличные части документов. В статье приведены примеры кода, типичные ошибки и рекомендации по отладке.


Содержание

  1. Что такое табличная часть справочника
  2. Обращение к реквизитам табличной части
  3. Пример: копирование ФИО из справочника в документ
  4. Типичные ошибки и их решение
  5. Лучшие практики
  6. Контакты для обращений

Что такое табличная часть справочника

В 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.