Проверить состав справочника и настройки блокировки без блокирования

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

Стандартные поля, собственные реквизиты и табличные части — разные коллекции. Настройки блокировки читаем отдельно от выполнения реальной блокировки.

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

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

Подготовка

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

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

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

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

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

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

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


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

Описание = Метаданные.Справочники.УчебныеТовары;
ЕстьКод = Ложь;
ЕстьНаименование = Ложь;
Для Каждого Стандартный Из Описание.СтандартныеРеквизиты Цикл
    Если Стандартный.Имя = "Код" Тогда
        ЕстьКод = Истина;
    КонецЕсли;
    Если Стандартный.Имя = "Наименование" Тогда
        ЕстьНаименование = Истина;
    КонецЕсли;
КонецЦикла;
Сообщить(ЕстьКод);
Сообщить(ЕстьНаименование);
Сообщить(Описание.Реквизиты.Найти("Артикул") <> Неопределено);
Сообщить(Описание.ТабличныеЧасти.Найти("Штрихкоды") <> Неопределено);
Сообщить(Описание.ВводитсяНаОсновании.Количество() = 0);
Сообщить(Описание.ДополнительныеИндексы.Количество() = 0);
Сообщить(Описание.Характеристики.Количество() = 0);
Сообщить(Описание.Команды.Количество() = 0);
Сообщить(Описание.Макеты.Количество() = 0);
Сообщить("Число полей блокировки: " + Строка(Описание.ПоляБлокировкиДанных.Количество()));
Сообщить("Режим управления блокировкой: " + Строка(Описание.РежимУправленияБлокировкойДанных));

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

  1. Код/Наименование проверяем обходом описаний стандартных реквизитов: у этой коллекции нет Найти. Артикул ищем в обычных реквизитах, Штрихкоды — в табличных частях.

  2. Пустые ВводитсяНаОсновании, Характеристики, Команды и Макеты ожидаются именно в подготовленном маленьком справочнике.

  3. ДополнительныеИндексы — явно заданные дополнительные индексы. Ноль не означает отсутствие стандартных индексов или индексации Артикул.

  4. ПоляБлокировкиДанных и РежимУправленияБлокировкойДанных — описание схемы. Код не начинает транзакцию и не блокирует товар.

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

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

  2. Последние два сообщения показывают фактическую политику блокировки. Записанных товаров для этой проверки не нужно.

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

Проверка структуры перед импортом без чтения/изменения бизнес-данных.

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

  1. Коллекция стандартных реквизитов не равна реквизитам экземпляра объекта в памяти.

  2. Чтение настроек блокировки не доказывает отсутствие конкуренции пользователей и не заменяет корректную транзакцию.

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

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

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

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

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

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