Введение
Всем доброго времени суток!
Давненько я не писал статей на ресурсе ввиду абсолютной нехватки времени. И вот сейчас, решил разобрать вместе с вами некоторые возможности библиотеки стандартных подсистем (БСП) в рамках модулей "стандартные подсистемы". Данную статью я разобью на две части.
В первой части данной статьи я предлагаю рассмотреть удобный функционал получения данных из обработки параметров клиента и использования их на практике. А во второй части - пример режима "диалога" (выбора вопроса) в рамках возможностей библиотеки стандартных подсистем БСП.
Разработка будет вестись (на момент написания статьи - конец марта 2022 г.) в типовой конфигурации Библиотека стандартных подсистем - версия 3.1.6.137. Тестирование примеров - на Платформе 1с 8.3.20.1674 (64 бит).
Как всегда, данные подходы можно использовать в любых типовых конфигурация, в основе которых лежит типовая библиотека БСП.
Итак, переходим к первой части:
Часть 1. Использование возможностей функций "ПараметрыРаботыКлиентаПриЗапуске" и "ПараметрыРаботыКлиента".
Применение данных функций крайне простое, в результате применения - фиксированная структура, содержащая в себе колоссально количество информации (почему-то вспомнилась сразу конфигурация ЗУП 3.1).
Элементарный код использования на клиенте вот такой:
&НаКлиенте
Процедура Команда1(Команда)
РезультатПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске();
КонецПроцедуры
Результат выполнения - это огромная фиксированная структура:
Рис.1. Структура - результат выполнения функции ПараметрыРаботыКлиентаПриЗапуске.
Рис.2. Структура (продолжение) - результат выполнения функции ПараметрыРаботыКлиентаПриЗапуске().
Из данной структуры можно получить информацию как о типе платформы, ее версии и рекомендуемому объему оперативной памяти, так и о параметрах блокировке сеанса, их продолжительности и дате последнего резервного копирования текущей базы, а так же - всех подсистемах конфигурации.
Рис.3. Структура (продолжение) - информация о настройке резервного копирования.
Рис.4. Структура (продолжение) - информация о блокировке сеансов.
Функция ПараметрыРаботыКлиента() возвращает несколько "урезанную" структуру данных:
Рис.5. Структура "урезанная"- результат выполнения функции ПараметрыРаботыКлиента().
Далее, я приведу простой пример использования функции ПараметрыРаботыКлиента(). Вот такой (получаю все подсистемы конфигурации из фиксированного соответствия):
&НаКлиенте
Процедура Команда1(Команда)
РезультатПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске();
Для Каждого ИмяПодсистемы ИЗ РезультатПриЗапуске.ИменаПодсистем Цикл
Сообщить(ИмяПодсистемы.Ключ); // Строка, например "ТехнологияСервиса.ЦентрКонтроляКачества"
КонецЦикла;
КонецПроцедуры
Затем, я могу посмотреть состав необходимой мне подсистемы и права на нее.
Итак, в первой части статьи мы разобрали две интересные функции - ПараметрыРаботыКлиента() и ПараметрыРаботыКлиентаПриЗапуске(), которые возвращают большой массив информации о структуре и настройках базы данных в фиксированной структуре для удобного использования в дальнейшем.
Для справки отмечу, что в данной структуре можно даже "нарыть" СНИЛС Администратора (через привязанное физическое лицо).
Теперь, перейдем ко второй части статьи. В ней мы рассмотрим процедуру диалога выбора (вопроса) пользователю - ПоказатьВопросПользователю().
Часть 2. ПоказатьВопросПользователю() - Процедура диалога выбора (вопроса) и ее основные возможности.
По-факту - это обычный "вопрос пользователю" - ПоказатьВопрос(), но достаточно более продвинутый, имеющий более гибкие настройки.
Сначала отмечу, что код ПоказатьВопросПользователю() в "базовом" использовании мало отличается от ПоказатьВопрос() и данная процедура выглядит вот так:
&НаКлиенте
Процедура Команда1(Команда) // БСП-шная версия
ТекстВопроса = "Выбрать ответ на вопрос";
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВопросаСервер", ЭтотОбъект);
//В БСП можно работать как через "РежимДиалогаВопрос", так и через "СтруктуруКнопок"
Кнопки = РежимДиалогаВопрос.ДаНетОтмена;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОповещениеОЗакрытии, ТекстВопроса, Кнопки, );
КонецПроцедуры
&НаКлиенте
Процедура ЗадатьВопрос(Команда) // Версия через платформу
Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос",ЭтотОбъект);
// Здесь, ПоказатьВопрос работает через "РежимДиалогаВопрос"
ПоказатьВопрос(Оповещение, "Пойдешь на улицу?", РежимДиалогаВопрос.ДаНетОтмена,0,КодВозвратаДиалога.Да, "");
КонецПроцедуры
Типовой результат выполнения процедуры ПоказатьВопросПользователю() будет вот такой (обычный вопрос - "да", "нет", "отмена"):
Рис.6. Диалог ответа на вопрос через процедуру ПоказатьВопросПользователю(). Практически "аналог" показатьВопрос().
Далее, мы получим дополнительные возможности диалога, изменив код, добавив собственные настройки:
&НаКлиенте
Процедура Команда1(Команда)
ТекстВопроса = "Нажмите на кнопку для выбора задания";
ДополнительныеПараметры = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВопросаСервер", ЭтотОбъект);
ДопПараметры = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ДопПараметры.КнопкаПоУмолчанию = 1; // отметим кнопку 1 (по-умолчанию)
ДопПараметры.Таймаут = 10; // (посадим таймаут на кнопку 1)
ДопПараметры.КнопкаТаймаута = 1;
ДопПараметры.Заголовок = "Выбор выполнения задания";
ДопПараметры.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
//
//Кнопки = РежимДиалогаВопрос.ДаНетОтмена;
//
Кнопки = Новый СписокЗначений(); // здесь мы добавим пять произвольных кнопок
Кнопки.Добавить(1,"Задание 1");
Кнопки.Добавить(2,"Задание 2");
Кнопки.Добавить(3,"Задание 3");
Кнопки.Добавить(4,"Задание 4");
Кнопки.Добавить(5,"Задание 5");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОповещениеОЗакрытии, ТекстВопроса, Кнопки, ДопПараметры);
КонецПроцедуры
// Процедура "оповещения" выбора нажатия кнопки - далее идем по тому "пути", который выбрали:
&НаКлиенте
Процедура ПослеВопросаСервер(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ.Значение = 5 Тогда
Сообщить("Нажата кнопка 5");
ВыполнитьПроцедуруНаСервере5(); // можно и на сервере и на клиенте, конечно
ИначеЕсли Ответ.Значение = 4 Тогда
Сообщить("Нажата кнопка 4");
ВыполнитьПроцедуруНаСервере4();
ИначеЕсли Ответ.Значение = 3 Тогда
Сообщить("Нажата кнопка 3");
ВыполнитьПроцедуруНаСервере3();
ИначеЕсли Ответ.Значение = 2 Тогда
Сообщить("Нажата кнопка 2");
ВыполнитьПроцедуруНаСервере2();
Иначе
Сообщить("Нажата кнопка 1 (по умолчанию, спустя 10 сек)");
ВыполнитьПроцедуруПоУмолчаниюНаСервере();
КонецЕсли;
КонецПроцедуры
Здесь, я запускаю задание, в зависимости от нажатой кнопки. Причем, "Задание 1" - запускается по-умолчанию в течение 10 секунд.
В результате запроса диалога - мы получим вот такую форму:
Рис.7. Настройка диалога пользователя. Задание 1 начнет выполняться через 10 секунд по-умолчанию.
Согласно описанию вводных параметров процедуры в библиотеке стандартных подсистем, они могут быть такие:
// Структура:
// * КнопкаПоУмолчанию (Произвольный) - определяет кнопку по умолчанию по типу кнопки или по связанному с ней значению.
// * Таймаут (Число) - интервал времени в секундах до автоматического закрытия окна вопроса.
// * КнопкаТаймаута (Произвольный) - кнопка (по типу кнопки или по связанному с ней значению), на которой отображается количество секунд, оставшихся доистечения таймаута.
// * Заголовок (Строка) - заголовок вопроса.
// * ПредлагатьБольшеНеЗадаватьЭтотВопрос (Булево) - если Истина, то в окне вопроса будет доступен одноименный флажок.
// * БольшеНеЗадаватьЭтотВопрос (Булево) - принимает значение, выбранное пользователем в соответствующем флажке.
// * БлокироватьВесьИнтерфейс (Булево) - если Истина, форма вопроса открывается, блокируя работу всех остальных открытых окон, включая главное окно.
// * Картинка (Картинка) - картинка, выводимая в окне вопроса.
// * ТекстФлажка (Строка) - текст флажка "Больше не спрашивать".
Пример работы данной процедуры выглядит вот так:
Рис.8. Демонстрация работы диалога пользователя возможностями Библиотеки стандартных подсистем 3.1.6.
Отмечу еще раз, что данный код может работать в любой типовой конфигурации, в основе которой лежит библиотека стандартных подсистем.
Далее, предлагаю (в рамках данной статьи) - перейти в разделу "Мои материалы по возможностям БСП".
Мои материалы по возможностям Библиотеки стандартных подсистем (БСП)
Спасибо всем, кто прочитал до данного момента.
Также прошу ознакомиться с другими моими статьями по интересному функционалу типовых конфигураций в рамках библиотеки стандартных подсистем и по разделам. Я накопил достаточный объем знаний по данной библиотеки, ниже наиболее интересные статьи по ней.
Если вам интересен мой практический подход и информация, которую вы сможете реально использовать, если у вас есть желание, чтобы данный комплекс статей наполнялся практическими материалы для программистов - я не откажусь от поддержки как данной статьи, так и всего комплекса статей в целом.
Обновленный список материалов по применению БСП на практике, доступных на этом ресурсе:
Возможности администрирования баз и кластера с помощью библиотеки стандартных подсистем:
Профили управления доступом к объектам в любой конфигурации на БСП
Журнал регистрации - основные методы работы через БСП
Базовые приемы работы с кластером 1С при помощи БСП
Запуск длительных операций с помощью библиотеки стандартных подсистем:
БСП - рабочие примеры асинхронного запуска функций и процедур
Работа со штрихкодами и печатными макетами с помощью библиотеки стандартных подсистем:
Генерация штрихкодов с помощью БСП для программистов
Печать макета MS Word в любом документе с помощью БСП
Префиксация объектов - полезный типовой функционал БСП
Работаем с контактной информацией в конфигурациях на БСП
Разные прикладные разработки:
Генератор маршрута по "документам отгрузки" в Google.Maps
Честный знак - запрос содержания упаковки по ее коду [табачная продукция]