Проверка и подбор табачной продукции МОТП / Форма ввода кода маркировки / Модуль формы

файл
#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

	ЭтоКонтекстРозничногоДокумента = ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ЭтоВидОперацииРозничнаяПродажа(ПараметрыСканирования.ВидОперацииИСМП);
	
	// Только в формах проверки и подбора.
	ПоддерживаетсяОбъемноСортовойУчет = ПроверкаИПодборПродукцииИСМПКлиентСервер.ПоддерживаетсяОбъемноСортовойУчет(
		ПараметрыСканирования, ВидМаркируемойПродукции)
		И ПараметрыСканирования.ИспользуетсяСоответствиеШтрихкодовСтрокДерева;
	
	// Только для прямого сканирования.
	ЭтоРозничныйВозвратПрямоеСканирование = Не ПараметрыСканирования.ИспользуетсяСоответствиеШтрихкодовСтрокДерева
		И ПараметрыСканирования.ВидОперацииИСМП = ОбщегоНазначенияИСМПКлиентСерверПовтИсп.ВидОперацииРозничныйВозврат();
	
	ДобавлятьБезКодаМаркировки = Ложь;
	
	Если ПоддерживаетсяОбъемноСортовойУчет Тогда
		ДобавлятьБезКодаМаркировки = Истина;
	ИначеЕсли ЭтоРозничныйВозвратПрямоеСканирование Тогда
		ДобавлятьБезКодаМаркировки = Истина;
	ИначеЕсли Не ПараметрыСканирования.ТолькоМаркируемаяПродукция
		И Параметры.РазрешатьДобавлениеБезКодаМарки Тогда
		
		Если ОбщегоНазначенияИСМППовтИсп.РазрешенОборотНемаркируемыхОстатковПродукции(ВидМаркируемойПродукции) Тогда
			ДобавлятьБезКодаМаркировки = Истина;
		Иначе
			
			Если ЭтоКонтекстРозничногоДокумента
				И Не ОбщегоНазначенияИСМППовтИсп.ДействуетУведомительныйРежимПоВидуПродукции(ВидМаркируемойПродукции) Тогда
				
				ДобавлятьБезКодаМаркировки = Истина;
			
			ИначеЕсли ЭтоКонтекстОптовогоДокумента
				И Не ОбщегоНазначенияИСМППовтИсп.ДействуетКонтрольПриПродажеОптомПоОСУ(ВидМаркируемойПродукции)
				И Не ОбщегоНазначенияИСМППовтИсп.ДействуетКонтрольПриПродажеОптомПоштучно(ВидМаркируемойПродукции) Тогда
				
				ДобавлятьБезКодаМаркировки = Истина;
				
			Иначе
				ДобавлятьБезКодаМаркировки = Ложь;
			КонецЕсли;
			
		КонецЕсли;
		
	Иначе
		ДобавлятьБезКодаМаркировки = Ложь;
	КонецЕсли;
	
	УстановитьВидимостьЭтементовДобавитьБезКодаМаркировки(ЭтотОбъект, ДобавлятьБезКодаМаркировки);
	
	Элементы.РаспечататьНовыйКодМаркировки.Видимость = ПараметрыСканирования.ДоступнаПечатьЭтикеток;
	Если ТипЗнч(ПараметрыСканирования.ДопустимыйСпособВводаВОборот) = Тип("Массив") Тогда
		ДопустимыйСпособВводаВОборот.ЗагрузитьЗначения(ПараметрыСканирования.ДопустимыйСпособВводаВОборот);
	ИначеЕсли ЗначениеЗаполнено(ПараметрыСканирования.ДопустимыйСпособВводаВОборот)
		И ДопустимыйСпособВводаВОборот.НайтиПоЗначению(ПараметрыСканирования.ДопустимыйСпособВводаВОборот) = Неопределено Тогда
		ДопустимыйСпособВводаВОборот.Добавить(ПараметрыСканирования.ДопустимыйСпособВводаВОборот);
	КонецЕсли;
	Организация                  = ПараметрыСканирования.Организация;
	
	ИнтеграцияИСМПКлиентСервер.УстановитьКартинкуСканированияКодаПоВидуПродукции(Элементы.ДекорацияКартинка, ВидМаркируемойПродукции);
	
	ШтрихкодированиеИСПереопределяемый.ПриОпределенииСочетанияКлавишДобавитьБезМаркировкиВФормеСканирования(
		Команды.ДобавитьБезКодаМаркировки.СочетаниеКлавиш);
	
	НазначитьЗаголовокКомандыДобавитьБезМаркировкиСервер();
	СтандартныеПодсистемыСервер.СброситьРазмерыИПоложениеОкна(ЭтотОбъект);
	
	Если ЭтоАдресВременногоХранилища(ПараметрыСканирования.КэшМаркируемойПродукции) Тогда
		ДанныеКэша = ПолучитьИзВременногоХранилища(ПараметрыСканирования.КэшМаркируемойПродукции);
		КэшМаркируемойПродукции = ПоместитьВоВременноеХранилище(ДанныеКэша, УникальныйИдентификатор);
	КонецЕсли;
	
	ПоддерживаемыеТипыПодключаемогоОборудования = "СканерШтрихкода";
	ОбщегоНазначенияИС.НастроитьПодключаемоеОборудование(ЭтотОбъект, ПоддерживаемыеТипыПодключаемогоОборудования);
	ОбщегоНазначенияСобытияФормИСПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// ПодключаемоеОборудование
	МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтотОбъект, ПоддерживаемыеТипыПодключаемогоОборудования);
	// Конец ПодключаемоеОборудование
	
	СобытияФормИСМПКлиент.ОпределитьИспользованиеХарактеристик(
		ЭтотОбъект,
		ЭтотОбъект,
		"Номенклатура", "ХарактеристикиИспользуются");
	
	ОбновитьПредставленияНоменклатуры();
	Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаСканированиеКодаМаркировки Тогда
		ЭтотОбъект.ТекущийЭлемент = Элементы.СтраницаСканированиеКодаМаркировки;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Документ)
		И ВладелецФормы <> Неопределено
		И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ВладелецФормы, "Объект")
		И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ВладелецФормы.Объект, "Ссылка") Тогда
		Документ = ВладелецФормы.Объект.Ссылка;
	КонецЕсли;
	
	Если ВладелецФормы <> Неопределено
		И (ВладелецФормы.ИмяФормы = "Обработка.ПроверкаИПодборПродукцииИСМП.Форма.ПроверкаИПодбор"
			Или ВладелецФормы.ИмяФормы = "Обработка.ПроверкаИПодборТабачнойПродукцииМОТП.Форма.ПроверкаИПодбор") Тогда
		УстановитьВидимостьЭтементовДобавитьБезКодаМаркировки(ЭтотОбъект, Ложь);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
	
	// ПодключаемоеОборудование
	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
	// Конец ПодключаемоеОборудование
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаКонтрольКодовМаркировки Тогда
		Возврат;
	КонецЕсли;
	
	ОбщегоНазначенияСобытияФормИСКлиентПереопределяемый.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
	
