Добрый день! 

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

Спасибо!

Нравится

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

Руслан, так это свойство браузера же. Хром все сохраняет - и ничего дополнительного для этого не делали.

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

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

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

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

В версии 7.12.4.924 имя пользователя сохраняется. С версии 7.13.1.769 (а может начиная с 7.13.0) уже нет. Видимо что то в приложении поменяли.

В 7.13.0 и 7.14.0 — сохраняется.

Точно. В 7.14.0 - сохраняется, будем обновляться тогда.

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

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

Я использую сервис 0/ServiceModel/EntityDataService.svc/DocumentCollection/ GET запросом я получаю коллекцию документов по своему дистрибьютору в XML формате.

А как мне получить информацию о товарах которые были проданы в этом документе и их количестве?

Нравится

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

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

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

EntityDataService работает аналогично для объекта каждой детали. То есть для детали продуктов в счёте (объект InvoiceProduct) будет 0/ServiceModel/EntityDataService.svc/InvoiceProductCollection/. А наложить фильтр по Id счёта можно подобно тому, как фильтруют по контакту тут.

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

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

Я нашел что коллекцию товаров можно получить из OfferingCollection.

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

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

OfferingCollection по документам из DocumentCollection по клиентам из AccountCollection у которых &filter=Distributor/Id eq мой Дистрибьтор/мEdm.Guid'e63ac989-9760-4453-b45f-943e906447e8'

Или здесь можно только последовательно бегать по коллекциям и внутри каждой получать значения других коллекций. Т.е. я получаю всех клиентов своего дистрибьютора, в цикле бегаю по ним и получаю документы этого клиента, внутри документа получаю OfferingCollection и бегаю по ней?

 

Видимо да, из одного запроса получать список Id результатов, затем поочерёдно с ними работать. Возможно, есть смысл создать в базе view по этим условиям, возвращающий плоскую таблицу со всей информацией, к нему объект в конфигурации с такими же колонками и затем работать по OData с ним, накладывая простые фильтры по Id или названию.

Способы построения запросов к OData с фильтрацией описаны тут и тут.

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

 Спасибо! Еще вопрос:

Вы не в курсе, а можно ли сделать фильтр по массиву значений? Например я получил 100 документов (DocumentCollection), и хочу сразу в одном запросе получить все строки этих документов (DocumentOfferingCollection). Я могу как то в фильтр загнать все 100 Document/id и единым запросом получить все табличные части всех документов. А потом уже у себя циклом их перебирать и к каждому документу прибавлять его строки.

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

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

Нужно сделать сложную выборку из БД и загрузить ее в gridData.

Столбцы gridData создал все подготовил. Теперь нужно загрузить данные.

gridData.loadAll - загружает данные из выборки EntitySchemaQuery.

Я планирую данные получать из исходного кода, там будет обычный SQLText который вернет мне таблицу с результатом. теперь эту таблицу нужно загрузить в gridData. Кто сталкивался или знает как в gridData загрузить строку?

Нравится

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

Добрый день!

1) Если возможно, сделайте представление для вашей сложной выборки: в системе и в базе данных. И уже работайте с представлением, как с обычным EntitySchemaQuery.

2) Если выборку сложно оформить в представление, то с сервера вам нужно воссоздать объект, который возвращает esq (создать свои классы), что то типа

{
	nextPrcElReady: false,
	notFoundColumns: [],
	rowsAffected: 0,
	success: true,
	rows: [],
	rowConfig: []
}

а на клиенте загружать этот объект:

var r = query._getResponseEntityCollection(result);
grid.loadAll(r.collection);

 

Добрый день!

1) Если возможно, сделайте представление для вашей сложной выборки: в системе и в базе данных. И уже работайте с представлением, как с обычным EntitySchemaQuery.

2) Если выборку сложно оформить в представление, то с сервера вам нужно воссоздать объект, который возвращает esq (создать свои классы), что то типа

{
	nextPrcElReady: false,
	notFoundColumns: [],
	rowsAffected: 0,
	success: true,
	rows: [],
	rowConfig: []
}

а на клиенте загружать этот объект:

var r = query._getResponseEntityCollection(result);
grid.loadAll(r.collection);

 

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

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

Воссоздать объект... Там множество свойств и методов, как это все воссоздать? В СДК 

https://academy.terrasoft.ru/jscoresdk/#!/api/Terrasoft.data.model.BaseViewModelCollection

пишет следующее:

items : Object/Terrasoft.Collection/Array

Следовательно можно передать Array, только я нигде не смог найти пример как это сделать.

Радчук Виталий Владимирович,

Посмотрите в Network на результат любого запрос SelectQuery. Там будет json, который я приложил выше.

Пример:

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

Если у вас есть код, который преобразует эту строку объект который можно загрузить в грид - тогда это решит проблему

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

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

Зверев Александр, Можно пример где это реализовано?

Из самых сложных view, вызывающих функцию — например, VwRecentCall. Но примерно такое построение на стороне базы, как Вы ищете видел в одном из проектов на Terrasoft 3.Х, где формировался отчёт в виде таблицы и графиков на HTML и отправлялся по почте, или там же в «шахматке» (схеме этажа с квартирами).

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

