Вопрос

Доброго времени суток, коллеги.

ТеррасофтCRM 3.3.2.245.

Возможно ли в DataGrid-е запретить отображение панели итогов? В противном случае при выборке в SelectQuery из табличной функции и включенных итогах в гриде выдается ошибка: "Функции SUM необходимо 1 аргументов". Я пока программно устанавливаю свойство IsSummaryVisible грида в false, но может есть более цивильный способ?

У меня такой же вопрос

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

Включение и отключение строки итогов в реестре сделано на уровне ядра, из конфигурации (в скрипте или в дизайнере страницы) на это свойство можно влиять только через IsSummaryVisible. Вероятно, у Вас итоги не работают именно из-за вызываемой функции вместо колонок в SelectQuery, ведь для неё SUM не имеет смысла.

Спасибо, понятно.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

Хотим сделать чтобы в редактируемом реестре записи отображались как ссылки для удобного перехода, нашел что для этого необходимо добавить признак useLinks: true для DataGrid и метод-обработчик linkClicked, но это почему-то не меняет ситуацию, строки отображаются как обычно... ошибок в консоли нет

Код DataGrid:

{
    "operation": "merge",
    "name": "DataGrid",
    "values": {
        "className": "Terrasoft.ConfigurationGrid",
        "generator": "ConfigurationGridGenerator.generatePartial",
        "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
        "changeRow": {"bindTo": "changeRow"},
        "unSelectRow": {"bindTo": "unSelectRow"},
        "onGridClick": {"bindTo": "onGridClick"},
        "activeRow": {"bindTo": "ActiveRow"},
        "selectedRows": {"bindTo": "SelectedRows"},
        "activeRowActions": [
            {
                "className": "Terrasoft.Button",
                "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                "tag": "save",
                "markerValue": "save",
                "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
            },
            {
                "className": "Terrasoft.Button",
                "style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                "tag": "card",
                "markerValue": "card",
                "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
            },
            {
                "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,
        "useLinks": true,
        "primaryColumnName": "Id",
        "sortColumnIndex": null,
        "listedZebra": true,
        "type": "listed"
    }
}

 

Посмотрите, пожалуйста, может я что-то упустил

У меня такой же вопрос

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

Добрый день!

Я бы Вам рекомендовал посмотреть в сторону метода addColumnLink в GridUtilitiesV2. Так же можно изучить поподробнее как формируются ссылки в FileDetailV2

Добрый день!

Я бы Вам рекомендовал посмотреть в сторону метода addColumnLink в GridUtilitiesV2. Так же можно изучить поподробнее как формируются ссылки в FileDetailV2

Обрати внимание на флаг showValueAsLink (и выше тебе уже ответили в системе множество примеров, потрать немного времени и разберись)

ПРимер использования ниже

{
    "operation": "insert",
    "name": "UsrURLpage",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 3,
            "layoutName": "Header"
        },
        "labelConfig": {},
        "enabled": true,
        "bindTo": "UsrURLpage",
        "showValueAsLink": true,
        "href": {
            "bindTo": "UsrURLpage",
            "bindConfig": {"converter": "getUsrURLpageLink"}
        },
        "controlConfig": {
            "className": "Terrasoft.TextEdit",
            "linkclick": { bindTo: "onUsrURLpageLinkClick"}
        }
    },
    "parentName": "Header",
    "propertyName": "items",
    "index": 6
}

 

Переопределил метод addColumnLink, спасибо Константину за наводку:

addColumnLink: function(item, column) {
    this.callParent(arguments);
 
    var columnPath = column.columnPath;
    if (columnPath === "UsrProduct") {
        item["on" + columnPath + "LinkClick"] = function() {
            var value = this.get(columnPath);
            return {
                caption: item.values.UsrProduct.displayValue,
                target: "_self",
                title: item.values.UsrProduct.displayValue,
                url: "/0/Nui/ViewModule.aspx#CardModuleV2/ProductPageV2/edit/" + item.values.UsrProduct.value
            };
        };
    }
}

При переходе по ссылке появились ошибки в консоли, видимо не мог поставить фокус при переходе, просто убрал фокус на это поле:

focusActiveRowControl: function(columnName) {
    if (!columnName || columnName === "UsrProduct") {
        return;
    }
    var activeRow = this.getActiveRow();
    activeRow.set("Is" + columnName + "Focused", true);
    this.currentActiveColumnName = columnName;
}

 

Всем спасибо за помощь...)

 

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

Появилась необходимость реализовать отдельную сортировку по умолчанию в Grid'е детали.

Итак немного отсылки о детали. Деталь содержит в себе записи относящиеся к справочной колонке "Объект администрирования". Грубо говоря есть 4ре отдела и есть неограниченное количество пользователей, которые так или иначе входят в эти отделы (отдел - организационный юнит).

Так вот при клике на + у детали всплывает справочник этих сущностей, где пользователь может выбрать как отделы так и других пользователей. 

После этого происходит стандартное добавление выбранных записей в деталь.

Так вот вопрос, каким образом можно реализовать сортировку по умолчанию для реестра так, чтобы каждый пользователь находился под тем отделом к которому он принадлежит?

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

Так же что-то удалось найти в diff на BaseGridDetail который соответствует сортировке, но как-то это тоже ни к чему не привело.

Есть мысль что при загрузке коллекции в методе onGridDataLoaded получать коллекцию и при помощи underscore.js сортировать её как угодно, но вроде как это накладно и производительней было бы получить уже отсортированную коллекцию.

У кого какие предложения/идеи будут по данному посту?

У меня такой же вопрос

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

Добрый день. Не очень понял, а почему "я уперся в GridUtilites и решил дальше не лезть"? Можно же функцию из миксина переопределить в схеме самой детали, сославшись на родительскую, если нужно, через this.mixins.GridUtilitiesV2.... . На вскидку, вроде надо "допилить" initQuerySorting ???

типа такого:

 

initQuerySorting: function(esq) {

    this.mixins.GridUtilitiesV2.initQuerySorting(esq);

    /* далее какие-то ваши действия с esq */

}

 

Или наоборот, сначала - ваша сортировка, потом - родительский метод.

Иванов Александр А.,

Да, спасибо. Мы уже разрешили проблему. Если интересно могу поделиться кодом.

Да, было бы неплохо. Посмотреть, к тому же, насколько отличается от моей мысли. ))

initQuerySorting: function(esq) {
	var createdOnColumn = esq.addColumn("KmName", "Name");
	createdOnColumn.orderDirection = this.Terrasoft.OrderDirection.ASC;
}

Всё свелось к тому что такой путь посоветовала Тех. поддержка. А у меня там уже простынка такая строчек на 100 была как коллекцию грида сортироватьlaugh

Кисловский Михаил Андреевич,

Ну да, только тут остальная сортировка "идёт лесом". Поддержка, как всегда, короче... smiley

Иванов Александр А.,

Ну с остальной сортировкой да. Но в целом можно выкрутиться думаю если захотеть) 

Я, наверное, тогда промолчу про 

getGridDataColumns: function() {
	return {
		"Id": {path: "Id"},
		"TmName": {path: "TmName"},
		"TmStartDate": {path: "TmStartDate", orderPosition: 0, orderDirection: Terrasoft.OrderDirection.DESC},
		"TmStudios": {path: "TmStudios", orderPosition: 1, orderDirection: Terrasoft.OrderDirection.DESC}
	};
},

где можно сортировку по каждой колонке настроить...

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте.
Необходимо добавить на грид детали кнопку. Причем нужно, чтобы кнопка отображалась только на записях, у которых в определенной колонке имеется определенное значение.
На Комьюнити нашел пример для управления видимостью кнопок на реестре раздела. http://www.community.terrasoft.ru/forum/topic/15313
Однако в детали у меня этот пример не заработал. Вот мой код.

 

define("Schema3Detail", [], function() {
        return {
                entitySchemaName: "FinApplicationSettings",
                details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
                diff: /**SCHEMA_DIFF*/[
                        {
                                "operation": "merge",
                                "name": "DataGrid",
                                "values": {
                                        "activeRowAction": {"bindTo": "onActiveRowAction"},
                                        "activeRowActions": []
                                }
                        },
                        {
                                "operation": "insert",
                                "name": "Choose",
                                "parentName": "DataGrid",
                                "propertyName": "activeRowActions",
                                "values": {
                                        "className": "Terrasoft.Button",
                                        "style": this.Terrasoft.controls.ButtonEnums.style.GREEN,
                                        "tag": "choose",
                                        "caption": "Выбрать",
                                        "visible": {"bindTo": "getChooseButtonVisible"}
                                }
                        }              
                ]/**SCHEMA_DIFF*/,
                methods:{
                               
                                addColumnLink: function(item) {
                                        debugger;
                    var self = this;
                    item.getChooseButtonVisible = function() {
                        return self.getChooseButtonVisible.call(self, this.get(this.primaryColumnName));
                    };
                    return this.callParent(arguments);
                },
                               
                                getChooseButtonVisible: function(activeRow) {
                                        debugger;
                                        if (!activeRow) return true;
                                        var settingsSource = this.get("GridData").get(activeRow).get("FinAppSettSource");
                                        return settingsSource && settingsSource.value == 'e7769f6c-d688-40a3-a609-e794ac5f862a' ? true : false;
                                }
        };
});

 

У меня такой же вопрос

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

Здравствуйте, Андрей.

Реестр детали не предназначен для добавления в него Action buttton. Рекомендую Вам добавлять кнопку указывая родительским элементом Detail. В данном случае кнопка будет отображаться возле кнопок добавления записи и меню детали.

Свойство visible детали необходимо привязать к атрибуту булевого типа. Само же значение атрибута необходимо менять в зависимости от значений выделенной строки.

Пример:

define("UsrSchema6Detail", [], function() {
	return {
		entitySchemaName: "UsrTestTest",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "TestButton",
				"parentName": "Detail",
				"propertyName": "tools",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"click": {"bindTo": "testClick"},
					"visible": {bindTo: "IsButtonVisible"},
					"enabled": true,
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"caption": "Test button"
				}
			}
		]/**SCHEMA_DIFF*/,
		methods: {
			testClick: function() {
				console.log("click");
			},
			onActiveRowChange: function() {
				var gridData = this.getGridData();
				var activeRow = this.get("ActiveRow");
				if(gridData && activeRow) {
					var currentRow = gridData.get(activeRow); 
					this.set("IsButtonVisible", currentRow && currentRow.get("UsrSTRING") === '111');
					return;
				}
				this.set("IsButtonVisible", false)
			},
		},
		attributes: {
			IsButtonVisible: {
				dataValueType: Terrasoft.DataValueType.BOOLEAN,
				dependencies: [{
					columns: ["ActiveRow"],
					methodName: "onActiveRowChange"
				}],
				value: false
			}
		}
	};
});

Если же Вам необходимо добавить кнопку в сам грид, рекомендую Вам смотреть в схему BaseSectionV2 и делать по аналогии.

Илья, спасибо за ответ.
Вариант с кнопкой в заглавии детали не подходит, так как количество записей в детали может быть весьма большим. Поэтому желателен вариант именно с кнопкой на гриде. Кстати, забыл упомянуть, что debugger в методах addColumnLink и getChooseButtonVisible не срабатывают при выборе активной строки.

Для добавления кнопок в реестр, Вам стоит смотреть в сторону изменения DataGrid в схеме детали. К примеру, в секции (BaseSectionV2) он добавлен следующим образом:

{
					"operation": "insert",
					"name": "DataGrid",
					"parentName": "DataGridContainer",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.GRID,
						"type": {"bindTo": "GridType"},
						"listedZebra": true,
						"activeRow": {"bindTo": "ActiveRow"},
						"collection": {"bindTo": "GridData"},
						"isEmpty": {"bindTo": "IsGridEmpty"},
						"isLoading": {"bindTo": "IsGridLoading"},
						"multiSelect": {"bindTo": "MultiSelect"},
						"primaryColumnName": "Id",
						"selectedRows": {"bindTo": "SelectedRows"},
						"sortColumn": {"bindTo": "sortColumn"},
						"sortColumnDirection": {"bindTo": "GridSortDirection"},
						"sortColumnIndex": {"bindTo": "SortColumnIndex"},
						"selectRow": {"bindTo": "rowSelected"},
						"canExecute": {"bindTo": "canBeDestroyed"},
						"linkClick": {"bindTo": "linkClicked"},
						"linkMouseOver": {"bindTo": "linkMouseOver"},
						"needLoadData": {"bindTo": "needLoadData"},
						"activeRowAction": {"bindTo": "onActiveRowAction"},
						"activeRowActions": [],
						"getEmptyMessageConfig": {"bindTo": "prepareEmptyGridMessageConfig"}
					}
				},

, а для деталей (BaseGridDetailV2)

								{
					"operation": "insert",
					"name": "DataGrid",
					"parentName": "Detail",
					"propertyName": "items",
					"values": {
						"itemType": Terrasoft.ViewItemType.GRID,
						"listedZebra": true,
						"collection": {"bindTo": "Collection"},
						"activeRow": {"bindTo": "ActiveRow"},
						"primaryColumnName": "Id",
						"isEmpty": {"bindTo": "IsGridEmpty"},
						"isLoading": {"bindTo": "IsGridLoading"},
						"multiSelect": {"bindTo": "MultiSelect"},
						"selectedRows": {"bindTo": "SelectedRows"},
						"sortColumn": {"bindTo": "sortColumn"},
						"sortColumnDirection": {"bindTo": "GridSortDirection"},
						"sortColumnIndex": {"bindTo": "SortColumnIndex"},
						"linkClick": {"bindTo": "linkClicked"}
					}
				},

Также в детали логика обработки реестра отличается. Без переноса или написания заново данной логики, кнопка добавляться не будет.

Debbuger не отрабатывает по причине того, что сами методы не отрабатывают.

Возник аналогичный вопрос... Записей в детали очень много, действие надо выполнить над одной. В итоге приходится скролить наверх

Или удалось как-то это победить?

Честно говоря, не помню чем тогда дело закончилось. Но сейчас, просматривая свой код, есть пара смущающих моментов. Во-первых метод addColumnLink  явно не тот, в который стоит добавлять эту логику, а надо, скорее всего, использовать такой метод, который срабатывает при выборе строки, а addColumnLink срабатывает при прогрузке данных, ну и второе: у деталей данные хранятся не в атрибуте GridData, а в атрибуте Collection

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

Посмотрите эту тему https://community.terrasoft.ru/questions/problemy-s-nastroikoi-razdela-…

Там они с разделом работали. Для детали нужно расширять класс BaseGridRowViewModel

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Есть ли обработчик наведения на заголовок грида?

ЗАДАЧА: нужно при наведении на заголовок (название колонки) грида отображать расширенное наименование названия.
ПРИМЕР: Наименование колонки "Ответственный", всплывающий текст при наведении "Сотрудник, который отвечает за заказы данного клиента" .

Спасибо.

У меня такой же вопрос

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

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

Какую версию клиента Террасофт Вы используете?

"Резниченко Сергей" написал:

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

Какую версию клиента Террасофт Вы используете?

Сергей, добрый день!
Версия с билдом 3.4.1.171 (правда у большинства пользователей стоит билд 91 :sad: )

Добрый день, AleXS!

Начиная с версии 3.4.0.63 у большинства компонентов системы появилось свойство Hint. Но для колонки грида у меня не получилось его добавить. Я передал вопрос коллегам из департамента разработки, для того чтобы прояснить ситуацию с данным функционалом. По результатам сразу напишу.

"Резниченко Сергей" написал:По результатам сразу напишу.

Спасибо, Сергей! Очень жду...

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

Получил ответ от коллег из департамента разработки, к сожалению, отображать "хинты" для колонок возможности нет. Они могут работать только с текстом заголовка колонки.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день

В окне есть DataGrid, привязанный к набору данных A. Под DataGrid'ом есть WindowContainer внутри которого есть DataGrid привязанный к набору данных B.
Набор данных B основан на мудрёном запросе на выборку, основанном на приличном количестве таблиц.

Прошу пояснить как осуществляется процесс добавления записи из набора A в набор B и отобразить сие действо в DataGrid'е окна контейнера.

Делаю следующие шаги.
1. Беру запись из набора A
2. Беру набор B (

var B = Services.GetNewItemByUSI('B');
)
3. Определяю поля и значения
var Fields = new Array(...);
var Values = new Array(...);

4. Использую
AppendRecordInDataset(B, Fields, Values, true);

Прошу помощи в понимании данного процесса.

1. Добавление из A в B.
2. Обновление DataGrid для отображения того что добавили.

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

У меня такой же вопрос

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

Как я полагаю, надо слать Notify. Вопрос чему - Окну (и там проводить обработку) или Набору данных?

Если есть наборы данных А и В, привязанные через DatasetLink к соответствующим гридам и необходимо скопировать выделенную запись из А в В, то нужно:
var Fields = new Array(имена полей, которые копируем);
var Values = new Array(значение из набора данных А (например, А('Поле1') и т.д.));
AppendRecordInDataset(B, Fields, Values, true);
B.RefreshRecord(B('ID'), true);

Если наборы данных находятся в разных окнах, то надо слать Notify окну, в котором В, а в качестве данных передать набор данных А. Функии копирования поместить в обработку OnNotify окна с В.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Подскажите плс, каким образом можно получить набор selected строк в datagrid?

У меня такой же вопрос

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

Валентин, здравствуйте.

Если Ваш грид унаследован от wnd_BaseGridArea, то можно вот так:

var SelectedIDs = Window.ComponentsByName('grdData').SelectedIDs.CommaText.split(',');

В итоге SelectedIDs - массив идентификаторов.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Как то можно повлиять на выгрузку в Excel из DataGrid? Не устраивает как даты выгружаются, хотелось бы дописать логику выгрузки. Еще есть необходимость проставлять типы ячеек.

У меня такой же вопрос

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

Здравствуйте, Михаил Евгеньевич!

Механизм экспорта записей из реестра в MS Excel реализован на уровне ядра приложения Terrasoft.

В связи с этим, возможности внести конфигурационные изменения в него нет.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Что нужно сделать, что бы DataGrid уже привязанный к DataSet даталинка отобразил данные. В любом месте проинициализировать DataSet и DataGrid автоматом все отобразит(колонки настроены)?

P.S. вопрос решен, действительно нужно просто правильно DataSet инициализировать

У меня такой же вопрос

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

На OnPrepare грида пропишите

scr_BaseGridArea.wnd_BaseGridAreaOnPrepare(Window);

И автоматом все будет отображать.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго времени суток.
Вопрос у меня такой.
Как сделать добавление записи в DataGrid с несколькими полями, одна из которых берется из справочника.
Справочник уже создан.
DataGrid с 2 записями 1 название, 2 тип(берется из справочника).
DataGrid тоже создан. Под ним 2-а соответствующих поля для ввода. При изменении поля название, автоматически добавляется запись.
Но при попытке выбрать тип из выпадающего списка происходит зависание системы.
Дебагер ругается на Nulll в поле типа.
В чем может быть причина?

У меня такой же вопрос

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

Илья, если я правильно поняла, при заполнении карточки редактирования (создание записи), а именно при попытке выбора значения из поля [Тип] приложение зависает.
Вам необходимо проверить:
- Корректно ли указали свойства поля в датасет (поле для поиска и поле для отображения)
/system/files/_1__4.png
- Заполнено ли первичное поле для отображения в таблице и датасете справочника:
/system/files/_2__1.png

Спасибо, уже разобрался. :smile:
Есть другой вопрос касательно

 RefreshCommonDetail(BaseWorkspace, wndSolutionsDetail, 'IncidentID',
'IncidentID', '', '', '', AlwaysRefresh);

Можете в общем виде описать принцип обновления детали, и атрибуты вызываемой функции RefreshCommonDetail();

Функция RefreshCommonDetail предназначена для обновления детали раздела.
Параметры функции:
BaseWorkspace – рабочее пространство раздела, деталь которого будет обновляться.
WindowContainer – окно детали (например, wndAnniversariesDetail).
ParentItemFieldName – название поля, являющего родительским со стороны раздела по отношению к детали (например, в случае детали «Знаменательные события» раздела [Контрагенты] – это поле 'AccountID').
ChildFilterName – название фильтра, по которому будут фильтроваться записи детали.
DatasetUSI – USI датасета детали.
EditWindowUSI – USI карточки редактирования детали.
AdditionalAttributes – дополнительные атрибуты.
AlwaysRefresh – признак, указывающий на то, всегда ли будет обновляться деталь (независимо от внесения изменений в родительскую запись).
SimpleRefresh – признак, указывающий на то, что нужно выполнять простое обновление (посредством закрытия-открытия датасета детали).
ParentItemID – идентификатор родительской записи.
DoNotDisableAllFilters – признак, указывающий следует или нет отключать все фильтры запроса детали перед фильтрацией по ParentItemID.
DatasetAdditionalAttributes – дополнительные атрибуты датасета детали.

Принцип работы функции:

1. Выполняется проверка проинициализирована ли деталь. Если деталь не была проинициализирована, тогда в атрибуты окна детали записываются значения: USI карточки редактирования детали (EditWindowUSI), USI датасета детали (DatasetUSI), название поля, являющего родительским со стороны раздела по отношению к детали (ParentItemFieldName), дополнительные атрибуты.
2. Считывается значение идентификатора родительской записи (ParentID). Если рабочее пространства (BaseWorkspace) определено, ParentID устанавливается равным идентификатору выделенной записи реестра, в обратном случае – берется из параметра функции.
3. Если ParentID не изменялся (не менялся фокус записи в реестре) и параметр AlwaysRefresh равен false, происходит выход из функции без обновления датасета детали. В обратном случае считывается датасет детали и выполняется его обновление.

В стандартном случае при вызове функции достаточно определить 4 параметра, например:

RefreshCommonDetail(BaseWorkspace, wndProjectDetail, 'ClientID', 'ClientID');

Пример вызова функции с 6 определенными параметрами:

RefreshCommonDetail(BaseWorkspace, wndAnniversariesDetail,
'AccountID', 'AccountID', 'ds_AccountAnniversary', 'wnd_AnniversaryEdit');

Спасибо большое, буду разбираться.

Войдите или зарегистрируйтесь, чтобы комментировать