Добрый день, занимаюсь обновлением creatio sales c 7.16 на 7.18,
столкнулся с проблемой конфигурирования сервиса выгрузки дистрибутивов.
Файл downloader.json настроил следующим образом:
{
    "WebRootDirectory": "C:\inetpub\wwwroot\Sales",
    "WorkDirectory": "C:\copy",
    "Site": "название из IIS",
    "Product": "SalesEnterprise",
    "DbEngineType": "PostgreSQL",
    "VersionBuild": "7.16.1.2135",
    "SkipBinary": "true",
    "ConnectionString": "Server=1.2.3.4;Port=5432;Database=crm;User ID=postgres;password=12345;Timeout=500;CommandTimeout=400;MaxPoolSize=1024;",
    "CurrentSchemaName": "public"
}
Часть данных в конфиге и логах обезличил.
Папка с UpdateService находится в корне диска с дистрибутивом на сервере.
Вот лог ошибок:

ConvertFrom-Json : Нераспознанная escape-последовательность. (29): {
        "WebRootDirectory": "C:\inetpub\wwwroot\Sales",
        "WorkDirectory": "C:\copy",
        "Site": "название из IIS",
        "Product": "SalesEnterprise",
        "DbEngineType": "PostgreSQL",
        "VersionBuild": "7.16.1.2135",
        "SkipBinary": "true",
        "ConnectionString": "Server=1.2.3.4;Port=5432;Database=crm;User ID=postgres;password=12345;Timeout=50
0;Comm
andTimeout=400;MaxPoolSize=1024;",
        "CurrentSchemaName": "public"
}
C:\UpdaterService\Downloader.ps1:407 знак:23
+     $config = $content | ConvertFrom-Json
+                          ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

Add-Member : Не удается привязать аргумент к параметру "InputObject", так как он имеет значение NULL.
C:\UpdaterService\Downloader.ps1:463 знак:18
+         $environment | Add-Member "Locale" "ENU" -Force
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-Member], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCo
   mmand

Add-Member : Не удается привязать аргумент к параметру "InputObject", так как он имеет значение NULL.
C:\UpdaterService\Downloader.ps1:466 знак:18
+         $environment | Add-Member "SkipVersions" @() -Force
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-Member], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCo
   mmand

Нравится

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

Добрый день.

 

Попробуйте указать информацию по путям к директориям через 2 слеша - у Вас через 1.

 

Также рекомендую прочитать ещё раз внимательно иструкцию по обновлению на Академии.

Использовать такие настройки, как у Вас, для файла json нужно только в случае, если на сервере вашего приложения отсутствует доступ к интернету, и вы выгружаете данные с другого компьютера.

В противном случае для настройки выгрузки Вы можете использовать упрощенный вид файла json:

{
"WebRootDirectory": "c:\\inetpub\\wwwroot\\delivery",
"WorkDirectory": "c:\\temp\\delivery",
"Site": "имя вашего сайта в IIS",
"Product": "Studio",
"VersionBuild": "7.14.1.935"
}

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

 

Добрый день.

 

Попробуйте указать информацию по путям к директориям через 2 слеша - у Вас через 1.

 

Также рекомендую прочитать ещё раз внимательно иструкцию по обновлению на Академии.

Использовать такие настройки, как у Вас, для файла json нужно только в случае, если на сервере вашего приложения отсутствует доступ к интернету, и вы выгружаете данные с другого компьютера.

В противном случае для настройки выгрузки Вы можете использовать упрощенный вид файла json:

{
"WebRootDirectory": "c:\\inetpub\\wwwroot\\delivery",
"WorkDirectory": "c:\\temp\\delivery",
"Site": "имя вашего сайта в IIS",
"Product": "Studio",
"VersionBuild": "7.14.1.935"
}

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

 

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

Всем доброго дня.

Подскажите пожалуйста, как проще всего добавить номер по порядку при создании новой записи в детали через "+"? 

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

Нравится

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

Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.

 

Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.

 

using System.Linq;
 
public virtual void RunNumeration()
        {
            string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name);
            var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку
            esq.AddAllSchemaColumns();
            if (parentEnityName.IsNotNullOrEmpty())
            {
                Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id");
                if (parentEnityId != Guid.Empty)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId));
                    var entityProductsCollection = esq.GetEntityCollection(UserConnection)
		            .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0)
		            .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn));
		            int newNumber = 0;
		            foreach (var item in entityProductsCollection)
		            {
		                int number = item.GetTypedColumnValue<int>(positionNumberColumn);
		                newNumber++;
		                if (number != newNumber)
		                {
		                    item.SetColumnValue("UsrPositionNumber", newNumber);
		                    item.Save();
		                }
		            }
                }
            }
        }

 

Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.

 

Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.

 

using System.Linq;
 
public virtual void RunNumeration()
        {
            string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name);
            var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку
            esq.AddAllSchemaColumns();
            if (parentEnityName.IsNotNullOrEmpty())
            {
                Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id");
                if (parentEnityId != Guid.Empty)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId));
                    var entityProductsCollection = esq.GetEntityCollection(UserConnection)
		            .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0)
		            .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn));
		            int newNumber = 0;
		            foreach (var item in entityProductsCollection)
		            {
		                int number = item.GetTypedColumnValue<int>(positionNumberColumn);
		                newNumber++;
		                if (number != newNumber)
		                {
		                    item.SetColumnValue("UsrPositionNumber", newNumber);
		                    item.Save();
		                }
		            }
                }
            }
        }

 

Трефилов Павел Сергеевич, 

 

спасибо, отлично работает с вашим кодом)

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

Всем доброго дня! 

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

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

Нравится

5 комментариев
              var activeViewName = this.getActiveViewName();
              if (activeViewName === this.get("AnalyticsDataViewName")) {
                this.sandbox.publish("SectionUpdateFilter",
                                     null, [this.getQuickFilterModuleId()]);
              }

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

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

Можете отправить полный код, где делаете фильтр?

Трефилов Павел Сергеевич,

