define("UsrSchema042ca8fbDetail", ["ConfigurationEnums"], 
    function(configurationEnums) {
    return {
        entitySchemaName: "UsrCourierCertInOrder",
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        diff: /**SCHEMA_DIFF*/[
            {
                    /* Тип операции — слияние. */
                    "operation": "merge",
                    /* Название элемента схемы, над которым производится действие. */
                    "name": "DataGrid",
                    /* Объект, свойства которого будут объединены со свойствами элемента схемы. */
                    "values": {
                        "rowDataItemMarkerColumnName": "UsrDocumentLookup"
                    }
                },
                {
                    /* Тип операции — слияние. */
                    "operation": "merge",
                    /* Название элемента схемы, над которым производится действие. */
                    "name": "AddRecordButton",
                    /* Объект, свойства которого будут объединены со свойствами элемента схемы. */
                    "values": {
                        "visible": {"bindTo": "getToolsVisible"}
                    }
                }]/**SCHEMA_DIFF*/,
        methods: {
                                //Возвращает колонки, которые выбираются запросом.
                                getGridDataColumns: function() {
                                        return {
                                                "Id": {path: "Id"},
                                                "Document": {path: "UsrDocument"},
                                                "Document.Number": {path: "UsrDocument.Number"}
                                        };
                                },

                                //Конфигурирует и отображает модальное окно справочника.
                                openDocumentLookup: function() {
                                        //Конфигурационный объект
                                        var config = {
                                                // Название схемы объекта, записи которого будут отображены в справочнике.
                                                entitySchemaName: "UsrDocumentLookup",
                                                // Возможность множественного выбора.
                                                multiSelect: true,
                                                // Колонки, которые будут использованы в справочнике, например, для сортировки.
                                                columns: []
                                        };
                                        var OrderId = this.get("MasterRecordId");
                                        if (this.Ext.isEmpty(OrderId)) {
                                                return;
                                        }
                                        // Экземпляр класса [EntitySchemaQuery].
                                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                                                // Установка корневой схемы.
                                                rootSchemaName: this.entitySchemaName
                                        });
                                        // Добавление колонки [Id].
                                        esq.addColumn("Id");
                                        // Добавление колонки [Id] из схемы [Document].
                                        esq.addColumn("Document.Id", "DocumentId");
                                        // Создание и добавление фильтров в коллекцию запроса.
                                        esq.filters.add("filterOrder", this.Terrasoft.createColumnFilterWithParameter(
                                                this.Terrasoft.ComparisonType.EQUAL, "UsrOrder", OrderId));
                                        // Получение всей коллекции записей и отображение ее в модальном окне справочника.
                                        esq.getEntityCollection(function(result) {
                                                var existsDocumentsCollection = [];
                                                if (result.success) {
                                                        result.collection.each(function(item) {
                                                                existsDocumentsCollection.push(item.get("DocumentId"));
                                                        });
                                                }
                                                // Добавление фильтра в конфигурационный объект.
                                                if (existsDocumentsCollection.length > 0) {
                                                        var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
                                                                existsDocumentsCollection);
                                                        existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
                                                        existsFilter.Name = "existsFilter";
                                                        config.filters = existsFilter;
                                                }
                                                // Вызов модального окна справочника
                                                this.openLookup(config, this.addCallBack, this);
                                        }, this);
                                },

                                // Обработчик события сохранения страницы редактирования.
                                onCardSaved: function() {
                                        this.openDocumentLookup();
                                },

                                //Открывает справочник документов в случае если страница редактирования заказа была ранее сохранена.
                                addRecord: function() {
                                        var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
                                        var isNewRecord = (masterCardState.state === configurationEnums.CardStateV2.ADD ||
                                        masterCardState.state === configurationEnums.CardStateV2.COPY);
                                        if (isNewRecord === true) {
                                                var args = {
                                                        isSilent: true,
                                                        messageTags: [this.sandbox.id]
                                                };
                                                this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
                                                return;
                                        }
                                        this.openDocumentLookup();
                                },

                                // Добавление выбранных продуктов.
                                addCallBack: function(args) {
                                        // Экземпляр класса пакетного запроса BatchQuery.
                                        var bq = this.Ext.create("Terrasoft.BatchQuery");
                                        var OrderId = this.get("MasterRecordId");
                                        // Коллекция выбранных в справочнике документов.
                                        this.selectedRows = args.selectedRows.getItems();
                                        // Коллекция, передаваемая в запрос.
                                        this.selectedItems = [];
                                        // Копирование необходимых данных.
                                        this.selectedRows.forEach(function(item) {
                                                item.OrderId = OrderId;
                                                item.DocumentId = item.value;
                                                bq.add(this.getDocumentInsertQuery(item));
                                                this.selectedItems.push(item.value);
                                        }, this);
                                        // Выполнение пакетного запроса, если он не пустой.
                                        if (bq.queries.length) {
                                                this.showBodyMask.call(this);
                                                bq.execute(this.onDocumentInsert, this);
                                        }
                                },

                                //Возвращает запрос на добавление текущего объекта.
                                getDocumentInsertQuery: function(item) {
                                        var insert = Ext.create("Terrasoft.InsertQuery", {
                                                rootSchemaName: this.entitySchemaName
                                        });
                                        insert.setParameterValue("UsrOrder", item.OrderId, this.Terrasoft.DataValueType.GUID);
                                        insert.setParameterValue("UsrDocument", item.DocumentId, this.Terrasoft.DataValueType.GUID);
                                        return insert;
                                },

                                //Метод, вызываемый при добавлении записей в реестр детали.
                                onDocumentInsert: function(response) {
                                        this.hideBodyMask.call(this);
                                        this.beforeLoadGridData();
                                        var filterCollection = [];
                                        response.queryResults.forEach(function(item) {
                                                filterCollection.push(item.id);
                                        });
                                        var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
                                                rootSchemaName: this.entitySchemaName
                                        });
                                        this.initQueryColumns(esq);
                                        esq.filters.add("recordId", Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
                                        esq.getEntityCollection(function(response) {
                                                this.afterLoadGridData();
                                                if (response.success) {
                                                        var responseCollection = response.collection;
                                                        this.prepareResponseCollection(responseCollection);
                                                        this.getGridData().loadAll(responseCollection);
                                                }
                                        }, this);
                                },    

                                // Метод, вызываемый при удалении выбранных записей детали.
                                deleteRecords: function() {
                                        var selectedRows = this.getSelectedItems();
                                        if (selectedRows.length > 0) {
                                                this.set("SelectedRows", selectedRows);
                                                this.callParent(arguments);
                                        }
                                },

                                // Скрыть пункт меню [Копировать].
                                getCopyRecordMenuItem: Terrasoft.emptyFn,
                                 // Скрыть пункт меню [Изменить].
                                getEditRecordMenuItem: Terrasoft.emptyFn,
                                // Возвращает имя колонки по умолчанию для фильтра.
                                getFilterDefaultColumnName: function() {
                                        return "UsrDocument";
                                }
                        },
            
    };
});
 Добрый день, прошу помочь с деталью выборкой из справочника. Не сохраняет значения. Специально использовал все с примера в Академии чтоб понять суть.

 

 

 

