Шаблоны этикеток и ценников / Форма редактирования шаблона этикеток и ценников / Модуль формы

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

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

	УстановитьУсловноеОформление();

	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

	Элементы.Назначение.СписокВыбора.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров);
	Элементы.Назначение.СписокВыбора.Добавить(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров);

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

	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда

		ЗначениеКопирования = Неопределено;
		Параметры.Свойство("ЗначениеКопирования", ЗначениеКопирования);

		Если Не ЗначениеЗаполнено(ЗначениеКопирования) Тогда

			ИмяМакета = Параметры.ИмяМакета;
			Если ЗначениеЗаполнено(Параметры.Назначение) Тогда
				Объект.Назначение = Параметры.Назначение;
			КонецЕсли;
			Если ЗначениеЗаполнено(Параметры.Высота) Тогда
				Объект.Высота = Параметры.Высота;
			КонецЕсли;
			Если Параметры.Ширина > 0 Тогда
				Объект.Ширина = Параметры.Ширина;
			КонецЕсли;
			Если ЗначениеЗаполнено(Параметры.Наименование) Тогда
				Объект.Наименование = Параметры.Наименование;
			КонецЕсли;
			УровеньЧеткости = ?(УровеньЧеткости = 0, 1, УровеньЧеткости);
			Если Не ЗначениеЗаполнено(ИмяМакета) Тогда
				УстановитьРазмер(Объект.Ширина, Объект.Высота, Объект.РазмерЯчейки);
			КонецЕсли;

			ЗаполнитьДоступныеПоля();
			НастроитьШаблон();

		Иначе

			ЗаполнитьДоступныеПоля();
			ЗагрузитьШаблон();

		КонецЕсли;
	
	КонецЕсли;
	
	ТекущийРазмер = ТекущийРазмерСтраницы(ЭтаФорма);
	РазмерСтраницы = ТекущийРазмер;

	ОбновитьЗаголовок(ЭтаФорма);
	НазначениеПриИзмененииСервер(Ложь);

	Коды = ПолучитьКоды();
	Для Каждого СтрокаТЧ Из Коды Цикл
		НовыйТипКода = ТипыШтрихкодов.Добавить();
		НовыйТипКода.ТипКода = СтрокаТЧ.ТипКода;
		НовыйТипКода.ТипШтрихкода = СтрокаТЧ.ТипШтрихкода;
		СписокТипКода.Добавить(СтрокаТЧ.ТипШтрихкода, СтрокаТЧ.Наименование);
	КонецЦикла;
	
	СписокМонохромныйШрифт.Добавить(Истина, НСтр("ru = 'Монохромный'"));
	СписокМонохромныйШрифт.Добавить(Ложь, НСтр("ru = 'Градации серого'"));

	СписокУголПоворота.Добавить(0, НСтр("ru = '0°'"));
	СписокУголПоворота.Добавить(90, НСтр("ru = '90°'"));
	СписокУголПоворота.Добавить(180, НСтр("ru = '180°'"));
	СписокУголПоворота.Добавить(270, НСтр("ru = '270°'"));

	СписокGS1DatabarКоличествоСтрок.Добавить(100, НСтр("ru = 'Приоритет модуля и числа строк (max)'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(101, НСтр("ru = 'Приоритет модуля и числа строк (min)'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(102, НСтр("ru = 'Приоритет соотношения сторон'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(1, НСтр("ru = '1 строка'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(2, НСтр("ru = '2 строки'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(3, НСтр("ru = '3 строки'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(4, НСтр("ru = '4 строки'"));
	СписокGS1DatabarКоличествоСтрок.Добавить(5, НСтр("ru = '5 строк'"));

	СписокВариантМасштабирования.Добавить("РеальныйРазмер", НСтр("ru = 'Реальный размер'"));
	СписокВариантМасштабирования.Добавить("МасштабироватьСохранятьПропорции", НСтр("ru = 'Масштабировать (сохранять пропорции)'"));
	СписокВариантМасштабирования.Добавить("МасштабироватьНеСохранятьПропорции", НСтр("ru = 'Масштабировать (не сохранять пропорции)'"));

	СписокВертикальноеВыравнивание.Добавить(1, НСтр("ru = 'По верхнему краю'"));
	СписокВертикальноеВыравнивание.Добавить(2, НСтр("ru = 'По центру'"));
	СписокВертикальноеВыравнивание.Добавить(3, НСтр("ru = 'По нижнему краю'"));

	СписокУровеньЧеткости.Добавить(1, НСтр("ru = 'Стандартный'"));
	СписокУровеньЧеткости.Добавить(2, НСтр("ru = 'Повышенный'"));

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПодключитьОбработчикОжидания("ОбновитьРазмещение", 1, Ложь);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

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

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);
	
	ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	ЗаполнитьДоступныеПоля();

	ЗагрузитьШаблон();

	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	РассчитатьМаксимальноеКоличествоНаСтранице();

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

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

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);

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

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

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

&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
	ОбновитьЗаголовок(ЭтаФорма);
КонецПроцедуры

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

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

&НаКлиенте
Процедура ДоступныеПоляВыбор(Элемент, ВыбраннаяСтрока, Поле,
		СтандартнаяОбработка)

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

	Модифицированность = Истина;
	ВыборДоступногоПоля(ВыбраннаяСтрока);

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

&НаКлиенте
Процедура ОтображатьТекстПриИзменении(Элемент)
	Элементы.РазмерШрифта.Доступность = ОтображатьТекст;
КонецПроцедуры

&НаКлиенте
Процедура НазначениеПриИзменении(Элемент)

	Если Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляСкладскихЯчеек")
			ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры")
			ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУпаковочныхЛистов") Тогда
		ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.Code128");
	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляАкцизныхМарок") Тогда
		ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.PDF417");
	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляШтрихкодовУпаковок") Тогда
		ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.GS1_DataBarExpandedStacked");
	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаОбъектаЭксплуатацииЛента")
			ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаОбъектаЭксплуатацииБумага")
	 		ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУзлаОбъектаЭксплуатацииЛента")
	 		ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУзлаОбъектаЭксплуатацииБумага")
	 		ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииЛента")
	 		ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииБумага") Тогда
		ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.QR");
	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаКодМаркировкиИСМП") Тогда
		ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.DataMatrix");
	Иначе
		ТипШтрихкода = ПредопределенноеЗначение("Перечисление.ТипыШтрихкодов.EAN13");
	КонецЕсли;

	Для Каждого СтрокаТипыШтрихкода Из ТипыШтрихкодов Цикл
		Если СтрокаТипыШтрихкода.ТипШтрихкода = ТипШтрихкода Тогда
			ТипКода = СтрокаТипыШтрихкода.ТипКода;
		КонецЕсли;
	КонецЦикла;

	НазначениеПриИзмененииСервер();

	ЗаполнитьТаблицуСвойств();

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

&НаКлиенте
Процедура ПолеТабличногоДокументаПриИзмененииСодержимогоОбласти(Элемент,
		Область)

	Модифицированность = Истина;

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

&НаКлиенте
Процедура ШиринаПриИзменении(Элемент)
	УстановитьРазмер(Объект.Ширина, Объект.Высота, Объект.РазмерЯчейки);
КонецПроцедуры

&НаКлиенте
Процедура ВысотаПриИзменении(Элемент)
	УстановитьРазмер(Объект.Ширина, Объект.Высота, Объект.РазмерЯчейки);
КонецПроцедуры

&НаКлиенте
Процедура РазмерЯчейкиПриИзменении(Элемент)
	УстановитьРазмер(Объект.Ширина, Объект.Высота, Объект.РазмерЯчейки);
КонецПроцедуры

&НаКлиенте
Процедура НазначениеОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ДляЧегоПриИзменении(Элемент)

	Если Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляШтрихкодовУпаковок") Тогда

		Для Каждого Область Из ПолеТабличногоДокумента.Области Цикл

			Имя = Область.Имя;
			Если СтрНачинаетсяС(ВРег(Имя), ВРег("Штрихкод")) Тогда
				Индекс = ЗаменитьРисунокШтрихкода(Имя);
				ПолеТабличногоДокумента.Рисунки[Индекс].Имя = Имя;
			КонецЕсли;

		КонецЦикла;

	КонецЕсли;

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

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

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

&НаКлиенте
Процедура СвойстваЯчеекЗначениеПриИзменении(Элемент)

	ВыделеннаяОбласть = ПолеТабличногоДокумента.ТекущаяОбласть;
	ТекущиеДанные = Элементы.СвойстваЯчеек.ТекущиеДанные;

	Если ТипЗнч(ВыделеннаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда

		ВыделеннаяОбласть[ТекущиеДанные.ИмяСвойства] = ТекущиеДанные.Значение;
		УстановитьТекущийЭлемент = Неопределено;

	ИначеЕсли ТипЗнч(ВыделеннаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда

		Если ТекущиеДанные.ИмяСвойства = "ТипКода" Тогда

			Для Каждого КлючИЗначение Из СписокТипКода Цикл
				Представление = КлючИЗначение.Представление;
				Если ТекущиеДанные.Значение = Представление Тогда
					ТипШтрихкода = КлючИЗначение.Значение;
					Для Каждого СтрокаТипыШтрихкода Из ТипыШтрихкодов Цикл
						Если ТипШтрихкода = СтрокаТипыШтрихкода.ТипШтрихкода Тогда
							ТипКода = СтрокаТипыШтрихкода.ТипКода;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
			КонецЦикла;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "РазмерШрифта" Тогда

			РазмерШрифта = ТекущиеДанные.Значение;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "УровеньЧеткости" Тогда

			Для Каждого КлючИЗначение Из СписокУровеньЧеткости Цикл
				Представление = КлючИЗначение.Представление;
				Если ТекущиеДанные.Значение = Представление Тогда
					УровеньЧеткости = КлючИЗначение.Значение;
				КонецЕсли;
			КонецЦикла;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "ОтображатьТекст" Тогда

			ОтображатьТекст = ТекущиеДанные.Значение;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "GS1DatabarКоличествоСтрок" Тогда

			Для Каждого КлючИЗначение Из СписокGS1DatabarКоличествоСтрок Цикл
				Представление = КлючИЗначение.Представление;
				Если ТекущиеДанные.Значение = Представление Тогда
					GS1DatabarКоличествоСтрок = КлючИЗначение.Значение;
				КонецЕсли;
			КонецЦикла;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "МонохромныйШрифт" Тогда

			Для Каждого КлючИЗначение Из СписокМонохромныйШрифт Цикл
				Представление = КлючИЗначение.Представление;
				Если ТекущиеДанные.Значение = Представление Тогда
					МонохромныйШрифт = КлючИЗначение.Значение;
				КонецЕсли;
			КонецЦикла;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "УголПоворота" Тогда

			Для Каждого КлючИЗначение Из СписокУголПоворота Цикл
				Представление = КлючИЗначение.Представление;
				Если ТекущиеДанные.Значение = Представление Тогда
					УголПоворота = КлючИЗначение.Значение;
				КонецЕсли;
			КонецЦикла;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "ВертикальноеВыравнивание" Тогда

			Для Каждого КлючИЗначение Из СписокВертикальноеВыравнивание Цикл
				Представление = КлючИЗначение.Представление;
				Если ТекущиеДанные.Значение = Представление Тогда
					ВертикальноеВыравнивание = КлючИЗначение.Значение;
				КонецЕсли;
			КонецЦикла;

		ИначеЕсли ТекущиеДанные.ИмяСвойства = "ВариантМасштабирования" Тогда

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

		Иначе

			ВыделеннаяОбласть[ТекущиеДанные.ИмяСвойства] = ТекущиеДанные.Значение;

		КонецЕсли;

		Имя = ВыделеннаяОбласть.Имя;
		Если СтрНачинаетсяС(ВРег(Имя), ВРег("Штрихкод")) Тогда
			Индекс = ЗаменитьРисунокШтрихкода(Имя);
			ПолеТабличногоДокумента.Рисунки[Индекс].Имя = Имя;
		КонецЕсли;

		ПодключитьОбработчикОжидания("ЗаполнитьТаблицуСвойств", 0.1, Истина);

	КонецЕсли;

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

&НаКлиенте
Процедура СвойстваЯчеекЗначениеНачалоВыбора(Элемент, ДанныеВыбора,
		СтандартнаяОбработка)

	ВыделеннаяОбласть = ПолеТабличногоДокумента.ТекущаяОбласть;
	ТекущиеДанные = Элементы.СвойстваЯчеек.ТекущиеДанные;

	Если ТипЗнч(ВыделеннаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда

		Если СтрНайти(ТекущиеДанные.ИмяСвойства, "Линия") > 0 Тогда

			СтандартнаяОбработка = Ложь;
			НастроитьЛинию(ВыделеннаяОбласть, ТекущиеДанные);

		КонецЕсли;
	ИначеЕсли ТипЗнч(ВыделеннаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда

		Если СтрНайти(ТекущиеДанные.ИмяСвойства, "Граница") > 0 Тогда

			СтандартнаяОбработка = Ложь;
			НастроитьЛинию(ВыделеннаяОбласть, ТекущиеДанные);

		КонецЕсли;

		Если СтрНайти(ТекущиеДанные.ИмяСвойства, "Формат") > 0 Тогда
			СтандартнаяОбработка = Ложь;
		КонецЕсли;

		Если СтрНайти(ТекущиеДанные.ИмяСвойства, "Заполнение") > 0 Тогда

			СтандартнаяОбработка = Ложь;
			СписокЗначений = Новый СписокЗначений;
			СписокЗначений.Добавить(ТипЗаполненияОбластиТабличногоДокумента.Параметр);
			СписокЗначений.Добавить(ТипЗаполненияОбластиТабличногоДокумента.Текст);
			СписокЗначений.Добавить(ТипЗаполненияОбластиТабличногоДокумента.Шаблон);

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

		КонецЕсли;

		Если СтрНайти(ТекущиеДанные.ИмяСвойства, "Формат") > 0 Тогда

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

		КонецЕсли;

	КонецЕсли;

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

&НаКлиенте
Процедура СвойстваЯчеекЗначениеНачалоВыбораКонструкторЗавершение(Текст,
		ДополнительныеПараметры) Экспорт

	ВыделеннаяОбласть = ДополнительныеПараметры.ВыделеннаяОбласть;
	Конструктор = ДополнительныеПараметры.Конструктор;
	ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные;

	Если Текст <> Неопределено Тогда
		ТекущиеДанные.Значение = Конструктор.Текст;
		ВыделеннаяОбласть.Формат = Конструктор.Текст;
	КонецЕсли;

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

&НаКлиенте
Процедура СвойстваЯчеекЗначениеНачалоВыбораЗавершение(ВыбранныйЭлемент,
		ДополнительныеПараметры) Экспорт

	ВыделеннаяОбласть = ДополнительныеПараметры.ВыделеннаяОбласть;
	ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные;

	ЭлементСписка = ВыбранныйЭлемент;
	Если ЭлементСписка <> Неопределено Тогда
		ТекущиеДанные.Значение = Строка(ЭлементСписка.Значение);
		ВыделеннаяОбласть.Заполнение = ЭлементСписка.Значение;
	КонецЕсли;
	ЗаполнитьТаблицуСвойств();

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

&НаКлиенте
Процедура СвойстваЯчеекПриАктивизацииСтроки(Элемент)

	ТекущиеДанные = Элементы.СвойстваЯчеек.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Элементы.СвойстваЯчеекЗначение.СписокВыбора.Очистить();

	ЭтоСтрокаСТипомКода = СтрНайти(ТекущиеДанные.ИмяСвойства, "ТипКода") > 0;
	ЭтоСтрокаСТипомШрифта = СтрНайти(ТекущиеДанные.ИмяСвойства, "МонохромныйШрифт") > 0;
	ЭтоСтрокаГраница = СтрНайти(ТекущиеДанные.ИмяСвойства, "Граница") > 0;
	ЭтоСтрокаЛиния = СтрНайти(ТекущиеДанные.ИмяСвойства, "Линия") > 0;
	ЭтоУголПоворота = СтрНайти(ТекущиеДанные.ИмяСвойства, "УголПоворота") > 0;
	ЭтоGS1DatabarКоличествоСтрок = СтрНайти(ТекущиеДанные.ИмяСвойства, "GS1DatabarКоличествоСтрок") > 0;
	ЭтоВариантМасштабирования = СтрНайти(ТекущиеДанные.ИмяСвойства, "ВариантМасштабирования") > 0;
	ЭтоВертикальноеВыравнивание = СтрНайти(ТекущиеДанные.ИмяСвойства, "ВертикальноеВыравнивание") > 0;
	ЭтоВариантУровняЧеткости = СтрНайти(ТекущиеДанные.ИмяСвойства, "УровеньЧеткости") > 0;

	Если ЭтоСтрокаСТипомКода Тогда

		Для Каждого ЭлементСписка Из СписокТипКода Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	ИначеЕсли ЭтоСтрокаСТипомШрифта Тогда

		Для Каждого ЭлементСписка Из СписокМонохромныйШрифт Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	ИначеЕсли ЭтоУголПоворота Тогда

		Для Каждого ЭлементСписка Из СписокУголПоворота Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	ИначеЕсли ЭтоGS1DatabarКоличествоСтрок Тогда

		Для Каждого ЭлементСписка Из СписокGS1DatabarКоличествоСтрок Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	ИначеЕсли ЭтоВариантМасштабирования Тогда

		Для Каждого ЭлементСписка Из СписокВариантМасштабирования Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	ИначеЕсли ЭтоВертикальноеВыравнивание Тогда

		Для Каждого ЭлементСписка Из СписокВертикальноеВыравнивание Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	ИначеЕсли ЭтоВариантУровняЧеткости Тогда

		Для Каждого ЭлементСписка Из СписокУровеньЧеткости Цикл
			Элементы.СвойстваЯчеекЗначение.СписокВыбора.Добавить(ЭлементСписка.Представление);
		КонецЦикла;

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Истина;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	Иначе

		Элементы.СвойстваЯчеекЗначение.РежимВыбораИзСписка = Ложь;
		Элементы.СвойстваЯчеекЗначение.КнопкаСпискаВыбора = Ложь;

	КонецЕсли;

	Элементы.СвойстваЯчеекЗначение.РедактированиеТекста = Не (ЭтоСтрокаГраница
		Или ЭтоСтрокаСТипомКода Или ЭтоСтрокаСТипомШрифта
		Или ЭтоGS1DatabarКоличествоСтрок Или ЭтоУголПоворота
		Или ЭтоВариантМасштабирования Или ЭтоВертикальноеВыравнивание
		Или ЭтоСтрокаЛиния);

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

&НаКлиенте
Процедура СвойстваЯчеекПередНачаломДобавления(Элемент, Отказ, Копирование,
		Родитель, Группа, Параметр)
	Отказ = Истина;
КонецПроцедуры

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

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

&НаКлиенте
Процедура Объединить(Команда)

	Если ПолеТабличногоДокумента.ВыделенныеОбласти.Количество() = 1
			И ТипЗнч(ПолеТабличногоДокумента.ВыделенныеОбласти[0]) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда

		ТекущаяОбласть = ПолеТабличногоДокумента.ТекущаяОбласть;
		ОбъединитьОбласть(ТекущаяОбласть.Имя);

	Иначе

		ОчиститьСообщения();
		ТекстСообщения = НСтр("ru = 'Некорректная область'");
		Поле = "ПолеТабличногоДокумента";
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, Поле);
	КонецЕсли;

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

&НаКлиенте
Процедура Разъединить(Команда)

	Если ПолеТабличногоДокумента.ВыделенныеОбласти.Количество() = 1
			И ТипЗнч(ПолеТабличногоДокумента.ВыделенныеОбласти[0]) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда

		ТекущаяОбласть = ПолеТабличногоДокумента.ТекущаяОбласть;
		РазъединитьОбласть(ТекущаяОбласть.Имя);

	Иначе

		ОчиститьСообщения();
		ТекстСообщения = НСтр("ru = 'Некорректная область'");
		Поле = "ПолеТабличногоДокумента";
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, Поле);

	КонецЕсли;

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

&НаКлиенте
Процедура Выбрать(Команда)

	ТекущаяСтрока = Элементы.ДоступныеПоляКомпоновкиДанных.ТекущаяСтрока;
	Если ТекущаяСтрока <> Неопределено Тогда
		ВыборДоступногоПоля(ТекущаяСтрока);
	КонецЕсли;

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

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

	Если (ПолеТабличногоДокумента.ВыделенныеОбласти[0].Лево <> 0
			И ПолеТабличногоДокумента.ВыделенныеОбласти[0].Верх <> 0)
			И ПолеТабличногоДокумента.ВыделенныеОбласти.Количество() = 1
			И ТипЗнч(ПолеТабличногоДокумента.ВыделенныеОбласти[0]) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда

		УстановитьОбластьПечатиНаСервере(ПолеТабличногоДокумента.ВыделенныеОбласти[0].Имя);

	Иначе

		ОчиститьСообщения();
		ТекстСообщения = НСтр("ru = 'Некорректная область печати'");
		Поле = "ПолеТабличногоДокумента";
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, Поле);

	КонецЕсли;

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

&НаКлиенте
Процедура НапечататьОбразец(Команда)

	ОчиститьСообщения();

	Если Не ЗначениеЗаполнено(Объект.ДляЧего) Тогда
		ТекстСообщения = НСтр("ru = 'Не заполнено поле ""Для чего""'");
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.ДляЧего");
		Возврат;
	КонецЕсли;

	ПараметрКоманды = Новый Массив;
	ПараметрКоманды.Добавить(ПредопределенноеЗначение("Справочник.Номенклатура.ПустаяСсылка"));

	Если Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров") Тогда

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

	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров") Тогда

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

	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляСкладскихЯчеек") Тогда

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

	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляДоставки") Тогда

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

	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры") Тогда

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

	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУпаковочныхЛистов") Тогда

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

	//++ Локализация
	
	ИначеЕсли Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииЛента")
		ИЛИ Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииБумага") Тогда

		УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(
			"Обработка.ПечатьЭтикетокИЦенников", 
			"ЭтикеткаТМЦВЭксплуатации", 
			ПараметрКоманды, 
			Неопределено, 
			ПолучитьПараметрыДляПечатиОбразцаЭтикеткиТМЦВЭксплуатации());
			
	//-- Локализация
			

	Иначе
		ПараметрыДляПечатиОбразца = ПараметрыДляПечатиОбразца();
		ПечатьЭтикетокИЦенниковЛокализацияКлиент.НапечататьОбразец(ПараметрыДляПечатиОбразца, ПараметрКоманды, Объект);
	КонецЕсли;

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

&НаКлиенте
Процедура ВыравниваниеВертикальноеВерх(Команда)

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

	ПолеТабличногоДокумента.ТекущаяОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Верх;

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

&НаКлиенте
Процедура ВыравниваниеВертикальноеЦентр(Команда)

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

	ПолеТабличногоДокумента.ТекущаяОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Центр;

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

&НаКлиенте
Процедура ВыравниваниеВертикальноеНиз(Команда)

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

	ПолеТабличногоДокумента.ТекущаяОбласть.ВертикальноеПоложение = ВертикальноеПоложение.Низ;

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

&НаКлиенте
Процедура ВыравниваниеГоризонтальноеЛево(Команда)

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

	ПолеТабличногоДокумента.ТекущаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;

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

&НаКлиенте
Процедура ВыравниваниеГоризонтальноеЦентр(Команда)

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

	ПолеТабличногоДокумента.ТекущаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;

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

&НаКлиенте
Процедура ВыравниваниеГоризонтальноеПраво(Команда)

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

	ПолеТабличногоДокумента.ТекущаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;

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

&НаКлиенте
Процедура Назначить(Команда)

	ОчиститьСообщения();

	Если Не ЗначениеЗаполнено(Объект.ДляЧего) Тогда
		ТекстСообщения = НСтр("ru = 'Поле ""Для чего"" не заполнено'");
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,"Объект.ДляЧего");
		Возврат;
	КонецЕсли;

	Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда

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

	КонецЕсли;

	НазначитьФрагмент();

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

&НаКлиенте
Процедура НазначитьЗавершение(РезультатВопроса,
		ДополнительныеПараметры) Экспорт

	КодОтвета = РезультатВопроса;
	Если КодОтвета <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;

	Если ПроверитьЗаполнение() Тогда
		Если Не Записать() Тогда
			Возврат;
		КонецЕсли;
	Иначе
		Возврат;
	КонецЕсли;

	НазначитьФрагмент();

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

&НаКлиенте
Процедура НазначитьФрагмент()

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

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

&НаКлиенте
Процедура ВыбратьШаблон(Команда)

	ОткрытьФорму("Справочник.ШаблоныЭтикетокИЦенников.Форма.ФормаВыбораШаблона", Новый Структура("Назначение", Объект.Назначение), ЭтотОбъект, , , , Новый ОписаниеОповещения("ВыбратьШаблонЗавершение", ЭтотОбъект));

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

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

	Если ЗначениеЗаполнено(ИмяШаблона) Тогда

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

	КонецЕсли;

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

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

	ИмяШаблона = ДополнительныеПараметры.ИмяШаблона;

	Результат = РезультатВопроса;
	Если Результат = КодВозвратаДиалога.Да Тогда
		УстановитьШаблонПоУмолчанию(ИмяШаблона);
	КонецЕсли;

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)

	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);

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

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ReportHeaderBackColor);

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<Не доступно>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);

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

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

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

&НаСервереБезКонтекста
Функция ПолучитьКоды()

	Возврат Справочники.ШаблоныЭтикетокИЦенников.ПолучитьОбразцыШтрихкодов();

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

&НаКлиентеНаСервереБезКонтекста
Функция ИмяПараметраШтрихкод()

	Возврат "Штрихкод";

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

&НаКлиенте
Функция ИмяПараметраКодАкцизнойМарки()

	Возврат "КодАкцизнойМарки";

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

&НаКлиентеНаСервереБезКонтекста
Функция ИмяПараметраВалютаЦены()

	Возврат "ВидЦены.ВалютаЦены";

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

&НаКлиентеНаСервереБезКонтекста
Функция РазмерСтраницы(ПолеТабличногоДокумента)

	ВысотаСтраницы = ПолеТабличногоДокумента.ВысотаСтраницы;
	ШиринаСтраницы = ПолеТабличногоДокумента.ШиринаСтраницы;

	Наименование = Строка(ШиринаСтраницы) + "х" + Строка(ВысотаСтраницы);

	Если ШиринаСтраницы = 210 И ВысотаСтраницы = 297 Тогда
		Наименование = "A4";
	ИначеЕсли ШиринаСтраницы = 148 И ВысотаСтраницы = 210 Тогда
		Наименование = "A5";
	ИначеЕсли ШиринаСтраницы = 105 И ВысотаСтраницы = 148 Тогда
		Наименование = "A6";
	ИначеЕсли ШиринаСтраницы = 74 И ВысотаСтраницы = 105 Тогда
		Наименование = "A7";
	ИначеЕсли ШиринаСтраницы = 52 И ВысотаСтраницы = 74 Тогда
		Наименование = "A8";
	ИначеЕсли ШиринаСтраницы = 37 И ВысотаСтраницы = 52 Тогда
		Наименование = "A9";
	ИначеЕсли ШиринаСтраницы = 26 И ВысотаСтраницы = 37 Тогда
		Наименование = "A10";
	КонецЕсли;

	Возврат Наименование;

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗаголовок(Форма)

	Наименование = Форма.Объект.Наименование;
	Если Не ЗначениеЗаполнено(Форма.Объект.Ссылка) Тогда
		Наименование = Наименование + ?(ЗначениеЗаполнено(Наименование), " ", "")
			+ НСтр("ru = '(Создание)'");
	КонецЕсли;

	Форма.Автозаголовок = Ложь;
	Если Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон ценника:'") + " " + Наименование;
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляСкладскихЯчеек") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляДоставки") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУпаковочныхЛистов") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляАкцизныхМарок") Тогда
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
		
	ИначеЕсли Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаОбъектаЭксплуатацииЛента")
		ИЛИ Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаОбъектаЭксплуатацииБумага")
		ИЛИ Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУзлаОбъектаЭксплуатацииБумага")
		ИЛИ Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУзлаОбъектаЭксплуатацииЛента") 
		ИЛИ Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииЛента")
		ИЛИ Форма.Объект.Назначение = ПредопределенноеЗначение("Перечисление.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииБумага") Тогда
			
		Форма.Заголовок = НСтр("ru = 'Шаблон этикетки:'") + " " + Наименование;
		
	КонецЕсли;

	ПечатьЭтикетокИЦенниковЛокализацияКлиентСервер.ОбновитьЗаголовокФормыШаблоныЭтикетокИЦенников(Форма, Наименование);

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

&НаСервере
Процедура ЗагрузитьШаблон()

	СтруктураШаблона = СтруктураШаблона();

	Если СтруктураШаблона <> Неопределено Тогда

		СтруктураМакетаШаблона = Справочники.ШаблоныЭтикетокИЦенников.ПодготовитьСтруктуруМакетаШаблона(Неопределено, Объект.Назначение);

		// Загрузка шаблона.
		СтруктураШаблона.Свойство("РедакторТабличныйДокумент", ПолеТабличногоДокумента);

		Если СтруктураШаблона.Свойство("КоличествоПоВертикали") Тогда
			КоличествоПоВертикали = СтруктураШаблона.КоличествоПоВертикали;
		Иначе
			КоличествоПоВертикали = СтруктураМакетаШаблона.КоличествоПоВертикали;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("КоличествоПоГоризонтали") Тогда
			КоличествоПоГоризонтали = СтруктураШаблона.КоличествоПоГоризонтали;
		Иначе
			КоличествоПоГоризонтали = СтруктураМакетаШаблона.КоличествоПоГоризонтали;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("ТипКода") Тогда
			ТипКода = СтруктураШаблона.ТипКода;
		Иначе
			ТипКода = СтруктураМакетаШаблона.ТипКода;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("ТипШтрихкода") Тогда
			ТипШтрихкода = СтруктураШаблона.ТипШтрихкода;
		Иначе
			ОбразцыШтрихкодов = ПолучитьКоды();
			Для Каждого СтрокаТипыШтрихкода Из ОбразцыШтрихкодов Цикл
				Если СтрокаТипыШтрихкода.ТипКода = ТипКода Тогда
					ТипШтрихкода = СтрокаТипыШтрихкода.ТипШтрихкода;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("РазмерШрифта") Тогда
			РазмерШрифта = СтруктураШаблона.РазмерШрифта;
		Иначе
			РазмерШрифта = СтруктураМакетаШаблона.РазмерШрифта;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("УровеньЧеткости") Тогда
			УровеньЧеткости = СтруктураШаблона.УровеньЧеткости;
		Иначе
			УровеньЧеткости = СтруктураМакетаШаблона.УровеньЧеткости;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("ОтображатьТекст") Тогда
			ОтображатьТекст = СтруктураШаблона.ОтображатьТекст;
		Иначе
			ОтображатьТекст = СтруктураМакетаШаблона.ОтображатьТекст;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("GS1DatabarКоличествоСтрок") Тогда
			GS1DatabarКоличествоСтрок = СтруктураШаблона.GS1DatabarКоличествоСтрок;
		Иначе
			GS1DatabarКоличествоСтрок = СтруктураМакетаШаблона.GS1DatabarКоличествоСтрок;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("МонохромныйШрифт") Тогда
			МонохромныйШрифт = СтруктураШаблона.МонохромныйШрифт;
		Иначе
			МонохромныйШрифт = СтруктураМакетаШаблона.МонохромныйШрифт;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("УголПоворота") Тогда
			УголПоворота = СтруктураШаблона.УголПоворота;
		Иначе
			УголПоворота = СтруктураМакетаШаблона.УголПоворота;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("Масштабировать") Тогда
			Масштабировать = СтруктураШаблона.Масштабировать;
		Иначе
			Масштабировать = СтруктураМакетаШаблона.Масштабировать;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("СохранятьПропорции") Тогда
			СохранятьПропорции = СтруктураШаблона.СохранятьПропорции;
		Иначе
			СохранятьПропорции = СтруктураМакетаШаблона.СохранятьПропорции;
		КонецЕсли;

		Если СтруктураШаблона.Свойство("ВертикальноеВыравнивание") Тогда
			ВертикальноеВыравнивание = СтруктураШаблона.ВертикальноеВыравнивание;
		Иначе
			ВертикальноеВыравнивание = СтруктураМакетаШаблона.ВертикальноеВыравнивание;
		КонецЕсли;

		Элементы.РазмерШрифта.Доступность = ОтображатьТекст;

	КонецЕсли;

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

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

	МаксимальноеКоличество = МаксимальноеКоличествоЭтикетокНаСтранице();

	КоличествоПоВертикали = МаксимальноеКоличество.ПоВертикали;
	КоличествоПоГоризонтали = МаксимальноеКоличество.ПоГоризонтали;

	ШаблонСтроки = НСтр("ru = 'На странице %1 помещается по вертикали: %2, по горизонтали: %3'");
	ОписаниеРазмещенияДляЦенников = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		ШаблонСтроки,
		РазмерСтраницы(ПолеТабличногоДокумента),
		КоличествоПоВертикали,
		КоличествоПоГоризонтали);

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

