Универсальная загрузка данных формата Excel
Универсальная обработка по чтению/импорту данных формата Excel в базы 1С.
- Описание
- Подробнее
Описание
В данной публикации приведено описание механизма загрузки данных в 1С из "двумерного формата" Excel, а также ряд примеров использования механизма.
Если лень читать длинное описание и смотреть унылые картинки: код можно взять здесь: https://github.com/artkor83/-ImportExcelOnec. И в дальнейшем разбираться самостоятельно: код полностью открыт.
Оглавление
Получение данных: общее описание, алгоритмы
Получение данных: Порядок работы
Получение данных из листа excel
Получение данных из макета (буфера)
Режим чтения макета из внешнего файла
Режим чтения макета из буфера ячеек
Дополнительные команды: Номера колонок: чтение наименований из файла
Дополнительные команды: Номера колонок: выбор типов
Дополнительные команды: Номера колонок: определение типов
Загрузка данных: Внешние файлы: обработки, макеты
Загрузка данных: Алгоритмы "Перед загрузкой", "Загрузка данных строки"
Загрузка данных: буфер вспомогательного кода
Построчная загрузка данных: пример
Построчная загрузка данных: редактирование алгоритмов
Построчная загрузка данных: Загрузка данных в базу
Общая (непострочная) загрузка данных: пример
Общая (непострочная) загрузка данных:редактирование алгоритмов
Общая (непострочная) загрузка данных:загрузка данных в базу
Отладка общей (непострочной) загрузки.
Сохранение / загрузка настроек
Интерфейс сохранения, краткое описание
Примеры файлов настроек, рекомендации
Введение.
В процессе работы очень часто встают задачи по импорту информации в базы 1С (далее БД1С) из различных excel-файлов. Наиболее распространенные варианты:
импорт начальных остатков,
прайс-листы различных видов и модификаций
сегменты номенклатуры, клиентов
прочее: справочники, документы, регистры сведений различного назначения
Если начать с последнего пункта: часто бывает нужно загрузить набор справочников со специально заполняемыми реквизитами, которые простой связью "1-к-1" никак не удается заполнить: появляются "красные поля" в карточке справочников типа "ФизическиеЛица", которые в дальнейшем "мешают жить" в процессе эксплуатации информационных систем.

На практике все неумолимо сводится к написанию программного кода, где на входе поступает некий объект "ТаблицаЗначений", полученный из Excel, на выходе "все что угодно":
Набор элементов ссылочного типа с фиксированными полями. Пример: элементы типа "Справочник.Контрагенты" с видом(физическое лицо/ юридическое лицо), зависящим от длины ИНН из файла excel
Набор элементов ссылочного типа нескольких метаданных. Пример: элементы типа Справочник.Сотрудники и "приклеенные" к ним физические лица: Справочник.ФизическиеЛица. При этом не забываем, что наименование физ.лица вовсе не единственное "обязательное поле": необходимо еще указать ФИО, разбивку по реквизитам "Фамилия Имя Отчество".
Документ по вводу начальных остатков: тут комментарии излишни. Вариантов "видов операций по вводу остатков" множество в базе формата УТ11, не говоря про ERP 😉 И все их нужно как-то обыграть.
В противном случае столкнемся с недовольством пользователей в процессе работы с БД1С, которые никак не могут отредактировать карточку физ.лица. Система ругается на незаполненность полей, либо не получается исправить циферки при вводе начальных остатков.