КонецПроцедуры

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

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ВвестиКодМаркировки(Команда)
	
	ОчиститьСообщения();
	
	ШтрихкодированиеОбщегоНазначенияИСКлиент.ПоказатьВводШтрихкода(
		Новый ОписаниеОповещения("РучнойВводШтрихкодаЗавершение", ЭтотОбъект));
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьБезМаркировки(Команда)
	
	ОбработатьБезВводаМарки = Истина;
	
	Комментарий = Нстр("ru='Отказ ввода кода маркировки по инициативе пользователя'");
	ДобавитьСообщениеДляЖурналаРегистрацииОНевозможностиВводаКодаМарки(Комментарий);
	
	ДанныеШтрихкодаБезМаркировки = ДанныеШтрихкода;
	ДанныеШтрихкодаБезМаркировки.КоличествоПотребительскихУпаковок = 1;
	ДанныеШтрихкодаБезМаркировки.ТипУпаковки                       = ПредопределенноеЗначение("Перечисление.ТипыУпаковок.МаркированныйТовар");
	ДанныеШтрихкодаБезМаркировки.ОбработатьБезМаркировки           = Истина;
	
	ПоискПоШтрихкодуЗавершение(ДанныеШтрихкодаБезМаркировки, Неопределено);
	
КонецПроцедуры

&НаКлиенте
Процедура Отмена(Команда)
	
	ОбработатьБезВводаМарки = Ложь;
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура РаспечататьНовыйКодМаркировки(Команда)
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	СоздатьНовыйКодМаркировкиИВывестиНаПечать();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

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