&НаСервере
Процедура НазначениеПриИзмененииСервер(Знач ОчищатьНазначение = Истина)

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

	ЗаполнитьДоступныеПоля();

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


	КонецЕсли;

	ШаблоныЭтикетокИЦенниковЛокализация.ПриИзмененииНазначенияШаблонаВСправочникеШаблонов(
		ЭтотОбъект, ОчищатьНазначение, МассивТипов);

	Элементы.ДляЧего.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов);

	Для Каждого Область Из ПолеТабличногоДокумента.Области Цикл

		Если ТипЗнч(Область) <> Тип("РисунокТабличногоДокумента") Тогда
			Имя = Область.Имя;
			Если СтрНачинаетсяС(ВРег(Имя), ВРег("Штрихкод")) Тогда
				Индекс = ЗаменитьРисунокШтрихкода(Имя);
				ПолеТабличногоДокумента.Рисунки[Индекс].Имя = Имя;
			КонецЕсли;
		Иначе

		КонецЕсли;

	КонецЦикла;
	
	РассчитатьМаксимальноеКоличествоНаСтранице();
	
	СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Назначение", Новый Структура("ОчищатьНазначение", ОчищатьНазначение));
	
КонецПроцедуры

&НаСервере
Процедура УстановитьШаблонПоУмолчанию(ИмяШаблона)

	ШаблонПоУмолчанию = Справочники.ШаблоныЭтикетокИЦенников.ПолучитьМакет(ИмяШаблона);

	ПолеТабличногоДокумента = ШаблонПоУмолчанию;

	Если ИмяШаблона = "ШаблонЭтикеткиСкладскиеЯчейки" Тогда

		ТипШтрихкода = Перечисления.ТипыШтрихкодов.Code128;
		ОтображатьТекст = Ложь;

	ИначеЕсли ИмяШаблона = "ШаблонЭтикеткиСерииНоменклатуры" Тогда

		ТипШтрихкода = Перечисления.ТипыШтрихкодов.Code128;
		ОтображатьТекст = Истина;

	Иначе

		Если Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляСкладскихЯчеек
				ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры Тогда

			ТипШтрихкода = Перечисления.ТипыШтрихкодов.Code128;
			ОтображатьТекст = Истина;

		ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУпаковочныхЛистов Тогда

			ТипШтрихкода = Перечисления.ТипыШтрихкодов.Code128;
			ОтображатьТекст = Ложь;

		ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаОбъектаЭксплуатацииЛента
			ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаОбъектаЭксплуатацииБумага
			ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУзлаОбъектаЭксплуатацииЛента
			ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУзлаОбъектаЭксплуатацииБумага
			ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииЛента
			ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииБумага Тогда

			ТипШтрихкода = Перечисления.ТипыШтрихкодов.QR;
			ОтображатьТекст = Ложь;

		Иначе

			ТипШтрихкода = Перечисления.ТипыШтрихкодов.EAN13;
			ОтображатьТекст = Истина;

		КонецЕсли;

	КонецЕсли;

	ШаблоныЭтикетокИЦенниковЛокализация.УстановитьШаблонПоУмолчанию(ЭтотОбъект, Объект, ИмяШаблона);

	ОбразцыШтрихкодов = ПолучитьКоды();
	Для Каждого СтрокаТипыШтрихкода Из ОбразцыШтрихкодов Цикл
		Если СтрокаТипыШтрихкода.ТипШтрихкода = ТипШтрихкода Тогда
			ТипКода = СтрокаТипыШтрихкода.ТипКода;
		КонецЕсли;
	КонецЦикла;

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

	МассивИмени = СтрРазделить(ИмяШаблона, "_");
	Для Каждого Элемент Из МассивИмени Цикл
		МассивРазмера = СтрРазделить(Элемент, "x");
		Если МассивРазмера.Количество() = 2 Тогда
			УстановитьРазмеры(МассивРазмера);
			Прервать;
		Иначе
			МассивРазмера = СтрРазделить(Элемент, "х");
			Если МассивРазмера.Количество() = 2 Тогда
				УстановитьРазмеры(МассивРазмера);
				Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Область Из ПолеТабличногоДокумента.Области Цикл

		Имя = Область.Имя;
		Если СтрНачинаетсяС(ВРег(Имя), ВРег("Штрихкод")) Тогда
			Индекс = ЗаменитьРисунокШтрихкода(Имя);
			ПолеТабличногоДокумента.Рисунки[Индекс].Имя = Имя;
		КонецЕсли;

	КонецЦикла;

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

&НаСервере
Процедура УстановитьРазмеры(МассивРазмера)
	Попытка
		Объект.Ширина = Число(МассивРазмера[0]); 
		Объект.Высота = Число(МассивРазмера[1]); 
	Исключение
	КонецПопытки;
КонецПроцедуры

// Возвращает данные о шаблоне в виде структуры свойств.
//
// Возвращаемое значение:
//  Структура, Неопределено -
//
&НаСервере
Функция СтруктураШаблона()

	СтруктураШаблона = Неопределено;

	Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
		СтруктураШаблона = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "Шаблон").Получить();
	Иначе
		ЗначениеКопирования = Неопределено;
		Параметры.Свойство("ЗначениеКопирования", ЗначениеКопирования);
		Если ЗначениеКопирования <> Неопределено Тогда
			ЗначениеКопированияШаблон = ЗначениеКопирования.Шаблон; // ХранилищеЗначения
			СтруктураШаблона = ЗначениеКопированияШаблон.Получить();
		КонецЕсли;
	КонецЕсли;

	Возврат СтруктураШаблона;

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

&НаСервере
Функция ПодготовитьСтруктуруМакетаШаблона()

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

	Возврат СтруктураМакетаШаблона;

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

&НаСервере
Функция ПроверитьУмещение()

	Ошибка = Ложь;

	МаксимальноеКоличество = МаксимальноеКоличествоЭтикетокНаСтранице();

	Если МаксимальноеКоличество.ПоГоризонтали > 0
			И КоличествоПоГоризонтали > МаксимальноеКоличество.ПоГоризонтали Тогда

		ТекстСообщения = НСтр("ru = 'Максимальное количество по горизонтали: %Количество%'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Количество%", МаксимальноеКоличество.ПоГоризонтали);

		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "КоличествоПоГоризонтали", , Ошибка);

	КонецЕсли;

	Если МаксимальноеКоличество.ПоВертикали > 0
			И КоличествоПоВертикали > МаксимальноеКоличество.ПоВертикали Тогда

		ТекстСообщения = НСтр("ru = 'Максимальное количество по вертикали: %Количество%'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Количество%", МаксимальноеКоличество.ПоВертикали);

		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "КоличествоПоВертикали", , Ошибка);

	КонецЕсли;

	Возврат НЕ Ошибка;

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

&НаСервере
Функция МаксимальноеКоличествоЭтикетокНаСтранице()

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

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

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

	ВыделеннаяОбласть = ПолеТабличногоДокумента.Область(ИмяОбласти);

	НетЛинии = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии, 0);
	РедкийПунктир = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);

	Если ПолеТабличногоДокумента.ОбластьПечати <> Неопределено Тогда
		ПолеТабличногоДокумента.ОбластьПечати.Обвести(НетЛинии, НетЛинии, НетЛинии, НетЛинии);
	КонецЕсли;

	ПолеТабличногоДокумента.ОбластьПечати = ВыделеннаяОбласть;
	ПолеТабличногоДокумента.ОбластьПечати.Обвести(РедкийПунктир, РедкийПунктир, РедкийПунктир, РедкийПунктир);

	ПолеТабличногоДокумента.ОбластьПечати.АвтоВысотаСтроки = Ложь;

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

&НаСервере
Процедура УстановитьКартинкуШтрихкода(РисунокШтрихкода)

	Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
	КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота
		/ 100;

	Если Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляШтрихкодовУпаковок
			И ЗначениеЗаполнено(Объект.ДляЧего) Тогда
		ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.ДляЧего, "ЗначениеШтрихкода, ТипШтрихкода");
		Штрихкод = ЗначенияРеквизитов.ЗначениеШтрихкода;
	КонецЕсли;

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

	ЗначениеШтрихкодаДляКомпоненты = Штрихкод;
	ПечатьЭтикетокИЦенниковЛокализация.МодификацияЗначенияШтрикодаКомпоненты(ЗначениеШтрихкодаДляКомпоненты, ТипКода);

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

&НаСервере
Функция ВставитьРисунокШтрихкода(ИмяТекущейОбласти)

	РисунокШтрихкода = ПолеТабличногоДокумента.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	Индекс = ПолеТабличногоДокумента.Рисунки.Индекс(РисунокШтрихкода);
	РисунокШтрихкода.Расположить(ПолеТабличногоДокумента.Область(ИмяТекущейОбласти));
	РисунокШтрихкода.Имя = ИмяПараметраШтрихкод()
		+ СтрЗаменить(Новый УникальныйИдентификатор, "-", "_");
	РисунокШтрихкода.РазмерКартинки = РазмерКартинки.Растянуть;
	РисунокШтрихкода.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии, 0);

	УстановитьКартинкуШтрихкода(ПолеТабличногоДокумента.Рисунки[Индекс]);

	Возврат Индекс;

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

&НаСервере
Функция ВставитьРисунокЗнакВалюты(ИмяТекущейОбласти)

	Рисунок = ПолеТабличногоДокумента.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	Индекс = ПолеТабличногоДокумента.Рисунки.Индекс(Рисунок);
	Рисунок.Расположить(ПолеТабличногоДокумента.Область(ИмяТекущейОбласти));
	Рисунок.Имя = "ЗнакВалюты"
		+ СтрЗаменить(Новый УникальныйИдентификатор, "-", "_");

	Рисунок.ЦветФона = Новый Цвет;
	Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
	Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
	Рисунок.Картинка = Новый Картинка(Справочники.ШаблоныЭтикетокИЦенников.ПолучитьМакет("ЗнакВалюты643"), Истина);

	Возврат Индекс;

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

&НаСервере
Функция ЗаменитьРисунокШтрихкода(ИмяРисункаИлиРисунок)

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

	РисунокШтрихкода = ПолеТабличногоДокумента.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	РисунокШтрихкода.Верх = РисунокШтрихкодаИсточник.Верх;
	РисунокШтрихкода.Лево = РисунокШтрихкодаИсточник.Лево;
	РисунокШтрихкода.Высота = РисунокШтрихкодаИсточник.Высота;
	РисунокШтрихкода.Ширина = РисунокШтрихкодаИсточник.Ширина;
	РисунокШтрихкода.Имя = РисунокШтрихкодаИсточник.Имя;
	РисунокШтрихкода.Линия = РисунокШтрихкодаИсточник.Линия;
	РисунокШтрихкода.РазмерКартинки = РисунокШтрихкодаИсточник.РазмерКартинки;

	ПолеТабличногоДокумента.Рисунки.Удалить(РисунокШтрихкодаИсточник);

	Индекс = ПолеТабличногоДокумента.Рисунки.Индекс(РисунокШтрихкода);
	УстановитьКартинкуШтрихкода(ПолеТабличногоДокумента.Рисунки[Индекс]);

	Возврат Индекс;

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

&НаСервере
Процедура ОбъединитьОбласть(ИмяОбласти)

	Область = ПолеТабличногоДокумента.Область(ИмяОбласти);
	Область.Объединить();

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

&НаСервере
Процедура РазъединитьОбласть(ИмяОбласти)

	Область = ПолеТабличногоДокумента.Область(ИмяОбласти);
	Область.Разъединить();

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

&НаСервере
Процедура НастроитьШаблон()

	Если ЗначениеЗаполнено(ИмяМакета) Тогда
		УстановитьШаблонПоУмолчанию(ИмяМакета);
	Иначе
		ПолеТабличногоДокумента = Новый ТабличныйДокумент;
		ПолеТабличногоДокумента.ОбластьПечати = ПолеТабличногоДокумента.Область("R2C2:R20C5");
		РедкийПунктир = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.РедкийПунктир, 1);
		ПолеТабличногоДокумента.ОбластьПечати.Обвести(РедкийПунктир, РедкийПунктир, РедкийПунктир, РедкийПунктир);

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

		Элементы.ОтображатьТекст.Доступность = Истина;
		Элементы.ТипКода.Доступность = Истина;
	КонецЕсли;

	Элементы.РазмерШрифта.Доступность = ОтображатьТекст;

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

