Шаблоны сопоставления: как не настраивать одно и то же каждый понедельник

23.07.26

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

Каждый понедельник бухгалтер заново тыкает одни и те же колонки в одни и те же реквизиты. Разбираюсь, как сохранить настройку сопоставления в шаблон, чем это чревато (регистры сведений — отдельная история) и как отдать готовую настройку коллеге.

Шаблоны сопоставления: как не настраивать одно и то же каждый понедельник

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

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

 

Почему это не просто «было бы удобно»

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

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

Это не мелочь уровня UX, а архитектурное ограничение. Пять минут, помноженные на пятьдесят загрузок в год, на несколько поставщиков — это уже не пять минут, а несколько рабочих дней, которые тратятся на клики мышкой в одном и том же порядке. Бухгалтеры это чувствуют острее, чем кто-либо: любая рутинная операция, которую можно было автоматизировать, но не автоматизировали, воспринимается как личное неуважение к их времени.

 

Что внутри шаблона

Формат — обычный JSON. Ничего экзотического: структура с массивом пар «колонка файла → реквизит приёмника», плюс путь к объекту-приёмнику, чтобы шаблон сразу подставлял нужный справочник или документ.

Файл выглядит примерно так:

{
  "ПутьПриемника": "Справочник.Номенклатура",
  "Сопоставления": [
    { "Колонка": "Артикул поставщика", "Реквизит": "Артикул" },
    { "Колонка": "Наименование товара", "Реквизит": "Наименование" },
    { "Колонка": "Ед. изм.", "Реквизит": "ЕдиницаИзмерения" },
    { "Колонка": "Страна", "Реквизит": "СтранаПроисхождения" }
  ]
}

Собирается и читается штатными средствами платформы — ЗаписьJSON/ЧтениеJSON, без ручной конкатенации строк. Это принципиальный момент. Как только начинаешь собирать JSON вручную через сложение строк с кавычками, рано или поздно ловишь наименование товара с кавычкой внутри — и весь файл ломается на ровном месте. Встроенный механизм экранирует спецсимволы сам.

 

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

Здесь стоит быть честным с самого начала, а не в конце статьи. Механизм сопоставления работает только с обычными реквизитами объекта — теми, что возвращает ПолучитьРеквизитыОбъекта. Артикул, Наименование, Единица измерения — это реквизиты справочника, и с ними всё работает без сюрпризов.

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

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

 

Сценарий использования

На практике всё сводится к трём шагам. Первый раз — как обычно: загрузили файл, прогнали автосопоставление, руками поправили то, что программа не угадала (и цену, если она в регистре, — отдельно). Дальше — кнопка «Сохранить шаблон», вводим название («Прайс — Ромашка ООО»), файл падает на диск.

В следующий понедельник — загрузили новый файл от того же поставщика, нажали «Загрузить шаблон», выбрали тот же JSON-файл. Сопоставление применяется мгновенно: программа сверяет заголовки колонок текущего файла с тем, что записано в шаблоне, и расставляет реквизиты без всякого автосопоставления заново. Пять минут ручной работы превращаются в один клик — и то самое понедельничное раздражение просто не успевает возникнуть.

 

Грабли: если поставщик переименовал колонку

Шаблон сопоставляет колонки по заголовку, и сравнение идёт без учёта регистра — «Артикул» и «АРТИКУЛ» для него одно и то же. Это спасает от мелких расхождений вроде разного регистра в экспорте у самого поставщика.

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

Это осознанное поведение, не баг. Можно было добавить нечёткое сравнение внутрь применения шаблона, но это вернуло бы всю непредсказуемость автосопоставления, только спрятанную глубже. Шаблон ценен именно тем, что детерминирован: применил — получил ровно то, что было в прошлый раз, без сюрпризов. Если заголовок изменился — правильный путь: донастроить сопоставление руками один раз и пересохранить шаблон. Две минуты работы, которые случаются редко.

 

Ещё одна тонкость: путь к объекту-приёмнику не перезатирается

Шаблон хранит не только сопоставление колонок, но и путь к объекту-приёмнику — скажем, Справочник.Номенклатура. При загрузке шаблона путь подставляется автоматически, но только если поле было пустым. Если пользователь уже что-то выбрал вручную перед загрузкой шаблона — значит, у него была на то причина, и программа не станет тихо менять объект у него из-под рук.

 

Идея переиспользования между проектами

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

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

 

Что дальше

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

Если кому-то интересно посмотреть, как всё это реализовано целиком — обработка «Универсальный загрузчик Excel/CSV в 1С» есть на Инфостарт Маркетплейсе, там же можно попробовать бесплатную демо-версию перед покупкой.

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

шаблоны сопоставления загрузка Excel в 1С загрузка CSV в 1С сопоставление колонок автосопоставление реквизитов импорт данных 1С JSON шаблон регистр сведений обработка загрузки данных универсальный загрузчик

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

  • 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    47277    614    71    

223

Загрузка и выгрузка в 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    234851    757    540    

502

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

Загрузка данных отчета о реализации товаров из сервиса Lamoda «Ламода» для конфигурации: 1С:Бухгалтерия предприятия, редакция 3.0; 1C:Управление торговлей, редакция 11 и 1C:Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

6000 руб.

01.03.2021    12879    76    0    

33

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

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» из отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

6000 руб.

09.12.2020    30618    303    1    

150
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Serg O. 337 23.07.26 09:33 Сейчас в теме
в стандартной обработке "Загрузка из табличного документа" от самой фирмы 1С
или её аналогов с Инфостарта разве нет стандартного сохранения параметров ?

Есть же сохранение параметров - сохранить / загрузить именно настройки на диск ...
см. пример в прикреплённом файле

"стандартный формат" - файл с расширением *.mxlz (MOXCEL)
так же имеет JSON-подобную структуру

MOXCEL {8,1,12,
{"#","",1,1,"#","Язык по умолчанию","Язык по умолчанию",0},
{128,72},
{1,1,
{4,0,
{0},1,1,0,f527dc88-1d39-40b3-bcbb-d98b690ead68,0},0},0,
{0,0},
{0,0},
...
{"#","Первая строка данных табличного документа:"}
},0},1,
Прикрепленные файлы:
V.Nikonov; Yashazz; +2 Ответить
3. Техподдержка 23.07.26 09:59
(1) Спасибо за комментарий.

Да, знаю про механизм сохранения настроек в *.mxlz — в типовых обработках он действительно используется и для сохранения состояния вполне подходит.

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

Но мысль интересная. Поддержка импорта/экспорта *.mxlz для совместимости с типовыми обработками могла бы быть полезной. Спасибо за идею.
2. Yashazz 4932 23.07.26 09:41 Сейчас в теме
А что, о написании такой очевидно банальной элементарщины, как сохранение настроек стыковки колонок во всяких загрузчиках, уже надо такие умные публикации делать?)
Я, пардон, такое в двухтыщном году на клюшках делал, ишшо в своём строковом самопальном формате...
4. Техподдержка 23.07.26 10:02
(2) Конечно, сама идея не новая. Сохранять настройки загрузки люди начали задолго до моей обработки.

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

Если статья кому-то напомнила о давно известном приёме — тоже неплохо. А если кто-то раньше этим не пользовался и возьмёт идею на вооружение — значит, публикация была не зря.
5. V.Nikonov 130 23.07.26 10:08 Сейчас в теме
Сотрудник "из соседнего отдела" наверняка работает в той же ИБ? Может лучше сохранять настройки в Базе? Ещё удобнее привязать к Контрагенту (есть возможность хранить в КонтрагентыПрисоединенныеФайлы)?
6. Техподдержка 23.07.26 10:21
(5) Спасибо, интересная идея.

Да, хранение шаблонов в информационной базе во многих случаях действительно удобнее, чем отдельные JSON-файлы. Особенно если с одной и той же базой работают несколько пользователей.

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

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