План обмена *.НачатьЗапись |
Я |
03.06.13 — 14:37
Всем привет. Проблема с вылетании ошибки:
«{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10634)}: Ошибка при вызове метода контекста (НачатьЗапись): Неизвестный получатель»
Пояснение. 1С УПП. Настраиваю односторонний обмен выгрузки данных. Использую ПланОбмена как регистратор изменений для выгрузки измененных документов (конкретных).
Ошибка вылазит на следующем коде:
[1c] ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
// Создаем новое сообщение
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);
[/1c]
Параметры НачатьЗапись(ЗаписьXML, УзелОбмена) элементарные — Запись, которая создается в коде перед методом, а также мой УзелОбмена (единственный в базе, больше не создано). Узел отладчиком я проверил — цепляет верно. Но ошибка выдается, причем не понятно что за получатель. У меня односторонний обмен, там получатель не узел, а файл выгрузки.
1 — 03.06.13 — 14:38
*представленный код находится в модуле объекта УниверсальныйОбменДанными.
2 — 03.06.13 — 14:39
+ (1) помогите, пожалуйста, с решением проблемы.
3 — 03.06.13 — 14:48
» (НачатьЗапись): Неизвестный получатель» »
С сервером дружить надо, налей ему 100 грамм в системный блок, сразу зауважает и узнавать начнет.
4 — 03.06.13 — 14:52
(0)>> там получатель не узел, а файл выгрузки.
вытащи запросом таблицу регистрации плана обмена и посмотри для чего узел нужен. не бывает обмена без узла, а вот без файла запросто.
5 — 03.06.13 — 14:54
(4) так у меня узел корректно подцепляется.
6 — 03.06.13 — 14:55
Получатель — файл выгрузки ?????
7 — 03.06.13 — 14:58
(6) Получаетля я вообще не вижу! Покажите мне в предоставленном коде, где он?
У
[1с]ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);[/1с] лишь 2 параметра, один определяется перед этой строкой без указания чего-либо, а второй — мой узел.
У Узла нет Получателя:
УзелОбмена УИБ82 ПланОбменаСсылка.ОбменЛогистика8_БИБ82_СохраннаяРасписка
ВерсияДанных «AAAAAAAZUc0=» Строка
Код «000000001» Строка
Наименование «УИБ82» Строка
НомерОтправленного 0 Число
НомерПринятого 0 Число
ПометкаУдаления Ложь Булево
Ссылка УИБ82 ПланОбменаСсылка.ОбменЛогистика8_БИБ82_СохраннаяРасписка
8 — 03.06.13 — 15:00
(7) ну не может твой узел быть получателем. Не парь нам мозг. Создай второй узел, и на него отправляй.
9 — 03.06.13 — 15:00
(7) да при чем тут реквизиты то? это свойство каждого элемента, включенного в план обмена
10 — 03.06.13 — 15:09
(8) где вообще указывается получатель?
Мой код следующий:
Номер = ПолучитьНомерПоследнегоПринятого(); НомерПоследнегоПринятогоПакетаВБП82 = ?(Номер= 0 ИЛИ Номер= 9999999999, 0, Номер-1); Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать(); УзелОбмена = ПланыОбмена.ОбменЛогистика8_БИБ82_СохраннаяРасписка.НайтиПоНаименованию("УИБ82"); Если НомерПоследнегоПринятогоПакетаВБП82 > 0 Тогда ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, НомерПоследнегоПринятогоПакетаВБП82); ОбъектУзелОбмена = УзелОбмена.ПолучитьОбъект(); ОбъектУзелОбмена.НомерПринятого = НомерПоследнегоПринятогоПакетаВБП82; ОбъектУзелОбмена.Записать(); КонецЕсли; //Добиваем номер пакета не значащими нулями СтрокаНомера = Строка(УзелОбмена.НомерОтправленного + 1); //Убираем лишние символы из строки номера пакета СтрокаНомера = СтрЗаменить(СтрокаНомера, Символ(160), ""); ДлинаКодаТек = СтрДлина(СтрокаНомера); Для к=1 по (ДлинаКодаПакета-ДлинаКодаТек) Цикл СтрокаНомера = "0"+ СтрокаНомера; КонецЦикла; Обработка.ИмяФайлаОбмена = ПутьОбмена + СтрЗаменить(МаскаФайловВыгрузки,"*",СтрокаНомера); Обработка.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена; Обработка.ЗагрузитьПравилаОбмена(Обработка.ИмяФайлаПравилОбмена); УстановитьУзелОбменаУСтрокДерева(Обработка.ТаблицаПравилВыгрузки.Строки, УзелОбмена.Ссылка); Обработка.ВыполнитьВыгрузку(); ОбъектУзелОбмена.НомерОтправленного = УзелОбмена.НомерОтправленного + 1; ОбъектУзелОбмена.Записать();
На строке «Обработка.ВыполнитьВыгрузку();» программа уходит в модуль стандартной обработки.
11 — 03.06.13 — 15:10
все изменения система не просто так регистрирует а для конкретного узла получателя, и отдельно контролирует удаление из таблицы регистраций для тех узлов кто получил. Создай переферийный узел получатель.
12 — 03.06.13 — 15:13
(10)вот тут
УзелОбмена = ПланыОбмена.ОбменЛогистика8_БИБ82_СохраннаяРасписка.НайтиПоНаименованию(«УИБ82»);
вместо УИБ82 должен быть код второго переферийного узла
13 — 03.06.13 — 15:15
+ и у плана обмена должна стоять галка «Распределенная ИБ» что то вроде такого.
14 — 03.06.13 — 15:17
(13) не, эта галка влияет будет ли ездить конфа. к регистрации элементов отношения не имеет
15 — 03.06.13 — 15:20
(12) Спасибо, по крайней мере ошибка ушла. Буду дальше разбираться с этим планом обмена.
Maxus43
16 — 03.06.13 — 15:36
(15) для начала разберись что это вобще такое. Получате, отправители, узлы… Метод заменил отправителя и заработало — совсем экстремальный
Ошибка при вызове метода контекста (НачатьЧтение)Причина: Неизвестный получатель
Автор Черника, 23 мар 2022, 11:18
0 Пользователей и 1 гость просматривают эту тему.
Всем здравствуйте, помогите пожалуйста. Делаю по образу книги Радченко, занятие 24 «Обмен данными» (Передаю 1 документ), выдает ошибку:
Ошибка при вызове метода контекста (НачатьЧтение)
{ПланОбмена.ДокументыРКО.МодульОбъекта(72)}: ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
{Обработка.ОбменДанными.Форма.Форма.Форма(16)}: УзелОбъект.ПрочитатьСообщениеСИзменениями();
{Обработка.ОбменДанными.Форма.Форма.Форма(4)}: ВыполнитьОбменНаСервере();
по причине:
Неизвестный получатель
по причине:
Неизвестный получатель
Сам код:
Процедура ПрочитатьСообщениеСИзменениями() Экспорт
Каталог = КаталогВременныхФайлов();
ИмяФайла = Каталог + ?(Прав(Каталог, 1)= "","","") + "Message" + СокрЛП(ПланыОбмена.ДокументыРКО.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml";
Файл = Новый Файл(ИмяФайла);
Если Не Файл.Существует() Тогда
Возврат;
КонецЕсли;
ЧтениеXML = Новый ЧтениеXML;
Попытка
ЧтениеXML.ОткрытьФайл(ИмяФайла);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Невозможно открыть файл обмена данными.";
Сообщение.Сообщить();
Возврат;
КонецПопытки;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "------- Загрузка из " + Строка(ЭтотОбъект) + "-------";
Сообщение.Сообщить();
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = " - Считывается файл " + ИмяФайла;
Сообщение.Сообщить();
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
Если ЧтениеСообщения.Отправитель <> Ссылка Тогда
ВызватьИсключение "Неверный узел";
КонецЕсли;
ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
Данные = ПрочитатьXML(ЧтениеXML);
Если Не ЧтениеСообщения.Отправитель.Главный И
ПланыОбмена.ИзменениеЗарегистрировано(ЧтениеСообщения.Отправитель, Данные) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "- Изменения отклонены";
Сообщение.Сообщить();
Продолжить;
КонецЕсли;
Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Запись();
КонецЦикла;
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
УдалитьФайлы(ИмяФайла);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "--------- Конец загрузки ---------";
Сообщение.Сообщить();
КонецПроцедуры
Оптимус, Полностью переписал код заново, а сравнить их не догадался. Где то не правильно, что то напечатал.
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Ошибка при вызове метода контекста (НачатьЧтение)Причина: Неизвестный получатель
Похожие темы (5)
Поиск
-
Добрый день! Подскажите пожалуйста, что можно сделать в такой ситуации — Есть основная база (серверная) и переферийная, которая находится на ноутбуке. Версия 8.0. Конфигурация самописанная. Возникла потребность обновить данные. Я подкючилась к сети и с ноутбука зашла на сервер чере админа, в плане обмена укаала ноутбук, и выполнила операцию прочитать изменения. Затем я зашла в переферийную базу и, указав в плане обмена серверную базу, и при попытки — записать изменения — вышла ошибка — «неизвестный получатель». сам же значок обмена (который находится в первом поле, в соответств. записи серверной базы был красного цвета) Кто до меня работал, говорят, что с эти не сталкивался. я работаю в 1с меньше года — тем более. B) Пожалуйста подскажите, что может не так???!! :unsure: Заранее, огромное спасибо!!!
-
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Э….. А создать узлы, образы…. Делали?
-
Здравствуйте! А каким образом можно создать узлы? Моя главная цель — это извлечь данные с переыерийной базы в основную. (т.е. с ноутбука на серверную). Я как понимаю, создание нового образа не позволит это сделать?((
-
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Давай-те начнем с малого:
— база на ноутбуке какое отношение имеет к базе основной?
-
База на ноутбуке является переферийной. т.е. изначально для него создавался нач. образ и т.д.
Как Вы думаете, если я сразу сделаю «записать изменения» (пропустив «прочитать изменения») что-то изменится? )
Большое спасибо Вам за Ваше внимание!..так, уже поняла, что это не правильно.. :unsure: не знаю, просто, что делать.. а что означает красный значок обмена? Остальные везде синие…
-
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
красный — это родитель, остальные не синие, а один из них должен быть с зеленой фигней рядом — это местный план.
Когда последний раз проводился обмен?
-
Offline
smm
Опытный в 1С- Регистрация:
- 19 дек 2008
- Сообщения:
- 61
- Симпатии:
- 0
- Баллы:
- 26
Проблема возникает при несовпадении кодов в плане обмена, возможно после создания строк в плане обмена вы изменили код в базе-приемнике или в основной базе. Какой изначально должен быть код, смотрим xml-файл обмена следующие строки на примере:
<v8msg:To>2</v8msg:To>
<v8msg:From>1</v8msg:From>
где 2 — это код строки с зеленым шариком в основной базе, 1 — код строки обмена с распределенной базой.