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