Odin | База знаний 1С

Как программно полу...
 

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

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



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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

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

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

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

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

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

    Запрос.УстановитьПараметр("ОбъектСсылка", ОбъектСсылка);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    МассивВерсий = Новый Массив;
    Пока Выборка.Следующий() Цикл
        МассивВерсий.Добавить(
            Новый Структура(
                "НомерВерсии, ДатаВерсии, Пользователь, Комментарий",
                Выборка.НомерВерсии,
                Выборка.ДатаВерсии,
                Выборка.Пользователь,
                Выборка.Комментарий
            )
        );
    КонецЦикла;

    Возврат МассивВерсий;
КонецФункции

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

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

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

---

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

---

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

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

---

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



   
ОтветитьЦитата