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

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

#Область ОбработчикиСобытий

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

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

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	 КоммерческиеПредложенияДокументыПереопределяемый.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	 КоммерческиеПредложенияДокументыПереопределяемый.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ПриКопировании(ОбъектКопирования)
	
	Автор = Пользователи.ТекущийПользователь();
	
	КоммерческиеПредложенияДокументыПереопределяемый.ПриКопировании(ЭтотОбъект);

КонецПроцедуры
	
#КонецОбласти

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

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

Процедура ИнициализироватьДанныеДокумента()

	НастройкиУчета = КоммерческиеПредложенияДокументы.НастройкиУчета();
	
	Если Не ЗначениеЗаполнено(Менеджер) Тогда
		Менеджер = Пользователи.ТекущийПользователь();
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Организация)
		И НастройкиУчета.ИспользуетсяЕдинственнаяОрганизация 
		И ЗначениеЗаполнено(НастройкиУчета.ЕдинственнаяОрганизация) Тогда
		
		Организация = НастройкиУчета.ЕдинственнаяОрганизация;
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Валюта)
		И НастройкиУчета.ИспользуетсяЕдинственнаяВалюта
		И ЗначениеЗаполнено(НастройкиУчета.ЕдинственнаяВалюта) Тогда
		
		Валюта = НастройкиУчета.ЕдинственнаяВалюта;
		
	КонецЕсли;
	
	Автор = Пользователи.ТекущийПользователь();
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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