Обработка создает/обновляет сегмент, заполняя его отбор партнерами, ИНН которых соответствует списку ИНН, загруженному из Excel-файла.
В самой обработке нет ничего сложного или сверхъестественного — реализована на основе методов БСП. Может использоваться, как подключаемая обработка в любых конфигурациях на основе БСП.
В рамках этой статьи хочу рассказать о выбранном подходе, его преимуществах, а также поделиться практическим опытом — в частности, обсудить "подводные камни", с которыми я столкнулся в процессе эксплуатации. Эти нюансы не всегда очевидны на этапе разработки, но могут существенно повлиять на стабильность и корректность обработки данных в production-среде.
Данный подход загрузки позволяет считывать данные напрямую из файла без необходимости предварительного описания структуры колонок (имён, типов данных и т.д.).
Ключевые преимущества метода:
- Универсальность — решение применимо к любому Excel-файлу, независимо от количества и наименования столбцов.
- Гибкость — отсутствие жёсткой привязки к структуре файла позволяет использовать один и тот же механизм для различных типов данных.
- Автоматическое определение структуры — данные считываются динамически, что упрощает интеграцию с таблицами значений.
- Снижение трудозатрат — не требуется ручная настройка маппинга полей при изменении структуры файла.
Метод может быть использован для:
- Загрузки справочников, заказов, отчётности и других типов данных от партнёров.
- Интеграции с внешними системами, где формат Excel является основным обменным форматом.
- Быстрого прототипирования и тестирования процессов загрузки данных, в служебных одноразовых обработках тех. поддержки.
// Параметры:
// Адрес - Строка - Адрес
// ПутьКФайлу - Строка
Функция ЗагрузитьДанныеИзExcel(Адрес, ПутьКФайлу) Экспорт
Расширение = ПолучитьРасширениеФайла(ПутьКФайлу);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
СпособЧтения = СпособЧтенияЗначенийТабличногоДокумента.Значение;
ТабличныйДокумент = Новый ТабличныйДокумент();
ТабличныйДокумент.Прочитать(ИмяВременногоФайла, СпособЧтения);
УдалитьФайлы(ИмяВременногоФайла);
ОбластьТаблицы = ТабличныйДокумент.Область();
ПостроительЗапроса = Новый ПостроительЗапроса();
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы);
ПостроительЗапроса.ЗаполнитьНастройки();
ПостроительЗапроса.Выполнить();
Возврат ПостроительЗапроса.Результат.Выгрузить();
КонецФункции
После загрузки данных в таблицу значений рекомендуется выделить отдельный этап ETL-преобразования (Extract-Transform-Load) для корректной обработки и приведения данных к требуемому формату.
Обоснование: Данные в Excel-файлах зачастую хранятся в форматах, не соответствующих бизнес-логике системы. Например:
- ИНН, номера документов, коды — могут быть указаны как числовые значения, что приводит к потере ведущих нулей или некорректному парсингу.
- Даты — могут интерпретироваться по-разному в зависимости от региональных настроек Excel.
- Пустые или неоднозначные значения — требуют нормализации (например, замена
NULL
, пробелов, строк вроде "нет" на стандартные значения).
Рекомендуемый подход при использовании вышеописанного метода:
- Загрузка "как есть" — на первом этапе данные извлекаются в таблицу значений без валидации и с минимальной обработкой (что обеспечивает универсальность).
- ETL-преобразование отдельным методом — на втором этапе выполняется:
- Приведение типов данных (например, преобразование чисел в строки для ИНН, счетов, телефонов).
- Очистка данных (удаление лишних пробелов, замена нестандартных значений).
- Валидация форматов (проверка длины ИНН, формата даты и т.д.).
- Логирование ошибок и предупреждений.
- Загрузка в целевую структуру — только после успешного преобразования данные передаются в справочники, документы или регистры.
Преимущества такого разделения:
- Чёткое разделение ответственности: загрузка → преобразование → сохранение.
- Повторное использование ETL-логики для разных источников.
- Упрощение отладки и тестирования.
- Возможность ручной корректировки таблицы значений перед финальной обработкой (например, через форму).
Таким образом, на основе практического опыта применения данного метода загрузки в различных задачах, сформирован единый стандарт: выделение отдельного метода ETL-преобразования данных на этапе после загрузки из Excel. Такой подход позволяет отделить процесс чтения данных от их обработки и нормализации, что существенно повышает надёжность, гибкость и поддерживаемость решений. Особенно эффективен данный подход при работе с разнородными и неструктурированными данными от различных внешних партнёров, где форматы и качество данных могут значительно варьироваться. Внедрение стандарта ETL-преобразования способствует унификации обработки, упрощает сопровождение и снижает количество ошибок при интеграции.
Примеры преобразований:
Строка.ИНН = СтрЗаменить(Строка.ИНН, " ", "");
Строка.ИНН = СтрЗаменить(Строка.ИНН, Символы.НПП, "");
P.S
Предусмотрено несколько вариантов доната с разными ценовыми опциями, чтобы каждый мог поддержать автора в соответствии со своими возможностями и уровнем вовлечённости.
Спасибо за внимание.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.24.43
Вступайте в нашу телеграмм-группу Инфостарт