БизнесПроцессОбъект.<Имя бизнес-процесса>.ОбменДанными

Свойства · DataExchange

Тип: ПараметрыОбменаДанными. Используется для управления обменом данных. С помощью данного свойства настраивается состав узлов-получателей, для которых будут регистрироваться изменения данных, узел-отправитель, из которого получена записываемая информация, а также устанавливается режим Загрузка, указывающий, что выполняется перенос информации.

Полное описание, параметры и ограничения

БизнесПроцессОбъект.<Имя бизнес-процесса>.ОбменДанными (BusinessProcessObject.<Business process name>.DataExchange)

БизнесПроцессОбъект.<Имя бизнес-процесса> (BusinessProcessObject.<Business process name>)

ОбменДанными (DataExchange)

Доступен, начиная с версии 8.0.

Использование:
Только чтение.
Описание:
Тип: ПараметрыОбменаДанными.
Используется для управления обменом данных.
С помощью данного свойства настраивается состав узлов-получателей, для которых будут регистрироваться изменения данных, узел-отправитель, из которого получена записываемая информация, а также устанавливается режим Загрузка, указывающий, что выполняется перенос информации.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Настроить историю и обычную запись своего процесса с откатом

Сравнение старого и современного комментария, реальные параметры истории/обмена нового УчебныйПроцесс85, пробная запись своих данных и обязательная отмена собственной транзакции.

Где и как запускать

Полный серверный общий модуль УчебныйЦикл85 нового стенда УчебныеПараметрыЗаписи85; один собственный объект и транзакция с обязательным откатом.

Подготовка

  1. Создайте новую пустую конфигурацию УчебныеПараметрыЗаписи85 на платформе 8.5.1.1343. Не переносите этот опыт в рабочие УТ/КА/УНФ/БП и не запускайте внутри чужой транзакции.

  2. Управляемое приложение, толстый клиент Windows, один ваш пользователь. В стенде нет фоновых заданий, других писателей, планов обмена, подписок и внешних действий.

  3. Задачи → УчебнаяЗадача85: строковый номер длиной9 с автонумерацией, наименование длиной100; Маркер85 (Строка36), Комментарий85 (Строка100), без обязательного заполнения.

  4. Бизнес-процессы → УчебныйПроцесс85: строковый номер длиной9 с автонумерацией, Маркер85 (Строка36), Комментарий85 (Строка100); Задача=УчебнаяЗадача85.

  5. Карта маршрута: Старт → одиночное действие Опыт85 → Финиш, без адресации, групповых точек и обработчиков. Маршрут в коде не запускается.

  6. Модули обоих объектов пустые. В отличие от урока заполнения здесь не нужен ОбработкаЗаполнения: реквизиты собственного нового объекта задаются напрямую.

  7. Урок не требует включать историю данных и не проверяет сохранённые версии. Отказ=Истина запрещает отражение этой пробной записи в истории, если данный объект вообще используется в истории.

  8. Общие → Общие модули → УчебныйЦикл85: Сервер=Истина, ВызовСервера=Истина, Глобальный=Ложь, Привилегированный=Ложь; остальные флаги и повторное использование выключены. Вставьте целиком основной код одного урока.

  9. Для другого вида объекта замените весь код собственного общего модуля, не объединяйте два ВыполнитьПример85. Все имена относятся только к новому учебному стенду.

  10. Обработки → ЗапускЦикла85 → управляемая форма Форма: ПодтверждаюПустойСтенд85, Занято85 типа Булево, Итог85 типа Строка неограниченной длины. Исходные флажки Ложь; занятость и итог только для просмотра.

  11. Команда и кнопка ВыполнитьСвойЦикл85 с одноимённым действием. Полный отдельный модуль формы ниже передаёт серверу только согласие, не рабочую ссылку или путь.

  12. Нажмите F7 и обновите только свой стенд. runtimeVerifiedScenarios=0: в1С пробная запись, чтение, обмен, история и откат здесь не выполнялись.

  13. Старый УстановитьКомментарийВерсииИсторииДанных вызывается один раз только для обучения миграции. В новом прикладном коде используйте современное КомментарийВерсии объекта ЗаписьИсторииДанных.

  14. Комментарии короче1024 символов. Дополнительный маркер генерируется внутри опыта; его наличие в параметрах не доказывает создание версии истории.

  15. Подтвердите пустой стенд и вручную выполните команду. Записанный объект читается внутри своей транзакции, затем выполняется только ОтменитьТранзакцию, никогда ЗафиксироватьТранзакцию.

  16. После отмены проверяется отсутствие своей записи по сгенерированной ссылке. Прежний объект языка в памяти после отката не используйте для новой записи: новый опыт должен создать новый экземпляр.

  17. Этот основной код исследует именно УчебныйПроцесс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 = Ложь;
КонецПроцедуры

