Отличить добавление объекта расширением от изменения существующего

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

У собственного справочника без расширений нет владельца-расширения и нет изменений расширениями. Объясняем разницу этих проверок и заимствования объекта.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

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

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

  6. Все проверки этого блока только читают метаданные собственного справочника. Изменения настроек из подготовки выполняйте вручную в Конфигураторе только новой базы Учебная85, затем обновляйте конфигурацию БД.

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


Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;

Описание = Метаданные.Справочники.УчебныеТовары;
Сообщить(Не Описание.ЕстьИзмененияРасширениямиКонфигурации());
ДобавившееРасширение = Описание.РасширениеКонфигурации();
Сообщить(ДобавившееРасширение = Неопределено);
Сообщить("Принадлежность объекта: " + Строка(Описание.ПринадлежностьОбъекта));
Сообщить("Тип идентификатора расширяемого объекта: " + Строка(ТипЗнч(Описание.ОбъектРасширяемойКонфигурации)));

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

  1. ЕстьИзмененияРасширениямиКонфигурации проверяет изменение самого объекта или дочерних объектов в текущем сеансе.

  2. РасширениеКонфигурации возвращает описание расширения, которым объект был добавлен. Изменение существующего объекта и добавление нового — разные события.

  3. ПринадлежностьОбъекта описывает собственный/заимствованный объект. ОбъектРасширяемойКонфигурации относится к связи заимствованного объекта с исходным при соответствующих настройках расширения.

  4. В собственной базе без расширений первые две проверки истинны. Не назначаем заранее произвольный UUID для незаимствованного объекта и не редактируем это свойство.

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

  1. Две проверки дают Истина, затем фактические сведения о принадлежности.

  2. Код не устанавливает, не отключает и не сохраняет расширения. Если в учебную базу уже установлено расширение, сначала пересмотрите подготовку.

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

Чтение происхождения и изменений объекта без вмешательства в состав расширений.

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

  1. Неопределено у РасширениеКонфигурации не доказывает отсутствие изменений объекта расширениями.

  2. UUID заимствованного объекта не равен UUID записи товара.

  3. Проверки отражают текущий сеанс и активный состав расширений, не всю историю изменения конфигурации.

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

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

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

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

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