Как работает процедура ВыполнитьОбновлениеДанных в 1С и какие особенности её исп

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как работает процедура ВыполнитьОбновлениеДанных в 1С и какие особенности её исп

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #36773
      Фото аватараOdineski
      Участник

        Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения, ЕстьУдаленные, РежимОбновления,
        ЕстьКритичныеИзменения = Ложь, СписокКритичныхИзменений = «», ОбъектыРасширений = Ложь) Экспорт

        Если ОбъектыРасширений
        И ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения)
        И СтандартныеПодсистемыСервер.УстановленныеРасширенияНедоступны() Тогда

        ТекстОшибки =
        НСтр(«ru=’Невозможно обновить идентификаторы объектов расширений в сеансе
        |неразделенного пользователя, т.к. расширения не подключены.’
        |;uk=’Неможливо оновити ідентифікатори об»єктів розширень в сеансі
        |неподіленого користувача, тому що розширення не підключені.'»);

        ВызватьИсключениеПоОшибке(Истина, ТекстОшибки);
        Возврат;
        КонецЕсли;

        ПроверкаИспользования(ОбъектыРасширений);

        УстановитьПривилегированныйРежим(Истина);

        Если ТипЗнч(РежимОбновления) = Тип(«Булево») Тогда
        РежимОбновления = ?(РежимОбновления, «ТолькоПроверка», «Полный»);
        КонецЕсли;
        ТолькоПроверка = (РежимОбновления = «ТолькоПроверка»);

        СвойстваРасширений = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресСвойствРасширений);
        Если СвойстваРасширений.ИменаОбъектов.Индексы.Количество() = 0 Тогда
        СвойстваРасширений.ИменаОбъектов.Индексы.Добавить(«ПолноеИмя»);
        КонецЕсли;

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

        Если Не ОбъектыРасширений
        Или Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда

        ОбновитьДанные(ЕстьТекущиеИзменения, ЕстьУдаленные, РежимОбновления,
        ЕстьКритичныеИзменения, СписокКритичныхИзменений, СвойстваРасширений, ОбъектыРасширений);

        Если ЕстьТекущиеИзменения Тогда
        ЕстьИзменения = Истина;
        КонецЕсли;
        КонецЕсли;

        Если Не ТолькоПроверка
        И Не (РежимОбновления <> «Полный» И ЕстьКритичныеИзменения) Тогда

        Если Не ОбъектыРасширений Тогда
        СтандартныеПодсистемыСервер.ПодтвердитьОбновлениеПараметраРаботыПрограммы(
        «ПараметрыБазовойФункциональности», «ИдентификаторыОбъектовМетаданных»);
        КонецЕсли;
        КонецЕсли;

        КонецПроцедуры

      • #36774
        bot_avaOdin — Одинэсник
        Участник

          Процедура

          реализует логику обновления данных справочника ИдентификаторыОбъектовМетаданных с учётом разных режимов и условий. Разберу по шагам, что происходит:

          ### 1. Проверка условий для объектов расширений

          — Если обновление касается объектов расширений (ОбъектыРасширений = Истина),
          — и в сеансе есть установленные расширения,
          — но при этом расширения недоступны (например, сеанс неразделённого пользователя, где расширения не подключены),

          то:

          — Генерируется исключение с понятным сообщением, и процедура завершается.

          ### 2. Проверка использования объектов расширений

          — Вызов процедуры, которая, вероятно, проверяет, можно ли обновлять данные с учётом того, что это объекты расширений.

          ### 3. Установка привилегированного режима

          — Для выполнения обновления с повышенными правами.

          ### 4. Обработка параметра РежимОбновления

          — Если РежимОбновления передан как булево, то преобразуется в строку:
          Истина"ТолькоПроверка"
          Ложь"Полный"
          — Устанавливается флаг ТолькоПроверка для дальнейшей логики.

          ### 5. Получение свойств расширений из временного хранилища

          — Загружаются свойства расширений, если индексы пусты — добавляется индекс по полному имени.

          ### 6. Обработка дублей и текущих изменений

          — Если не объекты расширений, вызывается процедура, которая, вероятно, устраняет дубли в подчинённых узлах и при этом может установить флаг ЕстьТекущиеИзменения.

          ### 7. Основное обновление данных

          — Если не объекты расширений или текущий узел не подчинённый узел РИБ (регистра информации базы), то вызывается процедура ОбновитьДанные с передачей всех параметров.
          — Если в процессе обновления были изменения, устанавливается флаг ЕстьИзменения.

          ### 8. Подтверждение обновления параметра работы программы

          — Если режим не только проверка и либо режим полный, либо нет критичных изменений,
          — и если не объекты расширений,
          — то вызывается метод подтверждения обновления параметра работы программы, связанного с идентификаторами объектов метаданных.

          ## Итог

          — Процедура контролирует обновление идентификаторов объектов метаданных, учитывая особенности работы с расширениями.
          — Обрабатывает режимы обновления (проверка или полный).
          — Устраняет дубли, обновляет данные, подтверждает изменения.
          — Защищает от попыток обновления расширений в неподходящих сеансах.
          — Использует привилегированный режим для выполнения операций.

          Если нужна конкретика по внутренним процедурам (ПроверкаИспользования, ЗаменитьДублиПодчиненногоУзлаНайденныеПриЗагрузке, ОбновитьДанные), нужно смотреть их код.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С