&НаКлиентеНаСервереБезКонтекста
Функция ВидПродукцииИС(Форма)
	
	Возврат Форма.ВидМаркируемойПродукции;
	
КонецФункции

&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(РезультатВыбораДанныеШтрихкода, ДополнительныеПараметры) Экспорт
	
	Если РезультатВыбораДанныеШтрихкода = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ТекстСообщения = ШтрихкодированиеОбщегоНазначенияИСКлиент.ПроверитьНаНаличиеОшибокУточнения(
		ПараметрыСканирования,
		РезультатВыбораДанныеШтрихкода,
		ДанныеШтрихкода);
	
	Если ЗначениеЗаполнено(ТекстСообщения) Тогда
		
		ВывестиСообщениеНаСтраницеВводаКодаМаркировки(ТекстСообщения);
		
	ИначеЕсли РезультатВыбораДанныеШтрихкода.ВидУпаковки = ПредопределенноеЗначение("Перечисление.ВидыУпаковокИС.Потребительская")
		Или РезультатВыбораДанныеШтрихкода.ВидУпаковки = ПредопределенноеЗначение("Перечисление.ВидыУпаковокИС.Групповая")
		Или РезультатВыбораДанныеШтрихкода.ВидУпаковки = ПредопределенноеЗначение("Перечисление.ВидыУпаковокИС.Набор")
		Или ОбработатьБезВводаМарки Тогда
		
		ОбработатьШтрихкодКодаМаркировки(РезультатВыбораДанныеШтрихкода, ДополнительныеПараметры);
		
	Иначе
		
		ВывестиСообщениеНаСтраницеВводаКодаМаркировки(
			НСтр("ru = 'Штрихкод не соответствует формату кода маркировки табачной продукции'"));
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗакрытьФормуПриСканировании()
	
	Результат = ПолучитьИзВременногоХранилища(АдресРезультатаОбработкиШтрихкода);
	
	Закрыть(Результат);
	
КонецПроцедуры

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

&НаСервере
Процедура ВывестиСообщениеНаСтраницеВводаКодаМаркировки(ТекстСообщения)
	
	ИмяЭлемента = "ИнформацияВводаКодаМаркировки";
	ДобавитьЭлементДекорацияНаФорму();
	Элементы[ИмяЭлемента].Заголовок = ТекстСообщения;
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьЭлементДекорацияНаФорму()
	
	ИмяЭлемента = "ИнформацияВводаКодаМаркировки";
	
	Если Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
		Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), Элементы.ГруппаИнформация);
		Элементы[ИмяЭлемента].ЦветТекста = ЦветаСтиля.СтатусОбработкиОшибкаПередачиГосИС;
	КонецЕсли;
	
КонецПроцедуры

#Область Печать

&НаКлиенте
Процедура РаспечататьНовыйКодЗавершение(ДанныеОтветаРезервированияИПечати, ДополнительныеПараметры) Экспорт
	
	Если ДанныеОтветаРезервированияИПечати = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ДанныеОтветаРезервированияИПечати.РезультатРезервирования.Количество() Тогда
		СтрокаРезультата = ДанныеОтветаРезервированияИПечати.РезультатРезервирования.Получить(0);
		
		СтруктураДополнительныхПараметров = Новый Структура();
		СтруктураДополнительныхПараметров.Вставить("ОтключитьЗапросДанныхСервиса",  Истина);
		СтруктураДополнительныхПараметров.Вставить("СохраняемыеНастройки", ДанныеОтветаРезервированияИПечати.СохраняемыеНастройки);
		СтруктураДополнительныхПараметров.Вставить("ЭтоПечатьКодаМаркировкиИзПула", Истина);
		
		ДанныеШтрихкода = Новый Структура(
			"Штрихкод, Количество",
			ШтрихкодированиеОбщегоНазначенияИСКлиентСервер.Base64ВШтрихкод(СтрокаРезультата.ПолныйКодМаркировки), 1);
		РучнойВводШтрихкодаЗавершение(ДанныеШтрихкода, СтруктураДополнительныхПараметров);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

&НаКлиенте
Процедура ОбновитьПредставленияНоменклатуры()
	
	ПараметрыПредставленияНоменклатуры = ОбщегоНазначенияИСКлиентСервер.ПараметрыПредставленияНоменклатуры();
	ПараметрыПредставленияНоменклатуры.Номенклатура               = Номенклатура;
	ПараметрыПредставленияНоменклатуры.Характеристика             = Характеристика;
	ПараметрыПредставленияНоменклатуры.ХарактеристикиИспользуются = ХарактеристикиИспользуются;
	ПараметрыПредставленияНоменклатуры.Серия                      = Серия;
	ПараметрыПредставленияНоменклатуры.СерииИспользуются          = СерииИспользуются И ЗначениеЗаполнено(Серия);
	ПараметрыПредставленияНоменклатуры.ТолькоПросмотр             = Истина;
	
	Представление = ОбщегоНазначенияИСКлиентСервер.ПредставлениеНоменклатурыФорматированнойСтрокой(ПараметрыПредставленияНоменклатуры);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьСообщениеДляЖурналаРегистрацииОНевозможностиВводаКодаМарки(Комментарий, КодМаркировки="")
	
	СтруктураСообщения = Новый Структура;
	
	СтруктураСообщения.Вставить("ИмяСобытия",     НСтр("ru='Отказ от сканирования кода маркировки'"));
	СтруктураСообщения.Вставить("Уровень",        "Информация");
	СтруктураСообщения.Вставить("Комментарий",    Комментарий);
	СтруктураСообщения.Вставить("Данные",         Неопределено);
	СтруктураСообщения.Вставить("СсылкаНаОбъект", Неопределено);
	СтруктураСообщения.Вставить("КодМаркировки",  КодМаркировки);
	
	ШтрихкодированиеИСКлиентПереопределяемый.ПриОпределенииИнформацииОбОтказеВводаКодаМаркиДляЖурналаРегистрации(
		ВладелецФормы, СтруктураСообщения);
	
	ДобавитьСообщениеДляЖурналаРегистрации(СтруктураСообщения);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ДобавитьСообщениеДляЖурналаРегистрации(СтруктураСообщения)
	
	Если СтруктураСообщения.СсылкаНаОбъект <> Неопределено Тогда
		МетаданныеОбъекта = СтруктураСообщения.СсылкаНаОбъект.Метаданные();
	КонецЕсли;
	
	УровеньЖурнала = Неопределено;
	Если СтруктураСообщения.Уровень = "Информация" Тогда
		УровеньЖурнала = УровеньЖурналаРегистрации.Информация;
	ИначеЕсли СтруктураСообщения.Уровень = "Ошибка" Тогда
		УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка;
	ИначеЕсли СтруктураСообщения.Уровень = "Предупреждение" Тогда
		УровеньЖурнала = УровеньЖурналаРегистрации.Предупреждение;
	ИначеЕсли СтруктураСообщения.Уровень = "Примечание" Тогда
		УровеньЖурнала = УровеньЖурналаРегистрации.Примечание;
	КонецЕсли;
	
	ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(
		СтруктураСообщения.ИмяСобытия, УровеньЖурнала, МетаданныеОбъекта, СтруктураСообщения.Данные, СтруктураСообщения.Комментарий);
	
КонецПроцедуры

