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

 

Нравится

6 комментариев
var userConnection = Get<UserConnection>("UserConnection");
var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, <SchemaName>);
esq.AddAllSchemaColumns();
esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, <FieldName>, fieldValue));
var enitites = esq.GetEntityCollection(userConnection);
ver entity = enitites.FirtsOrDefault();

Примерно так.

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

Правильнее будет перед этим дописать:

esq.RowCount = 1;

Аналогично и с колонками, оставить только нужные.

Дмитрий, а почему такие крайности, от 20000 к 1? Что именно Вы получаете и что потом с этими данными делаете? Может, подобрать оптимальный размер порции для обработки за раз?

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

Александр, спасибо за уточнение. Нашёл еще один подход.

public Entity GetEntity(UserConnection userConnection)
{
    var entitySchema = userConnection.EntitySchemaManager.GetInstanceByName(name);
    var esq = new EntitySchemaQuery(entitySchema);
    esq.AddAllSchemaColumns();
    return esq.GetEntity(userConnection, primaryColumnValue);
}

 

Тут всё зависит, сколько реально записей отфильтруется по такому условию. Если всегда 0 или 1, то можно и первым, и вторым Вашим способом. А если есть риск получить 100500 результатов, то лучше перестраховаться, ограничив количество в запросе.

Зверев Александр,
у нас логи по 1с пишутся в системе, куда отправили , что отправили , также получаем данные из 1с, из-за этого логов за один проход чуть больше 100 получается каждые пол часа
а первую запись из выборки мне надо для нумерации этих логов

Соответственно он не сможет дальше писать ничего , если при записи лога взял пулом 20 тыс записей разом

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

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

Возникла необходимость перенести настроенные права доступа на другую среду.

 

Удалось успешно привязать к данных

  • Доступ к объектам - SysEntitySchemaOperationRight
  • Операции - SysAdminOperation
  • Права на операции - SysAdminOperationGrantee

 

Однако

  • настройку прав на колонки SysEntitySchemaColumnRight
  • и настройку прав по умолчанию SysEntitySchemaRecordDefRight

добавить в пакет не получается - просто не даёт выбрать такие объекты.

Как лучше поступить для решения?

Нравится

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

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

Подобные темы уже обсуждались на Community. То, что не привязывается к данным, переносят SQL скриптами, которые также привязываются к пакету.

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

Есть даже пример таких скриптов для переноса этих настроек?

 

Или, может, Terrasoft сделает возможным перенос стандартными средствами? 

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

 

Реализовать перенос настроек организационной структуры и прав доступа из одного стенда на другой можно с помощью SQL-скриптов. Для этого на эталонной среде необходимо сформировать insert-запросы на основании записей со следующих таблиц:

  • SysAdminUnit (Объект администрирования: пользователи и роли)
  • SysUserInRole (Непосредственные вхождения пользователей в роли)
  • SysFuncRoleInOrgRole (Вхождение функциональной роли в организационную)
  • SysAdminOperation (Системные операции, если необходимо)
  • SysAdminOperationGrantee (Доступ к системным операциям, если необходимо)
  • SysEntitySchemaOperationRight (Доступ к объектам)
  • SysEntitySchemaRecordDefRight (Доступ к записям по умолчанию)
  • SysEntitySchemaColumnRight (Доступ к колонкам объекта)
  • SysAdminUnitGrantedRight (Делегирование)

Для формирования запросов можно воспользоваться Microsoft SQL Server Database Publishing Wizard и подобными инструментами. Полученный SQL-скрипт необходимо прикрепить к пакету (вкладка - «SQL-сценарии»).

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

Ещё очень интересное поведение заметили.

Записи SysEntitySchemaColumnRight были перенесены полностью идентично на рабочую среду (проверили после переноса). А через некоторое время на рабочей среде оказались те же записи, но с совершенно другими Id. 

