Вопрос

Каким образом изменить исполнителя проекта? В проекте изменить невозможно.

Нравится

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

Добрый день, Павел!

 

Здесь на данный вопрос Вам не смогут ответить в силу того, что Вы спрашиваете об логике изменения кастомного поля в кастомном разделе, с которой никто из пользователей сообщества не знаком в принципе. Ответ по данному вопросу описал Вам в письме в рамках обращения SR-0627290.

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

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

 

 

define("InvoiceProductPageV2", [], function() {

    return {

        entitySchemaName: "InvoiceProduct",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        attributes: {

                "Usrcenabez": {

                    dataValueType: Terrasoft.DataValueType.FLOAT,

                    dependencies: [

                        {

Amount].

                            columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],

                            methodName: "calculatecenabezNDS"

                        }

                    ]

                },

                "UsrNDS": {.

                    dataValueType: Terrasoft.DataValueType.FLOAT,

                    dependencies: [

                        {

                            columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],

                            methodName: "calculatebezNDS"

                        }

                    ]

                },

                "UsrbezNDS": {

                    dataValueType: Terrasoft.DataValueType.FLOAT,

                    dependencies: [

                        {

                            columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],

                            methodName: "calculateNDS"

                        }

                    ]

                },

                "UsrStoimsdos": {

                    dataValueType: Terrasoft.DataValueType.FLOAT,

                    dependencies: [

                        {

                            columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],

                            methodName: "calculateStoim"

                        }

                    ]

                },

                "Usrcenasdost": {

                    dataValueType: Terrasoft.DataValueType.FLOAT,

                    dependencies: [

                        {

                            columns: ["UsrStoimsdos", "Quantity"],

                            methodName: "calculateCena"

                        }

                    ]

                }

            },

            methods: {

                onEntityInitialized: function() {

                                        this.callParent(arguments);

                                        this.calculateCena();

                                    },

                calculateCena: function() {

                                        var ct = this.get("UsrStoimsdos");

                                        var kol = this.get("Quantity");

                                            //}

                                        var res = ct / kol;

                                        this.set("Usrcenasdost", res);

                                    },

                onEntityInitialized: function() {

                                        this.callParent(arguments);

                                        this.calculatecenabezNDS();

                                    },

                calculatecenabezNDS: function() {

                                        var q = this.get("UsrbezNDS");

                                        var g = this.get("Quantity");

                                        var rez = q / g;

                                        this.set("Usrcenabez", rez);

                                    },.

                onEntityInitialized: function() {

                                        this.callParent(arguments);

                                        this.calculatebezNDS();

                                    },

                calculatebezNDS: function() {

                                        var ob = this.get("UsrStoimsdos");

                                        var dt = this.get("UsrbezNDS");

                                        var rez = ob - dt;

                                        this.set("UsrNDS", rez);

                                    },

                onEntityInitialized: function() {

                                        this.callParent(arguments);

                                        this.calculateNDS();

                                    },

                calculateNDS: function() {

                                        var st = this.get("UsrStoimsdos");

                                        var rez = st / 1.18;].

                                        this.set("UsrbezNDS", rez);

                                    },

                onEntityInitialized: function() {

                                        this.callParent(arguments);

                                        this.calculateStoim();

                                    },

                calculateStoim: function() {

                                        var amount = this.get("TotalAmount");

                                        var dost = this.get("Usrfff");

                                        var result = amount + dost;\

                                        this.set("UsrStoimsdos", result);

                                    }

            },

            rules: {},

            businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/

        };

});

 

Нравится

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

Алена, добрый день. Если под "добавление записи" вы подразумеваете сохранение, вам необходимо переопределить метод save или onSaved и вызвать в нем ваши методы. Если речь об открытии карточки новой записи - аналогичные действия для методы onEntityInitialized.

Кот Владимир Владимирович,

Можете подробно рассказать как мне это сделать?

Алена, да, конечно. Повторно посмотрев ваш код стало ясно что вы были на правильном пути. Ваши methods должны выглядеть так: 

onEntityInitialized: function() {
	this.callParent(arguments);
	this.calculateCena();
	this.calculateNDS();
	this.calculatebezNDS();
	this.calculatecenabezNDS();
	this.calculateStoim();
},
calculateCena: function() {
	var ct = this.get("UsrStoimsdos");
	var kol = this.get("Quantity");
		//}
	var res = ct / kol;
	this.set("Usrcenasdost", res);
},
calculatecenabezNDS: function() {
	var q = this.get("UsrbezNDS");
	var g = this.get("Quantity");
	var rez = q / g;
	this.set("Usrcenabez", rez);
},
calculatebezNDS: function() {
	var ob = this.get("UsrStoimsdos");
	var dt = this.get("UsrbezNDS");
	var rez = ob - dt;
	this.set("UsrNDS", rez);
},
calculateNDS: function() {
	var st = this.get("UsrStoimsdos");
	var rez = st / 1.18;].
	this.set("UsrbezNDS", rez);
},
calculateStoim: function() {
	var amount = this.get("TotalAmount");
	var dost = this.get("Usrfff");
	var result = amount + dost;\
	this.set("UsrStoimsdos", result);
}

 

Кот Владимир Владимирович,

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

Алена, та же  логика - вызвать все ваши методы чтобы установились необходимые аттрибуты, а потом сохранить:

save: function() {
	this.calculateCena();
	this.calculateNDS();
	this.calculatebezNDS();
	this.calculatecenabezNDS();
	this.calculateStoim();
	this.callParent(arguments);
}

 

Кот Владимир Владимирович,

Владимир.   

    "Usrcenabez": {

                // Тип данных колонки модели представления.

                    dataValueType: Terrasoft.DataValueType.FLOAT,

                // Массив конфигурационных объектов, определяющих зависимости колонки [UsrBalance].

                    dependencies: [

                        {

                        // Значение колонки [UsrBalance] зависит от значений колонок [Amount] 

                        // и [PaymentAmount].

                            columns: ["TotalAmount", "Usrfff", "Quantity", "Price", "DiscountPercent"],

                        // Метод-обработчик, который вызывается при изменении значения одной из колонок [Amount] 

                        // и [PaymentAmount].

                            methodName: "calculatecenabezNDS"

                        }

                    ]

                },

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

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

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

В таком случае рекомендуем посмотреть нет ли ошибок в консоли, скорее всего у вас значения согласно вашей бизнес-логики рассчитываются только если заполнены все необходимые поля. Если причину такого поведение обнаружить не удастся, напишите, пожалуйста, письмо на support@terrasoft.ru с описанием кейс воспроизведения и ссылкой на ваш сайт и этот пост.

Кот Владимир Владимирович,

можете мне подсказать что нужно сделать в странице

ProductSelectionModule  чтобы продукты рассчитывались сразу

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

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

Есть процесс, который при добавлении "Обращения" его изменяет и устанавливает "Группу ответственных".

Так вот если обращение создал портальный пользователь то данное поле не заполняется, как так?

Нравится

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

Добрый день, Евгений!

 

Речь о базовом процессе или о каком-то вашем кастомном? Если о кастомном, то нужно, как минимум, посмотреть на него. Можете выложить схему или скриншоты здесь, или обратится для анализа в техническую поддержку на адрес support@terrasoft.ru 

Адасюк Валерий Викторович,

Кастомный. Там все просто и тривиально, читаем обращение если оно соответсвует фильтру, то измени его.

Грубо говоря.

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

Под всеми работает, а под порталом не работает.

Евгений.,

А процесс вообще запускается? Поля, на основании которых должна быть установлена группа ответственных Сервис и сервисный договор заполнены в обращении? С какой ошибкой падает процесс (в логе можно посмотреть)? На каком элементе останавливается?

Адасюк Валерий Викторович,

он без ошибок падает, все выполняется. Но под портальным пользователем не заполняется поле, хоть и процесс пишет что все ок.

Евгений.,

В таком случае нужен доступ на среду с данным процессом для выявления причин. Напишите запрос на 

 support@terrasoft.ru с описанием проблемы и рамках технической поддержки проблема будет проанализирована и решена.

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

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

Есть проблема: не запускается сайт. Выдается следующая ошибка(на рисунке):

Ошибка сервера в приложении '/.

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

-----------------------------------------------

Работаю на ОС Windows 10

Но сайт нормально функционирует на ОС Windows Server 2012.

Может кто-то сталкивался с подобным?

Заранее благодарен.

Прикрепленные файлы

Нравится

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

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

 

Можете посмотреть решения подобных проблем на соответствующих профильных ресурсах в темах:

1. https://forums.asp.net/t/2116695.aspx?Unable+to+load+one+or+more+of+the…+

2. https://connect.microsoft.com/VisualStudio/feedback/details/607280/syst…

Если самостоятельно решить не удается, то просьба обратится с данным вопросом в техническую поддержку с целью анализа корректности установки и настройки web-сервера и компонентов IIS. 

 

Проблему решил установкой net framework 4.7. До этого была версия 4.6.2.

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

Все пользователи системы создаются через раздел контакты.

В системе существуют поля (например: ответственный - значение поля выбирается из сотрудников компании). В случае если сотрудник увольняется, то в пользователях системы снимается галка "Активный" пользователь.

Однако при выборе ответственного неактивный сотрудник (уволенный) все равно отображается.

Удалять пользователей из системы нельзя, чтобы сохранить историю. 

Как отфильтровывать значения в поле ответственный только по активным пользователям? 

Спасибо

Нравится

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

Чтобы при выборе ответственного отображались только неуволенные сотрудники, нужно добавить бизнес-правило на странице.

Здравствуйте, Екатерина!

Данный кейс можно реализовать с помощью бизнес-правил. Более детально Вы можете ознакомиться в статье: https://academy.terrasoft.ru/documents/studio/7-11/nastroyka-biznes-pra…

А глобально нельзя изменить это бизнес-правило? Так как отфильтровывать хочется во всех страницах

Здравствуйте, Екатерина 

Данный вопрос можно решить добавлением атрибута к Вашему поля, типа

attributes: {

            /**

            * Current user contact.

            */

            "ContLOOKUP": {

                lookupListConfig: {

                    filter: function() {

                        var filterGroup = this.Terrasoft.createFilterGroup();

                        var notExistsFilter = this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "[SysAdminUnit:Contact].Active", 1);

                        filterGroup.addItem(notExistsFilter);

                        return filterGroup;

                    }

                }

            }

        },



где "ContLOOKUP" Ваше кастомное поле в схеме "...PageV2" пакета "Custom"

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

Добрый день!

Создал кастомную страницу в разделе Активности, добавил деталь Файлы и ссылки активности. В данный момент в данной детали нет возможности настроить колонки и отсортировать файлы (например, по дате создания).

Можно ли как-то добавить доп. колонки к данной детали и настроить сортировку файлов?

Нравится

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

Попробуйте переопределить метод getGridDataColumns

 

getGridDataColumns: function () {
                var config = this.callParent(arguments);
 
                config["Название колонки"] = {
                    path: "Название колонки",
                    orderPosition: 1,
                    orderDirection: this.Terrasoft.OrderDirection.ASC
                };
 
 
                return config;
            },

 

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

На Академии присутствует детальная инструкция: https://academy.terrasoft.ru/documents/technic-sdk/7-11/otobrazhenie-dopolnitelnyh-kolonok-na-detali-fayly-i-ssylki

Проводили данный опыт давным-давно.

Все что вам необходимо это добавить данный метод

getGridSettingsMenuItem: function() {
	return this.getButtonMenuItem({
		Caption: "Настройка колонок",
		Click: {"bindTo": "openGridSettings"}
	});
}

Таким образом вы сможете получить доступ к стандартной настройке колонок в этой детали)

Сортировка настраивается в методе:

getGridDataColumns: function() {
	return {
		"Id": {path: "Id"},
		"SysAdminUnit": {path: "SysAdminUnit"},
		"SysAdminUnit.SysAdminUnitTypeValue": {path: "SysAdminUnit.SysAdminUnitTypeValue"},
		"Name": {path: "KmName", orderPosition: 1, orderDirection: Terrasoft.OrderDirection.DESC}
	};
}

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

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

Добрый день. При удалении контрагента "Наша компания" перестали создаваться счета. Выяснилось что проблема заключается в наличии в таблице Invoice поля SupplierId которое всегда содержит ID удалённого контрагента "Наша компания". В самой карточке счёта это поле не отображается, не видно его и через мастер раздела.

В схеме InvoicePageV2 нигде не фигурирует SupplierId, операция remove также не помогает.

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

Нравится

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

Иван, вы можете изменить свойство "Значение по умолчанию" у этого поля в объекте через конфигурацию.

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

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

Помогите пожалуйста

В разделе "Контрагенты", перестала открывается страница "Клиенты".