При записи объекта система зачастую ругается на поля которые и на форме-то не видны (являются скрытыми), пользователи в ярости, разработчик "на измене".
При импорте данных через формат excel процесс требует значительных программных доработок. Целесообразно под рукой иметь удобный механизм для чтения/обработки/загрузки данных…
Загрузка обработками "на коленке"
Это — плохой путь: не делайте так.
Путем практического опыта с различными загрузками из excel вначале все сводилось к следующему алгоритму:
Есть заготовленный шаблон внешней обработки, который через com читает excel-файл и в нужной закладке собирает данные. Пример кода ниже, образцов можно нагуглить великое множество:
Excel = Новый COMОбъект("Excel.Application"); Excel.Visible = 0; Excel.DisplayAlerts = 0; Excel.WorkBooks.Open(ИмяФайлаЗагрузки);Каждая прочитанная строка преобразуется в массив строковых ячеек, которые имеют свое назначение и в дальнейшем используются для загрузки данных
Набор данных выводится на форму в таблицу значений. Как правило, случаются пользовательские ошибки в файле excel. Например:
вместо числового поля ввели какую-то непонятную "чудо-строку", которая в момент преобразования значения в число дала ошибку и тем самым файл даже не дочитался
ключевое значение типа "артикул номенклатуры" введен в файле неверно — тем самым имеем множество пустых строк товаров, по которым заполнены показатели, а "всего-то нолик вначале забыли добавить до длины=10 символов"
файл excel модифицировался: добавили 2 колонки данных в листе excel между "номенклатура" и "цена", а программисту сказать забыли 😉
Загрузка данных. Полученная на форму таблица загружается в базу. При этом данные могут быть неполными из-за ошибок, также есть потребность отредактировать данные на форме. Сама загрузка зачастую идет по сложному алгоритму. одной конструкцией вида
Процедура ЗагрузитьДанные(ТаблицаЗначенийИзExcel)Для каждого ДанныеСтроки Из ТаблицаДанныхExcel ЦиклR03; // алгоритм обработки загрузкиКонецЦикла;КонецПроцедурыникак не удаестся обойтись.
Требуется множество процедур и функций на каждый конкретный случай.
Итог: хаос из непонятных обработок чтения-загрузки, файлов-шаблонов excel различного вида "Штатнаярасстановка.xls, Штатнаярасстановка-02.xls, Штатнаярасстановка-03.xls, Штатнаярасстановка-03безОшибокФИО.xls, Штатнаярасстановка-03СНумерацией.xls, Штатная_расстановка-03Сбантиком.xls" и на каждый своя обработка загрузки… Решено было сделать хорошие вещи (ну хотя-бы попытаться).
Получение данных.
Общий интерфейс.
Пришли к выводу, что для чтения данных нужно: сам файл excel, расположенный на диске, закладка для чтения данных, интервал чтения строк данных, и кнопка "Получить данные" для вывода данных в ТЗ на форму:

Кроме этого требуется набор колонок с настройкой типов:
Нужна таблица настроек колонок вида "Имя колонки, номер колонки, Тип значения"
На форме обработки их нужно как-то сохранять, иначе будет "грустно" при каждом открытии формы заново их вводить.
Желательно сохранять их в какой-нибудь внешний файл и впоследствии читать из файла в другой копии БД1С.
В итоге решено было сделать такие настройки в виде таблицы на форме:

Пока нужно знать следующее: есть таблица имен колонок, соотствествие номеру колонки из excel "№ кол" и выбранный "Тип значения" колонки. Назначение команд формы "Прочитать колонки по номеру строки", "Поиск типов" будет описано ниже.
По команде "Получить данные" производится чтение данных из указанного диапазона строк excel-файла (это очевидно). Следует выделить 3 режима получения:
1 лист excel
несколько листов excel
режим "по макету": вставка данных из буфера в табличное поле на форме
Получение данных: общее описание, алгоритмы
По команде "Получить данные" производится чтение данных из указанного диапазона строк excel-файла (это очевидно), после этого полученные данные требуется преобразовать в типы, введенные на закладке "Номера колонок".
Если тип примитивный (Число,Строка,Дата,Булево) — обработка автоматически преобразует строковое значение ячейки в полученный тип. Для прочих типов:
Справочник, план видов характеристик — "НайтиПоНаименованию"
План счетов, план видов расчета: "НайтиПоКоду"
Документ: "НайтиПоНомеру"
Перечисление: поиск по синониму или по имени реквизита. Для примера "ПеречислениеСсылка.ВидыЗанятости" по строке "Основное место работы" или "ОсновноеМестоРаботы" вернет элемент перечисления с данным синонимом.
Но зачастую обычного простого преобразования не хватает: нужна программная обработка. Для этого предусмотрен специальный текстовый код на языке 1С, который срабатывает после чтения каждой строки.
Получение данных: Порядок работы
Переходим на закладку "Алгоритмы", редактируем поле "Поиск данных строки":

В примере текст кода уже заполнен, предположим что "его нет". нажимаем кнопку "Поиск данных строки". В левой части подсказка кода (не редактируется), в правой — сам код: при желании можно изменять:

Наиболее "интересные" переменные:
ТекКолонкаЗначение — Значение реквизита (строкой). Это та строка, которая получена из ячейки excel — то есть значение колонки. Его можно преобразовывать к нужному типу программно.
ТекКолонкаЗначениеЗапись — !!! Значение реквизита ДЛЯ ЗАПИСИ. Это как раз то, что будет подставлено в колонку данных на форме 1С, то есть значение "ТекКолонкаЗначение", преобразованное в нужный тип.
ПРИМЕЧАНИЕ: если преобразование по умолчанию удалось (например найден справочник по наименованию, или перечисление по синониму), то в данной переменной уже будет преобразованное значение и его можно программно использовать.
ТекОтказ: признак отказа от вывода строки. Если какие-то числовое значение в строке не заполнено, или строковое не обнаружено — то возможно, что эта строка вообще к загрузке не нужна. К примеру ФИО сотрудника пустое, оклад не указан итд..
Прочие функции: набор вспомогательных функций для преобразования данных из строки (бывает полезно).
Фиксированные значения. Можно задать фиксированные параметры данных на специальной закладке. Дабы не искать определенные статические параметры через "НайтиПоКоду", "НайтиПоНаименованию" (это нехорошо) предусмотрена спец. закладка:

Для примера подстановка организации в каждую колонку данных выглядит так:

Печать кода для преобразования. Вверху расположена кнопка "Добавить обработку колонок" — при нажатии на нее идет печать шаблона кода, который затем можно модифицировать. Это сделано для "удобства" — чтобы не переключаться в родительское окно и не искать имена колонок,которые сами же задали для поиска данных.
Пример:

После нажатия кнопки видно, что добавился код обработки колонок в дополнение к существующему. ненужные участки обработки можно смело удалять, дописав только "специфическое" преобразование значений.
Для примера допишем код, чтобы строки файла, в которых ФИО сотрудника не заполнено, просто не выводились:

Для сохранения кода нажимаем "Принять"

Также есть 2 вспомогательные кнопки "Сохранить, Восстановить" для импорта/экспорта кода во внешний текстовый файл, но про них позже.
Чтение на форму. Для примера можно указать небольшой интервал строк, дабы сразу не читать весь листа на форму: возможно будут ошибки чтения данных, недочеты по преобразованию колонок:

Результат чтения выведен на форме. В колонках таблицы видим преобразованные данные, при желании можно их отредактировать "на лету" перед непосредственной загрузкой.
Чтение большого объема данных. В случае, если файл excel имеет большой объем — будет показан "прогресс бар" с процессом вывода на форму. При желании можно приостановить процесс, нажав Ctrl-break:


Если приостановить чтение — то будет выведена только часть данных, которые "удалось прочитать":

Получение данных из листа excel
Самый простой режим: требует указания:
Файл excel: можно выбрать через "диалог выбора файла"
Лист excel: выбирается из списка, который заполнится после выбора файла
интервал строк чтения данных.