Нравится

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

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

Сложно сказать причину такого поведения смотря только на код.

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

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

Добрый день, имеется лендинг работающий как отдельный сайт в IIS, идея в том чтобы в выпадающий список попадали данные из справочника в Creatio. Подскажите, как это можно реализовать?

Нравится

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

С созданием контактов в Creatio через Лэндинг разобрались, но как достать из справочника не понимаю)

В целом это описано в статье.

https://academy.terrasoft.ru/docs/user/instrumenty_crm/lendingi_i_web_f…

 

Но выпадающий список со значениями и id нужно генерировать на стороне лендинга. Если список справочных значений не меняется со временем, то это можно захардкодить. Если меняется, но редко, то лучше синхронизировать базу сайта и справочник creatio. Опять же при наличии бд на сайте. И потом из базы генерировать "код" со значениями. Третий вариант, через веб сервис/или odata каждый раз считывать значения справочника и генерировать на стороне лендинга список

Трефилов Павел Сергеевич,Спасибо, мы пробовали захардкодить но данными обязательное Контрагент поле все равно не заполняется, можно ли как-то побороть при отправке данных с лендинга? Через БП после создания не хотелось бы делать

Тут наверное делать поле "контрагент" необязательным на уровне объекта. Параллельно создавать текстовое поле контрагент, и процессом после создания пытаться искать (или создавать) контрагента по каким-то критериям. Например, если лендинг с типом "форма регистрации контакта", то там есть процесс по "поиску и созданию контакта", можно в него встроить логику с контрагентом, там доп поле на объекте создавать не нужно, его можно брать из веб формы.

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

