Тип: Строка. Содержит текущую версию данных объекта.
Полное описание, параметры и ограничения
ПланОбменаОбъект.<Имя плана обмена>.ВерсияДанных (ExchangePlanObject.<Exchange plan name>.DataVersion)
ПланОбменаОбъект.<Имя плана обмена> (ExchangePlanObject.<Exchange plan name>)
ВерсияДанных (DataVersion)
Доступен, начиная с версии 8.2.
Использование:
Только чтение.
Описание:
Тип: Строка.
Содержит текущую версию данных объекта.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Создать черновик узла без запуска обмена
Новый периферийный узел существует только в памяти. Ссылка и состояние отличаются от текущего узла базы; счётчики сообщений ещё не являются результатом передачи.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
В отдельной пустой конфигурации Учебная85 создайте Планы обмена → УчебныйОбмен: длина кода 9, тип Строка, наименование длиной 100. Распределённая информационная база выключена; состав плана пустой.
Добавьте реквизит АдресУчебногоУзла: Строка длиной 100, Проверка заполнения = Показывать ошибку. Модуль объекта и подписки должны быть пустыми; не добавляйте отправку сообщений или внешние действия.
Добавьте макет УчебнаяПамятка типа Текстовый документ, одна строка: Этот узел используется только для учебных примеров. История данных для плана не включена. Обновите конфигурацию базы данных.
Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи. УчебныйОбмен не является существующим рабочим обменом КА2 или УТ.
Узел каждый раз новый и периферийный. Существующие узлы и текущий узел базы не меняются. Запись, блокировка и удаление далее выполняются только над своим новым UUID в собственной отменяемой транзакции.
Если Метаданные.ПланыОбмена.Найти("УчебныйОбмен") = Неопределено Тогда
ВызватьИсключение "Сначала создайте собственный учебный план обмена";
КонецЕсли;
Узел = ПланыОбмена.УчебныйОбмен.СоздатьУзел();
Если Узел.ЭтотУзел Тогда
ВызватьИсключение "Нельзя изменять текущий узел информационной базы";
КонецЕсли;
Узел.Наименование = "Собственный черновик узла";
Узел.ДополнительныеСвойства.Вставить("Цель", "Изучить новый узел");
Если Не Узел.ДополнительныеСвойства.Свойство("Цель", СохраненнаяЦель) Тогда
ВызватьИсключение "В собственном черновике отсутствует учебная цель";
КонецЕсли;
Сообщить(Узел.ЭтоНовый());
Сообщить(Узел.Ссылка.Пустая());
Сообщить(Узел.ПолучитьСсылкуНового().Пустая());
Сообщить(Не Узел.ЭтотУзел);
Сообщить(Не Узел.ПометкаУдаления);
Сообщить(Узел.НомерОтправленного = 0);
Сообщить(Узел.НомерПринятого = 0);
Сообщить(СохраненнаяЦель = "Изучить новый узел");
Сообщить("Версия черновика: " + Узел.ВерсияДанных);
Сообщить("Дата обмена: " + Строка(Узел.ДатаОбмена));Разбор по шагам
СоздатьУзел возвращает новый объект, который ещё не записан. ЭтотУзел проверяется до изменения полей.
Ссылка пуста, а ПолучитьСсылкуНового тоже пустая до явного резервирования UUID.
НомерОтправленного и НомерПринятого относятся к разным направлениям сообщений. Они не равны количеству товаров или документов.
ДополнительныеСвойства хранит временную цель упражнения. Это не добавление реквизита в метаданные.
ДатаОбмена связана с обменом мобильного клиента с автономным режимом; чтение даты не запускает обмен и не задаёт время текущего урока.
Как проверить результат
Восемь сравнений Истина в новом учебном узле.
Версия и дата диагностические: ни одно сообщение не было сформировано или отправлено.
Ожидаемый результат
Создан собственный черновик периферийного узла без сетевых действий и записи.
На что обратить внимание
Не устанавливайте ЭтотУзел=Истина для имитации текущей базы.
Нулевые счётчики не являются подтверждением успешного обмена.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Записать и перечитать только свой временный узел
Собственный UUID появляется лишь внутри своей транзакции. Показываем отличие изменения объекта в памяти от повторного чтения записи, затем полностью отменяем транзакцию.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
В отдельной пустой конфигурации Учебная85 создайте Планы обмена → УчебныйОбмен: длина кода 9, тип Строка, наименование длиной 100. Распределённая информационная база выключена; состав плана пустой.
Добавьте реквизит АдресУчебногоУзла: Строка длиной 100, Проверка заполнения = Показывать ошибку. Модуль объекта и подписки должны быть пустыми; не добавляйте отправку сообщений или внешние действия.
Добавьте макет УчебнаяПамятка типа Текстовый документ, одна строка: Этот узел используется только для учебных примеров. История данных для плана не включена. Обновите конфигурацию базы данных.
Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи. УчебныйОбмен не является существующим рабочим обменом КА2 или УТ.
Узел каждый раз новый и периферийный. Существующие узлы и текущий узел базы не меняются. Запись, блокировка и удаление далее выполняются только над своим новым UUID в собственной отменяемой транзакции.
Если Метаданные.ПланыОбмена.Найти("УчебныйОбмен") = Неопределено Тогда
ВызватьИсключение "Сначала создайте собственный учебный план обмена";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Не запускайте урок внутри чужой транзакции";
КонецЕсли;
СвояСсылка = ПланыОбмена.УчебныйОбмен.ПолучитьСсылку(Новый УникальныйИдентификатор);
Если СвояСсылка.ПолучитьОбъект() <> Неопределено Тогда
ВызватьИсключение "Свой UUID уже используется, нужно новое значение";
КонецЕсли;
НачатьТранзакцию();
Попытка
Узел = ПланыОбмена.УчебныйОбмен.СоздатьУзел();
Если Узел.ЭтотУзел Тогда
ВызватьИсключение "Нельзя использовать текущий узел базы";
КонецЕсли;
Узел.УстановитьСсылкуНового(СвояСсылка);
Узел.УстановитьНовыйКод("У");
Узел.Наименование = "Свой временный учебный узел";
Узел.АдресУчебногоУзла = "example.invalid";
Узел.Записать();
Если Узел.ЭтотУзел Или Узел.Ссылка <> СвояСсылка Тогда
ВызватьИсключение "Записан не ожидаемый собственный периферийный узел";
КонецЕсли;
Сообщить(Не Узел.ЭтоНовый());
СохраненнаяВерсия = Узел.ВерсияДанных;
Сообщить(СтрДлина(СохраненнаяВерсия) > 0);
Узел.Прочитать();
Сообщить(Не Узел.Модифицированность());
Узел.Наименование = "Изменено только в памяти";
Сообщить(Узел.Модифицированность());
Узел.Прочитать();
Сообщить(Узел.Наименование = "Свой временный учебный узел");
Сообщить(Не Узел.Модифицированность());
Сообщить(Узел.ВерсияДанных = СохраненнаяВерсия);
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(СвояСсылка.ПолучитьОбъект() = Неопределено);Разбор по шагам
Сначала исключаем чужую активную транзакцию и проверяем отсутствие объекта по собственному UUID.
Создаём только новый периферийный узел, задаём его будущую ссылку, адрес и код.
Записать делает объект доступным внутри собственной транзакции, ещё без фиксации.
Прочитать возвращает значения записи и сбрасывает локальную изменённость. Несохранённое имя намеренно теряется при повторном чтении.
ВерсияДанных относится к записи, не к номеру сообщения обмена. Без второй записи версия остаётся той же.
Обе ветки завершаются отменой собственной транзакции. В конце по собственному UUID нет узла.
Как проверить результат
Девять сравнений Истина.
Свой временный узел отсутствует после отмены; текущий и прежние узлы не менялись.
Ожидаемый результат
Разобраны запись, версия и локальная модифицированность на своём полностью отменяемом объекте.
На что обратить внимание
Прочитать может уничтожить несохранённые изменения объекта в памяти.
Не заменяйте ОтменитьТранзакцию на фиксацию в этом учебном уроке.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.