ПриОпределенииКомандПодключенныхКОбъекту (БСП)

Автор: 1С
ОбщийМодуль.ДополнительныеОтчетыИОбработки
БСП

При определении команд подключенных объекту. См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПриОпределенииКомандПодключенныхКОбъекту (БСП)

ТаблицаПодключаемыхОбъектов (БСП)

ПриОпределенииОбъектовСКомандамиОтчетов (БСП)

TurboConf - расширение Конфигуратора 1С