// Процедура осуществляет печать документа.
//
функция Печать() экспорт
	БезУслуг = Ложь;
 
	ЕдиницаИзмеренияВеса = Константы.ЕдиницаИзмеренияВеса.Получить();
 
	ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
	если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул тогда
		ТоварКод = "Артикул";
	иначе
		ТоварКод = "Код";
	конецесли;
 
	Запрос = новый Запрос;
	Запрос.УстановитьПараметр("ДатаСреза",          СсылкаНаОбъект.Дата);
	Запрос.УстановитьПараметр("СтруктурнаяЕдиница", СсылкаНаОбъект.Склад);
	Запрос.УстановитьПараметр("ТекущийДокумент",    СсылкаНаОбъект.Ссылка);
	Запрос.УстановитьПараметр("ПустойКонтрагент",   Справочники.Контрагенты.ПустаяСсылка());
 
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Номер,
	|	Дата КАК ДатаДокумента,
	|	Организация,
	|	Организация КАК ЮрФизЛицо,
	|	Организация КАК Поставщик,
	|	Организация КАК Контрагент,
	|	Организация КАК Руководители,
	|	АдресДоставки КАК АдресДоставки,
	|	ВЫБОР КОГДА Грузополучатель = &ПустойКонтрагент
	|	      ТОГДА Контрагент
	|	      ИНАЧЕ Грузополучатель КОНЕЦ КАК Грузополучатель,
	|	ВЫБОР КОГДА Грузоотправитель = &ПустойКонтрагент
	|	      ТОГДА Организация
	|	      ИНАЧЕ Грузоотправитель КОНЕЦ КАК Грузоотправитель,
	|	БанковскийСчетОрганизации КАК БанковскийСчет,
	|	Контрагент КАК Покупатель,
	|	Контрагент КАК Плательщик,
	|	Сделка,
	|	ДоговорКонтрагента.Представление  КАК Основание,
	|	ДоговорКонтрагента.ВедениеВзаиморасчетов КАК ВедениеВзаиморасчетов,
	|	ОтветственныеЛица.ФизическоеЛицо КАК ОтветственноеЛицо,
	|	Подразделение,
	|	ВалютаДокумента,
	|	КурсВзаиморасчетов      КАК Курс,
	|	КратностьВзаиморасчетов КАК Кратность,
	|	УчитыватьНДС,
	|	СуммаВключаетНДС,
	|	ОтпускРазрешил,
	|	ОтпускПроизвел,
	|	ДоверенностьНомер,
	|	ДоверенностьДата,
	|	ДоверенностьВыдана,
	|	ДоверенностьЧерезКого
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	РегистрСведений.ОтветственныеЛица.СрезПоследних(&ДатаСреза, СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ОтветственныеЛица
	|ПО
	|	ОтветственныеЛица.СтруктурнаяЕдиница = РеализацияТоваровУслуг.Склад
	|
	|ГДЕ
	|	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
	|";
 
	Шапка = Запрос.Выполнить().Выбрать();
	Шапка.Следующий();
 
	Запрос = новый Запрос;
	Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
 
	// Вычислим курс документа для печати
	если СсылкаНаОбъект.ДоговорКонтрагента.РасчетыВУсловныхЕдиницах и СсылкаНаОбъект.ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом тогда
 
		ЗапросКурсАванса = новый Запрос;
		ЗапросКурсАванса.УстановитьПараметр("ДокументСсылка", СсылкаНаОбъект);
		ЗапросКурсАванса.Текст =
		"ВЫБРАТЬ
		|	Док.СуммаВзаиморасчетов,
		|	Док.СуммаРегл
		|ИЗ
		|	Документ.РеализацияТоваровУслуг.ДокументыРасчетовСКонтрагентом КАК Док
		|ГДЕ Док.Ссылка = &ДокументСсылка
		|ИТОГИ СУММА(СуммаВзаиморасчетов), СУММА(СуммаРегл) ПО ОБЩИЕ";
 
		Выборка = ЗапросКурсАванса.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		если Выборка.Следующий() тогда
			КурсОплаты                 = ?(Выборка.СуммаВзаиморасчетов = 0, 0, Выборка.СуммаРегл/Выборка.СуммаВзаиморасчетов);
			ВыборкаСуммаВзаиморасчетов = Выборка.СуммаВзаиморасчетов;
			ВыборкаСуммаРегл           = Выборка.СуммаРегл;
		иначе
			КурсОплаты                 = 0;
			ВыборкаСуммаВзаиморасчетов = 0;
			ВыборкаСуммаРегл           = 0;
		конецесли;
 
		мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
 
		СуммаВзаиморасчетов = ОбщегоНазначения.ПересчитатьИзВалютыВВалюту(Ценообразование.ПолучитьСуммуДокументаСНДС(СсылкаНаОбъект),
		СсылкаНаОбъект.ВалютаДокумента, СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов,
		УправлениеВзаиморасчетами.КурсДокумента(СсылкаНаОбъект, мВалютаРегламентированногоУчета), СсылкаНаОбъект.КурсВзаиморасчетов,
		УправлениеВзаиморасчетами.КратностьДокумента(СсылкаНаОбъект, мВалютаРегламентированногоУчета), СсылкаНаОбъект.КратностьВзаиморасчетов);
		НеоплаченнаяСумма = СуммаВзаиморасчетов - ВыборкаСуммаВзаиморасчетов;
		если НеоплаченнаяСумма > 0 тогда
			КурсДляПечати = (НеоплаченнаяСумма * СсылкаНаОбъект.КурсВзаиморасчетов + ВыборкаСуммаРегл)/(НеоплаченнаяСумма + ВыборкаСуммаВзаиморасчетов);
		иначе
			КурсДляПечати = КурсОплаты;
		конецесли;
 
		если КурсДляПечати = 0 тогда
			Запрос.УстановитьПараметр("Курс",      СсылкаНаОбъект.КурсВзаиморасчетов);
			Запрос.УстановитьПараметр("Кратность", ?(СсылкаНаОбъект.КратностьВзаиморасчетов=0,1,СсылкаНаОбъект.КратностьВзаиморасчетов));
		иначе
			Запрос.УстановитьПараметр("Курс",      КурсДляПечати);
			Запрос.УстановитьПараметр("Кратность", 1);
		конецесли;
 
	иначеесли СсылкаНаОбъект.ВалютаДокумента = СсылкаНаОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов тогда
 
		// Документ оформлен в валюте взаиморасчетов
		Запрос.УстановитьПараметр("Курс", СсылкаНаОбъект.КурсВзаиморасчетов);
		Запрос.УстановитьПараметр("Кратность", ?(СсылкаНаОбъект.КратностьВзаиморасчетов=0,1,СсылкаНаОбъект.КратностьВзаиморасчетов));
 
	иначе
 
		// Документ оформлен в валюте регламентированного учета
		Запрос.УстановитьПараметр("Курс",      1);
		Запрос.УстановитьПараметр("Кратность", 1);
 
	конецесли;
 
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ВложенныйЗапрос.Номенклатура                                  КАК Номенклатура,
	|	ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК ТоварНаименование,
	|	ПОДСТРОКА(ВложенныйЗапрос.Номенклатура." + ТоварКод + ",4,20)              КАК ТоварКод,
	|	ВложенныйЗапрос.ЕдиницаИзмерения.Представление                КАК БазоваяЕдиницаНаименование,
	|	ВложенныйЗапрос.ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код  КАК БазоваяЕдиницаКодПоОКЕИ,
	|	ВложенныйЗапрос.ЕдиницаИзмерения     КАК ЕдиницаИзмерения,
	|	ВложенныйЗапрос.ЕдиницаИзмеренияМест.Представление            КАК ВидУпаковки,
	|	ВложенныйЗапрос.КоэффициентМест / ВложенныйЗапрос.Коэффициент КАК КоличествоВОдномМесте,
	|	ВЫБОР
	|		КОГДА ВложенныйЗапрос.КоличествоМест > 0 ТОГДА ВложенныйЗапрос.КоличествоМест * ВложенныйЗапрос.ЕдиницаИзмеренияМест.Вес
	|		ИНАЧЕ ВложенныйЗапрос.Количество * ВложенныйЗапрос.ЕдиницаИзмерения.Вес
	|	КОНЕЦ КАК МассаБрутто,
	|	ВложенныйЗапрос.Характеристика       КАК Характеристика,
	|	ВложенныйЗапрос.Серия                КАК Серия,
	|	ВложенныйЗапрос.СтавкаНДС            КАК СтавкаНДС,
	|	ВложенныйЗапрос.Цена                 КАК Цена,
	|	ВЫБОР
	|		КОГДА((ВложенныйЗапрос.ПроцентСкидкиНаценки = 0) и
	|		      (ВложенныйЗапрос.ПроцентАвтоматическихСкидок = 0))
	|	ТОГДА ЛОЖЬ
	|	ИНАЧЕ Истина
	|	КОНЕЦ                                КАК ЕстьСкидкиПоСтроке,
	|	ВложенныйЗапрос.Количество           КАК Количество,
	|	ВложенныйЗапрос.КоличествоМест       КАК КоличествоМест,
	|	ВложенныйЗапрос.Сумма                КАК Сумма,
	|	ВложенныйЗапрос.СуммаНДС             КАК СуммаНДС,
	|	ВложенныйЗапрос.НомерСтроки          КАК НомерСтроки,
	|	ВложенныйЗапрос.Метка                КАК Метка
	|ИЗ
	|
	|	(
	|	ВЫБРАТЬ
	|		РеализацияТоваровУслуг.Номенклатура,
	|		РеализацияТоваровУслуг.Коэффициент,
	|		РеализацияТоваровУслуг.ЕдиницаИзмерения,
	|		РеализацияТоваровУслуг.ЕдиницаИзмеренияМест,
	|		РеализацияТоваровУслуг.ЕдиницаИзмеренияМест.Коэффициент     КАК КоэффициентМест,
	|		РеализацияТоваровУслуг.ХарактеристикаНоменклатуры           КАК Характеристика,
	|		РеализацияТоваровУслуг.СерияНоменклатуры                    КАК Серия,
	|		РеализацияТоваровУслуг.СтавкаНДС,
	|		РеализацияТоваровУслуг.Цена * &Курс / &Кратность            КАК Цена,
	|		РеализацияТоваровУслуг.ПроцентСкидкиНаценки,
	|		РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок,
	|		СУММА(РеализацияТоваровУслуг.Количество)                    КАК Количество,
	|		СУММА(РеализацияТоваровУслуг.КоличествоМест)                КАК КоличествоМест,
	|		СУММА(РеализацияТоваровУслуг.Сумма    * &Курс / &Кратность) КАК Сумма,
	|		СУММА(РеализацияТоваровУслуг.СуммаНДС * &Курс / &Кратность) КАК СуммаНДС,
	|		МИНИМУМ(РеализацияТоваровУслуг.НомерСтроки)                 КАК НомерСтроки,
	|		0                                                           КАК Метка
	|	ИЗ
	|		Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
	|	ГДЕ
	|		РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
	|
	|СГРУППИРОВАТЬ ПО
	|		РеализацияТоваровУслуг.Номенклатура,
	|		РеализацияТоваровУслуг.Коэффициент,
	|		РеализацияТоваровУслуг.ЕдиницаИзмерения,
	|		РеализацияТоваровУслуг.ЕдиницаИзмеренияМест,
	|		РеализацияТоваровУслуг.ХарактеристикаНоменклатуры,
	|		РеализацияТоваровУслуг.СерияНоменклатуры,
	|		РеализацияТоваровУслуг.СтавкаНДС,
	|		РеализацияТоваровУслуг.Цена,
	|		РеализацияТоваровУслуг.ПроцентСкидкиНаценки,
	|		РеализацияТоваровУслуг.ПроцентАвтоматическихСкидок
	|	) КАК ВложенныйЗапрос
	|";
 
	если не БезУслуг тогда
 
		СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("РеализацияТоваровУслуг");
 
		Запрос.Текст = Запрос.Текст + "
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	РеализацияТоваровУслуг.Номенклатура                  КАК Номенклатура,
		|	" + СтрокаВыборкиПоляСодержания + "                  КАК ТоварНаименование,
		|	ПОДСТРОКА(РеализацияТоваровУслуг.Номенклатура." + ТоварКод + ",4,20) КАК ТоварКод,
		|	РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК БазоваяЕдиницаНаименование,
		|	РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.Код КАК БазоваяЕдиницаКодПоОКЕИ,
		|	РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
		|	NULL                                                 КАК ВидУпаковки,
		|	NULL                                                 КАК КоличествоВОдномМесте,
		|	0                                                    КАК МассаБрутто,
		|	NULL                                                 КАК Характеристика,
		|	NULL                                                 КАК Серия,
		|	РеализацияТоваровУслуг.СтавкаНДС                     КАК СтавкаНДС,
		|	РеализацияТоваровУслуг.Цена * &Курс / &Кратность     КАК Цена,
		|	ВЫБОР
		|		КОГДА(РеализацияТоваровУслуг.ПроцентСкидкиНаценки = 0)
		|	ТОГДА ЛОЖЬ
		|	ИНАЧЕ Истина
		|	КОНЕЦ                                                КАК ЕстьСкидкиПоСтроке,
		|	РеализацияТоваровУслуг.Количество                    КАК Количество,
		|	NULL                                                 КАК КоличествоМест,
		|	РеализацияТоваровУслуг.Сумма    * &Курс / &Кратность КАК Сумма,
		|	РеализацияТоваровУслуг.СуммаНДС * &Курс / &Кратность КАК СуммаНДС,
		|	РеализацияТоваровУслуг.НомерСтроки                   КАК НомерСтроки,
		|	1                                                    КАК Метка
		|ИЗ
		|	Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслуг
		|
		|ГДЕ
		|	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
		|";
	конецесли;
 
	Запрос.Текст = Запрос.Текст + "
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	РеализацияТоваровУслуг.Номенклатура                    КАК Номенклатура,
	|	ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК ТоварНаименование,
	|	ПОДСТРОКА(РеализацияТоваровУслуг.Номенклатура." + ТоварКод + ",4,20) КАК ТоварКод,
	|	РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление               КАК БазоваяЕдиницаНаименование,
	|	РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.ЕдиницаПоКлассификатору.Код КАК БазоваяЕдиницаКодПоОКЕИ,
	|	РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков                             КАК ЕдиницаИзмерения,
	|	NULL                                                  КАК ВидУпаковки,
	|	NULL                                                  КАК КоличествоВОдномМесте,
	|	РеализацияТоваровУслуг.Количество * РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Вес КАК МассаБрутто,
	|	NULL                                                  КАК Характеристика,
	|	NULL                                                  КАК Серия,
	|	""Без НДС""                                           КАК СтавкаНДС,
	|	РеализацияТоваровУслуг.Цена * &Курс / &Кратность      КАК Цена,
	|	Ложь                                                  КАК ЕстьСкидкиПоСтроке,
	|	РеализацияТоваровУслуг.Количество                     КАК Количество,
	|	NULL                                                  КАК КоличествоМест,
	|	РеализацияТоваровУслуг.Сумма * &Курс / &Кратность     КАК Сумма,
	|	0                                                     КАК СуммаНДС,
	|	РеализацияТоваровУслуг.НомерСтроки                    КАК НомерСтроки,
	|	2                                                     КАК Метка
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслуг
	|
	|ГДЕ
	|	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
	|
	|
	|УПОРЯДОЧИТЬ ПО Метка ВОЗР, НомерСтроки ВОЗР
	|
	|";
 
	ЗапросТовары = Запрос.Выполнить().Выгрузить();
	ТабДокумент  = новый ТабличныйДокумент;
 
	// Зададим параметры макета
	ТабДокумент.ПолеСверху              = 0;
	ТабДокумент.ПолеСлева               = 0;
	ТабДокумент.ПолеСнизу               = 0;
	ТабДокумент.ПолеСправа              = 0;
	ТабДокумент.РазмерКолонтитулаСверху = 0;
	ТабДокумент.РазмерКолонтитулаСнизу  = 0;
	ТабДокумент.АвтоМасштаб             = Истина;
	ТабДокумент.ОриентацияСтраницы      = ОриентацияСтраницы.Ландшафт;
 
	ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТОРГ12";
 
	Макет = ПолучитьОбщийМакет("ТОРГ12");
 
	// Выводим общие реквизиты шапки
	СведенияОПоставщике       = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.ЮрФизЛицо,        Шапка.ДатаДокумента,, Шапка.БанковскийСчет);
	СведенияОПокупателе       = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Покупатель,       Шапка.ДатаДокумента);
	СведенияОГрузополучателе  = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Грузополучатель,  Шапка.ДатаДокумента);
	СведенияОГрузоотправитель = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Грузоотправитель, Шапка.ДатаДокумента);
 
	ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
	ОбластьМакета.Параметры.Заполнить(Шапка);
	ОбластьМакета.Параметры.НомерДокумента = ЗаполнениеДокументов.ПолучитьНомерНаПечать(Шапка);
	ОбластьМакета.Параметры.ДатаДокумента  = Шапка.ДатаДокумента;
 
	если Шапка.ЮрФизЛицо = Шапка.Грузоотправитель тогда
		ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике);
	иначе
		ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузоотправитель,
			"ПолноеНаименование,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
	конецесли;
 
	ОбластьМакета.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
 
	ОбластьМакета.Параметры.ПредставлениеГрузополучателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе,
		"ПолноеНаименование,ИНН,ФактическийАдрес,Телефоны,НомерСчета,Банк,БИК,КоррСчет");
 
	если СокрЛП(Шапка.АдресДоставки) <> "" тогда
		ОбластьМакета.Параметры.АдресДоставки = УправлениеКонтактнойИнформацией.ПолучитьПредставлениеАдресаПоСтрока(Шапка.АдресДоставки);
	иначе
		ОбластьМакета.Параметры.АдресДоставки = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОГрузополучателе, "ФактическийАдрес");
	конецесли;
 
	ОбластьМакета.Параметры.ПредставлениеПоставщика  = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике);
	ОбластьМакета.Параметры.ПредставлениеПлательщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе);
 
	если Шапка.ВедениеВзаиморасчетов <> Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам
		и Шапка.ВедениеВзаиморасчетов <> Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоСчетам тогда
		ОбластьМакета.Параметры.Основание = Шапка.Основание;
	иначе
		если ЗначениеЗаполнено(Шапка.Сделка) тогда
			ОбластьМакета.Параметры.Основание = "Счёт покупателя № " +
				ЗаполнениеДокументов.ПолучитьНомерНаПечать(Шапка.Сделка) + " от " +
				Формат(Шапка.Сделка.Дата, "ДФ='дд ММММ гггг'");
		конецесли;
	конецесли;
 
	// Выводим всевозможные коды
	ОбластьМакета.Параметры.ОрганизацияПоОКПО     = СведенияОПоставщике.КодПоОКПО;
	ОбластьМакета.Параметры.ВидДеятельностиПоОКДП = "";
	ОбластьМакета.Параметры.ГрузополучательПоОКПО = СведенияОПокупателе.КодПоОКПО;
	ОбластьМакета.Параметры.ПоставщикПоОКПО       = СведенияОПоставщике.КодПоОКПО;
	ОбластьМакета.Параметры.ПлательщикПоОКПО      = СведенияОПокупателе.КодПоОКПО;
	ОбластьМакета.Параметры.ОснованиеНомер        = ЗаполнениеДокументов.ПолучитьНомерНаПечать(Шапка.Сделка);
	ОбластьМакета.Параметры.ОснованиеДата         = Формат(Шапка.Сделка.Дата, "ДФ='дд.ММ.гггг'");
	ОбластьМакета.Параметры.ТранспортнаяНакладнаяНомер = "";
	ОбластьМакета.Параметры.ТранспортнаяНакладнаяДата  = "";
 
	ТабДокумент.Вывести(ОбластьМакета);
 
	НомерСтраницы   = 1;
 
	КоличествоСтрок = ЗапросТовары.Количество();
 
	// инициализация итогов по странице
	ИтогоМассаБруттоНаСтранице = 0;
	ИтогоМестНаСтранице        = 0;
	ИтогоКоличествоНаСтранице  = 0;
	ИтогоСуммаНаСтранице       = 0;
	ИтогоНДСНаСтранице         = 0;
	ИтогоСуммаСНДСНаСтранице   = 0;
 
	// инициализация итогов по документу
	ИтогоМассаБрутто = 0;
	ИтогоМест        = 0;
	ИтогоКоличество  = 0;
	ИтогоСуммаСНДС   = 0;
	ИтогоСумма       = 0;
	ИтогоНДС         = 0;
	НомерСтроки      = 0;
 
	// Создаем массив для проверки вывода
	МассивВыводимыхОбластей = новый Массив;
 
	// Выводим многострочную часть докмента
	ЗаголовокТаблицы        = Макет.ПолучитьОбласть("ЗаголовокТаб");
	ОбластьМакета           = Макет.ПолучитьОбласть("Строка");
	ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоПоСтранице");
	ОбластьПодвала          = Макет.ПолучитьОбласть("Подвал");
	ОбластьМакетаВсего      = Макет.ПолучитьОбласть("Всего");
	для каждого ВыборкаСтрок из ЗапросТовары цикл
 
		если не ЗначениеЗаполнено(ВыборкаСтрок.Номенклатура) тогда
			Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
			Продолжить;
		конецесли;
 
		НомерСтроки = НомерСтроки + 1;
 
		ОбластьМакета.Параметры.Заполнить(ВыборкаСтрок);
		ОбластьМакета.Параметры.Номер             = ЗапросТовары.Индекс(ВыборкаСтрок) + 1;
		ОбластьМакета.Параметры.ТоварНаименование = СокрЛП(ВыборкаСтрок.ТоварНаименование)
		+ ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрок)
		+ ?(ВыборкаСтрок.Метка = 2, " (возвратная тара)", "");
 
		если не ЗначениеЗаполнено(ЕдиницаИзмеренияВеса) тогда
			МассаБрутто = 0;
		иначе
			МассаБрутто = ВыборкаСтрок.МассаБрутто;
			МассаБрутто = ?(МассаБрутто <> Неопределено и МассаБрутто <> NULL, МассаБрутто, 0);
		конецесли;
 
		Мест        = ВыборкаСтрок.КоличествоМест;
		Мест        = ?(Мест <> Неопределено и Мест <> NULL, Мест, 0);
 
		Количество  = ВыборкаСтрок.Количество;
		СуммаСНДС   = Окр((ВыборкаСтрок.Сумма + ?(Шапка.СуммаВключаетНДС, 0, ВыборкаСтрок.СуммаНДС)), 2);
		СуммаНДС    = Окр(ВыборкаСтрок.СуммаНДС, 2);
		СуммаБезНДС = СуммаСНДС  - СуммаНДС;
 
		ОбластьМакета.Параметры.МассаБрутто = МассаБрутто;
		ОбластьМакета.Параметры.СуммаСНДС   = СуммаСНДС;
		ОбластьМакета.Параметры.СуммаНДС    = СуммаНДС;
		ОбластьМакета.Параметры.СтавкаНДС   = ВыборкаСтрок.СтавкаНДС;
		ОбластьМакета.Параметры.СуммаБезНДС = СуммаБезНДС;
 
		если Шапка.СуммаВключаетНДС
			или ВыборкаСтрок.ЕстьСкидкиПоСтроке тогда
			ОбластьМакета.Параметры.Цена = ?(Количество = 0, 0, СуммаБезНДС / Количество);
		иначе
			ОбластьМакета.Параметры.Цена = ВыборкаСтрок.Цена;
		конецесли;
 
		если НомерСтроки = 1 тогда // первая срока
 
			ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
			ТабДокумент.Вывести(ЗаголовокТаблицы);
 
		иначе
 
			МассивВыводимыхОбластей.Очистить();
			МассивВыводимыхОбластей.Добавить(ОбластьМакета);
			МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице);
			если НомерСтроки = КоличествоСтрок тогда
				МассивВыводимыхОбластей.Добавить(ОбластьПодвала);
			конецесли;
 
			если НомерСтроки <> 1 и не ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) тогда
 
				ОбластьИтоговПоСтранице.Параметры.ИтогМассаБруттоПоСтранице = ИтогоМассаБруттоНаСтранице;
				ОбластьИтоговПоСтранице.Параметры.ИтогМестПоСтранице        = ИтогоМестНаСтранице;
				ОбластьИтоговПоСтранице.Параметры.ИтогКоличествоПоСтранице  = ИтогоКоличествоНаСтранице;
				ОбластьИтоговПоСтранице.Параметры.ИтогСуммыПоСтранице       = ИтогоСуммаНаСтранице;
				ОбластьИтоговПоСтранице.Параметры.ИтогНДСПоСтранице         = ИтогоНДСНаСтранице;
				ОбластьИтоговПоСтранице.Параметры.ИтогСуммыСНДСПоСтранице   = ИтогоСуммаСНДСНаСтранице;
 
				ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
 
				// очистим итоги по странице
				ИтогоМассаБруттоНаСтранице = 0;
				ИтогоМестНаСтранице        = 0;
				ИтогоКоличествоНаСтранице  = 0;
				ИтогоСуммаНаСтранице       = 0;
				ИтогоНДСНаСтранице         = 0;
				ИтогоСуммаСНДСНаСтранице   = 0;
 
				НомерСтраницы = НомерСтраницы + 1;
				ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
				ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
				ТабДокумент.Вывести(ЗаголовокТаблицы);
 
			конецесли;
 
		конецесли;
 
		ТабДокумент.Вывести(ОбластьМакета);
 
		// увеличим итоги по странице
		ИтогоМассаБруттоНаСтранице = ИтогоМассаБруттоНаСтранице + МассаБрутто;
		ИтогоМестНаСтранице        = ИтогоМестНаСтранице        + Мест;
		ИтогоКоличествоНаСтранице  = ИтогоКоличествоНаСтранице  + Количество;
		ИтогоСуммаНаСтранице       = ИтогоСуммаНаСтранице       + СуммаБезНДС;
		ИтогоНДСНаСтранице         = ИтогоНДСНаСтранице         + СуммаНДС;
		ИтогоСуммаСНДСНаСтранице   = ИтогоСуммаСНДСНаСтранице   + СуммаСНДС;
 
		// увеличим итоги по дукументу
		ИтогоМассаБрутто = ИтогоМассаБрутто + МассаБрутто;
		ИтогоМест        = ИтогоМест        + Мест;
		ИтогоКоличество  = ИтогоКоличество  + Количество;
		ИтогоСумма       = ИтогоСумма       + СуммаБезНДС;
		ИтогоНДС         = ИтогоНДС         + СуммаНДС;
		ИтогоСуммаСНДС   = ИтогоСуммаСНДС   + СуммаСНДС;
 
	конеццикла;
 
	// Выводим итоги по последней странице
	ОбластьИтоговПоСтранице.Параметры.ИтогМассаБруттоПоСтранице = ИтогоМассаБруттоНаСтранице;
	ОбластьИтоговПоСтранице.Параметры.ИтогМестПоСтранице        = ИтогоМестНаСтранице;
	ОбластьИтоговПоСтранице.Параметры.ИтогКоличествоПоСтранице  = ИтогоКоличествоНаСтранице;
	ОбластьИтоговПоСтранице.Параметры.ИтогСуммыПоСтранице       = ИтогоСуммаНаСтранице;
	ОбластьИтоговПоСтранице.Параметры.ИтогНДСПоСтранице         = ИтогоНДСНаСтранице;
	ОбластьИтоговПоСтранице.Параметры.ИтогСуммыСНДСПоСтранице   = ИтогоСуммаСНДСНаСтранице;
 
	ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
 
	// Выводим итоги по документу в целом
	ОбластьМакетаВсего.Параметры.ИтогМассаБрутто = ИтогоМассаБрутто;
	ОбластьМакетаВсего.Параметры.ИтогМест        = ИтогоМест;
	ОбластьМакетаВсего.Параметры.ИтогКоличество  = ИтогоКоличество;
	ОбластьМакетаВсего.Параметры.ИтогСуммы       = ИтогоСумма;
	ОбластьМакетаВсего.Параметры.ИтогНДС         = ИтогоНДС;
	ОбластьМакетаВсего.Параметры.ИтогСуммыСНДС   = ИтогоСуммаСНДС;
 
	ТабДокумент.Вывести(ОбластьМакетаВсего);
 
	// Выводим подвал документа
	ПолнаяДатаДокумента = Формат(Шапка.ДатаДокумента, "ДФ=""дд ММММ гггг """"года""""""");
	ДлинаСтроки = СтрДлина(ПолнаяДатаДокумента);
	ПервыйРазделитель = Найти(ПолнаяДатаДокумента," ");
	ВторойРазделитель = Найти(Прав(ПолнаяДатаДокумента,ДлинаСтроки-ПервыйРазделитель)," ")+ПервыйРазделитель;
	ОбластьПодвала.Параметры.ДатаДокументаДень     = """"+Лев(ПолнаяДатаДокумента,ПервыйРазделитель-1)+"""";
	ОбластьПодвала.Параметры.ДатаДокументаМесяц    = Сред(ПолнаяДатаДокумента,ПервыйРазделитель+1,ВторойРазделитель-ПервыйРазделитель-1);
	ОбластьПодвала.Параметры.ДатаДокументаГод      = Прав(ПолнаяДатаДокумента,ДлинаСтроки-ВторойРазделитель);
 
	Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,);
	Руководитель = Руководители.Руководитель;
	Бухгалтер    = Руководители.ГлавныйБухгалтер;
 
	// Главный бухгалтер
	ОбластьПодвала.Параметры.ФИОГлавБухгалтера = Бухгалтер;
 
	// Отпуск товара разрешил
	если не ЗначениеЗаполнено(Шапка.ОтпускРазрешил) тогда
		ФИООтпускРазрешил       = Руководитель;
		ДолжностьОтпускРазрешил = Руководители.РуководительДолжность;
	иначе
		ФамилияИмяОтчествоФизЛица        = ФормированиеПечатныхФорм.ФамилияИмяОтчество(Шапка.ОтпускРазрешил, Шапка.ДатаДокумента);
		ПодразделениеДолжностьФизЛица    = ФормированиеПечатныхФорм.ПодразделениеДолжность(Шапка.ОтпускРазрешил, Шапка.ДатаДокумента);
		ФамилияИмяОтчествоОтпускРазрешил = ФамилияИмяОтчествоФизЛица.Фамилия + " " + ФамилияИмяОтчествоФизЛица.Имя + " " + ФамилияИмяОтчествоФизЛица.Отчество;
		ФИООтпускРазрешил                = ПроцедурыУправленияПерсоналом.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтпускРазрешил);
		ДолжностьОтпускРазрешил          = ПодразделениеДолжностьФизЛица.Должность;
	конецесли;
 
	ОбластьПодвала.Параметры.ФИОРуководителя       = ФИООтпускРазрешил;
	ОбластьПодвала.Параметры.ДолжностьРуководителя = ДолжностьОтпускРазрешил;
 
	// Отпуск товара произвел
	если не ЗначениеЗаполнено(Шапка.ОтпускПроизвел) тогда
		ФамилияИмяОтчествоФизЛица     = ФормированиеПечатныхФорм.ФамилияИмяОтчество(Шапка.ОтветственноеЛицо, Шапка.ДатаДокумента);
		ПодразделениеДолжностьФизЛица = ФормированиеПечатныхФорм.ПодразделениеДолжность(Шапка.ОтветственноеЛицо, Шапка.ДатаДокумента);
	иначе
		ФамилияИмяОтчествоФизЛица     = ФормированиеПечатныхФорм.ФамилияИмяОтчество(Шапка.ОтпускПроизвел, Шапка.ДатаДокумента);
		ПодразделениеДолжностьФизЛица = ФормированиеПечатныхФорм.ПодразделениеДолжность(Шапка.ОтпускПроизвел, Шапка.ДатаДокумента);
	конецесли;
 
	ФамилияИмяОтчествоОтпускПроизвел = ФамилияИмяОтчествоФизЛица.Фамилия + " " + ФамилияИмяОтчествоФизЛица.Имя + " " + ФамилияИмяОтчествоФизЛица.Отчество;
	ФИООтпускПроизвел                = ПроцедурыУправленияПерсоналом.ФамилияИнициалыФизЛица(ФамилияИмяОтчествоОтпускПроизвел);
	ДолжностьОтпускПроизвел          = ПодразделениеДолжностьФизЛица.Должность;
 
	ОбластьПодвала.Параметры.ФИОКладовщика       = ФИООтпускПроизвел;
	ОбластьПодвала.Параметры.ДолжностьКладовщика = ДолжностьОтпускПроизвел;
 
	// Доверенность
	ОбластьПодвала.Параметры.ДоверенностьНомер     = Шапка.ДоверенностьНомер;
	ОбластьПодвала.Параметры.ДоверенностьДата      = Формат(Шапка.ДоверенностьДата, "ДФ='дд ММММ гггг'");
	ОбластьПодвала.Параметры.ДоверенностьВыдана    = Шапка.ДоверенностьВыдана;
	ОбластьПодвала.Параметры.ДоверенностьЧерезКого = Шапка.ДоверенностьЧерезКого;
 
	если ЗначениеЗаполнено(ЕдиницаИзмеренияВеса) и ИтогоМассаБрутто > 0 тогда
		ОбластьПодвала.Параметры.МассаГрузаПрописью = ЧислоПрописью(ИтогоМассаБрутто, ,",,,,,,,,0")+ " " +ЕдиницаИзмеренияВеса.Наименование + ".";
	конецесли;
 
	если ИтогоМест > 0 тогда
		ОбластьПодвала.Параметры.ВсегоМестПрописью = ЧислоПрописью(ИтогоМест, ,",,,,,,,,0");
	конецесли;
 
	ОбластьПодвала.Параметры.КоличествоПорядковыхНомеровЗаписейПрописью = ЧислоПрописью(КоличествоСтрок, ,",,,,,,,,0");
	ОбластьПодвала.Параметры.СуммаПрописью = ЧислоПрописью (ИтогоСуммаСНДС,
		"L=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
	ТабДокумент.Вывести(ОбластьПодвала);
 
	возврат ТабДокумент;
конецфункции // Печать

 
proj/1c/nakladn.txt · Последние изменения: 2008/04/07 13:04
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru