Как я научил 1С автоматически сопоставлять колонки Excel

09.07.26

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

Три уровня автоматического сопоставления колонок Excel с реквизитами 1С — точное совпадение, словарь синонимов, алгоритм Левенштейна. Как это работает изнутри и где ошибается.

Как я научил 1С автоматически сопоставлять колонки Excel

Открываю очередной прайс от нового поставщика. Колонки называются «SKU товара», «Название позиции», «Ед. изм.», «Цена (с НДС)». В 1С реквизиты справочника номенклатуры — «Артикул», «Наименование», «ЕдиницаИзмерения», «Цена». Задача выглядит простой: понять, что «SKU товара» это «Артикул», «Ед. изм.» — это «ЕдиницаИзмерения», и так далее.

Когда делаешь это руками — очевидно за тридцать секунд. Когда пытаешься заставить программу делать это автоматически — начинаются вопросы, и первый из них звучит так: а откуда программа вообще должна знать, что «SKU товара» и «Артикул» — одно и то же?


Почему нельзя просто сравнить строки

Первое, что приходит в голову — сравнить название колонки в файле с названием реквизита в 1С. Совпадают — сопоставляем. Не совпадают — пропускаем. Реализуется за двадцать строк кода.

Я попробовал. Сработало примерно в трети случаев.

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

«Артикул» приходит как SKU, Article, Арт., Код товара, Артикул поставщика, Артикул производителя. «Наименование» — как Название, Название товара, Товар, Name, Наименование позиции. «ЕдиницаИзмерения» — как Ед., Ед. изм., Единица, Unit. Это не экзотика, это обычная рабочая жизнь. Каждый называет колонки как хочет, и формально все правы.

Попалась одна выгрузка из старой самописной системы, где заголовки выглядели как «Колонка 1», «Колонка 2», «Колонка 3» — и так и оставались годами, потому что никто не чинит то, что формально работает.

Точное совпадение в таких условиях работает только тогда, когда файл сформировала та же система, которая потом его читает. Во всех остальных случаях — это лотерея.


Сначала был словарь

Следующая идея выглядела практичнее. Раз уж я выписал все варианты названий из реальных прайсов — можно просто зафиксировать их в коде. Если люди используют ограниченный набор слов, словарь закроет большинство случаев.

Так и сделал. Для каждого реквизита — список того, как он ещё может называться. Не придуманный, а собранный из реальных файлов:

"Артикул":          ["sku", "артикул поставщика", "код товара", "article", "арт", "art"]
"Наименование":     ["название", "название товара", "наименование позиции", "name", "товар"]
"ЕдиницаИзмерения": ["ед", "ед.", "ед. изм.", "единица", "unit"]

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

Логика простая: берём заголовок из файла, приводим к нижнему регистру, убираем лишние пробелы — ищем в словаре. Нашли — сопоставляем, статус «Авто». Процент автоматически угаданных колонок вырос раза в два по сравнению с точным совпадением.

Но словарь живёт своей жизнью, и жизнь эта не очень приятная. Приходит новый поставщик, у него «Артикул производителя» — не в словаре. Другой пишет «Artikul» через латиницу — не в словаре. Третий допускает опечатку «Артикл» — тоже мимо. Добавляешь один вариант, через неделю находишь три новых.

Главная проблема словаря даже не в этом. Его кто-то должен поддерживать. Пока это я — значит, каждый новый вариант названия колонки, который не сопоставился, это задача для меня лично. Масштабироваться так невозможно.


Добавил нечёткое сравнение

Стал смотреть в сторону алгоритмов сравнения строк. Не потому что хотелось усложнить, а потому что словарь явно не закроет все варианты никогда — их просто слишком много.

Остановился на расстоянии Левенштейна. Объяснять его проще всего через редактуру текста. Представьте, что у вас есть слово, и вы хотите получить из него другое слово. Каждое изменение — это операция: вставить букву, удалить букву, заменить одну букву на другую. Расстояние Левенштейна — это минимальное количество таких операций.

