Новый запрос по доступным командам. Формирует запрос для получения таблицы команд дополнительных отчетов или обработок.
// Формирует запрос для получения таблицы команд дополнительных отчетов или обработок.
//
// Параметры:
// ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид обработки.
// Размещение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, Строка - Ссылка или полное имя объекта метаданных,
// к которому привязаны искомые дополнительные отчеты и обработки.
// Глобальные обработки размещаются в разделах, контекстные - в справочниках и документах.
// ЭтоФормаОбъекта - Булево - Необязательный.
// Тип форм, в которых размещены контекстные дополнительные отчеты и обработки.
// Истина - только отчеты и обработки, привязанные к формам объектов.
// Ложь - только отчеты и обработки, привязанные к формам списков.
// ТипыКоманд - ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок - Тип получаемых команд.
// - Массив - Типы команд, которые необходимо получить.
// * ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок
// ТолькоВключенные - Булево - Необязательный.
// Тип форм, в которых размещены контекстные дополнительные отчеты и обработки.
// Истина - только отчеты и обработки, привязанные к формам объектов.
// Ложь - только отчеты и обработки, привязанные к формам списков.
//
// Возвращаемое значение:
// ТаблицаЗначений - Команды дополнительных отчетов или обработок.
// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета или обработки.
// * Идентификатор - Строка - Идентификатор команды, как он задан разработчиком дополнительного объекта.
// * ВариантЗапуска - ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок -
// Способ вызова команды дополнительного объекта.
// * Представление - Строка - Наименование команды в пользовательском интерфейсе.
// * ПоказыватьОповещение - Булево - Показывать оповещение пользователю после выполнения команды.
// * Модификатор - Строка - Модификатор команды.
//
Функция НовыйЗапросПоДоступнымКомандам(ВидОбработок, Размещение, ЭтоФормаОбъекта = Неопределено, ТипыКоманд = Неопределено, ТолькоВключенные = Истина) Экспорт
Запрос = Новый Запрос;
Если ТипЗнч(Размещение) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда
СсылкаРодителяИлиРаздела = Размещение;
Иначе
Если ЗначениеЗаполнено(Размещение) Тогда
СсылкаРодителяИлиРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Размещение);
Иначе
СсылкаРодителяИлиРаздела = Неопределено;
КонецЕсли;
КонецЕсли;
Если СсылкаРодителяИлиРаздела <> Неопределено Тогда // Есть фильтр по родителю.
ЭтоГлобальныеОбработки = (
ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет
Или ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка);
// Запросы принципиально отличаются для глобальных обработок и назначаемых.
Если ЭтоГлобальныеОбработки Тогда
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ДопОтчетыИОбработки.Ссылка
|ПОМЕСТИТЬ втСсылки
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ТаблицаРазделы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки
| ПО (ТаблицаРазделы.Раздел = &СсылкаРаздела)
| И ТаблицаРазделы.Ссылка = ДопОтчетыИОбработки.Ссылка
|ГДЕ
| ДопОтчетыИОбработки.Вид = &Вид
| И НЕ ДопОтчетыИОбработки.ПометкаУдаления
| И ДопОтчетыИОбработки.Публикация = &Публикация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаКоманды.Ссылка,
| ТаблицаКоманды.Идентификатор,
| ТаблицаКоманды.ЗаменяемыеКоманды,
| ТаблицаКоманды.ВариантЗапуска,
| ТаблицаКоманды.Представление,
| ТаблицаКоманды.ПоказыватьОповещение,
| ТаблицаКоманды.Модификатор,
| ЕСТЬNULL(БыстрыйДоступ.Доступно, ЛОЖЬ) КАК Использование
|ПОМЕСТИТЬ ИтоговаяТаблица
|ИЗ
| втСсылки КАК ТаблицаСсылки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды
| ПО ТаблицаСсылки.Ссылка = ТаблицаКоманды.Ссылка
| И (ТаблицаКоманды.Скрыть = ЛОЖЬ)
| И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК БыстрыйДоступ
| ПО (ТаблицаКоманды.Ссылка = БыстрыйДоступ.ДополнительныйОтчетИлиОбработка)
| И (ТаблицаКоманды.Идентификатор = БыстрыйДоступ.ИдентификаторКоманды)
| И (БыстрыйДоступ.Пользователь = &ТекущийПользователь)
|ГДЕ
| ЕСТЬNULL(БыстрыйДоступ.Доступно, ЛОЖЬ)";
Запрос.УстановитьПараметр("СсылкаРаздела", СсылкаРодителяИлиРаздела);
Если Не ТолькоВключенные Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"ГДЕ
| ЕСТЬNULL(БыстрыйДоступ.Доступно, ЛОЖЬ)",
"");
КонецЕсли;
Иначе
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ТаблицаНазначение.Ссылка
|ПОМЕСТИТЬ втСсылки
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки.Назначение КАК ТаблицаНазначение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки
| ПО (ТаблицаНазначение.ОбъектНазначения = &СсылкаРодителя)
| И ТаблицаНазначение.Ссылка = ДопОтчетыИОбработки.Ссылка
| И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ)
| И (ДопОтчетыИОбработки.Вид = &Вид)
| И (ДопОтчетыИОбработки.Публикация = &Публикация)
| И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА)
| И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаКоманды.Ссылка,
| ТаблицаКоманды.Идентификатор,
| ТаблицаКоманды.ЗаменяемыеКоманды,
| ТаблицаКоманды.ВариантЗапуска,
| ТаблицаКоманды.Представление,
| ТаблицаКоманды.ПоказыватьОповещение,
| ТаблицаКоманды.Модификатор,
| НЕОПРЕДЕЛЕНО КАК Использование
|ПОМЕСТИТЬ ИтоговаяТаблица
|ИЗ
| втСсылки КАК ТаблицаСсылки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды
| ПО ТаблицаСсылки.Ссылка = ТаблицаКоманды.Ссылка
| И (ТаблицаКоманды.Скрыть = ЛОЖЬ)
| И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд))";
Запрос.УстановитьПараметр("СсылкаРодителя", СсылкаРодителяИлиРаздела);
КонецЕсли;
Иначе
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаКоманды.Ссылка,
| ТаблицаКоманды.Идентификатор,
| ТаблицаКоманды.ЗаменяемыеКоманды,
| ТаблицаКоманды.ВариантЗапуска,
| ТаблицаКоманды.Представление КАК Представление,
| ТаблицаКоманды.ПоказыватьОповещение,
| ТаблицаКоманды.Модификатор,
| НЕОПРЕДЕЛЕНО КАК Использование
|ПОМЕСТИТЬ ИтоговаяТаблица
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки
| ПО ТаблицаКоманды.Ссылка = ДопОтчетыИОбработки.Ссылка
| И (ДопОтчетыИОбработки.Вид = &Вид)
| И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд))
| И (ДопОтчетыИОбработки.Публикация = &Публикация)
| И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ)
| И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА)
| И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА)
| И (ТаблицаКоманды.Скрыть = ЛОЖЬ)";
КонецЕсли;
// Отключение отборов по форме списка и объекта.
Если ЭтоФормаОбъекта <> Истина Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА)", "");
КонецЕсли;
Если ЭтоФормаОбъекта <> Ложь Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА)", "");
КонецЕсли;
Если ТипыКоманд = Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд))", "");
Иначе
Запрос.УстановитьПараметр("ТипыКоманд", ТипыКоманд);
КонецЕсли;
Запрос.УстановитьПараметр("Вид", ВидОбработок);
Если ПравоДоступа("Изменение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Публикация = &Публикация", "Публикация <> &Публикация");
Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена);
Иначе
Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется);
КонецЕсли;
Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
Запрос.Текст = ТекстЗапроса;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса")
И ОбщегоНазначения.РазделениеВключено() Тогда
ИмяРегистра = "ИспользованиеПоставляемыхДополнительныхОтчетовИОбработокВОбластяхДанных";
Запрос.Текст = Запрос.Текст + ";
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ИтоговаяТаблица.Ссылка,
| ИтоговаяТаблица.Идентификатор,
| ИтоговаяТаблица.ЗаменяемыеКоманды,
| ИтоговаяТаблица.ВариантЗапуска,
| ИтоговаяТаблица.Представление КАК Представление,
| ИтоговаяТаблица.ПоказыватьОповещение,
| ИтоговаяТаблица.Модификатор,
| ИтоговаяТаблица.Использование
|ИЗ
| ИтоговаяТаблица КАК ИтоговаяТаблица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ &ПолноИмяРегистра КАК Инсталляции
| ПО ИтоговаяТаблица.Ссылка = Инсталляции.ИспользуемаяОбработка
|
|УПОРЯДОЧИТЬ ПО
| Представление";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ПолноИмяРегистра", "РегистрСведений." + ИмяРегистра);
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПОМЕСТИТЬ ИтоговаяТаблица", "");
Запрос.Текст = Запрос.Текст + "
|
|УПОРЯДОЧИТЬ ПО
| Представление";
КонецЕсли;
Возврат Запрос;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
КомандыПечатиОбъектаДоступныеДляВложений (БСП)
ОбновитьДоступностьКомандПринятияКИсполнению (БСП)