Выгрузка и загрузка пользователей информационной базы
+
Обработка предназначена для выгрузки и загрузки списка пользователей информационной базы.
+
Для выгрузки пользователей необходимо нажать кнопку Выгрузить пользователей.... После формирования необходимых данных система предложит указать файл, в который будет выполнена выгрузка. Предлагаемое по умолчанию имя файла: IBUsers.xml.
+
Для загрузки пользователей следует нажать кнопку Загрузить пользователей.... Будет предложено выбрать файл, содержащий список пользователей (предварительно выгруженных из информационной базы), после чего произойдет загрузка списка пользователей. Предлагаемое по умолчанию имя файла: IBUsers.xml.
+
ВАЖНО! Сопоставление пользователей выполняется по именам.
+
Существует возможность обновить информацию о пользователе в информационной базе данными из файла, если имя пользователя в файле и в информационной базе совпадают. Для этого следует установить флажок При совпадении имен пользователей обновлять свойства пользователей. В противном случае при совпадении имен данные пользователя в информационной базе останутся неизменными.
+
Если необходимо получить протокол загрузки, следует указать флажок Формировать протокол загрузки перед началом загрузки. В этом случае будет сформирован текстовый файл, содержащий информацию о загрузке каждого пользователя из файла:
+
Пользователь: ИмяПользователя. Не изменен. Пользователь из файла обнаружен в информационной базе. Его данные оставлены без изменения.
+
Пользователь: ИмяПользователя. Обновлен данными из файла. Пользователь из файла обнаружен в информационной базе. Его данные обновлены данными из файла.
+
Пользователь: ИмяПользователя. Создан новый. Создан новый пользователь информационной базы с указанным именем.
\ No newline at end of file
diff --git "a/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl" "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
new file mode 100644
index 0000000..e0f7db9
--- /dev/null
+++ "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
@@ -0,0 +1,139 @@
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ ФайлВыгрузки = "IBUsers.xml";
+ ФайлЗагрузки = "IBUsers.xml";
+ ПриоритетФайла = Ложь;
+ ФормироватьПротокол = Истина;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриОткрытии(Отказ)
+
+#Если ВебКлиент Тогда
+ // В веб-клиенте оставим только имена файлов
+ ФайлВыгрузки = "IBUsers.xml";
+ ФайлЗагрузки = "IBUsers.xml";
+ // и уберем поля для предварительного выбора файлов, т.к. будут использоваться интерактивные методы
+ Элементы.ФайлВыгрузки.Видимость = Ложь;
+ Элементы.ФайлЗагрузки.Видимость = Ложь;
+#КонецЕсли
+
+КонецПроцедуры
+
+#Область ВыгрузкаПользователей
+&НаСервере
+Функция ВыгрузитьПользователейНаСервере()
+
+ Обработка = РеквизитФормыВЗначение("Объект");
+ Возврат Обработка.ВыгрузитьПользователей();
+
+КонецФункции
+
+&НаКлиенте
+Процедура ВыгрузитьПользователей(Команда)
+
+ Состояние(НСтр("ru = 'Выполняется выгрузка списка пользователей...'", "ru"));
+ Результат = ВыгрузитьПользователейНаСервере();
+ Если НЕ Результат.Статус Тогда
+ ПоказатьПредупреждение(, НСтр("ru = 'При выполнении выгрузки пользователей произошла ошибка.'", "ru"));
+ Возврат;
+ КонецЕсли;
+
+ Если ПодключитьРасширениеРаботыСФайлами() Тогда
+ Получаемые = Новый Массив;
+ ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла;
+ ПолучаемыйФайл.Имя = ФайлВыгрузки;
+ ПолучаемыйФайл.Хранение = Результат.Адрес;
+ Получаемые.Добавить(ПолучаемыйФайл);
+ Полученные = Новый Массив;
+ Если ПолучитьФайлы(Получаемые, Полученные, "", Ложь) Тогда
+ ПоказатьПредупреждение(, НСтр("ru='Выгрузка завершена успешно. Выгружено пользователей: " + Результат.Количество + "'", "ru"));
+ КонецЕсли;
+ Иначе
+ ПолучитьФайл(Результат.Адрес, ФайлВыгрузки, Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ФайлВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
+ ДиалогВыбора.Заголовок = НСтр("ru = 'Укажите файл для сохранения списка пользователей'", "ru");
+ ДиалогВыбора.ПроверятьСуществованиеФайла = Ложь;
+ ДиалогВыбора.ПолноеИмяФайла = ФайлВыгрузки;
+ ДиалогВыбора.Фильтр = НСтр("ru = 'XML-файлы|*.xml|Все файлы|" + ПолучитьМаскуВсеФайлыКлиента() + "'", "ru");
+ Результат = ДиалогВыбора.Выбрать();
+ Если Результат Тогда
+ ФайлВыгрузки = ДиалогВыбора.ПолноеИмяФайла;
+ КонецЕсли;
+
+КонецПроцедуры
+#КонецОбласти
+
+#Область ЗагрузкаПользователей
+&НаСервере
+Функция ЗагрузитьПользователейНаСервере(Адрес)
+
+ Обработка = РеквизитФормыВЗначение("Объект");
+ Возврат Обработка.ЗагрузитьПользователей(Адрес, ПриоритетФайла, ФормироватьПротокол);
+
+КонецФункции
+
+&НаКлиенте
+Процедура ЗагрузитьПользователей(Команда)
+
+ ИмяПротокола = "IBUsers_log.txt";
+ Адрес = "";
+ ОбратныйВызов = Новый ОписаниеОповещения("ЗагрузитьПользователейЗавершение", ЭтотОбъект, ИмяПротокола);
+#Если ВебКлиент Тогда
+ НачатьПомещениеФайла(ОбратныйВызов, Адрес, "", Истина);
+#Иначе
+ НачатьПомещениеФайла(ОбратныйВызов, Адрес, ФайлЗагрузки, Ложь);
+#КонецЕсли
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ЗагрузитьПользователейЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ИмяПротокола) Экспорт
+
+ Если Результат Тогда
+ Состояние(НСтр("ru = 'Выполняется загрузка пользователей информационной базы...'", "ru"));
+ Результат = ЗагрузитьПользователейНаСервере(Адрес);
+ Если Результат.Статус = Ложь Тогда
+ ПоказатьПредупреждение(, НСтр("ru = 'При выполнении загрузки пользователей произошла ошибка.'", "ru"));
+ Возврат;
+ КонецЕсли;
+
+ Если ФормироватьПротокол Тогда
+ ПолучитьФайл(Результат.ФайлПротокола, ИмяПротокола, Истина);
+ Иначе
+ Текст = НСтр("ru = 'Загрузка пользователей завершена. Всего прочитано: %1. Загружено: %2. Совпадений: %3.'", "ru");
+ Текст = СтрЗаменить(Текст, "%1", Результат.ИзФайла);
+ Текст = СтрЗаменить(Текст, "%2", Результат.Загружено);
+ Текст = СтрЗаменить(Текст, "%3", Результат.Совпадений);
+ ПоказатьПредупреждение(, Текст);
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ФайлЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
+ ДиалогВыбора.Заголовок = НСтр("ru = 'Укажите файл для загрузки списка пользователей'", "ru");
+ ДиалогВыбора.ПолноеИмяФайла = ФайлЗагрузки;
+ ДиалогВыбора.Фильтр = НСтр("ru = 'XML-файлы|*.xml|Все файлы|" + ПолучитьМаскуВсеФайлыКлиента() + "'", "ru");
+ Результат = ДиалогВыбора.Выбрать();
+ Если Результат Тогда
+ ФайлЗагрузки = ДиалогВыбора.ПолноеИмяФайла;
+ КонецЕсли;
+
+КонецПроцедуры
+#КонецОбласти
diff --git "a/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/ObjectModule.bsl" "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/ObjectModule.bsl"
new file mode 100644
index 0000000..4826d04
--- /dev/null
+++ "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/ObjectModule.bsl"
@@ -0,0 +1,262 @@
+
+// Функция выполняет выгрузку списка пользователей информационной базы в файл.
+// Для выгрузки используется схема, расположенная в макете обработки XMLСхема.
+//
+// Возвращаемое значение:
+// Структура - Структура. Результат выгрузки.
+// Статус - Булево. Собственно результат выгрузки: Истина - удачное завершение.
+// Количество - Число. Количество выгруженных пользователей.
+// Адрес - Строка. Адрес временного хранилища, по которому расположен файл с данными.
+Функция ВыгрузитьПользователей() Экспорт
+
+ РежимыЗапуска = Новый Соответствие;
+ РежимыЗапуска.Вставить(РежимЗапускаКлиентскогоПриложения.Авто, "Auto");
+ РежимыЗапуска.Вставить(РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение, "OrdinaryApplication");
+ РежимыЗапуска.Вставить(РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение, "ManagedApplication");
+
+ Результат = Новый Структура("Статус, Количество, Адрес", Ложь, 0, "");
+ ИмяФайла = ПолучитьИмяВременногоФайла();
+ Фабрика = СоздатьФабрику();
+ Сериализатор = Новый СериализаторXDTO(Фабрика);
+
+ ТипРоль = Фабрика.Тип(ИмяПространстваИмен(), "Role");
+ ТипПользователь = Фабрика.Тип(ИмяПространстваИмен(), "User");
+
+ Запись = Новый ЗаписьXML;
+ Запись.ОткрытьФайл(ИмяФайла);
+ Запись.ЗаписатьОбъявлениеXML();
+ Запись.ЗаписатьНачалоЭлемента("users", ИмяПространстваИмен());
+ Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
+ Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+ Запись.ЗаписатьСоответствиеПространстваИмен("usr", ИмяПространстваИмен());
+
+ СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
+ Для каждого Пользователь Из СписокПользователей Цикл
+ User = Фабрика.Создать(ТипПользователь);
+ User.OSAuthentication = Пользователь.АутентификацияОС;
+ User.StandardAuthentication = Пользователь.АутентификацияСтандартная;
+ User.OpenIDAuthentication = Пользователь.АутентификацияOpenID;
+ User.CannotChangePassword = Пользователь.ЗапрещеноИзменятьПароль;
+ User.Name = Пользователь.Имя;
+ Если Пользователь.ОсновнойИнтерфейс <> Неопределено Тогда
+ User.DefaultInterface = Пользователь.ОсновнойИнтерфейс.Имя;
+ КонецЕсли;
+ User.ShowInList = Пользователь.ПоказыватьВСпискеВыбора;
+ User.FullName = Пользователь.ПолноеИмя;
+ User.OSUser = Пользователь.ПользовательОС;
+ User.RunMode = РежимыЗапуска[Пользователь.РежимЗапуска];
+ User.StoredPasswordValue = Пользователь.СохраняемоеЗначениеПароля;
+ User.UUID = Пользователь.УникальныйИдентификатор;
+ Если Пользователь.Язык <> Неопределено Тогда
+ User.Language = Пользователь.Язык.Имя;
+ КонецЕсли;
+ Для каждого Роль Из Пользователь.Роли Цикл
+ Role = Фабрика.Создать(ТипРоль);
+ Role.Name = Роль.Имя;
+ User.Roles.Добавить(Role);
+ КонецЦикла;
+ Фабрика.ЗаписатьXML(Запись, User);
+ Результат.Количество = Результат.Количество + 1;
+ КонецЦикла;
+ Запись.ЗаписатьКонецЭлемента();
+ Запись.Закрыть();
+ Данные = Новый ДвоичныеДанные(ИмяФайла);
+ Результат.Адрес = ПоместитьВоВременноеХранилище(Данные);
+ Результат.Статус = Истина;
+ УдалитьФайлы(ИмяФайла);
+
+ Возврат Результат;
+
+КонецФункции
+
+// Функция выполняет загрузку списка пользователей информационной базы из файла.
+// Для загрузки используется схема, расположенная в макете обработки XMLСхема.
+//
+// Параметры
+// Адрес - Строка. Адрес во временном хранилище, по которому расположен
+// загружаемый файл.
+// ПриоритетФайла - Булево. Признак того, что нужно обновлять (Истина) данные пользователя
+// информационной базы данными из файла в случае совпадения имен.
+// ФормироватьПротокол - Булево. Признак необходимости (Истина) формирования протокола загрузки.
+//
+// Возвращаемое значение:
+// Структура - Структура. Результат загрузки.
+// Статус - Булево. Собственно результат выгрузки: Истина - удачное завершение.
+// ИзФайла - Число. Количество пользователей в файле с данными.
+// Загружено - Число. Количество загруженных пользователей (в том числе совпадения).
+// Совпадений - Число. Количество совпадений между информаицонной базой и файлом.
+// ФайлПротокола - Строка. Адрес временного хранилища, по которому расположен файл с
+// протоколом (формируется только в случае, если ФормироватьПротокол = Истина).
+Функция ЗагрузитьПользователей(Адрес, ПриоритетФайла, ФормироватьПротокол) Экспорт
+
+ Результат = Новый Структура("Статус, ИзФайла, Загружено, Совпадений, ФайлПротокола", Ложь, 0, 0, 0, "");
+
+ РежимыЗапуска = Новый Соответствие;
+ РежимыЗапуска.Вставить("Auto", РежимЗапускаКлиентскогоПриложения.Авто);
+ РежимыЗапуска.Вставить("OrdinaryApplication", РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение);
+ РежимыЗапуска.Вставить("ManagedApplication", РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение);
+
+ ИмяФайла = ПолучитьИмяВременногоФайла();
+ Данные = ПолучитьИзВременногоХранилища(Адрес);
+ Данные.Записать(ИмяФайла);
+
+ Фабрика = СоздатьФабрику();
+ Сериализатор = Новый СериализаторXDTO(Фабрика);
+ ТипРоль = Фабрика.Тип(ИмяПространстваИмен(), "Role");
+ ТипПользователь = Фабрика.Тип(ИмяПространстваИмен(), "User");
+
+ Чтение = Новый ЧтениеXML;
+ Чтение.ОткрытьФайл(ИмяФайла);
+ Чтение.Прочитать();
+ Чтение.ПерейтиКСодержимому();
+
+ Если ФормироватьПротокол Тогда
+ ИмяПротокола = ПолучитьИмяВременногоФайла("log");
+ Протокол = Новый ЗаписьТекста(ИмяПротокола, КодировкаТекста.UTF8);
+ ЗаписатьЭлементПротокола(Протокол, NStr("ru = 'Приоритет данных из файла:'", "ru") + " " + Строка(ПриоритетФайла));
+ КонецЕсли;
+
+ Если НЕ(Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.ЛокальноеИмя = "users") Тогда
+ ЗаписатьЭлементПротокола(Протокол, NStr("ru = 'ОШИБКА: Неверный формат файла. Отсутствует узел .'", "ru"));
+ Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола);
+ Возврат Результат;
+ КонецЕсли;
+ Чтение.Прочитать();
+ Чтение.ПерейтиКСодержимому();
+ Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.ЛокальноеИмя = "User" Цикл
+ Попытка
+ ПрочитанныйОбъект = Фабрика.ПрочитатьXML(Чтение, ТипПользователь);
+ Результат.ИзФайла = Результат.ИзФайла + 1;
+ ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПрочитанныйОбъект.Name);
+ Если ПользовательИБ <> Неопределено Тогда
+ Результат.Совпадений = Результат.Совпадений + 1;
+ Если НЕ ПриоритетФайла Тогда
+ Если ФормироватьПротокол Тогда
+ ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Не изменен.'", "ru"), "%1", ПрочитанныйОбъект.Name));
+ КонецЕсли;
+ Продолжить;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ПользовательИБ = Неопределено Тогда
+ Если ФормироватьПротокол Тогда
+ ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Создан новый.'", "ru"), "%1", ПрочитанныйОбъект.Name));
+ КонецЕсли;
+ ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
+ Иначе
+ Если ФормироватьПротокол Тогда
+ ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Обновлен данными из файла.'", "ru"), "%1", ПрочитанныйОбъект.Name));
+ КонецЕсли;
+ КонецЕсли;
+
+ ПользовательИБ.Имя = ПрочитанныйОбъект.Name;
+ ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName;
+ ПользовательИБ.АутентификацияОС = ПрочитанныйОбъект.OSAuthentication;
+ ПользовательИБ.АутентификацияOpenID = ПрочитанныйОбъект.OpenIDAuthentication;
+ ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication;
+ ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword;
+ ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList;
+ ПользовательИБ.ПользовательОС = ПрочитанныйОбъект.OSUser;
+ ПользовательИБ.СохраняемоеЗначениеПароля = ПрочитанныйОбъект.StoredPasswordValue;
+ ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode];
+ Если ПрочитанныйОбъект.Установлено("DefaultInterface") Тогда
+ ИзФайла = ПрочитанныйОбъект.DefaultInterface;
+ Если Метаданные.Интерфейсы.Найти(ИзФайла) = Неопределено Тогда
+ Если ФормироватьПротокол Тогда
+ ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Интерфейс '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
+ КонецЕсли;
+ ВызватьИсключение "Ошибка";
+ КонецЕсли;
+ ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[ИзФайла];
+ КонецЕсли;
+ Если ПрочитанныйОбъект.Установлено("Language") Тогда
+ ИзФайла = ПрочитанныйОбъект.Language;
+ Если Метаданные.Языки.Найти(ИзФайла) = Неопределено Тогда
+ Если ФормироватьПротокол Тогда
+ ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Язык '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
+ КонецЕсли;
+ ВызватьИсключение "Ошибка";
+ КонецЕсли;
+ ПользовательИБ.Язык = Метаданные.Языки[ИзФайла];
+ КонецЕсли;
+ Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл
+ ИзФайла = РольXDTO.Name;
+ Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда
+ Если ФормироватьПротокол Тогда
+ ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Роль '%1' не обнаружена в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла));
+ КонецЕсли;
+ ВызватьИсключение "Ошибка";
+ КонецЕсли;
+ ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]);
+ КонецЦикла;
+ ПользовательИБ.Записать();
+ Результат.Загружено = Результат.Загружено + 1;
+ Исключение
+ Если ФормироватьПротокол Тогда
+ Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола);
+ КонецЕсли;
+ Чтение.Закрыть();
+ УдалитьФайлы(ИмяФайла);
+ Возврат Результат;
+ КонецПопытки;
+ КонецЦикла;
+
+ Если ФормироватьПротокол Тогда
+ Текст = НСтр("ru = 'Загрузка пользователей завершена. Всего прочитано: %1. Загружено: %2. Совпадений: %3.'", "ru");
+ Текст = СтрЗаменить(Текст, "%1", Результат.ИзФайла);
+ Текст = СтрЗаменить(Текст, "%2", Результат.Загружено);
+ Текст = СтрЗаменить(Текст, "%3", Результат.Совпадений);
+ ЗаписатьЭлементПротокола(Протокол, Текст);
+ Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола);
+ КонецЕсли;
+
+ Чтение.Закрыть();
+ УдалитьФайлы(ИмяФайла);
+ Результат.Статус = Истина;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция ИмяПространстваИмен()
+
+ Возврат "http://v8.1c.ru/8.2/infobase/users-exchange";
+
+КонецФункции
+
+Функция СоздатьФабрику()
+
+ Макет = ЭтотОбъект.ПолучитьМакет("XMLСхема");
+
+ Чтение = Новый ЧтениеXML;
+ Чтение.УстановитьСтроку(Макет.ПолучитьТекст());
+
+ Построитель = Новый ПостроительDOM;
+ Документ = Построитель.Прочитать(Чтение);
+
+ ПостроительСхем = Новый ПостроительСхемXML;
+ Схема = ПостроительСхем.СоздатьСхемуXML(Документ);
+
+ НаборСхем = Новый НаборСхемXML;
+ НаборСхем.Добавить(Схема);
+
+ Возврат Новый ФабрикаXDTO(НаборСхем);
+
+КонецФункции
+
+Процедура ЗаписатьЭлементПротокола(ФайлПротокола, ТекстДляПротокола)
+
+ ФайлПротокола.ЗаписатьСтроку(ТекстДляПротокола);
+
+КонецПроцедуры
+
+Функция ЗакрытьФайлПротокола(ФайлПротокола, ИмяФайла)
+
+ ФайлПротокола.Закрыть();
+ Данные = Новый ДвоичныеДанные(ИмяФайла);
+ Результат = ПоместитьВоВременноеХранилище(Данные);
+ УдалитьФайлы(ИмяФайла);
+
+ Возврат Результат;
+
+КонецФункции
diff --git "a/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Templates/XML\320\241\321\205\320\265\320\274\320\260/Template.txt" "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Templates/XML\320\241\321\205\320\265\320\274\320\260/Template.txt"
new file mode 100644
index 0000000..1acb918
--- /dev/null
+++ "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/Templates/XML\320\241\321\205\320\265\320\274\320\260/Template.txt"
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.mdo" "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.mdo"
new file mode 100644
index 0000000..9d8e53e
--- /dev/null
+++ "b/src/ExternalDataProcessors/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271/\320\222\321\213\320\263\321\200\321\203\320\267\320\272\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271.mdo"
@@ -0,0 +1,35 @@
+
+
+
+
+
+ ВыгрузкаЗагрузкаПользователей
+
+ ru
+ Выгрузка и загрузка пользователей
+
+
+ ExternalDataProcessor.ВыгрузкаЗагрузкаПользователей.Form.Форма
+
+ Форма
+
+ ru
+ Форма
+
+
+
+ ru
+
+
+ PersonalComputer
+ MobileDevice
+
+
+ XMLСхема
+
+ ru
+ XMLСхема
+
+ TextDocument
+
+
diff --git "a/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form" "b/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form"
index 83a19e6..f6bb619 100644
--- "a/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form"
+++ "b/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form"
@@ -2258,75 +2258,6 @@
-
- ГруппаКнопкиСкрипта
- 142
-
- КомандаКопироватьВБуфер
- 90
- true
- true
-
- true
-
-
- КомандаКопироватьВБуферРасширеннаяПодсказка
- 91
- true
- true
-
- true
-
- Label
- true
- true
-
- Left
-
-
- UsualButton
- Form.Command.КомандаКопироватьВБуфер
- Auto
- true
- true
- UserCmds
- Auto
- None
-
- true
- true
-
- true
-
-
- ru
- Группа1
-
-
- ГруппаКнопкиСкриптаРасширеннаяПодсказка
- 143
- true
- true
-
- true
-
- Label
- true
- true
-
- Left
-
-
- UsualGroup
-
- Vertical
- Auto
- true
- true
- Auto
- Auto
-
- truetrue
@@ -2438,9 +2369,18 @@
Lefttrue
+
+ StartChoice
+ ТекстСкриптаПредставлениеНачалоВыбора
+
+ truetruetruetrue
+ true
+
+
+ truetruetrue
@@ -2454,6 +2394,9 @@
122
+
+ Style.FormBackColor
+
Style.NormalTextFont
Input
@@ -2486,7 +2429,8 @@
Page
- Vertical
+ AlwaysHorizontal
+ Nonetrue
diff --git "a/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl" "b/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
index b7446fc..c6826bd 100644
--- "a/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
+++ "b/src/ExternalDataProcessors/\320\237\320\276\320\274\320\276\321\211\320\275\320\270\320\272\320\241\320\276\320\267\320\264\320\260\320\275\320\270\321\217\320\241\320\272\321\200\320\270\320\277\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
@@ -89,6 +89,8 @@
Иначе
УстановитьПутьНаСервере();
КонецЕсли;
+
+ ОбработатьУстановкуАргумента();
КонецПроцедуры
@@ -323,6 +325,13 @@
#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаПараметров
+&НаКлиенте
+Процедура ТекстСкриптаПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ УстановитьСтрокуСкрипта();
+
+КонецПроцедуры
&НаКлиенте
Процедура ТаблицаПараметровПередУдалением(Элемент, Отказ)
@@ -445,7 +454,7 @@
Если Результат <> Неопределено Тогда
ТекущиеДанные.Аргумент = Результат;
- УстановитьСтрокуСкрипта();
+ ОбработатьУстановкуАргумента();
КонецЕсли;
#КонецЕсли
@@ -551,14 +560,7 @@
&НаКлиенте
Процедура ТаблицаПараметровАргументПриИзменении(Элемент)
- ТекущаяСтрокаПараметров = Элементы.ТаблицаПараметров.ТекущиеДанные;
- Если Не ТекущаяСтрокаПараметров.Использование Тогда
- ТекущаяСтрокаПараметров.Использование = Истина;
- ТекущаяСтрокаКоманд = Элементы.ДеревоКоманд.ТекущиеДанные;
- УстановитьОтметкуКоменды(ТекущаяСтрокаКоманд, Истина);
- КонецЕсли;
-
- УстановитьСтрокуСкрипта();
+ ОбработатьУстановкуАргумента();
КонецПроцедуры
@@ -646,6 +648,20 @@
#Область СлужебныеПроцедурыИФункции
+&НаКлиенте
+Процедура ОбработатьУстановкуАргумента()
+
+ ТекущаяСтрокаПараметров = Элементы.ТаблицаПараметров.ТекущиеДанные;
+ Если Не ТекущаяСтрокаПараметров.Использование Тогда
+ ТекущаяСтрокаПараметров.Использование = Истина;
+ ТекущаяСтрокаКоманд = Элементы.ДеревоКоманд.ТекущиеДанные;
+ УстановитьОтметкуКоменды(ТекущаяСтрокаКоманд, Истина);
+ КонецЕсли;
+
+ УстановитьСтрокуСкрипта();
+
+КонецПроцедуры
+
&НаКлиенте
Асинх Процедура СкопироватьПараметрыПриКопированииКоманды(КлючКопируемойСтроки, НовыйКлюч)
@@ -739,8 +755,6 @@
КонецПроцедуры
-
-
&НаСервере
Функция ПолучитьСписокВариантовПодбора()