Я думал просто вызвать серверный код который вернет таблицу с данными и их уже выводить в реестр

Ещё обходной вариант, наполнять данными записи в специальной таблице в базе и строить по ней. Чтобы пользователи не мешали друг другу, добавить поле с Id сессии и фильтровать по нему. После завершения — чистить.

Показать все комментарии
права роли
sales
7.12

При изменении матрицы ролей создается объект в пакете. Раньше этого не замечал но когда на продуктиве вносили изменение в матрицу то в кастоме появились замещающие пакеты.

Подскажите это нормально? Можно ли изменить матрицу без создания замещающих объектов?

И еще вопрос - как можно матрицу ролей зашить в пакет и выгрузить?

Нравится

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

Вам нужно включить администрование по записям/операциям в вашем dev пакете на среде разработки, при этом создастся замещающая схема, затем перенести эту схему пакетом. Затем уже на проде накидывать права, тогда в пакете кастом не будут создаваться замещающие схемы

Либо настройку прав можно перенести через привязку данных. Но это при условии, что у вас есть бекап БД с прода со всеми учетками/группами, т.е. в пакете идет привязка ид групп.

Добрый день! Матрицу ролей можно прописать sql скриптом

Добрый день,

Не замечал такого поведения при изменении ролей. А что за объект у вас создается в кастоме?

 

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

Создается объект тот в для которого меняются права (к примеру если меняем доступы для "Контакты" то создается объект "Contact" унаследованный)

Вам нужно включить администрование по записям/операциям в вашем dev пакете на среде разработки, при этом создастся замещающая схема, затем перенести эту схему пакетом. Затем уже на проде накидывать права, тогда в пакете кастом не будут создаваться замещающие схемы

Либо настройку прав можно перенести через привязку данных. Но это при условии, что у вас есть бекап БД с прода со всеми учетками/группами, т.е. в пакете идет привязка ид групп.

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

Судя по всему, это стандартное поведение - при активации прав доступа, действительно создается замещающий объект в пакете custom с соответствующими изменениями. Можно перенести эти объекты в ваши пользовательские пакеты и перенести на прод, что бы там они не создавались.

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

если пытаться изменить права что были в пакете настроенный то система говорит что этот пакет установлен из архива и изменить его нельзя. В итоге только в пакет Custom можно заместить изменения прав

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

вяше описал поведение если сделать на Dev и перенести на prod пакет то система ругается что не может изменить пакет в итоге только остается пакет Custom. Неужели матрица только так запоминает изменения?

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

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

Добрый день,



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



Заранее спасибо.

Нравится

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

ВладимирБ,

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

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

А письма ранее 03.06.2019 в срм загрузились?

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

Нет,  не загрузились. 

А можно как то загрузить(через стандарт функционалом ) и ранее 03.06.2019  хотя бы с 01.05.2019???

 

ВладимирБ,

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

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

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

Нашел инструкцию в "Терасофт академии" https://academy.terrasoft.ru/documents/technic-sdk/7-10/primer-ispolzovaniya-vstroennogo-processa-obekta-dobavlenie-avtonumeracii-k-polyu-stranicy 

Выполнил все по инструкции, но не удалось настроить данное поле(ничего не происходит, номер не присваивается и не генерируется). Можете помочь в данной ситуации? Возможно есть другие инструкции по выполнению данной операции? Или другие шаги выполнения? Заранее Благодарю!

Нравится

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

Fenix Agro,

Проверьте, у Вас должно быть 2 системные настройки и называться они должны по-особенному.

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

[Entity]CodeMask — маска номера объекта,
[Entity]LastNumber — текущий номер объекта,
где [Entity] — это наименование того объекта, к колонке которого будет применяться автонумерация. Например, InvoiceCodeMask (Маска номера счета) и InvoiceLastNumber (Текущий номер счета).

В примере на Академии [Entity] называется 'Invoice'.

Добрый день,

А какой вариант из двух предложенных вы реализовывали? В карточке или во внутреннем бизнес-процессе объекта? На фронте проще отладить проблему - можно просто отладчиком в браузере посмотреть что возвращает сервис.

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

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

Fenix Agro,

Проверьте, у Вас должно быть 2 системные настройки и называться они должны по-особенному.

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

[Entity]CodeMask — маска номера объекта,
[Entity]LastNumber — текущий номер объекта,
где [Entity] — это наименование того объекта, к колонке которого будет применяться автонумерация. Например, InvoiceCodeMask (Маска номера счета) и InvoiceLastNumber (Текущий номер счета).

В примере на Академии [Entity] называется 'Invoice'.

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

Так как раздел у меня называется "Продажи new" его код 

"CHOpportunityNew" , создал для него две настройки "Маска номера продажи new" с кодом "CHOpportunityNewCodeMask" и "Текущий номер продажи new" с кодом "CHOpportunityNewLastNumber" .  Верно сделал? Поле с номером -  название "Номер" код "CHNumber" 

Fenix Agro,

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

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

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

Доброе утро!

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

Например сотрудник при завершении активности выполнил активность не с тем результатом - как можно откатиться до данной активности? Или может есть другие пути решения?

Нравится

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

Доброе утро!

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

Также нужно найти активность, которая соответствует данному элементу и у неё тоже изменить статус на не конечное значение, например, 'В работе'.

После этого вручную запустить на выполнение элемент процесса через кнопку [Выполнить элемент].

Доброе утро!

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

Также нужно найти активность, которая соответствует данному элементу и у неё тоже изменить статус на не конечное значение, например, 'В работе'.

После этого вручную запустить на выполнение элемент процесса через кнопку [Выполнить элемент].

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

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

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

Не подскажете, есть ли возможность в серверном коде сформировать стандартную строку подключения к SQL Server, используя данные из UserConnection? Нужно динамически сформировать и выполнить сложный запрос, и штатными средствами BPM Online никак не получается подступиться к этой задаче.

Нравится

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

Для таких целей можно использовать CustomQuery в примере ниже sql текст вашего sql

var userConnection = Get<UserConnection>("UserConnection");
string sql =" ......."; 

CustomQuery myQuery = new CustomQuery(userConnection);
myQuery .SqlText = sql;
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())
{
    dbExecutor.CommandTimeout = 0;
    myQuery .Execute();
}

return true;

 

Для таких целей можно использовать CustomQuery в примере ниже sql текст вашего sql

var userConnection = Get<UserConnection>("UserConnection");
string sql =" ......."; 

CustomQuery myQuery = new CustomQuery(userConnection);
myQuery .SqlText = sql;
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection())
{
    dbExecutor.CommandTimeout = 0;
    myQuery .Execute();
}

return true;

 

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

Добрый день,



можете сказать мне, если есть в системе настройка, для удаления письмо в Exchenge при удалении из bpm'online, если нет, то подскажите какие таблицы используется для синхронизаций почты (или какие объекты) откуда я могу получить информацию.



За ранее спасибо

Нравится

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

Доброе утро, Владимир!

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

Все письма хранятся в таблице Activity с типом TypeId равной Id из таблицы ActivityType c названием 'Email':

select count(*)

from Activity

where TypeId = (select Id from ActivityType where Name = 'Email')

Возможно, Вам будет интересна статья по механизму синхронизации bpm'online и Exchange.

Доброе утро, Владимир!

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

Все письма хранятся в таблице Activity с типом TypeId равной Id из таблицы ActivityType c названием 'Email':

select count(*)

from Activity

where TypeId = (select Id from ActivityType where Name = 'Email')

Возможно, Вам будет интересна статья по механизму синхронизации bpm'online и Exchange.

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

Привет.

bpm sales 7.13.4

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

Для этого был создан модуль WiseEquipmentCatalogueFolderManagerViewModelV2 по примеру ProductCatalogueFolderManagerViewModel и аналогичным образом подсоединил к схеме секции: 

properties: {
	folderManagerViewModelClassName: "Terrasoft.WiseEquipmentCatalogueFolderManagerViewModelV2"
},

При переходе в кастомный раздел моя ViewModel не подгружается и в логе следующие ошибки: 

Изображение удалено.

Что самое странное в глобальном объекте Terrasoft нету моего класса при этом присутствует класс из продуктов(по аналогии которого я делаю и который работает):

Изображение удалено.

Есть идеи?

*Все компилировал и генерировал

Нравится

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

Судя по 404, веб-сервер по запросу не может найти файл с определённым именем. Попробуйте посмотреть в Fiddler, в чём отличия запросов между нормально работающим и новым разделом. Наконец, кроме компиляции может потребоваться просто перезапуск сайта или чистка Redis.

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

перезапуск и очистка не помогла.

Вопрос:

1. Почему моей модельки нету в объекте Terrasoft, а моделька продуктов присутствует?

2. Какая "правильная" последовательность действий для создания модуля ViewModel при котором он появится в объекте Terrasoft?

*Потому что мне кажется проблема именно в этом.

Порядок создания описан тут.

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

может вы знаете каким образом в об. Terrasoft попадают модельки схем? 

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

подскажите пожалуйста, каким образом можно править код базовых модулей? К примеру FolderManagerViewModel(как оказалось тут и реализован функционал каталога продуктов). Если не ошибаюсь замещение с 7.13+ уже не работает.

Андреев Андрей Сергеевич,

Реализуйте по аналогии свое собственное окно и с ним работайте.

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

Создал свои модули на основании ниже перечисленных после чего переопределив свойства в схеме раздела:  


folderManagerViewConfigGenerator: "FolderManagerView",

folderManagerViewModelConfigGenerator: "FolderManagerViewModel",

folderManagerModuleName: "FolderManager",

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

*Лог пуст

 

Возможно, просто первый раз грузилось медленно, а потом закешировалось и стало грузить быстрее. Нужно смотреть, в чём именно разница в браузере раздела с папками и без. 

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