«Кот» → «Код»: одна операция, заменить «т» на «д». Расстояние = 1, строки очень похожи.

Пример из нашей задачи: «Наименование» → «Наименование товара». Нужно вставить 8 символов — пробел и слово «товара». Расстояние = 8. Само по себе число ничего не говорит, поэтому считаем относительное сходство: 1 − 8/21 ≈ 0,62, то есть 62%. Достаточно, чтобы предложить пользователю — но уже не с полной уверенностью, а со статусом «Предложено». Пусть глянет и подтвердит.

Опечатки перестали быть проблемой. «Артикл» вместо «Артикул» — одна пропущенная буква, алгоритм справляется. Вариации написания тоже перестали ломать загрузку.


Где алгоритм ошибается

Казалось бы — всё, задача решена. Но алгоритм Левенштейна не понимает смысл, он работает с буквами. И это периодически выходит боком.

Самый запомнившийся случай — «ШтрихКод» и реквизит «Код». Система упорно предлагала их сопоставить. С точки зрения алгоритма логика железная: «Код» полностью входит в «ШтрихКод» как подстрока, расстояние небольшое. Для человека это очевидно разные вещи, для алгоритма — очень похожие строки.

Та же история с «Ценой» и «Ценой закупки», с «Количеством» и «КоличествомМест».

Вылечил штрафом за разницу в длине: если строки отличаются по длине в два раза и больше — итоговая уверенность снижается, даже если сами символы похожи. «Код» (3 символа) и «ШтрихКод» (9 символов) — разница в три раза, значит скидываем 20-30% от рассчитанного сходства. Не самое изящное решение, но ложных срабатываний стало заметно меньше.

Есть ещё одно ограничение, которое не лечится никак: алгоритм не знает английский. «SKU» и «Артикул» — ноль общих символов, расстояние максимальное. Здесь спасает только словарь. Поэтому словарь и нечёткое сравнение дополняют друг друга, а не заменяют.


Как три уровня работают вместе

Итоговый порядок для каждой колонки из файла:

  1. Точное совпадение (без учёта регистра) — статус «Авто», дальше не смотрим
  2. Поиск в словаре синонимов — статус «Авто»
  3. Нечёткое сравнение по всем реквизитам объекта-приёмника — если есть достаточно похожий вариант, статус «Предложено»; если нет — «НеНайдено»

В таблице сопоставления это видно цветом: зелёный для «Авто», жёлтый для «Предложено», розовый для «НеНайдено». Пользователь сразу понимает, где алгоритм уверен, а где лучше проверить.


Честно про ограничения

Процент автоматически сопоставленных колонок сильно зависит от файла. Хорошо структурированный прайс от аккуратного поставщика — 80-90% без участия пользователя. Выгрузка из старой системы с непонятными заголовками — 30-40%, и это нормально, потому что там просто нечего угадывать.

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

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

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


Всё это реализовано в обработке на Infostart: //infostart.ru/marketplace/2715613/. Если грузите Excel в 1С регулярно — посмотрите, возможно пригодится.

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

загрузка excel 1с импорт данных 1с автосопоставление колонок алгоритм Левенштейна универсальная обработка excel csv 1с сопоставление реквизитов

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

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

См. также

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, ЛаМода, Мегамаркет, Aliexpress, Детский мир, Магнит Маркет (быв.МагнитЭкспресс), Лемана про, ЭНФАНТА (Акушерство), Летуаль, Твой дом, Золотое Яблоко, Каспи, Авито, Аптеки+ в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:ERP.

5490 руб.

12.08.2021    46732    608    71    

222

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

12444 руб.

29.10.2014    234012    757    540    

502

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 14.05.2026, версия 9.3.1 - 10.7.2)

20740 руб.

20.11.2015    176547    427    397    

544
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SlavaKron 09.07.26 09:31 Сейчас в теме
Распознать номера строк заголовков и начала данных сложнее, чем сопоставить колонки?
2. Техподдержка 09.07.26 09:45
Здравствуйте!

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

А вот распознать строку заголовков/начало данных — это поиск структурной аномалии в файле, у которого нет заранее известного правильного ответа. Нужна эвристика вроде «первая строка, где большинство ячеек — уникальный непустой текст без чисел/дат, а строки выше — единичные значения», и она ловит типичные случаи, но легче ошибается на нетипичных файлах.

Главное — асимметрия рисков. Если колонка сопоставилась неверно — это сразу видно в таблице сопоставления, поправить одним кликом до загрузки. Если неверно определена строка данных — результат может выглядеть правдоподобно, но незаметно содержать не то — и это гораздо легче проглядеть. Поэтому пока сделал эти параметры ручными, а не автоматическими — чтобы не рисковать тишиной неправильной загрузки.
3. DmitryKlimushkin 09.07.26 09:54 Сейчас в теме
Напоминает рассуждения двух полинезийцев - куда лучше подвесить кусок консервной банки, найденной после туристов, к губе или к уху.
Коллеги, на ступеньку выше поднимитесь и поглядите сверху - что сейчас обсуждаете и чем пытаетесь похвалиться? В Голливуде есть куча фильмов на тему постапокалипсиса. Вновь возродившаяся цивилизация разбирает какие-то найденные от предков артефакты и пытается понять - чем и как думали люди, сами себя приведшие к катастрофе. Вполне возможен такой сюжет, когда будут найдены письмена, их долго будут расшифровывать, напишут кучу диссертаций, а потом выяснится, что это была стена туалета в баре с надписями весёлых посетителей....
Вот это бред с "псевдо-эвристическими анализаторами" и прочими "угадаймелодиями" когда надоест?
Сегодняшняя новость про обмены ФНС и маркетплейсов лишний раз убеждает, что компетенции и квалификации в части электронного документооборота потеряли напрочь. Вместо пробуем гордиться тем, "как мы научили компьютер читать загадочные письмена племени навахо....."
Расскажи, как ты создал ПРОТОКОЛ обмена, задокументировал его - вот это будет красивым примером, достойным подражания. А очередное "чтиво из клеточного документа" это 51-ый оттенок... убогости. Ты уж, извини....
4. ixijixi 2156 09.07.26 10:32 Сейчас в теме
(3) Дмитрий, человек рассказывает, как он автоматизирует хаос, а Вы говорите, что это плохо, потому что хаос - это отстой, его быть не должно.
6. DmitryKlimushkin 09.07.26 11:13 Сейчас в теме
(4) Именно так. Чисто по-мужски, иногда проходишь мимо какого-то строения, механизма и прочих элементов "мужского заведования" и тошно становится, от "прикрутки проволочкой", "затыкания тряпочкой", "подпирания камушком" и прочих вариантов сиюминутного лениво-туповатого решения проблемы. В разработке примерно так же. Есть решение проблемы, серьёзное, вдумчивое и капитальное. А есть некая "затычка", которую можно раскрасить, придать забавную форму (как ржавчину на кузове авто декорировали нарядной наклейкой!) и долго обсуждать цвета и формы этой времянки.
Мне на "горячий камелёк" попал этот пост. Немного ранее в журнале опубликовали статью о постановлении правительства по обмену маркетплейсов и ФНС. Сослались, что на сайте ФНС выложены "Правила обмена". Конечно, полез почитать новые "Правила"... Сам как думаешь, я что-то нашёл? Хрена с два! У нас уже на уровне правительственных органов утрачены компетенции по налаживанию стандартных протокольных обменов с их обязательной публикацией непосредственно в нормативном документе. А что это значит для нас, для разработчиков? Что мы опять на сайтах и форумах будем искать "образцы" "структуры XML", чтобы в очередной раз "срочно" затыкать какую-то "интеграцию", сочиняя очередной "эвристический анализатор".
Грустно...
9. Техподдержка 09.07.26 12:30
(6) Дмитрий, здесь я с вами, скорее, соглашусь. Хорошие стандарты и открытые, документированные протоколы всегда лучше любых эвристик и разборов “по образцам”. Просто моя статья была не о проектировании обменов, а о том, как сократить ручную работу там, где эти стандарты пока отсутствуют. Если когда-нибудь необходимость в таких инструментах исчезнет благодаря нормальным протоколам, я буду только рад.
5. Техподдержка 09.07.26 10:38
(3) Дмитрий, в идеальном мире я с вами полностью согласен. Если бы все поставщики, маркетплейсы и учетные системы обменивались данными через единый открытый протокол, подобные загрузчики были бы практически не нужны.

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

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

Если когда-нибудь все участники рынка перейдут на единые стандарты обмена, я буду только рад — такие инструменты действительно станут менее востребованными. Но сегодня большинство пользователей сталкивается совсем с другой реальностью.
7. DmitryKlimushkin 09.07.26 11:16 Сейчас в теме
(5) Спасибо, что не обиделся, а воспринял конструктивно! Плюс тебе в карму и самооценку!
Но пока мы, сами, не начнём формировать реальность, мы так и будем разгребать бардаки тупых и ленивых.
Я вот продолжаю ждать "чуда" от маркетплейсов. Так-то их уже в единый реестр соберут к осени. Мож, создадут свою корпоративную культуру, разработают единые стандарты и протоколы. Хочется верить в чудесную сказку....
8. Техподдержка 09.07.26 12:26
(7) Буду только рад оказаться без работы из-за хороших стандартов обмена. 🙂 Пока же Excel от разных поставщиков остается частью повседневной жизни бухгалтеров, поэтому приходится автоматизировать именно эту реальность.
10. DmitryKlimushkin 09.07.26 13:40 Сейчас в теме
(8) Вот это и есть - грусть. Практически не обсуждают тот же XML, а ведь уже в новой платформе добавляется даже новый формат (разновидность) XDTO (нечто среднее между XML и JSON, только в двоичном формате). Я-то ладно, мне на пенсию скоро можно свинтить, но молодые коллеги, вынужденные барахтаться в CSV, они какую ценность будут иметь на рынке труда с такими архаичными методологиями? Уже на моей активной трудовой деятельности CSV стал рудиментом архаичной эпохи первых ИксТи-шек. Какая тварь втянула эту древность в новое тысячелетие - найти бы и закопать!
11. Техподдержка 09.07.26 14:02
(10) Дмитрий, здесь согласен: знание XML, XDTO, форматов обмена и интеграций для разработчика гораздо ценнее, чем умение работать только с CSV. Но, к сожалению, одно не отменяет другого. Пока поставщики и контрагенты продолжают обмениваться Excel и CSV, эти форматы тоже приходится поддерживать. Хотелось бы, чтобы со временем их стало меньше, а не больше.
12. DmitryKlimushkin 09.07.26 14:13 Сейчас в теме
(11) Загляни на сайт ФТС (таможня РФ). Какие там обалденные схемы электронных документов - мечта любого разраба! А знаешь почему? Потому, что таможня работает в обе стороны. И "ТА" сторона просто не оставляет шансов на бардак и "заплатно-костыльные" решения. Буквально "за уши" вытягивают отдельные госорганы на приемлемый современный уровень. Зато внутри страны некому планку задать. Банковское сообщество, блин... Позорище голимое - до сих пор выписка банка служит мне лучшим напоминанием моей программистской молодости, нифига не поменялось! При том, что в каждом банке (группе банков) своя "феодальная схема"...
Сейчас маркетплейсы... Какая-то "девочка" однажды накропала табличку Эксель для первого пользователя, её слямзили и размножили. Так родился убогий "стандарт....."
13. Техподдержка 09.07.26 14:51
(12) Дмитрий, думаю, здесь мы уже пришли к общему знаменателю: хорошие стандарты обмена — это цель, а автоматизация работы с текущей реальностью — это необходимость. Будем надеяться, что первых станет больше, а вторых со временем меньше 🙂
Для отправки сообщения требуется регистрация/авторизация