diff --git "a/bin/\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.epf" "b/bin/\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.epf" new file mode 100644 index 0000000..d5bb85b Binary files /dev/null and "b/bin/\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.epf" differ diff --git "a/bin/\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.epf" "b/bin/\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.epf" index 16ecb43..e0b6843 100644 Binary files "a/bin/\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.epf" and "b/bin/\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.epf" differ 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/Form.form" "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/Form.form" new file mode 100644 index 0000000..403c6e8 --- /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/Form.form" @@ -0,0 +1,575 @@ + + + + Выгрузка + 3 + + ФайлВыгрузки + 21 + true + true + + true + + + ФайлВыгрузки + + + ru + Укажите файл, в который будет сохранен список пользователей + + ShowBottom + + ФайлВыгрузкиРасширеннаяПодсказка + 23 + true + true + + true + + Label + true + true + + Left + + + + ФайлВыгрузкиКонтекстноеМеню + 22 + true + true + + true + + true + + InputField + Enter + true + Left + true + + + StartChoice + ФайлВыгрузкиНачалоВыбора + + true + true + true + true + true + true + true + + + + ВыгрузитьПользователей + 1 + true + true + + true + + false + + ВыгрузитьПользователейExtendedTooltip + 16 + true + true + + true + + Label + true + true + + Left + + + UsualButton + Form.Command.ВыгрузитьПользователей + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Выгрузка</value> + + + ru + Выгрузка + + true + + ВыгрузкаExtendedTooltip + 15 + true + true + + true + + Label + true + true + + Left + + + UsualGroup + + Vertical + WeakSeparation + true + true + true + Auto + Auto + + + + Загрузка + 4 + + ПриоритетФайла + 9 + true + true + + true + + + ПриоритетФайла + + Right + + ПриоритетФайлаExtendedTooltip + 18 + true + true + + true + + Label + true + true + + Left + + + + ПриоритетФайлаКонтекстноеМеню + 10 + true + true + + true + + true + + CheckBoxField + Enter + true + Left + true + + + + ФормироватьПротокол + 11 + true + true + + true + + + ФормироватьПротокол + + Right + + ФормироватьПротоколExtendedTooltip + 19 + true + true + + true + + Label + true + true + + Left + + + + ФормироватьПротоколКонтекстноеМеню + 12 + true + true + + true + + true + + CheckBoxField + Enter + true + Left + true + + + + ФайлЗагрузки + 24 + true + true + + true + + + ФайлЗагрузки + + + ru + Укажите файл, откуда будет выполнена загрузка списка пользователей + + ShowBottom + + ФайлЗагрузкиРасширеннаяПодсказка + 26 + true + true + + true + + Label + true + true + + Left + + + + ФайлЗагрузкиКонтекстноеМеню + 25 + true + true + + true + + true + + InputField + Enter + true + Left + true + + + StartChoice + ФайлЗагрузкиНачалоВыбора + + true + true + true + true + true + true + true + + + + ЗагрузитьПользователей + 2 + true + true + + true + + false + + ЗагрузитьПользователейExtendedTooltip + 20 + true + true + + true + + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьПользователей + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Загрузка</value> + + + ru + Загрузка + + true + + ЗагрузкаExtendedTooltip + 17 + true + true + + true + + Label + true + true + + Left + + + UsualGroup + + Vertical + WeakSeparation + true + true + true + Auto + Auto + + + None + + ФормаКоманднаяПанель + -1 + + Закрыть + 13 + true + true + + true + + false + + ЗакрытьExtendedTooltip + 14 + true + true + + true + + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + + true + true + + true + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + Use + true + true + Vertical + true + true + true + UseIfNecessary + true + true + + Объект + 1 + + ExternalDataProcessorObject.ВыгрузкаЗагрузкаПользователей + + + true + + + true + +
true
+
+ + ФайлВыгрузки + + <key>ru</key> + <value>Выгрузить в файл</value> + + 2 + + String + + + + true + + + true + + + ФайлВыгрузки + + + + ФайлЗагрузки + + <key>ru</key> + <value>Загрузить из файла</value> + + 3 + + String + + + + true + + + true + + + ФайлЗагрузки + + + + ПриоритетФайла + + <key>ru</key> + <value>При совпадении имен пользователей обновлять свойства пользователей</value> + + 4 + + Boolean + + + true + + + true + + + ПриоритетФайла + + + + ФормироватьПротокол + + <key>ru</key> + <value>Формировать протокол загрузки</value> + + 5 + + Boolean + + + true + + + true + + + ФормироватьПротокол + + + + ВыгрузитьПользователей + + <key>ru</key> + <value>Выгрузить пользователей...</value> + + 1 + + ru + Выгрузить пользователей + + + true + + + + ВыгрузитьПользователей + + + Auto + + + ЗагрузитьПользователей + + <key>ru</key> + <value>Загрузить пользователей...</value> + + 2 + + ru + Загрузить пользователей + + + true + + + + ЗагрузитьПользователей + + + Auto + + + + + + +
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/Help/ru.html" "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/Help/ru.html" new file mode 100644 index 0000000..bac63c2 --- /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/Help/ru.html" @@ -0,0 +1,11 @@ + +

Выгрузка и загрузка пользователей информационной базы

+

Обработка предназначена для выгрузки и загрузки списка пользователей информационной базы.

+

Для выгрузки пользователей необходимо нажать кнопку Выгрузить пользователей.... После формирования необходимых данных система предложит указать файл, в который будет выполнена выгрузка. Предлагаемое по умолчанию имя файла: 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 - - - <key>ru</key> - <value>Группа1</value> - - - ГруппаКнопкиСкриптаРасширеннаяПодсказка - 143 - true - true - - true - - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - true true @@ -2438,9 +2369,18 @@ Left true + + StartChoice + ТекстСкриптаПредставлениеНачалоВыбора + + true true true true + true + + StdPicture.InputFieldClear + true true true @@ -2454,6 +2394,9 @@ 12 2 + + Style.FormBackColor + Style.NormalTextFont Input @@ -2486,7 +2429,8 @@ Page - Vertical + AlwaysHorizontal + None true 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 @@ КонецПроцедуры - - &НаСервере Функция ПолучитьСписокВариантовПодбора()