Взаимозачет задолженности / Помощник настройки взаимозачета / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ВидОперации = Параметры.ВидОперации;
	
	ВидыОпераций = Перечисления.ВидыОперацийВзаимозачетаЗадолженности;
	ИспользоватьШаблон = ЗначениеЗаполнено(ВидОперации);
		
	Если ИспользоватьШаблон Тогда
		
		ТипыРасчетов = Новый Соответствие;
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаКлиентаОрганизацияКонтрагент,    0);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаКлиентаМеждуКонтрагентами,       0);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаКлиентаМеждуОрганизациями,       0);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаКлиентаМеждуДвумяОрганизациями,  0);
		
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаКлиентаОрганизацияКонтрагент,     1);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаКлиентаМеждуКонтрагентами,        1);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаКлиентаМеждуОрганизациями,        1);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаКлиентаМеждуДвумяОрганизациями,   1);
		
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаПоставщикуОрганизацияКонтрагент, 2);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаПоставщикуМеждуКонтрагентами,    2);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаПоставщикуМеждуОрганизациями,    2);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносАвансаПоставщикуМеждуДвумяОрганизациями,2);
		
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаПоставщикуОрганизацияКонтрагент,  3);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаПоставщикуМеждуКонтрагентами,     3);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаПоставщикуМеждуОрганизациями,     3);
		ТипыРасчетов.Вставить(ВидыОпераций.ПереносДолгаПоставщикуМеждуДвумяОрганизациями,3);
		
		ТипыРасчетов.Вставить(ВидыОпераций.Бартер,                                       4);
		ТипыРасчетов.Вставить(ВидыОпераций.БартерМеждуОрганизациями,                     4);
		
		ТипыРасчетов.Вставить(ВидыОпераций.Произвольный,                                 5);
		
		ТипыРасчетов.Вставить(ВидыОпераций.ОтражениеОплатыЧерезКомиссионера,             6);
		ТипыРасчетов.Вставить(ВидыОпераций.ОтражениеВозвратаОплатыЧерезКомиссионера,     6);
		
		ТипыРасчетов.Вставить(ВидыОпераций.ОплатаПодарочнымСертификатом,                 6);
		
		ТипРасчетов = ТипыРасчетов[ВидОперации];
		
		ВариантыУчастия = Новый Соответствие;
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаКлиентаОрганизацияКонтрагент,    0);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаКлиентаМеждуКонтрагентами,       1);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаКлиентаМеждуОрганизациями,       2);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаКлиентаМеждуДвумяОрганизациями,  3);
		
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаПоставщикуОрганизацияКонтрагент, 0);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаПоставщикуМеждуКонтрагентами,    1);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаПоставщикуМеждуОрганизациями,    2);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносАвансаПоставщикуМеждуДвумяОрганизациями,3);
		
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаКлиентаОрганизацияКонтрагент,     0);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаКлиентаМеждуКонтрагентами,        1);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаКлиентаМеждуОрганизациями,        2);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаКлиентаМеждуДвумяОрганизациями,   3);
		
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаПоставщикуОрганизацияКонтрагент,  0);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаПоставщикуМеждуКонтрагентами,     1);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаПоставщикуМеждуОрганизациями,     2);
		ВариантыУчастия.Вставить(ВидыОпераций.ПереносДолгаПоставщикуМеждуДвумяОрганизациями,3);
		
		ВариантыУчастия.Вставить(ВидыОпераций.ОтражениеОплатыЧерезКомиссионера,             0);
		ВариантыУчастия.Вставить(ВидыОпераций.ОтражениеВозвратаОплатыЧерезКомиссионера,     1);
		
		ВариантыУчастия.Вставить(ВидыОпераций.ОплатаПодарочнымСертификатом,                 2);
		
		ВариантыУчастия.Вставить(ВидыОпераций.Бартер,                                       0);
		ВариантыУчастия.Вставить(ВидыОпераций.БартерМеждуОрганизациями,                     3);
		
		ВариантУчастия = ВариантыУчастия[ВидОперации];
		
	КонецЕсли;
	
	ИспользоватьНесколькоОрганизаций = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
	ИспользоватьКомиссиюПриПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьКомиссиюПриПродажах");
	ИспользоватьПодарочныеСертификаты = ПолучитьФункциональнуюОпцию("ИспользоватьПодарочныеСертификаты");
	НоваяАрхитектураВзаиморасчетов = ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов");
	
	Если НЕ ИспользоватьКомиссиюПриПродажах
		 И НЕ (НоваяАрхитектураВзаиморасчетов И ИспользоватьПодарочныеСертификаты)
		 И (ТипРасчетов = 6) Тогда
		ТипРасчетов = 0;
	КонецЕсли;

	УправлениеФормой();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ИспользоватьШаблонПриИзменении(Элемент)
	
	УправлениеФормой();
	