Какие процессы могут полностью сменить Id в этой таблице? И на что это может повлиять?

 

Может, компилировали объект? Актуализацию прав запускали?

Зверев Александр пишет:

Может, компилировали объект? Актуализацию прав запускали?

Да, компиляция же происходит после каждой установки новых пакетов (с того же Marketplace), насколько я понимаю.

И актуализация прав запускается после изменений в пользователях/ролях.

 

1. Но как это влияет на настройки доступа по колонкам?

2. И как переносить последующие изменения в настройках доступа по колонкам, если по Id уже не понять, это те же настройки или уже другие?

Владимир, логика перераздачи прав не предусматривает сохранения Id записей. Вы можете предусмотреть в своих скриптах привязку не к Id, а к SysAdminUnitId, SubjectColumnUId и SubjectSchemaUId, они должны быть стабильными.

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

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

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

На мой взгляд правильнее в список полей подгружать все поля выбранного объекта.
2. В схемах данных отсутствует уже до боли привычный расширенный фильтр, который позволяет привязать результат выборки, а не конкретные записи, т.к. их бывает очень много.
3. Тип установки Первичная установка по идее полностью перекрывается типом Установка (это из старого)

 

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

Игорь, получена следующая информация от разработчиков по Вашим тезисам:

  1. Зафиксировано пожелание, будут отслеживаться обращения на эту тему;
  2. Старую логику с фильтрами возвращать не планируется;
  3. Типы установки полностью повторили по аналогии со старой версией.
Показать все комментарии

Добрый день!

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

В связи с этим вопрос: как настроить типы дробных полей, а именно, указать тип данных 0,0001 и 0,1. 

Буду благодарна за совет.

Нравится

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

Попробуйте открыть эту страницу в конфигураторе (action -> source code), затем найти требуемый параметр и поставить ему нужный тип данных.

Попробуйте открыть эту страницу в конфигураторе (action -> source code), затем найти требуемый параметр и поставить ему нужный тип данных.

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

Павел, спасибо, я эти действия сделала в самом начале и никаких изменений не произошло. Ранее данные действия выполнялись без проблем. Видимо, в последних версиях такая функциональность исчезла или это баг. Закрыла вопрос применением кода в Diff. Помогли коллеги :-)

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

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

таблице со столбцами

Ответственный | Количество активностей

Нравится

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

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

За основу можете взять пример воронки продаж в дешбордах - там тоже реализована возможность фильтрации периода.

Также посмотрите статью на Академии по добавлению пользовательского виджета итогов.

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

За основу можете взять пример воронки продаж в дешбордах - там тоже реализована возможность фильтрации периода.

Также посмотрите статью на Академии по добавлению пользовательского виджета итогов.

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

Добрый день!

Каким образом можно выгрузить все документы из CRM (Cloud) прикрепленные во вложениях, детали "Файлы и ссылки"?

Нравится

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

Здравствуйте! Вы можете воспользоваться готовым решением  External File Storage, чтобы выгрузить файлы на Google Drive или One Drive. Подробнее ознакомиться с функционалом вы можете на нашем сайте https://samarasoft.com/docs/external-file-storage/sending-files-to-ftp/

Как мне кажется самый простой способ - запросить бд, развернуть у себя, на С# написать скрипт, который присоединяется к бд, ходит по ****File схемам и сохраняет файлы на диск

Либо поднять у себя FTP сервер и выгрузить с облака на него аналогичным скриптом. Так можно исключить запрос бэкапа.

Написать свою страничку которая сделает запрос к нужной детали (Например файлы и примечания контрагента) получит список id записей с типом файл, пройтись по полученной коллекции и скачать (выгрузить со странички клиенту файлы) в автоматическом режиме все файлы используя FileApiService. Вроде ничего сложного и не нужен доступ к БД. 