// Параметры:
// 	Коллекция - КоллекцияДоступныхПолейКомпоновкиДанных - Описание
// 	СтруктураПоля - Произвольный - Описание
// 	Дерево - ДеревоЗначений - содержит в том числе:
// 		* Описание - Строка - 
&НаСервере
Процедура ЗаполнитьДоступныеПоля()

	УстановитьПривилегированныйРежим(Истина);

	СхемаКомпоновкиДанных = Неопределено;
	ШаблоныЭтикетокИЦенниковЛокализация.ПриЗаполненииСхемыКомпоновкиДанных(СхемаКомпоновкиДанных, Объект.Назначение);

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

	КонецЕсли;


	ИменаПолей = Новый Массив;
	ШаблоныЭтикетокИЦенниковЛокализация.ПриЗаполненииДоступныхПолейКомпоновкиДанных(ИменаПолей, Объект.Назначение);

	Если Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляСкладскихЯчеек Тогда

		ИменаПолей.Добавить("Штрихкод");

		ИменаПолей.Добавить("Ячейка");
		ИменаПолей.Добавить("Ячейка.Код");
		ИменаПолей.Добавить("Ячейка.Родитель");
		ИменаПолей.Добавить("Ячейка.Линия");
		ИменаПолей.Добавить("Ячейка.Наименование");
		ИменаПолей.Добавить("Ячейка.Позиция");
		ИменаПолей.Добавить("Ячейка.ПорядокОбхода");
		ИменаПолей.Добавить("Ячейка.РабочийУчасток");
		ИменаПолей.Добавить("Ячейка.Секция");
		ИменаПолей.Добавить("Ячейка.Владелец");
		ИменаПолей.Добавить("Ячейка.Стеллаж");
		ИменаПолей.Добавить("Ячейка.Ярус");

	ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЦенникДляТоваров
			ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляТоваров Тогда

		ИменаПолей.Добавить("Штрихкод");

		ИменаПолей.Добавить("ВидЦены");
		ИменаПолей.Добавить("ВидЦены.ВалютаЦены");
		ИменаПолей.Добавить("ВидЦены.Наименование");
		ИменаПолей.Добавить("ВидЦены.ЦенаВключаетНДС");
		ИменаПолей.Добавить("Цена");
		ИменаПолей.Добавить("ДатаПоследнегоИзмененияЦены");

		ИменаПолей.Добавить("ВидЦеныДополнительно");
		ИменаПолей.Добавить("ВидЦеныДополнительно.ВалютаЦены");
		ИменаПолей.Добавить("ВидЦеныДополнительно.Наименование");
		ИменаПолей.Добавить("ВидЦеныДополнительно.ЦенаВключаетНДС");
		ИменаПолей.Добавить("ЦенаДополнительно");
		ИменаПолей.Добавить("ДатаПоследнегоИзмененияЦеныДополнительно");

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

		ИменаПолей.Добавить("Весовой");
		ИменаПолей.Добавить("КодПодключаемогоОборудованияOffline");
		ИменаПолей.Добавить("PLU");
		ИменаПолей.Добавить("Организация");
		ИменаПолей.Добавить("ТекущееВремя");
		ИменаПолей.Добавить("ТекущийПользователь");
		ИменаПолей.Добавить("УпаковкаЕдиницаИзмерения");
		ИменаПолей.Добавить("СтавкаНДС");

	ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаДляДоставки Тогда

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

		ИменаПолей.Добавить("Распоряжение.Автор");
		ИменаПолей.Добавить("Распоряжение.АдресДоставки");
		ИменаПолей.Добавить("Распоряжение.БанковскийСчетГрузоотправителя");
		ИменаПолей.Добавить("Распоряжение.БанковскийСчетГрузополучателя");
		ИменаПолей.Добавить("Распоряжение.БанковскийСчетКонтрагента");
		ИменаПолей.Добавить("Распоряжение.БанковскийСчетОрганизации");
		ИменаПолей.Добавить("Распоряжение.Валюта");
		ИменаПолей.Добавить("Распоряжение.ВалютаВзаиморасчетов");
		ИменаПолей.Добавить("Распоряжение.ВидЦены");
		ИменаПолей.Добавить("Распоряжение.ВидыЗапасов");
		ИменаПолей.Добавить("Распоряжение.Грузоотправитель");
		ИменаПолей.Добавить("Распоряжение.Грузополучатель");
		ИменаПолей.Добавить("Распоряжение.Дата");
		ИменаПолей.Добавить("Распоряжение.ДоверенностьДата");
		ИменаПолей.Добавить("Распоряжение.ДатаПлатежа");
		ИменаПолей.Добавить("Распоряжение.Договор");
		ИменаПолей.Добавить("Распоряжение.ОтпустилДолжность");
		ИменаПолей.Добавить("Распоряжение.КартаЛояльности");
		ИменаПолей.Добавить("Распоряжение.Касса");
		ИменаПолей.Добавить("Распоряжение.ДоверенностьВыдана");
		ИменаПолей.Добавить("Распоряжение.Партнер,Свойства");
		ИменаПолей.Добавить("Распоряжение.Комментарий");
		ИменаПолей.Добавить("Распоряжение.ДоверенностьЛицо");
		ИменаПолей.Добавить("Распоряжение.Менеджер");
		ИменаПолей.Добавить("Распоряжение.НалогообложениеНДС");
		ИменаПолей.Добавить("Распоряжение.Номер");
		ИменаПолей.Добавить("Распоряжение.ДоверенностьНомер");
		ИменаПолей.Добавить("Распоряжение.ХозяйственнаяОперация");
		ИменаПолей.Добавить("Распоряжение.Организация");
		ИменаПолей.Добавить("Распоряжение.Основание");
		ИменаПолей.Добавить("Распоряжение.Ответственный");
		ИменаПолей.Добавить("Распоряжение.Отпустил");
		ИменаПолей.Добавить("Распоряжение.Подразделение");
		ИменаПолей.Добавить("Распоряжение.Склад");
		ИменаПолей.Добавить("Распоряжение.СкладОтправитель");
		ИменаПолей.Добавить("Распоряжение.СкладПолучатель");
		ИменаПолей.Добавить("Распоряжение.Согласован");
		ИменаПолей.Добавить("Распоряжение.Соглашение");
		ИменаПолей.Добавить("Распоряжение.СуммаВзаиморасчетов");
		ИменаПолей.Добавить("Распоряжение.СуммаДокумента");
		ИменаПолей.Добавить("Распоряжение.ФормаОплаты");
		ИменаПолей.Добавить("Распоряжение.ЦенаВключаетНДС");

	ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры Тогда

		ИменаПолей.Добавить("Штрихкод");
		ИменаПолей.Добавить("Серия.ВидНоменклатуры");
		ИменаПолей.Добавить("Серия.ГоденДо");
		ИменаПолей.Добавить("Серия.Наименование");
		ИменаПолей.Добавить("Серия.Номер");
		ИменаПолей.Добавить("Серия,Свойства");

	ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаУпаковочныхЛистов Тогда

		ИменаПолей.Добавить("Штрихкод");
		ИменаПолей.Добавить("Код");
		ИменаПолей.Добавить("Основание");

		ИменаПолей.Добавить("УпаковочныйЛист.Код");
		ИменаПолей.Добавить("УпаковочныйЛист.СкладУпаковки");
		ИменаПолей.Добавить("УпаковочныйЛист.Вид");
		ИменаПолей.Добавить("УпаковочныйЛист.Упаковал");
		ИменаПолей.Добавить("УпаковочныйЛист.Основание");
		ИменаПолей.Добавить("УпаковочныйЛист.Комментарий");
		ИменаПолей.Добавить("УпаковочныйЛист.ВсегоМест");

	ИначеЕсли Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииЛента
		ИЛИ Объект.Назначение = Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаТМЦВЭксплуатацииБумага Тогда

		ИменаПолей = Новый Массив;
		ИменаПолей.Добавить("ИнвентарныйНомер");

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

		ИменаПолей.Добавить("Характеристика.Наименование");
		ИменаПолей.Добавить("Характеристика.НаименованиеПолное");
		ИменаПолей.Добавить("Характеристика.Владелец");
		ИменаПолей.Добавить("Характеристика,Свойства");
		
		ИменаПолей.Добавить("Серия.Наименование");
		ИменаПолей.Добавить("Серия.ГоденДо");
		ИменаПолей.Добавить("Серия.Номер");
		ИменаПолей.Добавить("Серия,Свойства");

		ИменаПолей.Добавить("Партия.Наименование");
		ИменаПолей.Добавить("Партия.КатегорияЭксплуатации");
		ИменаПолей.Добавить("Партия.СрокЭксплуатации");
		ИменаПолей.Добавить("Партия.ДатаНачалаЭксплуатации");
		ИменаПолей.Добавить("Партия.ДатаЗавершенияЭксплуатации");


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

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

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

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

&НаСервере
Процедура УстановитьРазмер(ШиринаОбластиВМиллиметрах,
		ВысотаОбластиВМиллиметрах, РазмерЯчейкиВМиллиметрах)

	ЭталонРазмеров = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("ЭталонРазмерыЯчеек");
	Картинка = ЭталонРазмеров.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	Картинка.Расположить(ЭталонРазмеров.Область("R1C1:R100C100"));
	ВысотаКартинкиВМиллиметрах = Картинка.Высота;
	ШиринаКартинкиВМиллиметрах = Картинка.Ширина;

	ВысотаВМиллиметрахЯчейкиВысотой0_25 = ВысотаКартинкиВМиллиметрах / 100;
	ШиринаВМиллиметрахЯчейкиШириной0_125 = (ШиринаКартинкиВМиллиметрах / 100)
		/ 4;

	МинимальныйШагУстановкиШирины = 0.125;
	МинимальныйШагУстановкиВысоты = 0.25;

	КоличествоШаговВМиллиметреПоВысоте = 0;
	Пока КоличествоШаговВМиллиметреПоВысоте
		* ВысотаВМиллиметрахЯчейкиВысотой0_25 < 1 Цикл
		КоличествоШаговВМиллиметреПоВысоте = КоличествоШаговВМиллиметреПоВысоте + 1;
	КонецЦикла;
	КоличествоШаговВМиллиметреПоВысоте = КоличествоШаговВМиллиметреПоВысоте - 1;

	КоличествоШаговВМиллиметреПоШирине = 0;
	Пока КоличествоШаговВМиллиметреПоШирине
		* ШиринаВМиллиметрахЯчейкиШириной0_125 < 1 Цикл
		КоличествоШаговВМиллиметреПоШирине = КоличествоШаговВМиллиметреПоШирине + 1;
	КонецЦикла;
	КоличествоШаговВМиллиметреПоШирине = КоличествоШаговВМиллиметреПоШирине - 1;

	ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел;
	ПолеТабличногоДокумента.Очистить();

	КоличествоЯчеекПоШирине = Цел(ШиринаОбластиВМиллиметрах
		/ РазмерЯчейкиВМиллиметрах);
	КоличествоЯчеекПоВысоте = Цел(ВысотаОбластиВМиллиметрах
		/ РазмерЯчейкиВМиллиметрах);

	ШиринаДокумента = 1 + КоличествоЯчеекПоШирине;
	ВысотаДокумента = 1 + КоличествоЯчеекПоВысоте;

	Для НомерКолонки = 2 По ШиринаДокумента Цикл
	// Минимальный шаг установки ширины = 0.125
	// 1 ячейка при ширине 0.5 занимает 0,97 мм.
		ИмяОбласти = "C" + НомерКолонки;
		ПолеТабличногоДокумента.Область(ИмяОбласти).ШиринаКолонки = (МинимальныйШагУстановкиШирины
			* КоличествоШаговВМиллиметреПоШирине) * РазмерЯчейкиВМиллиметрах;
	КонецЦикла;

	Для НомерСтроки = 2 По ВысотаДокумента Цикл
	// Минимальный шаг установки высоты = 0.25
	// 1 ячейка при ширине 2.75 занимает 0,97 мм.
		ИмяОбласти = "R" + НомерСтроки;
		ПолеТабличногоДокумента.Область(ИмяОбласти).АвтоВысотаСтроки = Ложь;
		ПолеТабличногоДокумента.Область(ИмяОбласти).ВысотаСтроки = (МинимальныйШагУстановкиВысоты
			* КоличествоШаговВМиллиметреПоВысоте) * РазмерЯчейкиВМиллиметрах;
	КонецЦикла;

	ИмяОбластиПечати = "R2C2" + ":" + "R" + Формат(ВысотаДокумента, "ЧГ=0") + "C"
		+ Формат(ШиринаДокумента, "ЧГ=0");
	ПолеТабличногоДокумента.Область("R1C1:" + "R" + 200 + "C"
		+ 200).ЦветФона = WebЦвета.Серый;
	ПолеТабличногоДокумента.Область(ИмяОбластиПечати).ЦветФона = Новый Цвет;
	УстановитьОбластьПечатиНаСервере(ИмяОбластиПечати);

	ИндексКартинки = ВставитьРисунокШтрихкода(ИмяОбластиПечати);
	ФактическаяШиринаВМиллиметрах = ПолеТабличногоДокумента.Рисунки[ИндексКартинки].Ширина;
	ФактическаяВысотаВМиллиметрах = ПолеТабличногоДокумента.Рисунки[ИндексКартинки].Высота;

	// Выполним подгонку для более точного соответствия реальным значениям.
	НедостающаяШиринаВМиллиметрах = ШиринаОбластиВМиллиметрах
		- ФактическаяШиринаВМиллиметрах;
	КоличествоЯчеекДляИзмененияШирины = Цел(НедостающаяШиринаВМиллиметрах
		/ ((ФактическаяШиринаВМиллиметрах / ШиринаОбластиВМиллиметрах)
		/ КоличествоШаговВМиллиметреПоШирине));

	Коэффициент = 1;
	КоличествоИзмененныхЯчеек = 0;
	Пока КоличествоЯчеекДляИзмененияШирины > 0 Цикл // -1 для того что бы не превысить реальные требуемые значения
		НомерКолонки = ГенераторСлучайныхЧисел.СлучайноеЧисло(2, ШиринаДокумента);
		ИмяОбласти = "C" + НомерКолонки;
		Если ПолеТабличногоДокумента.Область(ИмяОбласти).ШиринаКолонки = (МинимальныйШагУстановкиШирины
				* КоличествоШаговВМиллиметреПоШирине) * РазмерЯчейкиВМиллиметрах
				+ МинимальныйШагУстановкиШирины * (Коэффициент - 1) Тогда
			ПолеТабличногоДокумента.Область(ИмяОбласти).ШиринаКолонки = (МинимальныйШагУстановкиШирины
				* КоличествоШаговВМиллиметреПоШирине) * РазмерЯчейкиВМиллиметрах
				+ МинимальныйШагУстановкиШирины * Коэффициент;
			КоличествоЯчеекДляИзмененияШирины = КоличествоЯчеекДляИзмененияШирины - 1;

			КоличествоИзмененныхЯчеек = КоличествоИзмененныхЯчеек + 1;
		КонецЕсли;

		Если КоличествоИзмененныхЯчеек = КоличествоЯчеекПоШирине Тогда
			КоличествоИзмененныхЯчеек = 0;
			Коэффициент = Коэффициент + 1;
		КонецЕсли;

		Если КоличествоЯчеекДляИзмененияШирины = 0 Тогда
			ФактическаяШиринаВМиллиметрах = ПолеТабличногоДокумента.Рисунки[ИндексКартинки].Ширина;
			НедостающаяШиринаВМиллиметрах = ШиринаОбластиВМиллиметрах
				- ФактическаяШиринаВМиллиметрах;
			КоличествоЯчеекДляИзмененияШирины = Цел(НедостающаяШиринаВМиллиметрах
				/ ((ФактическаяШиринаВМиллиметрах / ШиринаОбластиВМиллиметрах)
				/ КоличествоШаговВМиллиметреПоШирине));
		КонецЕсли;

	КонецЦикла;

	// Выполним подгонку для более точного соответствия реальным значениям.
	НедостающаяВысотаВМиллиметрах = ВысотаОбластиВМиллиметрах
		- ФактическаяВысотаВМиллиметрах;
	КоличествоЯчеекДляИзмененияВысоты = Цел(НедостающаяВысотаВМиллиметрах
		/ ((ФактическаяВысотаВМиллиметрах / ВысотаОбластиВМиллиметрах)
		/ КоличествоШаговВМиллиметреПоВысоте));

	Коэффициент = 1;
	КоличествоИзмененныхЯчеек = 0;
	Пока КоличествоЯчеекДляИзмененияВысоты > 0 Цикл // -1 для того что бы не превысить реальные требуемые значения
		НомерСтроки = ГенераторСлучайныхЧисел.СлучайноеЧисло(2, ВысотаДокумента);
		ИмяОбласти = "R" + НомерСтроки;
		Если ПолеТабличногоДокумента.Область(ИмяОбласти).ВысотаСтроки = (МинимальныйШагУстановкиВысоты
				* КоличествоШаговВМиллиметреПоВысоте) * РазмерЯчейкиВМиллиметрах
				+ МинимальныйШагУстановкиВысоты * (Коэффициент - 1) Тогда
			ПолеТабличногоДокумента.Область(ИмяОбласти).ВысотаСтроки = (МинимальныйШагУстановкиВысоты
				* КоличествоШаговВМиллиметреПоВысоте) * РазмерЯчейкиВМиллиметрах
				+ МинимальныйШагУстановкиВысоты * Коэффициент;
			КоличествоЯчеекДляИзмененияВысоты = КоличествоЯчеекДляИзмененияВысоты - 1;

			КоличествоИзмененныхЯчеек = КоличествоИзмененныхЯчеек + 1;
		КонецЕсли;

		Если КоличествоИзмененныхЯчеек = КоличествоЯчеекПоВысоте Тогда
			КоличествоИзмененныхЯчеек = 0;
			Коэффициент = Коэффициент + 1;
		КонецЕсли;

		Если КоличествоЯчеекДляИзмененияВысоты = 0 Тогда
			ФактическаяВысотаВМиллиметрах = ПолеТабличногоДокумента.Рисунки[ИндексКартинки].Высота;
			НедостающаяВысотаВМиллиметрах = ВысотаОбластиВМиллиметрах
				- ФактическаяВысотаВМиллиметрах;
			КоличествоЯчеекДляИзмененияВысоты = Цел(НедостающаяВысотаВМиллиметрах
				/ ((ФактическаяВысотаВМиллиметрах / ВысотаОбластиВМиллиметрах)
				/ КоличествоШаговВМиллиметреПоВысоте));
		КонецЕсли;

	КонецЦикла;

	ПолеТабличногоДокумента.Рисунки.Удалить(ПолеТабличногоДокумента.Рисунки[ИндексКартинки]);

	РассчитатьМаксимальноеКоличествоНаСтранице();

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

&НаСервере
Функция ДополнитьПараметрыДляПечатиОбразца(ПараметрыПечати)

	ПараметрыПечати.Вставить("СтруктураМакетаШаблона", ПодготовитьСтруктуруМакетаШаблона());

	Возврат ПараметрыПечати;

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

&НаСервере
Функция ПолучитьПараметрыДляПечатиОбразцаЭтикеткиТовара()

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

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

&НаСервере
Функция ПолучитьПараметрыДляПечатиОбразцаЦенникаТовара()

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

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

&НаСервере
Функция ПолучитьПараметрыДляПечатиОбразцаЭтикеткиСкладскойЯчейки()

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

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

&НаСервере
Функция ПолучитьПараметрыДляПечатиОбразцаЭтикеткиДоставки()

	МассивОбъектов = Новый Массив;
	МассивОбъектов.Добавить(Объект.ДляЧего);

	ПараметрыПечати = Обработки.ПечатьЭтикетокИЦенников.ДанныеДляПечатиЭтикетокДоставки(МассивОбъектов);
	Возврат ДополнитьПараметрыДляПечатиОбразца(ПараметрыПечати);

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

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

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

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

&НаСервере
Функция ПолучитьПараметрыДляПечатиОбразцаЭтикеткиСерииНоменклатуры()

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

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

//++ Локализация

&НаСервере
Функция ПолучитьПараметрыДляПечатиОбразцаЭтикеткиТМЦВЭксплуатации()

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

	Возврат ДополнитьПараметрыДляПечатиОбразца(ПараметрыПечати);

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

//-- Локализация



&НаКлиенте
Процедура ПолеТабличногоДокументаПеретаскивание(Элемент,
		ПараметрыПеретаскивания, СтандартнаяОбработка, Область)

	СтандартнаяОбработка = Ложь;

	ПодставитьПолеШаблона(Область, Элементы.ДоступныеПоляКомпоновкиДанных.ТекущаяСтрока);

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

&НаКлиенте
Функция ПредставлениеЛинии(Линия)

	Если Линия <> Неопределено Тогда
		Результат = Строка(Линия.ТипЛинии) + ", "
			+ Строка(?(Линия.Толщина = 0, 1, Линия.Толщина))
	Иначе
		Результат = "";
	КонецЕсли;

	Возврат Результат;

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

