Добрый день!

Возникла сложность при настройке БП.

Написала метод,проверяет наличие контрагента по названию контрагента.

1.Проблема с UserConnection.
var account = new Terrasoft.Configuration.Account(UserConnection); Выпадает ошибка, что UserConnection используется как переменная.
Заменила на :
var account = Get("UserConnection");

2. ошибка при использовании FetchFromDB(прикрепила изображение с ошибкой)
Не нашла ничего толком по тому как используется FetchFromDB
Usings добавила Terrasoft.Configuration

AExists = account.FetchFromDB(Name);
В Name указала название контрагента.

Подскажите,пожалуйста, как решить данную ошибку.

Нравится

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

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

Зачем для этого писать код?

Используйте элемент "Чтение данных" в режиме подсчета количества записей по объекту "Контрагент". Создайте параметр процесса с типом "Строка". В элементе "Чтение данных" необходимо сравнить название с параметром процесса.

Если нужно решить задачу кодом, тогда рекомендую изучить документацию:
https://academy.terrasoft.ru/documents/technic-sdk/7-9/ispolzovanie-ent…

Спасибо за ответ!

Первый вариант идеально подходит!

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

Добрый день!
Подскажите, есть ли какая-нибудь документация по работе с Комбобоксом в 7.2?
Хочу создать комбобокс с выпадающим списком от 1 до 5. И это значение сохранять в целочисленное поле объекта (таблицы).
Создаю комбобокс через BankModuleUtilities.utils.getComboBox. Но не получается его заполнить.

Нравится

3 комментария
define('ContactPersonalInfoModuleITS', [
        'ext-base', 'terrasoft', 'sandbox', 'ContactPersonalInfoModuleITSResources',
        'ViewUtilities', 'BaseProcessViewModelClass', 'ProcessHelper', 'BankModuleUtilities', 'BankConfigurationConstants',
        'KFClientConsts', 'MaskHelper'],
    function(Ext, Terrasoft, sandbox, resources, ViewUtilities, BaseProcessViewModelClass, ProcessHelper,
             BankModuleUtilities, BankConfigurationConstants, KFConsts, MaskHelper) {
 
        var bankModuleUtils = BankModuleUtilities.utils;
        var bankModuleMethods = BankModuleUtilities.methods;
        var lc = resources.localizableStrings;
        var viewModel;
 
        function getView(processData) {
            ...
            var clientInfoGroup = bankModuleUtils.getControlGroup('ClientInfo',
                lc.ITSAdditionalInformationGroupCaption);
            clientInfoGroup.items = [
                bankModuleUtils.getLabel(lc.ITSFromOneToFiveLookupCaption, '', {id: 'FromOneToFiveLookupControlLabel'}),
                bankModuleUtils.getComboBox('FromOneToFiveLookup')
            ];
   ...
        }
 
        function getViewModel() {
            return Ext.create('Terrasoft.BaseProcessViewModel', {
                values: {
                    fromOneToFiveLookupList: new Terrasoft.Collection()
                },
                methods: {
                    getFromOneToFiveLookupList: function(filter, list) {
                        bankModuleMethods.fillListBySchemaName(list, 'FromOneToFiveLookup');
                    }
                },
                columns: {
                    FromOneToFiveLookup: {
                        dataValueType: Terrasoft.DataValueType.ENUM,
                        isRequired: false
                }
            });
        }
 
        function render(renderTo) {
            var processData = ProcessHelper.getProcessElementData(sandbox);
            var view = getView(processData);
            if (!viewModel) {
                viewModel = getViewModel(renderTo);
                viewModel.sandbox = sandbox;
                viewModel.processData = processData;
                viewModel.onLoad();
            }
            view.bind(viewModel);
            view.render(renderTo);
            document.getElementById('MaritalStatus-el').focus();
        }
 
        return {
            render: render
        };
    });

Вам надо создать справочник (в моем примере FromOneToFiveLookup) в котором будут значение 1 - 5

Спасибо!
А можно как-то без создания справочника обойтись?

bankModuleMethods.fillListBySchemaName
Посмотрите как заполняет список этот метод и сами вручную заполните свой список

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

Доброго времени суток!
Прошу объяснить принцип установки пакета из репозитория.
Объясню причину данного обращения, есть около 7 пакетов которые были созданы нами и вот когда мы попытались засетапить их на другую среду (заранее проясню что их версии и сборки абсолютно идентичны), после выполнения необходимых первоначальных действий установки зависимостей пакетов друг от друга, генерации исходного кода компиляции, обновлении структуры базы данных и, наконец, установки данных мы получаем ряд ошибок связанных с отсутствием необходимых колонок, если быть конкретнее то справочных полей.
Когда смотрим в таблицу в БД обнаруживаем, что действительно, данных колонок там просто нету.
Так вот вся суть в чем, каким образом тогда выполняются этапы установки пакета и чем стоит пользоваться при их установке?
Это будет SVN или лучше с помощью workspace console?
Прошу более детально ответить на данный вопрос.
Данная функциональность разрабатывается в рамках проекта РусТехЭксперт.

Нравится

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

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

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

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

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

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

Здравствуйте, Михаил.

Прикрепите пожалуйста логи установки.

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

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

Нравится

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

Добрый день!

Удаление связанных записей – комплексный механизм, который пока не реализован в бизнес-процессах. Ваше пожелание будет учтено при разработке следующих версий продукта.

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

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

Можно ли скрыть для просмотра данные в определенных колонках реестра, для пользователей не являющихся ответственными за запись?

Нравится

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

Штатными средствами такое сделать нельзя: есть отдельно права по колонкам, отдельно — по записям. Возможно, как-то с помощью программных доработок.

Возможно у кого-то был подобный опыт?

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

Спасибо!

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

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

Возникла необходимость доработать стандартный справочник, а именно - реализовать реестр в справочнике и страницу редактирования записей справочника. Реестр реализовать получилось, а страницу он почему-то не видит. При попытке добавления или открытия записи в консоли браузера появляется ошибка "message: Uncaught Terrasoft.ItemNotFoundException: Элемент с ключом null Не существует". Подскажите, возможно кто-нибудь с этим сталкивался?

Нравится

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

Здравствуйте, Сергей!

Без отладки и по описанию сложно сказать в чем проблема, также:

- нет полного листинга кода;
- нет полного понимая, что прописано в БД.

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

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

При создании разделов и деталей при помощи мастера, возникают ошибки с блокировкой файлов в svn.

К примеру мой кейс.
Создал раздел UsrX который в момент компиляции выполнился с ошибкой. Система создала стандартный набор файлов и сразу из заблокировала(зеленый замок).
Значит так конец рабочего дня надо идти. Мы это дело фиксируем и идем домой.
На следующий день понимаем что надо удалить раздел UsrX (описание тут https://academy.terrasoft.ru/documents/bank-customer-journey/7-9/chasto-...)
Но мы уже не помним что файлы у нас залоченные, удалив из БД, мы удаляем наши зеленые файлы.
Соответственно фиксируем чтобы было это видно.

Ну и начинаем заново создавать раздел, ура сегодня он создался удачно, мы рады. Комитим, и тут нам svn ругается что такой файл уже есть и он залочен - разблокируй его. Но уже никак. С таким именем уже не сделать.

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

Кто-то сталкивался с таким уже?

Нравится

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

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

Александр, да все верно. В моем случае это помогло. Но ошибка которая выходила при этом меня сбила столку.

Элементы невозможно зафиксировать в хранилище, т.к. один или несколько компонентов заблокированы другим пользователем
Working copy '\Usr' locked
SvnErrorCode: SVN_ERR_WC_LOCKED
RootCause: sqlite[S14]: unable to open database file

Долго мучился, пока на самом деле не удалил папку C:\Windows\Temp\NN\Worspace\TerrasoftPackages
где NN - номер приложения
Worspace - Имя Worspace.

Было бы классно в FAQ добавить)))

Вы можете добавить своё пожелание, нажав кнопки под статьёй в академии. Ссылку на Ваше сообщение туда уже отправил.

Марат, получили от Вас обратную связь на Академии, спасибо! Запланировала задачу, сделаем дополнение в FAQ.

Людмила, еще момент, мы сталкиваемся с такой проблемой в SVN с тем, что система дает удалять залоченные файлы. Тем самым если в последствии системе создать аналогичный - то не получится его добавить в репозитарий.

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

Напишите, пожалуйста, подробный кейс воспроизведения данной ошибки на support@terrasoft.ru, чтобы мы могли воспроизвести ошибку и передать информацию разработчикам ядра.

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

Здравствуйте! Необходимо добавить красную кнопку “Удалить” на страницу Лида, что-то в таком роде:
!
Делаем по документации (https://academy.terrasoft.ru/documents/technic-sdk/7-9/kak-dobavit-knopk...),
добавили код в замещающую схему LeadPageV2, кэш чистили, но кнопка все равно не отображается.

 diff: [
            {
                "operation": "insert",
                "parentName": "CombinedModeActionButtonsCardLeftContainer",
                "propertyName": "items",
                "name": "DeleteLeadButton",
                "values": {
                    "itemType": Terrasoft.ViewItemType.BUTTON,
                    "caption": {bindTo: "Resources.Strings.DeleteLeadButtonCaption"},
                    "click": {bindTo: "onDeleteLeadClick"},
                    "style": Terrasoft.controls.ButtonEnums.style.RED,
                }
            }
        ]

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

Нравится

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

Если режим совмещённый, то добавлять нужно в схему LeadSectionV2. Вы же добавили кнопку в схему страницы редактирования в, скорее всего, несуществующий там контейнер "CombinedModeActionButtonsCardLeftContainer"

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

Если рекомендация от Данилы не помогла, то просьба предоставить полный листинг кода.

Большое спасибо за помощь, после добавления кода в LeadSectionV2 кнопка появилась. :smile:
Подскажите пожалуйста, как должна выглядеть функция для удаления записи. Сперва вытягиваем id лида:

var leadId = this.get("Id");

а как в дальнейшем его можно удалить?

Мария, здравствуйте!

Наглядный пример реализации Вы можете посмотреть в обработчике кнопки "Удалить" в реестре раздела.

Спасибо, получилось реализовать удаление с помощью функции deleteRecords из GridUtilitiesV2.
Добавили таким образом кнопку в 3 раздела, всё работает, только в разделе “Контакты” кнопка не отображается :sad:. В контактах 3 вида страниц, ссылка на страницу редактирования контакта имеет вид:

ViewModule.aspx#CardModuleV2/BtcContactType1Page/edit/deafe024-a148-4ba6-a4b1-cb8fce5b8443

, может ли это как-то влиять на способ добавления кнопки?

Попробуйте этот же код добавить и в Section и на Page (если их несколько, то во все).

Мария, а что делает кнопка "Удалить"? Если правильно поняли, то она удаляет текущую запись. Тогда хотелось бы посоветовать продумать удаление более глобально, так как нужно учесть все возможные моменты. Например:

- что должно произойти после нажатия;
- что делать с деталями;
- что будет если после нажатия "Удалить", нажать на "Сохранить" и т.д;
- процессная ли карточка или нет.

Спасибо, кнопка в контактах появилась. :smile:

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

Но возникла проблема с удалением на отдельной странице, если допустим перейти с лида в контакт, или из контакта в лид, или даже просто перезагрузить страницу из раздела, то кнопка удаления не срабатывает. Подскажите, пожалуйста, как в Page можно осуществить удаление? Не можем найти пример в стандартных схемах.

Или можно как-то самому принудительно запускать совмещенный режим при переходе на другую страницу, в плане: сделать, что при нажатии на кнопку “удалить” перекидывало в карточку, но в совмещенном режиме и автоматически нажималась кнопка удалить сразу?

Для исправления - продублируйте код метода, связанного с кнопкой "удалить" в схеме карточки. Также смотрите в сторону использования Terrasoft.DeleteQuery для удаления записи по Id. Для перехода обратно в раздел - воспользуйтесь сообщением PushHistoryState.

Спасибо за помощь,
Функция удаления из раздела:

deleteRecords: function() {
        var activeRow = this.getActiveRow();
        if (activeRow && activeRow.isNew) {
            this.removeGridRecords([activeRow.get("Id")]);
        } else {
            var items = this.getSelectedItems();
            if (!items || !items.length) {
                return;
            }
            this.checkCanDelete(items, this.checkCanDeleteCallback, this);
        }
    },
 
    handleAfterDelete: function() {
        this.sandbox.unRegisterMessages(["MultiDeleteFinished"]);
        this.registerMultiDeleteMessages();
        this.reloadGridData();
        this.onDeleted({
            Success: true
        });
        this.onDataChanged();
        var requestUrl = "SectionModuleV2/UsrInterestSection";
        this.sandbox.publish("PushHistoryState", {
            hash: requestUrl
        });
    }

Код функции удаления со страницы редактирования:

delete: function() {
    var recId = this.get("Id");
    var deleteQuery = Ext.create("Terrasoft.DeleteQuery", {
        rootSchemaName: "UsrInterest"
    });
    deleteQuery.filters.add("userFilter",
        deleteQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Id", recId));
    deleteQuery.execute(function() {});
 
    var requestUrl = "SectionModuleV2/UsrInterestSection";
    this.sandbox.publish("PushHistoryState", {
        hash: requestUrl
    });
}

На странице записи удаление происходит, но не выходит выполнить каскадное удаление, подскажите пожалуйста, как проще реализовать удаление связанных записей?

Добрый день.

Удалить записи каскадно через DeleteQuery у Вас не выйдет. Возможны только следующие два варианта:

1) Перед удалением основной записи выполнять SELECT для получения Id связанных записей. Удалять их, а только затем выполнять DELETE основной.

2) На уровне объекта установить чекбокс "каскадная связь".

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

Спасибо, для пользовательского раздела с галочкой "каскадная связь" всё получилось.
Не подскажите, пожалуйста, где для лидов ставить это свойство для каскадного удаления в процессах и для контактов в лидах?

!

Данная деталь создается на основании view VwEntityInProcess. Код самой вьюхи:

ALTER VIEW [dbo].[VwEntityInProcess] (
	[Id],
	[CreatedOn],
	[CreatedById],
	[ModifiedOn],
	[ModifiedById],
	[ProcessListeners],
	[EntitySchemaName],
	[RecordId],
	[ProcessCaption],
	[ProcessDescription]
)
AS
SELECT DISTINCT
	ss.[Id],
	ss.[CreatedOn],
	ss.[CreatedById],
	ss.[ModifiedOn],
	ss.[ModifiedById],
	ss.[ProcessListeners],
	ss.[Name],
	secpe.[RecordId],
	ssProcess.[Caption],
	ssProcess.[Description]
FROM [SysEntityCommonPrcEl] secpe
	JOIN [SysSchema] ss ON ss.UId = secpe.[EntitySchemaUId]
	JOIN [SysProcessElementData] sped ON secpe.[ProcessElementId] = sped.[Id]
	JOIN [SysProcessData] spd ON spd.[Id] = sped.[SysProcessId]
	JOIN [SysProcessData] spdParent ON COALESCE(spd.ParentId, spd.Id) = spdParent.[Id]
	JOIN [SysSchema] ssProcess ON ssProcess.[Id] = spdParent.[SysSchemaId]
	JOIN [SysProcessLog] spl ON spl.[SysSchemaId] = spdParent.[SysSchemaId]
