helpf.pro
Регистрация

v8: Как удалять записи регистрации изменений после последней выгрузки в xml-файл?

AndrewM
04.04.2012 13:55Прочитано: 38852
У меня снова вопрос по обмену. Только теперь по плану обмена.

Когда я меняю что-то в элементе объекта, по нему появляется запись регистрации изменений для каждого узла, к которому он имеет отношение через план обмена.
Но используемая мной стандартная обработка обмена по расписанию записи-то регистрации изменений считывает, но после выгрузки сама их не затирает. В итоге все когда-либо изменявшиеся элементы объектов с момента создания узла у меня гоняются по этому обмену по расписанию.
Подскажите, что и где надо прописать, чтобы затереть записи регистрации изменений после выгрузки объектов в xml-файл. Я надеялся, что стандартная обработка обмена по расписанию сама это будет делать. Но, видимо, придётся что-то дописывать.
Изменено 04.04.12 13:56:25 по причине: Изменение категории
Yandex
Возможно, вас также заинтересует
Реклама на портале
AndrewM
04.04.2012 14:48Ответ № 1
Предполагаю, что надо писать
Код 1C v 8.х
 ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбмена.ОбменУСОБухКОРП.ЭтотУзел(), ... );   

Но:
1) как выбрать записываемый элемент для указания его во втором параметре? Или без второго параметра эту процедуру вызвать, чтобы сразу все записи регистрации изменений удалились?
2) куда записывать эту процедуру? В какой обработчик плана обмена? Изучаю план обмена по Радченко. Но жаль, что у него нет описания типовых обработчиков плана. Какой обработчик выполняется при записи данных в xml-файл?
Я создал свой план на основе плана "Полный". В нём есть такие процедуры, как "ПриЗаписи()", "ПередЗаписью()". Могу ли я процедуру "УдалитьРегистрациюИзменений()" вставить в обработчик "ПриЗаписи()"? Честно говоря, туда её вписывать страшно. Если бы был обработчик "ПослеЗаписи()", тогда бы я туда вписал. Но такого обработчика нет.
AndrewM
04.04.2012 15:13Ответ № 2
Проблема в том, что в случае со стандартной обработкой выгрузки/загрузки по расписанию ("Прочие обмены данными/Настройка выполнения обмена") все процедуры записи/чтения выполняются в самой обработке, а не в модуле объекта плана обмена, как это описывается во всех пособиях (в том числе и у Радченко). Если процедуры записи/чтения xml-файла найти в этой стандартной обработке, то туда наверняка можно вставить нужную мне процедуру удаления записей регистрации изменений.
Но меня интересет, могу ли я в данном случае удаление записей как-то реализовать именно в модуле плана, не залезая в обработку?

P.S.: есть, конечно, ещё вариант, что в этой стандартной обработке просто где-то есть настройка "удалять записи регистрации после выгрузки xml-файла", как это есть в обработке универсального обмена данными в формате XML. Но в обработке обмена по расписанию я пока такую не могу найти.
AndrewM
04.04.2012 15:45Ответ № 3
Нашёл обработку "Обмен данными XML" с процедурами выгрузки/загрузки. Думаю, туда можно прописать удаление записей регистрации изменений. Но если я это сделаю, регистрация изменений будет удаляться при выгрузке и из других планов, вроде как гибкость выгрузки уменьшится. Да и хотелось бы все изменения только в плане сделать, чтобы в одном месте были. Но как?
AndrewM
04.04.2012 16:52Ответ № 4
Добавил в модуль объекта обработки "Обмен данными XML" в функцию "ВыполнитьВыгрузку()" следующую строку при условии успешной выгрузки:
Код 1C v 8.х
 ПланыОбмена.УдалитьРегистрациюИзменений(УзелДляОбмена);   

Работает. Но хотелось бы всё-таки прописать это в плане обмена, не меняя обработку. Может, кто подскажет?
AndrewM
05.04.2012 07:25Ответ № 5
Добавленная мной в стандартную обработку строчка (в сообщении выше) не устроила моего начальника, т.к. в таком случае записи регистрации удаляются сразу после выгрузки. А это не правильно, они должны выгружаться только после получения подтверждения о получении от принимающей стороны. То есть принимающая база после успешной загрузки должна выгрузить файл с подтверждением, который потом перед следующей выгрузкой должен быть прочитан базой-источником.
Да и я с ним солидарен. )

Вопросы:
Можно ли реализовать удаление записей регистрации изменений при получении подтверждения от принимающей стороны стандартными средствами конфигурации, а точнее обработкой, которая вызывается через "Сервис/Прочие обмены данными/Настройка выполнения обмена"?
Если да, подскажите, как это сделать.
Не хочется изобретать велосипед и дописывать код в этой стандартной обработке, если есть возможность реализовать это в ней стандартными средствами.
AndrewM
06.04.2012 08:03Ответ № 6
Разобрался:
В конфигурации базы-источника создал план обмена с авторегистрацией.
В конфигурации базы-приёмника создал точно такой же план, но без авторегистрации.
Далее и в базе-источнике, и в базе-приёмнике настроил и загрузку, и выгрузку по одному и тому же созданному мной правилу с выполнением по расписанию (через "Сервис/Прочие обмены данными/Настройка выполнения обмена").

Теперь:
База-источник выгружает изменения в xml-файл, т.к. в ней настроена авторегистрация. База-приёмник загружает изменения из этого файла, но записей регистрации изменений не ведёт, поэтому после загрузки сразу же выгружает файл-пустышку, в котором хранится номер отправленного сообщения и номер последнего принятого.
В следующем цикле загрузок база-источник грузит эту пустышку и затирает регистрацию изменений по номеру сообщения, хранящемуся в файле. Соответственно в следующей выгрузке база-источник вышлет только актуальные изменения.

Единственные изменения в конфигурации, которые потребовались, - это добавление нового плана обмена в базу-источник (с авторегистрацией) и в базу-приёмник (без авторегистрации).
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.