НастройкиКомандногоИнтерфейса.По умолчанию

Конструкторы

Синтаксис и применение НастройкиКомандногоИнтерфейса.По умолчанию в платформе 1С:Предприятие. Описание и примеры кода.

Синтаксис

Новый НастройкиКомандногоИнтерфейса
Полное описание, параметры и ограничения

НастройкиКомандногоИнтерфейса.По умолчанию

НастройкиКомандногоИнтерфейса (CommandInterfaceSettings)

По умолчанию

Синтаксис:
Новый НастройкиКомандногоИнтерфейса
Методическая информация

Практические примеры

Два пакета настроек панели разделов: сохраняем варианты в памяти

Создать собственные настройки командного интерфейса, упаковать текстовый и комбинированный режимы в два ХранилищеЗначения и реально перечитать их после изменения источника и извлечённого экземпляра. Показать фактический паспорт подготовленных профилей без применения к интерфейсу и без записи системных настроек.

Где и как запускать

Сервер: собственный неглобальный непривилегированный ПакетыКомандногоИнтерфейса85. Настройки и контейнеры остаются на сервере; клиент получает только Строка.

Подготовка

  1. Будущий ручной опыт: собственная новая пустая учебная конфигурация на платформе 8.5.1.1343, управляемое приложение и толстый управляемый клиент. Не рабочая УТ, КА, УНФ или БП. Настройки и два контейнера создаются только в памяти функции без входных данных; пользовательские профили и база не читаются и не изменяются.

  2. Общие → Общие модули → создать ПакетыКомандногоИнтерфейса85. Сервер=Да; Глобальный, Привилегированный, Вызов сервера, Клиент (управляемое приложение), Клиент (обычное приложение), Внешнее соединение=Нет. Повторное использование возвращаемых значений=Не использовать. Основной блок вставьте ЦЕЛИКОМ в пустой модуль.

  3. Общие → Общие формы → создать управляемую ПроверкаПакетовИнтерфейса85. Добавьте один реквизит Протокол85: Строка неограниченной длины. Выведите его многострочным полем с ПутьКДанным=Протокол85 и ТолькоПросмотр=Да.

  4. В свойствах своей формы установите АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это разные перечисления, не Булево. Обработчики сохранения и автоматического запуска не нужны.

  5. В форме создайте команду Проверить85, Действие=Проверить85; выведите кнопку. Второй блок вставьте ЦЕЛИКОМ в пустой модуль формы. Настоящий объект Команда передаёт платформа при нажатии; не подставляйте его вручную.

  6. Общие → Общие команды → создать ОткрытьПакетыИнтерфейса85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы. Третий блок вставьте ЦЕЛИКОМ в модуль этой общей команды; &НаКлиенте задаёт исполнение, а #Если проверяет вид приложения.

  7. После будущей проверки синтаксиса сохраните конфигурацию и обновите только собственную учебную базу. Откройте её толстым управляемым клиентом, своей общей командой откройте форму и нажмите Проверить85. Все настройки, упаковка и проверки находятся на сервере; клиенту передаётся только строка.

  8. Не нужны виртуальная машина, отдельный системный пользователь, UUID, справочники, разрешение на запись или системное хранилище настроек. Здесь нет сохранения профиля пользователя: ХранилищеЗначения — созданный в памяти контейнер, который мы не помещаем в базу или файл.

  9. Компиляция и выполнение в 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");
    #Иначе
        ВызватьИсключение "Нужен толстый управляемый клиент";
    #КонецЕсли
КонецПроцедуры

Разбор по шагам

  1. Создаём собственные НастройкиКомандногоИнтерфейса и сразу задаём Текст. Проверка читает настоящий режим и формирует его описание; значение по умолчанию нам не требуется.

  2. Первый ХранилищеЗначения принимает фактический объект настроек. Метка Сериализуется в описании настроек разрешает помещать их в такой контейнер. Создание контейнера само по себе не записывает пользовательский профиль.

  3. Тот же исходный объект меняем на КартинкаИТекст и создаём второй пакет. Затем исходные настройки меняем ещё раз — на Картинка. Теперь у нас три разных целевых состояния, поэтому подмена контейнеров исходным объектом заметна.

  4. Получить у каждого пакета возвращает произвольное значение: перед чтением свойства проверяем реальный тип НастройкиКомандногоИнтерфейса. Первый результат должен иметь Текст, второй — КартинкаИТекст. Оба фактических режима используются в сравнении и описании.

  5. Первый извлечённый экземпляр изменяем на Картинка. После этого снова вызываем Получить у обоих пакетов и проверяем реальные Текст и КартинкаИТекст. Старые переменные не заменяют повторное чтение.

  6. Снова читаем режим исходного объекта. Только после всех проверок строим строковый паспорт из фактических описаний двух перечитанных пакетов, источника и изменённого извлечённого экземпляра.

  7. Форма очищает прежний текст перед обращением к серверу. При успехе показывает паспорт; при ошибке пишет, что пакеты не подтверждены, и передаёт исключение. Прошлый успешный отчёт не должен выглядеть результатом нового неудачного опыта.

Как проверить результат

  1. В своей учебной базе откройте форму настоящей общей командой и нажмите Проверить85. Ожидайте: пакет 1 — только текст, пакет 2 — картинка и текст, исходный объект и изменённый извлечённый экземпляр — только картинка.

  2. В отладчике остановитесь перед первым Получить. Проверьте фактическое поле Настройки85: Картинка. Затем по шагам убедитесь, что ПрочитаноА85 имеет Текст, а ПрочитаноБ85 — КартинкаИТекст. Не вызывайте обработчик вручную.

  3. После изменения ПрочитаноА85 проверьте его реальную Картинка. Выполните оба повторных Получить: ПовторноА85 должен снова иметь Текст, ПовторноБ85 — КартинкаИТекст. Именно эти новые результаты дают окончательный паспорт.

  4. Только в копии своего учебного модуля временно поменяйте первое присваивание Текст на Картинка, оставив ожидаемый Текст. Первое сравнение должно остановить опыт до упаковки; успешный паспорт появиться не должен.

  5. Отдельный учебный опыт в своей копии: замените ПовторноА85 = ПакетА85.Получить() на ПовторноА85 = ПрочитаноА85. Изменённый экземпляр имеет Картинка, поэтому проверка должна остановиться. После проверки верните исходную строку вручную.

  6. Повторное обычное нажатие создаёт новые собственные объекты и контейнеры. Не требуйте иных значений или изменений реальной панели разделов: такой операции в уроке нет.

  7. Если компиляция, обращение к серверу или чтение контейнера завершились ошибкой, результат — незавершённый опыт. Не выдавайте сообщение об остановке за подтверждение упаковки или независимости.

Ожидаемый результат

Будущий успешный паспорт: пакет 1 — только текст; пакет 2 — картинка и текст; исходный объект и изменённый извлечённый экземпляр — только картинка. Оба повторно прочитанных пакета сохраняют заданные публичные режимы. Реальная панель разделов не изменяется этим кодом. Запуск в 1С пока не выполнен.

На что обратить внимание

  1. НастройкиКомандногоИнтерфейса и его публичное свойство доступны на сервере и в толстом клиенте. Более широкая доступность перечисления ОтображениеПанелиРазделов не разрешает создавать настройки в тонком клиенте.

  2. Сериализуется разрешает ХранилищеЗначения, но не доказывает конкретный XML, JSON, XDTO или внутренний строковый формат этих настроек. Никакого такого формата урок не строит и не сравнивает.

  3. Получить возвращает Произвольный. Проверка типа стоит перед доступом к свойству каждого извлечённого значения; неизвестный объект не принимается за настройки по имени переменной.

  4. Проверяется единственное публичное свойство режима и его фактическое сохранение при собственных изменениях. Это не сравнение скрытых полей, полной эквивалентности объектов, ссылочной идентичности или сериализованных байтов.

  5. Успех упаковки не означает применения профиля к панели разделов. Системное хранилище настроек не вызывается, пользовательские настройки не сохраняются и реальная панель не обязана изменяться.

  6. Конструктор контейнера требует фактическое собственное значение; необязательное сжатие не задаётся. Размер, алгоритм и побайтовая каноничность пакетов не предполагаются.

  7. Описание режима получается явным сопоставлением фактического перечисления с его документированным смыслом. Код не использует числовые значения enum и не предполагает, что Строка(enum) совпадает с именем.

  8. Новый запуск не продолжает и не чинит неудачный опыт. Проверки формы и имена команд помогают не перепутать учебный маршрут, но не являются защитой от подделки вызова.

  9. В этой функции нет работы с базой, пользовательскими профилями, файловой системой или сетью. Будущий запуск на сервере из собственной формы остаётся реальным обращением клиента к серверу; его ошибки не скрываются.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.