Имя: Пароль:
1C
 
УТ 10.3 изменить контрагентов без регистрации в плане обмена
0 log987789
 
07.09.16
14:44
УТ 10.3
Надо массово изменить реквизит у всех контрагентов.
Проблема в том, что есть работающий обмен данными с розницей, десяток узлов, и совсем не нужно, чтобы все контрагенты (ок.5 тыс) снова выгрузились в периферийные базы.
Т.е. надо либо предотвратить регистрацию изменений, либо убрать ее после записи.
Просто грохнуть все изменения нельзя - т.к. есть уже зарегистрированные изменения, которые должны уйти по назначению.

Пробовал перед записью сбрасывать ПараметрыСеанса.ПараметрыСеанса.НаличиеОбменаСРозничнойТорговлей -  не помогает.

Как сделать?
1 Serg_1960
 
07.09.16
14:49
Зайти в план обмена, в нем найти монитор обмена и открыть его
2 log987789
 
07.09.16
14:51
(1) И что с ним сделать ?
3 John83
 
07.09.16
14:53
(2) удалить регистрацию этих объектов
4 Метранпаж
 
07.09.16
14:54
РежимОбменаДанными.Загрузка = Истина
5 log987789
 
07.09.16
14:55
(3) Там есть уже ранее зарегистрированные объекты, их удалять НЕЛЬЗЯ. Как их искать среди тысяч строк?
6 log987789
 
07.09.16
14:56
(4) Разве это поможет ?
7 Serg_1960
 
07.09.16
14:56
(2) Закладка "Дополнительно", кнопка "Подробно". Далее разберешься? Там появится дерево метаданных и количество зарегистрированных объектов. Можно грохнуть все или выборочно.
8 Cyberhawk
 
07.09.16
15:06
Варианты:
1. Самому: удалить узлы-получатели
2. ИР, флажок "Без авторегистрации"
9 Cyberhawk
 
07.09.16
15:07
10 Cyberhawk
 
07.09.16
15:08
(4) Не поможет
11 log987789
 
07.09.16
15:09
(8),(9) Спасибо. Хоть один человек понял проблему, и подсказал.
12 Cyberhawk
 
07.09.16
15:11
(11) Только учти, что это поможет защититься только от авторегистрации. Если там дальше где-нибудь в подписках выполняется регистрация изменений (а это в типовых обменах для документов так и есть - авторегистрация запрещена, используются правила регистрации в подписках), то это не поможет.
13 Cyberhawk
 
07.09.16
15:13
+(12) Так что гарантированные способы - это либо приостановить обмен и пробежаться по массиву объектов после их изменения и удалить выборочно их регистрацию, либо пнуть все обмены, приостановить работу в базе, приостановить обмены и уже не глядя снять всю регистрацию
14 aleks_default
 
07.09.16
15:18
ПланыОбменаМенеджер (ExchangePlansManager)
УдалитьРегистрациюИзменений (DeleteChangeRecords)
Синтаксис:

УдалитьРегистрациюИзменений(<Узлы>, <Данные>)
Параметры:

<Узлы> (обязательный)

Тип: ПланОбменаСсылка.<Имя плана обмена>; Массив.
Одиночное значение типа ПланОбменаСсылка.<Имя плана обмена> или массив таких значений, показывающие для каких узлов удаляются записи регистрации изменений.
<Данные> (необязательный)

Тип: Метаданные, Неопределено; УдалениеОбъекта; Число; <Данные>.
Значением данного параметра может быть объект метаданных, объект, представляющий данные, хранимые в базе данных, такой как документ, элемент справочника, счет бухгалтерского учета, менеджер записи константы, набор записей регистра и т. п., ссылка на объект базы данных, а также Неопределено.
Если указан объект метаданных, то записи регистрации изменений будут удалены для всех элементов данных, относящихся к указанному объекту метаданных. Объект метаданных должен входить в состав планов обмена всех узлов, указанных в первом параметре.
Если указан УдалениеОбъекта, то удаление записи регистрации изменений выполняется для объекта базы данных, на который "указывает" ссылка, содержащаяся в объекте УдалениеОбъекта.
Если указан объект представляющий данные, хранимые в базе данных, или ссылка, то записи регистрации изменений будут удалены только для указанных данных. Объект метаданных, соответствующий данным должен входить в состав всех планов обмена всех узлов, указанных в первом параметре.
Если указано Неопределено или не указан, то в качестве первого параметра может быть указан только одиночный узел. И в этом случае записи регистрации изменений будут удалены для всех объектов, метаданные которых входят в состав плана обмена, к которому относится узел, указанный в качестве первого параметра.
Если в качестве первого параметра указан одиночный узел, то в параметре может быть указан номер сообщения. В этом случае метод УдалитьРегистрациюИзменений удаляет из всех таблиц регистрации изменений все записи относящиеся к указанному узлу, у которых номер сообщения меньше или равен значению второго параметра.
Значение по умолчанию: Неопределено
Описание:

Удаляет записи регистрации изменений одного или группы элементов данных для одного или нескольких узлов планов обмена.

Доступность:

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

// Пример 1
Спр = Справочники.Валюты.НайтиПоКоду("810");
Узел = ПланыОбмена.ПО1.НайтиПоКоду("Офис");
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Спр);

// Пример 2
// Загрузка из файла
// Производим попытку открытия файла
ЧтениеXML = Новый ЧтениеXML;
Попытка
    ЧтениеXML.ОткрытьФайл(ИмяФайла);
Исключение
    Возврат;
КонецПопытки;
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
Если ЧтениеСообщения.Отправитель <> Ссылка Тогда
    // Сообщение предназначено не для этого узла
    ВызватьИсключение "Неверный узел";
КонецЕсли;
// Удаляем регистрацию изменений для узла отправителя сообщения
ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
15 Михаил Козлов
 
07.09.16
17:04
Можно затолкать в массив все изменяемые объекты и потом удалить регистрацию по этому массиву.
16 Cyberhawk
 
07.09.16
18:35
(15) Этого недостаточно для гарантированного удаления только того, что не должно попасть в обмен. Между формированием массива и послелующей чисткой этого же контрагента может изменить пользователь на самом деле, и его-таки нужно будет передать в узлы...
17 Serg_1960
 
07.09.16
20:44
Да вся эта идея плохо пахнет. Рассогласование данных не айс. Например, из другого узла придут изменения контрагентов и вся работа автора псу под хвост.
18 Cyberhawk
 
07.09.16
21:29
(17) Я так понял, у них бэк - УТ, и выгрузка односторонняя (только в Розницы)
19 mkalimulin
 
07.09.16
22:39
(0) Запомнить состояние плана обмена. Выполнить обработку. Восстановить состояние плана обмена.
20 andrewrocker
 
08.09.16
05:47
А напомните почему нельзя сделать чтобы и прогрузка в розницу прошла
21 MiniMuk
 
08.09.16
05:51
(20) При любом следующей выгрузке контрагента он выгрузится полностью, видимо проблема только в 5тыс элементов, может выгружать по 100шт?
22 hhhh
 
08.09.16
07:54
(16) всё-таки ОбменДанными.Загрузка = Истина; рулит. Зачем удалять регистрацию, если можно вообще ничего не регистрировать?
23 Cyberhawk
 
08.09.16
09:24
(22) Ошибаешься. См. (10) и (12).
24 regi1984
 
08.09.16
09:54
"ОбменДанными.Загрузка = Истина" может сыграть злую шутку, мы же не знаем что именно собрался ТС менять и зачем же отключать полностью обработку данных, может там какие то алгоритмы по заполнению задействованы. Можно при записи создать доп параметр и уже в подписке на событие записи(БСП) проверить наличие флага. Если флаг есть - то типовую регистрацию не запускаем. Доработка будет для всех справочников и может пригодится в будущем.
25 regi1984
 
08.09.16
10:05
Если Розница 2, то при изменении реквизитов, не задействованых в обмене - регистрация не произойдет. БСП отловит данный факт. Если же меняем реквизит участвующий в обмене - то в РТ все таки необходимо их отправить.

Если Розница 1, то можно выполнить обмен, добиться того что регистрация по данному справочнику очистилась - потом изменить  данные и в конце просто снять регистрацию типовой обработкой.
26 Cyberhawk
 
08.09.16
10:09
(24) (25) Все хорошо, только ты описал то, что к случаю ТС не относится. У него сюжет разворачивается в УТ 10.3.
27 Cyberhawk
 
08.09.16
10:10
Касательно "можно выполнить обмен, добиться того что регистрация по данному справочнику очистилась - потом изменить  данные и в конце просто снять регистрацию типовой обработкой" из (25) читай (16)
28 xafavute
 
08.09.16
10:13
перед запсиью контрагента читать есть ли регистрация, если нет, то после записи удалять. ну и  блокировку элемента на время такой операции
29 regi1984
 
08.09.16
10:15
(26) Так обмен с РТ же сказано, без указания версии. Так что все написано верно

(27) Все хорошо, только ты описал свои догадки. ТС не говорил ничего про время измененеия. Глупо менять 5 тыщ справочников в рабочее время.
30 Cyberhawk
 
08.09.16
10:17
(29) "Так обмен с РТ же сказано, без указания версии. Так что все написано верно " // Перечитывай (26)
"Все хорошо, только ты описал свои догадки" // Не догадки, а варианты развития событий. Речь о гарантированном способе, а не абы как.
31 regi1984
 
08.09.16
10:21
(30)  :) Перечитай условие. Хотя...все равно каждый останется при своем мнении. Баста
32 Serg_1960
 
08.09.16
11:27
PS: имхо, "ОбменДанными.Загрузка = Истина" не отменяет регистрацию изменений. В данном контексте ветки просто забудьте об этом :)

Для объектов, у которых запрещена автоматическая регистрация изменений, может быть использовано при исполнении подписок на событие при записи объекта для регистрации изменений. Но нужно помнить: "Загрузка=ИСТИНА" автоматически включается при загрузке сообщений обмена и не должна мешать регистрировать изменения для других узлов планов обмена.

А в принципе,
в платформе это отменяет контроль проверок при записи объекта, которые выполняются по свойствам метаданных конфигурации и игнорирует некоторые типы блокировок (например, игнорируется блокировка при открытии формы объекта пользователем).
В конфигурации это используется программно как своеобразный индикатор/ориентир и позволяет запрограммировать обход контроля интерактивных действий пользователей при записи объекта, а также может быть использовано в различного рода подписках на события для выполнения алгоритмов, необходимость в которых косвенно порождается из действий пользователей.
Уф.
Ваш к.э.п.