Добрый день!

Есть такая задача. 

Клиент хочет переносить в печатную форму договора куски большие текста (это блоки разделов договора) из текстовых полей карточки договора. При создании  договора автоматом  мы записываем этот текст в  поля, учитывая абзацы по тексту. Форматирование здесь ключевое, т.к. без форматирование печатная форма договора будет не корректная. 

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

Или можно учесть как то абзац при такой схеме?

Спасибо!

Нравится

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

Если мы говорим, о стандартных печатных формах Word, то все форматирование можно настроить в шаблоне печатной формы.

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

Откуда клиент хочет переносить блоки с документов Word ? Тогда лучше на основе этого документа сделать шаблон или штатными средствами или самостоятельно вставить в нужніх местах макроподстановки, открыть на чтение прочитать документ и заменить макроподстановки в шаблоне на нужные значения!

Алла Савельева,

я дам узкий пример. Если в поле Примечание  применить функцию список например, то в печатной форме мы увидим список с какими-левыми символами (скрин прилагаю).

Григорий Чех, я дам узкий пример. Если в поле Примечание  применить функцию список например, то в печатной форме мы увидим список с левыми символами (скрин прилагаю).

Это не «какие-то левые символы», а HTML-теги форматирования текста. Теги для создания списка: li и ol.

Зверев Александр,

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

В веб-интерфейсе системы теги отображаются в нужном формате. При переносе в печатную форму текст нужно адаптировать под их формат. Например, вместо настоящего списка имитировать маркеры вставкой символа «•».

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

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

В процессе настройки системы обнаружилась проблема. В журнале процессов регулярно появляются ошибки синхронизации почты от имени пользователя с правами администратора системы. Настроено несколько почтовых ящиков для групп пользователей, владелец Supervisor. Лишние тестовые ящики удалены. Есть ли возможность отредактировать задания на синхронизацию, убрать лишние задания?

Тест ошибки в журнале:

System.ArgumentException: user does not have mail account

   в Terrasoft.Core.Process.SyncImapMail.ScriptTask1Execute(ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Нравится

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

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



Для решения необходимо выполнить следующий скрипт:

delete from QRTZ_TRIGGERS 
where (TRIGGER_GROUP = 'imap' or TRIGGER_GROUP = 'exchange')
and (TRIGGER_NAME like '%UId%')

Где UId - пользователя (не контакта) у которого возникает ошибка.

Спасибо, проблема решена!

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

Доброго времени!

Возникла необходимость фильтрации записей в детали "UsrProductInAccount" раздела Контрагенты "Account". Данная деталь отображена в манифесте

"Models": {
        "UsrProductInAccount": {
            "RequiredModels": [
                "UsrProductInAccount",
                "Account",
                "Product",
                "SocialMessage"
            ],
            "ModelExtensions": [],
            "PagesExtensions": [
                "UsrMobileUsrProductInAccountActionsSettingsFieldForceWorkplace",
                "UsrMobileUsrProductInAccountGridPageSettingsFieldForceWorkplace",
                "UsrMobileUsrProductInAccountRecordPageSettingsFieldForceWorkplace",
                "UsrMobileProductInAccountConfig"
            ]
        }
    }

Созданный модуль "UsrMobileProductInAccountConfig" отобразил в манифесте и прописал сам фильтр. Фильтр исключает все записи с заполненным реквизитом "UsrDateSale".

Terrasoft.sdk.Module.addFilter("UsrProductInAccount", Ext.create("Terrasoft.Filter", {
    name: "UsrProductInAccountFilter",
    type: Terrasoft.FilterTypes.Group,
    subfilters: [
            Ext.create("Terrasoft.Filter", {
                property: "UsrDateSale",
                    // Оператор отрицания
                isNot: false,
                    // Не заполнено
                value: null
            })
        ]
    }));

Выполняю синхронизацию. Результат не получен. В чём может быть причина?

Спасибо.

Нравится

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

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

Это не раздел (Terrasoft.sdk.Module), а стандартная деталь. Соответственно, для нее нужно использовать Terrasoft.sdk.Details. А именно нужно добавить в схему UsrMobileAccountModuleConfig след. код:

 
Terrasoft.sdk.Details.addFilter("Account", "UsrSchema4DetailStandardDetail", {
   property: "UsrDateSale",
   isNot: false,
   value: null
});

В результате к существующей фильтрации детали по родительской записи (по контрагенту) добавится необходимая клиенту фильтрация по колонке UsrDateSale.

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

Добрый день!

Хочу запускать бизнес-процесс, результатом которого будет отправка письма пользователю.

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

Подскажите, как наименее затратно это можно реализовать?

Спасибо!

Нравится

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

Письмо - это активности с типом Email

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

Письмо - это активности с типом Email

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

Григорий, спасибо за комментарий.

1. Рекомендованное расширение будет работать в Sales.Team?

2. Т.е. самый незатратный способ - js (выборка, фильтрация, подготовка текста) с последующей передачей результата в тело письма?

Курятов,

То что вы описали можно сделать и через js  или комбинацию js + вєб сервис. На первый взгляд БП там не нужны, если вам конечно  не нужно перехватывать события типа изменения/создания/удаления записи. А так как всегда все зависит от деталей тз.

Насчет расширения если ві ведете разработку то нужно создать тестовый стенд, вот на нем и протестируете расширение перед переносом в продакшен. У меня под рукой нет Sales но по описанию вроде должно работать.

 

 

 

 

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

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

Помогите, пожалуйста, разобраться с проблемой, как объединить фильтрацию и сортировку в oData?

фильтрация - работает

http://url/0/ServiceModel/EntityDataService.svc/ContactCollection?$sele…

сортировка- работает

http://1url/0/ServiceModel/EntityDataService.svc/ContactCollection?$select=Name&$orderby=Name

сортировка и фильтрация- НЕ работает

http://url/0/ServiceModel/EntityDataService.svc/ContactCollection?$sele…

выходит ошибка

 

4

The query parameter '$orderBy' begins with a system-reserved '$' character but is not recognized.

The query parameter '$orderBy' begins with a system-reserved '$' character but is not recognized.

System.Data.Services.DataServiceException

at System.Data.Services.HttpContextServiceHost.VerifyQueryParameters() at System.Data.Services.DataServiceHostWrapper.VerifyQueryParameters() at System.Data.Services.DataService`1.ProcessIncomingRequestUri() at System.Data.Services.DataService`1.HandleRequest()

 



не могу понять что не так.

Нравится

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

Проверьте такой вариант у меня ошибки нет

http://127.0.0.1:520/0/ServiceModel/EntityDataService.svc/ContactCollection?$select=Name&$orderby=Name&$filter=Phone ne '12'

 

Григорий Чех,



вместо амперсантов ставить запятые? все выражение взять в скобки?

не очень понимаю что нужно изменить

http://url/0/ServiceModel/EntityDataService.svc/ContactCollection?($sel…; - вот так не работает, а с запятыми - просто не фильтрует

 

Проверьте такой вариант у меня ошибки нет

http://127.0.0.1:520/0/ServiceModel/EntityDataService.svc/ContactCollection?$select=Name&$orderby=Name&$filter=Phone ne '12'

 

Григорий Чех, да, спасибо, заработало

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

Коллеги, добрый день! С чем может быть связана проблема, что при запуске импорта (12, 5 тыс строк всего то) импорт просто висит часами на 0% и ничего не происходит.

Маленькими порциями (10) этот пакет заходит.

 

 

Нравится

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

Найдите логи импорта (при необходимости)  включите. Если сами не поймете что там то бросайте их сюда, на глазок вам навряд ли кто то сможет помочь. Если не знаете как подробнее опишите что вы делаете. (Типа через какой механизм  и как импортируете.....)

Найдите логи импорта (при необходимости)  включите. Если сами не поймете что там то бросайте их сюда, на глазок вам навряд ли кто то сможет помочь. Если не знаете как подробнее опишите что вы делаете. (Типа через какой механизм  и как импортируете.....)

Если маленькими порциями импортуется то возможно на какой то записи затыкается? Нужно смотреть логи импорта и потом возможно дебажится. Или внимательно просмотреть источник данных для импорта, скорее всего эксель, может что то бросится в глаза!

И просмотрите рекомендации по подготовке файла для импорта данных

 

 

 

Григорий Чех,

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

чется).

 

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

Статья в академии: 

https://academy.terrasoft.ru/documents/technic-sdk/7-12/kak-polnostyu-z…



Поля блокируются, всё хорошо.

НО при открытии страницы в мастере раздела получаю ошибку: https://yadi.sk/i/Iw8x4ARU_TBGbw

Нравится

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

Первое, что приходит на ум, это необходимость проверить на странице наличие следующего:

 

    details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
    diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
    businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/
​​​​​​​    modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,

Хотя, то, что у вас отображено, скорее связано с чем-то другим

Литвинко Павел,

Дизайнер не может поменять видимость. Он отрабатывает только то что задано в diff и onEntityInitialized. Т.е. если у вас программно (не правилами) скрыты все поля на карте по умолчанию, то конечно вот так и будет. Я в свое время писал на поддержку пожелание об исключении кастомной логики из дизайнера... но увы. 

Может быть, представители службы поддержки нам подскажут, реализовано ли данное пожелание Дмитрия Степанова в новой версии 7.12.4, либо уже есть понимание, в какой из следующих версий и когда ориентировочно оно будет реализовано?

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

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

Здравствуйте! Для изменения детали, например чтобы вывести на страницу какое-нибудь новое поле, я всегда пользовался таким способом(Скриншот)

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

Нравится

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

Вам нужно открыть страницу редактирования нужной детали в Конфигурации и сделать как описано здесь, в инструкции под пунктом №4 

https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-novo…



Пример:

Для детали "Ваша деталь" - UsrCustomObject

Открываем UsrCustomObjectPage

В раздел diff добавляем код

{
		"operation": "insert",
		"name": "Название поля, пишите так же как называется в объекте",
		"values": {
			"layout": { //отвечает за расположения поля на странице, в академии можете почитать подробнее
				"colSpan": 12,
				"rowSpan": 1,
				"column": 12,
				"row": 4,
				"layoutName": "Header"
			},
			"bindTo": "Название поля в объекте",
			"enabled": true
		},
		"parentName": "Header",
		"propertyName": "items",
		"index": 1
	},

 

Вам нужно открыть страницу редактирования нужной детали в Конфигурации и сделать как описано здесь, в инструкции под пунктом №4 

https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-novo…



Пример:

Для детали "Ваша деталь" - UsrCustomObject

Открываем UsrCustomObjectPage

В раздел diff добавляем код

{
		"operation": "insert",
		"name": "Название поля, пишите так же как называется в объекте",
		"values": {
			"layout": { //отвечает за расположения поля на странице, в академии можете почитать подробнее
				"colSpan": 12,
				"rowSpan": 1,
				"column": 12,
				"row": 4,
				"layoutName": "Header"
			},
			"bindTo": "Название поля в объекте",
			"enabled": true
		},
		"parentName": "Header",
		"propertyName": "items",
		"index": 1
	},

 

Литвинко Павел,

Павел, Спасибо!

 

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

Нужно при создании лида проверить есть ли уже компания комбинацией БИН и города. Сделал через валидацию, данные читаются все с базы нормально, но проблема в правильном построении callback функции, так как JS пока запускает проверку в базе уже отвечает return в валидацию. PsCode - это БИН поле, City - это города поле

setValidationConfig: function() {
	this.callParent(arguments);
	this.addColumnValidator("PsCode", this.validateCodePlusCity);
},
validateCodePlusCity : function() {
	var invalidMessage = this.get("Resources.Strings.CodePlusCityErrorMessage");
	var code = this.get("PsCode");
	var city = this.get("City");
	if (!code) {
		code = "";
	}
	if (!city) {
		city = "";
	}
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
	esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"Code", code));
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"City.Id", city.value));
	esq.getEntityCollection(function(result) {
		if (result.success) {
			invalidMessage = "";
		}
	}, this);
	return {
		invalidMessage: invalidMessage
	};
}

 

Нравится

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

setValidationConfig: function() {
	this.callParent(arguments);
	this.validateCodePlusCity(function(invalidMessage) {
		//Здесь доступно значение invalidMessage
		this.addColumnValidator("PsCode", invalidMessage);
	}, this);
 
},
validateCodePlusCity : function(callback, scope) {
	var invalidMessage = this.get("Resources.Strings.CodePlusCityErrorMessage");
	var code = this.get("PsCode");
	var city = this.get("City");
	if (!code) {
		code = "";
	}
	if (!city) {
		city = "";
	}
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
	esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"Code", code));
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"City.Id", city.value));
	esq.getEntityCollection(function(result) {
		if (result.success) {
			invalidMessage = "";
			Ext.callback(callback, scope, [invalidMessage]);
		}
	}, this);
}

 

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

Те обработка полученных в запросе данных идет асинхронно!

 

 

 

 

Попробуйте примерно так:

setValidationConfig: function() {
	this.callParent(arguments);
	this.validateCodePlusCity(function(invalidMessage) {
		//Здесь доступно значение invalidMessage
		this.addColumnValidator("PsCode", invalidMessage);
	}, this);
 
},
validateCodePlusCity : function(callback, scope) {
	var invalidMessage = this.get("Resources.Strings.CodePlusCityErrorMessage");
	var code = this.get("PsCode");
	var city = this.get("City");
	if (!code) {
		code = "";
	}
	if (!city) {
		city = "";
	}
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Account"});
	esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"Code", code));
	esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
		"City.Id", city.value));
	esq.getEntityCollection(function(result) {
		if (result.success) {
			invalidMessage = "";
			Ext.callback(callback, scope, [invalidMessage]);
		}
	}, this);
}

 

Если вам нужно валидейтить перед сохранением то имхо лучше использовать asyncValidate Пример ниже callback нужно передать в esq.getEntityCollection.  Если нужно проверять при изменении, можно создать виртуальную колонку и при смене города или БИН менять ее значение в зависимости от результата проверки. А в  setValidationConfig проверять результат проверки уникальности города из виртуальной колонки. Если не получится пишите.

asyncValidate: function(callback, scope) {
    this.callParent([function(response) {
        if (!this.validateResponse(response)) {
            return;
        }
        Terrasoft.chain(
            function(next) {
                this.myValidationMethod(function(response) {
                    if (this.validateResponse(response)) {
                        next();
                    }
                }, this);
            },
            function() {
                callback.call(scope, response);
            },
        this);
    }, this]);
}

 

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

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

Добрый день.

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

Нравится

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

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

О какой рассылке вы спрашиваете, какой процесс?

Григорий Чех, речь об рассылках которые создаются через раздел E-mail https://academy.terrasoft.ru/documents/marketing/7-12/razdel-email?docu…

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

Григорий Чех, спасибо. Система в облаке. 

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