define("OrderSectionV2", ["ProcessModuleUtilities","BaseFiltersGenerateModule","css!UsrStylesOrderSectionV2"], function(ProcessModuleUtilities,BaseFiltersGenerateModule) {
	return {
		entitySchemaName: "Order",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: {
            "UsrPPNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrPPNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrMyNumberFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyNumbers": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrContrFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrContr": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrNameFilter": {
                "dataValueType": Terrasoft.DataValueType.TEXT
            },
            "UsrMyName": {
                "dataValueType": Terrasoft.DataValueType.TEXT,
                "values": ""
            },
			"UsrQua": {
                "dataValueType": Terrasoft.DataValueType.INTEGER,
                "values": ""
            },
        },
		diff: /**SCHEMA_DIFF*/[	
			{
                "operation": "insert",
                "name": "MyFilterContainer",
                "parentName": "LeftGridUtilsContainer",
                "propertyName": "items",
                "index": 3,
                "values": {
                    "id": "MyFilterContainer",
                    "itemType": this.Terrasoft.ViewItemType.CONTAINER,
                    "items": [],
 
                }
            },
 
 
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "PP_Number",
				"index": 1,
                "values": {
                    "bindTo": "UsrPPNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.UsrPPNumberCaption"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "ppNumChanged"
                        }
                    }
 
                }
            },
 
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton1",
					"index": 2,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Number",
				"index": 3,
                "values": {
                    "bindTo": "UsrMyNumberFilter",
                    "caption": {"bindTo": "Resources.Strings.myNumber"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNumberChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton2",
					"index": 4,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel2" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Contr",
				"index": 5,
                "values": {
                    "bindTo": "UsrContrFilter",
                    "caption": {"bindTo": "Resources.Strings.myContr"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myContrChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton3",
					"index": 6,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel3" },
					}
			},
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "PeriodSelectButton",
					"index": 7,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.LookupIcon"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "openMyLook" },
					}
			},
			{
                "operation": "insert",
                "parentName": "MyFilterContainer",
                "propertyName": "items",
                "name": "my_Name",
				"index": 8,
                "values": {
                    "bindTo": "UsrNameFilter",
                    "caption": {"bindTo": "Resources.Strings.myName"},
 
					"controlConfig": {
                        "change": {
                            "bindTo": "myNameChanged"
                        }
                    }
 
                }
            },
			{
					"operation": "insert",
					"parentName": "MyFilterContainer",
					"propertyName": "items",
					"name": "DeleteButton4",
					"index": 9,
					"values": {
						"itemType": Terrasoft.ViewItemType.BUTTON,
						"caption": "",
						"imageConfig": {"bindTo": "Resources.Images.del_but"},
						"controlConfig": {
						},
						"layout": {
							"column": 0,
							"row": 2,
							"colSpan": 1
						},
						"click": { "bindTo": "onDel4" },
					}
			},
 
        ]/**SCHEMA_DIFF*/,
 
		methods: {
 
		clearFilter: function() {
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
 
		onUsrFilterChanged: function() {
			this.reloadGridData();
		},
 
		initQueryFilters: function(esq) {
			this.callParent(arguments);
			//номер в пп
			var usrEmailFilter = this.get("UsrPPNumbers");
			if (usrEmailFilter) {
				esq.filters.add("UsrPPNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrNumberInPP".substring(), usrEmailFilter));
			} else {
				esq.filters.removeByKey("UsrPPNumberFilter");
			}		
 
			//Номер
			var usrMyFilter = this.get("UsrMyNumbers");
			if (usrMyFilter) {
				esq.filters.add("UsrMyNumberFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Number".substring(), usrMyFilter));
			} else {
				esq.filters.removeByKey("UsrMyNumberFilter");
			}
			//Контрагент
			var usrContrFilter = this.get("UsrContr");
			if (usrContrFilter) {
				esq.filters.add("UsrContrFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "Account.Name".substring(), usrContrFilter));
			} else {
				esq.filters.removeByKey("UsrContrFilter");
			}
			//Название
			var usrNameFilter = this.get("UsrMyName");
			if (usrNameFilter) {
				esq.filters.add("UsrNameFilter", this.Terrasoft.createColumnFilterWithParameter(
					this.Terrasoft.ComparisonType.CONTAIN, "UsrName".substring(), usrNameFilter));
			} else {
				esq.filters.removeByKey("UsrNameFilter");
			}
 
 
		},
 
		ppNumChanged: function(a, b, c) {
			this.set("UsrPPNumbers", a);
			this.onUsrFilterChanged();
 
		},
 
		myNumberChanged: function(a, b, c) {
			this.set("UsrMyNumbers", a);
			this.onUsrFilterChanged();
		},
 
		myContrChanged: function(a, b, c) {
			this.set("UsrContr", a);
			this.onUsrFilterChanged();
		},
 
		myNameChanged: function(a, b, c) {
			this.set("UsrMyName", a);
			this.onUsrFilterChanged();	
		},
 
		addCallBack: function(args) {
		  this.selectedRows = args.selectedRows.getItems();
 
			var ids = [];
			var names = [];
			this.selectedRows.forEach(function(item) {
				ids.push(item.Id);
				names.push(item.Name);
		   });
			this.set("UsrContr",names);
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = names;
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').focus();
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').blur();
		},
 
 		openMyLook: function(){
			var config = {
				entitySchemaName: "Account",
				columns: ["Name"]
			};
			this.openLookup(config, this.addCallBack, this);
		},
		onDel: function(){
			document.getElementById('OrderSectionV2PP_NumberTextEdit-el').value = null;
			this.set("UsrPPNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel2: function(){
			document.getElementById('OrderSectionV2my_NumberTextEdit-el').value = null;
			this.set("UsrMyNumberFilter", "");
			this.onUsrFilterChanged();
		},
		onDel3: function(){
			document.getElementById('OrderSectionV2my_ContrTextEdit-el').value = null;
			this.set("UsrContrFilter", "");
			this.onUsrFilterChanged();
		},
		onDel4: function(){
			document.getElementById('OrderSectionV2my_NameTextEdit-el').value = null;
			this.set("UsrNameFilter", "");
			this.onUsrFilterChanged();
		},
 
		}
	};
});

 

Анастасия Шумейко,

Добрый день.

 

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

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

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

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

Всем доброго дня! Подскажите можно ли как-то отфитровать список  в "Фильтры/группы" - "Добавить условие" ? Изменение поведения в Объекте на режим "Никогда" не подходит(нужно видеть фильтры в расширенном режиме). 

Нравится

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

Анастасия, в каждом разделе системы отображение первого поля при быстром поиске заложено в параметре PRIMARY_DISPLAY_COLUMN (Отображаемое значение). Например, для раздела Контакты это поле [ФИО].
В быстром фильтре указывать приоритетность отображения полей нет возможности. Перечень заложен на уровне конфигурации приложения и пользовательскими средствами решить задачу нет возможности.
На практике для фиксирования определенных полей для фильтрации используются быстрые фильтры - это фильтр, который внедряется на страницу раздела средствами разработкой и помогает закрепить несколько полей в шапке раздела для удобного указания параметров фильтрации.
Однако данный вариант также предполагает использование средств разработки. Более детальнее описано в статье по ссылке: https://academy.terrasoft.ua/docs/developer/elements_and_components/bas…

Алёна Доля,

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

в "Фильтры/группы" - "Добавить условие" и повыкидывать оттуда не нужные поля. 

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

Здравствуйте, подскажите пожалуйста, осталась ли возможность вернуть старый конфигуратор в версии 7.17.1.1363 ? 

В новом конфигураторе напрочь отсутствует локализация :(

Нравится

20 комментариев
Лучший ответ
DECLARE @sysSettingsCode varchar(max) = 'OldUI';
DECLARE @sysSettingsBooleanValue bit = 1;
DECLARE @sysSettingsId uniqueidentifier;
 
IF NOT EXISTS (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode)
BEGIN
  INSERT INTO SysSettings (Name, Code, ValueTypeName, IsCacheable) VALUES (@sysSettingsCode, @sysSettingsCode, 'Boolean', 1);
END
 
SET @sysSettingsId = (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode);
 
IF NOT EXISTS (SELECT Id FROM SysSettingsValue WITH (NOLOCK) WHERE SysSettingsId = @sysSettingsId)
BEGIN
  INSERT INTO SysSettingsValue (SysSettingsId, SysAdminUnitId, BooleanValue, Position) VALUES (@sysSettingsId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, 2147483647);
END
ELSE
BEGIN
  UPDATE SysSettingsValue SET BooleanValue = @sysSettingsBooleanValue WHERE SysSettingsId = @sysSettingsId
END

 

скопировать бинари Terrasoft.UI.WebControls и Terrasoft.UI.OldConfiguration из WebApp/Compatibility/OldUI в bin и WebApp/bin
включить сист. настройку OldUI - скрипт выше
скомпилировать конфигурацию

а по пути /0/WorkspaceExplorerModule.aspx перекидывает на новый "дизайн" ?

P.S  7.17.1 еще не пробовал.

Адаменко Александр,по такому пути выдает 500ю ошибку сервера

Добрый день! Попробуйте дописать "/dev_old", чтобы вышло таким образом: yoursite/0/dev_old

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

javascript:window.open("../ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_c02e0ec6f36b14108882485b39c5f8dd_045063c98180e011afbc00155d04320c_7c0581929880e011afbc00155d04320c");

нажимать на кнопку, когда активная любая страница Creatio

Дарья Сошина, 500я ошибка сервера, все так же как и с WorkspaceExplorer.aspx

yura.makarchuk, 500я ошибка... :(

Стратонов Олександр, на 7.17.0 точно работает (

Эх. Даа... Новый конфигуратор наводит только тоску. Один только поиск по схеме чего стоит)))))

Может кто-нибудь ещё знает, как можно попробовать достучаться?)

на 7.17.1 полностью отключили поддержку старого интерфейса конфигуратора. Но у нас пошли проблемы при работе нового конфигуратора и SVN. Конфигуратор не проверял перед коммитом последняя ли версия пакета и стирал чужие коммиты. Поэтому техподдержка для активации старого интерфейса дала мне скрипт по активации фичи OldUI. Так же надо скопировать dll из WebApp/Compatibility/OldUI в bin и WebApp/bin. после перекомпиляции по пути yoursite/0/dev_old будет старый конфигуратор.

уже все вычитанные способы перепробовал, не получается

в новом конфигураторе все еще сырое, особенно редактор кода с его поиском, да и поиск по схеме не сладкий...

 

Алексей Следь,

Поделитесь скриптом и инструкцией. У нас та же проблема на 7.17.1.

Алексей Следь, поделитесь, пожалуйста

 

DECLARE @sysSettingsCode varchar(max) = 'OldUI';
DECLARE @sysSettingsBooleanValue bit = 1;
DECLARE @sysSettingsId uniqueidentifier;
 
IF NOT EXISTS (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode)
BEGIN
  INSERT INTO SysSettings (Name, Code, ValueTypeName, IsCacheable) VALUES (@sysSettingsCode, @sysSettingsCode, 'Boolean', 1);
END
 
SET @sysSettingsId = (SELECT Id FROM SysSettings WITH (NOLOCK) WHERE Code = @sysSettingsCode);
 
