Договоры с контрагентами / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

	//++ Локализация
	Результат.Добавить("ДоговорССамозанятым");
	Результат.Добавить("УникальныйНомерВалютногоКонтроля");
	//-- Локализация
	
	Возврат Результат;
КонецФункции

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

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

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

		Результат = Истина;

	КонецЕсли;

	Возврат Результат;

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

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

	Если Объект.ТипДоговора = Перечисления.ТипыДоговоров.СПокупателем Тогда
		
		ПараметрыЗаполнения.РеализацияТоваров = Истина;
		ПараметрыЗаполнения.РеализацияРаботУслуг = Истина;
		
	ИначеЕсли Объект.ТипДоговора = Перечисления.ТипыДоговоров.СКомиссионером Тогда
		
		ПараметрыЗаполнения.ОтчетКомиссионера = Истина;
		
	
	ИначеЕсли Объект.ТипДоговора = Перечисления.ТипыДоговоров.СХранителем Тогда
		
		ПараметрыЗаполнения.ВыкупТоваровХранителем = Истина;
		
	КонецЕсли;
	
	Возврат ПараметрыЗаполнения;
	
КонецФункции

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

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

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

	ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияВидаДеятельностиНДС();
	ПараметрыЗаполнения.Организация = Объект.Организация;
	ПараметрыЗаполнения.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
	ПараметрыЗаполнения.Дата = ?(ЗначениеЗаполнено(Объект.ДатаНачалаДействия),Объект.ДатаНачалаДействия, ТекущаяДатаСеанса());
	
	Если Объект.ТипДоговора = Перечисления.ТипыДоговоров.СПоставщиком Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		ПараметрыЗаполнения.ПриобретениеРабот = Истина;
		
	ИначеЕсли Объект.ТипДоговора = Перечисления.ТипыДоговоров.СПоклажедателем Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		 
	ИначеЕсли Объект.ТипДоговора = Перечисления.ТипыДоговоров.СПереработчиком2_5
		Или Объект.ТипДоговора = Перечисления.ТипыДоговоров.СПереработчиком2_5_ЕАЭС
		//++ Устарело_Переработка24
		Или Объект.ТипДоговора = Перечисления.ТипыДоговоров.СПереработчиком
		//-- Устарело_Переработка24
		Или Ложь Тогда
		
		ПараметрыЗаполнения.ПриобретениеРабот = Истина;
		
	ИначеЕсли Объект.ТипДоговора = Перечисления.ТипыДоговоров.ВвозИзЕАЭС Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		
	ИначеЕсли Объект.ТипДоговора = Перечисления.ТипыДоговоров.Импорт Тогда
		
		ПараметрыЗаполнения.ПриобретениеТоваров = Истина;
		
	КонецЕсли;
	
	Возврат ПараметрыЗаполнения;

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

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

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

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

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

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

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

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

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

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

	Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
	Возврат Запрос.Выполнить().Выбрать();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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