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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При программной работе с документами и справочниками разработчикам часто приходится добавлять новые строки в табличные части и заполнять множество реквизитов. Ручной ввод длинного списка свойств вида НоваяСтр.Реквизит = Значение отнимает время и приводит к ошибкам. Разберем основные способы и инструменты, которые позволяют ускорить этот процесс и свести написание рутинного кода к минимуму.

1. Использование функции ЗаполнитьЗначенияСвойств

Самый простой и эффективный способ программного заполнения реквизитов новой строки — применение встроенной функции ЗаполнитьЗначенияСвойств. Вместо явного присвоения значения каждому полю строки по отдельности, проанализируем следующую схему:

  1. Формируем структуру или используем источник данных (другую строку, таблицу значений или результат запроса), в котором имена свойств совпадают с именами реквизитов табличной части.
  2. Добавляем новую строку в табличную часть через метод Добавить().
  3. Вызываем платформенную функцию ЗаполнитьЗначенияСвойств для копирования данных.

Посмотрим на пример реализации данного подхода:


// Создаем структуру с начальными значениями
ДанныеДляЗаполнения = Новый Структура;
ДанныеДляЗаполнения.Вставить("Номенклатура", ВыбраннаяНоменклатура);
ДанныеДляЗаполнения.Вставить("Количество", 10);
ДанныеДляЗаполнения.Вставить("Цена", 1500);
ДанныеДляЗаполнения.Вставить("Сумма", 15000);

// Добавляем новую строку в табличную часть Товары
НоваяСтрока = Объект.Товары.Добавить();

// Заполняем реквизиты новой строки из структуры
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеДляЗаполнения);

Рассмотрим дополнительные параметры функции ЗаполнитьЗначенияСвойств, которые повышают гибкость работы:

  1. ЗаполняемыеСвойства — позволяет указать точный список реквизитов (строкой через запятую или массивом), которые необходимо скопировать.
  2. ИсключаемыеСвойства — позволяет исключить из копирования системные или служебные поля (например, НомерСтроки).

2. Динамический обход реквизитов через метаданные

Чтобы не прописывать имена всех колонок вручную при формировании структуры или цикла, проанализируем возможность динамического считывания состава реквизитов из метаданных конфигурации. Это особенно полезно при написании универсальных алгоритмов обработки табличных частей.

Рассмотрим пример кода для автозаполнения реквизитов на основе метаданных:


МетаданныеТЧ = Метаданные.Документы.РеализацияТоваровУслуг.ТабличныеЧасти.Товары;
НоваяСтрока = Объект.Товары.Добавить();

Для Каждого Реквизит Из МетаданныеТЧ.Реквизиты Цикл
    ИмяРеквизита = Реквизит.Имя;
    // Устанавливаем необходимые значения динамически
    Если ИмяРеквизита = "Количество" Тогда
        НоваяСтрока[ИмяРеквизита] = 1;
    КонецЕсли;
КонецЦикла;

3. Инструменты разработки и плагины автодополнения

Помимо написания кода на встроенном языке 1С, ускорить генерацию заготовок для всех реквизитов помогают специализированные средства разработки:

  1. Шаблоны текста в Конфигураторе (.tpi) — штатный механизм платформы. Вы можете заранее настроить пользовательские текстовые шаблоны с готовыми перечнями реквизитов для частых объектов и вставлять их по комбинации клавиш.
  2. Снегопат (Snegopat) — известный плагин для Конфигуратора 1С, предоставляющий развитые возможности автодополнения кода, быстрой подстановки структуры и всех реквизитов объекта по аналогии с Телепатом из версии 7.7.
  3. 1C:Enterprise Development Tools (EDT) — среда разработки на базе Eclipse, включающая умный контекстный автодополнятель и автоматическую генерацию кода по метаданным.
  4. Внешние обработки генерации кода — сервисные инструменты, считывающие метаданные выбранного документа или справочника и формирующие готовый фрагмент кода 1С с перечислением всех реквизитов в буфер обмена.

4. Важные особенности и ограничения

При использовании группового и автоматического заполнения реквизитов следует учитывать следующие нюансы:

  1. Совместимость типов данных — функция ЗаполнитьЗначенияСвойств копирует значение только при условии совпадения имен и типов приемника и источника. Если типы не пересекаются, значение реквизита сбросится или останется пустым.
  2. Служебные реквизиты — системные поля (например, НомерСтроки) рассчитываются платформой автоматически, их следует исключать при переносе данных между объектами.
  3. Высокая производительность — групповая операция через ЗаполнитьЗначенияСвойств выполняется на платформенном уровне C++ намного быстрее, чем поколоночный обход строки в цикле средствами встроенного языка.
← На главную