Получение данных из нескольких листов excel
Бывают случаи, когда данные введены на нескольких листах одинакового формата. На этот случай предусмотрен вариант чтения нескольких листов. Указывается:
Файл excel: можно выбрать через "диалог выбора файла"
Список листов excel: выбирается из списка, который заполнится после выбора файла: откроется "список с галочками"
интервал строк чтения данных: как правило каждый лист содержит заголовок, а сами данные начинаются с единого номера строк .

ПРИМЕЧАНИЕ: в алгоритме "поиск данных строки" бывает необходимо прописать параметр вида "ИмяЛиста", в частности на примере чтения штатного расписания каждый лист — это организация.

Выбираем набор листов в списке, нажимаем "Получить данные".

Получение данных из макета (буфера)
В данном случае ячейки задаются на форме обработки. Этот режим бывает полезен, когда есть проблемы с COM-соединением, с программным открытием файла и прочие…
Режим чтения макета из внешнего файла
Указываем:
Имя файла загрузки: можно выбрать из диалога выбора файла с диска (формат mxl), можно
интервал строк чтения данных

После выбора файла имеем:

Далее по интервалу строк производим чтение данных в закладку "Вывод данных"
Режим чтения макета из буфера ячеек
Указываем:
Текст ячеек на закладке "макет данных" методом "копи-пасты": можно для тестирования взять из файла excel
Имя файла загрузки: можно выбрать из диалога выбора файла с диска (формат mxl), можно в табличном поле сделать "ctrl-C ctrl-V"
интервал строк чтения данных

Далее по интервалу строк производим чтение данных в закладку "Вывод данных" (аналогично подбору файла с диска). По итогу получится нечто вроде:

Дополнительные команды
Дополнительные команды: Номера колонок: чтение наименований из файла
Часто бывает, что в листе excel заголовки колонок стоят вверху листа: на 1-й строке (либо чуть ниже). Дабы облегчить жизнь разработчику решено предусмотреть режим чтения колонок по номеру строки: чтобы не вводить их в таблице.
В режиме excel: нажимаем кнопку на закладке "Номера колонок" и вводим число (номер строки шапки):

В таблицу будут считаны колонки по номеру строки:

Остается только задать нужные типы колонок:

Аналогично в режиме "По макету": в панели инструментов есть аналогичная команда:

Дополнительные команды: Номера колонок: выбор типов
По сути самое "противное" во всей работе — поиск нужных типов колонок в огромном "безликом" списке всех типов. Сделаны следующие полезные вещи:
Придуман специальный удобный диалог типов:

В диалоге есть поиск типа по подстроке:

Значение типа: редактирование. Иногда чтобы не "копаться" в диалоге подбора типов бывает удобно просто ввести тип строкой: в случае когда мы знаем точное представление типа, либо хотим "скопипастить" из типа другой колонки.
Например, задан тип "Число (15,2)" в одной из колонок: просто берем его в буфер ОС и копируем в другую колонку с таким же типом:

Автоподбор типа по тексту ввода. При желании можно не вызывать диалог типов, а просто писать название в ячейке таблицы: будет отобрано 1-е 10 вхождений строки:

На примере видно, что есть справочник "Должности": и он-то нам как раз и нужен, нет необходимости вызывать диалог по кнопке "…" справа в поле.
Дополнительные команды: Номера колонок: определение типов
Также придумана специальная команда "Поиск типов". В случае с конфигурациями типа "ЗУП, ERP" имеет место множество типов данных: например перечисления с одинаковым назначением, похожие справочники, которые меняются от версии к версии на "такие же, но более актуальные".
Удобно бывает просто поискать в метаданных реквизиты с аналогичным названием, которые указаны в наименовании колонки. Естественно, что перебирать все метаданные для больших конфигураций ERP, ЗУП, УТ… довольно долго, особенно если детализация поиска идет до каждого измерения, реквизита.
ПРИМЕР:
Мы хотим разыскать типы для всех колонок, которые остались неопределенными. Нажимаем команду "Поиск типов":

В списке остаются только те колонки, по которым тип еще не выбран, но при желании можно отметить и другие:

Далее появится еще 1 диалог, в котором будут определены всевозможные типы. Предположим, мы хотим поискать все типы конфигурации, в которых реквизит имеет представление (синоним) под названием "Вид занятости", и при этом знаем, что реквизит "примерно где-то есть в регистрах сведений", только название регистров не помним. Выставляем режим поиска

При нажатии "Начать поиск" выведется окно выбора метаданных. Отмечаем "все регистры сведений" и начинаем поиск совпадений по синониму:

Спустя 5 секунд система найдет, что реквизит "вид занятости" есть в одном из регистров базы данных, измерений, ресурсов с наименованием "График" в регистрах сведений нет:

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

Чтение данных: окончание
В целом по чтению данных все описано, других особенностей нет. Остается добавить, что прочитанные данные сохраняются в настройки "ХранилищеСистемныхНастроек" при закрытии формы обработки. Также предусмотрено сохранение в специальный каталог, но это будет отдельно описано в разделе "Сохранение / загрузка настроек".
Загрузка данных
После того, как данные прочитаны в таблицу формы можно произвести загрузку данных. Для загрузки подразумевается использование специфических обработок, которые соlержат алгоритмы, предназначенные для преобразования данных, полученных из таблицы-excel. Но в целом, если алгоритм загрузки простой и уместится в 1 процедуру — можно обходиться и без внешних обработок, а просто писать/ сохранять код в режиме предприятия.
Загрузка данных: Внешние файлы: обработки, макеты
Предусмотрены специальные внешние файлы для загрузки данных. Различаем 2 вида:
а) "Внешняя обработка" — это файл EPF обработчик загрузки таблицы данных,
б) "Макет mxl": файлы печатных макетов. Основное название: печать различных отчетов по загрузке, а также можно использовать как внешний табличный документ, с которого можно брать фиксированные данные для загрузки (бывает весьма удобно, дабы не создавать большие массивы, структуры).
Внешние обработки: располагаются на отдельной закладке, подцепляются с диска во временное хранилище обработки-загрузчика. тут все просто: можно создавать внешние обработки в конфигураторе, после чего "цеплять" их в закладку "Внешние файлы":

Для добавления нового файла обработки используем кнопку подбора файла:

Табличные макеты. Придуманы как правило для печати отчета по загруженным данным, но в целом можно использовать и для других алгоритмических целей. Располагается также на закладке "Внешние файлы", Установка файлов в закладку осуществляется по кнопке выбора: открывается диалог подбора файла — далее "вопрос техники":

Фиксированные значения: уже ранее были описаны: могут применяться как при получении, так и для загрузки данных:

Загрузка данных: Алгоритмы "Перед загрузкой", "Загрузка данных строки"

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

Как видно из описания вверху текста: код предназначен для копирования во внешнюю обработку загрузки: копируем, раскомментируем…
Рассмотрим составляющие процедуры по порядку:
Макеты из закладки "Внешние файлы"

Содержит список данных с закладки "Внешние файлы" вида "макет mxl":

Имеет тип "ТабличныйДокумент"
Значения параметров.

Здесь также все прозрачно — см закладку "Параметры".
Отчет по загрузке, шаблон для формирования печати

Из текста вверху понятно, что код будет полезен для печати отчета по загрузке. Во внешней обработке можно взять запрос и использовать его "с обработкой результата"

ВАЖНО: Есть следующий код:
ПараметрыЗагрузкиДанных.ОтчетыПоЗагрузке.Вставить("Отчет по загрузке данных", ТабДок);После загрузки данный макет будет выведен пользователю на печать. При желании можно подготовить несколько таких "макетов" и расположить их в соответствие "ОтчетыПоЗагрузке", только с другим представлением.
Прочее. Добавлена свертка колонок: в 1 очередь чтобы имена колонок не вспоминать в процессе написания обработки загрузки; признак отказа от загрузки

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

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

