Добрый день.
Необходимо получить выборку из справочника City, где не заполнено поле RegionId
Делаю Get запрос:

Url сайта>/0/ServiceModel/EntityDataService.svc/CityCollection?$filter=Region/Id eq guid'00000000-0000-0000-0000-000000000000'

В ответ приходит:

version="1.0" encoding="utf-8"?> xml:base="http:///0/ServiceModel/EntityDataService.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">>http:// сайта>/0/ServiceModel/EntityDataService.svc/CityCollection></span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text"</span><span style="color: #000000; font-weight: bold;">></span></span>CityCollection<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">>>2016-10-31T13:34:09Z> rel="self" title="CityCollection" href="CityCollection" />> />>>

Если подставить в фильтр Id существующего региона, то фильтр отрабатывает корректно.

Как реализовать данный кейс?

Нравится

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

Здравствуйте.
Подскажите пожалуйста, есть ли такая функция вроде Instr?
Нужно проверить вхождение 'код1' в 'код1; код2; код3; ...'

for (var i = 0; i arrOperCodes.length-1; i++)
{
if(встречается ли arrOperCodes[i] в arr[0])
}
Версия 3.2.0.90

Спасибо.

Нравится

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

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

Используйте функцию indexOf.

Можете воспользоваться вот такой функцией:

function GetIndexOfItemInArray(SearchValue, SearchArray) {
                for (var i = 0; i < SearchArray.length; i++) {
                               if (SearchValue == SearchArray[i]) {
                                               return i;
                               }
                }
                return -1;
}

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

Спасибо большое.

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

Добрый день.

Создала деталь с выбором из справочника [ConfigItemModel] (создавала на основе примера: создание детали...)
Для детали был создан объект [UsrModelCIInSupplies].
Возникли ошибки при вызове окна справочника

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

2 ошибка. Вы выборе данных, они не вставляются в объект [UsrModelCIInSupplies].
изображение 2

Сам код детали

