Соглашения об условиях продаж / Модуль менеджера

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

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

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

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

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

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

КонецФункции

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

// Производит удаление индивидуального прайс листа для объекта.
// 
// Параметры:
// 	Ссылка - СправочникСсылка.СоглашенияСКлиентами - Ссылка на колонку прайс лист.
// Возвращаемое значение:
// 	Булево - результат выполнения.
Функция УдалитьИПЛ(Ссылка) Экспорт
	РезультатОперации = Ложь;	
	
	СправочникОбъект = Ссылка.получитьОбъект();
	СправочникОбъект.ИндивидуальныйВидЦены = Справочники.ВидыЦен.ПустаяСсылка();
	УстановитьПривилегированныйРежим(Истина);
	СправочникОбъект.Записать();
	УстановитьПривилегированныйРежим(Ложь);
	
	РезультатОперации = Истина;
	
	Возврат РезультатОперации;
КонецФункции

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

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

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

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

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

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

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

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

// При определении доступных видов оповещений пользователей.
// 
// Параметры:
//  ОписаниеВидовОповещений - см. ОповещенияПользователейОСобытиях.ОписаниеВидовОповещенийПользователей
Процедура ПриОпределенииДоступныхВидовОповещенийПользователей(ОписаниеВидовОповещений) Экспорт
	
	ГруппаВидаОповещенийПродажи = ОповещенияПользователейОСобытиях.ГруппаВидаОповещений("Продажи");
	
	НовыйВидОповещений = ОповещенияПользователейОСобытиях.ДобавитьОписаниеВидаОповещенийПользователей(ОписаниеВидовОповещений);
	НовыйВидОповещений.ГруппаВидаОповещений = ГруппаВидаОповещенийПродажи;
	НовыйВидОповещений.Идентификатор = "d0dcb5bd-9406-481c-aa51-f0426398cc6d";
	НовыйВидОповещений.Наименование = НСтр("ru = 'Согласование соглашений об условиях продаж'", ОбщегоНазначения.КодОсновногоЯзыка());
	НовыйВидОповещений.ТипОповещения = Перечисления.ТипыОповещенийПользователей.Неоперативное;
	НовыйВидОповещений.ИмяШаблонаСКД = Метаданные.Справочники.СоглашенияСКлиентами.Макеты.Оповещения_Согласование.ПолноеИмя();
	НовыйВидОповещений.ШаблонТекстаОповещения = "ru = 'Согласовать соглашение.'"; // @NStr-1
	НовыйВидОповещений.ТекстСгруппированногоОповещения = "ru = 'Согласовать соглашения об условиях продаж.'"; // @NStr-1
	
	НовыйВидОповещений = ОповещенияПользователейОСобытиях.ДобавитьОписаниеВидаОповещенийПользователей(ОписаниеВидовОповещений);
	НовыйВидОповещений.ГруппаВидаОповещений = ГруппаВидаОповещенийПродажи;
	НовыйВидОповещений.Идентификатор = "413b40aa-ec43-4c07-a73b-fcc1dafd25a2";
	НовыйВидОповещений.Наименование = НСтр("ru = 'Приближение даты окончания действия соглашений об условиях продаж'", ОбщегоНазначения.КодОсновногоЯзыка());
	НовыйВидОповещений.ТипОповещения = Перечисления.ТипыОповещенийПользователей.Неоперативное;
	НовыйВидОповещений.ИмяШаблонаСКД = Метаданные.Справочники.СоглашенияСКлиентами.Макеты.Оповещения_ОкончаниеСрокаДействияПриближается.ПолноеИмя();
	НовыйВидОповещений.ШаблонТекстаОповещения = "ru = 'Заканчивается срок действия соглашения [ДатаОкончанияДействия].'"; // @NStr-1
	НовыйВидОповещений.ТекстСгруппированногоОповещения = "ru = 'Заканчивается срок действия соглашений об условиях продаж.'"; // @NStr-1
	
	НовыйВидОповещений = ОповещенияПользователейОСобытиях.ДобавитьОписаниеВидаОповещенийПользователей(ОписаниеВидовОповещений);
	НовыйВидОповещений.ГруппаВидаОповещений = ГруппаВидаОповещенийПродажи;
	НовыйВидОповещений.Идентификатор = "ed019256-d7ca-4717-991f-62a6eef8f4f1";
	НовыйВидОповещений.Наименование = НСтр("ru = 'Окончание срока действия соглашений об условиях продаж'", ОбщегоНазначения.КодОсновногоЯзыка());
	НовыйВидОповещений.ТипОповещения = Перечисления.ТипыОповещенийПользователей.Неоперативное;
	НовыйВидОповещений.ИмяШаблонаСКД = Метаданные.Справочники.СоглашенияСКлиентами.Макеты.Оповещения_ОкончаниеСрокаДействияПросрочено.ПолноеИмя();
	НовыйВидОповещений.ШаблонТекстаОповещения = "ru = 'Закончился срок действия соглашения [ДатаОкончанияДействия].'"; // @NStr-1
	НовыйВидОповещений.ТекстСгруппированногоОповещения = "ru = 'Закончился срок действия соглашений об условиях продаж.'"; // @NStr-1
	
