Проверить путь и принадлежность собственного определения цвета

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

Свойства → Внешний вид → Цвет создаются только внутри отменяемой транзакции. Иерархические методы вызываются именно на ссылках.

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

Полный серверный модуль своей НОВОЙ пустой учебной конфигурации по подготовке; платформа 8.5.1.1343. При записи всегда откат, рабочие данные не используются. Здесь не запускался.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу и назовите корень конфигурации Учебная85. Не добавляйте учебные объекты в УТ/КА2/УНФ/БП и не подключайте расширения.

  2. Конфигуратор → Планы видов характеристик → Добавить: имя УчебныеСвойства, синоним Учебные свойства. Укажите длину кода 10, длину наименования 100, автонумерацию и контроль уникальности включите.

  3. Включите иерархию плана. В свойстве Тип выберите только Число (12 цифр, 2 дробных, неотрицательное) и Строка (30 символов, переменная длина). Дополнительные значения характеристик не назначайте.

  4. В собственной иерархии разрешите группы и элементы с двумя уровнями ниже корня. Реквизитов, табличных частей и предопределённых элементов не создавайте; история выключена.

  5. Модули собственных объектов/менеджеров пустые, подписок, расширений и внешних действий нет. Не используйте рабочую базу или её копию с действующими обработчиками.

  6. Код здесь в 1С не запускался. HTML показывает урок: проверены исходники и установленная справка именно 8.5.1.1343, но запись/открытие формы в ваших базах не выполнялись.

  7. Ссылка идентифицирует запись, объект служит для её изменения. Свойства ссылки readonly, ВерсияДанных — непрозрачная строка, не номер версии конфигурации.

  8. Непустая плановая ссылка не подтверждает существование записи; перед чтением данных отсутствующая запись исключается отдельно.

  9. В собственной базе создайте серверный общий модуль УчебныеСсылкиПланов, вставьте ВЕСЬ модуль одного урока. ВыполнитьПример() Экспорт вызывайте из собственной процедуры формы с &НаСервереБезКонтекста. Обновите конфигурацию БД.

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

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

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.ПланыВидовХарактеристик.Найти("УчебныеСвойства") = Неопределено Тогда
        ВызватьИсключение "Создайте собственный план УчебныеСвойства по подготовке";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Не запускайте урок внутри чужой транзакции";
    КонецЕсли;
    СозданныеСсылки = Новый Массив;
    НачатьТранзакцию();
    Попытка
        Корень = ПланыВидовХарактеристик.УчебныеСвойства.СоздатьГруппу();
        Корень.Наименование = "Свойства";
        Корень.УстановитьНовыйКод("У");
        Корень.Записать();
        СозданныеСсылки.Добавить(Корень.Ссылка);
        Вложенная = ПланыВидовХарактеристик.УчебныеСвойства.СоздатьГруппу();
        Вложенная.Наименование = "Внешний вид";
        Вложенная.Родитель = Корень.Ссылка;
        Вложенная.УстановитьНовыйКод("У");
        Вложенная.Записать();
        СозданныеСсылки.Добавить(Вложенная.Ссылка);
        ВидХарактеристики = ПланыВидовХарактеристик.УчебныеСвойства.СоздатьЭлемент();
        ВидХарактеристики.Наименование = "Цвет";
        ВидХарактеристики.Родитель = Вложенная.Ссылка;
        ВидХарактеристики.ТипЗначения = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(30));
        ВидХарактеристики.УстановитьНовыйКод("У");
        ВидХарактеристики.Записать();
        СозданныеСсылки.Добавить(ВидХарактеристики.Ссылка);
        СсылкаКорня = Корень.Ссылка;
        СсылкаВложенной = Вложенная.Ссылка;
        СсылкаВида = ВидХарактеристики.Ссылка;
        Сообщить(СсылкаВида.ПолноеНаименование() = "Свойства/Внешний вид/Цвет");
        Сообщить(СсылкаКорня.Уровень() = 0);
        Сообщить(СсылкаВложенной.Уровень() = 1);
        Сообщить(СсылкаВида.Уровень() = 2);
        Сообщить(СсылкаВида.ПринадлежитЭлементу(СсылкаКорня));
        Сообщить(СсылкаВида.ПринадлежитЭлементу(СсылкаВложенной));
        Сообщить(Не СсылкаВида.ПринадлежитЭлементу(СсылкаВида));
        Сообщить(СсылкаВида.Родитель = СсылкаВложенной);
        Сообщить(СсылкаКорня.ЭтоГруппа И СсылкаВложенной.ЭтоГруппа И Не СсылкаВида.ЭтоГруппа);
        ОтменитьТранзакцию();
    Исключение
        Если ТранзакцияАктивна() Тогда
            ОтменитьТранзакцию();
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    Сообщить(Не ТранзакцияАктивна());
    Для Каждого СозданнаяСсылка Из СозданныеСсылки Цикл
        Сообщить(СозданнаяСсылка.ПолучитьОбъект() = Неопределено);
    КонецЦикла;
КонецПроцедуры

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

  1. Создать две свои группы и один свой элемент; родителей задавать ссылками.

  2. Каждую запись сразу запомнить для проверки после отката.

  3. Получить три настоящие ссылки и проверить полное имя с разделителем /.

  4. Корень имеет уровень 0, вложенная группа 1, элемент 2; пустые ссылки сюда не передаются.

  5. Проверить принадлежность обоим предкам и Ложь для принадлежности самому себе.

  6. После проверки дерева отменить все три свои записи, проверить каждую ссылку.

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

  1. Девять проверок дерева Истина.

  2. После отката три проверки отсутствия Истина, транзакция закрыта.

  3. Никакие существующие группы по имени не выбираются и не удаляются.

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

Три метода иерархии ссылки разобраны на полностью созданном собственном дереве.

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

  1. Прикладной Тип существует только после создания указанных собственных метаданных. В функциональный Новый массив передаёт аргументы конструктора.

  2. Свойства ссылки не присваиваются. Для изменения копии используется именно новый объект, который возвращает Скопировать.

  3. Уровень пустой ссылки вызывает исключение; иерархические методы используются только у записанных собственных объектов внутри транзакции.

  4. Откат БД не отменяет внешние действия обработчиков. Поэтому конфигурация пустая, модули/подписки без сети, печати, файлов и почты.

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

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

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

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

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