Добрый день!

Вывод значения из справочника достаю с помощью this.loadLookupDisplayValue("Account", this.$InitialAccountId); (поле Контрагент нового документа) :

Возник такой вопрос : как вывести на страницу значение справочника, как значение по которому можно перейти как по ссылке (как у поля ответственный менеджер)?

Нравится

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

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

 

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

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

Подскажите, то есть гиперссылка подтянется автоматически?
У меня создан раздел под этот справочник, но гиперссылка не выводится.

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

Сергей Уделов,

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

Сергей Уделов пишет:
Возможно нужно добавить дополнительный параметр в блоке diff для этого элемента?

Это реализовано в базовой логике, ничего прописывать не нужно.

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

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

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

Нравится

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

Есть одна неочевидная фича. Если добавить в раздел справочники запись, указав в поле "Объект" ваш объект, а в "Названии" то что вы хотите видеть в справочных окнах, то после перезахода в систему заголовки всех справочников этого объекта поменяются) 

Есть одна неочевидная фича. Если добавить в раздел справочники запись, указав в поле "Объект" ваш объект, а в "Названии" то что вы хотите видеть в справочных окнах, то после перезахода в систему заголовки всех справочников этого объекта поменяются) 

Дмитрий А.,

а если таблица не справочник, и в справочники ее не добавлять?

Александр, попробуйте сделать как в SupervisorSingleWindowPageV2, там тоже меняют этот заголовок окна выбора:

//LookupPrefixCaption = "Выбор: ";
 
/**
 * @inheritdoc BasePageV2#getLookupPageConfig
 * @overridden
 */
getLookupPageConfig: function(args, columnName) {
	var config = this.callParent(arguments);
	var schemaColumn = this.getColumnByName(columnName);
	if (!schemaColumn) {
		return config;
	}
	var prefixCaption = resources.localizableStrings.LookupPrefixCaption;
	switch (columnName) {
		case "QueueEntitySchema":
		case "BusinessProcessSchema":
			config.captionLookup = prefixCaption + schemaColumn.caption;
			break;
		default:
			break;
	}
	return config;
},

 

Александр Тыра,

Для любого объекта в системе можно создать справочное представление. В вашем примере с продажами - точно можно. Добавление справочника в раздел "справочники" - возможность открыть записи объекта в списочном представлении с возможностью редактирования и на сам раздел/объект никак не повлияет.

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

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

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

 

Вижу два решения задачи:

1) Вариант 1:

 - Создаем три таблицы: базовый справочник "Продукты", базовый объект "Деталь 1" с колонкой привязки к "Продукты", базовый объект "Деталь 2" с колонкой привязки к "Деталь 1".

- Создаем справочник на основе объекта "Продукты", деталь с добавлением из справочника на основе объекта "Деталь 1", деталь с добавлением из справочника на основе объекта "Деталь 2".

- Сталкиваемся с проблемой не рабочей делали "Деталь 2" так как для открытия окна добавления данных из "Деталь 1" необходимо с базовой колонкой текстового типа ("Отображаемое значение")!

2) Вариант 2:

- Создаем три таблицы: базовый справочник "Продукты", базовый объект "Деталь 1" с колонкой привязки к "Продукты" и колонкой "Зарезервировано" (что бы можно было отмечать значения что попадут далее в третью деталь).

- Создаем справочник на основе объекта "Продукты", деталь с добавлением из справочника на основе объекта "Деталь 1", деталь с добавлением из справочника на основе объекта "Деталь 1" (тут нам и пригодилась колонка "Зарезервировано" так как по ней и будет фильтр и мы просто проставляем значение в эту колонку, а точнее по колонке "Заявка" и "Зарезервировано").

- Сталкиваемся с проблемой не рабочей делали "Деталь 2" так как для открытия окна добавления данных из "Деталь 1" необходимо с базовой колонкой текстового типа ("Отображаемое значение")! Была идея сделать Вью для отображения не достающего текстового поля, которое заполнять из колонки "Продукты.Название".

Нравится

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

Александр, что-то мне не вполне понятно по структуре того, что хотите отобразить. Вы хотите две детали в разделе продуктов или в каком-то другом разделе, которые связывают его с продуктами (вроде раздела «Договоры» и детали развязки «Продукты в договоре»)? Как между собой связаны раздел и первая деталь, раздел и вторая, первая со второй?

 

Сами по себе двухуровневые детали обсуждались тут, тут и тут, но готового описания реализации не видно. Но в 7.Х, в отличие от прошлых версий, детали располагаются одна над другой, так что важнее сначала понять, что хотим отобразить, а потом искать техническую реализацию, через view или как-то ещё.

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

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

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

Тут вопрос не столько в настройке привязки деталей к разделу, сколько в логике выбора записей. Это можно сделать модификацией лукапа второй детали, чтобы там фильтр оставлял только пригодные для выбора записи. Либо вместо лукапа сделать в первой детали, где весь доступный выбор, кнопку или действие, при запуске которого выбранная на первой детали запись обрабатывается, по ней создаётся запись на второй.

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

Добрый день.

Например имеется объект UsrEntity. Хочу открыть справочник для добавления элемента на деталь с возможностью выбора из списка этого объекта. Но, чтобы в списке НЕ БЫЛО тех элементов, которые удовлетворяют условию UsrEntity.UsrA in existedA && UsrEntity.UsrB in existedB && UsrEntity.UsrC in existedC. Пока вижу только один путь это создать представление в SQL и открывать это представление. А возможно ли сделать подобный фильтр на фронте? Может быть есть возможность сделать кастомный фильтр и вставить в конфиг при открытии справочника?

Нравится

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

Решил задачу. Можно же просто UsrEntity.UsrA not in existedA || UsrEntity.UsrB not in existedB || UsrEntity.UsrC not in existedC.

Но так как по колонке A, я уже фильтровал, достаточно было только B и C. А ещё засунул в группу фильтров, другую группу фильтров. Не знал, что так можно

addRecord: function () {
					let activeRowId = this.get("ActiveRow");
					if (!activeRowId) {
						return;
					}
 
					const gridData = this.getGridData();
					let rowData = gridData.get(activeRowId).values;
					if (rowData.IDSBParent){
						activeRowId = rowData.IDSBParent.value;
						rowData = gridData.get(activeRowId).values;
					}
 
					let filterCollection = Terrasoft.createFilterGroup();
					const productFilter = Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
						"IDSBProductId", rowData.IDSBProduct.value);
					filterCollection.add("productFilter", productFilter);					
 
					let existed = [];
					gridData.collection.items.forEach(function(item){
						if (!item.values.IDSBParent){
							return;
						}
 
						if (item.values.IDSBParent.value !== activeRowId){
							return;
						}
 
						existed.push(item.values);
					}, this);
 
					let notExistedFilterCollection = Terrasoft.createFilterGroup();
					notExistedFilterCollection.logicalComparisonTypes = Terrasoft.LogicalOperatorType.OR;
 
					let existsWarehouseFilter = Terrasoft.createColumnInFilterWithParameters("IDSBWarehouseId", existed.map(item => item.IDSBWarehouse.value));
					existsWarehouseFilter.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;
					notExistedFilterCollection.add(existsWarehouseFilter);
 
					let existsPercentFilter = Terrasoft.createColumnInFilterWithParameters("IDSBPercent", existed.map(item => item.IDSBPercent));
					existsPercentFilter.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;
					notExistedFilterCollection.add(existsPercentFilter);
 
					filterCollection.add("notExistedFilterCollection", notExistedFilterCollection);
 
					const config = {
						entitySchemaName: "IDSBVwExpiredRemaining",
						multiSelect: true,
						columns: ["IDSBWarehouseId", "IDSBProductId", "IDSBPercent"],
						filters: filterCollection
					};
 
					this.openLookup(config, this.IDSBAddSelectedProducts, this);
				},

 

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

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

На странице есть справочник "Сотрудник" при нажатии выходит окно Выбора - можно ли сделать этот выбор в виде дерева по "Подразделение"? То есть при нажатии на папку "Подразделение 1" выходили все сотрудники этого подразделения.

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

Нравится

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

Доброе утро.

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

Посмотрите обсуждение подобной темы в этом посте.

 

Доброе утро.

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

Посмотрите обсуждение подобной темы в этом посте.

 

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

Добрый день!

Возможно ли сделать поле Мобильный телефон стандартным условием поиска Контакта (при выборе из справочника) в одном разделе.

Нравится

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

Доброе утро!

Смотрите обсуждения в этом посте и в этом.

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

Забыл упомянуть, справочник не обычный а multilookup (Выбор из контактов и аккаунтов).

Решил пойти сложным путем, добавил схему CustomLookupPage (расширил MultiLookupModule) и в нем переопределил 

onTabChanged и 
generateViewModel

 для поиска по мобильному телефону у контакта. Код: 

define("CustomLookupPage", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator", "LookupUtilities", "css!LookupPageCSS"],
   function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator) {

      return Ext.define("Terrasoft.configuration.CustomLookupPage", {
         alternateClassName: "Terrasoft.CustomLookupPage",
         extend: "Terrasoft.MultiLookupModule",

         gridWrapClasses: ["multi-lookup-control"],


         onTabChanged: function(activeTab) {
            var lookupsInfo = this.get("LookupsInfo");
            Terrasoft.each(lookupsInfo, function(lookupInfo) {
               if (activeTab.get("Name") !== lookupInfo.entitySchemaName) {
                  return true;
               }
               this.lookupInfo = lookupInfo;

               this.getSchemaAndProfile(lookupInfo.lookupPostfix, function(entitySchema, profile) {
                  this.isClearGridData = true;
                  this.set("gridProfile", profile);
                  this.entitySchema = entitySchema;
                  this.initLoadedColumns();
                  var searchColumn = this.get("searchColumn");
                  if (!entitySchema.columns[searchColumn.value]) {
                     this.set("searchColumn", {
                        value: this.entitySchema.primaryDisplayColumn.name,
                        displayValue: this.entitySchema.primaryDisplayColumn.caption
                     });
                     this.set("searchData", "");
                  }
                  this.set("LookupInfo", this.lookupInfo);
                  this.load(profile, function() {
                     var lookupInfo = this.lookupInfo;
                     var entitySchema = this.entitySchema;

                     //у контакта поиск по мобильному телефону
                     if (this.entitySchema.name == "Contact") {
                        this.set("searchColumn", {
                           value: "MobilePhone",
                           displayValue: "Мобильный телефон"
                        });
                     } else {
                        this.set("searchColumn", {
                           value: entitySchema.primaryDisplayColumn.name,
                           displayValue: entitySchema.primaryDisplayColumn.caption
                        });
                     }

                     var captionLookup = this.getLookupCaption(entitySchema, lookupInfo);
                     this.set("captionLookup", captionLookup);
                     this.set("lookupSchemaName", entitySchema.name);
                     this.setSearchEditFocused();
                  }.bind(this));
               });
            }, this);
         },

         generateViewModel: function() {

            var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo);

            //у контакта поиск по мобильному телефону
            viewModelConfig.values.searchColumn = {
               value: "MobilePhone",
               displayValue: "Мобильный телефон"
            };

            if (!this.lookupInfo.columnValue && this.lookupInfo.searchValue) {
               viewModelConfig.values.searchData = this.lookupInfo.searchValue;
               viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue;
            }
            var viewModel = this.Ext.create("Terrasoft.BaseViewModel", viewModelConfig);
            viewModel.Ext = this.Ext;
            viewModel.sandbox = this.sandbox;
            viewModel.Terrasoft = this.Terrasoft;
            if (this.lookupInfo.updateViewModel) {
               this.lookupInfo.updateViewModel.call(viewModel);
            }
            viewModel.initCaptionLookup();
            viewModel.initHasActions();
            viewModel.initLoadedColumns();
            if (!this.Ext.isEmpty(this.lookupInfo.filterObjectPath)) {
               viewModel.updateFilterByFilterObjectPath(this.lookupInfo.filters, this.lookupInfo.filterObjectPath);
            }
            if (this.lookupInfo.hideActions) {
               viewModel.set("hasActions", false);
            }
            return viewModel;
         },
      });
   });

Отображается поле на странице следующим образом:

"SxShipper": {
   "caption": { "bindTo": "Resources.Strings.SxShipper" },
   "dataValueType": this.Terrasoft.DataValueType.LOOKUP,
   //"multiLookupColumns": ["SxShipperContact", "SxShipperAccount"],
   "lookupListConfig": function() {
      return this.getLookupListConfig();
   },
   "isRequired": true
},

...

getLookupListConfig: function() {
   var multiLookupColumns = ["Contact", "Account"];
   var multiLookupConfig = multiLookupColumns.map(function(column) {
      return {
         entitySchemaName: column,
         columnName: "SxShipper",
         multiLookupColumnName: "SxShipper" + column,
         multiSelect: false,
         hideActions: true
      };
   }, this);
   var config = {
      lookupModuleId: this.Terrasoft.generateGUID(),
      lookupPageName: "CustomLookupPage",
      multiLookupConfig: multiLookupConfig
   };

   return config;
},

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

В чем может быть дело и в каком направлении копать?

Попробуйте для начала добиться нормальной работы лукапа по обычному ФИО, а затем модифицируйте под поиск по телефону.

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

Здравствуйте, если я добавлю к контакту некоторое булево поле, как при выборе его из обращения произвести отбор по этому полю?

 

Нравится

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