КонецПроцедуры

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

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

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Партнер                          = Справочники.Партнеры.ПустаяСсылка();
	ДатаДокумента                    = ТекущаяДатаСеанса();
	ТолькоТиповые                    = Ложь;
	ТолькоИспользуемыеВРаботеТП      = Ложь;
	ТолькоОперацииПередачи           = Ложь;
	СтрокаПоиска                     = "";
	ХозяйственнаяОперация            = Неопределено;
	КомиссионныеПродажи25            = Неопределено;
	ИспользуютсяДоговорыКонтрагентов = Неопределено;
	ОтгрузкаБезПереходаПраваСобственности25 = Неопределено;
	
	Если Параметры.Отбор.Свойство("Партнер") Тогда
		Партнер = Параметры.Отбор.Партнер;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Партнер) Тогда
		Возврат;
	КонецЕсли;
		
	Если Параметры.Отбор.Свойство("Дата") Тогда
		ДатаДокумента = НачалоДня(Параметры.Отбор.Дата);
	КонецЕсли;
		
	Если Параметры.Свойство("ТолькоТиповые") Тогда
		ТолькоТиповые = Параметры.ТолькоТиповые;
	КонецЕсли;
	
	Если Параметры.Свойство("ТолькоИспользуемыеВРаботеТП") Тогда
		ТолькоИспользуемыеВРаботеТП = Параметры.ТолькоИспользуемыеВРаботеТП;
	КонецЕсли;
	
	Если Параметры.Свойство("ТолькоОперацииПередачи") Тогда
		ТолькоОперацииПередачи = Параметры.ТолькоОперацииПередачи;
	КонецЕсли;
	
	УсловиеОтбораПоХозяйственнойОперации = "";
	Если Параметры.Отбор.Свойство("ХозяйственнаяОперация", ХозяйственнаяОперация) Тогда
		Если ТипЗнч(ХозяйственнаяОперация) = Тип("ПеречислениеСсылка.ХозяйственныеОперации") Тогда
			УсловиеОтбораПоХозяйственнойОперации 
				= "И ДокументСоглашениеСКлиентом.ХозяйственнаяОперация = &ХозяйственнаяОперация";
		Иначе
			УсловиеОтбораПоХозяйственнойОперации 
				= "И ДокументСоглашениеСКлиентом.ХозяйственнаяОперация В(&ХозяйственнаяОперация)";
		КонецЕсли;
	КонецЕсли;
	
	Если Параметры.Отбор.Свойство("КомиссионныеПродажи25") Тогда
		КомиссионныеПродажи25 = Параметры.Отбор.КомиссионныеПродажи25;
	КонецЕсли;
	
	Если Параметры.Свойство("ОтгрузкаБезПереходаПраваСобственности25") Тогда
		ОтгрузкаБезПереходаПраваСобственности25 = Параметры.ОтгрузкаБезПереходаПраваСобственности25;
	КонецЕсли;
	
	Если ОтгрузкаБезПереходаПраваСобственности25 = Истина Тогда
		ИспользуютсяДоговорыКонтрагентов = ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСКлиентами");
	Иначе
		Параметры.Отбор.Свойство("ИспользуютсяДоговорыКонтрагентов", ИспользуютсяДоговорыКонтрагентов);
	КонецЕсли;
	
	Параметры.Свойство("СтрокаПоиска",СтрокаПоиска);
	
	//Текст запроса содержит литералы для переопределения/подстановки &УсловиеОтбораПоХозяйственнойОперации
	Запрос = Новый Запрос("
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 51
		|	ДокументСоглашениеСКлиентом.Ссылка          КАК Ссылка,
		|	ДокументСоглашениеСКлиентом.Наименование    КАК Наименование,
		|	ДокументСоглашениеСКлиентом.Номер           КАК Номер,
		|	ДокументСоглашениеСКлиентом.Дата            КАК Дата,
		|	ДокументСоглашениеСКлиентом.Типовое         КАК Типовое,
		|
		|	ВЫБОР
		|		КОГДА
		|			ДокументСоглашениеСКлиентом.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСКлиентами.Действует)
		|			И ДокументСоглашениеСКлиентом.ДатаНачалаДействия <> ДАТАВРЕМЯ(1,1,1)
		|			И &ДатаДокумента <> ДАТАВРЕМЯ(1,1,1)
		|			И ДокументСоглашениеСКлиентом.ДатаНачалаДействия > &ДатаДокумента
		|		ТОГДА
		|			ИСТИНА
		|		ИНАЧЕ
		|			ЛОЖЬ
		|	КОНЕЦ КАК СрокДействияНеНаступил,
		|
		|	ВЫБОР
		|		КОГДА
		|			ДокументСоглашениеСКлиентом.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСКлиентами.Действует)
		|			И ДокументСоглашениеСКлиентом.ДатаОкончанияДействия <> ДАТАВРЕМЯ(1,1,1)
		|			И &ДатаДокумента <> ДАТАВРЕМЯ(1,1,1)
		|			И ДокументСоглашениеСКлиентом.ДатаОкончанияДействия < &ДатаДокумента
		|		ТОГДА
		|			ИСТИНА
		|		ИНАЧЕ
		|			ЛОЖЬ
		|	КОНЕЦ КАК СрокДействияИстек
		|
		|ИЗ
		|	Справочник.СоглашенияСКлиентами КАК ДокументСоглашениеСКлиентом
		|ГДЕ
		|	НЕ ДокументСоглашениеСКлиентом.ПометкаУдаления
		|	И ДокументСоглашениеСКлиентом.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСКлиентами.Действует)
		|	И (НЕ &ОтборПоКомиссии ИЛИ ДокументСоглашениеСКлиентом.КомиссионныеПродажи25 = &КомиссионныеПродажи25)
		|	И 
		|	ВЫБОР
		|		КОГДА &ТолькоТиповые = ИСТИНА
		|		И (ДокументСоглашениеСКлиентом.Типовое
		|		И (ДокументСоглашениеСКлиентом.СегментПартнеров = ЗНАЧЕНИЕ(Справочник.СегментыПартнеров.ПустаяСсылка)
		|		ИЛИ ДокументСоглашениеСКлиентом.СегментПартнеров В
		|			(ВЫБРАТЬ
		|				ПартнерыСегмента.Сегмент
		|			ИЗ
		|				РегистрСведений.ПартнерыСегмента КАК ПартнерыСегмента
		|			ГДЕ
		|				ПартнерыСегмента.Партнер = &Партнер)))
		|		ТОГДА ИСТИНА
		|		
		|		КОГДА &ТолькоТиповые = ЛОЖЬ
		|		И (ДокументСоглашениеСКлиентом.Типовое
		|		И (ДокументСоглашениеСКлиентом.СегментПартнеров = ЗНАЧЕНИЕ(Справочник.СегментыПартнеров.ПустаяСсылка)
		|		ИЛИ ДокументСоглашениеСКлиентом.СегментПартнеров В
		|			(ВЫБРАТЬ
		|				ПартнерыСегмента.Сегмент
		|			ИЗ
		|				РегистрСведений.ПартнерыСегмента КАК ПартнерыСегмента
		|			ГДЕ
		|				ПартнерыСегмента.Партнер = &Партнер))
		|			ИЛИ
		|				(НЕ ДокументСоглашениеСКлиентом.Типовое И
		|				ДокументСоглашениеСКлиентом.Партнер = &Партнер))
		|		ТОГДА ИСТИНА
		|		
		|		ИНАЧЕ ЛОЖЬ
		|	
		|	КОНЕЦ
		|	И
		|	ВЫБОР
		|		КОГДА &ТолькоИспользуемыеВРаботеТП = ИСТИНА И
		|			ДокументСоглашениеСКлиентом.ИспользуетсяВРаботеТорговыхПредставителей
		|			ТОГДА ИСТИНА
		|		КОГДА &ТолькоИспользуемыеВРаботеТП = ЛОЖЬ ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ 
		|	И
		|	ВЫБОР
		|		КОГДА &ТолькоОперацииПередачи = ИСТИНА И
		|			(ДокументСоглашениеСКлиентом.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи)
		|			ИЛИ ДокументСоглашениеСКлиентом.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту)
		|				И &ОтборОтгрузкаБезПереходаПраваСобственности25
		|				И ДокументСоглашениеСКлиентом.ВозможнаРеализацияБезПереходаПраваСобственности
		|				И ДокументСоглашениеСКлиентом.ИспользуютсяДоговорыКонтрагентов
		|			ИЛИ ДокументСоглашениеСКлиентом.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию) 
		|				И ДокументСоглашениеСКлиентом.КомиссионныеПродажи25) 
		|			ТОГДА ИСТИНА
		|		КОГДА &ТолькоОперацииПередачи = ЛОЖЬ ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ
		|	И ВЫБОР
		|		КОГДА &ОтборПоДоговору = ИСТИНА
		|				И ДокументСоглашениеСКлиентом.ИспользуютсяДоговорыКонтрагентов = &ИспользуютсяДоговорыКонтрагентов
		|			ТОГДА ИСТИНА
		|		КОГДА &ОтборПоДоговору = ЛОЖЬ
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ
		|	И ВЫБОР
		|		КОГДА &ОтборОтгрузкаБезПереходаПраваСобственности25
		|		И ДокументСоглашениеСКлиентом.ХозяйственнаяОперация В (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту))
		|			ТОГДА ДокументСоглашениеСКлиентом.ВозможнаРеализацияБезПереходаПраваСобственности
		|			И ДокументСоглашениеСКлиентом.ИспользуютсяДоговорыКонтрагентов
		|		ИНАЧЕ ИСТИНА
		|	КОНЕЦ
		|	И (ДокументСоглашениеСКлиентом.Наименование ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~""
		|	ИЛИ ДокументСоглашениеСКлиентом.Номер ПОДОБНО &СтрокаПоиска СПЕЦСИМВОЛ ""~"")
		|	И &УсловиеОтбораПоХозяйственнойОперации
		|УПОРЯДОЧИТЬ ПО
		|	Типовое ВОЗР,
		|	ДатаНачалаДействия ВОЗР,
		|	ДатаОкончанияДействия ВОЗР
		|");
	
	Если Не ХозяйственнаяОперация = Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &УсловиеОтбораПоХозяйственнойОперации", УсловиеОтбораПоХозяйственнойОперации);
		Запрос.УстановитьПараметр("ХозяйственнаяОперация", ХозяйственнаяОперация);
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &УсловиеОтбораПоХозяйственнойОперации", "");
	КонецЕсли;
	
	Запрос.УстановитьПараметр("Партнер",                          Партнер);
	Запрос.УстановитьПараметр("ДатаДокумента",                    НачалоДня(ДатаДокумента));
	Запрос.УстановитьПараметр("ТолькоТиповые",                    ТолькоТиповые);
	Запрос.УстановитьПараметр("ТолькоИспользуемыеВРаботеТП",      ТолькоИспользуемыеВРаботеТП);
	Запрос.УстановитьПараметр("ТолькоОперацииПередачи",           ТолькоОперацииПередачи);
	Запрос.УстановитьПараметр("СтрокаПоиска", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска) + "%");
	Запрос.УстановитьПараметр("ОтборПоКомиссии",                  ?(КомиссионныеПродажи25 = Неопределено, Ложь, Истина));
	Запрос.УстановитьПараметр("КомиссионныеПродажи25",            КомиссионныеПродажи25);
	Запрос.УстановитьПараметр("ОтборПоДоговору",                  ?(ИспользуютсяДоговорыКонтрагентов = Неопределено, Ложь, Истина));
	Запрос.УстановитьПараметр("ИспользуютсяДоговорыКонтрагентов", ИспользуютсяДоговорыКонтрагентов);
	Запрос.УстановитьПараметр("ОтборОтгрузкаБезПереходаПраваСобственности25",
								ОтгрузкаБезПереходаПраваСобственности25 = Истина);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если Не РезультатЗапроса.Пустой() Тогда
		
		ДанныеВыбора = Новый СписокЗначений();
		Выборка = РезультатЗапроса.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			
			Если ЗначениеЗаполнено(Выборка.Наименование) И
				ЗначениеЗаполнено(Выборка.Дата) И
				ЗначениеЗаполнено(Выборка.Номер) Тогда
				
				Представление = НСтр("ru = '%Наименование% (%Номер% от %Дата%)'");
				Представление = СтрЗаменить(Представление,"%Наименование%", Выборка.Наименование);
				Представление = СтрЗаменить(Представление,"%Номер%",        Выборка.Номер);
				Представление = СтрЗаменить(Представление,"%Дата%",         Формат(Выборка.Дата, "ДЛФ=D"));
				
			ИначеЕсли ЗначениеЗаполнено(Выборка.Наименование) И
				ЗначениеЗаполнено(Выборка.Дата) Тогда
				
				Представление = НСтр("ru = '%Наименование% (от %Дата%)'");
				Представление = СтрЗаменить(Представление,"%Наименование%", Выборка.Наименование);
				Представление = СтрЗаменить(Представление,"%Дата%",         Формат(Выборка.Дата, "ДЛФ=D"));
				
			ИначеЕсли ЗначениеЗаполнено(Выборка.Наименование) И
				ЗначениеЗаполнено(Выборка.Номер) Тогда
				
				Представление = НСтр("ru = '%Наименование% (%Номер%)'");
				Представление = СтрЗаменить(Представление,"%Наименование%", Выборка.Наименование);
				Представление = СтрЗаменить(Представление,"%Номер%",        Выборка.Номер);
				
			Иначе
				
				Представление = НСтр("ru = '%Наименование%'");
				Представление = СтрЗаменить(Представление,"%Наименование%", Выборка.Наименование);
				
			КонецЕсли;
			
			Если Выборка.Типовое Тогда
				КартинкаСоглашения = БиблиотекаКартинок.ТиповоеСоглашениеСКлиентом;
			Иначе
				КартинкаСоглашения = БиблиотекаКартинок.ИндивидуальноеСоглашениеСКлиентом;
			КонецЕсли;
			
			Структура = Новый Структура();
			Структура.Вставить("Значение", Выборка.Ссылка);
			
			Если Выборка.СрокДействияНеНаступил Тогда
				Структура.Вставить("Предупреждение", НСтр("ru = 'У соглашения не наступил срок действия.'"));
			ИначеЕсли Выборка.СрокДействияИстек Тогда
				Структура.Вставить("Предупреждение", НСтр("ru = 'У соглашения истек срок действия.'"));
			КонецЕсли;
			
			ДанныеВыбора.Добавить(
				Структура,
				Представление,
				,
				КартинкаСоглашения);
			
		КонецЦикла;
			
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

	Если ПраваПользователяПовтИсп.ЭтоПартнер() Тогда
		// Соглашение с клиентом
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "СоглашениеСКлиентом";
		КомандаПечати.Представление = НСтр("ru = 'Соглашение с клиентом'");
	КонецЕсли;

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Прочее

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

Процедура ЗаполнитьГрафикОплатыСоглашениеСКлиентом(ДанныеПечати,Макет,ТабличныйДокумент)

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

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

Процедура ЗаполнитьТабличныйДокументСоглашениеСКлиентом(ТабличныйДокумент, Запрос, ОбъектыПечати) Экспорт
	
	МассивРезультатовЗапроса = Запрос.ВыполнитьПакет();
	РезультатЗапроса = МассивРезультатовЗапроса[0]; // РезультатЗапроса
	
	ДанныеПечати = РезультатЗапроса.Выбрать();
	ДанныеПечати.Следующий();
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Справочник.СоглашенияСКлиентами.ПФ_MXL_СоглашениеСКлиентом");

	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

	ТекстЗаголовка = ДанныеПечати.Наименование;
	Если Не ПустаяСтрока(ДанныеПечати.Номер) Тогда
		ТекстЗаголовка = ТекстЗаголовка + " № " + ДанныеПечати.Номер;
	КонецЕсли;
	
	Если Не ДанныеПечати.Дата = Дата(1,1,1) Тогда
		ТекстЗаголовка = ТекстЗаголовка + " " + НСтр("ru = 'от'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + Формат(ДанныеПечати.Дата,"ДЛФ=DD");
	КонецЕсли;
	
	СтруктураДанныхШапки = Новый Структура("ТекстЗаголовка", ТекстЗаголовка);
	ОбластьЗаголовок.Параметры.Заполнить(СтруктураДанныхШапки);
	
	ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьЗаголовок, ДанныеПечати.Ссылка);
	ТабличныйДокумент.Вывести(ОбластьЗаголовок);
	
	ЗаполнитьРеквизитыШапкиДокументСоглашениеСКлиентом(ДанныеПечати,Макет,ТабличныйДокумент);
	ЗаполнитьГрафикОплатыСоглашениеСКлиентом(ДанныеПечати,Макет,ТабличныйДокумент);
	ЗаполнитьСкидкиНаценкиСоглашениеСКлиентом(МассивРезультатовЗапроса[1], Макет, ТабличныйДокумент)
	