IF NOT EXISTS (SELECT Id FROM SysSettingsValue WITH (NOLOCK) WHERE SysSettingsId = @sysSettingsId)
BEGIN
  INSERT INTO SysSettingsValue (SysSettingsId, SysAdminUnitId, BooleanValue, Position) VALUES (@sysSettingsId, 'A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, 2147483647);
END
ELSE
BEGIN
  UPDATE SysSettingsValue SET BooleanValue = @sysSettingsBooleanValue WHERE SysSettingsId = @sysSettingsId
END

 

скопировать бинари Terrasoft.UI.WebControls и Terrasoft.UI.OldConfiguration из WebApp/Compatibility/OldUI в bin и WebApp/bin
включить сист. настройку OldUI - скрипт выше
скомпилировать конфигурацию

Алексей Следь, спасибо большое

У всех норм работает? У меня ошибка появилась.

Дамиан Викторович, да, работает

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

Хотел бы, да не могу зайти в конфигуратор.

Дамиан Викторович,

А вы системную настройку добавили? у меня ошибку сервер выдавал после копирования бинарников и до добавления настройки.

Переписал SQL-script с удалением и созданием настройки. Не помогло.

-- ------------------------------------------------------------------------------------------------------------------------
-- Включить конфигуратор версии 7.16.
-- 1. Скопировать файлы из ..\Terrasoft.WebApp\Compatibility\OldUI\ в ..\Terrasoft.WebApp\bin\
-- Terrasoft.UI.OldConfiguration.dll, Terrasoft.UI.OldConfiguration.xml, Terrasoft.UI.WebControls.dll, Terrasoft.UI.WebControls.xml
-- 2. ВыполнитьSQL-script (включить системную настройку OldUI)
-- 3. Скомпилировать конфигурацию
-- ------------------------------------------------------------------------------------------------------------------------
declare @deleteSetting bit = 1  -- Удалить настройку
-- ------------------------------------------------------------------------------------------------------------------------
set nocount on
-- Удалить настройку.
if (@deleteSetting = 1) begin
	declare @idSearch uniqueidentifier = (select [SysSettingsValue].[Id] 
	from [SysSettings] 
	inner join [SysSettingsValue] on [SysSettings].[Id]=[SysSettingsValue].[SysSettingsId]
	where [SysSettings].[Code] = 'OldUI')
	delete from [SysSettingsValue] where [Id] = @idSearch
	delete from [SysSettings] where [Name] = 'OldUI'
	print N'[-] Выполнено удаление настройки "OldUI"'
end
-- ------------------------------------------------------------------------------------------------------------------------
-- Создать настройку.
declare @code varchar(max) = 'OldUI'
declare @value bit = 1
declare @id uniqueidentifier
 if not exists (select [Id] from [SysSettings] where [Code] = @code)
begin
	insert into [SysSettings] ([Name], [Code], [ValueTypeName], [IsCacheable]) values (@code, @code, 'boolean', 1)
end
set @id = (select [Id] from [SysSettings] where [Code] = @code)
if not exists (select [Id] from [SysSettingsValue] where [SysSettingsId] = @id)
begin
	insert into [SysSettingsValue] ([SysSettingsId], [SysAdminUnitId], [BooleanValue], [Position]) 
	values (@id, 'a29a3ba5-4b0d-de11-9a51-005056c00008', 1, 2147483647)
	print N'[+] Выполнено создание настройки "OldUI"'
end
else
begin
	update [SysSettingsValue] set [BooleanValue] = @value where [SysSettingsId] = @id
	print N'[*] Выполнено обновление настройки "OldUI"'
end
-- ------------------------------------------------------------------------------------------------------------------------
-- Показать настройку.
select 
	 [SysSettings].[Name] [SysSettings_Name]
	,[SysSettings].[Code] [SysSettings_Code]
	,[SysSettings].[ValueTypeName] [SysSettings_ValueTypeName]
	,[SysSettings].[IsCacheable] [SysSettings_IsCacheable]
	,[SysAdminUnit].[Name] [SysAdminUnit_Name]
	,[SysSettingsValue].[Id] [SysSettingsValue_Id]
	,[SysSettingsValue].[BooleanValue] [SysSettingsValue_BooleanValue]
	,[SysSettingsValue].[Position] [SysSettingsValue_Position]
from [SysSettings]
inner join [SysSettingsValue] on [SysSettings].[Id]=[SysSettingsValue].[SysSettingsId]
inner join [SysAdminUnit] on [SysSettingsValue].[SysAdminUnitId]=[SysAdminUnit].[Id]
where [SysSettings].[Name] = 'OldUI'
print N'[*] Выполнено показ настройки "OldUI"'
-- ------------------------------------------------------------------------------------------------------------------------
set nocount off

 

Здравствуйте, подскажите пожалуйста, осталась ли возможность вернуть старый конфигуратор в версии 7.17.1.1363 ? 

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

В новом конфигураторе напрочь отсутствует локализация :( 

А что именно не так в новом?

Локализация, например, названий полей задаётся тут:

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

Добрый день.

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

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

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

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

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

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

 

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

 

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

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

Было бы не плохо добавить возможности фильтрации и поиска в конфигуратор на вкладку зависимости пакетов. А его подсвечивать не только связи с которые есть у выбранного пакета, но и сами связанные пакеты. А то стрелки связей проходит через пакет и не ясно связан он с ним или нет. Редко бывает надо, но когда потребность возникает, то разобраться в этой "мачте с парусами" из пакетов и связей бывает очень сложно...

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

Это не интерфейс, а издевательство над разработчиками.

А еще открывать пакет по двойному клику на него было бы здорово

Алексей, зафиксировал идеи фильтрации/поиска и открытия по клику.

Евгений, в версии 7.17 обещают полностью новый раздел конфигурации, окончательно уходящий от интерфейса 5.Х.

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

В итоге в 7.17.0 этот граф вообще убрали. В 7.17.1 планируют новую реализацию.

В итоге в 7.17.1 вернули ровно в том виде, как было.sad

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

Добрый день,

 

При попытке зайти в Террасофт установленный на сервере (Windows Server 2008 R2 Enterprise), возникает ошибка:

К сожалению, многочисленные попытки решить данную проблему не принесли результата.

Также было замечено, что при добавлении новой конфигурации при нажатии на кнопку выбора имени драйверов Oracle (Home) возникает другая ошибка:

Насколько я понял проблема возникает из-за того, что на сервере были установлены несколько версий Oracle и в данный момент версия 11.2.0 отсутствует на сервере. Вместо нее установлена версия 12.2.

Попытка очистить следы Oracle 11.2.0 и в дальнейшем даже переустановка Oracle привела лишь к тому что в данный момент выходит пустой список в котором невозможно выбрать версию Oracle:

 

Прошу помочь в решении данной проблемы.

 

Благодарю.

 

P. S. По возможности помогите пожалуйста найти инструкцию по бэкапу Terrasoft 3.3, для попытки переустановки Terrasoft, чтобы решить вышеуказанную проблему.

Нравится

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

Обратите внимание на рекомендацию по поводу «Ошибка открытия конфигурации: Cannot find OCI DLL»:

Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Также версия ядра 3.3.2.120 далеко не самая новая, есть смысл попробовать на последних файлах 3.3.2.313, поскольку в версии 175 и выше вносились изменения в механизм работы с сервером сессий для Oracle.

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

Для получения бекапа существующей базы нужно воспользоваться средствами СУБД, а также не забыть автоматически перенести или вручную завести пользователей с такими же именами, как в базе, на уровне сервера БД. Именно для Oracle инструкции не встречал. Например, для MS SQL это делается так. Если забыть перенести, то пустит только администратора SYS.

Зверев Александр пишет:
Для приложения Terrasoft под Oracle обязательно необходимо, чтобы на компьютерах всех пользователей, использующих конкурентные лицензии, был установлен клиент Oracle одной и той же версии. Имя сервера на компьютерах всех пользователей должно совпадать с именем, указанным в поле [Сервер] окна редактирования строки соединения компьютера, на котором заказывают и загружают лицензии, и данный сервер должен быть зарегистрирован. Имя сервера прописывается в файле tnsnames.ora, расположенном в инсталляционной директории клиента Oracle (например, d:/oracle/ora92/network/admin/ tnsnames.ora).

Добрый день. Данная проблема наблюдается на самом сервере (невозможно зайти в Terrasoft установленный на сервере).

По поводу бэкапа, посмотрю, большое спасибо за помощь.

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

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

Ошибка обновления структуры таблицы для схемы "UsrRequestPos" из пакета "Verniy_Request_m_negriy". UId 18f0eb84-a642-4a7f-88c6-62e843da5a99: При выполнении действия обновления структуры схемы произошла ошибка "Exception of type 'Terrasoft.Core.DB.DBMetaActionValidationException' was thrown.", текст Sql сценария: "
SELECT
    CASE
    WHEN COUNT(*) > 0 THEN 0
    ELSE 1
    END [Result]
FROM
    [dbo].[UsrRequestPos] [ChildSchema]
WHERE
    NOT [ChildSchema].[UsrReqPosTypeId] IS NULL
    AND NOT EXISTS (
        SELECT
            *
        FROM
            [dbo].[UsrReqPosType] [ReferencedSchema]
        WHERE
            [ChildSchema].[UsrReqPosTypeId] = [ReferencedSchema].[Id]
    )"

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

Нравится

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

Проблема в том что не привязаны к пакету данные UsrReqPostType.

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

Добрый день! У вас срабатывает ограничение целостности по внешнему ключу. Т.е. отсутствуют записи UsrReqPostType, на которые ссылаюся записи UsrRequestPos. Исправьте базу, чтобы предложенный запрос возвращал 1

Проблема в том что не привязаны к пакету данные UsrReqPostType.

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

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

Григорий Чех пишет:

Проблема в том что не привязаны к пакету данные UsrReqPostType.

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

Разработчик я. Подскажите, мне нужно добавить новый объект UsrReqPostType в пакет? Или добавить sql код? В общем как сделать привязку данных в справочник?

Сидоров Александр В.,

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

Mexanik,

Подробнее о привязке данных к пакету смотрите пост на Академии.

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

Добрый день, форумчане)

Всегда был интересен вопрос след. характера:

В чём отличие типа данных у параметра БП таких как Уникальный идентификатор и Справочник?

Может в Справочник можно как-то внутрь заглянуть и вытянуть displayValue, избегая запрос к root таблице?

Сталкивался кто с подобным, интересен опыт Ваш.

Нравится

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

Если создать два параметра разных типов и привязать к одной и той же записи одного справочника, в исходном коде БП будет выглядеть так:

_processSchemaParameter1 = () => { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); };
_processSchemaParameter2 = () => { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); };
...
private Func<Guid> _processSchemaParameter1;
public virtual Guid ProcessSchemaParameter1 {
	get {
return (_processSchemaParameter1 ?? (_processSchemaParameter1 = () => Guid.Empty)).Invoke();
	}
	set {
_processSchemaParameter1 = () => { return value; };
	}
}
 
