![]() |
|
Конвертация данных. Позиционирование в файле | ☑ | ||
---|---|---|---|---|
0
Beduin
18.10.16
✎
14:10
|
В конвертации данных есть возможность с помощью переменной ФайлОбмена проходить по исходному файлу.
Вопрос. Если мы в одном объекте пробежались по этому файлу, то при переходе к другому объекту, мы будем в начале файла или в конце? И если будем в конце, то как попасть в начало. Проблема простая. К каждому объекту выгрузки в конвертации данных я добавляю собственную информацию через узлы. Задача вытащить эту информацию для каждого объекта. Может у меня вообще подход неверный для этой задачи? |
|||
1
b_ru
18.10.16
✎
14:12
|
Так в параметры эту информацию пихать, да и не извращаться с чтением xml.
|
|||
2
gorakh
18.10.16
✎
14:12
|
А загружать будем в 1с?
|
|||
3
gorakh
18.10.16
✎
14:14
|
Зачем?
|
|||
4
Beduin
18.10.16
✎
14:26
|
(1) В параметрах для каждого объекта?
|
|||
5
gorakh
18.10.16
✎
14:29
|
Задачу "в студию" ВСЮ.
|
|||
6
Beduin
18.10.16
✎
14:35
|
(5) Миграция пользователей между базами. Нужны правила, которые позволят переносить от одного и больше пользователей за раз в одну или несколько соседних баз.
|
|||
7
gorakh
18.10.16
✎
14:42
|
(6) В контексте конфигурации на базе БСП?
|
|||
8
Beduin
18.10.16
✎
14:44
|
(7) Типовые, да.
Переносится должен справочник пользователей и пользователи создаваемые платформой. |
|||
9
gorakh
18.10.16
✎
14:51
|
Справочник пользователеи перенесется, кроме реквизита ИдентификаторПользователяИБ который надо подставлять из ГУИДа на стороне Приемника после записи связанного элемента пользователь ИБ. Ну и роли уже должны присутствовать. ИМХО как-то так.
|
|||
10
gorakh
18.10.16
✎
14:52
|
Подставлять уже в событии при загрузке.
|
|||
11
Beduin
18.10.16
✎
14:55
|
(9) Я понимаю. Вопрос как правильно реализовать это. Если пихать в файл дополнительные узлы, то обходом через стандартную переменную ФайлОбмена, я уже после загрузки первых данных оказываюсь в конце выборки. И когда переходим, ко второму объекту, то все.
|
|||
12
gorakh
18.10.16
✎
15:13
|
(11) После загрузки
"Условия возникновения события Только для платформы V8. Событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта." Не подходит? |
|||
13
Beduin
18.10.16
✎
15:17
|
(12) Подходит. Проблема не в этом.
Вот пример из конвертации. Который они советуют использовать. Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(СокрЛП(Объект.Код)); Если Пользователь = Неопределено Тогда Пользователь = ПользователиИнформационнойБазы.СоздатьПользователя(); Пользователь.Имя = СокрЛП(Объект.Код); Пользователь.ПолноеИмя = СокрЛП(Объект.Код); КонецЕсли; Пока ФайлОбмена.Прочитать() Цикл ИмяУзла = ФайлОбмена.ЛокальноеИмя; ТипУзла = ФайлОбмена.ТипУзла; Если ИмяУзла = "ИнформацияОПользователе" И (ТипУзла = одТипУзлаXML_НачалоЭлемента) Тогда Пользователь.АутентификацияОС = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияОС"); Пользователь.АутентификацияСтандартная = одАтрибут(ФайлОбмена, одТипБулево, "АутентификацияСтандартная"); Пользователь.ПоказыватьВСпискеВыбора = одАтрибут(ФайлОбмена, одТипБулево, "ПоказыватьВСпискеВыбора"); Пользователь.ПользовательОС = одАтрибут(ФайлОбмена, одТипСтрока, "ПользовательОС"); Пользователь.ПолноеИмя = одАтрибут(ФайлОбмена, одТипСтрока, "ПолноеИмя"); СтрокаРоль1 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль1"); СтрокаРоль2 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль2"); СтрокаРоль3 = одАтрибут(ФайлОбмена, одТипСтрока, "Роль3"); ИначеЕсли (ИмяУзла = "ИнформацияОПользователе") И (ТипУзла = одТипУзлаXML_КонецЭлемента) Тогда Прервать; КонецЕсли; КонецЦикла; Пользователь.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Полный; Пользователь.Язык = Метаданные.Языки.Русский; Пользователь.Роли.Очистить(); Роль1 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1)); Роль2 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1)); Роль3 = Метаданные.Роли.Найти(СокрЛП(СтрокаРоль1)); Если НЕ Роль1 = Неопределено Тогда Пользователь.Роли.Добавить(Роль1); КонецЕсли; Если НЕ Роль2 = Неопределено Тогда Пользователь.Роли.Добавить(Роль2); КонецЕсли; Если НЕ Роль3 = Неопределено Тогда Пользователь.Роли.Добавить(Роль3); КонецЕсли; Пользователь.Записать(); Это хорошо работает если пользователь один. Когда один раз прошлись по файлу и нашли то что нужно. Но когда пользователей больше чем 1. То тут проблема. |
|||
14
Cyberhawk
18.10.16
✎
15:18
|
"подход неверный для этой задачи?" // Использовать недоументированные возможности обработки обмена в твоем случае неверно
|
|||
15
Beduin
18.10.16
✎
15:22
|
(14) в смысле? в (14) пример из самой конвертации
|
|||
16
Cyberhawk
18.10.16
✎
15:27
|
(15) Я про "К каждому объекту выгрузки в конвертации данных я добавляю собственную информацию через узлы" из (0)
|
|||
17
Beduin
18.10.16
✎
15:31
|
(16) Вообще они сами это рекомендуют в событии при выгрузке. И нигде не написано, что эти доп узлы только для одного объекта.
|
|||
18
Cyberhawk
18.10.16
✎
16:17
|
(17) А, ясно, про что ты. Ты про "Приемник - инициализированный xml-узел объекта приемника. Может быть дополнен призвольным xml-содержимым, например используемым при загрузке. ". Но нигде не описано, как этим пользоваться при загрузке...
|
|||
19
Beduin
18.10.16
✎
17:06
|
(18) Угу. И у меня задача создать правила обмена, через которые можно создавать пользователей. В одной базе создаются пользователи, один и больше. И через обмены разносятся по другим базам. Я примером из конвертации и воспользовался и в момент загрузки 2 пользователей, обработчик по первому пробежался по файлу, и когда перешел на второго, то файлобмена спозиционирован уже в конце.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |