Понадобилось сделать выгрузку из типовой бухгалтерии в точно такую же типовую бухгалтерию. Но при этом два условия:
- чтобы не за счет распределенной базы данных
- чтобы выгружались только измененные объекты (т.е. как в планах обмена при авторегистрации)
За основу я взял обработку ВыгрузкаЗагрузкаДанныхXML и стал стыковать ее с планом обмена у которого включена авторегистрация.
Принцип я думаю понятен: грузим объекты из зарегистрированных изменений плана обмена в обработку ВыгрузкаЗагрузкаДанныхXML. Во второй базе загружаем. При этом один нюанс: кроме стандартного файла с данными создаются еще файлы с номерами сообщений, чтобы второй раз не выгружать то, что уже было выгружено.
Что-то я отвлекся от темы. Проблема у меня возникла, когда я стал принимать сообщение о удачной загрузке из периферийной базы в основную. Нужно получить номер сообщения и очистить регистрации с номерами сообщений меньше или равных полученному. Казалось бы все просто:
ПланыОбмена.УдалитьРегистрациюИзменений(Узел, НомерСообщения);
Но у меня никак не очищались записи о регистрации изменений и старые изменения вновь улетали в периферийную базу. Проверял и Узел и НомерСообщения - все правильно, Узел тот что надо и Номер именно тот, который присвоился при выгрузке, когда выполнялась команда:
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);
Этот самый номер стоял в реквизите НомерОтправленногоСообщения того Узла с которым я работал.
Ошибку нашел только когда запросом стал смотреть на таблицы типа "Справочник.Номенклатура.Изменения". Обратил внимание, что при изменении элементов справочника, данные в эту таблицу записываются, но НомерСообщения у записей остается пустым. Пустым он остается и после приведенных выше строк с началом записи сообщения(не смотря на то, что в Узел номер сообщения проставляется). Появляются номера сообщений только после команды:
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения);
И вот когда у записей таблицы Справочник.Номенклатура.Изменения будут стоять номера сообщений, только тогда будет работать и очистка регистрации изменений по номеру сообщения.
Отправить комментарий