Зададим шаг загрузки: видеть "прогресс-бар" в процессе построчной загрузки данных, чтобы видеть "как идет процесс".

На примере шаг=10, это значит, что через каждые 10 загруженных строк будет взята паза и на клиентской форме изменен шаг прогресс-бара загрузки.
Примеры загрузки данных
Все примеры можно взять в репозитории в папочке "\ImportExcelOnec\tests". И использовать в тестовой базе данных ЗУП 3.1
Построчная загрузка данных: пример
Рассмотрим пример создания/использования кода загрузки. Для примера есть таблица с данными по сотрудникам: ФИО, должности, ставки итд… :

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

В форме редактирования текста алгоритма есть 2 "волшебные кнопки": "Добавить вызов обработки", "Добавить буфер кода", Нас на данном этапе интересует только "Добавить вызов обработки": подключаем обработку, которая впоследствии используется для построчной загрузки данных. При нажатии печатается блок кода:
Как понятно из написанного: вниманию представляются все внешние обработки, введенные на закладке "Внешние файлы". Нужно выбрать "правильную обработку". Обычно редко бывает нужно "несколько штук на 1 алгоритм": выбираем одну; лишний код убираем:

"Добавить буфер кода". Данная полезная кнопка выдает набор строк кода, который осуществляет загрузку. Нажимаем кнопку, получаем код. на данном этапе нас интересует только печатный отчет о загрузке, все остальное пока не интересно, так как загрузка производится внешней обработкой:

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

Все, обработка подключена: можно делать построчную загрузку
Построчная загрузка данных: редактирование алгоритмов
В нашем случае весь алгоритм реализован в доп.обработке, просто делаем вызов:

"Добавить буфер кода". Для построчной загрузке также формируется набор "полезных строк":

Для процедуры "ЗагрузкаДанныхПриемНаРаботу" можно скопировать список колонок, дабы не "лазать" за ними в интерфейс формы, а иметь готовый список, разбитый по числовым и групповым. В целом алгоритм практически полностью самостоятельный.
Все что делается — вначале получаем макет ""отчета по загрузке"" для последующей печати загруженных данных — далее по входным параметрам формируются справочники, документы; вызываются вспомогательные процедуры.

Макет печати: это файл mxl с закладки "Внешние файлы". По сути, простенький отчет по загрузке: можно было его использовать в самой обработке в разделе "Макеты", но для демонстрации сделан внешним:

В конечном итоге после загрузки печатаем строку данных:

Замечательно, обработка готова, после этого обновляем ее в закладке "Внешние файлы":

И проверяем написанный коды вызова обработки, все ли ОК:

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

В результате получаем следующий отчет:

Понимаем, что проблем в загрузке нет, можно грузить в боевом режиме.
Шаг загрузки. Бывает полезно видеть "прогресс-бар" в процессе построчной загрузки данных, чтобы видеть "как идет процесс". Для этого предусмотрен реквизит "Шаг загрузки":

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


Как видно, документ в случайно выбранной строке корректный, без лишних "косяков".
Общая (непострочная) загрузка данных: пример.
Бывают случаи, когда построчная загрузка не подходит. Помимо построчного импорта данных базу нужно сгруппировать строки таблицы и впоследствии разбить по "подчастям".
Примером служит момент с загрузкой начальных остатков по ЗУП:

В данном примере после поиска сотрудников нужно сгруппировать их по "Организация+месяц", затем расположить в документы по вводу начальных остатков для расчета среднего по больничным листам. Построчная загрузка здесь не подходит.
Общая (непострочная) загрузка данных: редактирование алгоритмов.
Как и в случае с построчной загрузкой, подключаем обработку из внешнего хранилища.

ВАЖНО: вначале программной обработки указано "СтандартнаяОбработка = Ложь;" — это означает, производится загрузка единым алгоритмом, построчная загрузка не используется.
Производим печать буфера кода — оно нам очень пригодится.

