|
УТ 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: имхо, "ОбменДанными.Загрузка = Истина" не отменяет регистрацию изменений. В данном контексте ветки просто забудьте об этом :)
Для объектов, у которых запрещена автоматическая регистрация изменений, может быть использовано при исполнении подписок на событие при записи объекта для регистрации изменений. Но нужно помнить: "Загрузка=ИСТИНА" автоматически включается при загрузке сообщений обмена и не должна мешать регистрировать изменения для других узлов планов обмена. А в принципе, в платформе это отменяет контроль проверок при записи объекта, которые выполняются по свойствам метаданных конфигурации и игнорирует некоторые типы блокировок (например, игнорируется блокировка при открытии формы объекта пользователем). В конфигурации это используется программно как своеобразный индикатор/ориентир и позволяет запрограммировать обход контроля интерактивных действий пользователей при записи объекта, а также может быть использовано в различного рода подписках на события для выполнения алгоритмов, необходимость в которых косвенно порождается из действий пользователей. Уф. Ваш к.э.п. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |