Как можно передать параметры в Процедуру Печать() для ВПФ с общего модуля CRM для печати?

1. Gok9 18.11.22 08:35 Сейчас в теме
Здравствуйте, как можно передать параметры в
Процедура Печать(Знач МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт 
для ВПФ с общего модуля CRM для печати? В общий модуль CRM_ОбщегоНазначенияСервер в таком виде передаётся параметры
Функция CRM_ПолучитьВнешниеМакетыИДанныеОбъектов(ИмяМакета, ОбъектыНазначения, НомерВарианта = Неопределено) Экспорт 


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

Возврат ПараметрыРегистрации;	
	
КонецФункции

Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление; 
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

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


	

Процедура Печать(Знач МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ПараметрыПечати = Новый Структура;
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ВнешняяОбработкаКоммерческоеПредложениеКлиентуCRM") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"ВнешняяОбработкаКоммерческоеПредложениеКлиентуCRM",
			НСтр("ru = 'Коммерческое предложение клиенту';
				|en = 'Sales quotation for customer'"),
			Интерес_СформироватьПечатнуюФормуКоммерческогоПредложения(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
		
	КонецЕсли;
	
КонецПроцедуры 

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

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

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


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


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

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

			//	ОбластьСкидок.Параметры.Скидка = ВыборкаЗапасы.Количество * ВыборкаЗапасы.Цена - ВыборкаЗапасы.Сумма;
			//	ОбластьСкидок.Параметры.СуммаБезСкидки = ВыборкаЗапасы.Количество * ВыборкаЗапасы.Цена;
			//	ОбластьСкидок.Область(1, 1, 1, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
			//	ОбластьСкидок.Область(1, 1, 1, 2).Шрифт = Новый Шрифт(, , Ложь, , , );
			//	ТабличныйДокумент.Присоединить(ОбластьСкидок);
			//	ИтогоБезСкидок = ИтогоБезСкидок + ОбластьСкидок.Параметры.СуммаБезСкидки;

			//	ОбластьСуммы.Параметры.Сумма = ВыборкаЗапасы.Сумма;
			//	ОбластьСуммы.Область(1, 1, 1, 1).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
			//	ОбластьСуммы.Область(1, 1, 1, 1).Шрифт = Новый Шрифт(, , Ложь, , , );
			//	ТабличныйДокумент.Присоединить(ОбластьСуммы);
			//Иначе	
				ОбластьДанных.Параметры.Сумма = ВыборкаЗапасы.Сумма;
				ТабличныйДокумент.Вывести(ОбластьДанных);

			//КонецЕсли;
			ИтогоСумма = ИтогоСумма + ВыборкаЗапасы.Сумма;
			ИтогоСуммаНДС = ИтогоСуммаНДС + ВыборкаЗапасы.СуммаНДС;
			
			Если МассивИтогов.Количество() > 0 Тогда
				МассивИтогов[МассивИтогов.Количество() - 1] = МассивИтогов[МассивИтогов.Количество() - 1] + ВыборкаЗапасы.Сумма;
			КонецЕсли;
			Если МассивИтоговСкидок.Количество() > 0 Тогда
				МассивИтоговСкидок[МассивИтоговСкидок.Количество() - 1] = МассивИтоговСкидок[МассивИтоговСкидок.Количество() - 1] + (ВыборкаЗапасы.Количество * ВыборкаЗапасы.Цена - ВыборкаЗапасы.Сумма);
			КонецЕсли;
		Иначе
			Если МассивРазделителей.Количество() > 0 Тогда
				ИтогоПоРазделу = МассивИтогов[МассивИтогов.Количество() - 1];
				ИтогоСкидкаПоРазделу = МассивИтоговСкидок[МассивИтоговСкидок.Количество() - 1];
				Разделитель = МассивРазделителей[МассивРазделителей.Количество() - 1];
				МассивИтогов.Удалить(МассивИтогов.Количество() - 1);
				МассивИтоговСкидок.Удалить(МассивИтоговСкидок.Количество() - 1);
				МассивРазделителей.Удалить(МассивРазделителей.Количество() - 1);
				Если Разделитель.Итог Тогда
					// Строки итогов по иерархии (итоги).
					//Если ОтображатьСкидки Тогда
					//	ОбластьНомера.Параметры.Ном = "";
					//	ТабличныйДокумент.Вывести(ОбластьНомера);
					//	ОбластьДанных.Параметры.Содержание  = НСтр("ru='Итого по: ';en='Total by:'") + Строка(Разделитель);
					//	ОбластьДанных.Параметры.Номенклатура = Разделитель;
					//	ОбластьДанных.Параметры.Количество = "";
					//	ОбластьДанных.Параметры.Цена = "";
					//	ОбластьДанных.Параметры.ЕдиницаИзмерения = "";
					//	ОбластьДанных.Область(1, 1, 1, 1).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
					//	ОбластьДанных.Область(1, 1, 1, 1).Шрифт = Новый Шрифт(, , Истина, , , );
					//	ТабличныйДокумент.Присоединить(ОбластьДанных);

					//	ОбластьСкидок.Параметры.СуммаБезСкидки = СокрЛП(Формат(ИтогоПоРазделу + ИтогоСкидкаПоРазделу, "ЧЦ=15; ЧДЦ=2"));
					//	ОбластьСкидок.Параметры.Скидка = СокрЛП(Формат(ИтогоСкидкаПоРазделу, "ЧЦ=15; ЧДЦ=2"));
					//	ОбластьСкидок.Область(1, 1, 1, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
					//	ОбластьСкидок.Область(1, 1, 1, 2).Шрифт = Новый Шрифт(, , Истина, , , );
					//	ТабличныйДокумент.Присоединить(ОбластьСкидок);

					//	ОбластьСуммы.Параметры.Сумма = СокрЛП(CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(ИтогоПоРазделу));
					//	ОбластьСуммы.Область(1, 1, 1, 1).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
					//	ОбластьСуммы.Область(1, 1, 1, 1).Шрифт = Новый Шрифт(, , Истина, , , );
					//	ТабличныйДокумент.Присоединить(ОбластьСуммы);
					//Иначе	
						ОбластьДанных.Параметры.Ном = "";
						ОбластьДанных.Параметры.Содержание  = НСтр("ru='Итого по: ';en='Total by:'") + Строка(Разделитель);
						ОбластьДанных.Параметры.Номенклатура = Разделитель;
						ОбластьДанных.Параметры.Количество = "";
						ОбластьДанных.Параметры.Цена = "";
						ОбластьДанных.Параметры.ЕдиницаИзмерения = "";
						ОбластьДанных.Параметры.Сумма = СокрЛП(CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(ИтогоПоРазделу));
						ОбластьДанных.Область(1, 3, 1, 3).Шрифт = Новый Шрифт(, , Истина, , , );
						ОбластьДанных.Область(1, 9, 1, 9).Шрифт = Новый Шрифт(, , Истина, , , );

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

			//	ОбластьСкидок.Параметры.СуммаБезСкидки = "";
			//	ОбластьСкидок.Параметры.Скидка = "";
			//	ТабличныйДокумент.Присоединить(ОбластьСкидок);

			//	ОбластьСуммы.Параметры.Сумма = "";
			//	ТабличныйДокумент.Присоединить(ОбластьСуммы);
			//Иначе	
				ОбластьДанных.Параметры.Ном = "";
				ОбластьДанных.Параметры.Содержание  = ВыборкаЗапасы.Номенклатура;
				ОбластьДанных.Параметры.Номенклатура = ВыборкаЗапасы.Номенклатура;
				ОбластьДанных.Параметры.Количество = "";
				ОбластьДанных.Параметры.Цена = "";
				ОбластьДанных.Параметры.ЕдиницаИзмерения = "";
				ОбластьДанных.Параметры.Сумма = "";
				ТабличныйДокумент.Вывести(ОбластьДанных);
				
		//	КонецЕсли;
			МассивИтогов.Добавить(0);
			МассивИтоговСкидок.Добавить(0);
			Если НЕ ТипЗнч(ВыборкаЗапасы.Номенклатура) = Тип("Неопределено") Тогда 
				МассивРазделителей.Добавить(ВыборкаЗапасы.Номенклатура);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Если МассивИтогов.Количество() > 0 Тогда
		ИтогоПоРазделу = МассивИтогов[МассивИтогов.Количество() - 1];
		ИтогоСкидкаПоРазделу = МассивИтоговСкидок[МассивИтоговСкидок.Количество() - 1];
		Разделитель = МассивРазделителей[МассивРазделителей.Количество() - 1];
		МассивИтогов.Удалить(МассивИтогов.Количество()-1);
		МассивИтоговСкидок.Удалить(МассивИтоговСкидок.Количество() - 1);
		МассивРазделителей.Удалить(МассивРазделителей.Количество() - 1);
		Если Разделитель.Итог Тогда
			// Последняя строка итогов по иерархии (итоги).
			//Если ОтображатьСкидки Тогда
			//	ОбластьНомера.Параметры.Ном = "";
			//	ТабличныйДокумент.Вывести(ОбластьНомера);
			//	ОбластьДанных.Параметры.Содержание  = НСтр("ru='Итого по: ';en='Total by:'") + Строка(Разделитель);
			//	ОбластьДанных.Параметры.Номенклатура = Разделитель;
			//	ОбластьДанных.Параметры.Количество = "";
			//	ОбластьДанных.Параметры.Цена = "";
			//	ОбластьДанных.Параметры.ЕдиницаИзмерения = "";
			//	ОбластьДанных.Область(1, 1, 1, 1).Шрифт = Новый Шрифт(, , Истина, , , );
			//	ТабличныйДокумент.Присоединить(ОбластьДанных);

			//	ОбластьСкидок.Параметры.СуммаБезСкидки = СокрЛП(Формат(ИтогоПоРазделу + ИтогоСкидкаПоРазделу, "ЧЦ=15; ЧДЦ=2"));
			//	ОбластьСкидок.Параметры.Скидка = СокрЛП(Формат(ИтогоСкидкаПоРазделу, "ЧЦ=15; ЧДЦ=2"));
			//	ОбластьСкидок.Область(1, 1, 1, 2).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
			//	ОбластьСкидок.Область(1, 1, 1, 2).Шрифт = Новый Шрифт(, , Истина, , , );
			//	ТабличныйДокумент.Присоединить(ОбластьСкидок);

			//	ОбластьСуммы.Параметры.Сумма = СокрЛП(Формат(ИтогоПоРазделу, "ЧЦ=15; ЧДЦ=2"));
			//	ОбластьСуммы.Область(1, 1, 1, 1).Шрифт = Новый Шрифт(, , Истина, , , );
			//	ТабличныйДокумент.Присоединить(ОбластьСуммы);
		//	Иначе	
				ОбластьДанных.Параметры.Ном = "";
				ОбластьДанных.Параметры.Содержание  = НСтр("ru='Итого по: ';en='Total by:'") + Строка(Разделитель);
				ОбластьДанных.Параметры.Номенклатура = Разделитель;
				ОбластьДанных.Параметры.Количество = "";
				ОбластьДанных.Параметры.Цена = "";
				ОбластьДанных.Параметры.ЕдиницаИзмерения = "";
				ОбластьДанных.Область(1, 3, 1, 3).Шрифт = Новый Шрифт(, , Истина, , , );
				ОбластьДанных.Параметры.Сумма = СокрЛП(Формат(ИтогоПоРазделу, "ЧЦ=15; ЧДЦ=2"));
				ОбластьДанных.Область(1, 9, 1, 9).Шрифт = Новый Шрифт(, , Истина, , , );
				ТабличныйДокумент.Вывести(ОбластьДанных);
				
		//	КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	// итоги
	//Если ОтображатьСкидки Тогда
	//	
	//	ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
	//	ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
	//	ОбластьСкидок = Макет.ПолучитьОбласть("Итого|Скидка");
	//	ОбластьСуммы = Макет.ПолучитьОбласть("Итого|Сумма");
	//	
	//	ТабличныйДокумент.Вывести(ОбластьНомера);
	//	ТабличныйДокумент.Присоединить(ОбластьДанных);

	//	ОбластьСкидок.Параметры.ВсегоБезСкидок = ИтогоБезСкидок;
	//	ОбластьСкидок.Параметры.ВсегоСкидок = ИтогоБезСкидок - ИтогоСумма;
	//	ТабличныйДокумент.Присоединить(ОбластьСкидок);

	//	ОбластьСуммы.Параметры.Всего = CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(ИтогоСумма);
	//	ТабличныйДокумент.Присоединить(ОбластьСуммы);
	//	
	//	// итоги НДС
	//	//Если УчитыватьНДС Тогда
	//	ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
	//	ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
	//	ОбластьСкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
	//	ОбластьСуммы = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
	//	ТабличныйДокумент.Вывести(ОбластьНомера);
	//	ОбластьДанных.Параметры.НДС = ?(ВыборкаВариантИд.ЦенаВключаетНДС, НСтр("ru='В том числе НДС:';en='Including VAT:'"), НСтр("ru='Сумма НДС:'"));
	//	ТабличныйДокумент.Присоединить(ОбластьДанных);

	//	ТабличныйДокумент.Присоединить(ОбластьСкидок);

	//	ОбластьСуммы.Параметры.ВсегоНДС = CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(ИтогоСуммаНДС);
	//	ТабличныйДокумент.Присоединить(ОбластьСуммы);
	//	//КонецЕсли;
	//	
	//	
	//Иначе	
		ОбластьДанных = Макет.ПолучитьОбласть("ИтогоБезСкидок");
		
		ОбластьДанных.Параметры.Всего = CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(ИтогоСумма);
		ТабличныйДокумент.Вывести(ОбластьДанных);
		
		// итоги НДС
		//Если УчитыватьНДС Тогда
		ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДСБезСкидок");
		ОбластьДанных.Параметры.НДС = ?(ВыборкаВариантИд.ЦенаВключаетНДС, НСтр("ru='В том числе НДС:';en='Including VAT:'"), НСтр("ru='Сумма НДС:'"));
		ОбластьДанных.Параметры.ВсегоНДС = CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(ИтогоСуммаНДС);
		ТабличныйДокумент.Вывести(ОбластьДанных);
		//КонецЕсли;
		
				
//	КонецЕсли;
	// сумма прописью
	
	СуммаКПрописи = ИтогоСумма + ?(ВыборкаВариантИд.ЦенаВключаетНДС, 0, ИтогоСуммаНДС);
	ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
	ОбластьМакета.Параметры.ИтоговаяСтрока = НСтр("ru='Всего наименований ';en='All items '") + Ном + НСтр("ru=', на сумму '") + CRM_ОбщегоНазначенияКлиентСервер.ФорматСумм(СуммаКПрописи, ВыборкаВариантИд.Валюта);
	ОбластьМакета.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи, ВыборкаВариантИд.Валюта);
	ТабличныйДокумент.Вывести(ОбластьМакета);
	
	// заголовок таблицы
	Если ЗначениеЗаполнено(ОписаниеВарианта) Тогда
		ОбластьМакета = Макет.ПолучитьОбласть("ОписаниеВарианта");
		ОбластьМакета.Параметры.ПредставлениеОписания = ОписаниеВарианта;
		ТабличныйДокумент.Вывести(ОбластьМакета);
	КонецЕсли; 
КонецФункции


Функция КППредставлениеСерий(Выборка) 

	Результат = "(";

	Если ЗначениеЗаполнено(Выборка.Характеристика) Тогда
		Результат = Результат + Выборка.Характеристика;
	КонецЕсли;

	Если ЗначениеЗаполнено(Выборка.Серия) Тогда
		Результат = ?(Результат = "(", Результат, Результат + "; ");
		Результат = Результат + Выборка.Серия;
	КонецЕсли;

	Результат = Результат + ")";

	Возврат ?(Результат = "()", "", " " + Результат)

КонецФункции // ПредставлениеСерий()


// Функция - КППолучить данные объекта
//
// Параметры:
//  СсылкаНаОбъект	 - 	 - 
//  НомерВарианта	 - 	 - 
// 
// Возвращаемое значение:
//  Структура -  Данные объекта
//
Функция КППолучитьДанныеОбъекта(СсылкаНаОбъект, знач НомерВарианта = Неопределено) Экспорт
		
	Объект = СсылкаНаОбъект.ПолучитьОбъект();	
	
	Если НомерВарианта = Неопределено Тогда
		
		// Печатаем утвержденный вариант.
		
		СтрокаУтвержденного = Объект.Товары.Найти(Истина, "CRM_Утвержден");
		
		Если Не СтрокаУтвержденного = Неопределено Тогда
			
			НомерВарианта = СтрокаУтвержденного.CRM_ИДВарианта;
			
		Иначе
			
			НомерВарианта = 0;
			
		КонецЕсли;
		
	КонецЕсли;	
	
	ДанныеОбъекта = Новый Структура;
	
	Если CRM_ОбщегоНазначенияСервер.НайтиВМетаданныхПоИмени("Константы", "CRM_ПечататьНомераДокументовБезПрефиксов") Тогда
		ФлагУдалитьПрефикс = Константы["CRM_ПечататьНомераДокументовБезПрефиксов"].Получить();
	Иначе
		ФлагУдалитьПрефикс = Ложь;
	КонецЕсли;
	НомерДокумента = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Объект.Номер, ФлагУдалитьПрефикс, ФлагУдалитьПрефикс);
	
	ДанныеОбъекта.Вставить("Дата",	Формат(CRM_ОбщегоНазначенияСервер.ПолучитьТекущуюДатуСеанса(),"ДЛФ=D"));
	ДанныеОбъекта.Вставить("Номер",	НомерДокумента);
	
	СведенияОбОрганизации	= CRM_ОбщегоНазначенияСервер.СведенияОЮрФизЛице(Объект.Организация, CRM_ОбщегоНазначенияСервер.ПолучитьТекущуюДатуСеанса(), ,);
	НаименованиеОрганизации	= CRM_ОбщегоНазначенияСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование");
	АдресОрганизации		= CRM_ОбщегоНазначенияСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ФактическийАдрес");
	ТелефоныОрганизации		= CRM_ОбщегоНазначенияСервер.ОписаниеОрганизации(СведенияОбОрганизации, "Телефоны");
	
	СведенияОКонтрагенте	= CRM_ОбщегоНазначенияСервер.СведенияОЮрФизЛице(Объект.Партнер, CRM_ОбщегоНазначенияСервер.ПолучитьТекущуюДатуСеанса(), ,);
	НаименованиеКонтрагента = CRM_ОбщегоНазначенияСервер.ОписаниеОрганизации(СведенияОКонтрагенте, "ПолноеНаименование");
	
	ДанныеОбъекта.Вставить("Организация",	НаименованиеОрганизации);
	
	ДанныеОбъекта.Вставить("АдресОрганизации",	АдресОрганизации);
	ДанныеОбъекта.Вставить("ТелефонОрганизации",	ТелефоныОрганизации);
	ДанныеОбъекта.Вставить("ТелефонОрганизации_1",	ТелефоныОрганизации);
	
	ДанныеОбъекта.Вставить("Клиент",		НаименованиеКонтрагента);
	
	Если ЗначениеЗаполнено(Объект.КонтактноеЛицо) Тогда
		
		КЛ_Контрагента = Объект.КонтактноеЛицо;
		
	Иначе
		
		КЛ_Контрагента = КПВернутьКЛКонтрагента(Объект.Партнер);
		
	КонецЕсли;	
	
	ДанныеОбъекта.Вставить("КонтактноеЛицо",	КЛ_Контрагента);
	ДанныеОбъекта.Вставить("КонтактноеЛицо_1",	КЛ_Контрагента);
	
	НадписьУважаемый = "Уважаемый(ая)";
	
	Если ЗначениеЗаполнено(КЛ_Контрагента) И ЗначениеЗаполнено(КЛ_Контрагента.Пол) Тогда
		
		Если КЛ_Контрагента.Пол = Перечисления.ПолФизическогоЛица.Мужской Тогда
	
			НадписьУважаемый = "Уважаемый";
	
		Иначе
	
			НадписьУважаемый = "Уважаемая";
	
		КонецЕсли;	
		
	КонецЕсли;
	
	ДанныеОбъекта.Вставить("Уважаемый",	НадписьУважаемый);
	
	ДанныеОбъекта.Вставить("Ответственный",	Объект.Менеджер);
	ДанныеОбъекта.Вставить("Ответственный_1",	Объект.Менеджер);
	
	СтруктураДанных = Новый Структура("Телефон, EmailПользователя","","");
	
	Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
		КППолучитьКонтактныеДанные(Объект.Менеджер, СтруктураДанных);
	КонецЕсли;
	
	ДанныеОбъекта.Вставить("ТелефонОтветственного",	СтруктураДанных.Телефон);
	ДанныеОбъекта.Вставить("EmailОтветственного",	СтруктураДанных.EmailПользователя);
	
	ДанныеОбъекта.Вставить("ИсходныеУсловия",	Объект.CRM_ИсходныеУсловия);
	
	ДанныеОбъекта.Вставить("ПорядокВыполненияРабот", Объект.CRM_ПорядокВыполненияРабот);
	
	ДанныеОбъекта.Вставить("Варианты", Новый Массив);
	
	//ДанныеОбъекта.Вставить("Товары", Новый Массив);
		
	СписокВариантов = КППолучитьВарианты(СсылкаНаОбъект);
	
	Для Каждого ЭлементСписка Из СписокВариантов Цикл
		Если (Не НомерВарианта = 0) И НЕ ЭлементСписка.Значение = НомерВарианта Тогда
			Продолжить;
		КонецЕсли;
		
		ИтогоБезСкидки = 0;
		                                                                                                          
		ИтоговаяСумма	 = 0;
		ИтоговаяСуммаНДС = 0;
		
		НомерСтрокиПоПорядку = 0;
		
		ЕстьРазделители = Ложь;
		
		ТекущийРазделитель = Неопределено;
		
		ИтогПоРазделу = 0;	
		
		СтруктураВарианта = Новый Структура;
		СтруктураВарианта.Вставить("идВарианта",ЭлементСписка.Значение);
		СтруктураВарианта.Вставить("Утвержден",ЭлементСписка.Пометка);
		СтруктураВарианта.Вставить("СтрокаВарианта","Вариант "+Строка(ЭлементСписка.Значение)+?(ЭлементСписка.Пометка," (Утвержден)",""));
		СтруктураВарианта.Вставить("Товары", Новый Массив);
		
		Для Каждого СтрокаТабличнойЧасти Из Объект.Товары Цикл
			
			Если СтрокаТабличнойЧасти.CRM_ИДВарианта = ЭлементСписка.Значение Тогда
				
				СтрокаТаблицыТовары = Новый Структура;
				
				Если СтрокаТабличнойЧасти.CRM_ЭтоРазделитель Тогда
					
					Если Не ТекущийРазделитель = Неопределено И ТекущийРазделитель.Итог Тогда
						
						// Если предусмотрен вывод итогов, добавим строку с итогами в массив.
						СтрокаТаблицыТовары.Вставить("НомерСтроки",		" ");
						СтрокаТаблицыТовары.Вставить("Номенклатура",	"Итого по " + ТекущийРазделитель + ":");
						СтрокаТаблицыТовары.Вставить("Количество",		" ");
						СтрокаТаблицыТовары.Вставить("Цена",			" ");
						СтрокаТаблицыТовары.Вставить("Единица",			" ");
						СтрокаТаблицыТовары.Вставить("Скидка",			" ");
						СтрокаТаблицыТовары.Вставить("Сумма",			Формат(ИтогПоРазделу, "ЧЦ=15; ЧДЦ=2"));
						СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "ИтогПоРазделу");
						
						СтруктураВарианта.Товары.Добавить(СтрокаТаблицыТовары);
								
						СтрокаТаблицыТовары = Новый Структура;
							
					КонецЕсли;	
					
					СтрокаТаблицыТовары.Вставить("НомерСтроки",		" ");
					СтрокаТаблицыТовары.Вставить("Номенклатура",	СтрокаТабличнойЧасти.Номенклатура);
					СтрокаТаблицыТовары.Вставить("Количество",		" ");
					СтрокаТаблицыТовары.Вставить("Цена",			" ");
					СтрокаТаблицыТовары.Вставить("Единица",			" ");
					СтрокаТаблицыТовары.Вставить("Скидка",			" ");
					СтрокаТаблицыТовары.Вставить("Сумма",			" ");
					СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "Разделитель");
					
					ЕстьРазделители = Истина;
							
					ТекущийРазделитель = СтрокаТабличнойЧасти.Номенклатура;
						
					ИтогПоРазделу = 0;
						
				Иначе
					
					НомерСтрокиПоПорядку = НомерСтрокиПоПорядку + 1;
					
					СтрокаТаблицыТовары.Вставить("НомерСтроки",		НомерСтрокиПоПорядку);
					СтрокаТаблицыТовары.Вставить("Номенклатура",	?(ЗначениеЗаполнено(СтрокаТабличнойЧасти.Содержание), СтрокаТабличнойЧасти.Содержание, СтрокаТабличнойЧасти.Номенклатура));
					СтрокаТаблицыТовары.Вставить("Количество",		Формат(СтрокаТабличнойЧасти.Количество,"ЧЦ=15; ЧДЦ=3"));
					СтрокаТаблицыТовары.Вставить("Цена",			Формат(СтрокаТабличнойЧасти.Цена,"ЧЦ=15; ЧДЦ=2"));
					СтрокаТаблицыТовары.Вставить("Единица",			СтрокаТабличнойЧасти.ЕдиницаИзмерения);				
					
					СуммаБезСкидки	= СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
					СкидкаНаценка	= ?(СуммаБезСкидки >= СтрокаТабличнойЧасти.Сумма, СуммаБезСкидки - СтрокаТабличнойЧасти.Сумма,СтрокаТабличнойЧасти.Сумма - СуммаБезСкидки);
					
					ИтогоБезСкидки = ИтогоБезСкидки + СуммаБезСкидки;
					
					СтрокаТаблицыТовары.Вставить("Скидка",			Формат(СкидкаНаценка,"ЧЦ=15; ЧДЦ=2"));
					СтрокаТаблицыТовары.Вставить("Сумма",			Формат(СтрокаТабличнойЧасти.Сумма,"ЧЦ=15; ЧДЦ=2"));
					
					ИтоговаяСумма    = ИтоговаяСумма    + СтрокаТабличнойЧасти.Сумма;
					ИтоговаяСуммаНДС = ИтоговаяСуммаНДС + СтрокаТабличнойЧасти.СуммаНДС;
					
					ИтогПоРазделу = ИтогПоРазделу + СтрокаТабличнойЧасти.Сумма;
					
					СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "Номенклатура");				
				КонецЕсли;
				
				СтруктураВарианта.Товары.Добавить(СтрокаТаблицыТовары);
				
			КонецЕсли;
			
		КонецЦикла;

		// Итоги по последнему разделителю не выведены в цикле
		// если предусмотрен вывод итогов, добавим строку с итогами в массив.
		Если Не ТекущийРазделитель = Неопределено И ТекущийРазделитель.Итог Тогда
			
			СтрокаТаблицыТовары = Новый Структура;		
			
			СтрокаТаблицыТовары.Вставить("НомерСтроки",		" ");
			СтрокаТаблицыТовары.Вставить("Номенклатура",	"Итого по " + ТекущийРазделитель + ":");
			СтрокаТаблицыТовары.Вставить("Количество",		" ");
			СтрокаТаблицыТовары.Вставить("Цена",			" ");
			СтрокаТаблицыТовары.Вставить("Единица",			" ");
			СтрокаТаблицыТовары.Вставить("Скидка",			" ");
			СтрокаТаблицыТовары.Вставить("Сумма",			Формат(ИтогПоРазделу, "ЧЦ=15; ЧДЦ=2"));
			СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "ИтогПоРазделу");
			
			СтруктураВарианта.Товары.Добавить(СтрокаТаблицыТовары);		
				
		КонецЕсли;	

		СтруктураВарианта.Вставить("ЕстьРазделители", ЕстьРазделители);
		
		// выводим итоги
		
		СтруктураВарианта.Вставить("Всего",	Формат(ИтоговаяСумма,"ЧЦ=15; ЧДЦ=2"));
		
		Если ИтоговаяСуммаНДС = 0 Тогда
			СтруктураВарианта.Вставить("СтрокаНДС", НСтр("ru='без налога (НДС)';en='Without tax (VAT)'"));
			СтруктураВарианта.Вставить("ВсегоНДС", "");
		Иначе
			СтруктураВарианта.Вставить("СтрокаНДС", ?(Объект.ЦенаВключаетНДС, НСтр("ru='в том числе НДС:';en='Including VAT:'"), НСтр("ru='Сумма НДС:'")));
			СтруктураВарианта.Вставить("ВсегоНДС",  Формат(ИтоговаяСуммаНДС, "ЧЦ=15; ЧДЦ=2"));
		КонецЕсли; 
		
		СтруктураВарианта.Вставить("ВсегоКОплате",	Формат(ИтоговаяСумма + ?(Объект.ЦенаВключаетНДС, 0, ИтоговаяСуммаНДС),"ЧЦ=15; ЧДЦ=2"));
		
		СтруктураВарианта.Вставить("ТелефонОтвественного",	СтруктураДанных.Телефон);
		СтруктураВарианта.Вставить("EmailОтвественного",	СтруктураДанных.EmailПользователя);

		СтруктураВарианта.Вставить("СтоимостьПропись",	НРег(РаботаСКурсамиВалют.СформироватьСуммуПрописью(ИтоговаяСумма + ?(Объект.ЦенаВключаетНДС, 0, ИтоговаяСуммаНДС), Объект.Валюта)));
		ДанныеОбъекта.Варианты.Добавить(СтруктураВарианта);
	КонецЦикла;
	
	ДанныеОбъекта.Вставить("Валюта",		Объект.Валюта);
	ДанныеОбъекта.Вставить("Валюта_1",		Объект.Валюта);
	ДанныеОбъекта.Вставить("Курс",			Формат(Объект.Курс,"ЧЦ=10; ЧДЦ=4"));
	ДанныеОбъекта.Вставить("Кратность",		Формат(Объект.Кратность,"ЧЦ=10"));
	ДанныеОбъекта.Вставить("Комментарий",	Объект.Комментарий);
	
	Возврат ДанныеОбъекта;
	