define("UsrSchema5Detail", ["ConfigurationEnums"],
        function(enums) {
        return {
                entitySchemaName: "UsrModelCIInSupplies",
                attributes: {},
                messages: {},
                methods: {
                        //колонки выбираемые запросом
                        getGridDataColumns: function() {
                                return {
                                        "Id": {path: "Id"},
                                        "UsrConfigItemModel": {path: "UsrConfigItemModel"},
                                        "UsrConfigItemModel.Name": {path: "UsrConfigItemModel.Name"}
                                };
                        },
                        //конфигурирует и отображает модальное окно справочника
                        openUsrConfigItemModelLookup: function() {
                                //конфигурирует объект
                                var config = {
                        //название схемы объекта, записи которого будут отображены в справочнике
                                        entitySchemaName: "ConfigItemModel",
                                        //множественный выбор
                                        multiSelect: true,
                                        //колонки, которые будут отображены в справочнике
                                        columns: ["Name"]
                                };
                                var UsrConsumablesId = this.get("MasterRecordId");
                                if (this.Ext.isEmpty(UsrConsumablesId)) {
                                        return;
                                }
                                //экземпляр класса [EntitySchemaQuery]
                                var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                                        //установка корневой схемы
                                        rootShemaName: this.entitySchemaName
                                });
                                //добовление колонки [Id]
                                esq.addColumn("Id");
                                //добавление колонки [id] из схемы [UsrConfigItemModel]
                                esq.addColumn("UsrConfigItemModel.Id", "UsrConfigItemModelId");
                                //Создание и добаление фильтров в коллекцию запроса
                                esq.filters.add("filterUsrConsumables",
                                this.Terrasoft.createColumnFilterWithParameter(
                                        this.Terrasoft.ComparisonType.EQUAL, "UsrConsumables", UsrConsumablesId));
                // Получение всей коллекции записей и отображение ее в модальном окне справочника.
                                esq.getEntityCollection(function(result) {
                                        var existsUsrConfigItemModelCollection = [];
                                        if (result.success) {
                                                result.collection.each(function(item) {
                                                        existsUsrConfigItemModelCollection.push(item.get("UsrConfigItemModelId"));
                                                });
                                        }
                                        // Добавление фильтра в конфигурационный объект.
                                        if (existsUsrConfigItemModelCollection.length > 0) {
                                                var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
                                                        existsUsrConfigItemModelCollection);
                                                existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
                                                existsFilter.Name = "existsFilter";
                                                config.filters = existsFilter;
                                        }
                                        // Вызов модального окна справочника
                                        this.openLookup(config, this.addCallBack, this);
                                }, this);
                        },
                        //обработчик события сохранения страницы редактирвоания
                        onCardSaved: function() {
                                this.openUsrConfigItemModelLookup();
                        },
//открывает справочник МКЕ в случае если странца была редактирвоания РМ была ранее сохранена
                        addRecord: function() {
                                var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
                                var isNewRecord = (masterCardState.state === enums.CardStateV2.ADD ||
                                masterCardState.state === enums.CardStateV2.COPY);
                                if (isNewRecord === true) {
                                        var args = {
                                                isSilent: true,
                                                messageTags: [this.sandbox.id]
                                        };
                                        this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
                                        return;
                                }
                                this.openUsrConfigItemModelLookup();
                        },
                        //добавление выбранных продуктов
                        addCallBack: function(args) {
                                //экземпляр класса пакетного запроса BatchQuery
                                var bq = this.Ext.create("Terrasoft.BatchQuery");
                                var UsrConsumablesId = this.get("MasterRecordId");
                                //коллекция выбранных в справочнике данных
                                this.selectedRows = args.selectedRows.getItems();
                                //колекция, передаваемая в запрос
                                this.selectedItems = [];
                                // Копирование необходимых данных.
                                this.selectedRows.forEach(function(item) {
                                        item.UsrConsumablesId = UsrConsumablesId;
                                        item.UsrConfigItemModelId = item.values;
                                        bq.add(this.getUsrConfigItemModelInsertQuery(item));
                                        this.selectedItems.push(item.values);
                                }, this);
                                //выполнение пакетного запроса, если он не пустой
                                if (bq.queries.length) {
                                        this.showBodyMask.call(this);
                                        bq.execute(this.onUsrConfigItemModelInsert, this);
                                }
                        },
                        //возвращает запрос на добавление текущего объекта
                        getUsrConfigItemModelInsertQuery: function(item) {
                                var insert = Ext.create("Terrasoft.InsertQuery", {
                                        rootShemaName: this.entitySchemaName
                                });
                                insert.setParameterValue("UsrConsumables", item.UsrConsumablesId,
                                this.Terrasoft.DataValueType.GUID);
                                insert.setParameterValue("ConfigItemModel", item.UsrConfigItemModelId,
                                this.Terrasoft.DataValueType.GUID);
                                return insert;
                        },
                        //метод, вызываемый при добавлении записей в реестр детали
                        onUsrConfigItemModelInsert: function(response) {
                                this.hideBodyMask.call(this);
                                this.beforeLoadGridData();
                                var filterCollection = [];
                                response.queryResults.forEach(function(item) {
                                        filterCollection.push(item.id);
                                });
                                var esq = Ext.cteate("Terrasoft.EntitySchemaQuery", {
                                        rootShemaName: 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 "UsrConfigItemModel";
                        }
                },
                        // Массив модификаций.
                diff: /**SCHEMA_DIFF*/[
                                {
                                        // Тип операции — слияние.
                                        "operation": "merge",
                                        // Название элемента схемы, над которым производится действие.
                                        "name": "DataGrid",
                                // Объект, свойства которого будут объединены со свойствами элемента схемы.
                                        "values": {
                                                "rowDataItemMarkerColumnName": "UsrConfigItemModel"
                                        }
                                },
                                {
                                        // Тип операции — слияние.
                                        "operation": "merge",
                                        // Название элемента схемы, над которым производится действие.
                                        "name": "AddRecordButton",
                                // Объект, свойства которого будут объединены со свойствами элемента схемы.
                                        "values": {
                                                "visible": {"bindTo": "getToolsVisible"}
                                        }
                                }
                        ]/**SCHEMA_DIFF*/
                };
});

Задача стоит, сделать деталь такой же как, например: деталь [ConfItemUserDetail] в КЕ.

Версия продукта: service enterprise 7.8.2

Нравится

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

Где и как правильно поправить код?

Добрый вечер, Алеся.

Исходя из ошибки - у Вас неправильно строится запрос к базе данных в методе openUsrConfigItemModelLookup. На первом скриншоте явно видно, что запрос не был построен корректно. Проверьте правильность имен колонок, а также правильность связей. SDK.

Ошибка на втором скриншоте результат первой ошибки. Метод addCallBack получил не правильный параметр args и затем у несуществующего свойства selectedRows попытался вызвать метод forEach.

Добрый вечер.

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

