Перейти к основному содержимому

Как написать свой поиск документа по штрихкоду на ТСД

Обычно процедура поиска документа на мобильном устройстве через сканирование штрихкода предполагает, что этот штрихкод был сгенерирован одним из следующих способов:

  • преобразование уникального идентификатора документа в десятичное значение;
  • использование самого уникального идентификатора;
  • применение номера документа.

Тем не менее, в некоторых ситуациях штрихкод может формироваться иначе (например, после кастомизации конфигурации 1С). Это может быть, например, новый реквизит документа, в который вручную или программно записывается штрихкод.

Чтобы мобильное приложение могло находить такие документы, в интеграционную обработку Клеверенс необходимо добавить экспортируемую функцию Конф_ПолучитьДокументПоШтрихкоду().

Пример функции

Функция Конф_ПолучитьДокументПоШтрихкоду(Штрихкод, Менеджеры = Неопределено) Экспорт  
МассивСсылок = Новый СписокЗначений;
ИмяРеквизитаШтрихкод = "Комментарий";
// Отбор по доступным типам документов
ТипВсеСсылки = Документы.ТипВсеСсылки();
МассивИменДокументов = Новый Массив;

Если Менеджеры = Неопределено Тогда
Для каждого ТипОбъекта ИЗ ТипВсеСсылки.Типы() Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта);
Если НЕ ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизитаШтрихкод) = Неопределено Тогда
МассивИменДокументов.Добавить(ОбъектМетаданных.ПолноеИмя());
КонецЕсли;
КонецЦикла;
Иначе
Для каждого ПустаяСсылка ИЗ Менеджеры Цикл
Если ТипЗнч(ПустаяСсылка) = Тип("Строка") Тогда
ТипОбъекта = Тип("ДокументСсылка." + ПустаяСсылка);
Иначе
ТипОбъекта = ТипЗнч(ПустаяСсылка);
КонецЕсли;

Если ТипВсеСсылки.СодержитТип(ТипОбъекта) Тогда
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта);
Если НЕ ОбъектМетаданных.Реквизиты.Найти(ИмяРеквизитаШтрихкод) = Неопределено Тогда
МассивИменДокументов.Добавить(ОбъектМетаданных.ПолноеИмя());
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Если НЕ МассивИменДокументов.Количество() Тогда
Возврат МассивСсылок;
КонецЕсли;

ШаблонЗапроса = "ВЫБРАТЬ
| ИмяДокумента.Ссылка КАК Ссылка
|ИЗ
| Документ.ИмяДокумента КАК ИмяДокумента
|ГДЕ
| ВЫРАЗИТЬ(ИмяДокумента.ИмяРеквизитаШтрихкод КАК СТРОКА(200)) = &Штрихкод";

ШаблонЗапроса = СтрЗаменить(ШаблонЗапроса, "ИмяРеквизитаШтрихкод", ИмяРеквизитаШтрихкод);
ТекстЗапроса = "";

Для каждого ИмяДокумента ИЗ МассивИменДокументов Цикл
Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС;
КонецЕсли;

ТекстЗапроса = ТекстЗапроса + СтрЗаменить(ШаблонЗапроса, "Документ.ИмяДокумента", ИмяДокумента);
КонецЦикла;

Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
МассивСсылок.Добавить(Выборка.Ссылка);
КонецЦикла;

Возврат МассивСсылок;
КонецФункции
поиск по шк

Эта функция принимает два параметра:

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

Функция возвращает массив ссылок на документы, найденных по заданной логике. В случае, если функция не находит соответствий, срабатывает стандартный механизм поиска по штрихкоду.

Указанный метод работает только при онлайн-соединении. Для оффлайн-режима необходимо, чтобы штрихкод документа был загружен в соответствующее поле Mobile SMARTS — «Штрихкод» (Barcode).

Правила заполнения поля «Штрихкод» при выгрузке документов из 1С зависят от бизнес-логики или стандартного обработчика выгрузки Клеверенс.