![]() |
|
"Ручная" регистрация удаления объекта | ☑ | ||
---|---|---|---|---|
0
evilmox
28.10.11
✎
11:02
|
Задача следующая: используется универсальный механизм обмена данными, в составе плана обмена есть справочник, для которого отключена авторегистрация (т.к. большая часть данных не должна участвовать в обмене). У справочника есть реквизит УчаствуетВОбмене булева типа, определяющий, участвует объект в обмене или нет, соответственно, при смене значения реквизита с "ИСТИНА" на "ЛОЖЬ" необходимо регистрировать удаление объекта.
Регистрация организована следующим образом - в модуле объекта справочника в обработчике события ПередЗаписью содержится код:
Запись в таблицу регистрации изменений производится, судя по результатам перебора выборки изменений, но при записи данных методом ЗаписатьXML в xml файл записывается объект CatalogObject вместо ObjectDeletion. Что сделано не так? |
|||
1
Axel2009
28.10.11
✎
11:03
|
ПланыОбменаМенеджер (ExchangePlansManager)
УдалитьРегистрациюИзменений (DeleteChangeRecords) Синтаксис: УдалитьРегистрациюИзменений(<Узлы>, <Данные>) Параметры: <Узлы> (обязательный) Тип: ПланОбменаСсылка.<Имя плана обмена>; Массив. Одиночное значение типа ПланОбменаСсылка.<Имя плана обмена> или массив таких значений, показывающие для каких узлов удаляются записи регистрации изменений. <Данные> (необязательный) |
|||
2
Axel2009
28.10.11
✎
11:04
|
опс, сори.
у меня тоже был гемор с удалением объекта, плюнул, решал все на стороне приемника |
|||
3
evilmox
28.10.11
✎
11:14
|
Решать на стороне приемника - как-то странно при наличии механизма регистрации удаления. С ним такая же история, как и с различными видами обхода результата запроса (обход подчиненных записей текущей записи выборки мягко говоря работает не совсем так, как написано в описании встроенного языка)?
|
|||
4
hhhh
28.10.11
✎
11:32
|
(3) но у вас ведь не регистрация удаления. Вы пытаетесь обмануть их, неудаленный объект ведь.
|
|||
5
Axel2009
28.10.11
✎
11:37
|
(3) Если указан УдалениеОбъекта, то регистрация изменений выполняется для объекта базы данных, на который "указывает" ссылка, содержащаяся в объекте УдалениеОбъекта.
|
|||
6
hhhh
28.10.11
✎
11:43
|
(3) что-то непонятна постановка задачи у вас. Ведь на этот элемент справочника наверняка есть куча ссылок в документах, в регистрах. Тут приходит какой-то перец и ставит на элементе ЛОЖЬ (не участвует в обмене). Элемент удаляется из всех баз, но ссылки-то на него остались. Миллион битых ссылок будет в базах. Что-то какую-то фигню вы придумали.
|
|||
7
evilmox
28.10.11
✎
11:46
|
(4) В этом и суть, чтобы для базы-приемника зарегистрировать удаление объекта, оставив его в этой базе.
(6) Вопрос не в общем решении вопроса (и из всех баз элемент не удаляется, только в базе-приемнике), а в работоспособности механизма регистрации удаления объекта. |
|||
8
georgebgk
28.10.11
✎
11:49
|
Можно при выгрузке в событии плана обмена ПриОтправкеДанныхПодчиненному (или главному, ты не указал направление обмена) поставить такой костыль:
Если ТипЗнч(ЭлементДанных) = мТипЗначенияТвоегоСправочника Тогда Если Не ЭлементДанных.УчаствуетВОбмене Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить КонецЕсли; КонецЕсли Примерно так сделано в типовых конфигурациях |
|||
9
evilmox
28.10.11
✎
11:52
|
(8) Используется универсальный механизм обмена данными (написано в самом начале первого поста). Использовать распределенную базу данных не представляется возможности, т.к. база-приемник - вообще не 1С.
|
|||
10
Axel2009
28.10.11
✎
11:55
|
(7) между прочим в (5) цитата из СП
|
|||
11
hhhh
28.10.11
✎
11:58
|
(10) ну то есть там тупо должно стоять CatalogObject. Оно там и стоит, автор просто не удосужился прочитать СП?
|
|||
12
evilmox
28.10.11
✎
12:00
|
(10) (11) То есть зарегистрировать удаление объекта, не удаляя его - невозможно?
|
|||
13
Axel2009
28.10.11
✎
12:01
|
штатными средствами нет. да и то у меня есть вопрос в том что пойдет в пересылку, если реально удалить объект.
|
|||
14
Jolly Roger
28.10.11
✎
12:01
|
(0) надо не "регистрировать удаление объекта", а удалять регистрацию объекта...
|
|||
15
Axel2009
28.10.11
✎
12:02
|
(14) тогда в приемник вообще ничего не пойдет. и как удалить его в приемнике?
|
|||
16
evilmox
28.10.11
✎
12:03
|
(15) вот именно
|
|||
17
hhhh
28.10.11
✎
12:04
|
(16) вопрос был в другом
записывается объект CatalogObject вместо ObjectDeletion. (10) вам дал ответ, почему так записывается. |
|||
18
Jolly Roger
28.10.11
✎
12:05
|
(15) теперь уже поздно. раньше надо было думать...
|
|||
19
Jolly Roger
28.10.11
✎
12:06
|
+(18) и удалять в приемнике другими средствами, не через обмен...
|
|||
20
Axel2009
28.10.11
✎
12:20
|
(18) а у Вас это красиво настроено, когда было время думать раньше? поделитесь тогда..
|
|||
21
Axel2009
28.10.11
✎
12:22
|
(16) предложение в ПКО значение реквизита писать в Параметр. в перед загрузкой проверять этот параметр и удалять объект, если Ложь.
|
|||
22
evilmox
28.10.11
✎
12:38
|
Проблема решена: перед вызовом ЗаписатьXML в зависимости от значения реквизита УчаствуетВОбмене создается объект типа УдалениеОбъекта и передается в качестве параметра процедуре ЗаписатьXML.
Всем спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |