Имя: Пароль:
1C
1С v8
План обмена *.НачатьЗапись
0 Csar
 
03.06.13
14:37
Всем привет. Проблема с вылетании ошибки:
"{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10634)}: Ошибка при вызове метода контекста (НачатьЗапись): Неизвестный получатель"
Пояснение. 1С УПП. Настраиваю односторонний обмен выгрузки данных. Использую ПланОбмена как регистратор изменений для выгрузки измененных документов (конкретных).
Ошибка вылазит на следующем коде:
   ЗаписьXML = Новый ЗаписьXML();
   ЗаписьXML.УстановитьСтроку();
   
   // Создаем новое сообщение
   ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
       
   ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);

Параметры НачатьЗапись(ЗаписьXML, УзелОбмена) элементарные - Запись, которая создается в коде перед методом, а также мой УзелОбмена (единственный в базе, больше не создано). Узел отладчиком я проверил - цепляет верно. Но ошибка выдается, причем не понятно что за получатель. У меня односторонний обмен, там получатель не узел, а файл  выгрузки.
1 Csar
 
03.06.13
14:38
*представленный код находится в модуле объекта УниверсальныйОбменДанными.
2 Csar
 
03.06.13
14:39
+ (1) помогите, пожалуйста, с решением проблемы.
3 Повелитель
 
03.06.13
14:48
" (НачатьЗапись): Неизвестный получатель" "
С сервером дружить надо, налей ему 100 грамм в системный блок, сразу зауважает и узнавать начнет.
4 AaNnDdRrEeYy
 
03.06.13
14:52
(0)>> там получатель не узел, а файл  выгрузки.

вытащи запросом таблицу регистрации плана обмена и посмотри для чего узел нужен. не бывает обмена без узла, а вот без файла запросто.
5 Csar
 
03.06.13
14:54
(4) так у меня узел корректно подцепляется.
6 acsent
 
03.06.13
14:55
Получатель - файл  выгрузки ?????
7 Csar
 
03.06.13
14:58
(6) Получаетля я вообще не вижу! Покажите мне в предоставленном коде, где он?
У
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена); лишь 2 параметра, один определяется перед этой строкой без указания чего-либо, а второй - мой узел.
У Узла нет Получателя:
УзелОбмена    УИБ82    ПланОбменаСсылка.ОбменЛогистика8_БИБ82_СохраннаяРасписка
ВерсияДанных    "AAAAAAAZUc0="    Строка
Код    "000000001"    Строка
Наименование    "УИБ82"    Строка
НомерОтправленного    0    Число
НомерПринятого    0    Число
ПометкаУдаления    Ложь    Булево
Ссылка    УИБ82    ПланОбменаСсылка.ОбменЛогистика8_БИБ82_СохраннаяРасписка
8 hhhh
 
03.06.13
15:00
(7) ну не может твой узел быть получателем. Не парь нам мозг. Создай второй узел, и на него отправляй.
9 Maxus43
 
03.06.13
15:00
(7) да при чем тут реквизиты то? это свойство каждого элемента, включенного в план обмена
10 Csar
 
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 AaNnDdRrEeYy
 
03.06.13
15:10
все изменения система не просто так регистрирует а для конкретного узла получателя, и отдельно контролирует удаление из таблицы регистраций для тех узлов кто получил. Создай переферийный узел получатель.
12 AaNnDdRrEeYy
 
03.06.13
15:13
(10)вот тут
УзелОбмена = ПланыОбмена.ОбменЛогистика8_БИБ82_СохраннаяРасписка.НайтиПоНаименованию("УИБ82");

вместо УИБ82 должен быть код второго переферийного узла
13 AaNnDdRrEeYy
 
03.06.13
15:15
+ и у плана обмена должна стоять галка "Распределенная ИБ" что то вроде такого.
14 Maxus43
 
03.06.13
15:17
(13) не, эта галка влияет будет ли ездить конфа. к регистрации элементов отношения не имеет
15 Csar
 
03.06.13
15:20
(12) Спасибо, по крайней мере ошибка ушла. Буду дальше разбираться с этим планом обмена.
16 Maxus43
 
03.06.13
15:36
(15) для начала разберись что это вобще такое. Получате, отправители, узлы... Метод заменил отправителя и заработало - совсем экстремальный
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший