Номенклатура контрагентов / Форма выбора / Модуль формы

файл

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	//++ НЕ ГОСИС
	НоменклатураПартнеровКлиент.Подключаемый_ВыполнитьПереопределяемуюКоманду_НоменклатурыКонтрагентов(ЭтотОбъект, Команда);
	//-- НЕ ГОСИС
	
КонецПроцедуры

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	СопоставлениеНоменклатурыКонтрагентовКлиентПереопределяемый.Подключаемый_ВыполнитьКомандуИнтеграции_НоменклатурыКонтрагентов(
		ЭтотОбъект, Команда, Элементы.Список);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

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

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

&НаСервере
Процедура УстановитьСвойстваПереопределяемыхЭлементовФормы()

	МетаданныеСопоставления = СопоставлениеНоменклатурыКонтрагентовСлужебный.МетаданныеСопоставленияНоменклатуры();

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

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

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

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

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

&НаСервереБезКонтекста
Функция СтрокаЭтоГруппа(ТекущаяСтрока)
	
	Возврат ТекущаяСтрока.ЭтоГруппа;
	
КонецФункции

&НаСервере
Процедура УстановитьСвойстваДинамическогоСписка()

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

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


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

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