Была создана схема карточки для собственной детали. В нее добавлен следующий код:

define("UsrSchema1Detail", ["ConfigurationGrid", "ConfigurationGridGenerator",
"ConfigurationGridUtilities"], function() {
        return {
                entitySchemaName: "UsrProjectParticipant",
                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"}
                                        }
                                ],
                                "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
                                "activeRowAction": {"bindTo": "onActiveRowAction"},
                                "multiSelect": false
                        }
                }]/**SCHEMA_DIFF*/,
                mixins: {
                        ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
                },
                methods: {}
        };
});

Данный код отрабатывает некорректно, хотя был сделан на основе руководства, по которому можно добавить грид на свою деталь. Его некорректная работа отражается в том, что при попытке добавить запись или редактировать имеющуюся - не отрисовывается строка. Пример на скриншоте.
Как показал отладчик - не работает строка
"generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},

А сама функция выпадает в ошибку undefined на последней строчке
                generateActiveRowControlsConfig: function(id, columnsConfig, rowConfig) {
                        this.columnsConfig = columnsConfig;
                        var gridLayoutItems = [];
                        var currentColumnIndex = 0;
                        this.Terrasoft.each(columnsConfig, function(columnConfig) {
                                var columnName = columnConfig.key[0].name.bindTo;
файла ConfigurationGridUtilities.js
Не подскажите как решить данный вопрос с гридом?

Нравится

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

Добрый день Александр!!!

после создания детали, нужно в профили Детали добавить колонки. Так как жестко при инициализации детали у вас не указаны колонки. к примеру в 7.8 есть детали от календаря "WorkingWeekDetail" в данной детали колонки задаются жестко при инициализации детали. В вашем случае их нужно задать в профили детали, вызвав Действие --> Настройка колонок.

"Власов Михаил Викторович" написал:

Добрый день Александр!!!

после создания детали, нужно в профили Детали добавить колонки. Так как жестко при инициализации детали у вас не указаны колонки. к примеру в 7.8 есть детали от календаря "WorkingWeekDetail" в данной детали колонки задаются жестко при инициализации детали. В вашем случае их нужно задать в профили детали, вызвав Действие --> Настройка колонок.


Колонка контакт ведь добавлена в деталь на скриншоте. Или нужно добавить какие то другие колонки?

Тогда Александр в дебагере найдите точно где вылетает Ошибка "undefined" и я вам подскажу из-за чего она вылетела

"Власов Михаил Викторович" написал:

Тогда Александр в дебагере найдите точно где вылетает Ошибка "undefined" и я вам подскажу из-за чего она вылетела

var columnName = columnConfig.key[0].name.bindTo;

Вот эта строчка файла ConfigurationGridUtilities. Функция generateActiveRowControlsConfig. Почему то в 7.7 эта функция возвращает один объект, а в 7.8 массив.

Добрый день Александр!!!

показываю эксперимент чтобы вы понимали. Но сначало поясню еще раз метод "generateActiveRowControlsConfig" класса "Terrasoft.ConfigurationGridUtilities" генерирует конфигурацию элементов редактирования активной строки реестра Детали. в методе отрабатывается цикл

this.Terrasoft.each(columnsConfig, function(columnConfig) {
   ....
}, this);

в данном цикле во входящих значениях "columnsConfig" - это массив колонок Профиля детали. Показываю пример на скриншотах.

вот страница редактирования "Сервисов"

На данной странице редактирования есть деталь "Сервисные инженеры". По умолчанию деталь имеет колонки:

При добавление на детали Сервисные инженеры, строка реестра имеет следующий вид:

Если удалить колонку, через "Действия" --> "Настройка колонок". К примеру удаляем "Уровень поддержки", то строка реестра редактирования будет иметь следующий вид:

И в результате как я говорил выше Система массив колонок берет из Профиля детали, если колонки не заданы жестко программно. Поэтому и вопрос вы в профили детали Добавили колонки?

Колонки в профиле детали есть. Смотрите.

Вот стек вызовов где не работает, и стек вызовов где работает.

Почему то в первом случае мы сразу получаем объект, поэтому выпадает в undefined

Еще раз Александр повторюсь, где конкретно вылетает ошибка? у строки

var columnName = columnConfig.key[0].name.bindTo;

метода "generateActiveRowControlsConfig" идет получение массива "columnConfig", далее через точку "key[0]" и так далее где конкретно через точку вылетает ошибка.

Здесь Александр это где? это после key[0], после name, или после bindTo? это первое а второе вы сами ради сравнения разверните стек, что у вас на скриншотах, в 7.7 и в 7.8 и сравните что есть и чего нехватает. вот вам и будет ответ на каком месте выходит ошибка.

После columnConfig. Попытался вызвать команду в консоли columnConfig - все хорошо, попытался вызвать команду columnConfig.key[0] выпадает в ошибку.

Но как избавиться от нее - я не знаю

Провел одинаковые операции на 7.7 и 7.8. Создал объект, в качестве родительского указал - Базовый справочник. Добавил колонку. Добавил деталь. Добавил деталь в раздел. Произвел настройку колонок. Изменил код схемы полученной детали. В результате на версии 7.7 все работает, а на версии 7.8 нет.

Здравствуйте, Александр!

Данный вопрос будет решен в рамках технической поддержки

"Демьяник Алексей" написал:Здравствуйте, Александр!

Данный вопрос будет решен в рамках технической поддержки

День добрый Алексей!!!

так это ошибка 7.8? просто у меня на 7.8 все работает. Уже и с нуля писал данный код, и мой старый код пробовал, все работает.

"Власов Михаил Викторович" написал:День добрый Алексей!!!

так это ошибка 7.8? просто у меня на 7.8 все работает. Уже и с нуля писал данный код, и мой старый код пробовал, все работает.

Не покажите пример простого грида, который у Вас на 7.8 работает?

"Бахматов Александр Валерьевич" написал:
Власов Михаил Викторович пишет:

День добрый Алексей!!!

так это ошибка 7.8? просто у меня на 7.8 все работает. Уже и с нуля писал данный код, и мой старый код пробовал, все работает.

Не покажите пример простого грида, который у Вас на 7.8 работает?

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

Это не ошибка 7.8.0. В версии 7.8.0 можно найта редактируемый реестр, например, в детали OrderProductDetailV2 - он корректно работает.

"Демьяник Алексей" написал:Здравствуйте!

Это не ошибка 7.8.0. В версии 7.8.0 можно найта редактируемый реестр, например, в детали OrderProductDetailV2 - он корректно работает.

Может быть попробовать тогда использовать тот код карточки, что в детали OrderProductDetailV2? Или этого недостаточно?

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

"Бахматов Александр Валерьевич" написал:
Демьяник Алексей пишет:

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

Это не ошибка 7.8.0. В версии 7.8.0 можно найта редактируемый реестр, например, в детали OrderProductDetailV2 - он корректно работает.

Может быть попробовать тогда использовать тот код карточки, что в детали OrderProductDetailV2? Или этого недостаточно?

Я не пробовал создавать редактируемые реестры, но по опыту общения с системой понял, что нужно экспериментировать. Скажите, пожалуйста, Ваша деталь наследуется от BaseGridDetailV2?

"Демьяник Алексей" написал:Я не пробовал создавать редактируемые реестры, но по опыту общения с системой понял, что нужно экспериментировать. Скажите, пожалуйста, Ваша деталь наследуется от BaseGridDetailV2?

Да, наследуется, пакет NUI

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