Печать этикеток ТМЦ в эксплуатации / Модуль менеджера

файл

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область Серии

// Имена реквизитов, от значений которых зависят параметры указания серий
//
//	Возвращаемое значение:
//		Строка - имена реквизитов, перечисленные через запятую.
//
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
	
	ИменаРеквизитов = "";
	
	Возврат ИменаРеквизитов;
	
КонецФункции

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

// Возвращает текст запроса для расчета статусов указания серий
// 
// Параметры:
//	ПараметрыУказанияСерий - см. ПараметрыУказанияСерий
//		
// Возвращаемое значение:
//	Строка - текст запроса.
//
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
	
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.Характеристика КАК Характеристика,
	|	Товары.Серия КАК Серия,
	|	Товары.СтатусУказанияСерий КАК СтатусУказанияСерий,
	|	Товары.НомерСтроки КАК НомерСтроки
	|ПОМЕСТИТЬ Товары
	|ИЗ
	|	&Товары КАК Товары
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.Номенклатура,
	|	Товары.Характеристика,
	|	Товары.Серия,
	|	ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры КАК ВидНоменклатуры
	|ПОМЕСТИТЬ ТоварыДляЗапроса
	|ИЗ
	|	Товары КАК Товары
	|
	|СГРУППИРОВАТЬ ПО
	|	Товары.Номенклатура,
	|	Товары.Характеристика,
	|	Товары.Серия,
	|	ВЫРАЗИТЬ(Товары.Номенклатура КАК Справочник.Номенклатура).ВидНоменклатуры
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.СтатусУказанияСерий КАК СтарыйСтатусУказанияСерий,
	|
	|	ВЫБОР
	|		КОГДА ТоварыДляЗапроса.ВидНоменклатуры.ПолитикаУчетаСерий ЕСТЬ NULL
	|			ТОГДА 0
	|		КОГДА ТоварыДляЗапроса.ВидНоменклатуры.ПолитикаУчетаСерий.УчитыватьСерииТМЦВЭксплуатации
	|			ТОГДА
	|				ВЫБОР
	|					КОГДА Товары.Серия <> ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)
	|						ТОГДА 18
	|					ИНАЧЕ 17
	|				КОНЕЦ
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК СтатусУказанияСерий
	|
	|ПОМЕСТИТЬ Статусы
	|
	|ИЗ
	|	Товары КАК Товары
	|
	|		ЛЕВОЕ СОЕДИНЕНИЕ ТоварыДляЗапроса КАК ТоварыДляЗапроса
	|		ПО Товары.Номенклатура = ТоварыДляЗапроса.Номенклатура
	|			И Товары.Характеристика = ТоварыДляЗапроса.Характеристика
	|			И Товары.Серия = ТоварыДляЗапроса.Серия
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Статусы.НомерСтроки КАК НомерСтроки,
	|	Статусы.СтатусУказанияСерий КАК СтатусУказанияСерий
	|ИЗ
	|	Статусы КАК Статусы
	|ГДЕ
	|	Статусы.СтатусУказанияСерий <> Статусы.СтарыйСтатусУказанияСерий
	|
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";
	
	Возврат ТекстЗапроса;
	
КонецФункции

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

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

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

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

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

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

#КонецЕсли

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