Функция ПолучитьШК128ДляВедомости(СсылкаНаДок,ИмяМакетаДляШК) Экспорт
ПараметрыШтрихКода = Новый Структура;
ПараметрыШтрихКода.Вставить("ТипКода");
ПараметрыШтрихКода.Вставить("ОтображатьТекст");
ПараметрыШтрихКода.Вставить("Сообщение");
ПараметрыШтрихКода.Вставить("ТекстКода");
//Проверяем наличие установленной компоненты
Попытка
КомпонентШК = Новый COMОбъект("V8.Barcod");
Исключение
КомпонентШК = Неопределено;
Сообщить("Компонента 1CBarCode не установлена на данном компьютере! Штрих код не будет сформирован.", СтатусСообщения.Важное);
Возврат Неопределено;
КонецПопытки;
Если КомпонентШК <> Неопределено Тогда
Если ИмяМакетаДляШК	=	"ТТН (КАШКАН)" Тогда
ИмяМакетаДляШК	=	"ТТН_КАШКАН"
ИначеЕсли ИмяМакетаДляШК	=	"ТТНАлкогольРазд" Тогда
ИмяМакетаДляШК	=	"ТТН_Алкоголь_Полный"
ИначеЕсли ИмяМакетаДляШК	=	"НакладнаяАТБ_КАШКАН" Тогда
ИмяМакетаДляШК	=	"ТТН_АТБ"
ИначеЕсли ИмяМакетаДляШК	=	"ТТНАлкогольАТБ" Тогда
ИмяМакетаДляШК	=	"ТТН_Алкоголь_Полный_АТБ"
ИначеЕсли ИмяМакетаДляШК	=	"ФУРШЕТ" Тогда
ИмяМакетаДляШК	=	"НакладнаяФуршет"
ИначеЕсли ИмяМакетаДляШК	=	"КАРАВАН" Тогда
ИмяМакетаДляШК	=	"НакладнаяКараван"
КонецЕсли;
МойШтрихКод	= Штрихкодирование.СформироватьШК128(СсылкаНаДок,ИмяМакетаДляШК);
Если ЗначениеЗаполнено(МойШтрихКод) Тогда
ПараметрыШтрихКода.ТипКода	=	4; //CODE128
ПараметрыШтрихКода.ОтображатьТекст	=	Ложь;
ПараметрыШтрихКода.Сообщение	=	СокрЛП(МойШтрихКод);
ПараметрыШтрихКода.ТекстКода	=	СокрЛП(МойШтрихКод);
Возврат ПараметрыШтрихКода;
Иначе
Сообщить("Невозможно сформировать штрих код для документа "+СсылкаНаДок+" и его печатной формы "+ИмяМакетаДляШК+" т.к. его нет в таблице кодировки");
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
КонецФункции

Функция ПолучитьШК128ДляВедомости(СсылкаНаДок,ИмяМакетаДляШК) Экспорт
ПараметрыШтрихКода = Новый Структура;
ПараметрыШтрихКода.Вставить("ТипКода");
ПараметрыШтрихКода.Вставить("ОтображатьТекст");
ПараметрыШтрихКода.Вставить("Сообщение");
ПараметрыШтрихКода.Вставить("ТекстКода");
//Проверяем наличие установленной компоненты
Попытка
КомпонентШК = Новый COMОбъект("V8.Barcod");
Исключение
КомпонентШК = Неопределено;
Сообщить("Компонента 1CBarCode не установлена на данном компьютере! Штрих код не будет сформирован.", СтатусСообщения.Важное);
Возврат Неопределено;
КонецПопытки;
Если КомпонентШК <> Неопределено Тогда
Если ИмяМакетаДляШК	=	"ТТН (КАШКАН)" Тогда
ИмяМакетаДляШК	=	"ТТН_КАШКАН"
ИначеЕсли ИмяМакетаДляШК	=	"ТТНАлкогольРазд" Тогда
ИмяМакетаДляШК	=	"ТТН_Алкоголь_Полный"
ИначеЕсли ИмяМакетаДляШК	=	"НакладнаяАТБ_КАШКАН" Тогда
ИмяМакетаДляШК	=	"ТТН_АТБ"
ИначеЕсли ИмяМакетаДляШК	=	"ТТНАлкогольАТБ" Тогда
ИмяМакетаДляШК	=	"ТТН_Алкоголь_Полный_АТБ"
ИначеЕсли ИмяМакетаДляШК	=	"ФУРШЕТ" Тогда
ИмяМакетаДляШК	=	"НакладнаяФуршет"
ИначеЕсли ИмяМакетаДляШК	=	"КАРАВАН" Тогда
ИмяМакетаДляШК	=	"НакладнаяКараван"
КонецЕсли;
МойШтрихКод	= Штрихкодирование.СформироватьШК128(СсылкаНаДок,ИмяМакетаДляШК);
Если ЗначениеЗаполнено(МойШтрихКод) Тогда
ПараметрыШтрихКода.ТипКода	=	4; //CODE128
ПараметрыШтрихКода.ОтображатьТекст	=	Ложь;
ПараметрыШтрихКода.Сообщение	=	СокрЛП(МойШтрихКод);
ПараметрыШтрихКода.ТекстКода	=	СокрЛП(МойШтрихКод);
Возврат ПараметрыШтрихКода;
Иначе
Сообщить("Невозможно сформировать штрих код для документа "+СсылкаНаДок+" и его печатной формы "+ИмяМакетаДляШК+" т.к. его нет в таблице кодировки");
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
КонецФункции

Функция ЧисловойКодПоСсылке(Ссылка) Экспорт ШестнадчатиричноеЧисло = СтрЗаменить(Строка(Ссылка.УникальныйИдентификатор()),«-»,«»); Возврат ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадчатиричноеЧисло); КонецФункции

Функция ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(Знач Значение) Значение = НРег(Значение); ДлинаСтроки = СтрДлина(Значение); Результат = 0; Для НомерСимвола = 1 По ДлинаСтроки Цикл

Результат = Результат * 16 + Найти("0123456789abcdef", Сред(Значение, НомерСимвола, 1)) - 1;

КонецЦикла; Возврат Формат(Результат, «ЧГ=0»); КонецФункции

Функция ПреобразоватьДесятичноеЧислоВШестнадцатиричнуюСистемуСчисления(Знач ДесятичноеЧисло) Результат = «»; Пока ДесятичноеЧисло > 0 цикл

ОстатокОтДеления = ДесятичноеЧисло % 16;
ДесятичноеЧисло = (ДесятичноеЧисло - ОстатокОтДеления) / 16;
Результат = Сред("0123456789abcdef", ОстатокОтДеления + 1, 1) + Результат;

КонецЦикла; Возврат Результат; КонецФункции

Функция ПолучитьСсылкуПоШтрихкодуТабличногоДокумента(Штрихкод, Менеджеры = Неопределено) Экспорт

Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Штрихкод, Ложь, Ложь) Тогда

Возврат Новый Массив;

КонецЕсли;

ШтрихкодВШестнаднадцатиричномВиде = ПреобразоватьДесятичноеЧислоВШестнадцатиричнуюСистемуСчисления(Число(Штрихкод)); Пока СтрДлина(ШтрихкодВШестнаднадцатиричномВиде) < 32 Цикл

ШтрихкодВШестнаднадцатиричномВиде = "0" + ШтрихкодВШестнаднадцатиричномВиде;

КонецЦикла;

Идентификатор =

Сред(ШтрихкодВШестнаднадцатиричномВиде, 1, 8)

+ «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 9, 4) + «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 13, 4) + «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 17, 4) + «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 21, 12);

Если СтрДлина(Идентификатор) <> 36 Тогда

Возврат Новый Массив;

КонецЕсли;

Если Менеджеры = Неопределено Тогда

МенеджерыОбъектов = Новый Массив();
Для Каждого ЭлементМетаданных Из Метаданные.Документы Цикл
МенеджерыОбъектов.Добавить(Документы[ЭлементМетаданных.Имя]);
КонецЦикла;

Иначе

