From 810551dde20f49bb6c05a22888a826294273e5e3 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 25 Sep 2018 16:10:50 +0300 Subject: [PATCH] =?UTF-8?q?+=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- РедакторТЗ_XML.xml | 30 ++ РедакторТЗ_XML/Forms/Форма.xml | 22 ++ РедакторТЗ_XML/Forms/Форма/Ext/Form.xml | 348 ++++++++++++++++++ .../Forms/Форма/Ext/Form/Module.bsl | 197 ++++++++++ 4 files changed, 597 insertions(+) create mode 100644 РедакторТЗ_XML.xml create mode 100644 РедакторТЗ_XML/Forms/Форма.xml create mode 100644 РедакторТЗ_XML/Forms/Форма/Ext/Form.xml create mode 100644 РедакторТЗ_XML/Forms/Форма/Ext/Form/Module.bsl diff --git a/РедакторТЗ_XML.xml b/РедакторТЗ_XML.xml new file mode 100644 index 0000000..6aa945c --- /dev/null +++ b/РедакторТЗ_XML.xml @@ -0,0 +1,30 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 82014eb2-1440-42f4-a207-bdbf936bddb8 + + + 8ae23967-cf9d-4b0d-82be-100f5a6f8da7 + 667fcb12-6aec-412b-b387-b98db18a0394 + + + + РедакторТЗ_XML + + + ru + Редактор таблиц значений + + + + ExternalDataProcessor.РедакторТЗ_XML.Form.Форма + + + +
Форма
+
+
+
\ No newline at end of file diff --git a/РедакторТЗ_XML/Forms/Форма.xml b/РедакторТЗ_XML/Forms/Форма.xml new file mode 100644 index 0000000..b967b50 --- /dev/null +++ b/РедакторТЗ_XML/Forms/Форма.xml @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/РедакторТЗ_XML/Forms/Форма/Ext/Form.xml b/РедакторТЗ_XML/Forms/Форма/Ext/Form.xml new file mode 100644 index 0000000..6c396d0 --- /dev/null +++ b/РедакторТЗ_XML/Forms/Форма/Ext/Form.xml @@ -0,0 +1,348 @@ + +
+ Use + UseList + + + + + + + ПриСозданииНаСервере + + + + Формат + true + false + + + + 0 + + + + ru + XML + + + xml + + + + + 0 + + + + ru + JSON + + + json + + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создание</v8:content> + </v8:item> + + + + ru + Создание + + + + + + List + Top + true + true + true + КолонкиНовойТЗ + + + + + + + + + + + + + КолонкиНовойТЗ + SearchStringRepresentation + + + + + + + КолонкиНовойТЗ + ViewStatusRepresentation + + + + + + + КолонкиНовойТЗ + SearchControl + + + + + + + КолонкиНовойТЗ.Имя + EnterOnInput + + + + + КолонкиНовойТЗ.ТипКолонки + EnterOnInput + + + + + КолонкиНовойТЗ.Заголовок + EnterOnInput + + + + + КолонкиНовойТЗ.Ширина + EnterOnInput + + + + +
+
+
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Редактирование</v8:content> + </v8:item> + + + + ru + Редактирование + + + + +
+
+
+ + + + cfg:ExternalDataProcessorObject.РедакторТЗ_XML + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Колонки новой ТЗ</v8:content> + </v8:item> + + + v8:ValueTable + + + КолонкиНовойТЗ + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя</v8:content> + </v8:item> + + + xs:string + + 90 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Заголовок</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип</v8:content> + </v8:item> + + + v8:TypeDescription + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ширина</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Формат</v8:content> + </v8:item> + + + xs:string + + 10 + Variable + + + + Формат + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создать ТЗ</v8:content> + </v8:item> + + + + ru + Создать ТЗ + + + СоздатьТЗ + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить</v8:content> + </v8:item> + + + + ru + Загрузить + + + Загрузить + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгрузить</v8:content> + </v8:item> + + + + ru + Выгрузить + + + Выгрузить + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгрузить колонки</v8:content> + </v8:item> + + + + ru + Выгрузить колонки + + + ВыгрузитьКолонки + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить колонки</v8:content> + </v8:item> + + + + ru + Загрузить колонки + + + ЗагрузитьКолонки + + +
\ No newline at end of file diff --git a/РедакторТЗ_XML/Forms/Форма/Ext/Form/Module.bsl b/РедакторТЗ_XML/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 0000000..5a00c11 --- /dev/null +++ b/РедакторТЗ_XML/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,197 @@ +#Область Служебные + +&НаСервере +Процедура ВывестиТЗНаФорму(Знач ТаблицаОбъект,СтрОбТб) Экспорт + ЭлементФормы = Элементы.Найти(СтрОбТб); + + МассивДобавляемыхРеквизитов = Новый Массив; + МассивУдаляемыхРеквизитов = Новый Массив; + Если ЭлементФормы = Неопределено Тогда + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(СтрОбТб, Новый ОписаниеТипов("ТаблицаЗначений"))); + Иначе + ЭтаФорма.Элементы.Удалить(ЭлементФормы); + МассивУдаляемыхРеквизитов.Добавить(СтрОбТб); + ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов); + + МассивУдаляемыхРеквизитов = Новый Массив; + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(СтрОбТб, Новый ОписаниеТипов("ТаблицаЗначений"))); + КонецЕсли; + + Для Каждого Колонка Из ТаблицаОбъект.Колонки Цикл + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, СтрОбТб, Колонка.Заголовок)); + КонецЦикла; + + ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивУдаляемыхРеквизитов); + + // Преобразование объекта прикладного типа Таблица_Значений + // в реквизит управляемой формы (данные формы) + ЗначениеВРеквизитФормы(ТаблицаОбъект, СтрОбТб); + + // Создание элемента формы типа ТаблицаФормы для отображения дерева + ЭлементДерево = Элементы.Добавить(СтрОбТб, Тип("ТаблицаФормы"), Элементы.Редактирование); + ЭлементДерево.ПутьКДанным = СтрОбТб; + ЭлементДерево.Отображение = ОтображениеТаблицы.Список; + //ЭлементДерево.РежимВыделенияСтроки = РежимВыделенияСтрокиТаблицы.Строка; + + КнопкаВыгрузить = Элементы.Добавить("КнопкаВыгрузить", Тип("КнопкаФормы"), ЭлементДерево.КоманднаяПанель); + КнопкаЗагрузить = Элементы.Добавить("КнопкаЗагрузить", Тип("КнопкаФормы"), ЭлементДерево.КоманднаяПанель); + КнопкаВыгрузить.Заголовок = "Выгрузить"; + КнопкаЗагрузить.Заголовок = "Загрузить"; + КнопкаВыгрузить.ИмяКоманды = "Выгрузить"; + КнопкаЗагрузить.ИмяКоманды = "Загрузить"; + + Для Каждого Колонка Из ТаблицаОбъект.Колонки Цикл + НовыйЭлемент = Элементы.Добавить(СтрОбТб+"_" +Колонка.Имя, Тип("ПолеФормы"), ЭлементДерево); + НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; + НовыйЭлемент.ПутьКДанным = СтрОбТб+"."+Колонка.Имя; + + Если Не ЗначениеЗаполнено(Колонка.Ширина) Тогда + НовыйЭлемент.Ширина = 10; + Иначе + НовыйЭлемент.Ширина = Колонка.Ширина; + КонецЕсли; + КонецЦикла; + + КонецПроцедуры + +#КонецОбласти + +&НаКлиенте +Процедура СоздатьТЗ(Команда) + СоздатьТЗНаСервере(); +КонецПроцедуры + +&НаКлиенте +Процедура Загрузить(Команда) + ДопПараметры = Новый Структура("ИмяРеквизитаТЗ", "РеквизитТЗ"); + НачатьПомещениеФайла(Новый ОписаниеОповещения("Загрузить_ПослеПомещенияфайла", ЭтаФорма, ДопПараметры), ,,Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Выгрузить(Команда) + АдресДанных = ПолучитьДанные_ДляВыгрузки("РеквизитТЗ"); + Если НЕ ЭтоАдресВременногоХранилища(АдресДанных) Тогда Возврат КонецЕсли; + + ПолучитьФайл(АдресДанных, "ТаблицаЗначений."+Формат, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьКолонки(Команда) + ДопПараметры = Новый Структура("ИмяРеквизитаТЗ", "КолонкиНовойТЗ"); + НачатьПомещениеФайла(Новый ОписаниеОповещения("Загрузить_ПослеПомещенияфайла", ЭтаФорма, ДопПараметры), ,,Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьКолонки(Команда) + АдресДанных = ПолучитьДанные_ДляВыгрузки("КолонкиНовойТЗ"); + Если НЕ ЭтоАдресВременногоХранилища(АдресДанных) Тогда Возврат КонецЕсли; + + ПолучитьФайл(АдресДанных, "ТаблицаЗначений."+Формат, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Загрузить_ПослеПомещенияфайла(Результат, Адрес, ВыбранноеИмяФайла, ДопПараметры) Экспорт + Если Ложь = Результат Тогда + Возврат; + КонецЕсли; + + Загрузить_НаСервере(Адрес, ВыбранноеИмяФайла, ДопПараметры.ИмяРеквизитаТЗ); + + Если НЕ "КолонкиНовойТЗ" = ДопПараметры.ИмяРеквизитаТЗ Тогда + Элементы.ГрСтраницы.ТекущаяСтраница = Элементы.Редактирование; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура СоздатьТЗНаСервере() + ТЗ = Новый ТаблицаЗначений; + + Для Каждого ТекКолонка Из КолонкиНовойТЗ Цикл + ТЗ.Колонки.Добавить(ТекКолонка.Имя, ТекКолонка.ТипКолонки, ТекКолонка.Заголовок, ТекКолонка.Ширина); + КонецЦикла; + + ВывестиТЗНаФорму(ТЗ, "РеквизитТЗ"); + Элементы.ГрСтраницы.ТекущаяСтраница = Элементы.Редактирование; +КонецПроцедуры + +&НаСервере +Процедура Загрузить_НаСервере(Адрес, ИмяФайла, ИмяРеквизитаТЗ) + Файл = Новый Файл(ИмяФайла); + ФорматФайла = НРег(Файл.Расширение); + Если СтрНачинаетсяС(ФорматФайла, ".") Тогда + ФорматФайла = Прав(ФорматФайла, СтрДлина(ФорматФайла) - 1); + КонецЕсли; + + ПоддерживаемыеФорматы = СтрРазделить("xml,json", ",", Ложь); + Если Не Неопределено = ПоддерживаемыеФорматы.Найти(ФорматФайла) Тогда + Формат = ФорматФайла; + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес); + Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения(); + + ТЗ = Неопределено; + Если "xml" = Формат Тогда + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьПоток(Поток); + + ТЗ = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("ТаблицаЗначений")); + ЧтениеXML.Закрыть(); + ИначеЕсли "json" = Формат Тогда + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.ОткрытьПоток(Поток); + + ТЗ = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON, Тип("ТаблицаЗначений")); + ЧтениеJSON.Закрыть(); + КонецЕсли; + + Поток.Закрыть(); + ДвоичныеДанные = Неопределено; + + Если НЕ Тип("ТаблицаЗначений") = ТипЗнч(ТЗ) Тогда + Возврат; + КонецЕсли; + + Если "КолонкиНовойТЗ" = ИмяРеквизитаТЗ Тогда + ЗначениеВРеквизитФормы(ТЗ, ИмяРеквизитаТЗ); + Иначе + ВывестиТЗНаФорму(ТЗ, "РеквизитТЗ"); + КонецЕсли; + +КонецПроцедуры + + +&НаСервере +Функция ПолучитьДанные_ДляВыгрузки(ИмяРеквизитаТЗ) + Результат = ""; + + ТЗ = РеквизитФормыВЗначение(ИмяРеквизитаТЗ); + + Если "xml" = Формат Тогда + Поток = Новый ПотокВПамяти(); + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьПоток(Поток); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТЗ, "ValueTable", "http://v8.1c.ru/8.1/data/core"); + ЗаписьXML.Закрыть(); + Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные(); + Результат = ПоместитьВоВременноеХранилище(Данные, ЭтаФорма.УникальныйИдентификатор); + ИначеЕсли "json" = Формат Тогда + Поток = Новый ПотокВПамяти(); + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.ОткрытьПоток(Поток); + + СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ТЗ); + ЗаписьJSON.Закрыть(); + Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные(); + Результат = ПоместитьВоВременноеХранилище(Данные, ЭтаФорма.УникальныйИдентификатор); + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Формат = "xml"; +КонецПроцедуры