Имя: Пароль:
1C
1С v8
Конвертация данных: как передать в приемник произвольную таблицу значений
0 ботаникус
 
06.03.12
12:58
Всем привет. Нужно передавать в приемник таблицу значений/дерево значений, с какими-то данными, которые не нужно никак конвертировать и т.д.... Нужно обрабатываать эту тз перед обменом и выполнять с базой кое-какие действия. Каким образом можно такого добиться ? подскажите
1 Stim
 
06.03.12
13:01
ПКО с пустыми приемниками и источниками. произвольная выгрузка для этого ПКО. В обработчик ПКО пишешь свой код
2 ботаникус
 
06.03.12
13:12
(1)хорошо, а как в этом случае добиться того, чтобы то, что я описал просходило до обмена, а не в процессе
3 GenV
 
06.03.12
13:20
(2) Выражайся яснее: до выгрузки объектов или после выгрузки и до загрузки объектов.
4 СноваЗдорова
 
06.03.12
13:21
может через параметры?
5 zippygrill
 
06.03.12
13:26
(4) кому как нравится.
6 ботаникус
 
06.03.12
13:38
(4) а как через параметры ? параметр может иметь тип деревозначений? или преобразовывать дерево в строку?
7 ботаникус
 
06.03.12
16:46
товарищи, а кто-нибудь пробовал дописывать файл обмена в событии "После выгрузки данных"? может есть примеры?
8 ботаникус
 
06.03.12
18:12
подниму, кто нибудь добавлял свои узлы в файл обмена?
9 acsent
 
06.03.12
18:16
передавать тз сереализованную в строку
10 fisher
 
06.03.12
18:24
(8) Сам не добавлял, но в справке по обработчикам встречал мини-примерчики
11 ботаникус
 
06.03.12
18:28
(10) ни могу найти никаких примеров, можешь подкинуть?
12 fisher
 
06.03.12
18:36
Ну, например в справке по "При выгрузке" ПКО вижу такое:

Приемник - инициализированный xml-узел объекта приемника. Может быть дополнен призвольным xml-содержимым, например используемым при загрузке. В случае отключения СтандартнойОбработки, правила конвертации свойств (ПКС) не обрабатываются, т.е. необходимо реализовать алгоритм заполняющий узел приемника в соответствии с форматом файла обмена

Пример:
ИнформацияОПользователе = СоздатьУзел("ИнформацияОПользователе");
УстановитьАтрибут(ИнформацияОПользователе, "АутентификацияОС", Источник.АутентификацияОС);
УстановитьАтрибут(ИнформацияОПользователе, "АутентификацияСтандартная", Источник.АутентификацияСтандартная);
УстановитьАтрибут(ИнформацияОПользователе, "ПоказыватьВСпискеВыбора", Источник.ПоказыватьВСпискеВыбора);
УстановитьАтрибут(ИнформацияОПользователе, "ПользовательОС", Источник.ПользовательОС);
УстановитьАтрибут(ИнформацияОПользователе, "ПолноеИмя", Источник.ПолноеИмя);
ЧислоРолей = 1;
Для Каждого Роль Из Источник.Роли Цикл
УстановитьАтрибут(ИнформацияОПользователе, "Роль"+ЧислоРолей, Роль.Имя);
Сообщить(Роль.Имя);
ЧислоРолей = ЧислоРолей + 1;
КонецЦикла;
ДобавитьПодчиненный(Приемник, ИнформацияОПользователе
13 fisher
 
06.03.12
18:40
А в при загрузке вот такая хня:

Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(СокрЛП(Объект.Код));
Если Пользователь = Неопределено Тогда
Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
Пользователь.Имя      = СокрЛП(Объект.Код);
Пользователь.ПолноеИмя = СокрЛП(Объект.Код);
КонецЕсли;
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
ТипУзла = ФайлОбмена.ТипУзла;
Если ИмяУзла = "ИнформацияОПользователе" И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда
 Пользователь.АутентификацияОС          = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияОС");
 Пользователь.АутентификацияСтандартная = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияСтандартная");
 Пользователь.ПоказыватьВСпискеВыбора   = одАтрибут(ФайлОбмена, одТипБулево, "ПоказыватьВСпискеВыбора");
 Пользователь.ПользовательОС            = одАтрибут(ФайлОбмена, одТипСтрока, "ПользовательОС");
 Пользователь.ПолноеИмя                 = одАтрибут(ФайлОбмена, одТипСтрока, "ПолноеИмя");
 СтрокаРоль1 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль1");
 СтрокаРоль2 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль2");
 СтрокаРоль3 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль3");
ИначеЕсли (ИмяУзла = "ИнформацияОПользователе") И (ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда
 Прервать;
КонецЕсли;
КонецЦикла;            
Пользователь.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Полный;
Пользователь.Язык              = Метаданные.Языки.Русский;
Пользователь.Роли.Очистить();
Роль1 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1));
Роль2 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1));
Роль3 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1));
Если НЕ Роль1 = Неопределено Тогда
Пользователь.Роли.Добавить(Роль1);
КонецЕсли;
Если НЕ Роль2 = Неопределено Тогда
Пользователь.Роли.Добавить(Роль2);
КонецЕсли;
Если НЕ Роль3 = Неопределено Тогда
Пользователь.Роли.Добавить(Роль3);
КонецЕсли;
Пользователь.Записать();
14 ботаникус
 
06.03.12
18:43
(13)спасибо друг