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