// Получение всей коллекции записей и отображение ее в модальном окне справочника.
				esq.getEntityCollection(function(result) {
					var existsUsrConfigItemModelsCollection = [];
					if (result.success) {
						result.collection.each(function(item) {
							existsUsrConfigItemModelsCollection.push(item.get("UsrConfigItemModelId"));
						});
					}

изображение 1

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

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

Нравится

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

Добавление данных, которое сформирует активности для пользователей с ролью "Системные администраторы":

Еще нужно записывать повторный запуск процесса в Quartz (через определенное время). Эта тема обсуждалась здесь:
http://www.community.terrasoft.ru/forum/topic/13945

При такой настройке задача действительно поступает группе.
Однако, если это одна задача для роли, то есть для одного из членов группы, то необходимо, чтобы при изменении состояния задачи на "в работе" одним, этот статус должен быть виден и другим.
Фактически предложенное решение - это тиражирование задачи на группу, когда все выполняют одинаковую задачу, а вопрос заключается в постановке ОДНОЙ задачи для РОЛИ, т.е. одной задачи для одного из членов группы, так и не решена.

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

В таком случае реализация будет несколько отличаться - вначале будет генерироваться активность, а потом результат выборки будет добавляться в объект "Участники активности".

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

В sales team 7.8 нужно в бизнес-процессе отправить уведомление текущему пользователю по продажам без активных задач. Но уведомление не появляется в Центре уведомлений. Что делаю неправильно?
В бизнес-процессе есть 2 элемента: Читать продажу и Добавить уведомление.

Элемент "Добавить уведомление" настраиваю так:

Заголовок: "Нет активных задач по продаже"
NotificationType: [#Справочник.Тип уведомлений.Reminding#]
Время: [#Системная переменная.Текущее значение даты и времени#]
Источник: [#Справочник.Источник уведомления.Opportunity#]
Кому: [#Системная переменная.Контакт текущего пользователя#]
Объект: [#Справочник.Объект раздела (представление).Продажа#]
Уникальный идентификатор заголовка: [#Читать продажу.Первый элемент результирующей коллекции.Id#]

Нравится

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

Проблема в том, что не только не происходит подсчет количества уведомлений, но и в том, уведомление по продаже не появляется в самом Центре уведомлений. И проблема наблюдается именно по продажам.
Если же создавать уведомление по активностям из бизнес-процесса, уведомление по активности появляется в Центре уведомлений.

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

При запуске процесса валятся ошибки в консоли https://yadi.sk/i/dTz4FzWgxjjf3
Ошибка запроса к RemindingsDataService/GetPopupConfig

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

В sales enterprice 7.8 нужно в карточке счета на стандартной детали Продукт в счете подтянуть некоторые колонки из объекта Продукт. Но после нажатия в меню детали ссылки "Настроить колонки" есть возможность "вытянуть" колонки только из объекта "Продукт в счете" https://yadi.sk/i/Vbg7O83_xg2Tz
Деталь не кастомная. Судя по демо-версии, там наблюдается такая же ситуация с данной деталью.

Нравится

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

Добрый день, Анастасия!

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

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

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

Нравится

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

Кирилл,
Кнопка "Квалифицировать" запускает процесс, который указан в системной настройке "Процесс управления лидом". Можете заменить значение настройки на пользовательский процесс.
Елси потребуется запускать БП из клиентского модуля - примеры можно найти на академии или community:
https://academy.terrasoft.ua/documents/technic-sdk/7-8/zapusk-processa-…

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

Приветсвую!
Есть ли в системе штатная возможность логировать операцию слияния дублей?

Нравится

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

Добрый день!

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

С уважением, Анна

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

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

Нравится

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

Здравствуйте, дело в том, что карточки функционируют в нескольких режимах:
1. Комбинированный режим – это когда по центру карточка, а с боку виден реестр, или даже спрятан, но остается стрелочка для показа кусочка реестра слева.
2. Режим карточки, это именно тот режим после F5 в котором вам видна ваша кнопка.
В первом режиме за панель с кнопками отвечает секция SectionV2, во втором карточка PageV2
Вот в этой теме этот нюанс уже обсуждался http://www.community.terrasoft.ru/forum/topic/13848
Так же почитайте академию:
https://academy.terrasoft.ua/documents/technic-sdk/7-6-0/kak-dobavit-kn…
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-dobavit-knop…
https://academy.terrasoft.ru/documents/technic-sdk/7-8/dobavlenie-knopk…

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

Добрый день.

Создали в "Средствах связи" в карточке контакта новый тип средства связи - "Доп.email".
В профиле карточки контакта создали поле "Доп. email" куда хотим выводить доп.email из средств связи.
Но, как видно из прикрепленного скриншота, в профиль контакта в поле "Доп. email" ничего не выводится, хотя в средствах связи указан "Доп.email" контакта.
Как подтягивать в профиль контакта "Доп.email" из средств связи, аналогично другим средствам связи?

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

Нравится

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

Здравствуйте,
Дело в том, что деталь, это отдельный объект в системе. В вашем случае объект детали "средства связи контакта": «ContactCommunication». А сама карточка контакта, другой объект (таблица в бд): "Contact", в которой самые основные средства связи продублированы, к примеру, как вы продублировали, создав поле "Доп. email". Но что бы оно заполнялось, необходимо написать соответствующую логику. К примеру, вы можете создать бизнес-процесс для этой цели, по событию создания экземпляра ContactCommunication, и в связанный контакт при этом, элементом «изменение данных», записывать сохраняемый дополнительный E-mail из детали в контакт. Подробнее про БП читайте в цикле статей на академии:
https://academy.terrasoft.ua/documents/technic-bpms/7-8/obzor-vozmozhno…

Максим Шевченко пишет:

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

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

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

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