Как можно передать параметры в Процедуру Печать() для ВПФ с общего модуля 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=' (Утв.)'"),""),Выборка.Утвержден);
		
	КонецЦикла;
	
	СписокВариантов.СортироватьПоЗначению(НаправлениеСортировки.Возр);
	
	Возврат СписокВариантов;
	
КонецФункции

Показать


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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот