Синтаксис и применение НастройкиКомандногоИнтерфейса.По умолчанию в платформе 1С:Предприятие. Описание и примеры кода.
Синтаксис
Новый НастройкиКомандногоИнтерфейсаПолное описание, параметры и ограничения
НастройкиКомандногоИнтерфейса.По умолчанию
НастройкиКомандногоИнтерфейса (CommandInterfaceSettings)
По умолчанию
Синтаксис:
Новый НастройкиКомандногоИнтерфейса
Методическая информация
Практические примеры
Два пакета настроек панели разделов: сохраняем варианты в памяти
Создать собственные настройки командного интерфейса, упаковать текстовый и комбинированный режимы в два ХранилищеЗначения и реально перечитать их после изменения источника и извлечённого экземпляра. Показать фактический паспорт подготовленных профилей без применения к интерфейсу и без записи системных настроек.
Где и как запускать
Сервер: собственный неглобальный непривилегированный ПакетыКомандногоИнтерфейса85. Настройки и контейнеры остаются на сервере; клиент получает только Строка.
Подготовка
Будущий ручной опыт: собственная новая пустая учебная конфигурация на платформе 8.5.1.1343, управляемое приложение и толстый управляемый клиент. Не рабочая УТ, КА, УНФ или БП. Настройки и два контейнера создаются только в памяти функции без входных данных; пользовательские профили и база не читаются и не изменяются.
Общие → Общие модули → создать ПакетыКомандногоИнтерфейса85. Сервер=Да; Глобальный, Привилегированный, Вызов сервера, Клиент (управляемое приложение), Клиент (обычное приложение), Внешнее соединение=Нет. Повторное использование возвращаемых значений=Не использовать. Основной блок вставьте ЦЕЛИКОМ в пустой модуль.
Общие → Общие формы → создать управляемую ПроверкаПакетовИнтерфейса85. Добавьте один реквизит Протокол85: Строка неограниченной длины. Выведите его многострочным полем с ПутьКДанным=Протокол85 и ТолькоПросмотр=Да.
В свойствах своей формы установите АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это разные перечисления, не Булево. Обработчики сохранения и автоматического запуска не нужны.
В форме создайте команду Проверить85, Действие=Проверить85; выведите кнопку. Второй блок вставьте ЦЕЛИКОМ в пустой модуль формы. Настоящий объект Команда передаёт платформа при нажатии; не подставляйте его вручную.
Общие → Общие команды → создать ОткрытьПакетыИнтерфейса85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы. Третий блок вставьте ЦЕЛИКОМ в модуль этой общей команды; &НаКлиенте задаёт исполнение, а #Если проверяет вид приложения.
После будущей проверки синтаксиса сохраните конфигурацию и обновите только собственную учебную базу. Откройте её толстым управляемым клиентом, своей общей командой откройте форму и нажмите Проверить85. Все настройки, упаковка и проверки находятся на сервере; клиенту передаётся только строка.
Не нужны виртуальная машина, отдельный системный пользователь, UUID, справочники, разрешение на запись или системное хранилище настроек. Здесь нет сохранения профиля пользователя: ХранилищеЗначения — созданный в памяти контейнер, который мы не помещаем в базу или файл.
Компиляция и выполнение в 1С ещё не проверялись. Любое исключение, иной фактический тип или режим означает незавершённый опыт, а не успешное создание пакетов.
Функция ПодготовитьПакеты85() Экспорт
Настройки85 = Новый НастройкиКомандногоИнтерфейса();
Если ТипЗнч(Настройки85) <> Тип("НастройкиКомандногоИнтерфейса") Тогда
ВызватьИсключение "Не созданы собственные настройки командного интерфейса";
КонецЕсли;
Настройки85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Текст;
ОписаниеА85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.Текст);
ПакетА85 = Новый ХранилищеЗначения(Настройки85);
Если ТипЗнч(ПакетА85) <> Тип("ХранилищеЗначения") Тогда
ВызватьИсключение "Не создан первый собственный пакет";
КонецЕсли;
Настройки85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.КартинкаИТекст;
ОписаниеБ85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.КартинкаИТекст);
ПакетБ85 = Новый ХранилищеЗначения(Настройки85);
Если ТипЗнч(ПакетБ85) <> Тип("ХранилищеЗначения") Тогда
ВызватьИсключение "Не создан второй собственный пакет";
КонецЕсли;
Настройки85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Картинка;
ОписаниеИсточника85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.Картинка);
ПрочитаноА85 = ПакетА85.Получить();
ПрочитаноБ85 = ПакетБ85.Получить();
ОписаниеПрочитанногоА85 = ОписаниеПрофиля85(ПрочитаноА85, ОтображениеПанелиРазделов.Текст);
ОписаниеПрочитанногоБ85 = ОписаниеПрофиля85(ПрочитаноБ85, ОтображениеПанелиРазделов.КартинкаИТекст);
Если ОписаниеПрочитанногоА85 <> ОписаниеА85 Или ОписаниеПрочитанногоБ85 <> ОписаниеБ85 Тогда
ВызватьИсключение "Первое чтение не подтвердило подготовленные режимы";
КонецЕсли;
ПрочитаноА85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Картинка;
ОписаниеИзмененногоА85 = ОписаниеПрофиля85(ПрочитаноА85, ОтображениеПанелиРазделов.Картинка);
ПовторноА85 = ПакетА85.Получить();
ПовторноБ85 = ПакетБ85.Получить();
ОписаниеПовторноА85 = ОписаниеПрофиля85(ПовторноА85, ОтображениеПанелиРазделов.Текст);
ОписаниеПовторноБ85 = ОписаниеПрофиля85(ПовторноБ85, ОтображениеПанелиРазделов.КартинкаИТекст);
ОписаниеИсточникаПовторно85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.Картинка);
Если ОписаниеПовторноА85 <> ОписаниеА85
Или ОписаниеПовторноБ85 <> ОписаниеБ85
Или ОписаниеИсточникаПовторно85 <> ОписаниеИсточника85
Или ОписаниеИзмененногоА85 <> ОписаниеИсточникаПовторно85 Тогда
ВызватьИсключение "Повторное чтение не подтвердило сохранение подготовленных режимов";
КонецЕсли;
Возврат "Пакет 1: " + ОписаниеПовторноА85
+ "; пакет 2: " + ОписаниеПовторноБ85
+ "; исходный объект: " + ОписаниеИсточникаПовторно85
+ "; изменённый извлечённый экземпляр: " + ОписаниеИзмененногоА85
+ "; повторное чтение обоих пакетов подтвердило их публичный режим";
КонецФункции
Функция ОписаниеПрофиля85(Знач Настройки85, Знач ОжидаемыйРежим85)
Если ТипЗнч(Настройки85) <> Тип("НастройкиКомандногоИнтерфейса")
Или ТипЗнч(ОжидаемыйРежим85) <> Тип("ОтображениеПанелиРазделов") Тогда
ВызватьИсключение "Нужны собственные настройки и настоящий ожидаемый режим";
КонецЕсли;
Режим85 = Настройки85.ОтображениеПанелиРазделов;
Если ТипЗнч(Режим85) <> Тип("ОтображениеПанелиРазделов") Или Режим85 <> ОжидаемыйРежим85 Тогда
ВызватьИсключение "Фактический тип или режим профиля не подтверждён";
КонецЕсли;
Если Режим85 = ОтображениеПанелиРазделов.Текст Тогда
Возврат "только текст";
ИначеЕсли Режим85 = ОтображениеПанелиРазделов.КартинкаИТекст Тогда
Возврат "картинка и текст";
ИначеЕсли Режим85 = ОтображениеПанелиРазделов.Картинка Тогда
Возврат "только картинка";
Иначе
ВызватьИсключение "Режим не входит в три варианта собственного опыта";
КонецЕсли;
КонецФункцииПолный модуль собственной формы ПроверкаПакетовИнтерфейса85
Общие → Общие формы → ПроверкаПакетовИнтерфейса85 → пустой модуль формы. Вставить ЦЕЛИКОМ; своя команда Проверить85 связана через Действие.
Настоящая команда формы &НаКлиенте; обращение к своему общему модулю &НаСервере. Передаётся только строковый паспорт.
&НаКлиенте
Процедура Проверить85(Команда)
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "Проверить85" Тогда
ВызватьИсключение "Нужна настоящая собственная команда формы";
КонецЕсли;
Протокол85 = "";
Попытка
Получено85 = ПодготовитьНаСервере85();
Если ТипЗнч(Получено85) <> Тип("Строка") Или Получено85 = "" Тогда
ВызватьИсключение "Сервер не вернул полный строковый паспорт";
КонецЕсли;
Протокол85 = Получено85;
Исключение
Протокол85 = "Пакеты НЕ подтверждены. Опыт остановлен.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция ПодготовитьНаСервере85()
Если ИмяФормы <> "ОбщаяФорма.ПроверкаПакетовИнтерфейса85"
Или АвтоматическоеСохранениеДанныхВНастройках <> АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать
Или СохранениеДанныхВНастройках <> СохранениеДанныхФормыВНастройках.НеИспользовать Тогда
ВызватьИсключение "Нужна своя форма с отключённым сохранением данных";
КонецЕсли;
Отчёт85 = ПакетыКомандногоИнтерфейса85.ПодготовитьПакеты85();
Если ТипЗнч(Отчёт85) <> Тип("Строка") Или Отчёт85 = "" Тогда
ВызватьИсключение "Не получен полный строковый паспорт собственного модуля";
КонецЕсли;
Возврат Отчёт85;
КонецФункцииПолный модуль собственной общей команды ОткрытьПакетыИнтерфейса85
Общие → Общие команды → ОткрытьПакетыИнтерфейса85 → пустой модуль команды. Вставить ЦЕЛИКОМ, включить без параметра в свой учебный интерфейс.
&НаКлиенте; толстый управляемый клиент, настоящее ОбработкаКоманды с двумя штатными параметрами.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Если ПараметрКоманды <> Неопределено
Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
ВызватьИсключение "Откройте собственную форму штатной общей командой без параметра";
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ПроверкаПакетовИнтерфейса85");
#Иначе
ВызватьИсключение "Нужен толстый управляемый клиент";
#КонецЕсли
КонецПроцедурыРазбор по шагам
Создаём собственные НастройкиКомандногоИнтерфейса и сразу задаём Текст. Проверка читает настоящий режим и формирует его описание; значение по умолчанию нам не требуется.
Первый ХранилищеЗначения принимает фактический объект настроек. Метка Сериализуется в описании настроек разрешает помещать их в такой контейнер. Создание контейнера само по себе не записывает пользовательский профиль.
Тот же исходный объект меняем на КартинкаИТекст и создаём второй пакет. Затем исходные настройки меняем ещё раз — на Картинка. Теперь у нас три разных целевых состояния, поэтому подмена контейнеров исходным объектом заметна.
Получить у каждого пакета возвращает произвольное значение: перед чтением свойства проверяем реальный тип НастройкиКомандногоИнтерфейса. Первый результат должен иметь Текст, второй — КартинкаИТекст. Оба фактических режима используются в сравнении и описании.
Первый извлечённый экземпляр изменяем на Картинка. После этого снова вызываем Получить у обоих пакетов и проверяем реальные Текст и КартинкаИТекст. Старые переменные не заменяют повторное чтение.
Снова читаем режим исходного объекта. Только после всех проверок строим строковый паспорт из фактических описаний двух перечитанных пакетов, источника и изменённого извлечённого экземпляра.
Форма очищает прежний текст перед обращением к серверу. При успехе показывает паспорт; при ошибке пишет, что пакеты не подтверждены, и передаёт исключение. Прошлый успешный отчёт не должен выглядеть результатом нового неудачного опыта.
Как проверить результат
В своей учебной базе откройте форму настоящей общей командой и нажмите Проверить85. Ожидайте: пакет 1 — только текст, пакет 2 — картинка и текст, исходный объект и изменённый извлечённый экземпляр — только картинка.
В отладчике остановитесь перед первым Получить. Проверьте фактическое поле Настройки85: Картинка. Затем по шагам убедитесь, что ПрочитаноА85 имеет Текст, а ПрочитаноБ85 — КартинкаИТекст. Не вызывайте обработчик вручную.
После изменения ПрочитаноА85 проверьте его реальную Картинка. Выполните оба повторных Получить: ПовторноА85 должен снова иметь Текст, ПовторноБ85 — КартинкаИТекст. Именно эти новые результаты дают окончательный паспорт.
Только в копии своего учебного модуля временно поменяйте первое присваивание Текст на Картинка, оставив ожидаемый Текст. Первое сравнение должно остановить опыт до упаковки; успешный паспорт появиться не должен.
Отдельный учебный опыт в своей копии: замените ПовторноА85 = ПакетА85.Получить() на ПовторноА85 = ПрочитаноА85. Изменённый экземпляр имеет Картинка, поэтому проверка должна остановиться. После проверки верните исходную строку вручную.
Повторное обычное нажатие создаёт новые собственные объекты и контейнеры. Не требуйте иных значений или изменений реальной панели разделов: такой операции в уроке нет.
Если компиляция, обращение к серверу или чтение контейнера завершились ошибкой, результат — незавершённый опыт. Не выдавайте сообщение об остановке за подтверждение упаковки или независимости.
Ожидаемый результат
Будущий успешный паспорт: пакет 1 — только текст; пакет 2 — картинка и текст; исходный объект и изменённый извлечённый экземпляр — только картинка. Оба повторно прочитанных пакета сохраняют заданные публичные режимы. Реальная панель разделов не изменяется этим кодом. Запуск в 1С пока не выполнен.
На что обратить внимание
НастройкиКомандногоИнтерфейса и его публичное свойство доступны на сервере и в толстом клиенте. Более широкая доступность перечисления ОтображениеПанелиРазделов не разрешает создавать настройки в тонком клиенте.
Сериализуется разрешает ХранилищеЗначения, но не доказывает конкретный XML, JSON, XDTO или внутренний строковый формат этих настроек. Никакого такого формата урок не строит и не сравнивает.
Получить возвращает Произвольный. Проверка типа стоит перед доступом к свойству каждого извлечённого значения; неизвестный объект не принимается за настройки по имени переменной.
Проверяется единственное публичное свойство режима и его фактическое сохранение при собственных изменениях. Это не сравнение скрытых полей, полной эквивалентности объектов, ссылочной идентичности или сериализованных байтов.
Успех упаковки не означает применения профиля к панели разделов. Системное хранилище настроек не вызывается, пользовательские настройки не сохраняются и реальная панель не обязана изменяться.
Конструктор контейнера требует фактическое собственное значение; необязательное сжатие не задаётся. Размер, алгоритм и побайтовая каноничность пакетов не предполагаются.
Описание режима получается явным сопоставлением фактического перечисления с его документированным смыслом. Код не использует числовые значения enum и не предполагает, что Строка(enum) совпадает с именем.
Новый запуск не продолжает и не чинит неудачный опыт. Проверки формы и имена команд помогают не перепутать учебный маршрут, но не являются защитой от подделки вызова.
В этой функции нет работы с базой, пользовательскими профилями, файловой системой или сетью. Будущий запуск на сервере из собственной формы остаётся реальным обращением клиента к серверу; его ошибки не скрываются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.