Типовой алгоритм поиска документа на ТСД путем сканирования его штрихкода предполагает, что штрихкод был сформирован на основании одного из перечисленных вариантов:
- числа в десятичной системе счисления, полученного из уникального идентификатора документа;
- непосредственно уникального идентификатора;
- номера документа.
Но в некоторых случаях штрихкод документа определяется по-другому (например, в результате доработки 1С). Это может быть ситуация, когда добавляется новый реквизит документа и в него записывается его штрихкод.
Чтобы дать возможность найти на ТСД документ по штрихкоду и после такой доработки, нужно добавить в интеграционную обработку Клеверенса экспортную функцию Конф_ПолучитьДокументПоШтрихкоду().
Пример функции
Функция Конф_ПолучитьДокументПоШтрихкоду(Штрихкод, Менеджеры = Неопределено) Экспорт МассивСсылок = Новый СписокЗначений; ИмяРеквизитаШтрихкод = "Комментарий"; // Ограничение по типам документов ТипВсеСсылки = Документы.ТипВсеСсылки(); МассивИменДокументов = Новый Массив; Если Менеджеры = Неопределено Тогда Для каждого ТипОбъекта ИЗ ТипВсеСсылки.Типы() Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта); Если НЕ ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизитаШтрихкод) = Неопределено Тогда МассивИменДокументов.Добавить(ОбъектМетаданных.ПолноеИмя()); КонецЕсли; КонецЦикла; Иначе Для каждого ПустаяСсылка ИЗ Менеджеры Цикл Если ТипЗнч(ПустаяСсылка) = Тип("Строка") Тогда ТипОбъекта = Тип("ДокументСсылка." + ПустаяСсылка); Иначе ТипОбъекта = ТипЗнч(ПустаяСсылка); КонецЕсли; Если ТипВсеСсылки.СодержитТип(ТипОбъекта) Тогда ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта); Если НЕ ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизитаШтрихкод) = Неопределено Тогда МассивИменДокументов.Добавить(ОбъектМетаданных.ПолноеИмя()); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Если НЕ МассивИменДокументов.Количество() Тогда Возврат МассивСсылок; КонецЕсли; // ШаблонЗапроса = "ВЫБРАТЬ | ИмяДокумента.Ссылка КАК Ссылка |ИЗ | Документ.ИмяДокумента КАК ИмяДокумента |ГДЕ | ВЫРАЗИТЬ(ИмяДокумента.ИмяРеквизитаШтрихкод КАК СТРОКА(200)) = &Штрихкод"; ШаблонЗапроса = СтрЗаменить(ШаблонЗапроса, "ИмяРеквизитаШтрихкод", ИмяРеквизитаШтрихкод); ТекстЗапроса = ""; Для каждого ИмяДокумента ИЗ МассивИменДокументов Цикл Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; КонецЕсли; ТекстЗапроса = ТекстЗапроса + СтрЗаменить(ШаблонЗапроса, "Документ.ИмяДокумента", ИмяДокумента); КонецЦикла; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Штрихкод", Штрихкод); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МассивСсылок.Добавить(Выборка.Ссылка); КонецЦикла; Возврат МассивСсылок; КонецФункции
Данная функция принимает на вход 2 параметра:
- штрихкод (обязательный, передается отсканированный на ТСД штрихкод);
- менеджеры (необязательный, передается массив имен или пустых ссылок документов для ограничения типа возвращаемых данных).
Данная функция должна возвращать массив ссылок документов, полученных по требуемому алгоритму. Если же функция ничего не вернет, продолжит выполняться типовой алгоритм поиска документа по штрихкоду.
Описанный выше способ актуален только для работы в онлайн-режиме. При работе в оффлайне штрихкод документа должен быть выгружен в реквизит документа Mobile SMARTS «Штрихкод» (Barcode).
Как будет заполнен реквизит «Штрихкод» при выгрузке документа из 1С, определяется бизнес-процессом или обработчиком выгрузки (типовой функционал Клеверенс).