КонецПроцедуры

&НаКлиенте
Процедура ТипРасчетовПриИзменении(Элемент)
	
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Применить(Команда)
	
	Если ИспользоватьШаблон Тогда
		
		Если ТипРасчетов = 0 Тогда // ПереносАвансаКлиента
			Если ВариантУчастия = 0 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаОрганизацияКонтрагент");
			ИначеЕсли ВариантУчастия = 1 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуКонтрагентами");
			ИначеЕсли ВариантУчастия = 2 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуОрганизациями");
			Иначе
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаКлиентаМеждуДвумяОрганизациями");
			КонецЕсли;
			
		ИначеЕсли ТипРасчетов = 1 Тогда // ПереносДолгаКлиента
			Если ВариантУчастия = 0 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаОрганизацияКонтрагент");
			ИначеЕсли ВариантУчастия = 1 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуКонтрагентами");
			ИначеЕсли ВариантУчастия = 2 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуОрганизациями");
			Иначе
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаКлиентаМеждуДвумяОрганизациями");
			КонецЕсли;
			
		ИначеЕсли ТипРасчетов = 2 Тогда //ПереносАвансаПоставщику
			Если ВариантУчастия = 0 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуОрганизацияКонтрагент");
			ИначеЕсли ВариантУчастия = 1 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуКонтрагентами");
			ИначеЕсли ВариантУчастия = 2 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуОрганизациями");
			Иначе
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносАвансаПоставщикуМеждуДвумяОрганизациями");
			КонецЕсли;
			
		ИначеЕсли ТипРасчетов = 3 Тогда //ПереносДолгаПоставщику
			Если ВариантУчастия = 0 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуОрганизацияКонтрагент");
			ИначеЕсли ВариантУчастия = 1 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуКонтрагентами");
			ИначеЕсли ВариантУчастия = 2 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуОрганизациями");
			Иначе
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ПереносДолгаПоставщикуМеждуДвумяОрганизациями");
			КонецЕсли;
			
		ИначеЕсли ТипРасчетов = 4 Тогда //Бартер
			Если ВариантУчастия = 0 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.Бартер");
			Иначе
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.БартерМеждуОрганизациями");
			КонецЕсли;
		ИначеЕсли ТипРасчетов = 6 Тогда //Прочие
			Если ВариантУчастия = 0 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ОтражениеОплатыЧерезКомиссионера");
			ИначеЕсли ВариантУчастия = 1 Тогда
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ОтражениеВозвратаОплатыЧерезКомиссионера");
			Иначе
				ВидОперации = ПредопределенноеЗначение(
					"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.ОплатаПодарочнымСертификатом");
			КонецЕсли;
		Иначе //Произвольный
			ВидОперации = ПредопределенноеЗначение(
				"Перечисление.ВидыОперацийВзаимозачетаЗадолженности.Произвольный");
		КонецЕсли;
		
	Иначе
		
		ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийВзаимозачетаЗадолженности.Произвольный");
		
	КонецЕсли;
	
	СохранитьПараметры = Истина;
	
	Закрыть(ВидОперации);
	
КонецПроцедуры

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

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

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

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

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

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