Печать этикеток и ценников / Форма товары / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения; // Используется механизмом обработки изменения реквизитов ТЧ

&НаКлиенте
Перем ТекущиеДанныеИсходноеСостояние;

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

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

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

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	СтруктураДанных = Новый Структура;
	
	Если ЭтоАдресВременногоХранилища(Параметры.АдресВХранилище) Тогда
		
		СтруктураДанных = ПолучитьИзВременногоХранилища(Параметры.АдресВХранилище);

	ИначеЕсли Параметры.Свойство("ПараметрыЗаполнения") Тогда
		
		СтруктураДанных = Параметры.ПараметрыЗаполнения;

	КонецЕсли;
	
	Если СтруктураДанных.Количество() > 0 Тогда
		
		Если СтруктураДанных.Свойство("Дата") Тогда
			Объект.Дата = СтруктураДанных.Дата;
		Иначе
			Объект.Дата = ТекущаяДатаСеанса();
		КонецЕсли;

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

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
		
		ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СкладПриИзменении(Элемент)
	
	УстановитьЭлементОтбораСКД("Склад", Объект.Склад, ЗначениеЗаполнено(Объект.Склад));
	
КонецПроцедуры

&НаКлиенте
Процедура ПолеПереключательРежимаПолученияЦенПриИзменении(Элемент)
	
	ПереключательРежимаПолученияЦенПриИзмененииСервер();
	ОтключитьОтметкуНезаполненного();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТоварыШаблонЦенникаПриИзменении(Элемент)
	ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецПроцедуры

&НаКлиенте
Процедура ТоварыШаблонЭтикеткиПриИзменении(Элемент)
	ОбновитьВидимостьЗависимыхОтШаблонаПолей();
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
	
	ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка");
	ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
	ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
	
	ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка");
	ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
	ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыУпаковкаПриИзменении(Элемент)
	
	ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка, СтараяУпаковка, СтароеКоличествоВДокументе, КоличествоЭтикеток");
	ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
	ТекущиеДанные.СтараяУпаковка = ТекущиеДанныеИсходноеСостояние.Упаковка;
	ТекущиеДанные.СтароеКоличествоВДокументе = ТекущиеДанныеИсходноеСостояние.КоличествоВДокументе;
	
	ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
	
	ТекущиеДанные = Новый Структура("Номенклатура, Характеристика, Серия, Упаковка");
	ЗаполнитьЗначенияСвойств(ТекущиеДанные, Элементы.Товары.ТекущиеДанные);
	ЗаполнитьЗначенияСвойств(Элементы.Товары.ТекущиеДанные, ПриИзмененииНоменклатуры(ТекущиеДанные));
	
КонецПроцедуры

&НаКлиенте
Процедура ВидЦеныПриИзменении(Элемент)
	
	Если Не ЗначениеЗаполнено(Объект.ВидЦены) Тогда
		Возврат;
	КонецЕсли;
	
	ПерезаполнитьЦены();
	
КонецПроцедуры

&НаКлиенте
Процедура ВидЦеныДополнительноПриИзменении(Элемент)
	
	Если Не ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
		Возврат;
	КонецЕсли;
	
	ПерезаполнитьЦены();
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаВидЦеныПриИзменении(Элемент)
	
	УстановитьИспользованиеЦенообразования(Объект.Дата);
	ОбновитьВидимостьСерии();

	Если Не ЗначениеЗаполнено(Объект.ВидЦены) Тогда
		Возврат;
	КонецЕсли;
	
	ПерезаполнитьЦены();
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаВидЦеныДополнительноПриИзменении(Элемент)
	
	УстановитьИспользованиеЦенообразования(Объект.ДатаДополнительно);
	ОбновитьВидимостьСерии();

	Если Не ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
		Возврат;
	КонецЕсли;
	
	ПерезаполнитьЦены();
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура УстановитьКоличествоПоУмолчанию(Команда)
	
	УстановитьКоличествоПоУмолчаниюНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьТаблицуТоваровЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Результат = РезультатВопроса;
	Если Результат = КодВозвратаДиалога.Да Тогда
		
		ЗаполнитьТаблицуТоваровНаСервере(Истина);
		
	ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда
		
		ЗаполнитьТаблицуТоваровНаСервере(Ложь);
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПечатьНаПринтер(Команда)
	
	ИменаМакетов       = "ЭтикеткаТовары";
	ИмяМенеджераПечати = "Обработка.ПечатьЭтикетокИЦенников";
	
	МассивОбъектов = Новый Массив;
	МассивОбъектов.Добавить(ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));
	
	УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов,
		ПолучитьПараметры());
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСкрытьОтбор(Команда)
	
	ВидимостьОтбора = НЕ ВидимостьОтбора;
	Элементы.ГруппаОтбор.Видимость = ВидимостьОтбора;
	Если ВидимостьОтбора Тогда
		Элементы.Отбор.Заголовок = НСтр("ru = 'Скрыть отбор'");
	Иначе
		Элементы.Отбор.Заголовок = НСтр("ru = 'Показать отбор'");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСкрытьРежимЗаполнения(Команда)
	
	ВидимостьРежимаЗаполнения = НЕ ВидимостьРежимаЗаполнения;
	Элементы.ГруппаРежимЗаполнения.Видимость = ВидимостьРежимаЗаполнения;
	Если ВидимостьРежимаЗаполнения Тогда
		Элементы.РежимЗаполнения.Заголовок = НСтр("ru = 'Скрыть режим заполнения'");
	Иначе
		Элементы.РежимЗаполнения.Заголовок = НСтр("ru = 'Показать режим заполнения'");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьКоличествоЦенников(Команда)
	
	МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
	Если МассивСтрок.Количество() = 0 Тогда
		ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
		ПоказатьПредупреждение(Неопределено, ТекстСообщения);
		Возврат;
	КонецЕсли;
	
	ВыбранноеЗначение = Неопределено;
	ДопПараметры = Новый Структура("МассивСтрок, ВыбранноеЗначение", МассивСтрок, ВыбранноеЗначение);
	ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьКоличествоЦенниковЗавершение", ЭтотОбъект, ДопПараметры);
	ТекстПодсказки = НСтр("ru = 'Введите количество ценников'");
	ПоказатьВводЧисла(ОписаниеОповещения, ВыбранноеЗначение, ТекстПодсказки, 10, 2);
	
КонецПроцедуры

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

КонецПроцедуры

&НаКлиенте
Процедура УстановитьКоличествоЭтикеток(Команда)
	
	МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
	Если МассивСтрок.Количество() = 0 Тогда
		ТекстСообщения = НСтр("ru = 'В списке отсутствуют выделенные строки'");
		ПоказатьПредупреждение(Неопределено, ТекстСообщения);
		Возврат;
	КонецЕсли;
	
	ВыбранноеЗначение = Неопределено;
	ДопПараметры = Новый Структура("МассивСтрок, ВыбранноеЗначение", МассивСтрок, ВыбранноеЗначение);
	ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьКоличествоЭтикетокЗавершение", ЭтотОбъект, ДопПараметры);
	ТекстПодсказки = НСтр("ru = 'Введите количество'");
	ПоказатьВводЧисла(ОписаниеОповещения, ВыбранноеЗначение, ТекстПодсказки, 10, 2);
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура УстановитьРежимПечатьЦенников(Команда)
	
	УстановитьРежимПечатьЦенниковНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьРежимПечатьЭтикетокИЦенников(Команда)
	
	УстановитьРежимПечатьЭтикетокИЦенниковНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьРежимПечатьЭтикеток(Команда)
	
	УстановитьРежимПечатьЭтикетокНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ВосстановитьНастройкиОтбораПоУмолчанию(Команда)
	
	ЗагрузитьНастройкиОтбораПоУмолчанию();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
	
	ОбработатьШтрихкоды(ДанныхШтрихкода);
	
КонецПроцедуры

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

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

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

КонецПроцедуры

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

КонецПроцедуры

&НаКлиенте
Процедура РазбитьСтроку(Команда)
	
	ТаблицаФормы  = Элементы.Товары;
	ДанныеТаблицы = Объект.Товары;
	
	ПараметрыРазбиенияСтроки = РаботаСТабличнымиЧастямиКлиент.ПараметрыРазбиенияСтроки();
	
	Если Режим = "ПечатьЦенников" Тогда
		ПараметрыРазбиенияСтроки.ИмяПоляКоличество = "КоличествоЦенников";
	ИначеЕсли Режим = "ПечатьЭтикеток" Тогда
		ПараметрыРазбиенияСтроки.ИмяПоляКоличество = "КоличествоЭтикеток";
	Иначе
		ВызватьИсключение НСтр("ru = 'Команда разбиения строк не поддерживается в режиме печати ценников и этикеток'");
	КонецЕсли;
	
	ПараметрыРазбиенияСтроки.Заголовок = НСтр("ru = 'Введите количество этикеток в новой строке'");
	
	РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы,, ПараметрыРазбиенияСтроки);
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЭтикеток.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШаблонЭтикетки");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.LightGray);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЦенников.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ШаблонЦенника");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.LightGray);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЦенников.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоЦенников");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыШаблонЦенника.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

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

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоЭтикеток.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

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

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыШаблонЭтикетки.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Выбран");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

КонецПроцедуры

#Область ЗаполнениеИИнициализация

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

&НаСервере
Процедура ЗаполнитьИсходныеТоварыПодготовитьПараметрыЗаполнения(ПараметрыЗаполнения)
	
	Если ТипЗнч(ПараметрыЗаполнения.Товары) <> Тип("ТаблицаЗначений") Тогда
		
		Порядок  = 1;
		ТипЧисло = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный));
		
		Товары = Новый ТаблицаЗначений;
		Товары.Колонки.Добавить("Порядок",        ТипЧисло);
		Товары.Колонки.Добавить("Номенклатура",   Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
		Товары.Колонки.Добавить("Упаковка",       Новый ОписаниеТипов("СправочникСсылка.УпаковкиЕдиницыИзмерения"));
		Товары.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
		Товары.Колонки.Добавить("Количество",     ТипЧисло);
		
		Для Каждого СтрокаТоваров Из ПараметрыЗаполнения.Товары Цикл
			НоваяСтрока = Товары.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТоваров);
			
			НоваяСтрока.Порядок = Порядок;
			
			Порядок = Порядок + 1;
		КонецЦикла;
		
		ПараметрыЗаполнения.Товары = Товары.Скопировать();
		
	КонецЕсли;
	
	Объект.ИсходныеДанныеТовары.Загрузить(ПараметрыЗаполнения.Товары);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура УстановитьРежимПечатьЭтикетокИЦенниковНаСервере()
	
	АвтоЗаголовок = Ложь;
	Режим = "ПечатьЭтикетокИЦенников";
	
	Если ПечатьИзДокумента Тогда
		Заголовок = НСтр("ru = 'Печать этикеток и ценников из документа'");
	Иначе
		Заголовок = НСтр("ru = 'Печать этикеток и ценников'");
	КонецЕсли;
	
	ОбновитьВидимостьЭлементов();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьРежимПечатьЭтикетокНаСервере()
	
	АвтоЗаголовок = Ложь;
	Режим = "ПечатьЭтикеток";
	
	Если ПечатьИзДокумента Тогда
		Заголовок = НСтр("ru = 'Печать этикеток из документа'");
	Иначе
		Заголовок = НСтр("ru = 'Печать этикеток'");
	КонецЕсли;
	
	ОбновитьВидимостьЭлементов();
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьРежимПечатьЦенниковНаСервере()
	
	АвтоЗаголовок = Ложь;
	Режим = "ПечатьЦенников";
	
	Если ПечатьИзДокумента Тогда
		Заголовок = НСтр("ru = 'Печать ценников из документа'");
	Иначе
		Заголовок = НСтр("ru = 'Печать ценников'");
	КонецЕсли;
	
	ОбновитьВидимостьЭлементов();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьРежим(ПараметрРежим)
	
	Если ПараметрРежим = "ПечатьЭтикетокИЦенников" Тогда
		УстановитьРежимПечатьЭтикетокИЦенниковНаСервере();
	ИначеЕсли ПараметрРежим = "ПечатьЦенников" Тогда
		УстановитьРежимПечатьЦенниковНаСервере();
	ИначеЕсли ПараметрРежим = "ПечатьЭтикеток" Тогда
		УстановитьРежимПечатьЭтикетокНаСервере();
	Иначе
		ВызватьИсключение НСтр("ru = 'Установленный режим печати не поддерживается'");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция УстановитьНовыеШтрихкодыEAN13НаСервере(ОписаниеОшибки = "")
	
	Количество = 0;
	
	МассивСтрок = Элементы.Товары.ВыделенныеСтроки;
	
	Штрихкоды = Новый Соответствие;
	
	НачатьТранзакцию();
	Попытка
		
		Блокировка = Новый БлокировкаДанных();
		
		ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ШтрихкодыНоменклатуры");
		ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
		
		Блокировка.Заблокировать();
		
		МаксимальныеЗначенияКодовШтучныхШтрихкодов = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьМаксимальныеЗначенияКодовШтучныхШтрихкодов();
		МаксимальноеЗначениеКодаВесовыхШтрихкодов  = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьМаксимальноеЗначениеКодаВесовыхШтрихкодов();
		МаксимальныйКодШтучногоТовара              = РегистрыСведений.ШтрихкодыНоменклатуры.МаксимальныйКодШтучногоТовара();
		МаксимальныйКодВесовогоТовара              = РегистрыСведений.ШтрихкодыНоменклатуры.МаксимальныйКодВесовогоТовара();
		ПрефиксУзлаШтрихкода                       = РегистрыСведений.ШтрихкодыНоменклатуры.ПрефиксУзлаШтрихкода();
		
		Для Каждого НомерСтроки Из МассивСтрок Цикл
			СтрокаТЧ = Объект.Товары.НайтиПоИдентификатору(НомерСтроки);
			
			Если Не ЗначениеЗаполнено(СтрокаТЧ.Штрихкод) Тогда
				Количество = Количество + 1;
			Иначе
				Продолжить;
			КонецЕсли;
			
			Код = Неопределено;
			Диапазон = Неопределено;
			
			Если Не СтрокаТЧ.Весовой Тогда
				
				Для Каждого СтрокаТЧМаксимальныеЗначения Из МаксимальныеЗначенияКодовШтучныхШтрихкодов Цикл
					
					Если Не СтрокаТЧМаксимальныеЗначения.Код < МаксимальныйКодШтучногоТовара Тогда
						Продолжить;
					КонецЕсли;
					
					СтрокаТЧМаксимальныеЗначения.Код = СтрокаТЧМаксимальныеЗначения.Код + 1;
					
					Код      = СтрокаТЧМаксимальныеЗначения.Код; 
					Диапазон = СтрокаТЧМаксимальныеЗначения.Диапазон;
					
					Прервать;
				КонецЦикла;
				
				Если Код = Неопределено Тогда
					ВызватьИсключение РегистрыСведений.ШтрихкодыНоменклатуры.ТекстСообщенияНетСвободныхКодовШтучныхШтрихкодов();
				КонецЕсли;
				
				Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьШтрихкодПоКоду(Код, Диапазон, ПрефиксУзлаШтрихкода);
				
			Иначе
				
				Если МаксимальноеЗначениеКодаВесовыхШтрихкодов = Неопределено ИЛИ МаксимальноеЗначениеКодаВесовыхШтрихкодов >= МаксимальныйКодВесовогоТовара Тогда
					ВызватьИсключение РегистрыСведений.ШтрихкодыНоменклатуры.ТекстСообщенияНетСвободныхКодовВесовыхШтрихкодов();
				КонецЕсли;
					
				МаксимальноеЗначениеКодаВесовыхШтрихкодов = МаксимальноеЗначениеКодаВесовыхШтрихкодов + 1;
				
				Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьШтрихкодВесовогоТовараПоКоду(МаксимальноеЗначениеКодаВесовыхШтрихкодов, ПрефиксУзлаШтрихкода);
				
			КонецЕсли;
			
			НовыйШтрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
			НовыйШтрихкод.Номенклатура = СтрокаТЧ.Номенклатура; 
			Если ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры") Тогда
				НовыйШтрихкод.Характеристика = СтрокаТЧ.Характеристика;
			КонецЕсли;
			Если ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры") Тогда
				НовыйШтрихкод.Упаковка = СтрокаТЧ.Упаковка;
			КонецЕсли;
			НовыйШтрихкод.Штрихкод = Штрихкод;
			НовыйШтрихкод.Записать();
			
			Если СтрокаТЧ.Весовой Тогда
				Штрихкоды.Вставить(СтрокаТЧ, РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(НовыйШтрихкод.Штрихкод));
			Иначе
				Штрихкоды.Вставить(СтрокаТЧ, НовыйШтрихкод.Штрихкод);
			КонецЕсли;
			
		КонецЦикла;
		
		ЗафиксироватьТранзакцию();
		
	Исключение
		
		ОтменитьТранзакцию();
		
		ОписаниеОшибки = НСтр("ru = 'При записи штрихкодов произошла ошибка.
		                      |Запись штрихкодов не выполнена.
		                      |Дополнительное описание:
		                      |%ДополнительноеОписание%'");
		ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, "%ДополнительноеОписание%", ИнформацияОбОшибке().Описание);
		
		Возврат 0;
		
	КонецПопытки;
	
	Для Каждого КлючИЗначение Из Штрихкоды Цикл
		КлючИЗначение.Ключ.Штрихкод = КлючИЗначение.Значение;
	КонецЦикла;
	
	Возврат Количество;
	
