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