Коммерческое предложение поставщика / Модуль менеджера

файл

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

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

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

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// Коммерческое предложение
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.МенеджерПечати = "Документ.КоммерческоеПредложениеПоставщика";
	КомандаПечати.Идентификатор = "КоммерческоеПредложениеПоставщика";
	КомандаПечати.Представление = НСтр("ru = 'Коммерческое предложение поставщика'");
	КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
	КомандаПечати.Картинка = БиблиотекаКартинок.Печать;
	
КонецПроцедуры

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

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

#Область КомандыОтчетов

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - ТаблицаЗначений - Таблица с командами отчетов. Для изменения.
//       См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//   Параметры - Структура - Вспомогательные параметры. Для чтения.
//       См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	КоммерческиеПредложенияДокументыПереопределяемый.ПриДобавленииКомандОтчетов("Документ.КоммерческоеПредложениеПоставщика", 
	                                                                            КомандыОтчетов,
	                                                                            Параметры);
	
КонецПроцедуры

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

#Область ТекущиеДела

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

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

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

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

#Область СозданиеКоммерческогоПредложенияПоДаннымЭД

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

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

Процедура ОпределитьСписокОперацийЭлектронногоДокумента(СписокОпераций) Экспорт
	
	СписокОпераций.Добавить("КоммерческоеПредложениеПоставщика",
		НСтр("ru = 'Коммерческое предложение поставщика'"), Истина);
	
КонецПроцедуры

#Область ДляВызоваИзДругихПодсистем

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами.
Процедура ПриОпределенииСоставаКомандЭДО(СоставКоманд) Экспорт
	
	СоставКоманд.Входящие.Добавить("Документ.КоммерческоеПредложениеПоставщика");
	СоставКоманд.БезПодписи.Добавить("Документ.КоммерческоеПредложениеПоставщика");
	
КонецПроцедуры

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

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами.

// СтандартныеПодсистемы.УправлениеДоступом

// См. ЭлектронноеВзаимодействие.ПриЗаполненииСписковСОграничениемДоступа
Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт
	
	Списки.Вставить(Метаданные.Документы.КоммерческоеПредложениеПоставщика, Истина);
	Списки.Вставить(Метаданные.Справочники.КоммерческоеПредложениеПоставщикаПрисоединенныеФайлы, Истина);
	
КонецПроцедуры

// См. ЭлектронноеВзаимодействие.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных
Процедура ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(Описание) Экспорт
	
	КоммерческиеПредложенияДокументыПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(
		"Документ.КоммерческоеПредложениеПоставщика", Описание);
	КоммерческиеПредложенияДокументыПереопределяемый.ПриЗаполненииВидовОграниченийПравОбъектовМетаданных(
		"Справочник.КоммерческоеПредложениеПоставщикаПрисоединенныеФайлы", Описание);
	
КонецПроцедуры

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	КоммерческиеПредложенияДокументыПереопределяемый.ПриЗаполненииОграниченияДоступа(
		"Документ.КоммерческоеПредложениеПоставщика", Ограничение);

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

#Область КомандыСозданияНаОсновании

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

Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
	КоммерческиеПредложенияДокументыПереопределяемый.ИнициализацияКомандФормы("ДобавитьКомандыСозданияНаОсновании",
		Метаданные.Документы.КоммерческоеПредложениеПоставщика.Имя, КомандыСозданияНаОсновании, Параметры);
	
КонецПроцедуры

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

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

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

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

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

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

Функция ДанныеОбъектаПоДаннымДляПечати(ДанныеШапки, ТаблицаТовары)

	ДанныеОбъекта = Новый Структура;
	
#Область ДанныеОрганизации

	Поставщик = ?(ЗначениеЗаполнено(ДанныеШапки.Поставщик), ДанныеШапки.Поставщик, ДанныеШапки.Контрагент);

	СведенияОрганизации = ОбщегоНазначенияБЭД.ДанныеЮрФизЛица(ДанныеШапки.Организация);
	
	Если ЗначениеЗаполнено(СведенияОрганизации.ПолноеНаименование) Тогда
		ПредставлениеОрганизации = СведенияОрганизации.ПолноеНаименование;
	Иначе
		ПредставлениеОрганизации = СведенияОрганизации.Наименование;
	КонецЕсли;
	
#КонецОбласти
	
#Область КонтактнаяИнформация

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

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

#Область Товары

	ЕстьСкидки = Ложь;
	СуммаВсего    = 0;
	СуммаВсегоНДС = 0;
	КоличествоТоваров = ТаблицаТовары.Количество();
	ДанныеОбъекта.Вставить("Товары", Новый Массив);
	
	ВариантУказанияСрокаПоставки = Перечисления.ВариантыСроковПоставкиКоммерческихПредложений.НеУказывается;
	Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
		Если ЗначениеЗаполнено(СтрокаТовары.СрокПоставки) Тогда
			
			Если ТипЗнч(СтрокаТовары.СрокПоставки) = Тип("Дата") Тогда
				ВариантУказанияСрокаПоставки = Перечисления.ВариантыСроковПоставкиКоммерческихПредложений.УказываетсяНаОпределеннуюДату;
			ИначеЕсли ТипЗнч(СтрокаТовары.СрокПоставки) = Тип("Число") Тогда
				ВариантУказанияСрокаПоставки = Перечисления.ВариантыСроковПоставкиКоммерческихПредложений.УказываетсяВДняхСМоментаЗаказа;
			КонецЕсли;
			
			Прервать;
			
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
		
		Если СтрокаТовары.СуммаСкидки <> 0 Тогда
			ЕстьСкидки = Истина;
		КонецЕсли;
		
		СуммаВсего        = СуммаВсего +    СтрокаТовары.Сумма;
		СуммаВсегоНДС     = СуммаВсегоНДС + СтрокаТовары.СуммаНДС;
		
		СтрокаТаблицыТовары = Новый Структура;
		
		НаименованиеТовара = КоммерческиеПредложенияДокументыКлиентСервер.ПредставлениеНоменклатурыДляПечати(СтрокаТовары.Номенклатура, СтрокаТовары.Характеристика);
		
		СтрокаТаблицыТовары.Вставить("НомерСтроки",      СтрокаТовары.НомерСтроки);
		СтрокаТаблицыТовары.Вставить("Номенклатура",     НаименованиеТовара);
		СтрокаТаблицыТовары.Вставить("Количество",       СтрокаТовары.Количество);
		СтрокаТаблицыТовары.Вставить("ЕдиницаИзмерения", СтрокаТовары.ЕдиницаИзмерения);
		СтрокаТаблицыТовары.Вставить("Цена",             Формат(СтрокаТовары.Цена,"ЧДЦ=2; ЧРД=."));
		СтрокаТаблицыТовары.Вставить("СуммаСНДС",        Формат(СтрокаТовары.СуммаСНДС,"ЧДЦ=2; ЧРД=."));
		СтрокаТаблицыТовары.Вставить("СуммаСкидки",      Формат(СтрокаТовары.СуммаСкидки,"ЧДЦ=2; ЧРД=."));
		СтрокаТаблицыТовары.Вставить("СрокПоставки",     КоммерческиеПредложенияДокументыКлиентСервер.СрокПоставкиСтрокой(ВариантУказанияСрокаПоставки, 
		                                                                                                                  СтрокаТовары.СрокПоставки));
	
		ДанныеОбъекта.Товары.Добавить(СтрокаТаблицыТовары);
		
	КонецЦикла;

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

#Область ЗаполнениеДанныхОбъекта 

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

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

Функция ПредставлениеПоставщика(Поставщик, Контрагент)
	
	Возврат КоммерческиеПредложенияДокументы.ПредставлениеПартнераКонтрагента(Поставщик, Контрагент);
	
КонецФункции

Функция ПредставлениеПодготовлено(Дата, КонтактноеЛицо)
	
	Если ЗначениеЗаполнено(КонтактноеЛицо) Тогда
		
		ТекстПодготовлено = СтрШаблон(НСтр("ru = 'Подготовлено: %1 %2'"), Строка(КонтактноеЛицо), Формат(Дата, "ДЛФ=DD"));
		
	Иначе
		
		ТекстПодготовлено = СтрШаблон(НСтр("ru = 'Подготовлено: %1'"), Формат(Дата, "ДЛФ=DD"));
		
	КонецЕсли;
	
	Возврат ТекстПодготовлено;
	
КонецФункции

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

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

#Область СозданиеУчетногоДокументаПоЭД

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

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

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