КонецФункции

&НаСервере
Процедура УстановитьКоличествоПоУмолчаниюВСтрокеТЧНаСервере(СтрокаТЧ)
	
	// Расчет количества Этикеток.
	Если ЗаполнитьКоличествоЭтикетокПоДокументу И НЕ ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе Тогда
		СтрокаТЧ.КоличествоЭтикеток = СтрокаТЧ.КоличествоВДокументе;
	ИначеЕсли ЗаполнитьКоличествоЭтикетокПоДокументу И ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе Тогда
		СтрокаТЧ.КоличествоЭтикеток = ?(СтрокаТЧ.КоличествоВДокументе > СтрокаТЧ.ОстатокНаСкладе,СтрокаТЧ.ОстатокНаСкладе,СтрокаТЧ.КоличествоВДокументе);
	ИначеЕсли НЕ ЗаполнитьКоличествоЭтикетокПоДокументу И ЗаполнитьКоличествоЭтикетокПоОстаткамНаСкладе Тогда
		СтрокаТЧ.КоличествоЭтикеток = ?(СтрокаТЧ.ОстатокНаСкладе > 0, СтрокаТЧ.ОстатокНаСкладе, 0);
	КонецЕсли;
	
	// Расчет количества Ценников.
	Если ЗаполнитьКоличествоЦенниковПоДокументу И НЕ ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе Тогда
		СтрокаТЧ.КоличествоЦенников = ?(СтрокаТЧ.КоличествоВДокументе > 0, 1, 0);
	ИначеЕсли ЗаполнитьКоличествоЦенниковПоДокументу И ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе Тогда
		СтрокаТЧ.КоличествоЦенников = ?(СтрокаТЧ.ОстатокНаСкладе > 0 ИЛИ СтрокаТЧ.КоличествоВДокументе > 0, 1, 0);
	ИначеЕсли НЕ ЗаполнитьКоличествоЦенниковПоДокументу И ЗаполнитьКоличествоЦенниковПоОстаткамНаСкладе Тогда
		СтрокаТЧ.КоличествоЦенников = ?(СтрокаТЧ.ОстатокНаСкладе > 0, 1, 0);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

	НомерСтроки = 0;
	
	СтруктураНастроек.ИспользуетсяЦенообразование25 = ИспользуетсяЦенообразование25;
	
	// Загрузка сформированного списка товаров.
	СтруктураРезультата = Обработки.ПечатьЭтикетокИЦенников.ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
	
	ПроверятьЕдиничнуюУпаковку = Истина;
	Если СтруктураРезультата.Таблица.Колонки.Найти("ИспользоватьУпаковки") = Неопределено 
		Или СтруктураРезультата.Таблица.Колонки.Найти("НеОднаЕдиничнаяУпаковка") = Неопределено Тогда
		ПроверятьЕдиничнуюУпаковку = Ложь;
	КонецЕсли;
	
	ИспользоватьХарактеристикиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьХарактеристикиНоменклатуры");
	ИспользоватьУпаковкиНоменклатуры = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
	
	Для Каждого СтрокаТЧ Из СтруктураРезультата.Таблица Цикл
		
		НоваяСтрока = Объект.Товары.Добавить();
		НоваяСтрока.Номенклатура         = СтрокаТЧ.Номенклатура;
		
		Если ИспользоватьХарактеристикиНоменклатуры Тогда
			НоваяСтрока.Характеристика       = СтрокаТЧ.Характеристика;
		КонецЕсли;
		Если ИспользоватьСерииНоменклатуры Тогда
			НоваяСтрока.Серия          = СтрокаТЧ.Серия;
		КонецЕсли;
		Если ИспользоватьУпаковкиНоменклатуры Тогда
			НоваяСтрока.Упаковка             = СтрокаТЧ.Упаковка;
		КонецЕсли;
		
		НоваяСтрока.Цена                        = СтрокаТЧ.Цена;
		НоваяСтрока.ДатаПоследнегоИзмененияЦены = СтрокаТЧ.ДатаПоследнегоИзмененияЦены;
		Если ЗначениеЗаполнено(Объект.ВидЦеныДополнительно) Тогда
			НоваяСтрока.ЦенаДополнительно                        = СтрокаТЧ.ЦенаДополнительно;
			НоваяСтрока.ДатаПоследнегоИзмененияЦеныДополнительно = СтрокаТЧ.ДатаПоследнегоИзмененияЦеныДополнительно;
		КонецЕсли;
		
		Если СтрокаТЧ.Весовой Тогда
			НоваяСтрока.Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(СтрокаТЧ.Штрихкод);
		Иначе
			НоваяСтрока.Штрихкод = СтрокаТЧ.Штрихкод;
		КонецЕсли;
		
		ШаблонЦенникаВидаНоменклатуры    = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЦенника")];
		ШаблонЦенникаНоменклатуры        = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЦенника")];
		НоваяСтрока.ШаблонЦенника        = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
		
		ШаблонЦенникаВидаНоменклатуры    = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЭтикетки")];
		ШаблонЦенникаНоменклатуры        = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЭтикетки")];
		НоваяСтрока.ШаблонЭтикетки       = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
		
		НоваяСтрока.ОстатокНаСкладе      = СтрокаТЧ.ОстатокНаСкладе;
		НоваяСтрока.КоличествоВДокументе = СтрокаТЧ.Количество;
		НоваяСтрока.Весовой              = СтрокаТЧ.Весовой;
		Если ИспользоватьХарактеристикиНоменклатуры Тогда
			НоваяСтрока.ХарактеристикиИспользуются = СтрокаТЧ.ХарактеристикиИспользуются;
		КонецЕсли;
		
		УстановитьКоличествоПоУмолчаниюВСтрокеТЧНаСервере(НоваяСтрока);
		
		// Восстановление позиций, сохраненных перед заполнением ТЧ.
		Если СохранятьШаблоныИКоличество Тогда
			ПараметрыОтбора = Новый Структура();
			ПараметрыОтбора.Вставить("Номенклатура", НоваяСтрока.Номенклатура);
			Если ИспользоватьХарактеристикиНоменклатуры Тогда
				ПараметрыОтбора.Вставить("Характеристика", НоваяСтрока.Характеристика);
			КонецЕсли;
			Если ИспользоватьСерииНоменклатуры Тогда
				ПараметрыОтбора.Вставить("Серия", НоваяСтрока.Серия);
			КонецЕсли;
			Если ИспользоватьУпаковкиНоменклатуры Тогда
				ПараметрыОтбора.Вставить("Упаковка", НоваяСтрока.Упаковка);
			КонецЕсли;
			НайденныеСтроки = ТаблицаВыбранныеПозиции.НайтиСтроки(ПараметрыОтбора);
			Если НайденныеСтроки.Количество() > 0 Тогда
				ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденныеСтроки[0]);
			КонецЕсли;
		КонецЕсли;
		
		НоваяСтрока.Выбран = Истина;
		НомерСтроки = НомерСтроки + 1;
		
		Если ПроверятьЕдиничнуюУпаковку Тогда
			Если СтрокаТЧ.ИспользоватьУпаковки
				И СтрокаТЧ.НеОднаЕдиничнаяУпаковка Тогда
				
				ТекстСообщения = НСтр("ru = 'У номенклатуры ""%Номенклатура%"" используется несколько упаковок с единицей измерения ""%ЕдиницаИзмерения%"" и коэффициентом 1. Для корректной привязки штрихкодов рекомендуется использовать одну единичную упаковку.'");
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номенклатура%", Строка(СтрокаТЧ.Номенклатура));
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ЕдиницаИзмерения%", Строка(СтрокаТЧ.ЕдиницаИзмерения));
				
				ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,
					СтрокаТЧ.Номенклатура,
					ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Товары", НомерСтроки, "Номенклатура"),
					"Объект",
					Ложь);
				
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
	ОбновитьВидимостьЗависимыхОтШаблонаПолей();
	
	Элементы.Товары.Обновить();
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ВыполнитьПроверку(Форма)
	
	ЕстьОшибки = Ложь;
	
	Для Каждого СтрокаТЧ Из Форма.Объект.Товары Цикл
		
		Если Не СтрокаТЧ.Выбран Тогда
			Продолжить;
		КонецЕсли;
		
		НомерСтроки = СтрокаТЧ.НомерСтроки - 1;
		
		Если Форма.Режим = "ПечатьЭтикеток" Или Форма.Режим = "ПечатьЭтикетокИЦенников" Тогда
			
			Если СтрокаТЧ.КоличествоЭтикеток = 0 Тогда
				
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не заполнено количество этикеток в строке: %1'"),
					НомерСтроки + 1);
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					ТекстСообщения,,
					"Объект.Товары["+НомерСтроки+"].КоличествоЭтикеток",,
					ЕстьОшибки);
				
			КонецЕсли;
			
			Если НЕ ЗначениеЗаполнено(СтрокаТЧ.ШаблонЭтикетки) Тогда
				
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не выбран шаблон этикетки в строке: %1'"),
					НомерСтроки + 1);
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					ТекстСообщения,,
					"Объект.Товары["+НомерСтроки+"].ШаблонЭтикетки",,
					ЕстьОшибки);
				
			КонецЕсли;
			
		КонецЕсли;
		
		Если Форма.Режим = "ПечатьЦенников" Или Форма.Режим = "ПечатьЭтикетокИЦенников" Тогда
			
			Если СтрокаТЧ.КоличествоЦенников = 0 Тогда
				
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не заполнено количество ценников в строке: %1'"),
					НомерСтроки + 1);
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					ТекстСообщения,,
					"Объект.Товары["+НомерСтроки+"].КоличествоЦенников",,
					ЕстьОшибки);
				
			КонецЕсли;
			
			Если НЕ ЗначениеЗаполнено(СтрокаТЧ.ШаблонЦенника) Тогда
				
				ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не выбран шаблон ценника в строке: %1'"),
					НомерСтроки + 1);
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					ТекстСообщения,,
					"Объект.Товары["+НомерСтроки+"].ШаблонЦенника",,
					ЕстьОшибки);
				
			КонецЕсли;
			
		КонецЕсли;
	
	КонецЦикла;

	Отбор = Новый Структура("Выбран", Истина);
	ТоварыВыбраны = Форма.Объект.Товары.НайтиСтроки(Отбор).Количество() > 0;
	
	Возврат Новый Структура("ТоварыВыбраны, ПроверкаВыполнена", ТоварыВыбраны, Не ЕстьОшибки И Форма.ПроверитьЗаполнение());
	
КонецФункции

&НаСервере
Процедура ПроверитьЗаполнениеШаблоновЭтикеток(ТоварыДляПечати, ЕстьОшибки = Ложь)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Товары.Номенклатура КАК Номенклатура
	|ПОМЕСТИТЬ Товары
	|ИЗ
	|	&ТаблицаТовары КАК Товары
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Номенклатура
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Товары.Номенклатура КАК Номенклатура,
	|	ВЫБОР
	|		КОГДА СпрНоменклатура.ШаблонЭтикетки <> ЗНАЧЕНИЕ(Справочник.ШаблоныЭтикетокИЦенников.ПустаяСсылка)
	|			ТОГДА СпрНоменклатура.ШаблонЭтикетки
	|		ИНАЧЕ СпрНоменклатура.ВидНоменклатуры.ШаблонЭтикетки
	|	КОНЕЦ               КАК ШаблонЭтикетки
	|ИЗ
	|	Товары КАК Товары
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
	|		ПО Товары.Номенклатура = СпрНоменклатура.Ссылка";
	
	Запрос.УстановитьПараметр("ТаблицаТовары", ТоварыДляПечати);
	
	ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
	
	Отбор = Новый Структура("ШаблонЭтикетки", Справочники.ШаблоныЭтикетокИЦенников.ПустаяСсылка());
	СтрокиТоваров = ТаблицаТоваров.НайтиСтроки(Отбор);
	
	Для Каждого СтрокаТоваров Из СтрокиТоваров Цикл
		ТекстСообщения = НСтр("ru = 'У номенклатуры ""%Номенклатура%"" не выбран шаблон этикетки.'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номенклатура%", Строка(СтрокаТоваров.Номенклатура));
		
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, СтрокаТоваров.Номенклатура, "", "", ЕстьОшибки);
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьКоличествоПоУмолчаниюНаСервере()
	
	Для Каждого СтрокаТЧ Из Объект.Товары Цикл
		
		УстановитьКоличествоПоУмолчаниюВСтрокеТЧНаСервере(СтрокаТЧ);		
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция УстановитьЭлементОтбораСКД(ИмяПараметра, ЗначениеПараметра, Использование = Истина)

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

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

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

	НаборДанных25 = СхемаКомпоновкиДанных.НаборыДанных.Найти("НаборДанных2_5");
	Если НаборДанных25 <> Неопределено Тогда
		Если ИспользуетсяЦенообразование25 Тогда
			СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = НаборДанных25.Запрос;
		КонецЕсли;
		СхемаКомпоновкиДанных.НаборыДанных.Удалить(НаборДанных25);
	КонецЕсли;
	
	ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос;
	 
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
			"&ТекстЗапросаКоэффициентУпаковки1",
			Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"УпаковкиНоменклатуры",
			"ИсходныеДанные.Номенклатура"));

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
			"&ТекстЗапросаКоэффициентУпаковки2",
			Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"ЕдиничныеУпаковкиВладельцы.Упаковка",
			"ЕдиничныеУпаковкиВладельцы.Номенклатура"));

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
			"&ТекстЗапросаКоэффициентУпаковки3",
			Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"ИсходныеДанные.Упаковка",
			"ИсходныеДанные.Номенклатура"));

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
			"&ТекстЗапросаКоэффициентУпаковки4",
			Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
			"ЕдиничныеУпаковкиНоменклатур.Упаковка",
			"ЕдиничныеУпаковкиНоменклатур.Номенклатура"));
	
	Если ИспользуетсяЦенообразование25 Тогда

		ЗаменяемыйТекст = "&ДанныеПоСериямПереопределяемый";

		Если ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры") Тогда
			
 			ТекстЗамены = "ИсходныеДанные.Серия";
			
		Иначе

			ТекстЗамены = "ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)";
			
		КонецЕсли;

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

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

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