КонецФункции


Функция КПВернутьКЛКонтрагента(КонтрагентСсылка) 
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
	               |	КонтактныеЛица.Ссылка КАК КонтактноеЛицо
	               |ИЗ
	               |	Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛица
	               |ГДЕ
	               |	(НЕ КонтактныеЛица.ПометкаУдаления)
	               |	И КонтактныеЛица.Владелец = &Владелец";
	Запрос.УстановитьПараметр("Владелец", КонтрагентСсылка);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.КонтактноеЛицо;
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции

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

// Функция - КППолучить варианты
//
// Параметры:
//  КоммерческоеПредложение	 - ДокументСсылка - Коммерческое предложение.
// 
// Возвращаемое значение:
//  СписокЗначений - Список вариантов.
//
Функция КППолучитьВарианты(КоммерческоеПредложение) Экспорт
	
	СписокВариантов = Новый СписокЗначений;
	
	//Запрос = Новый Запрос;
	//Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	//               |	ДокументТовары.CRM_ИДВарианта КАК ИДВарианта,
	//               |	ДокументТовары.CRM_Утвержден КАК Утвержден,
	//               |	МАКСИМУМ(ДокументТовары.CRM_ИмяВарианта) КАК ИмяВарианта
	//               |ИЗ
	//               |	Документ.КоммерческоеПредложениеКлиенту.Товары КАК ДокументТовары
	//               |ГДЕ
	//               |	ДокументТовары.Ссылка = &Ссылка
	//               |
	//               |СГРУППИРОВАТЬ ПО
	//               |	ДокументТовары.CRM_ИДВарианта,
	//               |	ДокументТовары.CRM_Утвержден";
	//			   
	//Запрос.УстановитьПараметр("Ссылка", КоммерческоеПредложение);
	//
	//Выборка = Запрос.Выполнить().Выбрать();
	//
	//Пока Выборка.Следующий() Цикл
	//	
	//	СписокВариантов.Добавить(Выборка.ИДВарианта, ?(ЗначениеЗаполнено(Выборка.ИмяВарианта), Выборка.ИмяВарианта, НСтр("ru='Вариант ';en='Option'")+Строка(Выборка.ИДВарианта))+?(Выборка.Утвержден,НСтр("ru=' (Утв.)'"),""),Выборка.Утвержден);
	//	
	//КонецЦикла;
	
	ТаблицаВариантов = КоммерческоеПредложение.Товары.Выгрузить();
	ТаблицаВариантов.Свернуть("CRM_ИДВарианта, CRM_Утвержден, CRM_ИмяВарианта");
	ТаблицаВариантов.Колонки["CRM_ИДВарианта"].Имя = "ИДВарианта";
	ТаблицаВариантов.Колонки["CRM_Утвержден"].Имя = "Утвержден";
	ТаблицаВариантов.Колонки["CRM_ИмяВарианта"].Имя = "ИмяВарианта";
	Для Каждого Выборка Из ТаблицаВариантов Цикл
		
		СписокВариантов.Добавить(Выборка.ИДВарианта, ?(ЗначениеЗаполнено(Выборка.ИмяВарианта), Выборка.ИмяВарианта, НСтр("ru='Вариант ';en='Option'")+Строка(Выборка.ИДВарианта))+?(Выборка.Утвержден,НСтр("ru=' (Утв.)'"),""),Выборка.Утвержден);
		
	КонецЦикла;
	
	СписокВариантов.СортироватьПоЗначению(НаправлениеСортировки.Возр);
	
	Возврат СписокВариантов;
	
КонецФункции

Показать


При печате пишет Печатная форма недоступна
Прикрепленные файлы:
По теме из базы знаний
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)