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

Пример

На странице раздела есть вкладка под названием "Карточка" Code (ProjectMap)

в "Карточка" есть 5 групп полей .

Нужно чтобы  (Если)

поле "Название проекта" (Поле не находится в той же вкладке) НЕ Заполнено 

ТО

Делать поле редактируемым 

и тут уже не поле, а группы полей которые находятся во вкладке "Карточка"

Пробывал следующим образом : Тип "Поле" заменяю на "Атрибут" тут пишу Code(ProjectMap) (Система определяет его ) после сохраняю обнавляю, но б.правило не отрабатывает . 

Для теста попробывал сделать редактируемым какое-то НЕ Атрибут а обычное Поле - всё ок , всё робит .

 

Нравится

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

Добрый день!
На данный момент делать всю группу редактируемой пользовательскими средствами нет возможности.
Как вариант можно настроить несколько бизнес-правил редактирования на все поля из группы.
Либо настроить видимость данной группы только при определенных условиях, а когда она видна, тогда ее можно и редактировать соответственно.

Yanina Ryssjanova,

 

Добрый день. Полей много - всего  45  ))) 

Просто скрывать для этой задачи к сожалению не получится ) Информация должна быть видимым (( ,спасибо за отклик! 

Tigran Gevorgyan пишет:

Yanina Ryssjanova,

Добрый день. Полей много - всего  45  ))) 

Просто скрывать для этой задачи к сожалению не получится ) Информация должна быть видимым (( ,спасибо за отклик! 

Сделайте 2 вкладки. На одной одно состояние (редактируемое), на другое - другое. Прячьте ненужную вкладку с помощью правил

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

 

Да, как вариант подойдёт , но в этом случае тоже потребуется для отображении значений полей в 2 вкладках 45 правил . Решил созданием 45 правил , пока не решут вопрос с разрабом. Всем спасибо .

Показать все комментарии
//атрибуты
"NrbContractNumber": {
    "contentType": this.Terrasoft.ContentType.SEARCHABLE_TEXT,
    "searchableTextConfig": {
        "listAttribute": "ContractNumberSearchList",
        "prepareListMethod": "prepareContractNumberSearchList",
        "listViewItemRenderMethod": "onContractNumberSearchListViewItemRender",
        "itemSelectedMethod": "onContractSearchItemSelected"
    },
},
"ContractNumberSearchList": {
    "dataValueType": Terrasoft.DataValueType.COLLECTION
},
 
//методы
init: function () {
    this.callParent(arguments);
    this.set("ContractNumberSearchList", new Terrasoft.Collection());
},
 
prepareContractNumberSearchList: function (filterValue) {
    if (filterValue.length >= 3) {
        this.searchContractByNumber(filterValue, this.loadSearchList, this);
    } else {
        this.clearSearchList("ContractNumberSearchList");
    }
},
 
searchContractByNumber: function (contractNumber, callback, scope) {
    const esq = Ext.create("Terrasoft.EntitySchemaQuery", {
        rootSchemaName: "NrbContract",
        rowCount: 10
    });
 
    esq.addColumn("Id", "Id");
    esq.addColumn("NrbNumber", "NrbNumber");
    esq.addColumn("NrbAccount.Id", "AccountId");
    esq.addColumn("NrbAccount.Name", "AccountName");
    esq.addColumn("NrbAccount.NrbKpp", "AccountKpp");
    esq.addColumn("NrbAccount.NrbTIN", "AccountTin");
    esq.addColumn("NrbAccount.NrbState.Name", "AccountState");
 
    esq.filters.addItem(Terrasoft.createColumnIsNotNullFilter("NrbAccount"));
    esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.START_WITH, "NrbNumber", contractNumber));
 
    esq.getEntityCollection(function (response) {
        Ext.callback(callback, scope, [response, "ContractNumberSearchList"]);
    }, scope || this);
},
 
loadSearchList: function (response, listName) {
    var list = this.get(listName);
    list.clear();
    list.loadAll(response.collection);
},
 
onContractNumberSearchListViewItemRender: function (item) {
    if (Ext.isEmpty(item)) {
        return;
    } 
    item.displayValue = item.values.NrbNumber;
    var itemValue = item.value = item.values.Id;
 
    var values = [
        item.values.NrbNumber,
        item.values.AccountName,
        item.values.AccountTin,
        item.values.AccountKpp,
        item.values.AccountState
    ].filter(function (item) {
        return !Ext.isEmpty(item);
    });
 
    var tpl = "<div	class=\"listview-item-info\" data-value=\"{0}\"> {1} </div>";
    item.customHtml = item.values.customHtml = this.Ext.String.format(tpl, itemValue, values.join(' | '));
},
 
onContractSearchItemSelected: function (contract) {
    if (Ext.isEmpty(contract)) {
        return;
    }
 
    this.loadLookupDisplayValue("Account", contract.values.AccountId);
    this.loadLookupDisplayValue("NrbContract", contract.values.Id);
    this.set("NrbName", contract.values.AccountName);
    this.set("NrbInn", contract.values.AccountTin);
    this.set("NrbKpp", contract.values.AccountKpp);
},

 

Нравится

Поделиться

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

а как это выглядит? :)

Присоединяюсь к вопросу выше)

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

Добрый день! Подскажите, пожалуйста, реализовали маску ввода номера телефона. На ПК все отображается корректно, а через браузер на Android маска отрабатывает некорректно, например

ПК: +996 999999999

Android: +996 999999999_________

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

Использовали следующий код:

define("ScNewTrustNumberPage", ["MultiMaskEdit"], function() {
	return {
		entitySchemaName: "",
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: 
		{
			getPhoneMask: function() {
				return {
					formats: ["+996 000000000"]
				}
			}
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation" : "merge",
				"name" : "ScNewTrustNumber",
				"values" : {
					"controlConfig" : {
						"className": "Terrasoft.MultiMaskEdit",
							"mask": {
								"bindTo": "getPhoneMask"
							},
						"maskConfig": {
							"definitions": {
								"0": {
									"re": "[0-9]"
								}
							}
						}
					}
				}
			},
			]/**SCHEMA_DIFF*/
	};
});

 

Нравится

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

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

Алёна Доля,

Добрый день!

В данной статье описана валидация поля. Мне же необходимо реализовать маску ввода. Что-то вроде такого:

Шарафутдинов Фаиль Русланович,

Для реализации следуйте решению, которое обсудили с вами в обсуждении по ссылке: 

https://community.terrasoft.ru/questions/maska-vvoda-jquery-inputmask#c…
А именно реализовать маску с помощью jQuery.

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

Добрый день!

 

Столкнулся с такой задачей: создаю новое поле и добавляю в мастер раздела.

Систему обновлял, компилил, генерировал исходный код (Сделал все что можно было)

Но поле не появляется. Хотя в редакторе оно отображается.

В консоле говорит что не может найти данные колонки.

В чем может быть проблема?

Нравится

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

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

 

Что стоит проверить:

- добавлены ли в объекте данные колонки;

-  значение в системной настройке "Текущий пакет". Затем проверьте, что у вас все зависимости пакета правильно проставлены

- переопубликовать объект в котором есть данные колонки

- пересохраните, пожалуйста, схему %PageV2.

- проверить работу в режиме инкогнито браузера.

 

 

Вильшанский Дмитрий,

Ничего из этого не помогло. Что еще может быть?

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

Подскажите, какое значение указано в системной настройке "Текущий пакет" и какие зависимости у пакета?
При компиляции и генерации исходных кодов ошибок нет?

Изменялся ли объект напрямую в конфигурации? Если да, то была ли выполнена публикация?

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

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

Нравится

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

Добрый день! Можно попробовать через атрибут, и в атрибут переопределять caption

ак-то можно уже у существующего поля изменить заголовок, который отображается на странице

А поделитесь плиз бизнес-задачей? Зачем вам такая штука?

Нигрескул Алексей,

сделал через свойство caption

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

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

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

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

Нравится

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

Вопрос обсуждался тут и особенно тут. Стандартного решения нет, рекомендуют анализировать механизм детали «График поставок и оплат» в разделе заказов.

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

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

Алла, такая идея заведена.

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

Пытаюсь добавить вторую картинку с таким же функционалом как у основной картинки в контрагента.

В статье https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-poly… описано добавление картинки в раздел где нет картинки до этого

Если делаю всё как там - то поля получаются связаны, насколько я понимаю, из-за того что существует только одна системная колонка изображения, на которую они оба ссылаются

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

Нравится

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

Ну а добавить вторую системную колонку в объекте? Но по мне это тупиковый вариант, лучше настроить деталь файлы и ссылки на плиточное представление. Удалить при необходимости примечания. Добавить к картинкам в плиточном представлении ваши 2 контрола и вуаля.

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

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

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

Хотелось бы иметь такое же поле как логотип, но отдельное

Ну а добавить вторую системную колонку в объекте? Но по мне это тупиковый вариант, лучше настроить деталь файлы и ссылки на плиточное представление. Удалить при необходимости примечания. Добавить к картинкам в плиточном представлении ваши 2 контрола и вуаля.

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

