Тип: ПараметрыОбменаДанными. Используется для управления обменом данных. С помощью данного свойства настраивается состав узлов-получателей, для которых будут регистрироваться изменения данных, узел-отправитель, из которого получена записываемая информация, а также устанавливается режим Загрузка, указывающий, что выполняется перенос информации.
Полное описание, параметры и ограничения
БизнесПроцессОбъект.<Имя бизнес-процесса>.ОбменДанными (BusinessProcessObject.<Business process name>.DataExchange)
БизнесПроцессОбъект.<Имя бизнес-процесса> (BusinessProcessObject.<Business process name>)
ОбменДанными (DataExchange)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: ПараметрыОбменаДанными.
Используется для управления обменом данных.
С помощью данного свойства настраивается состав узлов-получателей, для которых будут регистрироваться изменения данных, узел-отправитель, из которого получена записываемая информация, а также устанавливается режим Загрузка, указывающий, что выполняется перенос информации.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Настроить историю и обычную запись своего процесса с откатом
Сравнение старого и современного комментария, реальные параметры истории/обмена нового УчебныйПроцесс85, пробная запись своих данных и обязательная отмена собственной транзакции.
Где и как запускать
Полный серверный общий модуль УчебныйЦикл85 нового стенда УчебныеПараметрыЗаписи85; один собственный объект и транзакция с обязательным откатом.
Подготовка
Создайте новую пустую конфигурацию УчебныеПараметрыЗаписи85 на платформе 8.5.1.1343. Не переносите этот опыт в рабочие УТ/КА/УНФ/БП и не запускайте внутри чужой транзакции.
Управляемое приложение, толстый клиент Windows, один ваш пользователь. В стенде нет фоновых заданий, других писателей, планов обмена, подписок и внешних действий.
Задачи → УчебнаяЗадача85: строковый номер длиной9 с автонумерацией, наименование длиной100; Маркер85 (Строка36), Комментарий85 (Строка100), без обязательного заполнения.
Бизнес-процессы → УчебныйПроцесс85: строковый номер длиной9 с автонумерацией, Маркер85 (Строка36), Комментарий85 (Строка100); Задача=УчебнаяЗадача85.
Карта маршрута: Старт → одиночное действие Опыт85 → Финиш, без адресации, групповых точек и обработчиков. Маршрут в коде не запускается.
Модули обоих объектов пустые. В отличие от урока заполнения здесь не нужен ОбработкаЗаполнения: реквизиты собственного нового объекта задаются напрямую.
Урок не требует включать историю данных и не проверяет сохранённые версии. Отказ=Истина запрещает отражение этой пробной записи в истории, если данный объект вообще используется в истории.
Общие → Общие модули → УчебныйЦикл85: Сервер=Истина, ВызовСервера=Истина, Глобальный=Ложь, Привилегированный=Ложь; остальные флаги и повторное использование выключены. Вставьте целиком основной код одного урока.
Для другого вида объекта замените весь код собственного общего модуля, не объединяйте два ВыполнитьПример85. Все имена относятся только к новому учебному стенду.
Обработки → ЗапускЦикла85 → управляемая форма Форма: ПодтверждаюПустойСтенд85, Занято85 типа Булево, Итог85 типа Строка неограниченной длины. Исходные флажки Ложь; занятость и итог только для просмотра.
Команда и кнопка ВыполнитьСвойЦикл85 с одноимённым действием. Полный отдельный модуль формы ниже передаёт серверу только согласие, не рабочую ссылку или путь.
Нажмите F7 и обновите только свой стенд. runtimeVerifiedScenarios=0: в1С пробная запись, чтение, обмен, история и откат здесь не выполнялись.
Старый УстановитьКомментарийВерсииИсторииДанных вызывается один раз только для обучения миграции. В новом прикладном коде используйте современное КомментарийВерсии объекта ЗаписьИсторииДанных.
Комментарии короче1024 символов. Дополнительный маркер генерируется внутри опыта; его наличие в параметрах не доказывает создание версии истории.
Подтвердите пустой стенд и вручную выполните команду. Записанный объект читается внутри своей транзакции, затем выполняется только ОтменитьТранзакцию, никогда ЗафиксироватьТранзакцию.
После отмены проверяется отсутствие своей записи по сгенерированной ссылке. Прежний объект языка в памяти после отката не используйте для новой записи: новый опыт должен создать новый экземпляр.
Этот основной код исследует именно УчебныйПроцесс85; исходный вид должен быть пустым.
Функция ВыполнитьПример85(Согласие) Экспорт
Если Не Согласие Тогда
ВызватьИсключение "Только собственный пустой стенд УчебныеПараметрыЗаписи85 с согласием";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Нельзя откатывать чужую транзакцию";
КонецЕсли;
Выборка = БизнесПроцессы.УчебныйПроцесс85.Выбрать();
Если Выборка.Следующий() Тогда
ВызватьИсключение "Исследуемый учебный вид объекта должен быть пустым";
КонецЕсли;
Идентификатор = Новый УникальныйИдентификатор;
СвояСсылка = БизнесПроцессы.УчебныйПроцесс85.ПолучитьСсылку(Идентификатор);
Если СвояСсылка.ПолучитьОбъект() <> Неопределено Тогда
ВызватьИсключение "Плановая ссылка занята; чужой объект не используется";
КонецЕсли;
Процесс = БизнесПроцессы.УчебныйПроцесс85.СоздатьБизнесПроцесс();
Процесс.УстановитьСсылкуНового(СвояСсылка);
Процесс.Дата = ТекущаяДата();
Маркер = Строка(Новый УникальныйИдентификатор);
Процесс.Маркер85 = Маркер;
Процесс.Комментарий85 = "Учебная запись будет отменена";
СтарыйКомментарий = "Учебный комментарий старого API";
Процесс.УстановитьКомментарийВерсииИсторииДанных(СтарыйКомментарий);
ПараметрыИстории = Процесс.ЗаписьИсторииДанных;
Если ТипЗнч(ПараметрыИстории) <> Тип("ПараметрыЗаписиИсторииДанных") Тогда
ВызватьИсключение "Нет реальных параметров истории собственного объекта";
КонецЕсли;
Если ПараметрыИстории.КомментарийВерсии <> СтарыйКомментарий Тогда
ВызватьИсключение "Комментарий старого API не подтверждён в параметрах своего объекта";
КонецЕсли;
НовыйКомментарий = "Учебный комментарий нового API";
ПараметрыИстории.КомментарийВерсии = НовыйКомментарий;
ПараметрыИстории.ДобавитьДополнительныеДанные("МаркерОпыта85", Маркер, "Собственный маркер учебного опыта");
ДополнительныйМаркер = Неопределено;
Если Не ПараметрыИстории.ДополнительныеДанные.Свойство("МаркерОпыта85", ДополнительныйМаркер)
Или ДополнительныйМаркер <> Маркер Тогда
ВызватьИсключение "Не подтверждены собственные дополнительные данные будущей версии";
КонецЕсли;
ПараметрыИстории.Отказ = Истина;
ПараметрыИстории.ВыполнятьОбработкуПослеЗаписиВерсии = Ложь;
ПараметрыИстории.ОбновлятьИсториюСразуПослеЗаписи = Ложь;
ПараметрыОбмена = Процесс.ОбменДанными;
Если ТипЗнч(ПараметрыОбмена) <> Тип("ПараметрыОбменаДанными") Тогда
ВызватьИсключение "Нет реальных параметров обмена собственного объекта";
КонецЕсли;
ПараметрыОбмена.Загрузка = Ложь;
ПараметрыОбмена.Отправитель = Неопределено;
Если ПараметрыОбмена.Получатели.Количество() <> 0 Тогда
ВызватьИсключение "В этом пустом стенде нет узлов обмена; неожиданных получателей не используем";
КонецЕсли;
Если Процесс.ЗаписьИсторииДанных.КомментарийВерсии <> НовыйКомментарий
Или Не Процесс.ЗаписьИсторииДанных.Отказ
Или Процесс.ОбменДанными.Загрузка Тогда
ВызватьИсключение "Настройки не относятся к тому же собственному объекту";
КонецЕсли;
НачатьТранзакцию();
Попытка
Процесс.Записать();
Проверенный = СвояСсылка.ПолучитьОбъект();
Если Проверенный = Неопределено Тогда
ВызватьИсключение "Собственная пробная запись не найдена внутри своей транзакции";
КонецЕсли;
Если Проверенный.Маркер85 <> Маркер Или Проверенный.Комментарий85 <> "Учебная запись будет отменена" Тогда
ВызватьИсключение "Прочитаны не собственные пробные данные";
КонецЕсли;
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если ТранзакцияАктивна() Или СвояСсылка.ПолучитьОбъект() <> Неопределено Тогда
ВызватьИсключение "Откат собственного опыта не подтвердился";
КонецЕсли;
Возврат "Параметры своего объекта подготовлены: " + НовыйКомментарий
+ "; дополнительные данные: " + ДополнительныйМаркер
+ ". Загрузка обмена выключена. Пробная запись найдена и затем отменена. Версия истории не заявляется.";
КонецФункцииЗапускЦикла85
УчебныеПараметрыЗаписи85 → Обработки → ЗапускЦикла85 → Формы → Форма → Модуль
Полный модуль управляемой формы этого отдельного пустого стенда, с согласием, занятостью и серверным вызовом.
&НаКлиенте
Процедура ВыполнитьСвойЦикл85(Команда)
Если Не ПодтверждаюПустойСтенд85 Или Занято85 Тогда
ВызватьИсключение "Нужно собственное подтверждение и отсутствие другого опыта";
КонецЕсли;
Занято85 = Истина;
Попытка
Итог85 = УчебныйЦикл85.ВыполнитьПример85(ПодтверждаюПустойСтенд85);
Исключение
Занято85 = Ложь;
Итог85 = ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
Занято85 = Ложь;
КонецПроцедурыРазбор по шагам
Проверяются свой стенд, согласие, версия, отсутствие внешней транзакции и существующих записей исследуемого вида. Менеджер создаёт реальный новый объект с собственной плановой ссылкой и маркером.
Старый метод задаёт первый короткий комментарий. Реальные параметры ЗаписьИсторииДанных проверяются по типу и комментарию: это тот же текущий объект, не самостоятельно созданная структура.
Современное КомментарийВерсии заменяет комментарий. ДобавитьДополнительныеДанные помещает маркер с представлением, после чего наличие и значение поля проверяются через структуру ДополнительныеДанные.
Отказ=Истина не отменяет Записать, но запрещает отражение этой записи в истории, если объект используется в ней. После-запись и фоновое обновление также не запрашиваются.
ОбменДанными получается от собственного нового объекта. Устанавливается обычная Загрузка=Ложь, отсутствующий Отправитель и проверяется отсутствие реальных узлов-получателей в пустом стенде.
Повторное чтение параметров через самого владельца подтверждает современный комментарий, отказ от истории и отсутствие режима загрузки. Параметры не подменены неизвестным объектом.
Начинается одна собственная транзакция. Записать создаёт пробную запись, ПолучитьОбъект по своей ссылке читает её в той же транзакции, маркер и комментарий проверяются.
Оба пути завершаются ОтменитьТранзакцию. Проверка вне неё требует отсутствия своей записи; версий истории, сетевого сообщения и завершения маршрута итог не заявляет.
Как проверить результат
Первый комментарий подтверждён после legacy-вызова, затем заменён современным значением на том же владельце.
Собственный дополнительный маркер доступен в реальных параметрах; родительские readonly-свойства не присваиваются.
Загрузка обмена Ложь, Отправитель Неопределено, количество получателей0. Эти значения не означают успешный обмен.
Внутри транзакции прочитана именно своя пробная запись; после отмены СвояСсылка.ПолучитьОбъект() возвращает Неопределено.
Нет ЗафиксироватьТранзакцию, Удалить, запуска маршрута, версии истории или внешнего воздействия. Ошибка не превращается в сообщение об успешном откате.
Ожидаемый результат
При будущем собственном ручном запуске настройки принадлежат реальному новому объекту, пробная запись найдена внутри своей транзакции и отсутствует после её отмены; версия истории не заявляется.
На что обратить внимание
УстановитьКомментарийВерсииИсторииДанных не рекомендуется начиная с8.3.15. Здесь он нужен для сравнения старого вызова и современной настройки; это не рекомендация использовать его в новом проекте.
Комментарий и дополнительные данные — параметры будущей записи истории, а не готовая версия. Сам setter, вывод текста или наличие структуры не доказывает, что версия создана.
ЗаписьИсторииДанных и ОбменДанными у объекта доступны только для чтения. Читать их можно, менять поддерживаемые свойства полученных объектов тоже можно; присваивать родительское свойство или создавать Новый ПараметрыОбменаДанными нельзя.
Отказ=Истина запрещает отражение записи в истории, но не отменяет запись бизнес-объекта. Сам объект записывается внутри транзакции и исчезает из видимого состояния после её отката.
Если данные не используются в истории, настройка Отказ игнорируется. Урок поэтому не заявляет проверку реальных версий и не обещает, что включение истории произошло от одного присваивания.
ДополнительныеДанные только читается как свойство параметров. Поле добавляется реальным ДобавитьДополнительныеДанные с представлением; собственная структура целиком вместо него не присваивается.
Загрузка=Истина сокращает проверки при записи/удалении, предполагая корректные данные обмена. Здесь установлен обычный режим Ложь; нельзя включать Загрузка ради обхода ошибки рабочей конфигурации.
Отправитель должен быть настоящим узлом плана обмена, если он задан. Здесь планов и узлов нет, поэтому Неопределено — осознанное отсутствие отправителя, не выдуманный UUID.
Получатели — реальный НаборУзлов, а не произвольный Массив. Проверка его пустоты не является отправкой сообщения; сети и обмена с другой базой нет.
ОбновлятьИсториюСразуПослеЗаписи=Истина в общем случае означает фоновое обновление после транзакции без ожидания завершения. Этот урок устанавливает Ложь и не выдаёт запись объекта за окончание фоновой обработки.
Нельзя откатывать всю чужую транзакцию. Перед началом проверяется ТранзакцияАктивна, а оба пути этого собственного опыта завершаются ОтменитьТранзакцию.
Откат базы не возвращает экземпляр языка в первоначальное состояние. Памятный объект мог получить номер/ссылку; после опыта он не переиспользуется, а существование проверяется по ссылке отдельно.
Параметры чтения самого объекта и параметры истории — разные вещи. Текстовый результат описывает подтверждённые настройки и пробную запись, но не сохранённую версию или завершённый бизнес-процесс.
Модули и подписки стенда должны быть пустыми: откат транзакции не отменяет внешнюю сеть, письмо, печать или запись файла из произвольного обработчика. Такие действия здесь отсутствуют и не выполнялись.
Это только будущий отдельный ручной опыт. При подготовке ни записи в1С, ни версии, ни архивы и резервные копии не создавались.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.