&НаСервере
Процедура ДобавитьТовары(Таблица)
	
	// Поля необходимые для вывода в таблицу товаров на форме.
	СтруктураНастроек = Обработки.ПечатьЭтикетокИЦенников.СтруктураНастроек();
	
	УстановитьОбязательныеПоляДанных(СтруктураНастроек, Истина);
	
	УстановитьПараметрыДанных(СтруктураНастроек);
	
	СтруктураНастроек.ИмяМакетаСхемыКомпоновкиДанных = "ПоляШаблонаТовары";
	СтруктураНастроек.ИсходныеДанные = Таблица;
	
	СтруктураНастроек.ИспользуетсяЦенообразование25 = ИспользуетсяЦенообразование25;
	
	СтруктураРезультата = Обработки.ПечатьЭтикетокИЦенников.ПодготовитьСтруктуруДанных(СтруктураНастроек, "Товары");
	Для Каждого СтрокаТЧ Из СтруктураРезультата.Таблица Цикл
		НоваяСтрока = Объект.Товары.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
		НоваяСтрока.Штрихкод = РегистрыСведений.ШтрихкодыНоменклатуры.ПодготовитьШтрихкод(
			СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Штрихкод"]]);
		НоваяСтрока.Цена            = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Цена"]];
		НоваяСтрока.Весовой         = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["Весовой"]];
		НоваяСтрока.ОстатокНаСкладе = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы["ОстатокНаСкладе"]];
		
		ШаблонЦенникаВидаНоменклатуры      = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЦенника")];
		ШаблонЦенникаНоменклатуры          = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЦенника")];
		НоваяСтрока.ШаблонЦенника = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
		
		ШаблонЦенникаВидаНоменклатуры       = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ВидНоменклатуры.ШаблонЭтикетки")];
		ШаблонЦенникаНоменклатуры           = СтрокаТЧ[СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы.Получить("Номенклатура.ШаблонЭтикетки")];
		НоваяСтрока.ШаблонЭтикетки = ?(ЗначениеЗаполнено(ШаблонЦенникаНоменклатуры), ШаблонЦенникаНоменклатуры, ШаблонЦенникаВидаНоменклатуры);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ПереключательРежимаПолученияЦенПриИзмененииСервер()
	
	Элементы.ВидЦены.Видимость = Объект.РежимПолученияЦен = 1;
	Элементы.Склад.Видимость  = Объект.РежимПолученияЦен = 2;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьШаблоныВлияющиеНаВидимостьЭлементов()
	
	ШаблоныВлияющиеНаВидимостьЭлементов = Новый Структура;
	ШаблоныВлияющиеНаВидимостьЭлементов.Вставить("ВидЦеныДополнительно", Новый Массив);
	ШаблоныВлияющиеНаВидимостьЭлементов.Вставить("ПравилоОбмена", Новый Массив);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ШаблоныЭтикетокИЦенников.Ссылка,
	|	ШаблоныЭтикетокИЦенников.Шаблон
	|ИЗ
	|	Справочник.ШаблоныЭтикетокИЦенников КАК ШаблоныЭтикетокИЦенников
	|ГДЕ
	|	ШаблоныЭтикетокИЦенников.Назначение В(&Назначение)";
	Назначения = Новый Массив;
	Назначения.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров);
	Назначения.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров);
	Запрос.УстановитьПараметр("Назначение", Назначения);
	
	УстановитьПривилегированныйРежим(Истина);
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		Шаблон = Выборка.Шаблон; // ХранилищеЗначения
		
		ПараметрыМакета = Шаблон.Получить();
		Для Каждого Параметр Из ПараметрыМакета.ПараметрыШаблона Цикл
			Если СтрНайти(Параметр.Ключ ,"КодПодключаемогоОборудованияOffline") > 0 Тогда
				Если ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Найти(Выборка.Ссылка) = Неопределено Тогда
					ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Добавить(Выборка.Ссылка);
				КонецЕсли;
			КонецЕсли;
			Если СтрНайти(Параметр.Ключ ,"PLU") > 0 Тогда
				Если ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Найти(Выборка.Ссылка) = Неопределено Тогда
					ШаблоныВлияющиеНаВидимостьЭлементов.ПравилоОбмена.Добавить(Выборка.Ссылка);
				КонецЕсли;
			КонецЕсли;
			Если СтрНайти(Параметр.Ключ ,"ЦенаДополнительно") > 0 Тогда
				Если ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Найти(Выборка.Ссылка) = Неопределено Тогда
					ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Добавить(Выборка.Ссылка);
				КонецЕсли;
			КонецЕсли;
			Если СтрНайти(Параметр.Ключ, "ВидЦеныДополнительно") > 0 Тогда
				Если ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Найти(Выборка.Ссылка) = Неопределено Тогда
					ШаблоныВлияющиеНаВидимостьЭлементов.ВидЦеныДополнительно.Добавить(Выборка.Ссылка);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	
	КонецЦикла;
	
