Отражение прочих доходов и расходов / Подбор прочих расходов / Модуль формы

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ИмяЭлементаФормыОтбор(ИмяКолонки)
	
	ИмяЭлементаОтбор = "";
	
	Если ИмяКолонки = "АналитикаРасходов" Тогда
		ИмяЭлементаОтбор = "ОтборАналитикаРасходов";
	ИначеЕсли ИмяКолонки = "СтатьяРасходов" Тогда
		ИмяЭлементаОтбор = "ОтборСтатьяРасходов";
	ИначеЕсли ИмяКолонки = "Подразделение" Тогда
		ИмяЭлементаОтбор = "ОтборПодразделение";
	КонецЕсли;
	
	Возврат ИмяЭлементаОтбор;
	
КонецФункции

&НаКлиенте
Процедура ПеренестиРасходыВДокумент()
	
	Модифицированность = Ложь;
	АдресВоВременномХранилище = ПоместитьРасходыВХранилище(Этаформа.ВладелецФормы.УникальныйИдентификатор);
	Закрыть(АдресВоВременномХранилище);
	
КонецПроцедуры

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

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

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

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

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

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