Добрый вечер! Подскажите, пожалуйста, при внесении каких либо изменений через Мастер раздела (например добавление новой вкладки), происходит ли компиляция приложения или просто создаются схемы в пакете Custom? Также, где можно посмотреть логи компиляции приложения. Спасибо!

Нравится

1 комментарий

Здравствуйте!

 

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

Если мы меняем поля на странице местами или добавляем новые но по существующим в объекте колонкам - мы меняем схему и обновляем схему.

Если добавляем новые поля - мы меняем объект и схему.

 

Все логи приложения по умолчанию можно посмотреть по пути (путь [TEMP]\Creatio\Site_[{SiteId}]\[{ApplicationName}]\Log\) или проще (диск):\Windows\Temp\Creatio

Показать все комментарии

Коллеги, доброго дня!
Эксплуатируем систему уже 5 лет, накопились бизнес-процессы, которые более пользователями не используются. Смотрю в сторону того, чтобы их удалить, дабы не смущать людей и новых разработчиков. Хотелось поинтересоваться у знающих и опытных, насколько целесообразны такие процедуры, какие есть подводные камни и неочевидные выгоды.

Нравится

2 комментария

и можно заодно узнать, как удалять старые версии процессов?

Владимир Соколов,

Старые версии бизнес процессов можно удалять через конфигурацию. Для того, чтобы понять, какую версию БП нужно удалить - необходимо знать Название версии БП (не заголовок). Его можно посмотреть в Дизайнере процессов, открыв данную версию. На вкладке "Настройки" в пол "Имя".

Показать все комментарии

Доброго дня!

Установили 7.15.4, но после ввода логина-пароля на странице ничего не происходит, а консоль "краснеет". Сам файл /ServiceModel/AuthService.svc в папке есть .. Как это исправить, есть идеи?

 

Нравится

2 комментария

Добрый день.

 

Пройдитесь ещё раз по инструкции по разворачиванию приложения bpm'online on-site, возможно, требуется донастроить какой-то компонент либо же серверу приложений на что-то не хватает доступа.

Также посмотрите файлы логов, часто там можно найти информацию о непосредственной причине проблемы. Их можно найти на сервере в папке Temp/BPMOnline.

Разобрался, спасибо!

Не хватало модуля IIS "Авторизация по HTTP" и WCF

Показать все комментарии

Добрый день, не могу корректно загрузить внешнюю сборку. Сами по себе библиотеки загружаются через конфигуратор, но при компиляции предупреждения:

В папке Assemblies библы лежат, а вот по указанным путям - пустые файлы:

Итого порядок действий:
1. Загрузил библиотеки через конфигуратор

2. Выгрузил в файловую систему наработки

3. Мердж в гите

4. Залил девелоп на тестовый сервер через файловую систему

5. Компиляция

Нравится

1 комментарий

Здравствуйте!

 

Ошибка может возникать из-за нехватки установленных компонентов, либо их версия не соответствует требуемой. 

Проверьте, что на веб-сервере установлены .NET Core SDK 3.1.301 и .NET Framework SDK v 4.7.2., а также Microsoft Visual C++ 2010.

 

Ссылки на скачивание есть в официальной документации:

https://academy.terrasoft.ru/docs/user/razvertyvanie_onsite/server_pril…

 

Показать все комментарии

На форуме есть много разных примеров, но ни один из них не заработал на нашей версии. Нужно, чтобы деталь представляла собой таблицу, колонки которой - это колонки объекта, к которому привязана деталь, а каждая строка - это объекты, связанные через деталь с редактируемой страницей (допустим, деталь счета на странице контактов, где каждая строка - это счет текущего контакта). Нужно, чтобы при нажатии на плюс возле названия детали, добавлялась строка, которую пользователь может заполнить. Сейчас при нажатии плюса открывается страница редактирования детали, а нужно, чтобы деталь редактировалась напрямую в Grid'e. 
Financial Services, v7.15