&НаСервере
Процедура НазначитьЗаголовокКомандыДобавитьБезМаркировкиСервер()
	
	Клавиши = ЭтотОбъект.Команды.ДобавитьБезКодаМаркировки.СочетаниеКлавиш;
	ПредставлениеСочетанияКлавиш = "(";
	Если Клавиши.Ctrl Тогда
		ПредставлениеСочетанияКлавиш = ПредставлениеСочетанияКлавиш + "Ctrl+";
	КонецЕсли;
	
	Если Клавиши.Alt Тогда
		ПредставлениеСочетанияКлавиш = ПредставлениеСочетанияКлавиш + "Alt+";
	КонецЕсли;
	
	Если Клавиши.Shift Тогда
		ПредставлениеСочетанияКлавиш = ПредставлениеСочетанияКлавиш + "Shift+";
	КонецЕсли;
	
	ПредставлениеСочетанияКлавиш = ПредставлениеСочетанияКлавиш + Клавиши.Клавиша + ")";
	
	Элементы.ДобавитьБезКодаМаркировки.Заголовок = Элементы.ДобавитьБезКодаМаркировки.Заголовок + " " + ПредставлениеСочетанияКлавиш;
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьНовыйКодМаркировкиИВывестиНаПечать()
	
	Если ВладелецФормы.СохраненВыборПоМаркируемойПродукции Тогда
		Если Не ЗначениеЗаполнено(Номенклатура) Тогда
			Номенклатура = ВладелецФормы.ДанныеВыбораПоМаркируемойПродукции.Номенклатура;
		КонецЕсли;
		Если Не ЗначениеЗаполнено(Характеристика) Тогда
			Характеристика = ВладелецФормы.ДанныеВыбораПоМаркируемойПродукции.Характеристика;
		КонецЕсли;
		Если Не ЗначениеЗаполнено(Серия) Тогда
			Серия = ВладелецФормы.ДанныеВыбораПоМаркируемойПродукции.Серия;
		КонецЕсли;
	КонецЕсли;
	
	СтруктураПечатиЭтикетки                    = ПечатьЭтикетокИСМПКлиентСервер.СтруктураПечатиЭтикетки();
	СтруктураПечатиЭтикетки.Организация        = Организация;
	СтруктураПечатиЭтикетки.ВидПродукции       = ВидПродукцииИС(ЭтотОбъект);
	СтруктураПечатиЭтикетки.Номенклатура       = Номенклатура;
	СтруктураПечатиЭтикетки.Характеристика     = Характеристика;
	СтруктураПечатиЭтикетки.Серия              = Серия;
	Если ДопустимыйСпособВводаВОборот.Количество() > 0 Тогда
		СтруктураПечатиЭтикетки.СпособВводаВОборот = ДопустимыйСпособВводаВОборот.Получить(0).Значение;
	КонецЕсли;
	СтруктураПечатиЭтикетки.GTIN               = ШтрихкодированиеОбщегоНазначенияИСКлиентСервер.GTINПоШтрихкодуEAN(ДанныеШтрихкода.Штрихкод);
	
	ОписаниеОповещенияРаспечататьНовыйКодЗавершение = Новый ОписаниеОповещения(
		"РаспечататьНовыйКодЗавершение", ЭтотОбъект);
	
	СтруктураПараметров = ПечатьЭтикетокИСМПКлиент.СтруктураПараметровПечатиНовогоКодаМаркировки(
		СтруктураПечатиЭтикетки, ЭтотОбъект, ОписаниеОповещенияРаспечататьНовыйКодЗавершение);

	Если ВладелецФормы.СохраненВыборПоМаркируемойПродукции Тогда
		ДанныеВыбора = ВладелецФормы.ДанныеВыбораПоМаркируемойПродукции;
		СтруктураПараметров.Шаблон = ДанныеВыбора.ШаблонМаркировки;
		ЗаполнитьЗначенияСвойств(СтруктураПараметров, ДанныеВыбора);
	КонецЕсли;

	СтруктураПараметров.ПараметрыСканирования = ПараметрыСканирования;
	СтруктураПараметров.Организация    = Организация;
	СтруктураПараметров.ВидПродукции   = ВидПродукцииИС(ЭтотОбъект);
	СтруктураПараметров.Документ       = Документ;
	СтруктураПараметров.Номенклатура   = Номенклатура;
	СтруктураПараметров.Характеристика = Характеристика;
	СтруктураПараметров.Серия          = Серия;
	СтруктураПараметров.GTIN           = СтруктураПечатиЭтикетки.GTIN;
	ПечатьЭтикетокИСМПКлиент.РаспечататьНовыйКодМаркировки(Истина, СтруктураПараметров);
	
КонецПроцедуры

//@skip-warning
&НаКлиенте
Процедура Подключаемый_ОткрытьФормуУточненияДанных()
	
	ОповещениеПриЗавершении = Новый ОписаниеОповещения("РучнойВводШтрихкодаЗавершение", ЭтотОбъект);
	ШтрихкодированиеИСКлиент.Подключаемый_ОткрытьФормуУточненияДанных(ЭтотОбъект, ОповещениеПриЗавершении);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьЭтементовДобавитьБезКодаМаркировки(Форма, ЗначениеДоступности)
	Форма.Элементы.ДобавитьБезКодаМаркировки.Видимость   = ЗначениеДоступности;
	Форма.Элементы.ДобавитьБезКодаМаркировки.Доступность = ЗначениеДоступности;
	Форма.Элементы.ДекорацияПодсказка.Видимость          = ЗначениеДоступности;
КонецПроцедуры

#КонецОбласти

Связанные материалы