Добрый день! Есть ли возможность настроить/изменить механизм импорта из Excel таким образом, чтобы в записях, помеченных как дубли, не переписывались существующие значения колонок, а только заполнялись те, которые ранее были пустыми?

Нравится

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

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

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

Как вариант, писать свой пользовательский импорт.

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

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

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

Как вариант, писать свой пользовательский импорт.

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

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

У нас в системе был БП, что обновлял страницу (посылал сообщение на клиент) Вчера все работало, сегодня в обновленной версии не обновляет страницу в консоле ошибка, что-то про Decode

h {sourceClass: "Ext.JSON", sourceMethod: "decode", msg: "You're trying to decode an invalid JSON String: ReloadMessage", message: "You're trying to decode an invalid JSON String: ReloadMessage"}

 

Это у нескольких клиентов. Пока ТС думает, может кто подскажет как решить самостоятельно?

 

В самой схеме такой код на прием сообщения

init: function() {

                this.callParent(arguments);

                this.subscriptionFunction();

            },

subscriptionFunction: function() {

Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,

this.bpListenerMessage, this);

},

bpListenerMessage: function(scope, message) {

if (!message || message.Header.Sender !== "Reload") {

return;

}

var message2 = message.Body;

if (!this.Ext.isEmpty(message2) && message2 === "ReloadMessage") {

this.reloadEntity();

}

},

destroy: function() {

this.Terrasoft.ServerChannel.un(Terrasoft.EventName.ON_MESSAGE, this.bpListenerMessage, this);

this.callParent(arguments);

}

 

А в бп в скрипте такой код:

var connection = Get("UserConnection");

Terrasoft.Configuration.MsgChannelUtilities.PostMessage(connection, "Reload", "ReloadMessage");

return true;

 

Нравится

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

Если в скриптах ничего не меняли и перестало работать после обновления, причина может быть в отключившихся веб-сокетах. Как их настраивают, см. тут.

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

Клиент в облаке. У другого клиента аналогичная проблема. У других партнеров аналогичные кейсы.

Получена информация о причине и способе исправления.

Для этого: 

1. В процессе в элементе ScriptTask экранировать кавычками ReloadMessage:

Terrasoft.Configuration.MsgChannelUtilities.PostMessage(connection, "Reload", "\"ReloadMessage\"");

2. В схеме строчку заменить на:

var message2 = Terrasoft.decode(message.Body);

Если message не json, то происходит исключение. В новой версии это исключение стал перехватывать zone.js, поэтому не срабатывала подписка:

Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,
                            this.bpListenerMessage, this);

Сейчас разработчики решают,  будут ли что-то делать в связи с этим. 

Разработчики обнаружили первопричины проблемы. Она будет исправлена в версии 7.17.2, на текущий же момент для исправления достаточно вместо упомянутых выше правок установить пакет из файла. Пакет с фиксом актуален для всех версий 7.17.0.

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

Добрый день! Не получилось накатить пакет на прод и откатить его же. Валятся ошибки:

 

Ошибка установки данных "SysModuleEdit_OmniChat" из пакета "OmnichannelMessaging". UId 79c8d730-1a6e-4467-88a2-dc33cf681d5e: The UPDATE statement conflicted with the FOREIGN KEY constraint "FKfswQzuMwAT8Bnlby6UilfQqmU". The conflict occurred in database "mod", table "dbo.SysModuleEntity", column 'Id'.



Ошибка установки данных "SysModule_OmniChat" из пакета "OmnichannelMessaging". UId d338d0b8-eb04-42ab-8789-f6a3ace6e8eb: The UPDATE statement conflicted with the FOREIGN KEY constraint "FKsUTsBBLbO1DA4j0DdV9M0R0UW0U". The conflict occurred in database "mod", table "dbo.SysModuleEntity", column 'Id'.

 

Можете подсказать/посоветовать как поступить, куда копать?

Всё заработало просто - накатываем пакет и, если возникает ошибка, не откатываем.

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

Добрый день.

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

Невозможно по частичному вхождению искать.

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

Данные моменты хотелось бы улучшить.

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

Александр, спасибо за обратную связь, уже зарегистрирована сложность в использовании функциональности «При поиске кода с помощью Ctrl+F неудобно переходить на следующий элемент, так как Enter не работает».

 

Переключаться на следующий элемент сейчас можно с помощью Ctrl+G, особенность связана с редактором кода.

 

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

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

Добрый день!

 

У нас две компании, соответственно договоры мы заключаем как от одной, так и от другой.

Для различия указываем в номере или АМ, или БМ вручную.

Вопрос: есть ли возможность как-то автоматически нумеровать по порядковому номеру следующего договора в зависимости от компании, которая заключает договор?

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

Нравится

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

Добрый день!

В вашем случае можно использовать дополнение Numerator for Creatio, либо реализовать логику самому: например, через бизнес-процесс с сигналом [Создание договора], который будет изменять номер в зависимости от компании

Добрый день!

В вашем случае можно использовать дополнение Numerator for Creatio, либо реализовать логику самому: например, через бизнес-процесс с сигналом [Создание договора], который будет изменять номер в зависимости от компании

Добрый день.

 

Пользовательскими настройками этого сделать не получится, только через изменение программного кода.

 

Вам нужно переопределить метод:

	onEntityInitialized: function() {
		if ((this.isAddMode() && this.Ext.isEmpty(this.get("Number"))) || this.isCopyMode()) {
			this.getIncrementCode(function(response) {
				this.set("Number", response);
			});
		}
		this.callParent(arguments);
	}

Внутри функции getIncrementCode нужно добавить обработку условия от какой компании заключается договор и в зависимости от компании добавлять нужную приставку:

this.set("Number", response + "/" + postfix);

 

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

Добрый день!

Возник вопрос по использованию Advanced excel reports for Creatio

А именно правильно указывать формат колонки для числовых значений

Вот что говорит руководство

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

Системная настройка выглядит так:

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

Настройки отчета

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

Результат:

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

Что я делаю не так?)

Нравится

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

Добрый день.

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

Например, у меня в отчете есть поле с типом 'Дата/время'. По умолчанию оно будет выводиться в том формате, который указан в системной настройке 'Формат колонки с типом "Дата-время"' - 'dd.MM.yyyy HH:mm', но также я могу установить для этой колонки в конкретном отчете формат колонки в виде 'dd.MM.yyyy'.

А, например, для дробного поля Вы можете указать формат '0.000', тогда, как в системной настройке у Вас указан формат '0.00'. И таким образом, в этом отчете для этого дробного поля будет выводиться не 2, а 3 знака после запятой.

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

Добрый день.

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

Например, у меня в отчете есть поле с типом 'Дата/время'. По умолчанию оно будет выводиться в том формате, который указан в системной настройке 'Формат колонки с типом "Дата-время"' - 'dd.MM.yyyy HH:mm', но также я могу установить для этой колонки в конкретном отчете формат колонки в виде 'dd.MM.yyyy'.

А, например, для дробного поля Вы можете указать формат '0.000', тогда, как в системной настройке у Вас указан формат '0.00'. И таким образом, в этом отчете для этого дробного поля будет выводиться не 2, а 3 знака после запятой.

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

Спасибо, попробую.

Еще вопрос, очень часто при формировании отчета все зависает и бывает, что завершается ошибкой (скрин) , может тоже какие нибудь настройки не такие?

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

 

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

Лазоренко Ирина,

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

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

Всем салют!

Не получается авторизоваться пост запросом из этой ссылки:

import requests
import time
 
if __name__ == "__main__":
    try:
        s = requests.session()
        headers = {
            
            'Content-Type': 'application/json',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
            'ForceUseSession': 'true'
        }
        data={'UserName': 'Login', 'UserPassword': 'Password'}
        p = s.post('https://mysite.ru/ServiceModel/AuthService.svc/Login', headers=headers, data=data)
        s.cookies
        print(p.text)
    except Exception as e:
            print(f"\n\n\n\n{e}\n\n\n")
        
time.sleep(50)

Возвращает такую ошибку:

requests.packages.urllib3.connectionpool - DEBUG - "POST /Login HTTP/1.1" 400 3069
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Request Error</title>
  </head>
  <body>
    <div id="content">
      <p class="heading1">Request Error</p>
      <p>The server encountered an error processing the request. The exception message is 'There was an error checking start element of object of type Core.ServiceModelContract.AuthToken. Encountered unexpected character 'U'.'. See server logs for more details. The exception stack trace is: </p>
      <p>   at System.Runtime.Serialization.XmlObjectSerializer.IsStartObjectHandleExceptions(XmlReaderDelegator reader)
   at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ReadObject(Message message)
   at System.ServiceModel.Dispatcher.SingleBodyParameterDataContractMessageFormatter.ReadObject(Message message)
   at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p>
    </div>
  </body>
</html>

Нравится

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

Решено!

Вдруг кому пригодится решение:





p = s.post('https://mysite.ru/ServiceModel/AuthService.svc/Login', headers=headers, data=json.dumps(data))        

Решено!

Вдруг кому пригодится решение:





p = s.post('https://mysite.ru/ServiceModel/AuthService.svc/Login', headers=headers, data=json.dumps(data))        

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

Пытаюсь перенести настройки реестра деталей на другую среду 

Мой алгоритм действий такой