благодарю за ответ, попробую сделать так.

Григорий Чех пишет:
Ну а добавить вторую системную колонку в объекте?

А как можно в объект добавить вторую системную колонку?

В данном случае речь идет о колонке, которая отображается только в расширенном режиме отображения схемы таблицы: https://prnt.sc/l9xi52

А как можно в объект добавить вторую системную колонку?

Думаю, что без доступа к исходникам ядра такое не получится. Да и не нужно.

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

Я тоже так думаю. Возможно, в ответе подразумевалось что-то другое - решила уточнить.

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

Здравствуйте. На изображении видно, что я добавил дробное число и "дата". Как указать, что дробное число до 4-х знаков после запятой, а "дата" должна отображаться без времени?

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

Нравится

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

Добрый день, Анатолий. К сожалению, сделать это непосредственно в мастере у вас не получится, необходимо перейти в конфигурацию, открыть нужный вам объект(например, Contact), в настройках установить галочку "Отображать расширенный список типов колонок", после чего изменить тип колонок на необходимый вам, и опубликовать объект.

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

Стоит задача расширить поле "Решение" статьи БЗ от "края до края" для мониторов с разрешением 1920x1080. В принципе можно подключить свой модуль с CSS, и указать

#KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout-item-KnowledgeBasePageV2NotesContainer{
        width: 110% !important;
}

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

Нравится

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

Олег, в базовых карточках (кроме EmailPageV2, можете как пример использовать) задана фиксируемая ширина:

body[OldUI=false] .center-main-container .grid-layout-row {
  max-width: 140em;
}

Вы можете переопределить базовый для нужного раздела, только укажите дополнительный селектор, чтобы не перекрыть логику ВСЕХ карточек. Например: data-item-marker="KnowledgeBasePageGeneralBlock"

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

@media (min-width: 1920px) {
	width: 110% !important;
}

Здравствуйте,
Вам нужно классу grid-layout-row ts-box-sizing
Во вложенности под id KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout
Сбросить стиль max-width в none;
Тогда нужное поле будет во всю ширину на любых разрешениях.

Сбросил max-width в none, теперь не нужно указывать конкретное разрешение. Приведите пожалуйста пример как переопределить свойство класса во вложенности по id? Не смог разобраться, и сделал пока так:

#KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout > div{
	max-width: none;
}

Извиняюсь, под #KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout и нет id, так что вариант с #KnowledgeBasePageV2KnowledgeBasePageGeneralBlockGridLayout > div идеальный :twisted:

Если Вам требуется на всю ширину экрана, можете не заморачиваться с @media селекторами
Используйте специальные CSS единицы измерения Viewport Units: vw (1/100 процентное отношение к текущей ширине окна браузера) и vh (1/100 процентное отношение к текущей высоте окна браузера).

width: 100vw
В таком случае вне зависимости от размера экрана - элемент будет занимать всю доступную ширину окна, будьте внимательны с текущим значением box-sizing от чего будет зависеть будут ли в размер элемента включаться его border и margin в зависимости от этого иногда установка 100vw может привести к появлению горизонтальной полосы прокрутки, в таком случае необходимо будет или дополнительно скорректировать отсуты/границы или установить чуть меньшее значение в vw (98 - исходя из практики решает вопросы с типовыми проблемами)

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

Коллеги, подскажите пож-та.
Есть необходимость добавить дополнительное поле
Как добавить поле "Название страны на анг" в справочник "страна" ?

Нравится

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

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

Ответили в рамках поддержки, но может кому-то еще понадобится.
Данная задача может быть выполнена следующим образом:
0) Перйдите в конфигурацию
1) Добавьте поле в объект "Страна" (поле с типом строка). Вы можете добавить это поле, заместив объект "Страна"
2) Добавьте схему с типом "Замещающая страница". Схему с типом "Замещающая страница" Вы можете найти в расширенном представлении кнопки "Добавить"
3) Выберите в качестве родительской страницы страницу "Страница редактирования страны"
4) В MainContolLayout Вам необходимо добавить элемент "Текстовое поле" (выделите MainContolLayout и нажмите правой кнопкой мышки, чтобы открыть доступные варианты)
5) Выделите добавленное поле в структуре и переместите его на нужное место (обычное перетаскивание мыши)
6) В свойствах этого поля укажите "Источник данных" - DataSource, Колонка данных - созданная на первом шаге колонка объекта "Страна".
7) Сохраните и опубликуйте страницу.

В результате новое поле будет добавлено на страницу редактирования справочника "Страна".

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