КонецПроцедуры

Процедура ЗаполнитьСкидкиНаценкиСоглашениеСКлиентом(ДанныеПечати,Макет,ТабличныйДокумент)

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

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

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

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

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

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

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

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

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

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

#Область ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
// Параметры:
//  Реквизиты               - ДеревоЗначений - список реквизитов шаблона:
//         * Имя            - Строка - Уникальное имя общего реквизита.
//         * Представление  - Строка - Представление общего реквизита.
//         * Тип            - Тип    - Тип реквизита. По умолчанию строка.
//         * Формат         - Строка - Формат вывода значения для чисел, дат, строк и булевых значений.
//  Вложения                - ТаблицаЗначений - печатные формы и вложения:
//         * Имя            - Строка - Уникальное имя вложения.
//         * Представление  - Строка - Представление варианта.
//         * ТипФайла       - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl"
//                                      и др.
//  ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//
// Параметры:
//  Сообщение - Структура - структура с ключами:
//    * ЗначенияРеквизитов - Соответствие из КлючИЗначение- список используемых в шаблоне реквизитов:
//      * Ключ     - Строка - имя реквизита в шаблоне;
//      * Значение - Строка - значение заполнения в шаблоне.
//    * ЗначенияОбщихРеквизитов - Соответствие из КлючИЗначение - список используемых в шаблоне общих реквизитов:
//      * Ключ     - Строка - имя реквизита в шаблоне;
//      * Значение - Строка - значение заполнения в шаблоне.
//    * Вложения - Соответствие из КлючИЗначение - значения реквизитов
//      * Ключ     - Строка - имя вложения в шаблоне;
//      * Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//  ДополнительныеПараметры - Структура -  Дополнительная информация о шаблоне сообщения.
//
Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиSMS - ТаблицаЗначений - список получается SMS:
//     * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS.
//     * Представление - Строка - представление получателя сообщения SMS.
//     * Контакт       - СправочникСсылка - контакт, которому принадлежит номер телефона.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Заполняет список получателей письма при отправки сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиПисьма - ТаблицаЗначений - список получается письма:
//     * Адрес           - Строка - адрес электронной почты получателя.
//     * Представление   - Строка - представление получается письма.
//     * ВариантОтправки - Строка - Варианты отправки письма: "Кому", "Копия", "СкрытаяКопия", "ОбратныйАдреса";
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

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

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

#КонецЕсли

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