Берем полученный код, вставляем во внешнюю обработку, раскомментируем.
Алгоритм перебора строк

Данный код можно использовать для сбора, получения данных для последующей загрузки в базу. После преобразования кода получаем примерно следующее:

Сгруппировали исходную таблицу по "Организация+месяц", затем производим программную загрузку
Алгоритм печати отчета. Это также полезный код для печати отчета по загрузке:

Путем несложных преобразований получим отчет: берем запрос и "кидаем" его в "Конструктор запроса с обработкой результата", как написано в комментарии:

По итогу получим готовый макет отчета и набор секций, лишний код убираем:

После этого пишем код загрузки данных, в нужные места подставляем участки по формированию отчета по загрузке:

Замечательно, обработка готова, после этого обновляем ее в закладке "Внешние файлы":

И проверяем написанный код вызова обработки, все ли ОК:

Загрузка данных в базу.
Загружаем аналогично построчной загрузке: можно произвести тестовый импорт данных, можно грузить сразу (если база тестовая или уверены что все верно):

Исполняем код, по итогу получим вот такую красивую таблицу, сформированную "Конструктором запроса с обработкой результата" и программными вставками:

В целом вполне наглядный пример использования загрузки данных: все будет выложено в репозитории.
Отладка алгоритмов
Естественно, что алгоритмы сложные: не всегда получается вслепую, без ошибок создать сразу работющую загрузку данных. Предусмотрена отладка алгоритмов, как ранее было описано существует 2 варианта:
Построчная загрузка данных
Общая (непострочная) загрузка данных
Передача входных параметров для отладки функций загрузки: рассмотрим примеры.
Отладка построчной загрузки.
Процедура обработки имеет 2 входных параметра:
ДанныеСтроки, ПараметрыЗагрузкиДанных.
Для примера: "Процедура ЗагрузкаДанныхПриемНаРаботу(ДанныеСтроки, ПараметрыЗагрузкиДанных) Экспорт"
Чтобы получить значение "ДанныеСтроки" типа "Структура" предусмотрена специальная команда формы. выбираем 1 строку в таблице полученных данных и нажимаем "Отладка (строка таблицы)"

Печатается некий текст: это строковое представление строки в виде структуры:

Порядок отладки:
Берем нужную внешнюю обработку — в примере Алгоритм_ПриемНаРаботу.epf
Создаем форму для внешней обработки,
На форме создаем реквизит "ОтладкаТекст" и команду для вызова нашего метода

В форме следует ввести программный код. Шаблон можно сформировать по кнопке "Добавить код отладки" в редакторе кода алгоритмов (только потом очистить за собой):

И немного заменим участи кода:
&НаСервереПроцедура ЗагрузкаДанныхПриемНаРаботуНаСервере()
...
&НаКлиенте
Процедура ЗагрузкаДанныхПриемНаРаботу(Команда) ЗагрузкаДанныхПриемНаРаботуНаСервере();
КонецПроцедуры
В режиме предприятия в форме обработки вводим строковое представление строки в виде структуры, устанавливаем точку останова, нажимаем кнопку команды.
В реквизите "ДанныеСтроки" видим строку из таблицы значений.

Можем отлаживать алгоритм.
Отладка общей (непострочной) загрузки.
Принцип такой же: В обработке реализации алгоритма создаем форму с большим текстовым полем, в форме вводим текст "сериализованной" таблицы значений, пишем простенький программный код для отладки.
Процедура обработки имеет 3 входных параметра:
ТаблицаДанныхExcel, ПараметрыЗагрузкиДанных, СтандартнаяОбработка
Для примера "Процедура ЗагрузитьСуммыФСС(ТаблицаДанныхExcel, ПараметрыЗагрузкиДанных, СтандартнаяОбработка) Экспорт"
ВАЖНО: для отладки правильнее будет прочитать небольшое количество строк в форму обработки, нет нужды в отладку выкладывать всю огромную таблицу.
Берем нужную внешнюю обработку — в примере Алгоритм_ДляРасчетаСреднего.epf
Создаем форму для внешней обработки,
На форме создаем реквизит "ОтладкаТекст" и команду для вызова нашего метода

В форме вводим программный код:
&НаСервере Процедура ЗагрузкаДанныхПриемНаРаботуНаСервере() ПараметрыЗагрузкиДанных = Новый Структура; ПараметрыЗагрузкиДанных.Вставить("ОтчетыПоЗагрузке", Новый Соответствие); ТабДок = Новый ТабличныйДокумент; ТабДок.ТолькоПросмотр = истина; ПараметрыЗагрузкиДанных.ОтчетыПоЗагрузке.Вставить("Отчет по загрузке данных", ТабДок); РеквизитФормыВЗначение("Объект").ЗагрузитьСуммыФСС(ДеСериализоватьОбъект(ОтладкаТекст), ПараметрыЗагрузкиДанных, Ложь) КонецПроцедуры &НаКлиенте Процедура ЗагрузкаДанныхПриемНаРаботу(Команда) ЗагрузкаДанныхПриемНаРаботуНаСервере(); КонецПроцедуры &НаСервереБезКонтекста Функция ДеСериализоватьОбъект(СтрокаXML) Экспорт //Создаем объект чтения из XML ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СтрокаXML); //Читаем таблицу значений из XML ОбъектТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); Возврат ОбъектТЗ КонецФункцииВ режиме предприятия "распечатываем таблицу значений" для отладки:

В режиме предприятия в форме обработки вводим строковое представление строки в виде структуры, устанавливаем точку останова, нажимаем кнопку команды

В отладке видим таблицу значений, которая введена в форме:


Сохранение / загрузка настроек
Если кто-либо осилил прочитать до этого места: заметил, что есть множество различных настроек: это и номера+типы колонок и тексты алгоритмов, параметры…
Ключи настроек
Целесообразно предусмотреть механизм загрузки-восстановления настроек. Для набора настроек предусмотрен уникальный ключ сохранения:
Если загрузка идет из нескольких листов excel — ключом является имя файла excel

Если загрузка по макету / из буфера -то "идентификатор файлазагрузки"

Если загрузка из листа excel — ключом сохранения является "Имя файла+Лист"

Интерфейс сохранения, краткое описание
Производится сохранение:
"ХранилищеОбщихНастроек": при открытии/ закрытии формы обработки идет восстановление-сохранение. Тем самым при открытии формы все редактируемые значения будут подставлены в обработку.
Предусмотрено несколько наборов кнопок сохранения-загрузки в файлы/каталоги:

Сохраняют колонки в файл xml: формат файла "ТаблицаНомеровКолонок_" +Ключ настроек.

Сохраняют колонки в файл txt: формат файлов алгоритмов: "Алгоритм_ПоискДанныхСтроки_" +Ключ настроек, "Алгоритм_ПередЗагрузкойДанных_" +Ключ настроек.

Это просто список файлов: как в таблице, так и на диске.

Сохраняют колонки в файл xml: формат файла "ТаблицаПараметры_" +Ключ настроек.
Также есть общие команды сохранения-восстановления настроек:

ВАЖНО: данная команда сохраняет все настройки кроме внешних обработок: иначе можно "натворить плохих дел" в процессе написания обработок. Это пожалуйста делайте на закладке "Внешние файлы".
Примеры файлов настроек, рекомендации
На практике все файлы настроек, внешних обработок по проекту обычно складываются в 1 единый каталог, и в дальнейшем загружаются из него. Пример каталога с файлами:

Желательно производить версионирование папки настроек в git, применять полезные плагины для репозитория типа precommit4onec.
Хотя бы чтобы
иметь историю разработок и ничего не потерять в процессе разработки,
иметь возможность откатить настройки к стабильному варианту.

