Самообслуживание партнеров / Мастер оформления заказа / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	
	Если ИспользуютсяДоговорыКонтрагентов Тогда
		КонтрагентПриИзмененииСервер();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
	
	ЗаполнитьНалогообложениеНДСПродажи();
	
КонецПроцедуры

&НаКлиенте
Процедура НеОтгружатьЧастямиПриИзменении(Элемент)
	Если Не НеОтгружатьЧастями Тогда
		ДатаОтгрузки = '00010101';
	КонецЕсли;
	Элементы.ДатаОтгрузки.Видимость = НеОтгружатьЧастями;
КонецПроцедуры

&НаКлиенте
Процедура ДатаОтгрузкиПриИзменении(Элемент)
	
	ТекущаяДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
	
	Если ЗначениеЗаполнено(ДатаОтгрузки) И ДатаОтгрузки < НачалоДня(ТекущаяДатаСеанса) Тогда
		ДатаОтгрузки = НачалоДня(ТекущаяДатаСеанса);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОтобранныеТоварыРассчитанныеСкидкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Поле.Имя = "ОтобранныеТоварыРассчитанныеСкидкиНоменклатура" 
		ИЛИ Поле.Имя = "ОтобранныеТоварыРассчитанныеСкидкиХарактеристика" Тогда
		
		ОткрытьКарточкуНоменклатуры();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура АдресДоставкиПриИзменении(Элемент)
	
	ДоставкаТоваровКлиент.ПриИзмененииПредставленияАдреса(
	    Элемент,
		ЭтаФорма["АдресДоставки"],
		ЭтаФорма["АдресДоставкиЗначенияПолей"]);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресДоставкиОчистка(Элемент, СтандартнаяОбработка)
	
	АдресДоставкиПриИзменении(Элемент);
	
КонецПроцедуры

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

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Отмена(Команда)
	
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура Далее(Команда)
	
	ВыполнитьПереходПоСтраницам(Команда);
	
КонецПроцедуры

&НаКлиенте
Процедура Назад(Команда)
	
	ВыполнитьПереходПоСтраницам(Команда);
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьИнформациюОСкидках(Команда)
	
	ТекущиеДанные = Элементы.ОтобранныеТоварыРассчитанныеСкидки.ТекущиеДанные;
	СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, ЗаполнитьСтруктуруПоРеквизитамФормы(), ЭтаФорма,
	                                                  СамообслуживаниеКлиент.ДополнительныеПараметрыПримененныеСкидки());
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьКарточкуТовара(Команда)
	
	ОткрытьКарточкуНоменклатуры();
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//Приоритет
	
	ОбщегоНазначенияУТ.УстановитьУсловноеОформлениеПриоритета(ЭтотОбъект);
	
	//Упаковка

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтобранныеТоварыРассчитанныеСкидкиЕдИзм.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтобранныеТоварыРассчитанныеСкидки.Упаковка");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);

	//Характеристика

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтобранныеТоварыРассчитанныеСкидкиХарактеристика.Имя);

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьИтоговуюИнформацию()
	
	ИтоговаяИнформация = МакетИтоговаяИнформация;
	
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#AgreementWithCustomer#",СоглашениеСтрока);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#Warehouse#",Склад);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#PaymentSchedule#",ГрафикОплаты);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#PaymentMethod#",ФормаОплаты);
	Если НЕ ИспользоватьПартнеровКакКонтрагентов Тогда
		ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#Counterparty#",Контрагент);
		ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#CP#","");
	Иначе
		ОбщегоНазначенияУТКлиентСервер.УдалитьИзСтрокиПодстроку(ИтоговаяИнформация,"#CP#");
	КонецЕсли;
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#Priority#", Приоритет);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#ContactPerson#", КонтактноеЛицо);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#VATTaxation#",НалогообложениеНДС);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#DeliveryAddress#",АдресДоставки);
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#DateOfShipment#",Формат(ДатаОтгрузки,"ДЛФ=D")); 
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#NotShipInInstallments#",
	                                ?(НеОтгружатьЧастями,Нстр("ru = 'Не отгружать частями'"),Нстр("ru = 'Возможна отгрузка частями'")));
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#NumberOfPositions#",Строка(ОтобранныеТоварыРассчитанныеСкидки.Количество()));
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#DocumentAmount#",Формат(СуммаДокумента,"ЧДЦ=2"));
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#Currency#",Валюта);
	Если ИспользоватьУправлениеДоставкой Тогда
		РеквизитыДоставки = НСтр("ru = 'Способ доставки'") + ": <EM>"
			+ СпособДоставки + "</EM>" + "<BR>";
		Если ЗначениеЗаполнено(ВремяДоставкиС)
			Или ЗначениеЗаполнено(ВремяДоставкиПо) Тогда
			РеквизитыДоставки = РеквизитыДоставки
				+ НСтр("ru = 'Желаемое время доставки'") +": <EM>"
				+ ?(ЗначениеЗаполнено(ВремяДоставкиС), НСтр("ru = 'c'") + " " + Формат(ВремяДоставкиС,"ДФ=HH:mm; ДЛФ=T") + " ","")
				+ ?(ЗначениеЗаполнено(ВремяДоставкиПо),НСтр("ru = 'до'") + " " + Формат(ВремяДоставкиПо,"ДФ=HH:mm; ДЛФ=T"),"")
				+ "</EM>" + "<BR>";
		КонецЕсли;
	Иначе
		РеквизитыДоставки = "";
	КонецЕсли;
	ИтоговаяИнформация  = СтрЗаменить(ИтоговаяИнформация,"#DeliveryDetails#",РеквизитыДоставки);
	
	СтрокаЭтапыГрафикаОплаты = "";
	
	Если ЭтапыГрафикаОплаты.Количество() = 0 Тогда
		ОбщегоНазначенияУТКлиентСервер.УдалитьИзСтрокиПодстроку(ИтоговаяИнформация,"#PS#")
	Иначе
		Для каждого Строка Из ЭтапыГрафикаОплаты Цикл
			
			СтрокаЭтапыГрафикаОплаты = СтрокаЭтапыГрафикаОплаты +  Формат(Строка.ДатаПлатежа,"ДЛФ=D") 
			                           + " - " + Строка.ВариантОплаты + ": "
			                           + Формат(Строка.СуммаПлатежа,"ЧДЦ=2") + " "
			                           + Строка(Валюта)+ " (" + Строка.ПроцентПлатежа 
			                           + " "  +  Нстр("ru = '% от суммы заказа)'") + " " + "<br>";
			
		КонецЦикла;
		ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#PS#","");	
	КонецЕсли;
	
	ИтоговаяИнформация = СтрЗаменить(ИтоговаяИнформация,"#PaymentScheduleStage#",СтрокаЭтапыГрафикаОплаты);
	
КонецПроцедуры

&НаСервере
Процедура КонтрагентПриИзмененииСервер()
	
	СамообслуживаниеСервер.УправлениеЭлементомФормыДоговор(ЭтаФорма, Элементы.Договор, ИспользуютсяДоговорыКонтрагентов);
	
КонецПроцедуры 

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

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

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

&НаСервере
Процедура ОформитьЗаказ()

	СамообслуживаниеСервер.ОформитьЗаказ(ЗаполнитьСтруктуруПоРеквизитамФормы(),
	                                    ?(ВариантОформленияЗаказа = 1, Истина, Ложь));

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

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

#Область Доставка

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

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
		КонтактноеЛицо = ВыбранноеЗначение;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьКарточкуНоменклатуры()

	ТекущиеДанные = Элементы.ОтобранныеТоварыРассчитанныеСкидки.ТекущиеДанные;
	
	Если ТекущиеДанные <> Неопределено Тогда
		ПараметрыФормы = Новый Структура("Ключ", ТекущиеДанные.Номенклатура);
		ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФормы);
	КонецЕсли;

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

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

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

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

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