Масштабируемый импорт Excel на БСП

04.05.26

Интеграция - Загрузка и выгрузка в Excel

Практическое руководство по использованию подсистемы БСП «Загрузка данных из файла» для сложных сценариев импорта с использованием масштабируемого шаблона.

Файлы

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

Наименование Скачано Купить файл
Подход к импорту Excel в 1С
.cfe 80,00Kb
2 2 500 руб. Купить
Подход к импорту Excel в 1С
.cfe 80,00Kb
1 6 200 руб. Купить
Подход к импорту Excel в 1С
.cfe 80,00Kb
1 4 200 руб. Купить
Диаграмма потока
.md 1,85Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Время чтения: 10 минут  |  Уровень: Начинающие разработчики  |  Платформа: 8.3.25+

 

Представьте: вы получаете ТЗ на импорт прайса из Excel. 12 колонок, 9 справочников, 10 000 строк. Архитектор говорит: «Только БСП, никаких самописных обработчиков».

Эта статья — готовый рецепт, как настроить масштабируемый импорт, который:

  • Не сломается при добавлении новой колонки
  • Понятен техподдержке без вашего участия
  • Проходит статический анализ без дублирования кода
  • Сохраняет нервы пользователя (двухэтапная проверка)
  • Чётко различает: пустое значение ≠ ошибка

 

Общая схема работы

Ниже описан полный цикл обработки данных от выбора файла до записи в регистр:

 

Этап

Действие

Результат

1. Выбор файла

Пользователь загружает Excel через интерфейс БСП

Таблица значений с исходными данными

2. Пакетный запрос

ВыполнитьЗапросСопоставления: 18 запросов к БД

Структура кэша: организации, контрагенты, виды цен, номенклатура

3. Обработка строк

Каждая строка обрабатывается в памяти по кэшу

ТаблицаСопоставления с результатами

4. Интерфейс БСП

Пользователь видит результат сопоставления и правит ошибки

Скорректированные данные

5. Финальное подтверждение

Пользователь видит точно, что попадёт в базу

Подтверждение или отмена

6. Запись

ЗагрузитьДанные в регистр + журнал регистрации

Данные в базе, аудиторский след

 

 

Три сценария сопоставления

Сценарий 1: Пустая колонка в файле (бизнес-норма)

Пример: строка файла с незаполненными полями Покупатель и Магазин:

 

Организация

Покупатель

Магазин

Вид цены

Процент

ООО "Ромашка"

(пусто)

(пусто)

Розница

15

 

 

Логика обработки:

  • ЗначениеЗаполнено(Покупатель) = Ложь
  • ПолучитьСсылкуПоРезультатуСопоставления() сразу возвращает Неопределено
  • В список неоднозначностей НЕ попадает (это не ошибка!)
  • В итоговой таблице: Покупатель = ПустаяСсылка

Это нормально, если бизнес-логика допускает отсутствие покупателя.

 

Сценарий 2: Объекта нет в базе

Допустим, контрагент с ИНН 7701234567 не существует в базе:

 

Организация

Покупатель (ИНН)

Магазин

ООО "Ромашка"

7701234567

(пусто)

 

 

Логика обработки:

  • ЛЕВОЕ СОЕДИНЕНИЕ не находит соответствия → СтрокаРезультата = Неопределено
  • СопоставленоКорректно() фиксирует отсутствие записи
  • Добавляется в СписокНеоднозначностей
  • В интерфейсе БСП пользователь видит: <не найдено: 7701234567>

Действия пользователя:

  • Создать нового контрагента
  • Исправить ИНН в файле
  • Выбрать существующего из списка

 

Сценарий 3: Неоднозначность (несколько объектов)

В базе две позиции с названием "Футболка Nike" (разные артикулы):

 

Номенклатура

Футболка Nike

 

Логика обработки:

  • Запрос с группировкой возвращает Количество = 2
  • СопоставленоКорректно() фиксирует множественное соответствие
  • Добавляется в СписокНеоднозначностей
  • Пользователь видит обе позиции и выбирает правильную

Неоднозначность — это сигнал пользователю: «Уточни выбор». Интерфейс БСП уже умеет это показывать, наша задача — корректно наполнить список.

 

Элементы объектной архитектуры в процедурном коде

Хотя 1С — процедурный язык, в решении применяются принципы ООП, которые делают код поддерживаемым:

 

Принцип

Реализация в коде

Выгода

Инкапсуляция

Структура настроек для каждой колонки

Данные и правила поиска сгруппированы, внешний код не зависит от внутренней структуры

Стратегия

НастройкаПоискаПоИмениКолонки() возвращает разные алгоритмы

Единый интерфейс обработки, разное поведение для ИНН / наименования / артикула

Шаблонный метод

ОбработатьСтрокуСопоставления() задаёт скелет алгоритма

Изменение в одном месте влияет на все колонки, соблюдение DRY

Единая ответственность

Каждая процедура решает одну задачу

Легко тестировать, искать ошибки, модифицировать без побочных эффектов

 

 

Пример инкапсуляции — настройка поиска для колонки:

// Настройка поиска для колонки
Настройка = Новый Структура;
Настройка.Вставить("ТекстЗапроса", ТекстЗапроса);
Настройка.Вставить("КлючПоиска", КлючПоиска);
Настройка.Вставить("ИмяКолонкиМакета", ИмяКолонкиМакета);

 

Пример основной процедуры сопоставления:

//универсальный шаблон
//цель, чтобы при других доработках его не нужно было менять
//далее ее можно сделать общей для всех загрузок чуть чуть доработав, но пока такой цели не было.
Процедура СопоставитьЗагружаемыеДанные(
    АдресЗагружаемыхДанных,
    АдресТаблицыСопоставления,
    СписокНеоднозначностей,
    ПолноеИмяТабличнойЧасти,
    ДополнительныеПараметры) Экспорт

    ТаблицаСопоставления = ПолучитьИзВременногоХранилища(
        АдресТаблицыСопоставления);
    ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(
        АдресЗагружаемыхДанных);

    Результаты = ВыполнитьЗапросСопоставления(ЗагружаемыеДанные);

    Для Каждого СтрокаДанных Из ЗагружаемыеДанные Цикл
        НоваяСтрока = ТаблицаСопоставления.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных);
        ОбработатьСтрокуСопоставления(
            НоваяСтрока,
            СтрокаДанных,
            Результаты,
            СписокНеоднозначностей);
    КонецЦикла;

    ПоместитьВоВременноеХранилище(
        ТаблицаСопоставления, АдресТаблицыСопоставления);

КонецПроцедуры

 

Не нужно ждать, когда в 1С появится полноценная ООП-модель. Принципы можно применять уже сейчас — код станет чище и гибче.

 

Интерфейс пользователя: двухэтапная проверка

Этап 1: Предварительное сопоставление

Пользователь видит «сырые» данные из файла и результаты автоматического сопоставления. Ошибки выделены цветом, неоднозначности помечены специальным значком.

Этап 2: Финальное подтверждение

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

Зачем это нужно:

  • Снижает когнитивную нагрузку: сначала «nайти ошибки», потом «подтвердить результат»
  • Даёт возможность исправить данные до записи в регистр
  • Формирует аудиторский след: что было в файле → что попало в базу

Двухэтапная проверка — это не «лишний клик», а страховка от дорогостоящих ошибок в данных.

 

Чек-лист внедрения

Шаг 1: Скачайте шаблон в статье

Шаг 2: Запустите тестовую загрузку в типовой демо-базе

Шаг 3: Как адаптировать под свой объект — 4 точки изменений

 

Что менять

Где в коде

Список колонок файла и их типы

ОписаниеКолонокМакетаДляЗагрузки в модуле формы

Сущности для сопоставления

ТекстЗапросаСопоставленияДанных + ВыполнитьЗапросСопоставления

Настройки поиска по колонкам

ИнициализироватьСписокКолонок + НастройкаПоискаПоИмениКолонки

Обязательные поля при записи

ОбязательныеЗначенияЗаполнены

 

Всё остальное — универсальный каркас, который не трогают.

Шаг 4: Протестируйте граничные случаи

Создайте тестовый файл с 5 строками:

  • [ ] Все колонки заполнены, все объекты есть в базе — ожидаем успех
  • [ ] Одна колонка пустая — ожидаем: не ошибка
  • [ ] Объект не найден в базе — ожидаем: попадание в неоднозначности
  • [ ] Неоднозначность: несколько объектов с одинаковым названием — ожидаем: выбор пользователем
  • [ ] Обязательное поле пустое — ожидаем: ошибка при финальной загрузке

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

  • [ ] Создайте инструкцию: как скачать шаблон, какие колонки обязательные
  • [ ] Добавьте скриншоты интерфейса с пояснениями
  • [ ] Укажите контакты техподдержки для вопросов по неоднозначностям

Шаг 6: Запросите код-ревью

  • [ ] Покажите обработку коллеге: понятна ли логика без ваших комментариев?
  • [ ] Прогоните через встроенный анализатор: нет ли дублирования?
  • [ ] Убедитесь, что все запросы параметризованы (защита от инъекций)

Готово.

У вас работает масштабируемый импорт на БСП, который:

  • Принимает архитектура
  • Понимает техподдержка
  • Не ломается при изменениях
  • Бережёт нервы пользователей

Перед применением ознакомьтесь с документацией на ИТС, а так же со статьей.

Спасибо за внимание!

P.S

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

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.26.93

Вступайте в нашу телеграмм-группу Инфостарт

excel интеграция загрузка