Rinat,
Добрый день!
Данную фильтрацию можно сделать
1. либо через бизнес правила:
1) через код https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primenen…
2) через мастер страницы (https://monosnap.com/file/ooYS71HNPA5gozrb204C1N5gCvCNeU)

2. либо в коде через параметр фильтрации атрибута
пример:

attributes: {
			"Contact": {
				lookupListConfig: {
					"filters": [
                        function() {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            var galochaFilter = Terrasoft.createColumnFilterWithParameter(
                            	Terrasoft.ComparisonType.NOT_EQUAL, "Galocka", true);
                            filterGroup.add("filter1", galochaFilter);
                            return filterGroup;
                        }
                    ]
				}
 
			}
		}

 

Ринат, здравствуйте!

На вашем втором скриншоте есть выпадающий список (там где "ФИО") в этом списке должно будет появиться добавленное поле. 

Так же через, по второму скриншоту, нажав на "Вид" Вы сможете вывести колонку в реестр модального окна

Гриценко Игорь, а как сделать чтобы он по умолчанию этот отбор применял и пользователю не пришлось руками этот отбор вбивать. Делаю что-то на подобии "неактивных" пользователей.

Rinat,
Добрый день!
Данную фильтрацию можно сделать
1. либо через бизнес правила:
1) через код https://academy.terrasoft.ru/documents/technic-sdk/7-13/primer-primenen…
2) через мастер страницы (https://monosnap.com/file/ooYS71HNPA5gozrb204C1N5gCvCNeU)

2. либо в коде через параметр фильтрации атрибута
пример:

attributes: {
			"Contact": {
				lookupListConfig: {
					"filters": [
                        function() {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            var galochaFilter = Terrasoft.createColumnFilterWithParameter(
                            	Terrasoft.ComparisonType.NOT_EQUAL, "Galocka", true);
                            filterGroup.add("filter1", galochaFilter);
                            return filterGroup;
                        }
                    ]
				}
 
			}
		}

 

Сидоров Александр В., не совсем понял как в мастер страницы попасть. Это не оно? 

Rinat,
Да, оно. Справа сверху есть кнопка перехода к бизнес правилам

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

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

Всем привет,

Для некоторых справочников доступна кнопка добавления записи из режима выбора, для некоторых нет (см. скриншот).
Как добавить такую кнопку для справочника, у которых нет такой кнопки?
Попробовал создать страницу редактирования и зарегистрировать в SysModule и SysModuleEdit, но это не сработало - справочник вообще перестал работать. Версия системы - 7.13, справочник создал сам.

Заранее спасибо за помощь.

Нравится

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

Проверьте что пользователь имеет права на добавление записи!

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

select  Value from SysModuleEditlcz
where recordid in (
    select id from SysModuleEdit where SysModuleEntityId in
        (select id from SysModuleEntity where SysEntitySchemaUId in
            (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
        )
    )
 
GO
 
select ActionKindCaption from SysModuleEdit
where SysModuleEntityId in
    (select id from SysModuleEntity where SysEntitySchemaUId in
        (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
    )

Вместо UsrCroppPlants вставьте название вашего объекта (справочника) Если пусто добавте заголовок

update SysModuleEditlcz
set Value = 'Добавить'
where recordid in (
    select id from SysModuleEdit where SysModuleEntityId in
        (select id from SysModuleEntity where SysEntitySchemaUId in
            (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
        )
    )
 
update SysModuleEdit
set ActionKindCaption = 'Добавить'
where SysModuleEntityId in
    (select id from SysModuleEntity where SysEntitySchemaUId in
        (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
    )

Очистите редис и перевойдите в систему

Дмитрий, здравствуйте!

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

Для добавления необходимо что бы существовала страница редактирования для объекта. Самый простой способ вам это сделать, воспользоватся мастером деталей и на основании объекта создать деталь, в мастере при создании детали будет закладка "Страница" на которой вы сможете задать внешний вид будущей страницы редактирования. После публикации детали, очистки кеша браузера и перезахода на сайт, можно будет добавлять записи используя эту страницу.

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


Если же при добавлении приложение будет ругаться, что у Вас нет страницы и добавлять нужно через раздел "Справочник", то Вам необходимо на уровне БД выполнить SQL скрипт (http://ftp.bpmonline.com/support/Pub/D.Vilshansky/включить_фичу_Feature…). Если у Вас приложение "SQL консоль" (https://marketplace.terrasoft.ru/app/pt-sql-executor-bpmonline) не установлено, то сообщите нам и мы с нашей стороны выполним скрипт.
 
Затем необходимо перезайти в приложение и почистить кэш браузера.

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

Спасибо за ответ. Проблема в том, что добавление страницы редактирования для объекта не решает этой проблемы.

Тёскин Дмитрий Валерьевич,

Дмитрий, здравствуйте!

Я проверил повторно если создать страницу и создать записи в таблицах SysModuleEntity и SysModuleEdit, то кнопка "Добавить" отображается и новые значения добавляются без ошибок.

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

Со своей стороны пример реализовал на триале - https://041232-crm-bundle.bpmonline.com/ (1/1) (раздел "Контакты" - поле "ТЕСТ").

Приблизительный алгоритм реализации:

1. Создание необходимых элементов в конфигурации:

- справочное поле (родительский объект "Базовый справочник") с необходимыми полями;

- создать страницу, которая будет открываться при нажатии на кнопку "Добавить" (родительский объект "BasePageV2" (Базовая схема карточки) (!!!)). Для того, чтобы создать схему с наследованием. то нужно в разделе конфигурации нажать на "Добавить" - в расширенных выбрать "Схема модели представления карточки".

- в схему вставить минимум кода, который необходим для работы:

define("UsrTEST2019PageV2", ["UsrTEST2019PageV2Resources"], function() {
    return (resources) {
        entitySchemaName: "Usrtest",
        attributes: {},
        modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
        methods: {},
        dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
        diff: /**SCHEMA_DIFF*/[
                                               {
                                                                "operation": "insert",
                                                                "name": "Name",
                                                                "parentName": "Header",
                                                                "propertyName": "items",
                                                                "values": {
                                                                                "bindTo": "Name",
                                                                                "layout": {
                                                                                                "column": 0,
                                                                                                "row": 0,
                                                                                                "colSpan": 12
                                                                                }
                                                                }
                                                }
        ]/**SCHEMA_DIFF*/
    };
});
 

 

2. Создание записей на уровне БД в таблицах SysModuleEntity и SysModuleEdit:

SELECT * FROM SysSchema Where Name = 'UsrTEST2019PageV2'
-- UId карточки редактирования = a1eab082-195b-4f2d-a64c-68bb3c09eb54
 
SELECT * FROM SysSchema Where Name = 'UsrTEST'
-- колонка UId объекта = ddcfdbfd-ecc0-44ea-9b49-9591b6b68044

-- проверяем развязочную таблицу
SELECT * FROM SysModuleEntity
WHERE SysEntitySchemaUId = 'ddcfdbfd-ecc0-44ea-9b49-9591b6b68044'
 
-- если нет там записи, добавляем:
INSERT INTO SysModuleEntity (SysEntitySchemaUId) VALUES ('ddcfdbfd-ecc0-44ea-9b49-9591b6b68044')
 
-- проверяем развязочную таблицу
SELECT * FROM SysModuleEntity
WHERE SysEntitySchemaUId = 'ddcfdbfd-ecc0-44ea-9b49-9591b6b68044'
-- берем от туда Id = 2988ae6b-2566-42ec-b240-5b00082252bc
 
INSERT INTO SysModuleEdit (SysModuleEntityId, CardSchemaUId, ActionKindCaption,
ActionKindName, PageCaption) VALUES ('2988ae6b-2566-42ec-b240-5b00082252bc', 'a1eab082-195b-4f2d-a64c-68bb3c09eb54', 'test',
'UsrTEST','Test')
 
SELECT * FROM SysModuleEdit WHERE SysModuleEntityId = '2988ae6b-2566-42ec-b240-5b00082252bc'

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

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

 

 

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

Попробовал сделать по вашему мануалу - всё равно не хочет работать. Ковыряние UI кода показывает, что моего справочника (как и многих других моих справочников) нет в Terrasoft.configuration.EntityStructure. По какому условия туда попадают объекты и почему там нет моего объекта ?

Проверьте что пользователь имеет права на добавление записи!

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

select  Value from SysModuleEditlcz
where recordid in (
    select id from SysModuleEdit where SysModuleEntityId in
        (select id from SysModuleEntity where SysEntitySchemaUId in
            (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
        )
    )
 
GO
 
select ActionKindCaption from SysModuleEdit
where SysModuleEntityId in
    (select id from SysModuleEntity where SysEntitySchemaUId in
        (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
    )

Вместо UsrCroppPlants вставьте название вашего объекта (справочника) Если пусто добавте заголовок

update SysModuleEditlcz
set Value = 'Добавить'
where recordid in (
    select id from SysModuleEdit where SysModuleEntityId in
        (select id from SysModuleEntity where SysEntitySchemaUId in
            (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
        )
    )
 
update SysModuleEdit
set ActionKindCaption = 'Добавить'
where SysModuleEntityId in
    (select id from SysModuleEntity where SysEntitySchemaUId in
        (select uid from sysschema where name = 'UsrCroppPlants') --название объекта раздела
    )

Очистите редис и перевойдите в систему

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