Обмен работает только через обработку Универс.обмен данными XML.А как автоматом? #596355


#0 by Антиквар
Всем привет! Есть нестандартная конфа на базе Розницы и нестандартная конфа на базе УТ. Требуется периодическая выгрузка измененных данных из Розницы в УТ. Односторонняя! Я сделал в Рознице в конфигураторе свой план обмена. В режиме предприятия задал два узла: Розница - текущий узел, и второй узел: УТ. Сделал в КД правила конвертации Розница -> УТ. Запускаю в Рознице стандартную обработку "УниверсальныйОбменДаннымиXML", указываю мои правила конвертации. Обработка без проблем выгружает изменения нужных мне данных, причем хоть в файл, хоть напрямую в УТ (через COM). Но мне нужно, чтобы пользователь не открывал никакие обработки и ничего там не настраивал, поэтому я иду в "Сервис - Настройка обмена данными". Для узла УТ выбираю мои правила конвертации. Пробую настройки выгрузки через файл, и напрямую через COM, но при нажатии кнопки "Выполнить обмен" вылезают ошибки. Раз интерактивно не работает, то нет смысла и автоматически настраивать. А ошибки из-за того, что в модуле моего плана обмена нет определенных процедур, например нет процедуры "ОпределитьТипОтправкиДанных". Ругается, что такой метод у моего узла не найден. Но откуда он там может быть, я ж свой обмен хочу настроить, а не стандартный, у меня в модуле плана обмена вообще пусто. Я что-то не так делаю? Подскажите...
#1 by Баклажанов
обработка
#2 by Антиквар
Что за ссылка? Меня по ней на какую-то игрушку переадресовывает...
#3 by Антиквар
Вобщем вставил в модуль своего плана обмена процедуру, на которую обработка ругается, оставил её пустой, обмен сработал. Странно, не должно же быть так.
#4 by Антиквар
Никто не подскажет, может я что не так делаю? Мне казалось, что настройки обмена должны быть универсальными, для любого плана обмена работать, в том числе и пользовательского.
#5 by Антиквар
Хм, после того как вставил пустую процедуру, в файл выгружать стало. Но прямой обмен через COM всё-равно не идет, уже другая ошибка: не находит в базе-приемнике моего плана обмена. Но зачем он там, регистрация изменений у меня только в Рознице. В УТ она должна лишь уходить, там не нужно никакого плана обмена...
#6 by Антиквар
Раз у меня все без ошибок выгружается с помощью обработки "УниверсальныйОбменДаннымиXML", то может сделать регламентное задание и программно её периодически вызывать, задавая ей нужные реквизиты? Но как-то это всё через одно место... Отзовитесь, кто обмен свой настраивал.
#7 by Антиквар
up
#8 by zippygrill
ищи на инфостарте. там была статья как все это программно делать. я завтра на работе попробую найти ссылку.
#9 by Антиквар
Спасибо! А то я вроде как и нахожу пути решения, но мне кажется, что 1С предусмотрела для этого более разумные действия :)
#10 by CepeLLlka
Пля... поцона на 10 лет забанили :)
#11 by smi2012
План обмена и соответствующие узлы должны быть в обеих кофигурациях.     Например в источнике узел текущей базы(источник) ставим код 001, создаем второй узел (приемник) с кодом 002, далее в приемнике в соответствующем плане обмена устанавливаем код узла текущей базы 002 (приемник), а у созданного 001(т.к. это узел источника).     В источнике план обмена регистрирует изменения (и ведет учет/нумерацию сообщений обмена), а в приемнике он ведет, только учет/нумерацию сообщений обмена. Обмен происходит по схеме: Источник генерит сообщение со всеми зарегистрированными изменениями и устанавливает им номер сообщения, которым они выгружены. Приемник кушает это сообщение и генерит в ответ пустое (в приведенном примере), по которому приемник узнает какое именно сообщение было съедено успешно. По номеру успешно принятого сообщения Приемник чистит регистрацию изменений, иначе если не будет ответных сообщений регистрация будет расти до упора. Основное отличие обмена через Планобмена и Универсальный обмен в том, что план обмена накладывает на выгружаемые данные фильтр по вхождению в регистрацию, Универсальный обмен работает с полной базой (возможно ограниченной фильтрами). Прелесть плана обмена в том, что например, документы измененные задним числом будут включены в обмен, а Универсальный либо не выгрузит, из-за ограничений по периоду, либо захватит много лишних (не измененных). Форма настроек плана обмена стандартной конфигурации обращается к некоторым функциям в модуле плана обмена, для типовых конфигураций это типично ;) Поступить можно, например, так: В источнике создается план обмена с авторегистрацией необходимых объектов В приемнике создается план обмена с запретом регистраций В обеих базах в модулях типовых планов обмена смотрим какие функции им нужны и либо копируем их в модули своих планов, либо делаем заглушки. После этого пользуясь стандартной настройкой устанавливаем расписание и тестируем обмен. P/S Есть интересный эффект при использовании плана обмена. Попробую его описать. Выгружаем документ, в котором есть ссылка на контрагента, но контрагента в приемнике нет, а в источнике он давно не изменялся (и не зарегистрирован в плане обмена). При этом в приемнике появится документ со ссылкой на незаполненный элемент справочника контрагенты.
#12 by Антиквар
Спасибо за развернутый ответ, но это не совсем так: >> Основное отличие обмена через Планобмена и Универсальный обмен в том, >>  что план обмена накладывает на выгружаемые данные фильтр по вхождению >>  в регистрацию, Универсальный обмен работает с полной базой (возможно >>  ограниченной фильтрами)" На самом деле в универсальном обмене можно указать узел из плана обмена, и тогда будут выгружаться только изменения, зарегистрированнеы для этого узла. Поэтому в источнике я создал план обмена, запретил авторегистрацию и в модулях при нужных мне условиях регистрирую изменения. Универсальный обмен благополучно загружает напрямую через COM эти изменения  в базу-приемник. >> Приемник чистит регистрацию изменений, иначе если не будет ответных >>  сообщений регистрация будет расти до упора. Это тоже вобщем-то не проблема. Я хотел после успешной загрузки данных напрямую в приемник, в источнике снимать регистрацию изменений. Кстати универсальный обмен опять же позволяет это делать. >> Выгружаем документ, в котором есть ссылка на контрагента, но контрагента >>  в приемнике нет, а в источнике он давно не изменялся >> (и не зарегистрирован в плане обмена)" У сопутствующих справочников у меня авторегистрация изменений, т.е. тут проблемы не будет. И если действовать как хочет 1С, создавать план обмена также и в приемнике, то какой он должен быть, какие объекты в его состав должны быть включены, ведь никакие изменения фиксировать не надо. Т.е. опять же план-обмена типа заглушки? Как-то всё слишком натянуто...
#13 by smi2012
>На самом деле в универсальном обмене можно указать узел из плана обмена, и тогда будут >выгружаться только изменения, зарегистрированнеы для этого узла. Так оно и есть при обработке в регламентном задании выгрузки данных из плана обмена, он по сути подставляется в универсальный обмен, просто обработка универсального обмена может быть немного изменена под конкретную конфигурацию. >Я хотел после успешной загрузки данных напрямую в приемник, в источнике снимать регистрацию >изменений. Кстати универсальный обмен опять же позволяет это делать. Как определяется, что загрузка прошла успешно? У меня обычно тем, что при чтении/записи в приемник не произошло никаких ошибок и только в этом случае генерится ответ. Универсальный читстит изменения сразу после выгрузки не контролируя успешность обмена.
#14 by Антиквар
>> Так оно и есть при обработке в регламентном задании выгрузки данных >> из плана обмена, он по сути подставляется в универсальный обмен Речь о стандартной настройке автоматического обмена? Но почему-то универсальный обмен не требует наличия плана обмена на стороне приемника, а обычный обмен требует. Или Вы не о том? >> Как определяется, что загрузка прошла успешно? >> Универсальный читстит изменения сразу после выгрузки >> не контролируя успешность обмена. Но если выгрузка настроена не через файл, а напрямую через COM, то если была какая-то ошибка, обработка вылетит и регистрация изменений не снимется. Если делать обмен через файл, то да, нужно какое-то подтверждение загрузки данных. Видимо стандартный обмен через COM тоже по этому же принципу работает. А в этом случае подскажите, какой план обмена должен быть на приемнике? Просто скопировать его из источника и у всех объектов, входящих в состав запретить регистрацию изменений? Или достаточно вообще сделать пустой план обмена, лишь бы был? Но непонятно, как источник определит, по какому плану обмена с приемником связываться?
#15 by zippygrill
смотри сюда
#16 by Антиквар
Спасибо, посмотрю. А то сам поискал на инфостарте, ничего толкового не нашел.
#17 by smi2012
>>А в этом случае подскажите, какой план обмена должен быть на приемнике? Смотрим изнутри (кофигуратор) Конфигурация источник: ПланыОбмена.ИмяПланаОбмена (у данного плана обмена включаем авторегистрацию изменений нужных объектов) Конфигурация приемник:ПланыОбмена.ИмяПланаОбмена (у данного плана обмена ставим запрет на регистрацию изменений всех объектов, т.к. обмен идет в одну сторону) Конец просмотра внутренностей. ИмяПланаОБмена в обеих конфаг одинаково, т.к. прописывается в xml-файле, по этому имени все и определяется.
#18 by smi2012
статья интересная, но править модуль приложения не совсем хорошо/ Регламентные задания + план обмена в данном случае подходят лучше ИМХО. извините, пропустил вопрос. >>Речь о стандартной настройке автоматического обмена? Но почему-то универсальный обмен не >>требует наличия плана обмена на стороне приемника, а обычный обмен требует. Или Вы не о >>том? речь о "стандартной" настройке, хотя собственный план обмена уже не совсем стандартная ситуация. Универсальный обмен использует узел плана обмена, как фильтр для выборки данных и если поставить галочку очищать регистрацию, то после окончания ее конечно очистят, но без учета прохождения обмена. Некий аналог UDP. Использование планов обмена на обеих сторонах предполагает наличие подтверждения доставки (TCP).
#19 by Антиквар
Понятно, спасибо, попробую. Т.е. по имени плана обмена связь идет. Дело в том, что я не в файл буду выгружать, а напрямую, но думаю механизм тот же, по имени. А в конфигурации-приемнике попробую сначала вообще убрать из плана обмена все объекты, раз он фиктивный :) Да, статьи интересные, спасибо zippygrill. Но я думаю лучше сделать свою обработку, запускающую обработку универсального обмена, и эту свою обработку запускать по регламентному заданию. Чтобы править не модуль приложения, а свое регл.задание сделать. Т.е. вариант, когда 1С будет всегда висеть под определенным пользователем, и периодически запускать обмен. В статье интересно то, что 1С запускается только на момент обмена, с помощью назначенных заданий виндовс.
#20 by zippygrill
согласен что лучше через Регл.Задании. Я именно так и делаю.
#21 by acsent
Вообщето это онлайн обмен. Тут обработка немного другая. Нужно копать в эту сторону. Можно смотреть пожсистему в БСП или например БП 20. но инфы по нему катострофически недостаточно
#22 by acsent
ты подумаю как ты будешь ответы загружать
#23 by Антиквар
Вообще я думал, что ответы сами загрузятся, в соответствии с планом обмена на стороне приемника. Ведь стандартный обмен между Розницей и УТ можно тоже в онлайн-режиме задать, а он вроде бы в обе стороны. Просто видимо правила обмена при загрузке тоже надо задать... Но у меня односторонний обмен, поэтому надеюсь получить лишь подтверждение загрузки. Завтра буду пробовать всё это дело
#24 by Антиквар
хм... Решил делать все-таки через 2 плана обмена и с помощью регл. заданий. Т.е. добавил план обмена в конфигурацию-приемник (УТ), ну вобщем как в сказано. Для начала решил настроить обмен через файловый ресурс. Из Розницы выгрузил изменения в файл. В УТ пробую их загрузить, мне пишет: ОбщийМодуль.ПроцедурыОбменаДанными(1753)}: Метод объекта не обнаружен (ЗагрузитьИзмененияДанныхДляУзла) Ошибка в этой строке: Ну думаю, значит опять та же ситуация, в моем модуле плана обмена нет нужной процедуры. Хотел скопировать. Но! Этой процедуры нет вообще в конфигурации!!! Причем смотрел и УТ, и Розницу, глобальным поиском. Эта процедура (ЗагрузитьИзмененияДанныхДляУзла) встречается только один раз, в этом месте, где идет её вызов. И больше нигде она не вызывается, и мало того, нигде не описывается. Конфы УТ и Розницы доделанные, но ничего 100% не удалялось, и переделывались только справочники, добавлялись новые объекты. И я бы понял, если бы только в УТ такое было, ну может релиз глючный, т.к. не свежие релизы у меня. Но и в Рознице точно также, эта процедура вызывается в одном месте, и больше нигде не встечается. Как же вы в и в это делаете???
#25 by Антиквар
ап
#26 by Антиквар
Вобщем всё у меня получилось. Спасибо за помощь! Насчет функции "ЗагрузитьИзмененияДанныхДляУзла" (то же самое кстати и с функцией "ВыгрузитьИзмененияДанныхДляУзла") - видимо 1С её специально сделала без объявления, чтобы можно было написать свою процедуру чтения/записи файлов обмена, и при этом пользоваться стандартными настройками обмена. Я создал у себя эти процедуры, но запихал в них вызов стандартных процедур чтения/записи файла обмена и все заработало.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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