Регистрозависимый поиск в 1С: марки Честного ЗНАКа, акцизы и серийные номера

В 1С сравнение строк по умолчанию регистронезависимое: AL123456789 и al123456789 для платформы — одно и то же. Звучит безобидно, пока не сталкиваешься с марками Честного ЗНАКа, акцизными марками и серийными номерами, где регистр различает модификации.

В ГИС МТ это два разных значения. В 1С — одно. И когда нужно быстро найти конкретную марку среди тысяч, штатный поиск выдает кучу ложных совпадений: часть марок «слипается» в одну строку, а нужную приходится искать глазами.

Почему в 1С это не настроить

Регистрозависимое сравнение в языке запросов 1С отсутствует: В, ПОДОБНО, сравнение строк — все регистронезависимо. Обойти это внутри конфигурации можно только костылями: хранить регистр в отдельном реквизите, писать обработки, дублировать строки. На практике этим никто не занимается — и ошибки остаются.

Как решает sku-search

Сервис строит собственный индекс и умеет искать по выбранным полям с учетом регистра. Настройка — две строки в config.toml:

[search]
case_sensitive_fields = ["id", "art", "barcode", "code"]
case_sensitive_extra_fields = ["brand", "supplier", "serial"]

Теперь поиск напрямую по этим полям различает регистр: AL123456789 и al123456789 — разные записи, и вы точно находите нужную марку.

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

Что это дает

  • Марки Честного ЗНАКа. Поиск марки по коду с учетом регистра — без ложных совпадений.
  • Акцизные марки. Каждая марка уникальна, регистр входит в идентификатор.
  • Серийные номера. Оборудование, где S/N чувствителен к регистру.
  • Артикулы поставщиков. Модификации, которые отличаются только регистром.

Пример

POST /find
{ "items": [ { "art": "AL123456789" } ] }

→ найден товар с артикулом AL123456789
  (запись al123456789 не попала в результат)

Тот же сервис параллельно решает вторую половину задачи: поиск по названию с опечатками и словоформами. То есть одна точка поиска для операторов — и точная для марок, и «прощающая» для наименований.

Стоит ли это отдельного сервиса

Формально регистрозависимый поиск — одна настройка. Но чтобы она работала, нужен индекс, в котором поля хранятся с учетом регистра, и быстрый точный поиск по ним. sku-search дает и то и другое в одном бинарнике, вместе с fuzzy-поиском по наименованиям — без Java, Docker и правки конфигурации.