Нравится

8 комментариев

опишите то как вы добавляете от создания объекта до создания детали, включая примеры кода

Dima Avdoshin,

Я создал объект, привязал его к детали, добавил деталь на страницу. В схему детали добавил следующий код:

define("Schema5Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() {
	return {
		entitySchemaName: "BankAccount",
		attributes: {
            "IsEditable": {
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                value: true
            }
        },
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
            {
                "operation": "merge",
                "name": "DataGrid",
                "values": {
                    "className": "Terrasoft.ConfigurationGrid",
                    "generator": "ConfigurationGridGenerator.generatePartial",
                    "generateControlsConfig": { "bindTo": "generatActiveRowControlsConfig" },
                    "changeRow": { "bindTo": "changeRow" },
                    "unSelectRow": { "bindTo": "unSelectRow" },
                    "onGridClick": { "bindTo": "onGridClick" },
                    "activeRowActions": [
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "save",
                            "markerValue": "save",
                            "imageConfig": { "bindTo": "Resources.Images.SaveIcon" }
                        },
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "cancel",
                            "markerValue": "cancel",
                            "imageConfig": { "bindTo": "Resources.Images.CancelIcon" }
                        },
                        // {
                        //     "className": "Terrasoft.Button",
                        //     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        //     "tag": "remove",
                        //     "markerValue": "remove",
                        //     "imageConfig": { "bindTo": "Resources.Images.RemoveIcon" }
                        // },
                        {
                            "className": "Terrasoft.Button", // последняя кнопка в коде
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "card",
                            "markerValue": "card",
                            "imageConfig": { "bindTo": "Resources.Images.RemoveIcon" }
                        },
                    ],
                    "initActiveRowKeyMap": { "bindTo": "initActiveRowKeyMap" },
                    "activeRowAction": { "bindTo": "onActiveRowAction" },
                    "multiSelect": false
                }
            }
        ]/**SCHEMA_DIFF*/,
		methods: {},
		mixins: {
			ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
		}
	};
});

Но я не знаю, как определить, какие именно значения отобразить в гриде. Объект довольно большой, я хочу отобразить только необходимые поля с возможностью отображения карточки по нажатию на последнюю кнопку в коде. Не заполнив в реестре все необходимые поля, нельзя открыть карточку. Или я могу как-то сыгнорировать эту проверку?

Возьмите прекрасное дополнение с Marketplace и используйте готовые шаблоны https://marketplace.terrasoft.ru/template/templates-developing-custom-d…

Владимир Соколов,

большое спасибо, но, увы, это дополнение поддерживается только начиная с 7.16, а у меня установлена 7.15.
Нельзя как-то в коде настроить, в каком порядке отображать колонки объекта на гриде?

Гусейн Гулиев,

Вам проще будет обновиться до новой версии :-)

Гусейн Гулиев пишет:
это дополнение поддерживается только начиная с 7.16, а у меня установлена 7.15.

что-то мне подсказывает, что это дополнение просто появилось, когда была версия 7.16, и никто его на ранних не тестировал.  

Ну, и даже с этим дополнением иногда нужно перекомпилировать и очистить Redis, чтобы заработало, как надо

Я отредактировал отображаемые колонки детали и сохранил для всех пользователей, но пользователи, открывшие страницу детали хоть раз до изменения, не увидели изменений, пришлось удалить деталь и добавить заново

Добрый день.

Вы можете посмотреть как это реализовано в базовой логике на странице редактирования заказа, деталь Продукты. При нажатии "три точки" -> добавить у нас добавляется строка, которую можно редактировать. 

Показать все комментарии

Добрый день!

Есть объект "Заявка", в нём поле "Анкета", мне нужно на страницу редактирования раздела заявки (вроде так называется, наследуется от BaseModulePageV2 ( NUI )) вывести поля анкеты.

Что я сделал: добавил в код страницы редактирования заявки и раздела заявки кусок:

dataModels: /**SCHEMA_DATA_MODELS*/{
                "AppQ": {
                    "entitySchemaName": "ApplicationQuestionnaire",
                    "primaryColumnValue": {
                        "bindTo": "ApplicationQuestionnaire"
                    }
                }
            }/**SCHEMA_DATA_MODELS*/,

 

В diff'е страницы редактирования заявки прописал несколько полей по типу:

{
                    "operation": "insert",
                    "name": "TscAppFilingMethod",
                    "values": {
                        "bindTo": "AppQ.AppFilingMethod",
                        "layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 12,
                            "rowSpan": 1
                        },
                        "enabled": false
                    },
                    "parentName": "AppQInfoGroupGridLayout",
                    "propertyName": "items"
                }

Дальше происходит следующее:

  1. Если на страницу редактирования заходить напрямую по url, поля отображаются.
  2. Если заходить на страницу из раздела, то поля не отображаются пока не обновишь страницу. После обновления страницы поля есть, и даже если закрыть страницу редактирования и заново в неё войти из раздела, поля остаются, до момента пока не очистишь кэш браузера.

Когда поля не отображаются в консоль выводится следующее сообщение:

Заголовок для подписи "AppFilingMethod" не был найден.
Невозможно найти колонку по конфигурации: "{"bindTo":"AppQ.AppFilingMethod","layout":{"colSpan":12,"rowSpan":1,"column":0,"row":0},"enabled":false,"name":"AppFilingMethod"}" .

Отображаются эти ошибки как на странице раздела, так и на странице редактирования.

Нужно как-то проинициализировать AppQ на странице раздела или я не прав? Подскажите, пожалуйста. 

Использовать запросы и выводить виртуальные поля очень не хочется.

Нравится

4 комментария
Лучший ответ

eduard-t,

Добрый день.

Похоже, что никак. У нас в системе нет понимания как в таком кейсе будет работать сохранение и редактирование таких полей, соответственно могут возникнуть проблемы. В Ext мы официально и не поддерживаем несколько датасорсов, кроме как на преднастроенных страницах.

Вы можете попробовать реализовать свой модуль на примере базового AccountProfileSchema в карточке контакта. Думаю это решит Вашу бизнес задачу. 
Или же придется использовать запросы. Например, можно решить так:
 

1.    Добавляем виртуальный атрибут нужного типа в секцию атрибутов:
attributes: {

    "AlternativeMobilePhone": {
        dataValueType: this.Terrasoft.DataValueType.TEXT,
        type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        caption: "Alternative mobile phone",
        value: null
    },
            
2.    Выводим его на странице в секции дифов:

{
    "operation": "insert",
    "name": "AlternativeMobilePhone",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 2,
            "layoutName": "ContactTab"
        },
        "bindTo": "AlternativeMobilePhone"
    },
    "parentName": "ContactTab",
    "propertyName": "items",
    "index": 4
},
            
3.    Пишем функцию получения нужных данных и установки в вируальные атрибуты\атрибут:

getContactInfo: function() {
    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Contact"
    });

    esq.addColumn("Phone");

    esq.filters.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Contact").value));
    esq.getEntityCollection(function(result) {
        if (result.success) {
            var collection = result.collection;
            if (collection && collection.collection.items.length > 0) {
                var item = collection.collection.items[0];

                this.set("AlternativeMobilePhone", item.get("Phone"));

            }
        }
    }.bind(this));
},
            
4.    При инициализации карточки вызываем этот метод:

onEntityInitialized: function() {
    this.callParent(arguments);
    this.getContactInfo();
},

5.    Для случаев изменения контакта в рантайме, делаем подписку на его изменение и вызов этого же метода получения нужной информации, делается это в блоке атрибутов:

"AnyName": {
    "value": false,
    "dataValueType": Terrasoft.DataValueType.BOOLEAN,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "dependencies": [
        {
            "columns": ["Contact"],
            "methodName": "getContactInfo"
        }
    ]
},

Добрый день. 

Попробуйте добавить в values свойство caption и указать конкретное название:
"layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 12,
                            "rowSpan": 1,

                           "caption":"MyCaption"
                        }

После этого ошибка должна уйти. Или же проверьте есть ли заголовок данной колонки в объекте. 

Mykhailo Storozhuk,

Добрый день. Проблема не в этом, caption нормально подтягивается (из заголовка колонки анкеты), если колонка загружена, но колонка не загружается если заходить через раздел.

Если указать, как вы написали, то получаю просто надпись заголовка без значения:

Обновляю страницу, и всё подтягивается:

Как сделать, чтобы подтягивалось без обновления страницы?

eduard-t,

Добрый день.

Похоже, что никак. У нас в системе нет понимания как в таком кейсе будет работать сохранение и редактирование таких полей, соответственно могут возникнуть проблемы. В Ext мы официально и не поддерживаем несколько датасорсов, кроме как на преднастроенных страницах.

Вы можете попробовать реализовать свой модуль на примере базового AccountProfileSchema в карточке контакта. Думаю это решит Вашу бизнес задачу. 
Или же придется использовать запросы. Например, можно решить так:
 

1.    Добавляем виртуальный атрибут нужного типа в секцию атрибутов:
attributes: {

    "AlternativeMobilePhone": {
        dataValueType: this.Terrasoft.DataValueType.TEXT,
        type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        caption: "Alternative mobile phone",
        value: null
    },
            
2.    Выводим его на странице в секции дифов:

{
    "operation": "insert",
    "name": "AlternativeMobilePhone",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 2,
            "layoutName": "ContactTab"
        },
        "bindTo": "AlternativeMobilePhone"
    },
    "parentName": "ContactTab",
    "propertyName": "items",
    "index": 4
},
            
3.    Пишем функцию получения нужных данных и установки в вируальные атрибуты\атрибут:

getContactInfo: function() {
    var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "Contact"
    });

    esq.addColumn("Phone");

    esq.filters.add("ContactFilter", this.Terrasoft.createColumnFilterWithParameter(
        this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Contact").value));
    esq.getEntityCollection(function(result) {
        if (result.success) {
            var collection = result.collection;
            if (collection && collection.collection.items.length > 0) {
                var item = collection.collection.items[0];

                this.set("AlternativeMobilePhone", item.get("Phone"));

            }
        }
    }.bind(this));
},
            
4.    При инициализации карточки вызываем этот метод:

onEntityInitialized: function() {
    this.callParent(arguments);
    this.getContactInfo();
},

5.    Для случаев изменения контакта в рантайме, делаем подписку на его изменение и вызов этого же метода получения нужной информации, делается это в блоке атрибутов:

"AnyName": {
    "value": false,
    "dataValueType": Terrasoft.DataValueType.BOOLEAN,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "dependencies": [
        {
            "columns": ["Contact"],
            "methodName": "getContactInfo"
        }
    ]
},

Mykhailo Storozhuk,

Большое спасибо! Не знал про существование ProfileSchema, это как раз то, что нужно.

Показать все комментарии

Добрый день, коллеги!

 

Есть задача: Сразу после авторизации пользователя выводить ему системное сообщение с текстом (Текст каждый раз может меняться, своего рода оповещение пользователя о возможном обновлении системы, недоступности или любом другом объявлении).

Полагаю, что можно сделать системную настройку с полем "Текст сообщения" и логическим полем "Выводить сообщение". И когда поле "Выводить сообщение" true, выводить "Текст сообщения" пользователю после авторизации.
Подскажите пожалуйста, в какую часть кода вставлять эту проверку? Где найти этот момент после авторизации? Может навесить на нажатие кнопки "Войти"?

 

Заранее благодарю!

Нравится

3 комментария

Артур, добрый день!
 

Вот пример, нужно только создать сис. настройки:

1. Схема UsrBaseViewModule:

 define("UsrBaseViewModule", [], function() {
    Ext.define("Terrasoft.configuration.UsrBaseViewModule", {
        override: "Terrasoft.configuration.BaseViewModule",
        alternateClassName: "Terrasoft.UsrBaseViewModule",
        
        initHomePage: function(callback, scope) {
            this.callParent(arguments);
            this.showStartMessage(scope);
        },
        
        showStartMessage: function(scope) {
            Terrasoft.SysSettings.querySysSetting(["IsShowIntroMessage", "IntroMessageText"], function(result) {
                if (result && result.IsShowIntroMessage) {
                    if (result.IntroMessageText) {
                        Terrasoft.showMessage(result.IntroMessageText);
                    }
                }
            }, scope);
        }
    });
    return Terrasoft.UsrBaseViewModule;
});
 

2. Схема BootstrapModulesV2 (нужна для загрузки первой):

define("BootstrapModulesV2", ["UsrBaseViewModule"], function() {
    return {};
});

Дима Вовченко,

Они оба замещающие объекты или нет?

Артур, только вторая схема замещена, первая создаётся как новый модуль.

Показать все комментарии

Добрый день!

Есть запрос, Terrasoft.Core.DB.Select, вот кусок:

                    .Distinct().Column("bslc", "Id").As("LinkId")
                    .Column("bslc", "Code").As("Code")
                    .Column("cardProfile", "TextValue").As("Name")
                    .Column("priority", "IntegerValue")

При попытке выполнить, ругается на выделенную строку, так как тип колонки NCLOB (Oracle.DataAccess.Client.OracleException: 'ORA-00932: inconsistent datatypes: expected - got NCLOB').

Если выполнять этот запрос из БД, то так:

                    SELECT DISTINCT
                        "bslc"."Id" "Id",
                        "bslc"."Code" "Code",
                        TO_CHAR("cardProfile"."TextValue") "Name",
                        "priority"."IntegerValue"

не ругается.

Можно ли в Terrasoft.Core.DB.Select использовать TO_CHAR() и как это сделать?

Нравится

1 комментарий

Добрый день.

Нет, нельзя. В системе не предусмотрено данной реализации. 

Для приведения к определенному типу Вы можете использовать cast'ы. Более подробно описано в документации на академии. 
Например, тут

Показать все комментарии

После редактирования страницы и нажатия на пользовательскую кнопку, я передаю её guid (точнее, ид создаваемого в ней объекта) в бизнес-процесс. Но так как  перед вызовом не было нажато "сохранить", объекта с этим guid нет. Я могу эмулировать действие нажатия кнопки "сохранить" из кода? Не хочется вручную создавать объект по данным из страницы, так как пользователь может потом нажать "сохранить". И да, можно ли как-то убрать эту кнопку насовсем, или перехватить вызываемый ей метод, чтобы в коде при определённых обстоятельствах просто не вызывать this.CallParent?

Нравится

1 комментарий
Лучший ответ

Думаю, можете вызвать тихое сохранение при нажатии на пользовательскую кнопку: 

this.save({isSilent: true});

 

Думаю, можете вызвать тихое сохранение при нажатии на пользовательскую кнопку: 

this.save({isSilent: true});

 

Показать все комментарии

В пользовательском разделе есть динамические страницы, и мне нужно сделать кнопку с действием, которое сохранит запись раздела, запретит её для редактирования, и отправит уведомление, чтобы управляющее лицо подтвердило действия на этой странице, допустим, покупку оборудования.

В мастере раздела нельзя создать кнопку, но я уверен, что это возможно в клиентском коде, так как на форуме многократно встречались ответы на подобные вопросы, но ссылки в них, увы, указывают на устаревшие адреса, которые перенаправляют на главную страницу академии террасофт.

Расположение кнопки не имеет большого значения, нужно только вызвать мой метод по нажатию.

Нравится

5 комментариев
Лучший ответ

на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию

attributes: {
            
            "ButtonEnabled": {
                "dataValueType": Terrasoft.DataValueType.BOOLEAN,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "value": false
            }

Вызов функции на кнопке

  onButtonClick: function(){ 
                this.SomeFunc();

Сама кнопка в DIFF            

    {
                "operation": "insert",
                "name": "Button",
                "values": {
                    "itemType": 5,
                    "caption": {
                        "bindTo": "Resources.Strings.ButtonCaption"
                    },
                    "click": {
                        "bindTo": "onButtonClick"
                    },
                    "style": "blue",
                    "enabled": {
                        "bindTo": "ButtonEnabled"
                    },
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 0,
                        "row": 0,
                        "layoutName": "Tab72b43268TabLabelGridLayoutfb645753"
                    }
                },
                "parentName": "Tab72b43268TabLabelGridLayoutfb645753",
                "propertyName": "items",
                "index": 0
            },

В LocalizableString
ButtonCaption    - Текст на кнопке

Если расположение кнопки не имеет значения, то можно использовать меню в "Действиях" 

 

			getActions: function() {
				var actionMenuItems = this.callParent(arguments);
				actionMenuItems.addItem(this.getButtonMenuItem({
					"Caption": {"bindTo": "Resources.Strings.MyButtonCaption"},
					"Click": {"bindTo": "onMyButtonClick"}
				}));
				return actionMenuItems;
			},

 

на страницу, в секцию атрибутов добавить, если надо вкл/выкл по условию

attributes: {
            
            "ButtonEnabled": {
                "dataValueType": Terrasoft.DataValueType.BOOLEAN,
                "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                "value": false
            }

Вызов функции на кнопке

  onButtonClick: function(){ 
                this.SomeFunc();

Сама кнопка в DIFF            

    {
                "operation": "insert",
                "name": "Button",
                "values": {
                    "itemType": 5,
                    "caption": {
                        "bindTo": "Resources.Strings.ButtonCaption"
                    },
                    "click": {
                        "bindTo": "onButtonClick"
                    },
                    "style": "blue",
                    "enabled": {
                        "bindTo": "ButtonEnabled"
                    },
                    "layout": {
                        "colSpan": 12,
                        "rowSpan": 1,
                        "column": 0,
                        "row": 0,
                        "layoutName": "Tab72b43268TabLabelGridLayoutfb645753"
                    }
                },
                "parentName": "Tab72b43268TabLabelGridLayoutfb645753",
                "propertyName": "items",
                "index": 0
            },

В LocalizableString
ButtonCaption    - Текст на кнопке

Oleg,

Кнопка добавилась, и даже отображается в инспекторе, но при этом она  абсолютно невидима. В enabled установлено true.
В вашем коде изменил только родительский контейнер и, соответственно, layoutName. У других элементов на странице тот же родитель

Гусейн Гулиев,

В LocalizableStrings добавили? 

Oleg,

Спасибо большое, Олег. Хотел ответить "захардкодил", потом заметил, что захардкодил неправильно, но оставлю тут этот неправильный пример, на случай если кто столкнется в будущем.

{
	"operation": "insert",
	"name": "Button",
	"values": {
		"itemType": 5,
		"caption": {// Правильно: "caption" :"Check out",
			"bindTo": "Check out" // неправильное использование bindTo
		},
		"click": {
			"bindTo": "onButtonClick"
		},
		"style": "blue",
		"enabled": true,
		"layout": {
			"colSpan": 8,
			"rowSpan": 1,
			"column": 16,
			"row": 6,
			"layoutName": "Tab84fbfd75TabLabelGridLayout489fb6f3"
		}
	},
	"parentName": "Tab84fbfd75TabLabelGridLayout489fb6f3",
	"propertyName": "items",
	"index": 6
},

 

Показать все комментарии