Движение прочих активов и пассивов / Форма подбора движений / Модуль формы

файл

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПеренестиВДокументВыполнить()
	
	ПеренестиРасходыВДокумент();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьРасходыВыполнить()
	
	ВыбратьВсеРасходыНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ИсключитьРасходыВыполнить()
	
	ВыбратьВсеРасходыНаСервере(Ложь);
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.ТаблицаРасходов, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.ТаблицаРасходов);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

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

&НаСервере
Процедура ЗаполнитьТаблицуРасходов()

	ДанныеОтбора = Новый Структура();
	ДанныеОтбора.Вставить("Организация",	Параметры.Организация);
	ДанныеОтбора.Вставить("Ссылка",			Параметры.ДокументСсылка);
	ДанныеОтбора.Вставить("Валюта",			ВалютаДокумента);
	ДанныеОтбора.Вставить("Дата",			ДатаДокумента);
	ДанныеОтбора.Вставить("ТипСтатьи",		Параметры.ТипСтатьи);
	
	Документы.ДвижениеПрочихАктивовПассивов.ЗаполнитьПоОстаткамВРегистре(
		ДанныеОтбора,
		ТаблицаРасходов);
	
	// Заполним списки выбора для элементов отбора
	Колонки = "ВариантРаспределения, Подразделение, Статья, АналитикаРасходов, АналитикаДоходов, АналитикаАктивовПассивов";
	ТЗ = ТаблицаРасходов.Выгрузить(, Колонки);
	
	ПустаяСтатья = Элементы.ОтборСтатья.ОграничениеТипа.ПривестиЗначение();
	ПустоеПодр = Справочники.СтруктураПредприятия.ПустаяСсылка();
	ПустойВариант = Перечисления.ВариантыРаспределенияРасходов.ПустаяСсылка();
	
	ЗаполнитьПараметрыВыбораЭлемента(ТЗ, "АналитикаДоходов",         "ОтборАналитикаДоходов");
	ЗаполнитьПараметрыВыбораЭлемента(ТЗ, "АналитикаАктивовПассивов", "ОтборАналитикаАктивовПассивов");
	ЗаполнитьПараметрыВыбораЭлемента(ТЗ, "АналитикаРасходов",        "ОтборАналитикаРасходов");
	
	ЗаполнитьСписокВыбораЭлемента(ТЗ, "Статья", ПустаяСтатья, НСтр("ru = 'по всем статьям'"), "ОтборСтатья");
	ЗаполнитьСписокВыбораЭлемента(ТЗ, "Подразделение", ПустоеПодр, НСтр("ru = 'по всем подразделениям'"), "ОтборПодразделение");
	ЗаполнитьСписокВыбораЭлемента(ТЗ, "ВариантРаспределения", ПустойВариант, НСтр("ru = 'по всем вариантам'"), "ОтборВариантРаспределения");
	
КонецПроцедуры

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

&НаСервере
Функция ЗаполнитьСписокВыбораЭлемента(ТЗ, ИмяКолонки, ПустоеЗначение, ОписаниеПустогоЗначения, ИмяЭлементаОтбора)
	
	Список = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(ТЗ.ВыгрузитьКолонку(ИмяКолонки));
	
	Элементы[ИмяЭлементаОтбора].СписокВыбора.ЗагрузитьЗначения(Список);
	Элементы[ИмяЭлементаОтбора].СписокВыбора.Вставить(0, ПустоеЗначение, ОписаниеПустогоЗначения);
	
КонецФункции

&НаКлиенте
Процедура ПеренестиРасходыВДокумент()
	
	// Снятие модифицированности, т.к. перед закрытием признак проверяется.
	Модифицированность = Ложь;
	Закрыть();
	ОповеститьОВыборе(Новый Структура("АдресОстатковВХранилище", ПоместитьРасходыВХранилище()));
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОтборСтатьяРасходовПриИзменении(Элемент)
	
	ОбновитьОтбор(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборАналитикаРасходовПриИзменении(Элемент)
	
	ОбновитьОтбор(ЭтаФорма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьОтбор(Форма)
	
	ЭлементыОтбора = Новый Массив;
	ПоляОтбора = Новый Соответствие;
	
	ЭлементыОтбора.Добавить("ОтборСтатья");
	ПоляОтбора.Вставить(ЭлементыОтбора[ЭлементыОтбора.ВГраница()], "Статья");
	
	ЭлементыОтбора.Добавить("ОтборАналитикаРасходов");
	ПоляОтбора.Вставить(ЭлементыОтбора[ЭлементыОтбора.ВГраница()], "АналитикаРасходов");
	
	ЭлементыОтбора.Добавить("ОтборАналитикаДоходов");
	ПоляОтбора.Вставить(ЭлементыОтбора[ЭлементыОтбора.ВГраница()], "АналитикаДоходов");
	
	ЭлементыОтбора.Добавить("ОтборАналитикаАктивовПассивов");
	ПоляОтбора.Вставить(ЭлементыОтбора[ЭлементыОтбора.ВГраница()], "АналитикаАктивовПассивов");
	
	Если Форма.Расход ИЛИ Форма.Доход Тогда
		ЭлементыОтбора.Добавить("ОтборПодразделение");
		ПоляОтбора.Вставить(ЭлементыОтбора[ЭлементыОтбора.ВГраница()], "Подразделение");
	КонецЕсли;
	Если Форма.Расход Тогда
		ЭлементыОтбора.Добавить("ОтборВариантРаспределения");
		ПоляОтбора.Вставить(ЭлементыОтбора[ЭлементыОтбора.ВГраница()], "ВариантРаспределения");
	КонецЕсли;
	
	
	Отбор = Новый Структура;
	Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
		Если ЗначениеЗаполнено(Форма[ЭлементОтбора]) Тогда
			Отбор.Вставить(ПоляОтбора[ЭлементОтбора], Форма[ЭлементОтбора]);
		ИначеЕсли СтрНайти(НРег(ЭлементОтбора), "аналитика") = 0 Тогда
			// для очищенного элемента установим пустое значение из списка выбора
			Форма[ЭлементОтбора] = Форма.Элементы[ЭлементОтбора].СписокВыбора[0].Значение;
		КонецЕсли;
	КонецЦикла;
	
	Форма.Элементы.ТаблицаРасходов.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор);
	
КонецПроцедуры

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

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