Настроить реальное меню создания своего иерархического списка без разрешения записи

Учебные задачи

У своей формы списка есть стандартные команды Создать и Создать группу. Заголовок меняем осмысленно; пустая Картинка намеренно убирает значок, не изображает загрузку файла.

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

Полный модуль собственной основной управляемой формы списка Справочник.УчебныеЗаметки85.Форма.Список85.

Подготовка

  1. Создайте отдельную пустую CF УчебныеКнопкиСоздания85 на 8.5.1.1343, управляемое приложение, интерфейс Версия 8.5, без расширений и других бизнес-объектов.

  2. Создайте единственный справочник УчебныеЗаметки85: иерархия групп и элементов, код строка 9 с авто-нумерацией, наименование 100. Не создавайте ни элемента, ни группы.

  3. Мастером создайте основную управляемую форму списка Список85 с динамическим списком и стандартными командами Создать и Создать группу в верхней командной панели. Обе команды должны реально присутствовать: иначе группы кнопок создания для демонстрации не будет.

  4. В форме списка добавьте Состояние85 Строка 500 только для просмотра; свяжите ПриСозданииНаСервере с кодом основного модуля. Не включайте автосохранение списка или дополнительные обработчики записи.

  5. Мастером создайте основные формы элемента и группы. В оба модуля вставьте supporting module запрета записи. В модуль объекта справочника вставьте отдельный supporting module ПередЗаписью: он запрещает любую запись даже вне формы.

  6. Откройте только собственный пустой список в настольном тонком или толстом управляемом клиенте. Не запускайте обработку рабочей конфигурации; содержимое каталога должно остаться пустым.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПроверитьСвойПустойСтенд();
    Если Метаданные.Справочники.Найти("УчебныеЗаметки85") = Неопределено Тогда
        ВызватьИсключение "Нужен свой иерархический справочник УчебныеЗаметки85";
    КонецЕсли;
    Выборка = Справочники.УчебныеЗаметки85.Выбрать();
    Если Выборка.Следующий() Тогда
        ВызватьИсключение "Учебный справочник должен оставаться пустым";
    КонецЕсли;
    ЭтотОбъект.ЗаголовокГруппыКнопокСоздания = "Учебная заметка или группа";
    ЭтотОбъект.КартинкаГруппыКнопокСоздания = Новый Картинка;
    Если ЭтотОбъект.ЗаголовокГруппыКнопокСоздания <> "Учебная заметка или группа"
        Или ТипЗнч(ЭтотОбъект.КартинкаГруппыКнопокСоздания) <> Тип("Картинка") Тогда
        ВызватьИсключение "Собственная настройка меню создания не сохранилась";
    КонецЕсли;
    Состояние85 = "Свой пустой список: задаем заголовок меню создания и намеренно убираем картинку";
КонецПроцедуры

&НаСервере
Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 1 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры
Одинаковый модуль собственных основных форм элемента и группы

Обе собственные управляемые формы УчебныеЗаметки85; события ПриСозданииНаСервере и ПередЗаписьюНаСервере.

Обе собственные управляемые формы УчебныеЗаметки85; события ПриСозданииНаСервере и ПередЗаписьюНаСервере.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ТолькоПросмотр = Истина;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Отказ = Истина;
    ВызватьИсключение "Форма учебной заметки не разрешает запись";
КонецПроцедуры
Модуль собственного справочника: записи не разрешены

Справочник.УчебныеЗаметки85, модуль объекта, событие ПередЗаписью.

Справочник.УчебныеЗаметки85, модуль объекта, событие ПередЗаписью.

Процедура ПередЗаписью(Отказ)
    Отказ = Истина;
    ВызватьИсключение "УчебныеЗаметки85: запись запрещена, включая создание группы";
КонецПроцедуры

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

  1. Guard проверяет точную платформу, имя CF, единственный собственный каталог, отсутствие остальных бизнес-объектов и расширений. Настоящая выборка подтверждает, что учебный список пуст.

  2. ЗаголовокГруппыКнопокСоздания меняет надпись платформенного подменю создания. Это не Заголовок формы и не имя пользовательской команды.

  3. Новый Картинка создает настоящую пустую картинку. Ее назначаем намеренно, чтобы убрать значок; не используем файл, URL или несуществующую картинку библиотеки.

  4. Свойства доступны RW на сервере; меняем их при создании формы, чтобы не получать дополнительный RPC из клиентского обработчика.

  5. Readback проверяет строку и реальный тип Картинка. Видимость подменю отдельно проверяется глазами в интерфейсе 8.5 при двух собственных стандартных командах создания.

  6. Supporting modules запрещают запись и группы, и элемента. Команду создания можно открыть для просмотра собственного незаписанного объекта, но нельзя подтвердить запись.

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

  1. В своем списке нет строк, статус сообщает об отключенной картинке. Подменю создания имеет заголовок Учебная заметка или группа и не имеет заданного значка.

  2. В подменю присутствуют собственные стандартные команды элемента и группы. Если мастер не вывел обе команды, исправьте только свой стенд, а не код native свойств.

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

  4. Повторно откройте список: выборка остается пустой, свойства назначаются заново без накопления данных.

  5. В Такси свойства не дают эффекта: native помечает оба как применяемые только в интерфейсе Версия 8.5.

  6. Для отрицательного теста удалите свою команду Создать группу: readback свойств не доказывает наличие двух пунктов меню; восстановите команду мастером.

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

Две новые native настройки показаны на реальной собственной группе стандартных команд, с пустым каталогом и запретом записи.

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

  1. Тесты статические, UI в 1С не запускался.

  2. Не применяйте урок к рабочему справочнику: supporting модуль запрещает все его записи.

  3. Новый Картинка — пустой значок, не пример чтения изображения из файла.

  4. Два свойства не создают стандартные команды автоматически.

  5. В интерфейсе Такси эффекта нет по native справке.

  6. Не удаляйте guard ради выполнения на заполненном каталоге.

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

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

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

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

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