"Ручная" регистрация удаления объекта #577259


#0 by evilmox
Задача следующая: используется универсальный механизм обмена данными, в составе плана обмена есть справочник, для которого отключена авторегистрация (т.к. большая часть данных не должна участвовать в обмене). У справочника есть реквизит УчаствуетВОбмене булева типа, определяющий, участвует объект в обмене или нет, соответственно, при смене значения реквизита с "ИСТИНА" на "ЛОЖЬ" необходимо регистрировать удаление объекта. Регистрация организована следующим образом - в модуле объекта справочника в обработчике события ПередЗаписью содержится код: Запись в таблицу регистрации изменений производится, судя по результатам перебора выборки изменений, но при записи данных методом ЗаписатьXML в xml файл записывается объект CatalogObject вместо ObjectDeletion. Что сделано не так?
#1 by Axel2009
Синтаксис: УдалитьРегистрациюИзменений(<Узлы>, <Данные>) Параметры: Тип: ПланОбменаСсылка.<Имя плана обмена>; Массив. Одиночное значение типа ПланОбменаСсылка.<Имя плана обмена> или массив таких значений, показывающие для каких узлов удаляются записи регистрации изменений.
#2 by Axel2009
опс, сори. у меня тоже был гемор с удалением объекта, плюнул, решал все на стороне приемника
#3 by evilmox
Решать на стороне приемника - как-то странно при наличии механизма регистрации удаления. С ним такая же история, как и с различными видами обхода результата запроса (обход подчиненных записей текущей записи выборки мягко говоря работает не совсем так, как написано в описании встроенного языка)?
#4 by hhhh
но у вас ведь не регистрация удаления. Вы пытаетесь обмануть их, неудаленный объект ведь.
#5 by Axel2009
Если указан УдалениеОбъекта, то регистрация изменений выполняется для объекта базы данных, на который "указывает" ссылка, содержащаяся в объекте УдалениеОбъекта.
#6 by hhhh
что-то непонятна постановка задачи у вас. Ведь на этот элемент справочника наверняка есть куча ссылок в документах, в регистрах. Тут приходит какой-то перец и ставит на элементе ЛОЖЬ (не участвует в обмене). Элемент удаляется из всех баз, но ссылки-то на него остались. Миллион битых ссылок будет в базах. Что-то какую-то фигню вы придумали.
#7 by evilmox
В этом и суть, чтобы для базы-приемника зарегистрировать удаление объекта, оставив его в этой базе. Вопрос не в общем решении вопроса (и из всех баз элемент не удаляется, только в базе-приемнике), а в работоспособности механизма регистрации удаления объекта.
#8 by georgebgk
Можно при выгрузке в событии плана обмена ПриОтправкеДанныхПодчиненному (или главному, ты не указал направление обмена) поставить такой костыль: Если ТипЗнч(ЭлементДанных) = мТипЗначенияТвоегоСправочника Тогда Примерно так сделано в типовых конфигурациях
#9 by evilmox
Используется универсальный механизм обмена данными (написано в самом начале первого поста). Использовать распределенную базу данных не представляется возможности, т.к. база-приемник - вообще не 1С.
#10 by Axel2009
между прочим в цитата из СП
#11 by hhhh
ну то есть там тупо должно стоять CatalogObject. Оно там и стоит, автор просто не удосужился прочитать СП?
#12 by evilmox
То есть зарегистрировать удаление объекта, не удаляя его - невозможно?
#13 by Axel2009
штатными средствами нет. да и то у меня есть вопрос в том что пойдет в пересылку, если реально удалить объект.
#14 by Jolly Roger
надо не "регистрировать удаление объекта", а удалять регистрацию объекта...
#15 by Axel2009
тогда в приемник вообще ничего не пойдет. и как удалить его в приемнике?
#16 by evilmox
вот именно
#17 by hhhh
вопрос был в другом записывается объект CatalogObject вместо ObjectDeletion. вам дал ответ, почему так записывается.
#18 by Jolly Roger
теперь уже поздно. раньше надо было думать...
#19 by Jolly Roger
+ и удалять в приемнике другими средствами, не через обмен...
#20 by Axel2009
а у Вас это красиво настроено, когда было время думать раньше? поделитесь тогда..
#21 by Axel2009
предложение в ПКО значение реквизита писать в Параметр. в перед загрузкой проверять этот параметр и удалять объект, если Ложь.
#22 by evilmox
Проблема решена: перед вызовом ЗаписатьXML в зависимости от значения реквизита УчаствуетВОбмене создается объект типа УдалениеОбъекта и передается в качестве параметра процедуре ЗаписатьXML. Всем спасибо.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С