Это старая версия документа!
Функция ПолучитьШК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 = 'Ошибка распознования штрихкода: тип ""%Тип%"" не поддерживается.'");
ТекстИсключения = СтрЗаменить(ТекстИсключения,"%Тип%",ТипСсылки);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Запрос = Новый Запрос;
МассивСсылок = Новый Массив; ПервыйЗапрос = Истина; Для Каждого Менеджер Из МенеджерыОбъектов Цикл
Попытка
Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор));
Исключение
Продолжить;
КонецПопытки;
МетаданныеСсылки = Ссылка.Метаданные();
Если Не ПравоДоступа("Чтение", МетаданныеСсылки) Тогда
Продолжить;
КонецЕсли;
МассивСсылок.Добавить(Ссылка);
Если НЕ ПервыйЗапрос Тогда
Запрос.Текст = Запрос.Текст +
"ОБЪЕДИНИТЬ ВСЕ
|";
КонецЕсли;
Запрос.Текст = Запрос.Текст +
"ВЫБРАТЬ" + ?(ПервыйЗапрос," " + "РАЗРЕШЕННЫЕ" + " "," ") + "Таблица.Ссылка КАК Ссылка
|ИЗ " + МетаданныеСсылки.ПолноеИмя() + " КАК Таблица
|ГДЕ Ссылка В (&МассивСсылок)
|";
ПервыйЗапрос = Ложь;
КонецЦикла;
Если Не ПервыйЗапрос Тогда
Запрос.Параметры.Вставить("МассивСсылок", МассивСсылок);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Иначе
Возврат Новый Массив;
КонецЕсли;
КонецФункции