СправочникМенеджер.<Имя справочника>.ПолучитьОбновлениеПредопределенныхДанных

Методы · GetPredefinedDataUpdate

Получает текущее значение режима обновления предопределенных элементов. Вычисляется из значений, установленных в метаданных и в данных.

Синтаксис

ПолучитьОбновлениеПредопределенныхДанных()
Полное описание, параметры и ограничения

СправочникМенеджер.<Имя справочника>.ПолучитьОбновлениеПредопределенныхДанных (CatalogManager.<Catalog name>.GetPredefinedDataUpdate)

СправочникМенеджер.<Имя справочника> (CatalogManager.<Catalog name>)

ПолучитьОбновлениеПредопределенныхДанных (GetPredefinedDataUpdate)

Доступен, начиная с версии 8.3.3.

Синтаксис:
ПолучитьОбновлениеПредопределенныхДанных()
Возвращаемое значение:
Тип: ОбновлениеПредопределенныхДанных.

Описание:

Получает текущее значение режима обновления предопределенных элементов. Вычисляется из значений, установленных в метаданных и в данных.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Вызов метода выполняет обращение к серверу.

Использование в версии:

Доступен, начиная с версии 8.3.3.

Методическая информация

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

Различить политику Авто и вычисленный режим обновления

Только на свежем собственном стенде с заранее известной политикой Авто сравниваем два явных режима и возвращаем Авто. Вычисленный getter не используется как снимок сырой настройки.

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

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

Подготовка

  1. Создайте НОВУЮ отдельную пустую файловую базу 8.5.1.1343 с именем конфигурации УчебныеВыборкиКаталога85, совместимость НеИспользовать. Не рабочая база, не её копия, не РИБ. Здесь нет запуска: runtimeVerifiedScenarios=0.

  2. Создайте единственный УчебныеТовары: иерархия групп и элементов, Код Строка(10), Наименование(100), единственный Артикул Строка(20), для групп и элементов, Индексировать. Владельцев, табличных частей и предопределенных элементов нет; в списке базы также нет ни одной записи.

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

  4. Создайте неглобальные серверные общие модули УчебныйКаталог85 и УчебныеПримерыКаталога85, Вызов сервера=Да, клиентские флаги=Нет. Первый содержит полный отдельный модуль защиты ниже, второй — полный основной код одного выбранного урока. Подготовку пяти товаров из уроков выборки здесь не вставляйте и не вызывайте.

  5. Создайте УчебныйПульт85 с управляемой формой Пульт, командой/кнопкой Выполнить. Вставьте полный отдельный модуль запуска ниже и назначьте действие Выполнить. Обновите конфигурацию базы, проверьте F7 и пустоту справочника вручную.

  6. Это будущий административный опыт со служебными настройками собственной базы, не чистое чтение и не работа только в памяти. Методы установки действительно меняют служебное состояние; простого отката пользовательской транзакции урок не обещает. Никаких товаров/групп код не записывает и не удаляет.

  7. Во время опыта конфигурацию не меняйте и другие сеансы не запускайте. Если восстановление само завершится ошибкой, не объявляйте исходное состояние восстановленным: сохраните сообщение и проверяйте только этот собственный учебный стенд.

  8. Только для этого урока: в свойствах справочника УчебныеТовары установите ОбновлениеПредопределенныхДанных=Авто. Свежая информационная база сохраняет исходную автоматическую политику уровня базы; ранее методы установки для неё не вызывались. Если история настройки неизвестна, создайте другой новый стенд — getter не доказывает сырой режим.

  9. Это не универсальное восстановление произвольной рабочей базы: возвращаем заранее известное исходное Авто, а сравниваем только вычисленный результат. У базы и каталога нет предопределенных строк, поэтому не ожидаем создания/обновления товаров в этом опыте.

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

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

УчебныеВыборкиКаталога85 → Общие → Общие модули → УчебныйКаталог85

Полный серверный модуль проверки своего стенда; не выполнялся.

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

УчебныеВыборкиКаталога85 → Обработки → УчебныйПульт85 → Формы → Пульт → Модуль

Полный модуль запуска управляемой формы собственного пульта; не выполнялся.

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
    УчебныеПримерыКаталога85.ВыполнитьПример();
КонецПроцедуры

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

  1. ПолучитьОбновлениеПредопределенныхДанных возвращает системное перечисление с вычисленным режимом. Новый самостоятельный стенд с политиками Авто должен вычислить ОбновлятьАвтоматически; другой результат останавливает опыт до setter.

  2. УстановитьОбновлениеПредопределенныхДанных меняет настройку в данных объекта метаданных. Для него требуются права администратора и сеанс без любого разделителя; отсутствие общих реквизитов и РИБ задано подготовкой.

  3. Первое явное значение НеОбновлятьАвтоматически перекрывает нижние уровни политики. Второе ОбновлятьАвтоматически тоже является явным: оба проверяем чтением результата.

  4. При Авто режим вычисляется по цепочке: данные объекта, метаданные объекта, настройка всей базы, вид узла РИБ. Явное значение на более высоком уровне имеет приоритет; на периферийном узле результат может быть другим.

  5. Исходный raw-режим не извлекается этим getter. Возврат через setter(НачальныйРежим) был бы ошибкой: вычисленное ОбновлятьАвтоматически закрепило бы явную политику вместо Авто.

  6. Поэтому при успехе и ошибке устанавливаем заранее известное собственное Авто. Проверка равенства НачальныйРежим подтверждает вычисленный результат, но не делает метод универсальным снимком произвольных настроек.

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

  1. Будущий ручной тест должен подтвердить НеОбновлятьАвтоматически, затем ОбновлятьАвтоматически. В конце установлено своё исходное Авто; getter на самостоятельном стенде снова вычисляет ОбновлятьАвтоматически.

  2. Не требуйте, чтобы после setter(Авто) getter вернул Авто: getter показывает вычисленный режим. Именно эта разница является целью урока.

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

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

Подготовлен цикл двух явных политик с возвратом заранее известного собственного Авто и проверкой вычисленного режима. runtimeVerifiedScenarios=0.

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

  1. Даже одинаковый вычисленный режим может происходить из разных raw-настроек. Не применяйте этот возврат Авто к базе с неизвестной историей.

  2. Политика обновления и флаг инициализации — разные механизмы. Этот урок не сбрасывает флаг и не реструктуризирует конфигурацию.

  3. Режимы совместимости 8.3.3/8.3.4 имеют отдельные правила; здесь совместимость выключена и установлена точная 8.5.1.1343.

  4. При отказе администратора/разделении не включайте привилегированный режим и не отключайте разделение в рабочей базе. Подготовьте только свой соответствующий стенд.

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

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

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

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

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