Реестр торговых документов / Форма списка / Модуль формы

файл

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

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

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

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

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

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

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

&НаКлиенте
Процедура РеестрДокументов(Команда)
	
	ОткрытьФорму("Отчет.РеестрТорговыхДокументов.Форма");
	
КонецПроцедуры

&НаКлиенте
Процедура ДокументыПоПартнеру(Команда)
	
	ОткрытьФорму("Обработка.ДокументыПоПартнеруИСделке.Форма.ДокументыПоПартнеру");
	
КонецПроцедуры

// Обработка события действия команды формы.
//
// Параметры:
//	Команда - КомандаФормы - команда открытия документа.
//
&НаКлиенте
Процедура Подключаемый_Создать(Команда)
	
	ОткрытьФорму("Документ." + Команда.Имя + ".ФормаОбъекта");
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Процедура ДобавитьПодчиненнуюПодсистему(ПодсистемаВерхнегоУровня, ИерархияПодсистем, ИмяПодсистемы)
	
	ПодчиненныеПодсистемы = ИерархияПодсистем[ИмяПодсистемы];
	
	Для Каждого ПодчиненнаяПодсистема Из ПодсистемаВерхнегоУровня.Подсистемы Цикл
		ПодчиненныеПодсистемы.Добавить(ПодчиненнаяПодсистема);
		
		Если ПодчиненнаяПодсистема.Подсистемы.Количество() > 0 Тогда
			ДобавитьПодчиненнуюПодсистему(ПодчиненнаяПодсистема, ИерархияПодсистем, ИмяПодсистемы);
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьКоманд(Форма)
	
	ЕстьОтмеченныеДокументы = Ложь;
	
	Для Каждого ТипДокумента Из Форма.ТипыДокументов Цикл
		Если ТипДокумента.Пометка Тогда
			ЕстьОтмеченныеДокументы = Истина;
			
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Форма.Элементы.СписокОчиститьОтборПоТипу.Доступность = ЕстьОтмеченныеДокументы;

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

&НаСервере
Процедура НастроитьСписокПоОтбору(СписокВыбора)

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

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

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

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

&НаСервере
Процедура ОбработатьНастройкиСпискаПоОтборуСервер(ВыбранноеЗначение)
	
	НастроитьСписокПоОтбору(ВыбранноеЗначение);
	СохранитьНастройки();
	
КонецПроцедуры

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

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