Всех приветствую! В целях страховки от дублирования элементов справочника со стороны пользователей задался целью сделать проверку на уникальность поля Артикул. Написал функцию для справочника Номенклатура:

Функция ПохожийАртикул()
 ВыборкаКода = СоздатьОбъект("Справочник.Номенклатура");
 ВыборкаКода.ВыбратьЭлементы();

 Пока ВыборкаКода.ПолучитьЭлемент() = 1 Цикл
  Если ВыборкаКода.Артикул <> Артикул Тогда
   Продолжить;
  КонецЕсли;
  Если Выбран() = 0 Тогда
   Возврат ВыборкаКода.ТекущийЭлемент();
  Иначе
   Если ТекущийЭлемент() <> ВыборкаКода.ТекущийЭлемент() Тогда
    Возврат ВыборкаКода.ТекущийЭлемент();
   КонецЕсли;
  КонецЕсли;
 КонецЦикла;
 Возврат "";
КонецФункции // ПохожийАртикул()

А в процедуру ПриЗаписи добавил следующий код:
// Проверим, есть ли такой артикул в остальной номенклатуре
  Дубль = ПохожийАртикул();
  Если ПустоеЗначение(Дубль) = 0 Тогда
   Предупреждение("В справочнике номенклатуры" + "
   |" + Дубль + "
   |" + "уже есть такой артикул:" + "
   |" + Артикул + " " + ?(Дубль.ПометкаУдаления() = 1," (помечена на удаление).","."), 60);
   Активизировать("Артикул");
   СтатусВозврата(1);
  КонецЕсли;

Есть одна проблема: Если записать значение в виде, например, GIP06045 то если есть уже элемент с таким значением поля - появится сообщение, что уже есть номенклатура с таким артикулом, и уже ясно, что ошибся.
А если записать новый элемент номенклатуры, но в виде GIP.06045 или GIP 06045 или GIP-060.45, т.е с любым разделителем, сообщения нет, т.к значения элемента справочника будут разные. А по-сути - это один и тот-же товар: Лампа 12V 10W Ganz. На сайтах интернет-магазинов все эти разделители автоматом убираются при вводе значения в окне поиска товара. Прошу совета как правильно в процедуре сделать проверку.
---
При выгрузке на сайт уже там автоматом все разделители убираются. Бери пример с сайта.
П.С. да и мне уже под 50 А мне за, и что?
---
убирать разделители из введенного значения перед проверкой/записью в ИБ?
---
Это самый простой способ, но хорош когда один чел. ведет базу, там все четко и отработано до мелочей. А когда куча пользователей - потом кто-то ответственный все косяки править должен
---
так исправляйте косяки автоматически, вам же никто/ничто не мешает хранить значения с разделителем и без и использовать нужное в разных ситуациях
---
Даже более подходит
---
т.к значения элемента справочника будут разные. А по-сути - это один и тот-же товар А система об этом в курсе? Что ты там сам себе в уме держишь...
---
Конечно же нет, как она будет в курсе? При выгрузке на сайт уже там автоматом все разделители убираются. Вот и ищу как правильно сделать. Для себя же стараюсь. Многие задумки за 22 года постепенно воплотились в жизнь.
П.С. да и мне уже под 50
---
При выгрузке на сайт уже там автоматом все разделители убираются. Бери пример с сайта.
П.С. да и мне уже под 50 А мне за, и что?
---
Подсказал мне человек, пока сделали проверку на точку, тире, пробел. Останется на заглавные/строчные буквы
---
Ели сопоставление идет на совпадение\несовпадение строк - то да, надо учитывать регистр.
Если используется ВыбратьЭлементыПоРеквизиту или НайтиПоРеквизиту или иные методы, работающие с ИНДЕКСОМ (на реквизите должна стоять галочка "Сортировка"), то индекс - регистронезависимый и "чтото" и "ЧТОТО и "ЧтоТо" будут в терминах индекса СОВПАДАЮЩИМИ.
---
всегда вводят доп. поле "АртикулБезРазделителей" (индексируемое), и по этому полю выполняют поиск.
---
Вот за намек куда копать отдельное спасибо. Заранее плюсану
---
Вариант (5) - голосую за него, но при этом надо понимать что для редуцированного АртикулБезРазделителей уникальность может быть нарушена.
Артикулы: А-Б и А.Б (для РАЗНЫХ товаров - а в общем случае такое может быть) дадут один и тот же "уникальный" АБ и автоматизированная проверка\контроль\итд станут невозможными. Если такой траблы в базе не будет, то АртикулБезРазделителя должен корректно заполняться ВО ВСЕХ МЕСТАХ где возможно создание\загрузка элемента номенклатуры и для параноид-контроля неплохо регулярно запускать обработку, которая будет полностью переопределять АртикулБезРазделителя по всему справочнику номенклатуры и выявлять (на всякий случай) траблы типа описанного выше "АБ".
Если исходить из того, что АртикулБезРазделителя заполняется корректно и удовлетворяет условию уникальности, то при вводе\записи "нового" артикула не надо перебирать весь справочник номенклатуры, которого под несколько сот тысяч элементов может быть (у меня клиент дисками торговал, спр.номенклатура ~170тыс), а достаточно сделать типа

НовыйАртикул = глНормализоватьСтроку(АртикулВведенРучками,СписокРазделителей,СимволНормализатор);
СпрН.ВыбратьЭлементыПоРеквизиту("АртикулБезРазделителя",НовыйАртикул);

и выборка будет в самом худшем случае 1 или несколько элементов
---
PS: в 2021 делал проект по автоматизации склада (фитинги всякие, сантехника, куча мелочевки всякой). ШК в базе отсутсвуют. "Товароведы" понарожали артикулов со спецсимволами, СМЕСЬЮ РУССКИХ И АНГЛИЙСКИХ БУКВ (типа R-01\786-56-Ж-NV-ЩЫ1), этими артикулами промаркированы короба. Время как всегда ужато до безобразия, входящий инвент с одновременной регистрацией штрихкодов штук\коробов, вводить показанные выше артикулы на ТСД - адский ад, инвент надо делать быстро (ну как всегда). Применил вариант, аналогичный (5): по базе были сгенерены "параллельные" артикулы, содержащие ТОЛЬКОЦИФРЫ (потому что даже латинские букавки на ТСД набирать - это тоже адски тормозно), Артикул R-01\786-56-Ж-NV-ЩЫ1 превращался в 01786561 (понятно, что редуцированный цифровой артикул был неуникальным и для разных товаров получался одинаковым) и процесс выглядел так, что персонал вводил цифровой артикул, система вываливала список номенклатуры "подходящей" под такой артикул и ручками (кнопками курсора или цифровой клавишей, соответствующей номеру в пронумерованнном списке от 0 до 9) выбирали нужную номенклатуру, получалось быстро, потому как в большинстве случаев список "подходящих" был небольшой, умещался на одном экране ТСД. Да, были цифровые артикулы по типу 123, на которые список "подходящих" был большим весьма, но таких было не так чтобы повально много, плюс мелкие ухищрения (типа в список похожих не показывать те, что уже прошли валидацию штрихкода, есть ШК уже на штуки\коробки) позволяли в процессе инвента\верификации такие массивы постепенно уменьшать.
---
Так что: не надо артикулы товаров делать с буквами\спецсимволами. Используйте только цифровую кодировку артикулов.
.
ИБО!
---
(15) Че, я понял вашу позицию, но... англо-цифровой артикул - я его не могу изменить, т.к запчасти в таком формате. В подборе если я напишу VF1842, к примеру, определится значение номенклатуры. Но такая же деталь может быть у другого производителя, но совершенно иная. 1С заикнется, что есть такой уже артикул в базе и предложит выбор. А разделители, как тире, точка, пробел - скорее всего для удобства пользователю, т.к. при большой длине его значения есть вероятность ошибиться. И вопрос-то был как проверить приЗаписи что артикул VF1842 и VF.1842 - это одно и то же, дабы не плодить номенклатуру дублями. Но, все в пятницу и решилось. Теперь вопрос пока не решен: строчные и прописные буквы - это одно и то же в значении артикула. Буду думать. Если что дельное есть подсказать - прошу дать направление.
---
Так я ж не заставляю менять в том, где нет возможности менять.
Сделайте реквизит типа "АртикулДля" (сортировка=да) и во всех местах где производится запись элемента номенклатуры пишите в него нормализованный (без спецсимволов, разделителй итд) артикул, итого у вас в картчоке номенклатуры будет ДВА АРТИКУЛА (один стандратный Артикул, куда вводят всякую хрень ручками и второй АртикулДля (видимый на форме, но недоступный для редактирования), куда записывается очищенный от ненужного "мусора" Артикул. И когда пользователь где-то вводит артикул ручками - введенный артикул точно также "нормализуйте"/очищайте от ненужного мусора и ищите существующие совпадения по АРТИКУЛДЛЯ, используя СпрН.ВыбратьЭлементуПоРеквизиту("АртикулДля",ЗначениеАртикулДляОчищенноеОтМустора,...)