shtrix-kodirovanie_dokumentov

Это старая версия документа!


Функция ПолучитьШК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 = 'Ошибка распознования штрихкода: тип ""%Тип%"" не поддерживается.'");
  ТекстИсключения = СтрЗаменить(ТекстИсключения,"%Тип%",ТипСсылки);
  
  ВызватьИсключение ТекстИсключения;
 КонецЕсли;
 
КонецЦикла;

КонецЕсли;

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

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

Попытка
 Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор));
Исключение
 Продолжить;
КонецПопытки;

МетаданныеСсылки = Ссылка.Метаданные();
Если Не ПравоДоступа("Чтение", МетаданныеСсылки) Тогда
 Продолжить;
КонецЕсли;

МассивСсылок.Добавить(Ссылка);

Если НЕ ПервыйЗапрос Тогда
 Запрос.Текст = Запрос.Текст + 
 "ОБЪЕДИНИТЬ ВСЕ
 |";
КонецЕсли;

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

ПервыйЗапрос = Ложь;

КонецЦикла;

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

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

Иначе

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

КонецЕсли;

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

  • /sites/data/attic/shtrix-kodirovanie_dokumentov.1614771003.txt.gz
  • Последнее изменение: 2021/03/03 11:30
  • tro