Претензии / Модуль менеджера

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

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

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

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

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

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

// Определяет список команд создания на основании.
//
// Параметры:
//  КомандыСозданияНаОсновании - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.КомандыСозданияНаОсновании
//  Параметры - см. СозданиеНаОснованииПереопределяемый.ПередДобавлениемКомандСозданияНаОсновании.Параметры
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
	
	БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);

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

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

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

	Возврат СделкиСервер.ПолучитьУчастниковПоТабличнойЧастиПредметаВзаимодействия(
		Ссылка, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка,"Партнер"));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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

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

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

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

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

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

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

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

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

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

// Заполняет структуру данными о получателях печатных форм.
// Параметры:
// 	СтруктураДанныхОбъектаПечати - см. ФормированиеПечатныхФорм.ЗаполнитьДанныеСтруктурыПолучателяПоТипуОбъекта.СтруктураДанныхОбъектаПечати
// 
Процедура ЗаполнитьСтруктуруПолучателейПечатныхФорм(СтруктураДанныхОбъектаПечати) Экспорт

	СтруктураДанныхОбъектаПечати.ОсновнойПолучатель = "Партнер";
	
	СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("Партнер");
	СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей.Добавить("ПартнерыИКонтактныеЛица.КонтактноеЛицо");

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

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

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

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

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

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

Функция АвтоНаименование(Объект) Экспорт
	
	АвтоНаименование = НСтр("ru = 'Претензия клиента'");
	Если Объект.ЭтоПретензияПоставщику Тогда
		АвтоНаименование = НСтр("ru = 'Претензия поставщику'");
	КонецЕсли;
	Шаблон = НСтр("ru = '%1 от %2'", ОбщегоНазначения.КодОсновногоЯзыка());
	НомерДата = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Объект.Код, Формат(Объект.ДатаРегистрации, "ДЛФ=D"));
	
	Возврат АвтоНаименование + " " + НомерДата;
		
КонецФункции

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

#КонецЕсли

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