Номенклатура / Соглашения с поставщиками по характеристикам / Модуль формы

файл

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

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_СоглашенияСПоставщиками" Тогда
		ЗаполнитьСписок()
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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