Здравствуйте! Вы можете воспользоваться готовым решением  External File Storage, чтобы выгрузить файлы на Google Drive или One Drive. Подробнее ознакомиться с функционалом вы можете на нашем сайте https://samarasoft.com/docs/external-file-storage/sending-files-to-ftp/

Да, забыл добавить: также можно настроить интеграцию с FTP

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

Добрый день!

Подскажите, пожалуйста, возможно ли внутри CRM создать хранилище данных (сродни сетевому диску) с общим доступом (возможность добавлять и редактировать файлы) для каждого из сотрудников?

Нравится

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

Конечно можно вам нужно переопределить механизм доступа для нужного протокола (ftp http nfs и тд) и дать права на чтение/запись, собственно ничего особо сложного нет.

Те поднять тот же ftp сервер, реализовать или подключить ftp клиента. Реализовать механизм записи получения файлов у клиентов.

Конечно можно вам нужно переопределить механизм доступа для нужного протокола (ftp http nfs и тд) и дать права на чтение/запись, собственно ничего особо сложного нет.

Те поднять тот же ftp сервер, реализовать или подключить ftp клиента. Реализовать механизм записи получения файлов у клиентов.

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

Также в маркете есть ряд дополнений, расширяющих возможности работы с файлами в разных аспектах:

Возможно, подойдёт функциональность одного из этих решений. 

 Спасибо за информацию. Расширения посмотрел, но хотелось бы обойтись "малой кровью" без существенных трат. Возможно вы знаете, можно ли создать раздел в CRM, который будет связан с хранилищем, например FTP-сервер? Как это сделать? И самое главное, каким образом туда скопировать или переместить всю необходимую информацию из вложений? 

Очевидно, возможно, раз по ссылкам подобное уже сделали. Первая реализует выгрузку, третья — работу с хранилищем по FTP. Цены там указаны, одна стоит $150 в год, вторая — $43 в год на пользователя или $64 единоразово.

Доброго дня.

Из расширений маркетплейс наиболее приглянулся по функционалу пакет от SamaraSoft (https://marketplace.terrasoft.ru/app/external-file-storage-bpmonline?_g…) - у них и с файловой системой есть работа, и с ФТП и google.disk  - пока тестируем, нашел им парочку недочетов/глюков, продолжаю тестировать дальше:) из минусов - нельзя выносить свои колонки, только преднастроенные (имя, версия, картинка хранилища).
Еще небольшой минус - массовой выгрузки в "Файловую систему" нет, но это легко лечится:) и платеж тоже только разовый...

Владислав, спасибо за оценку. Благодаря вам наш продукт становится лучше!

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

Добрый день!

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

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

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

Здравствуйте, Илья!

Передали данное пожелание команде разработки, для анализа возможности внедрения данного функционала в будущих версиях.

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

В bpm'online есть возможность выгрузки данных раздела в файл MS Excel для дальшейшего анализа данных.Но, к сожалению, для деталей такой возможности нет, хотя на самом деле её реализация совсем не трудоемкая и теоретически можно реализовать самостоятельно во всех нужных местах дублируя "кусочек кода". Есть предложение добавить это "кусочек кода" в базовую схему реестра детали.

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

Добрый день, Алла!

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

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

Доброго времени суток.

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

Или необходимо скриптом производить insert, а потом update (в тех сущностях где они используются) и delete старых значений?

Нравится

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

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

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

1. Вы можете в справочник добавить признак 'IsNotUsed' и реализовать следующую логику в тех сущностях, где значения этого справочника используются: если у записи установлен признак 'IsNotUsed', то в полях новых записей этих сущностей значения не отображать. Конечно, нужно будет записать запрос, который проапдейтит нужные записи справочника и установит признак 'IsNotUsed' в true. Соответственно включить всю эту логику в пакет переноса.
2. Пойти описанным Вами путем - в пакет переноса включить скрипты с инсертом новых записей, апдейтом в сущностях, которые ссылаются на данный справочник, делитом старых значений.

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