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