diff --git "a/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
index 05f6f41..9cd4632 100644
--- "a/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
+++ "b/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
@@ -577,6 +577,17 @@
ShowError
+
+
+
+ ru
+ Орбитальный вывод
+
+
+
+ xs:boolean
+
+
diff --git "a/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
index 6c3a519..8a791f2 100644
--- "a/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
+++ "b/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/ER\320\224\320\270\320\260\320\263\321\200\320\260\320\274\320\274\320\260\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205DrawIO/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
@@ -63,6 +63,7 @@
Процедура ПоказатьСвязиТолькоДляПриИзменении(Элемент)
Элементы.ТипВыводимыхМетаданных.Доступность = ПоказатьСвязиТолькоДля;
+ ОрбитальныйВывод = ПоказатьСвязиТолькоДля;
КонецПроцедуры
@@ -234,6 +235,7 @@
СтрокаРеквизита.Наименование = ?(ПустаяСтрока(СтандартныйРеквизит.Синоним), СтандартныйРеквизит.Имя, СтандартныйРеквизит.Синоним);
СтрокаРеквизита.Путь = "Справочник." + СтрокаОбъекта.Имя + "." + СтрокаРеквизита.Имя;
СтрокаРеквизита.КлючевойРеквизит = Истина;
+ СтрокаРеквизита.ПримитивныйТип = ПроверитьЭтоПримитивныйТип(СтрокаРеквизита.ТипЗначения);
КонецЕсли;
@@ -267,6 +269,7 @@
СтрокаРеквизитаТабличнойЧасти.Имя = РеквизитТабличнойЧасти.Имя;
СтрокаРеквизитаТабличнойЧасти.ТипЗначения = РеквизитТабличнойЧасти.Тип;
СтрокаРеквизитаТабличнойЧасти.Наименование = ?(ПустаяСтрока(РеквизитТабличнойЧасти.Синоним), РеквизитТабличнойЧасти.Имя, РеквизитТабличнойЧасти.Синоним);
+ СтрокаРеквизитаТабличнойЧасти.Путь = РеквизитТабличнойЧасти.ПолноеИмя();
СтрокаРеквизитаТабличнойЧасти.ПримитивныйТип = ПроверитьЭтоПримитивныйТип(СтрокаРеквизитаТабличнойЧасти.ТипЗначения);
СтрокаРеквизитаТабличнойЧасти.ПроверкаЗаполнения = ?(РеквизитТабличнойЧасти.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку, Истина, Ложь);
@@ -344,6 +347,7 @@
СтрокаРеквизитаТабличнойЧасти.Имя = РеквизитТабличнойЧасти.Имя;
СтрокаРеквизитаТабличнойЧасти.ТипЗначения = РеквизитТабличнойЧасти.Тип;
СтрокаРеквизитаТабличнойЧасти.Наименование = ?(ПустаяСтрока(РеквизитТабличнойЧасти.Синоним), РеквизитТабличнойЧасти.Имя, РеквизитТабличнойЧасти.Синоним);
+ СтрокаРеквизитаТабличнойЧасти.Путь = РеквизитТабличнойЧасти.ПолноеИмя();
СтрокаРеквизитаТабличнойЧасти.ПримитивныйТип = ПроверитьЭтоПримитивныйТип(СтрокаРеквизитаТабличнойЧасти.ТипЗначения);
СтрокаРеквизитаТабличнойЧасти.ПроверкаЗаполнения = ?(РеквизитТабличнойЧасти.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку, Истина, Ложь);
@@ -353,27 +357,28 @@
КонецЦикла;
- // Регистры сведений
- Если Не ЗначениеЗаполнено(ТаблицаМетаданных) Тогда
- РодительскаяСтрока = ДеревоФормы.Строки.Добавить();
- РодительскаяСтрока.Имя = "РегистрыСведений";
-
- Для Каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл
- СтрокаРегистра = РодительскаяСтрока.Строки.Добавить();
- СтрокаРегистра.Имя = ОбъектМетаданных.Имя;
- КонецЦикла;
- КонецЕсли;
-
- // Регистры накоплений
- Если Не ЗначениеЗаполнено(ТаблицаМетаданных) Тогда
- РодительскаяСтрока = ДеревоФормы.Строки.Добавить();
- РодительскаяСтрока.Имя = "РегистрыНакопления";
-
- Для каждого ОбъектМетаданных Из Метаданные.РегистрыНакопления Цикл
- СтрокаРегистра = РодительскаяСтрока.Строки.Добавить();
- СтрокаРегистра.Имя = ОбъектМетаданных.Имя;
- КонецЦикла;
- КонецЕсли;
+ //// Регистры сведений
+ //Если Не ЗначениеЗаполнено(ТаблицаМетаданных) Тогда
+ // РодительскаяСтрока = ДеревоФормы.Строки.Добавить();
+ // РодительскаяСтрока.Имя = "РегистрыСведений";
+ //
+ // Для Каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл
+ // СтрокаРегистра = РодительскаяСтрока.Строки.Добавить();
+ // СтрокаРегистра.Имя = ОбъектМетаданных.Имя;
+ // СтрокаРегистра.Путь = ОбъектМетаданных.Имя;
+ // КонецЦикла;
+ //КонецЕсли;
+ //
+ //// Регистры накоплений
+ //Если Не ЗначениеЗаполнено(ТаблицаМетаданных) Тогда
+ // РодительскаяСтрока = ДеревоФормы.Строки.Добавить();
+ // РодительскаяСтрока.Имя = "РегистрыНакопления";
+ //
+ // Для каждого ОбъектМетаданных Из Метаданные.РегистрыНакопления Цикл
+ // СтрокаРегистра = РодительскаяСтрока.Строки.Добавить();
+ // СтрокаРегистра.Имя = ОбъектМетаданных.Имя;
+ // КонецЦикла;
+ //КонецЕсли;
// Перечисления
РодительскаяСтрока = ДеревоФормы.Строки.Добавить();
@@ -519,7 +524,8 @@
ТаблицаЭлементов = Новый ТаблицаЗначений;
ТаблицаЭлементов.Колонки.Добавить("id" , Новый ОписаниеТипов("Число")); // Идентификатор - Для всех элементов
ТаблицаЭлементов.Колонки.Добавить("parent" , Новый ОписаниеТипов("Число")); // Родитель - Для всех элементов
- ТаблицаЭлементов.Колонки.Добавить("incline" , Новый ОписаниеТипов("Число")); // Итератор строк сетки - Для таблиц - не выгружается!
+ ТаблицаЭлементов.Колонки.Добавить("inccol" , Новый ОписаниеТипов("Число")); // Итератор колонок / орбит - Для таблиц - не выгружается!
+ ТаблицаЭлементов.Колонки.Добавить("incline" , Новый ОписаниеТипов("Число")); // Итератор строк / таблиц - Для таблиц - не выгружается!
ТаблицаЭлементов.Колонки.Добавить("container", Новый ОписаниеТипов("Число")); // Контейнер - Для таблиц
ТаблицаЭлементов.Колонки.Добавить("shape" , Новый ОписаниеТипов("Строка")); // Фигура - Для таблиц - влияет на стиль
ТаблицаЭлементов.Колонки.Добавить("path" , Новый ОписаниеТипов("Строка")); // Путь - Для таблиц - не выгружается!
@@ -532,11 +538,53 @@
ТаблицаЭлементов.Колонки.Добавить("target" , Новый ОписаниеТипов("Строка")); // Приемник - Для связей
ТаблицаЭлементов.Колонки.Добавить("points" , Новый ОписаниеТипов("Массив")); // Массив точек - Для связей
- Для Каждого РодительскаяСтрока Из ВыбранныеСтроки Цикл
+ Если ОрбитальныйВывод Тогда
- СформироватьСтрокиМетаданныхВXML(ЗаписьXML, ИдентификаторЭлемента, ТаблицаЭлементов, РодительскаяСтрока);
+ ИтераторТаблиц = 1;
+ ИтераторОрбиты = 1;
- КонецЦикла;
+ СтруктураОтбора = Новый Структура;
+ СтруктураОтбора.Вставить("Выбран" , Истина);
+ СтруктураОтбора.Вставить("Путь" , ТипВыводимыхМетаданных);
+ Для Каждого РодительскаяСтрока Из ВыбранныеСтроки Цикл
+ ГоловнаяСтрокаПоиск = РодительскаяСтрока.Строки.НайтиСтроки(СтруктураОтбора);
+
+ Если ГоловнаяСтрокаПоиск.Количество() Тогда
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если ГоловнаяСтрокаПоиск.Количество() Тогда
+ ГоловнаяСтрока = ГоловнаяСтрокаПоиск[0];
+ Иначе
+ Сообщить("Не найден / не выбран головной элемент в дереве метаданных, для которого назначен вывод");
+ Возврат "";
+ КонецЕсли;
+
+ СформироватьГоловнуюТаблицуПоОрбитеВXML(ЗаписьXML, ИдентификаторЭлемента, ТаблицаЭлементов, ГоловнаяСтрока);
+
+ Для Каждого РодительскаяСтрока Из ВыбранныеСтроки Цикл
+
+ СформироватьСтрокиМетаданныхПоОрбитеВXML(ЗаписьXML, ИдентификаторЭлемента,
+ ТаблицаЭлементов, РодительскаяСтрока, ИтераторТаблиц, ИтераторОрбиты);
+
+ КонецЦикла;
+
+ Иначе
+
+ СеткаРазметки = СформироватьГоризонтальнуюСеткуРазметкиТаблиц();
+ КоличествоТаблицВСтрокеСетки = СеткаРазметки.Количество();
+ ИтераторТаблицТекущейСтроки = 1;
+ ИтераторСтрокВСетке = 1;
+
+ Для Каждого РодительскаяСтрока Из ВыбранныеСтроки Цикл
+
+ СформироватьСтрокиМетаданныхПоСеткеВXML(ЗаписьXML, ИдентификаторЭлемента, ТаблицаЭлементов, РодительскаяСтрока,
+ СеткаРазметки, КоличествоТаблицВСтрокеСетки, ИтераторТаблицТекущейСтроки, ИтераторСтрокВСетке);
+
+ КонецЦикла;
+
+ КонецЕсли;
Для Каждого РодительскаяСтрока Из ВыбранныеСтроки Цикл
@@ -556,19 +604,157 @@
КонецФункции
&НаСервере
-Процедура СформироватьСтрокиМетаданныхВXML(ЗаписьXML, ИдентификаторЭлемента, ТаблицаЭлементов, РодительскаяСтрока)
+Процедура СформироватьГоловнуюТаблицуПоОрбитеВXML(ЗаписьXML, ИдентификаторЭлемента, ТаблицаЭлементов, ГоловнаяСтрока)
+
+ ВысотаТаблицы = ВысотаСтрок; // На заголовок
+ ВысотаТаблицы = ВысотаТаблицы + ВысотаСтрок
+ * ГоловнаяСтрока.Строки.НайтиСтроки(Новый Структура("Выбран", Истина)).Количество(); // На реквизиты
+ Для Каждого СтрокаРеквизитов Из ГоловнаяСтрока.Строки Цикл
+ // Находим табличную часть
+ Если СтрокаРеквизитов.ЭтоТЧ Тогда
+ ВысотаТаблицы = ВысотаТаблицы + ВысотаСтрок
+ * СтрокаРеквизитов.Строки.НайтиСтроки(Новый Структура("Выбран", Истина)).Количество(); // На реквизиты табличной части
+ КонецЕсли;
+ КонецЦикла;
+
+ ИдентификаторЭлемента = ИдентификаторЭлемента + 1;
+
+ ЦентрX = ШиринаСтраницы / 2;
+ ЦентрY = ВысотаСтраницы / 2;
+
+ Координаты = Новый Структура;
+ Координаты.Вставить("X", ЦентрX - ШиринаТаблицы / 2);
+ Координаты.Вставить("Y", ЦентрY - ВысотаТаблицы / 2);
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxCell");
+ ЗаписьXML.ЗаписатьАтрибут("id" , Строка(ИдентификаторЭлемента));
+ ЗаписьXML.ЗаписатьАтрибут("value" , ГоловнаяСтрока.Путь);
+ ЗаписьXML.ЗаписатьАтрибут("style" , ПолучитьСтильВЗависимостиОтФигурыЭлемента("table"));
+ ЗаписьXML.ЗаписатьАтрибут("vertex" , "1");
+ ЗаписьXML.ЗаписатьАтрибут("parent" , "1");
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxGeometry");
+ ЗаписьXML.ЗаписатьАтрибут("x" , Формат(Координаты.X, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("y" , Формат(Координаты.Y, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("width" , Формат(ШиринаТаблицы, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("height" , Формат(ВысотаТаблицы, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("as" , "geometry");
+ ЗаписьXML.ЗаписатьКонецЭлемента();
+
+ ЗаписьXML.ЗаписатьКонецЭлемента(); // mxCell
+
+ НовыйЭлемент = ТаблицаЭлементов.Добавить();
+ НовыйЭлемент.id = ИдентификаторЭлемента;
+ НовыйЭлемент.inccol = 0;
+ НовыйЭлемент.incline = 0;
+ НовыйЭлемент.parent = 1;
+ НовыйЭлемент.shape = "table";
+ НовыйЭлемент.path = ГоловнаяСтрока.Путь;
+ НовыйЭлемент.type = ГоловнаяСтрока.ТипЗначения;
+ НовыйЭлемент.x = Координаты.X;
+ НовыйЭлемент.y = Координаты.Y;
+ НовыйЭлемент.width = ШиринаТаблицы;
+ НовыйЭлемент.height = ВысотаТаблицы;
+
+ СформироватьСтрокиРеквизитовВXML(ЗаписьXML,
+ ИдентификаторЭлемента, ТаблицаЭлементов, ГоловнаяСтрока, Координаты.X);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура СформироватьСтрокиМетаданныхПоОрбитеВXML(ЗаписьXML, ИдентификаторЭлемента,
+ ТаблицаЭлементов, РодительскаяСтрока, ИтераторТаблиц, ИтераторОрбиты)
ИмяТипа = РодительскаяСтрока.Имя;
- СеткаРазметки = СформироватьГоризонтальнуюСеткуРазметкиТаблиц();
- КоличествоТаблицВСтрокеСетки = СеткаРазметки.Количество();
- ИтераторТаблицТекущейСтроки = 1;
- ИтераторСтрокВСетке = 1;
+ ВыбранныеСтроки = РодительскаяСтрока.Строки.НайтиСтроки(Новый Структура("Выбран", Истина));
+
+ Для Каждого СтрокаМетаданных Из ВыбранныеСтроки Цикл
+
+ ПоискДублей = ТаблицаЭлементов.Найти(СтрокаМетаданных.Путь, "path");
+
+ Если Не ПоискДублей = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ВысотаТаблицы = ВысотаСтрок; // На заголовок
+ ВысотаТаблицы = ВысотаТаблицы + ВысотаСтрок
+ * СтрокаМетаданных.Строки.НайтиСтроки(Новый Структура("Выбран", Истина)).Количество(); // На реквизиты
+ Для Каждого СтрокаРеквизитов Из СтрокаМетаданных.Строки Цикл
+ // Находим табличную часть
+ Если СтрокаРеквизитов.ЭтоТЧ Тогда
+ ВысотаТаблицы = ВысотаТаблицы + ВысотаСтрок
+ * СтрокаРеквизитов.Строки.НайтиСтроки(Новый Структура("Выбран", Истина)).Количество(); // На реквизиты табличной части
+ КонецЕсли;
+ КонецЦикла;
+
+ ИдентификаторЭлемента = ИдентификаторЭлемента + 1;
+
+ Координаты = ПолучитьНовыеКоординатыТаблицыПоОрбите(
+ ИдентификаторЭлемента, ТаблицаЭлементов, ИтераторТаблиц, ИтераторОрбиты, ВысотаТаблицы);
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxCell");
+ ЗаписьXML.ЗаписатьАтрибут("id" , Строка(ИдентификаторЭлемента));
+ ЗаписьXML.ЗаписатьАтрибут("value" , СтрокаМетаданных.Путь);
+ ЗаписьXML.ЗаписатьАтрибут("style" , ПолучитьСтильВЗависимостиОтФигурыЭлемента("table"));
+ ЗаписьXML.ЗаписатьАтрибут("vertex" , "1");
+ ЗаписьXML.ЗаписатьАтрибут("parent" , "1");
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxGeometry");
+ ЗаписьXML.ЗаписатьАтрибут("x" , Формат(Координаты.X, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("y" , Формат(Координаты.Y, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("width" , Формат(ШиринаТаблицы, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("height" , Формат(ВысотаТаблицы, "ЧН=0; ЧГ="));
+ ЗаписьXML.ЗаписатьАтрибут("as" , "geometry");
+ ЗаписьXML.ЗаписатьКонецЭлемента();
+
+ ЗаписьXML.ЗаписатьКонецЭлемента(); // mxCell
+
+ НовыйЭлемент = ТаблицаЭлементов.Добавить();
+ НовыйЭлемент.id = ИдентификаторЭлемента;
+ НовыйЭлемент.inccol = ИтераторОрбиты;
+ НовыйЭлемент.incline = ИтераторТаблиц;
+ НовыйЭлемент.parent = 1;
+ НовыйЭлемент.shape = "table";
+ НовыйЭлемент.path = СтрокаМетаданных.Путь;
+ НовыйЭлемент.type = СтрокаМетаданных.ТипЗначения;
+ НовыйЭлемент.x = Координаты.X;
+ НовыйЭлемент.y = Координаты.Y;
+ НовыйЭлемент.width = ШиринаТаблицы;
+ НовыйЭлемент.height = ВысотаТаблицы;
+
+ СформироватьСтрокиРеквизитовВXML(ЗаписьXML,
+ ИдентификаторЭлемента, ТаблицаЭлементов, СтрокаМетаданных, Координаты.X);
+
+ ИтераторТаблиц = ИтераторТаблиц + 1;
+
+ Если ИтераторТаблиц > 4 Тогда
+
+ ИтераторТаблиц = 1;
+ ИтераторОрбиты = ИтераторОрбиты + 1;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура СформироватьСтрокиМетаданныхПоСеткеВXML(ЗаписьXML, ИдентификаторЭлемента, ТаблицаЭлементов,
+ РодительскаяСтрока, СеткаРазметки, КоличествоТаблицВСтрокеСетки, ИтераторТаблицТекущейСтроки, ИтераторСтрокВСетке)
+
+ ИмяТипа = РодительскаяСтрока.Имя;
ВыбранныеСтроки = РодительскаяСтрока.Строки.НайтиСтроки(Новый Структура("Выбран", Истина));
Для Каждого СтрокаМетаданных Из ВыбранныеСтроки Цикл
+ ПоискДублей = ТаблицаЭлементов.Найти(СтрокаМетаданных.Путь, "path");
+
+ Если Не ПоискДублей = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
ВысотаТаблицы = ВысотаСтрок; // На заголовок
ВысотаТаблицы = ВысотаТаблицы + ВысотаСтрок
* СтрокаМетаданных.Строки.НайтиСтроки(Новый Структура("Выбран", Истина)).Количество(); // На реквизиты
@@ -582,7 +768,7 @@
ИдентификаторЭлемента = ИдентификаторЭлемента + 1;
- Координаты = ПолучитьНовыеКоординатыТаблицы(ИдентификаторЭлемента,
+ Координаты = ПолучитьНовыеКоординатыТаблицыПоСетке(ИдентификаторЭлемента,
ТаблицаЭлементов, СеткаРазметки, ИтераторТаблицТекущейСтроки, ИтераторСтрокВСетке);
ЗаписьXML.ЗаписатьНачалоЭлемента("mxCell");
@@ -604,6 +790,7 @@
НовыйЭлемент = ТаблицаЭлементов.Добавить();
НовыйЭлемент.id = ИдентификаторЭлемента;
+ НовыйЭлемент.inccol = ИтераторТаблицТекущейСтроки;
НовыйЭлемент.incline = ИтераторСтрокВСетке;
НовыйЭлемент.parent = 1;
НовыйЭлемент.shape = "table";
@@ -962,7 +1149,140 @@
Для Каждого СтрокаМетаданных Из ВыбранныеСтроки Цикл
+ ВыбранныеСтрокиРеквизитов = СтрокаМетаданных.Строки.НайтиСтроки(Новый Структура("Выбран", Истина));
+ Для Каждого СтрокаРеквизитов Из ВыбранныеСтрокиРеквизитов Цикл
+
+ Если СтрокаМетаданных.ТипЗначения = СтрокаРеквизитов.ТипЗначения Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если СтрокаРеквизитов.ПримитивныйТип Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если СтрокаРеквизитов.ЭтоТЧ Тогда
+
+ ВыбранныеСтрокиРеквизитовТЧ = СтрокаРеквизитов.Строки.НайтиСтроки(Новый Структура("Выбран", Истина));
+
+ Для Каждого РеквизитТабличнойЧасти Из ВыбранныеСтрокиРеквизитовТЧ Цикл
+
+ Если РеквизитТабличнойЧасти.ПримитивныйТип Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ЗаписатьСвязьПоТипуОбъектаВXML(ЗаписьXML,
+ ИдентификаторЭлемента, ТаблицаЭлементов, РеквизитТабличнойЧасти, РеквизитТабличнойЧасти.Путь);
+
+ КонецЦикла;
+
+ Иначе
+
+ ЗаписатьСвязьПоТипуОбъектаВXML(ЗаписьXML,
+ ИдентификаторЭлемента, ТаблицаЭлементов, СтрокаРеквизитов, СтрокаРеквизитов.Путь);
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаписатьСвязьПоТипуОбъектаВXML(ЗаписьXML,
+ ИдентификаторЭлемента, ТаблицаЭлементов, СтрокаРеквизитов, ПолныйПутьКРеквизиту)
+
+ СтруктураОтбораКонтейнера = Новый Структура;
+ СтруктураОтбораКонтейнера.Вставить("path" , ПолныйПутьКРеквизиту);
+ СтруктураОтбораКонтейнера.Вставить("shape" , "partialRectangleContainer");
+ ВыведенныйКонтейнерСтроки = ТаблицаЭлементов.НайтиСтроки(СтруктураОтбораКонтейнера);
+
+ Если ВыведенныйКонтейнерСтроки.Количество() Тогда
+ ЭлементКонтейнер = ВыведенныйКонтейнерСтроки[0];
+ Иначе
+ Возврат;
+ КонецЕсли;
+
+ ТипыРеквизитов = СтрокаРеквизитов.ТипЗначения.Типы();
+
+ Для Каждого ТипПеречисление Из ТипыРеквизитов Цикл
+
+ ИдентификаторЭлемента = ИдентификаторЭлемента + 1;
+
+ СтруктураОтбораТаблицы = Новый Структура;
+ МассивТипов = Новый Массив;
+ МассивТипов.Добавить(ТипПеречисление);
+ СтруктураОтбораТаблицы.Вставить("type" , Новый ОписаниеТипов(МассивТипов));
+ СтруктураОтбораТаблицы.Вставить("shape" , "table");
+ ВыведенныйТаблицаСтроки = ТаблицаЭлементов.НайтиСтроки(СтруктураОтбораТаблицы);
+
+ Если ВыведенныйТаблицаСтроки.Количество() Тогда
+ ЭлементТаблица = ВыведенныйТаблицаСтроки[0];
+ Иначе
+ Возврат;
+ КонецЕсли;
+
+ СтильСвязей = ПолучитьСтильВЗависимостиОтФигурыЭлемента("entityRelationEdgeStyle");
+
+ КоординатыИсточника = Новый Структура;
+ КоординатыПриемника = Новый Структура;
+ КоординатыТочек = Новый Массив;
+ КоординатыТочек.Добавить(Новый Структура);
+ КоординатыТочек.Добавить(Новый Структура);
+
+ Если ЭлементКонтейнер.x = ЭлементТаблица.x Тогда
+ КоординатыИсточника.Вставить("x", ЭлементКонтейнер.x);
+ КоординатыПриемника.Вставить("x", ЭлементТаблица.x);
+
+ СтильСвязей = СтрЗаменить(СтильСвязей, "exitX=1", "exitX=0");
+
+ ИначеЕсли ЭлементКонтейнер.x > ЭлементТаблица.x Тогда
+ КоординатыИсточника.Вставить("x", ЭлементКонтейнер.x);
+ КоординатыПриемника.Вставить("x", ЭлементТаблица.x + ШиринаТаблицы);
+ СтильСвязей = СтрЗаменить(СтильСвязей, "exitX=1", "exitX=0");
+
+ Иначе
+ КоординатыИсточника.Вставить("x", ЭлементКонтейнер.x + ШиринаТаблицы);
+ КоординатыПриемника.Вставить("x", ЭлементТаблица.x);
+
+ КонецЕсли;
+
+ YИсточникаСВысотойСтрок = ЭлементКонтейнер.y + (ВысотаСтрок / 2);
+ YПриемникаСВысотойСтрок = ЭлементТаблица.y + (ВысотаСтрок / 2);
+ КоординатыИсточника.Вставить("y", YИсточникаСВысотойСтрок);
+ КоординатыПриемника.Вставить("y", YПриемникаСВысотойСтрок);
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxCell");
+ ЗаписьXML.ЗаписатьАтрибут("id" , Строка(ИдентификаторЭлемента));
+ ЗаписьXML.ЗаписатьАтрибут("value" , "");
+ ЗаписьXML.ЗаписатьАтрибут("style" , СтильСвязей);
+ ЗаписьXML.ЗаписатьАтрибут("edge" , "1");
+ ЗаписьXML.ЗаписатьАтрибут("parent" , "1");
+ ЗаписьXML.ЗаписатьАтрибут("source" , Строка(ЭлементКонтейнер.id));
+ ЗаписьXML.ЗаписатьАтрибут("target" , Строка(ЭлементТаблица.id));
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxGeometry");
+ ЗаписьXML.ЗаписатьАтрибут("width" , "100");
+ ЗаписьXML.ЗаписатьАтрибут("height" , "100");
+ ЗаписьXML.ЗаписатьАтрибут("relative", "1");
+ ЗаписьXML.ЗаписатьАтрибут("as" , "geometry");
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxPoint");
+ ЗаписьXML.ЗаписатьАтрибут("x" , Строка(КоординатыИсточника.x));
+ ЗаписьXML.ЗаписатьАтрибут("y" , Строка(КоординатыИсточника.y));
+ ЗаписьXML.ЗаписатьАтрибут("as" , "sourcePoint");
+ ЗаписьXML.ЗаписатьКонецЭлемента(); // mxPoint
+
+ ЗаписьXML.ЗаписатьНачалоЭлемента("mxPoint");
+ ЗаписьXML.ЗаписатьАтрибут("x" , Строка(КоординатыПриемника.x));
+ ЗаписьXML.ЗаписатьАтрибут("y" , Строка(КоординатыПриемника.y));
+ ЗаписьXML.ЗаписатьАтрибут("as" , "targetPoint");
+ ЗаписьXML.ЗаписатьКонецЭлемента(); // mxPoint
+
+ ЗаписьXML.ЗаписатьКонецЭлемента(); // mxGeometry
+
+ ЗаписьXML.ЗаписатьКонецЭлемента(); // mxCell
КонецЦикла;
@@ -1085,6 +1405,10 @@
ЭтоПримитивныйТип = Истина;
ИначеЕсли ОписаниеТипа.СодержитТип(Тип("Дата")) Тогда
ЭтоПримитивныйТип = Истина;
+ ИначеЕсли ОписаниеТипа.СодержитТип(Тип("ХранилищеЗначения")) Тогда
+ ЭтоПримитивныйТип = Истина;
+ ИначеЕсли ОписаниеТипа.СодержитТип(Тип("УникальныйИдентификатор")) Тогда
+ ЭтоПримитивныйТип = Истина;
Иначе
ЭтоПримитивныйТип = Ложь;
КонецЕсли;
@@ -1167,6 +1491,9 @@
ИначеЕсли ФигураЭлемента = "partialRectangleDescUsual" Тогда
СтильСтрокой = "shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;";
+ ИначеЕсли ФигураЭлемента = "entityRelationEdgeStyle" Тогда
+ СтильСтрокой = "edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classic;endFill=1;shadow=0;targetPerimeterSpacing=0;strokeWidth=1;opacity=40;entryX=0;entryY=0.015;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;startArrow=oval;startFill=1;curved=1;";
+
КонецЕсли;
Возврат СтильСтрокой;
@@ -1221,7 +1548,63 @@
КонецФункции
&НаСервере
-Функция ПолучитьНовыеКоординатыТаблицы(ИдентификаторЭлемента,
+Функция ПолучитьНовыеКоординатыТаблицыПоОрбите(ИдентификаторЭлемента,
+ ТаблицаЭлементов, ИтераторТаблиц, ИтераторОрбиты, ВысотаТаблицы)
+
+ СтруктураОтбора = Новый Структура;
+
+ Если ИтераторОрбиты = 1 Тогда
+
+ СтруктураОтбора.Вставить("inccol" , 0);
+ СтруктураОтбора.Вставить("incline" , 0);
+
+ Иначе
+
+ СтруктураОтбора.Вставить("inccol" , ИтераторОрбиты - 1);
+ СтруктураОтбора.Вставить("incline" , ИтераторТаблиц);
+
+ КонецЕсли;
+
+ ДанныеПрошлойТаблицыПоиск = ТаблицаЭлементов.НайтиСтроки(СтруктураОтбора);
+
+ Если ДанныеПрошлойТаблицыПоиск.Количество() Тогда
+ ДанныеПрошлойТаблицы = ДанныеПрошлойТаблицыПоиск[0];
+ Иначе
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Если ИтераторТаблиц = 1 Тогда
+
+ КоординатаX = ДанныеПрошлойТаблицы.x - РасстояниеМеждуТаблицами - ШиринаТаблицы;
+ КоординатаY = ДанныеПрошлойТаблицы.y - РасстояниеМеждуТаблицами - ВысотаТаблицы;
+
+ ИначеЕсли ИтераторТаблиц = 2 Тогда
+
+ КоординатаX = ДанныеПрошлойТаблицы.x + ШиринаТаблицы + РасстояниеМеждуТаблицами;
+ КоординатаY = ДанныеПрошлойТаблицы.y - РасстояниеМеждуТаблицами - ВысотаТаблицы;
+
+ ИначеЕсли ИтераторТаблиц = 3 Тогда
+
+ КоординатаX = ДанныеПрошлойТаблицы.x - РасстояниеМеждуТаблицами - ШиринаТаблицы;
+ КоординатаY = ДанныеПрошлойТаблицы.y + ДанныеПрошлойТаблицы.height + РасстояниеМеждуТаблицами;
+
+ ИначеЕсли ИтераторТаблиц = 4 Тогда
+
+ КоординатаX = ДанныеПрошлойТаблицы.x + ШиринаТаблицы + РасстояниеМеждуТаблицами;
+ КоординатаY = ДанныеПрошлойТаблицы.y + ДанныеПрошлойТаблицы.height + РасстояниеМеждуТаблицами;
+
+ КонецЕсли;
+
+ Координаты = Новый Структура;
+ Координаты.Вставить("X", КоординатаX);
+ Координаты.Вставить("Y", КоординатаY);
+
+ Возврат Координаты;
+
+КонецФункции
+
+&НаСервере
+Функция ПолучитьНовыеКоординатыТаблицыПоСетке(ИдентификаторЭлемента,
ТаблицаЭлементов, СеткаРазметки, ИтераторТаблицТекущейСтроки, ИтераторСтрокВСетке)
СтрокаРазметки = СеткаРазметки.Найти(ИтераторТаблицТекущейСтроки, "НомерТаблицы");