WHERE spl.[StatusId] = 'ed2ae277-b6e2-df11-971b-001d60e938c6'
GO

Спасибо за помощь. С изначальным удалением из VwEntityInProcess не получилось, появляется ошибка: "Uncaught View or function 'dbo.VwEntityInProcess' is not updatable because the modification affects multiple base tables."
А удалять "без связанных записей" с помощью DeleteQuery, или как можно выполнить sql запрос на удаление по нажатию кнопки ?

"Maria H" написал:как можно выполнить sql запрос на удаление по нажатию кнопки ?

Это можно сделать на бекенде, тоесть вам нужно сделать свой конфигурационный веб сервис:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-sozdat-svoy-…
В теле которого уже формировать произвольный sql запрос, пример:

var test = new CustomQuery(UserConnection, DBEngine.GetIndexQuerySqlText())
.WithParameter("DBSchemaName", DBEngine.CurrentSchemaName)
.WithParameter("EntitySchemaQualifierName", null, "DBObjectName")
.WithParameter("EntitySchemaName", entitySchemaName)
.WithParameter("IndexName", indexName);

Где второй параметр new CustomQuery, собственно текст самого запроса, с параметрами внутри через собаку, к пр. @param_name, если параметры конечно нужны.
Выполнить можно так:
test.Execute();
Если это запрос на чтение, то можно преобразавать его в стандартный IDataReader:
using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
IDataReader datareader = test.ExecuteReader(dbExecutor);
}
После чего данный сервис по удалению можно будет вызвать из ваших схема страниц\секций следующим образом:
https://academy.terrasoft.ru/documents/technic-sdk/7-8/kak-programmno-v…

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

Что за?

user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://localhost:7904/core/337b572dd248a0a080c15d716da3ea14/combined/all...
line: 888
column: 144
message: Uncaught Terrasoft.ArgumentNullOrEmptyException: Несуществующий или пустой аргумент с именем; argumentName: query
date: Wed Mar 01 2017 16:05:17 GMT+0300 (RTZ 2 (зима))
stack: undefined

Новая 791 свежая платформа....создаю первую деталь и такое.

Нравится

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

Через некоторое время вышло

Failed to create temp file 18 : It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.

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

И записи в [SysDetail] нет.

Не могу понять...платформа новая.

Выполнил этот запрос

DECLARE 
    -- Название схемы представления создаваемой миникарточки.
    @ClientUnitSchemaName NVARCHAR(100) = 'UsrCourierServiceDetail',
    -- Название схемы объекта, к которому привязывается миникарточка.
    @EntitySchemaName NVARCHAR(100) = 'UsrCourierService',
    -- Название детали.
    @DetailCaption NVARCHAR(100) = 'Курьерская служба'
 
INSERT INTO SysDetail(Caption, DetailSchemaUId, EntitySchemaUId)
VALUES(@DetailCaption,
     (SELECT TOP 1 UId
      from SysSchema
      WHERE Name = @ClientUnitSchemaName),
      (SELECT TOP 1 UId
      from SysSchema
      WHERE Name = @EntitySchemaName))

и заработало другие детали начали делать нормально.
Странно.

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

Коллеги, добрый день.

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

1) Закрытие полей на редактирование на автогенерируемой странице
2) Использования фильтра в справочном поле (Выбор сотрудника из раздела Физ. лица, но только из тех, у кого есть определенные роли в системе)

С уважением,
Дмитрий

Нравится

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

Добрый день!

Элемент [Автогенерируемая страница] недоступен для редактирования, т.е. настроить бизнес-правила не получится.
Для решения задачи используйте [Преднастроенная страница]. Тут вы можете настроить все необходимые правила/фильтры.

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