Статьи движения денежных средств / Форма выбора по хозяйственной операции / Модуль формы

файл

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

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

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

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

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

&НаКлиенте
Процедура СписокПоХозяйственнойОперацииВыборЗначения(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОповеститьОВыборе(ВыбранноеЗначение);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокВсеВыборЗначения(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПривязатьХозОперациюКСтатьям(ВыбранноеЗначение, ХозяйственнаяОперация);
	Если ВыбранноеЗначение.Количество() > 1 Тогда
		РежимВыбора = "ПоХозОперации";
		Элементы.ГруппаСтраницыСписков.ТекущаяСтраница = Элементы.СтраницаОтборПоХозОперации;
	Иначе
		ОповеститьОВыборе(ВыбранноеЗначение[0]);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

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

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

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

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

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

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

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