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

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