В данных выбираю объект sysprofiledata с типом установки установка

Далее на вкладке привязка данных по ключу ищу детали для фиксации настройки реестра, далее сохраняю, фиксирую изменения и заливаю на целевую среду,   но настройки реестра не применяются 

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

Раньше при фиксации изменений настройек реестра было больше колонок для выбора, а именнно нету данные и objectdifference, которые ставил обязательно для обновления)

Версия на которой фиксирую изменения 7 17 , целевая среда на 7 16

 

Нравится

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

Дима, больше всего смущает это: 

Версия на которой фиксирую изменения 7 17 , целевая среда на 7 16

Лучше всего переносить между идентичными версиями системы, в крайнем случае — от старой на новую, но не наоборот, из новой в старую, поскольку такое использование никто не тестировал. Если на базах разных версий привести содержимое поля ObjectData в SysProfileData у аналогичных записей к текстовому виду при помощи «cast([ObjectData] as varchar(max))», видно различия в параметрах и формате информации о столбцах. Вероятно, дело в этом. Более подробно можно сказать, сравнивая конкретное наполнение поля у Вас: дело в формате, дубле записей или ещё чём-то.

дев и прод еще не обновили, поэтому он на 16

Но меня больше смущает то. куда пропали колонки данные и objectdifference  в новой версии ?

У меня в 7.17 есть и [ObjectData], и [ObjectDifference] (в последней всегда null или «0x», и в 7.16, и в 7.17).

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

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

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

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

Добрый день!

 

Я удаляю письмо (Активность типа Email) из стандартного БП, созданного в дизайнере бизнес процессов. 

 

Есть ли возможность из БП обновить коммуникационную панель? Сейчас письмо из неё пропадает только после обновления страницы. 

Нравится

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

Да. Сам так делаю примерно таким методом в схеме CommunicationPanelEmailSchema, а из БП шлю сообщение соответствующее:

onMyBpFinish: function(scope, message) {
    if (!message || message.Header.Sender !== "UpdateEmailHistory") {
        return;
    }
    var ID = message.Body;
    var collection = this.get("EmailCollection");
    var foundItem = collection.collection.items.find(item =&gt; item.id === ID);
    foundItem.set("IsNeedReload", false);
    this.reloadEmailsData([ID]);
    collection.remove(foundItem);
}

Скрипт в конце БП: 

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var EmailID = Get&lt;string&gt;("EmID");
EmailID.ToString();
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(UserConnection,"UpdateEmailHistory", EmailID);
return true;

Возможно, можно как-то красивее и изящней, но вроде этот метод работает и наша ТП довольна результатом

Да. Сам так делаю примерно таким методом в схеме CommunicationPanelEmailSchema, а из БП шлю сообщение соответствующее:

onMyBpFinish: function(scope, message) {
    if (!message || message.Header.Sender !== "UpdateEmailHistory") {
        return;
    }
    var ID = message.Body;
    var collection = this.get("EmailCollection");
    var foundItem = collection.collection.items.find(item =&gt; item.id === ID);
    foundItem.set("IsNeedReload", false);
    this.reloadEmailsData([ID]);
    collection.remove(foundItem);
}

Скрипт в конце БП: 

var userConnection = Get&lt;UserConnection&gt;("UserConnection");
var EmailID = Get&lt;string&gt;("EmID");
EmailID.ToString();
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(UserConnection,"UpdateEmailHistory", EmailID);
return true;

Возможно, можно как-то красивее и изящней, но вроде этот метод работает и наша ТП довольна результатом

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

Добрый день! Подскажите пожалуйста, как можно реализовать запуск бизнес-процесса на основании фильтрации в разделе? 



К примеру:

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



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

Нравится

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

под бизнес-задачу не подойдет готовое решение https://marketplace.terrasoft.ru/app/mass-updating-creatio? вроде бы выполняется то, что описано у вас в задаче

под бизнес-задачу не подойдет готовое решение https://marketplace.terrasoft.ru/app/mass-updating-creatio? вроде бы выполняется то, что описано у вас в задаче

И по сигналу на изменение этого поля можно запустить процесс 

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

 

После выполнения фильтрации выбрать действие «Выбрать несколько записей», затем действие «Выбрать все» (это выберет не все в разделе, а именно отфильтрованные), а затем запустить ранее подключенный в мастере раздела БП для этих записей:

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

Когда нажимаю кнопку сохранить страница редактирования детали закрывается

Как я понял из постов в академии мне надо переопределеить метод onSilentSaved я пробовал несколько примеров, но пока не один не дал должного результата

Нравится

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

            save: function(config) {

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

            }

            save: function(config) {

                config = config || {};

                config.isSilent = true;

                this.callParent([config]);

            }

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