Процедура СохранитьПрисоединенныеФайлыПоЭД(ДанныеВходящегоДокумента, ПолныйПуть, ВладелецФайла, Отказ)
	
	СведенияОФайлах = ДанныеВходящегоДокумента.Строки.Найти(ПолныйПуть, "ПолныйПуть", Истина);
	
	Если Не ЗначениеЗаполнено(СведенияОФайлах.Значение) Тогда
		Возврат;
	КонецЕсли;
		
	Для Каждого СведенияОФайле Из СведенияОФайлах.Строки Цикл
		
		АдресДанныхФайла = ПоместитьВоВременноеХранилище(
			ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(СведенияОФайле,
			ПолныйПуть + ".НомерСтроки.ДвоичныеДанные"), Новый УникальныйИдентификатор);
		
		ПараметрыФайла = Новый Структура();
		
		Автор = Пользователи.ТекущийПользователь();
		
		ПараметрыФайла.Вставить("Автор",                          Автор);
		ПараметрыФайла.Вставить("ИмяБезРасширения",               ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(СведенияОФайле,
		                                                          ПолныйПуть + ".НомерСтроки.ИмяФайла"));
		ПараметрыФайла.Вставить("РасширениеБезТочки",             ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(СведенияОФайле,
		                                                          ПолныйПуть + ".НомерСтроки.РасширениеФайла"));
		ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное",    ТекущаяУниверсальнаяДата());
		ПараметрыФайла.Вставить("ВладелецФайлов",                 ВладелецФайла);
		ПараметрыФайла.Вставить("АдресФайлаВоВременномХранилище", АдресДанныхФайла);
		
		СозданныйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресДанныхФайла);
		
		Если ПолныйПуть = "ДополнительнаяИнформация.ФорматированныйТекст.ПрисоединенныеФайлы" Тогда
			
			ContentID = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(СведенияОФайле, ПолныйПуть + ".НомерСтроки.ContentID");
			
			Если Не ПустаяСтрока(ContentID) Тогда
				
				ПрисоединенныйФайлОбъект = СозданныйФайл.ПолучитьОбъект();
				ПрисоединенныйФайлОбъект.CIDВложенияHTML = ContentID;
				ПрисоединенныйФайлОбъект.Записать();
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ЗаполнитьРеквизитыШапкиПоЭД(ДанныеВходящегоДокумента, ДокументОбъект, НастройкиУчета, Отказ);
	
	ДокументОбъект.НомерЭД = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеВходящегоДокумента, "Номер");
	ДокументОбъект.ДатаЭД  = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеВходящегоДокумента, "Дата");
	
	ДокументОбъект.ИдентификаторЗКПВСервисе = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеВходящегоДокумента, "ИдентификаторЗапроса");
	ДокументОбъект.ДокументОснование = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеВходящегоДокумента, "Запрос");
	
	РеквизитыОрганизации = КоммерческиеПредложенияДокументы.ПолучательОтправительПоДаннымЭД(ДанныеВходящегоДокумента, "Получатель");
	ДокументОбъект.Организация = ОбщегоНазначенияБЭД.НайтиСсылку("Организации",,РеквизитыОрганизации);
	
	РеквизитыКонтрагента = КоммерческиеПредложенияДокументы.ПолучательОтправительПоДаннымЭД(ДанныеВходящегоДокумента, "Организация");
	Контрагент = ОбщегоНазначенияБЭД.НайтиСсылку("Контрагенты",,РеквизитыКонтрагента);
	
	Если Не ЗначениеЗаполнено(Контрагент) Тогда
		
		БизнесСетьПереопределяемый.СоздатьКонтрагентаПоРеквизитам(РеквизитыКонтрагента, Контрагент, Отказ);
		
		Если Отказ Тогда
			ТекстОшибки = НСтр("ru = 'Не удалось создать контрагента'");
			ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ДокументОбъект.Ссылка);
			Возврат;
		КонецЕсли;
		
	КонецЕсли;
	
	ДокументОбъект.Контрагент = Контрагент;
	
	ДанныеКонтактногоЛица = КоммерческиеПредложенияДокументы.СтруктураПоГруппеДерева(ДанныеВходящегоДокумента, "КонтактноеЛицо");
	КоммерческиеПредложенияДокументыПереопределяемый.ЗаполнитьКонтактноеЛицоДокументаПоДаннымЭлектронногоДокумента(Контрагент,
	                                                                                                               ДанныеКонтактногоЛица,
	                                                                                                               ДокументОбъект.КонтактноеЛицо);
	
	ДокументОбъект.Валюта = ОбщегоНазначенияБЭД.НайтиСсылку("Валюты",
		Строка(ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеВходящегоДокумента, "УсловияИПоложения.ВалютаКод")));
	
	Если НастройкиУчета.ИспользуютсяПартнеры Тогда
		
		КоммерческиеПредложенияДокументыПереопределяемый.ПолучитьПартнераПоКонтрагенту(Контрагент, ДокументОбъект.Поставщик);
		
	КонецЕсли;

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

Процедура ЗаполнитьТабличнуюЧастьТоварыПоЭД(ДанныеВходящегоДокумента, ДокументОбъект, НастройкиУчета, Отказ)

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

Функция СрокПоставкиТовара(ДанныеСтроки)
	
	СрокПоставкиВДнях = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеСтроки,
	                                                                       "Товары.НомерСтроки.СрокПоставки.ВДнях");
	
	СрокПоставкиНаДату = ЭлектронноеВзаимодействие.ЗначениеРеквизитаВДереве(ДанныеСтроки,
	                                                                       "Товары.НомерСтроки.СрокПоставки.НаДату");
	
	Если ЗначениеЗаполнено(СрокПоставкиВДнях) Тогда
		Возврат СрокПоставкиВДнях;
	ИначеЕсли ЗначениеЗаполнено(СрокПоставкиНаДату) Тогда
		Возврат СрокПоставкиНаДату;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

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

// Получает присоединенные с непустым CID.
//
// Параметры:
//  ВладелецФайлов - ДокументСсылка.КоммерческоеПредложениеКлиенту - документ, вложения которого получаются.
//
// Возвращаемое значение:
//   ТаблицаЗначений   - таблица с информацией о вложениях электронного письма с непустым ИД.
//
Функция ПрисоединенныеФайлыСНеПустымCID(ВладелецФайлов) Экспорт

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

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

#КонецЕсли


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