Как программно получить версии объектов в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как программно получить версии объектов в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34285
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        как получить версии объектов программно

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

          S, добрый день!

          Для программного получения версий объектов в 1С (например, в УПП, БСП или других конфигурациях с версионированием) обычно используется регистр сведений, в котором хранятся версии объектов — чаще всего это регистр «ВерсииОбъектов» или аналогичный.

          Общий алгоритм получения версий объекта следующий:

          1. Определить объект, версии которого нужно получить (например, справочник, документ и т.п.).
          2. Выполнить запрос к регистру сведений, где хранятся версии, с фильтрацией по нужному объекту (например, по ссылке на объект или по его идентификатору).
          3. Получить список версий с необходимыми данными (номер версии, дата, кто изменил, комментарии и т.п.).
          4. При необходимости — получить содержимое конкретной версии (например, в виде XML или двоичных данных).

          Пример кода на 1С для получения списка версий объекта из регистра сведений «ВерсииОбъектов»:

          Функция ПолучитьВерсииОбъекта(ОбъектСсылка)
              Запрос = Новый Запрос;
              Запрос.Текст = 
              "ВЫБРАТЬ
                  ВерсииОбъектов.НомерВерсии,
                  ВерсииОбъектов.ДатаВерсии,
                  ВерсииОбъектов.Пользователь,
                  ВерсииОбъектов.Комментарий
              ИЗ
                  РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
              ГДЕ
                  ВерсииОбъектов.Ссылка = &ОбъектСсылка
              УПОРЯДОЧИТЬ ПО
                  ВерсииОбъектов.НомерВерсии";
          
              Запрос.УстановитьПараметр("ОбъектСсылка", ОбъектСсылка);
              Результат = Запрос.Выполнить();
              Выборка = Результат.Выбрать();
          
              МассивВерсий = Новый Массив;
              Пока Выборка.Следующий() Цикл
                  МассивВерсий.Добавить(
                      Новый Структура(
                          "НомерВерсии, ДатаВерсии, Пользователь, Комментарий",
                          Выборка.НомерВерсии,
                          Выборка.ДатаВерсии,
                          Выборка.Пользователь,
                          Выборка.Комментарий
                      )
                  );
              КонецЦикла;
          
              Возврат МассивВерсий;
          КонецФункции
          

          Если нужно получить содержимое конкретной версии (например, XML-представление), то обычно в регистре хранится двоичное поле с экспортом объекта. Для получения XML можно использовать функцию, аналогичную той, что описана в статье по версионированию:

          Функция ПолучитьXMLПредставлениеВерсии(ВерсияДвоичныеДанные)
              // ВерсияДвоичныеДанные - это поле с двоичными данными версии
              Поток = Новый ЧтениеДвоичныхДанных(ВерсияДвоичныеДанные);
              ТекстXML = Поток.ПрочитатьСтроку(Поток.Размер());
              Возврат ТекстXML;
          КонецФункции
          

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

          Если у вас в конфигурации используется стандартная подсистема версионирования (например, из Библиотеки стандартных подсистем), то там обычно есть общие модули с процедурами и функциями для работы с версиями — рекомендую посмотреть их и использовать.

          Рекомендую посмотреть здесь:
          https://infostart.ru/1c/articles/329687/ — подробная статья по версионированию объектов в УПП 1.3 с примерами кода.

          Если нужна помощь с конкретной конфигурацией или примером — уточните, я помогу.

          Оценка ответа: 9/10 — подробный, с примером кода и ссылками на источник.

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