КонецПроцедуры

// Параметры:
// 	Результат - Структура - содержит:
// 	* Вариант - Строка - 
// 	* СкладскаяГруппа - СправочникСсылка.СкладскиеГруппыУпаковок - 
// 	ДополнительныеПараметры - Массив
&НаКлиенте
Процедура ВыбратьВариантЗаполненияУпаковокЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Объект.Вариант = Результат.Вариант;
	Объект.СкладскаяГруппа = Результат.СкладскаяГруппа;
	ВыбранныеСтроки = ДополнительныеПараметры;
	
	Если Объект.Вариант = "Оптимально" Тогда
		
		РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки);
		
	ИначеЕсли Объект.Вариант = "ПоСкладскоГруппе" Тогда
		
		РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки, Ложь, Результат.СкладскаяГруппа);  
		
	Иначе
		
		РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки, Истина);  
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура РазбитьПоУпаковкамНаСервере(ВыбранныеСтроки, Базовыми = Ложь, СкладскаяГруппа = Неопределено)
	
	Товары = Объект.Товары;
	Для каждого ИдентификаторСтроки Из ВыбранныеСтроки Цикл
		СтрокаТовар = Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
		ИндексСтроки = Товары.Индекс(СтрокаТовар);
		СтрокаТовар.КоличествоВДокументе = ?(СтрокаТовар.КоличествоВДокументе, СтрокаТовар.КоличествоЭтикеток, СтрокаТовар.КоличествоВДокументе);
		ТаблицаУпаковок = СкладыСервер.ПолучитьУпаковки(СтрокаТовар.Номенклатура, Базовыми, СкладскаяГруппа);
		
		КоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(СтрокаТовар.Упаковка, СтрокаТовар.Номенклатура);
		
		ТребуемоеКоличество = СтрокаТовар.КоличествоВДокументе*?(КоэффициентУпаковки,КоэффициентУпаковки,1);
		ТребуемоеКоличество = ?(ТребуемоеКоличество,
			ТребуемоеКоличество,
			СтрокаТовар.КоличествоЭтикеток * 
			?(КоэффициентУпаковки,КоэффициентУпаковки,1));
		СкладыСервер.РазбитьУпаковками(ТаблицаУпаковок, ТребуемоеКоличество);
		ДобавленоСтрок = 0;
		Для каждого СтрокаУпаковка Из ТаблицаУпаковок Цикл
			Если Не СтрокаУпаковка.Количество Тогда Продолжить КонецЕсли;
			НоваяСтрока = Товары.Вставить(ИндексСтроки+1);
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовар);
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаУпаковка);
			Структура = Новый Структура;
			Структура.Вставить("Номенклатура",   НоваяСтрока.Номенклатура);
			Структура.Вставить("Характеристика", НоваяСтрока.Характеристика);
			Структура.Вставить("Упаковка",       НоваяСтрока.Упаковка);
			
			Штрихкоды = РозничныеПродажиВызовСервера.ПолучитьШтрихкодыНоменклатуры(Структура);
			Если ШтрихКоды.Количество() Тогда
				НоваяСтрока.ШтрихКод = ШтрихКоды[0];
			Иначе
				НоваяСтрока.ШтрихКод = "";
			КонецЕсли;
			
			НоваяСтрока.КоличествоВДокументе = СтрокаУпаковка.КоличествоУпаковок;
			НоваяСтрока.КоличествоЭтикеток = СтрокаУпаковка.КоличествоУпаковок;
			НоваяСтрока.КоличествоЦенников = СтрокаУпаковка.КоличествоУпаковок;
			ДобавленоСтрок = ДобавленоСтрок + 1;
		КонецЦикла;
		
		Если ДобавленоСтрок Тогда 
			Товары.Удалить(ИндексСтроки);
		КонецЕсли;
	КонецЦикла;
	
	Если ЭтоАдресВременногоХранилища(СохраненныеНастройки) Тогда
		        
		ТаблицаСохраненныеНастройки = ПолучитьИзВременногоХранилища(СохраненныеНастройки);
		СтрокаНастройки = ТаблицаСохраненныеНастройки.Найти("Объект.Вариант", "Ключ");
		Если СтрокаНастройки <> Неопределено Тогда СтрокаНастройки.Значение = Объект.Вариант; КонецЕсли;
		СтрокаНастройки = ТаблицаСохраненныеНастройки.Найти("Объект.СкладскаяГруппа", "Ключ");
		Если СтрокаНастройки <> Неопределено Тогда СтрокаНастройки.Значение = Объект.СкладскаяГруппа; КонецЕсли;
		СохраненныеНастройки = ПоместитьВоВременноеХранилище(ТаблицаСохраненныеНастройки, УникальныйИдентификатор);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УстановитьИспользованиеЦенообразования(Дата = Неопределено)
	
	ИспользуетсяЦенообразование25 = ЦенообразованиеВызовСервера.ИспользуетсяЦенообразование25(Дата);
	ИспользоватьСерииНоменклатуры = ИспользуетсяЦенообразование25 
									И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатуры");
	
КонецПроцедуры

&НаКлиенте
Процедура ПерезаполнитьЦены()
	
	Если Объект.Товары.Количество() > 0 Тогда
	
		Кнопки = Новый СписокЗначений;
		Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Перезаполнить'"));
		Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Нет'"));
		
		ТекстВопроса = НСтр("ru = 'Перезаполнить цены?'");
		ОписаниеОповещения = Новый ОписаниеОповещения("ПерезаполнитьЦеныВопросЗавершение", ЭтотОбъект);
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки,, КодВозвратаДиалога.Да);
	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПерезаполнитьЦеныВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		ЗаполнитьТаблицуТоваровНаСервере(Истина, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьОчиститьСообщения(НадоОчищать)
	
	Если НадоОчищать Тогда
		ОчиститьСообщения();
		НадоОчищать = Ложь;
	КонецЕсли;
	
КонецПроцедуры

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

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

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