При попытке войти в карточку записи типа "Клиент" или при открытии мастера разделов по странице "Клиенты". Страница зависает и выводится ошибка:

ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:1681 Uncaught TypeError: viewModel.getColumnByName is not a function
    at i.findViewModelColumn (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:1681)
    at i.generateControlLabel (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:1599)
    at i.generateModelItemLabel (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:1451)
    at i.generateModelItem (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:1470)
    at i.generateStandardItem (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:574)
    at i.generateItem (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:461)
    at i.generateGridLayoutItem (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:697)
    at i.<anonymous> (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:672)
    at Object.Terrasoft.utils.array.each (all-combined.js:262)
    at i.generateGridLayout (ViewGeneratorV2.js?hash=348b01047b31481ca08cae6d1c7bf538:668)

 

Перегенерация и перекомпиляция непомогает.

Версия системы не обновлялась в последнее время

Нравится

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

зачистку redis с остановкой и повторным запуском application pool делали?

Максим Цынгаев,

Нет, это не дает никакого результата

Роман, судя по callstack'у ошибка либо в клиентской схеме этой страницы, либо же некорректна замещена ViewModel. Тут нужна отладка, рекомендуем обратиться в официальную поддержку support@terrasoft.ru с указанием проблемного сайта.

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

Всем добрый день.

Кастомизировал стандартный механизм связей, добавив справочное поле "Дебитор"

https://community.terrasoft.ru/questions/dobavlenie-svoego-pola-v-statn…

Вроде все работает:

Но по умолчанию в момент открытия миникарточки, элемент "связи" выводит только два поля: "Контрагент" и "Продажа". У меня задача вывести еще сюда поле "Дебитор".

Собственно искал соответсвующие методы  в обьектах:

EntityConnectionLinksUtilities  и ActivityMiniPage

Но че-то не нашел(  Может кто сталкивался?

 

Изображение удалено.

Нравится

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

Здравствуйте, Роман!

Ниже приведен алгоритм по созданию и привязки родительской и дочерней активности (для решения данной задачи необходим доступ к БД):

1. Необходимо узнать Uid колонки «ActivityConnection» (колонка привязка активностей) в объекте «Activity» (для дальнейших действий). Узнать можно через метаданные (Рис. 2). Uid является уникальным.

 

Рис. 1

2. Далее необходимо добавить запись в таблицу «EntityConnection» с помощью команды INSERT INTO, где SysEntitySchemaUId = '2bbd4d7c-2727-47d6-bde1-311fdbbbb97e' (это ID схемы активностей) и ColumnUId = Uid колонки, который я описал во 1 пункте (например, '2bbd4d7c-2727-47d6-bde1-311fdbbbb97e').

 

Пример SQL запроса:

Insert into EntityConnection (SysEntitySchemaUId, ColumnUId)&nbsp;values ('C449D832-A4CC-4B01-B9D5-8A12C42A9F89',&nbsp;'2bbd4d7c-2727-47d6-bde1-311fdbbbb97e')

 

3. Затем заместить схему «EmailPageV2» и вставить метод «setAdditionalDefValues» (Рис. 2).

 

 

Рис. 2

 

setAdditionalDefValues:&nbsp;function(openCardConfig, next) {

&nbsp;&nbsp;&nbsp;&nbsp;openCardConfig.defaultValues.push({

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;"ActivityConnection",

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value:&nbsp;this.get("Id")

&nbsp;&nbsp;&nbsp;&nbsp;});

&nbsp;&nbsp;&nbsp;&nbsp;next();

}

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

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

 

Подскажите, пожалуйста, как с детали связи в разделе активности убрать поля заказ, документы.

 

Заранее спасибо.Изображение удалено.

 

Нравится

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

Насколько я помню вам в таблицу EntityConnection. Там находятся связи между объектом-колонкой. Остаётся удалить ненужные

Варфоломеев Данила, а как можно удалить если объект в предустановленном пакете? 

Смолина Екатерина Михайловна,

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

Максим Цынгаев пишет:

вот только тут надо определить, какие именно строки надо удалять

записи в таблице EntityConnection имеют id 49BAB763-74C9-4AE7-9EEA-499D6C2F815A и F41CCA80-B81A-46F6-B120-0C03D50FFCC7 для "Документа" и "Заказа" соответственно.

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