При программной работе с документами и справочниками разработчикам часто приходится добавлять новые строки в табличные части и заполнять множество реквизитов. Ручной ввод длинного списка свойств вида НоваяСтр.Реквизит = Значение отнимает время и приводит к ошибкам. Разберем основные способы и инструменты, которые позволяют ускорить этот процесс и свести написание рутинного кода к минимуму.
Самый простой и эффективный способ программного заполнения реквизитов новой строки — применение встроенной функции ЗаполнитьЗначенияСвойств. Вместо явного присвоения значения каждому полю строки по отдельности, проанализируем следующую схему:
Добавить().ЗаполнитьЗначенияСвойств для копирования данных.Посмотрим на пример реализации данного подхода:
// Создаем структуру с начальными значениями
ДанныеДляЗаполнения = Новый Структура;
ДанныеДляЗаполнения.Вставить("Номенклатура", ВыбраннаяНоменклатура);
ДанныеДляЗаполнения.Вставить("Количество", 10);
ДанныеДляЗаполнения.Вставить("Цена", 1500);
ДанныеДляЗаполнения.Вставить("Сумма", 15000);
// Добавляем новую строку в табличную часть Товары
НоваяСтрока = Объект.Товары.Добавить();
// Заполняем реквизиты новой строки из структуры
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеДляЗаполнения);
Рассмотрим дополнительные параметры функции ЗаполнитьЗначенияСвойств, которые повышают гибкость работы:
НомерСтроки).Чтобы не прописывать имена всех колонок вручную при формировании структуры или цикла, проанализируем возможность динамического считывания состава реквизитов из метаданных конфигурации. Это особенно полезно при написании универсальных алгоритмов обработки табличных частей.
Рассмотрим пример кода для автозаполнения реквизитов на основе метаданных:
МетаданныеТЧ = Метаданные.Документы.РеализацияТоваровУслуг.ТабличныеЧасти.Товары;
НоваяСтрока = Объект.Товары.Добавить();
Для Каждого Реквизит Из МетаданныеТЧ.Реквизиты Цикл
ИмяРеквизита = Реквизит.Имя;
// Устанавливаем необходимые значения динамически
Если ИмяРеквизита = "Количество" Тогда
НоваяСтрока[ИмяРеквизита] = 1;
КонецЕсли;
КонецЦикла;
Помимо написания кода на встроенном языке 1С, ускорить генерацию заготовок для всех реквизитов помогают специализированные средства разработки:
При использовании группового и автоматического заполнения реквизитов следует учитывать следующие нюансы:
ЗаполнитьЗначенияСвойств копирует значение только при условии совпадения имен и типов приемника и источника. Если типы не пересекаются, значение реквизита сбросится или останется пустым.НомерСтроки) рассчитываются платформой автоматически, их следует исключать при переносе данных между объектами.ЗаполнитьЗначенияСвойств выполняется на платформенном уровне C++ намного быстрее, чем поколоночный обход строки в цикле средствами встроенного языка.