МенеджерыОбъектов = Новый Массив();
Для Каждого ПустаяСсылка Из Менеджеры Цикл
ТипСсылки = ТипЗнч(ПустаяСсылка);
Если Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(Документы[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(Справочники[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли Задачи.ТипВсеСсылки(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(Задачи[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли БизнесПроцессы.ТипВсеСсылки(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(БизнесПроцессы[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(ПланыВидовХарактеристик[ПустаяСсылка.Метаданные().Имя]);
Иначе
ТекстИсключения = НСтр("ru = 'Ошибка распознования штрихкода: тип ""%Тип%"" не поддерживается.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения,"%Тип%",ТипСсылки);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Запрос = Новый Запрос;

МассивСсылок = Новый Массив; ПервыйЗапрос = Истина; Для Каждого Менеджер Из МенеджерыОбъектов Цикл

Попытка
Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор));
Исключение
Продолжить;
КонецПопытки;
МетаданныеСсылки = Ссылка.Метаданные();
Если Не ПравоДоступа("Чтение", МетаданныеСсылки) Тогда
Продолжить;
КонецЕсли;
МассивСсылок.Добавить(Ссылка);
Если НЕ ПервыйЗапрос Тогда
Запрос.Текст = Запрос.Текст +
"ОБЪЕДИНИТЬ ВСЕ
|";
КонецЕсли;
Запрос.Текст = Запрос.Текст +
"ВЫБРАТЬ" + ?(ПервыйЗапрос," " + "РАЗРЕШЕННЫЕ" + " "," ") + "Таблица.Ссылка КАК Ссылка
|ИЗ " + МетаданныеСсылки.ПолноеИмя() + " КАК Таблица
|ГДЕ Ссылка В (&МассивСсылок)
|";
ПервыйЗапрос = Ложь;

КонецЦикла;

Если Не ПервыйЗапрос Тогда

Запрос.Параметры.Вставить("МассивСсылок", МассивСсылок);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

Иначе

Возврат Новый Массив;

КонецЕсли;

КонецФункции

Функция ПолучитьСсылкуПоШтрихкодуТабличногоДокумента(Штрихкод, Менеджеры = Неопределено) Экспорт

Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Штрихкод, Ложь, Ложь) Тогда

Возврат Новый Массив;

КонецЕсли;

ШтрихкодВШестнаднадцатиричномВиде = ПреобразоватьДесятичноеЧислоВШестнадцатиричнуюСистемуСчисления(Число(Штрихкод)); Пока СтрДлина(ШтрихкодВШестнаднадцатиричномВиде) < 32 Цикл

ШтрихкодВШестнаднадцатиричномВиде = "0" + ШтрихкодВШестнаднадцатиричномВиде;

КонецЦикла;

Идентификатор =

Сред(ШтрихкодВШестнаднадцатиричномВиде, 1, 8)

+ «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 9, 4) + «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 13, 4) + «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 17, 4) + «-» + Сред(ШтрихкодВШестнаднадцатиричномВиде, 21, 12);

Если СтрДлина(Идентификатор) <> 36 Тогда

Возврат Новый Массив;

КонецЕсли;

Если Менеджеры = Неопределено Тогда

МенеджерыОбъектов = Новый Массив();
Для Каждого ЭлементМетаданных Из Метаданные.Документы Цикл
МенеджерыОбъектов.Добавить(Документы[ЭлементМетаданных.Имя]);
КонецЦикла;

Иначе

МенеджерыОбъектов = Новый Массив();
Для Каждого ПустаяСсылка Из Менеджеры Цикл
ТипСсылки = ТипЗнч(ПустаяСсылка);
Если Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(Документы[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(Справочники[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли Задачи.ТипВсеСсылки(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(Задачи[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли БизнесПроцессы.ТипВсеСсылки(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(БизнесПроцессы[ПустаяСсылка.Метаданные().Имя]);
ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки(ТипСсылки) Тогда
МенеджерыОбъектов.Добавить(ПланыВидовХарактеристик[ПустаяСсылка.Метаданные().Имя]);
Иначе
ТекстИсключения = НСтр("ru = 'Ошибка распознования штрихкода: тип ""%Тип%"" не поддерживается.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения,"%Тип%",ТипСсылки);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Запрос = Новый Запрос;

МассивСсылок = Новый Массив; ПервыйЗапрос = Истина; Для Каждого Менеджер Из МенеджерыОбъектов Цикл

Попытка
Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор));
Исключение
Продолжить;
КонецПопытки;
МетаданныеСсылки = Ссылка.Метаданные();
Если Не ПравоДоступа("Чтение", МетаданныеСсылки) Тогда
Продолжить;
КонецЕсли;
МассивСсылок.Добавить(Ссылка);
Если НЕ ПервыйЗапрос Тогда
Запрос.Текст = Запрос.Текст +
"ОБЪЕДИНИТЬ ВСЕ
|";
КонецЕсли;
Запрос.Текст = Запрос.Текст +
"ВЫБРАТЬ" + ?(ПервыйЗапрос," " + "РАЗРЕШЕННЫЕ" + " "," ") + "Таблица.Ссылка КАК Ссылка
|ИЗ " + МетаданныеСсылки.ПолноеИмя() + " КАК Таблица
|ГДЕ Ссылка В (&МассивСсылок)
|";
ПервыйЗапрос = Ложь;

КонецЦикла;

Если Не ПервыйЗапрос Тогда

Запрос.Параметры.Вставить("МассивСсылок", МассивСсылок);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

Иначе

Возврат Новый Массив;

КонецЕсли;

КонецФункции