Разбор по шагам

  1. Проверяются свой стенд, согласие, версия, отсутствие внешней транзакции и существующих записей исследуемого вида. Менеджер создаёт реальный новый объект с собственной плановой ссылкой и маркером.

  2. Старый метод задаёт первый короткий комментарий. Реальные параметры ЗаписьИсторииДанных проверяются по типу и комментарию: это тот же текущий объект, не самостоятельно созданная структура.

  3. Современное КомментарийВерсии заменяет комментарий. ДобавитьДополнительныеДанные помещает маркер с представлением, после чего наличие и значение поля проверяются через структуру ДополнительныеДанные.

  4. Отказ=Истина не отменяет Записать, но запрещает отражение этой записи в истории, если объект используется в ней. После-запись и фоновое обновление также не запрашиваются.

  5. ОбменДанными получается от собственного нового объекта. Устанавливается обычная Загрузка=Ложь, отсутствующий Отправитель и проверяется отсутствие реальных узлов-получателей в пустом стенде.

  6. Повторное чтение параметров через самого владельца подтверждает современный комментарий, отказ от истории и отсутствие режима загрузки. Параметры не подменены неизвестным объектом.

  7. Начинается одна собственная транзакция. Записать создаёт пробную запись, ПолучитьОбъект по своей ссылке читает её в той же транзакции, маркер и комментарий проверяются.

  8. Оба пути завершаются ОтменитьТранзакцию. Проверка вне неё требует отсутствия своей записи; версий истории, сетевого сообщения и завершения маршрута итог не заявляет.

Как проверить результат

  1. Первый комментарий подтверждён после legacy-вызова, затем заменён современным значением на том же владельце.

  2. Собственный дополнительный маркер доступен в реальных параметрах; родительские readonly-свойства не присваиваются.

  3. Загрузка обмена Ложь, Отправитель Неопределено, количество получателей0. Эти значения не означают успешный обмен.

  4. Внутри транзакции прочитана именно своя пробная запись; после отмены СвояСсылка.ПолучитьОбъект() возвращает Неопределено.

  5. Нет ЗафиксироватьТранзакцию, Удалить, запуска маршрута, версии истории или внешнего воздействия. Ошибка не превращается в сообщение об успешном откате.

Ожидаемый результат

При будущем собственном ручном запуске настройки принадлежат реальному новому объекту, пробная запись найдена внутри своей транзакции и отсутствует после её отмены; версия истории не заявляется.

На что обратить внимание

  1. УстановитьКомментарийВерсииИсторииДанных не рекомендуется начиная с8.3.15. Здесь он нужен для сравнения старого вызова и современной настройки; это не рекомендация использовать его в новом проекте.

  2. Комментарий и дополнительные данные — параметры будущей записи истории, а не готовая версия. Сам setter, вывод текста или наличие структуры не доказывает, что версия создана.

  3. ЗаписьИсторииДанных и ОбменДанными у объекта доступны только для чтения. Читать их можно, менять поддерживаемые свойства полученных объектов тоже можно; присваивать родительское свойство или создавать Новый ПараметрыОбменаДанными нельзя.

  4. Отказ=Истина запрещает отражение записи в истории, но не отменяет запись бизнес-объекта. Сам объект записывается внутри транзакции и исчезает из видимого состояния после её отката.

  5. Если данные не используются в истории, настройка Отказ игнорируется. Урок поэтому не заявляет проверку реальных версий и не обещает, что включение истории произошло от одного присваивания.

  6. ДополнительныеДанные только читается как свойство параметров. Поле добавляется реальным ДобавитьДополнительныеДанные с представлением; собственная структура целиком вместо него не присваивается.

  7. Загрузка=Истина сокращает проверки при записи/удалении, предполагая корректные данные обмена. Здесь установлен обычный режим Ложь; нельзя включать Загрузка ради обхода ошибки рабочей конфигурации.

  8. Отправитель должен быть настоящим узлом плана обмена, если он задан. Здесь планов и узлов нет, поэтому Неопределено — осознанное отсутствие отправителя, не выдуманный UUID.

  9. Получатели — реальный НаборУзлов, а не произвольный Массив. Проверка его пустоты не является отправкой сообщения; сети и обмена с другой базой нет.

  10. ОбновлятьИсториюСразуПослеЗаписи=Истина в общем случае означает фоновое обновление после транзакции без ожидания завершения. Этот урок устанавливает Ложь и не выдаёт запись объекта за окончание фоновой обработки.

  11. Нельзя откатывать всю чужую транзакцию. Перед началом проверяется ТранзакцияАктивна, а оба пути этого собственного опыта завершаются ОтменитьТранзакцию.

  12. Откат базы не возвращает экземпляр языка в первоначальное состояние. Памятный объект мог получить номер/ссылку; после опыта он не переиспользуется, а существование проверяется по ссылке отдельно.

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

  14. Модули и подписки стенда должны быть пустыми: откат транзакции не отменяет внешнюю сеть, письмо, печать или запись файла из произвольного обработчика. Такие действия здесь отсутствуют и не выполнялись.

  15. Это только будущий отдельный ручной опыт. При подготовке ни записи в1С, ни версии, ни архивы и резервные копии не создавались.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.