&НаКлиенте
Процедура ЗаполнитьТаблицуСвойств()

	ВыделеннаяОбласть = ПолеТабличногоДокумента.ТекущаяОбласть;
	СвойстваЯчеек.Очистить();

	Если ТипЗнч(ВыделеннаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Разделитель";
		НоваяСтрока.Представление = НСтр("ru = 'Оформление'");
		НоваяСтрока.Значение = НСтр("ru = 'Разделитель'");

		// Шрифт и цвет
		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Шрифт";
		НоваяСтрока.Представление = НСтр("ru = 'Шрифт'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.Шрифт;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ЦветФона";
		НоваяСтрока.Представление = НСтр("ru = 'Цвет фона'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.ЦветФона;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ЦветТекста";
		НоваяСтрока.Представление = НСтр("ru = 'Цвет текста'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.ЦветТекста;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ОриентацияТекста";
		НоваяСтрока.Представление = НСтр("ru = 'Ориентация текста'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.ОриентацияТекста;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Разделитель";
		НоваяСтрока.Представление = НСтр("ru = 'Границы'");
		НоваяСтрока.Значение = НСтр("ru = 'Разделитель'");

		// Границы
		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ГраницаСлева";
		НоваяСтрока.Представление = НСтр("ru = 'Граница слева'");
		НоваяСтрока.Значение = ПредставлениеЛинии(ВыделеннаяОбласть.ГраницаСлева);

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ГраницаСверху";
		НоваяСтрока.Представление = НСтр("ru = 'Граница сверху'");
		НоваяСтрока.Значение = ПредставлениеЛинии(ВыделеннаяОбласть.ГраницаСверху);

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ГраницаСправа";
		НоваяСтрока.Представление = НСтр("ru = 'Граница справа'");
		НоваяСтрока.Значение = ПредставлениеЛинии(ВыделеннаяОбласть.ГраницаСправа);

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "ГраницаСнизу";
		НоваяСтрока.Представление = НСтр("ru = 'Граница снизу'");
		НоваяСтрока.Значение = ПредставлениеЛинии(ВыделеннаяОбласть.ГраницаСнизу);

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Разделитель";
		НоваяСтрока.Представление = НСтр("ru = 'Заполнение'");
		НоваяСтрока.Значение = НСтр("ru = 'Разделитель'");

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Заполнение";
		НоваяСтрока.Представление = НСтр("ru = 'Заполнение'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.Заполнение;

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

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Формат";
		НоваяСтрока.Представление = НСтр("ru = 'Формат'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.Формат;
		НоваяСтрока.ТолькоПросмотр = (ВыделеннаяОбласть.Заполнение <> ТипЗаполненияОбластиТабличногоДокумента.Параметр);

	ИначеЕсли ТипЗнч(ВыделеннаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда

		Если ВыделеннаяОбласть.ТипРисунка = ТипРисункаТабличногоДокумента.Текст
				ИЛИ ВыделеннаяОбласть.ТипРисунка = ТипРисункаТабличногоДокумента.Примечание Тогда
			Возврат;
		КонецЕсли;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Разделитель";
		НоваяСтрока.Представление = НСтр("ru = 'Параметры штрихкода'");
		НоваяСтрока.Значение = НСтр("ru = 'Разделитель'");

		Если СтрНайти(ВыделеннаяОбласть.Имя, "Штрихкод") > 0 Тогда

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "ТипКода";
			НоваяСтрока.Представление = НСтр("ru = 'Тип штрихкода'");
			ЭлементСписка = СписокТипКода.НайтиПоЗначению(ТипШтрихкода);
			НоваяСтрока.Значение = ЭлементСписка.Представление;

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "ОтображатьТекст";
			НоваяСтрока.Представление = НСтр("ru = 'Отображать текст'");
			НоваяСтрока.Значение = ОтображатьТекст;

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "РазмерШрифта";
			НоваяСтрока.Представление = НСтр("ru = 'Размер шрифта'");
			НоваяСтрока.Значение = РазмерШрифта;
			НоваяСтрока.ТолькоПросмотр = Не ОтображатьТекст;

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "МонохромныйШрифт";
			НоваяСтрока.Представление = НСтр("ru = 'Тип шрифта'");
			НоваяСтрока.ТолькоПросмотр = Не ОтображатьТекст;
			ЭлементСписка = СписокМонохромныйШрифт.НайтиПоЗначению(МонохромныйШрифт);
			НоваяСтрока.Значение = ЭлементСписка.Представление;

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "УровеньЧеткости";
			НоваяСтрока.Представление = НСтр("ru = 'Уровень четкости'");
			ЭлементСписка = СписокУровеньЧеткости.НайтиПоЗначению(УровеньЧеткости);
			НоваяСтрока.Значение = ЭлементСписка.Представление;

			Если ТипКода = 17 Тогда

				НоваяСтрока = СвойстваЯчеек.Добавить();
				НоваяСтрока.ИмяСвойства = "GS1DatabarКоличествоСтрок";
				НоваяСтрока.Представление = НСтр("ru = 'Количество строк'");
				ЭлементСписка = СписокGS1DatabarКоличествоСтрок.НайтиПоЗначению(GS1DatabarКоличествоСтрок);
				НоваяСтрока.Значение = ЭлементСписка.Представление;

			КонецЕсли;

			Если ТипКода = 17 Или ТипКода = 6 Или ТипКода = 18 Или ТипКода = 24 Тогда

				НоваяСтрока = СвойстваЯчеек.Добавить();
				НоваяСтрока.ИмяСвойства = "ВертикальноеВыравнивание";
				НоваяСтрока.Представление = НСтр("ru = 'Вертикальное выравнивание'");
				ЭлементСписка = СписокВертикальноеВыравнивание.НайтиПоЗначению(ВертикальноеВыравнивание);
				НоваяСтрока.Значение = ЭлементСписка.Представление;

			КонецЕсли;

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "УголПоворота";
			НоваяСтрока.Представление = НСтр("ru = 'Угол поворота'");
			ЭлементСписка = СписокУголПоворота.НайтиПоЗначению(УголПоворота);
			НоваяСтрока.Значение = ЭлементСписка.Представление;

			Если Не Масштабировать Тогда
				ВариантМасштабирования = "РеальныйРазмер";
			ИначеЕсли Масштабировать И СохранятьПропорции Тогда
				ВариантМасштабирования = "МасштабироватьСохранятьПропорции";
			Иначе
				ВариантМасштабирования = "МасштабироватьНеСохранятьПропорции";
			КонецЕсли;

			НоваяСтрока = СвойстваЯчеек.Добавить();
			НоваяСтрока.ИмяСвойства = "ВариантМасштабирования";
			НоваяСтрока.Представление = НСтр("ru = 'Масштабирование'");
			ЭлементСписка = СписокВариантМасштабирования.НайтиПоЗначению(ВариантМасштабирования);
			НоваяСтрока.Значение = ЭлементСписка.Представление;

		КонецЕсли;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Имя";
		НоваяСтрока.Представление = НСтр("ru = 'Имя'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.Имя;

#Если НЕ ВебКлиент Тогда
		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Высота";
		НоваяСтрока.Представление = НСтр("ru = 'Высота'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.Высота;

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Ширина";
		НоваяСтрока.Представление = НСтр("ru = 'Ширина'");
		НоваяСтрока.Значение = ВыделеннаяОбласть.Ширина;
#КонецЕсли

		НоваяСтрока = СвойстваЯчеек.Добавить();
		НоваяСтрока.ИмяСвойства = "Линия";
		НоваяСтрока.Представление = НСтр("ru = 'Линия'");
		НоваяСтрока.Значение = ПредставлениеЛинии(ВыделеннаяОбласть.Линия);

	КонецЕсли;

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

&НаКлиенте
Процедура ПолеТабличногоДокументаПриАктивизацииОбласти(Элемент)

	ПодключитьОбработчикОжидания("ЗаполнитьТаблицуСвойств", 0.1, Истина);

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

&НаКлиенте
Процедура НастроитьЛинию(ВыделеннаяОбласть, ТекущиеДанные)

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ТипЛинии", ВыделеннаяОбласть[ТекущиеДанные.ИмяСвойства].ТипЛинии);
	ПараметрыФормы.Вставить("Толщина", ВыделеннаяОбласть[ТекущиеДанные.ИмяСвойства].Толщина);
	
	ДопПараметры = Новый Структура("ВыделеннаяОбласть, ТекущиеДанные", ВыделеннаяОбласть, ТекущиеДанные);
	ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьЛиниюЗавершение", ЭтотОбъект, ДопПараметры);
	ОткрытьФорму("Справочник.ШаблоныЭтикетокИЦенников.Форма.ФормаВыбораТипаЛинии", ПараметрыФормы, , , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

&НаКлиенте
Процедура НастроитьЛиниюЗавершение(Результат, ДополнительныеПараметры) Экспорт

	ВыделеннаяОбласть = ДополнительныеПараметры.ВыделеннаяОбласть;
	ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные;

	Если Результат <> Неопределено Тогда

		ВыделеннаяОбласть[ТекущиеДанные.ИмяСвойства] = Новый Линия(Результат.ТипЛинии, Результат.Толщина);
		ЗаполнитьТаблицуСвойств();

	КонецЕсли;

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

&НаКлиентеНаСервереБезКонтекста
Функция ТекущийРазмерСтраницы(Форма)

	ТекущийРазмер = "ПолеСверху:" + Форма.ПолеТабличногоДокумента.ПолеСверху
		+ "ПолеСнизу:" + Форма.ПолеТабличногоДокумента.ПолеСнизу + "ПолеСлева:"
		+ Форма.ПолеТабличногоДокумента.ПолеСлева + "ПолеСправа:"
		+ Форма.ПолеТабличногоДокумента.ПолеСправа + "Размер:"
		+ РазмерСтраницы(Форма.ПолеТабличногоДокумента);

	Возврат ТекущийРазмер;

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

&НаКлиенте
Процедура ОбновитьРазмещение()

	ТекущийРазмер = ТекущийРазмерСтраницы(ЭтаФорма);

	Если ТекущийРазмер <> РазмерСтраницы Тогда
		РазмерСтраницы = ТекущийРазмер;
		РассчитатьМаксимальноеКоличествоНаСтранице();
	КонецЕсли;

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

&НаКлиенте
Процедура ПодставитьПолеШаблона(Область, ВыбраннаяСтрока)

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

	// Подготовка данных.
	ТекущиеДанные = ДоступныеПоляКомпоновкиДанных.НайтиПоИдентификатору(ВыбраннаяСтрока);
	ИмяПоляВШаблоне = ТекущиеДанные.ПолныйИдентификаторСтроки;

	// Размещение поля в шаблоне.
	Если ИмяПоляВШаблоне = ИмяПараметраШтрихкод()
			ИЛИ ИмяПоляВШаблоне = ИмяПараметраКодАкцизнойМарки() Тогда

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

	ИначеЕсли ИмяПоляВШаблоне = ИмяПараметраВалютаЦены() Тогда

		Кнопки = Новый СписокЗначений;
		Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Знак валюты'"));
		Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Текст'"));

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

	Иначе

		ТекущаяОбласть.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон;
		ТекущаяОбласть.Текст = ТекущаяОбласть.Текст + "[" + ИмяПоляВШаблоне + "]";

	КонецЕсли;

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

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

	ИмяПоляВШаблоне = ДополнительныеПараметры.ИмяПоляВШаблоне;
	ТекущаяОбласть = ДополнительныеПараметры.ТекущаяОбласть;

	Ответ = РезультатВопроса;
	Если Ответ = КодВозвратаДиалога.Да Тогда

		Если ИмяПоляВШаблоне = ИмяПараметраШтрихкод()
				ИЛИ ИмяПоляВШаблоне = ИмяПараметраКодАкцизнойМарки() Тогда
			ВставитьРисунокШтрихкода(ТекущаяОбласть.Имя);
		ИначеЕсли ИмяПоляВШаблоне = ИмяПараметраВалютаЦены() Тогда
			ВставитьРисунокЗнакВалюты(ТекущаяОбласть.Имя);
		КонецЕсли;

	Иначе

		ТекущаяОбласть.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон;
		ТекущаяОбласть.Текст = ТекущаяОбласть.Текст + "[" + ИмяПоляВШаблоне + "]";

	КонецЕсли;

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

&НаКлиенте
Процедура ВыборДоступногоПоля(ВыбраннаяСтрока)

	ПодставитьПолеШаблона(ПолеТабличногоДокумента.ТекущаяОбласть, ВыбраннаяСтрока);

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

&НаСервереБезКонтекста
Процедура НазначитьШаблонЭтикеткиУпаковочногоЛистаОсновным(Шаблон)

	Константы.ШаблонЭтикеткиУпаковочногоЛиста.Установить(Шаблон);

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

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

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

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