private Func<Guid> _processSchemaParameter2;
public virtual Guid ProcessSchemaParameter2 {
	get {
return (_processSchemaParameter2 ?? (_processSchemaParameter2 = () => Guid.Empty)).Invoke();
	}
	set {
_processSchemaParameter2 = () => { return value; };
	}
}
...
private void WritePropertyValues(DataWriter writer, bool useAllValueSources) {
	if (!HasMapping("ProcessSchemaParameter1")) {
writer.WriteValue("ProcessSchemaParameter1", ProcessSchemaParameter1, Guid.Empty);
	}
	if (!HasMapping("ProcessSchemaParameter2")) {
writer.WriteValue("ProcessSchemaParameter2", ProcessSchemaParameter2, Guid.Empty);
	}
}
 
...
protected override void InitializeMetaPathParameterValues() {
	base.InitializeMetaPathParameterValues();
	MetaPathParameterValues.Add("e0873088-8334-4b85-96a4-fa3e5ecb7374", () => ProcessSchemaParameter1);
	MetaPathParameterValues.Add("246467c7-071b-4cb0-8073-30c4f72be120", () => ProcessSchemaParameter2);
...	
protected override void ApplyPropertiesDataValues(DataReader reader) {
	base.ApplyPropertiesDataValues(reader);
	bool hasValueToRead = reader.HasValue();
	switch (reader.CurrentName) {
case "ProcessSchemaParameter1":
	if (!hasValueToRead) break;
	ProcessSchemaParameter1 = reader.GetValue<System.Guid>();
break;
case "ProcessSchemaParameter2":
	if (!hasValueToRead) break;
	ProcessSchemaParameter2 = reader.GetValue<System.Guid>();
break;
	}
}
...

А в метаданных:

      "Parameters": [
        {
          "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
          "UId": "e0873088-8334-4b85-96a4-fa3e5ecb7374",
          "Name": "ProcessSchemaParameter1",
          "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "DataValueType": "b295071f-7ea9-4e62-8d1a-919bf3732ff2",
          "SourceValue": {
            "Source": 3,
            "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]",
            "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395"
          },
          "ReferenceSchemaUId": "c449d832-a4cc-4b01-b9d5-8a12c42a9f89"
        },
        {
          "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
          "UId": "246467c7-071b-4cb0-8073-30c4f72be120",
          "Name": "ProcessSchemaParameter2",
          "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395",
          "DataValueType": "23018567-a13c-4320-8687-fd6f9e3699bd",
          "SourceValue": {
            "Source": 3,
            "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]",
            "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395"
          }
        }
      ],

То есть разницы практически нет, хотя внешний вид и интерфейс выбора значения разные.

Также на значения параметров в выполняющемся процессе можно посмотреть запросом в базу:

select top 10 *, cast(PropertiesData as varchar(max)) from SysProcessData

Там для параметров видно тоже только Id.

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