Имя: Пароль:
1C
1С v8
Конвертация данных. Позиционирование в файле
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 пользователей, обработчик по первому пробежался по файлу, и когда перешел на второго, то файлобмена спозиционирован уже в конце.
AdBlock убивает бесплатный контент. 1Сергей