getFullAddressFromVacancy: function (Id) {

                        var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                            rootSchemaName: "AccountAddress"

                        });

                        esq.addColumn("Id");

                        esq.addColumn("Address", "Address");

                        esq.addColumn("AccountAddress.SxSubwayStation.Name", "MetroName");

                        esq.addColumn("AccountAddress.City.Name", "CityName");

                        esq.filters.add("VacancyCandidateFilter222", this.Terrasoft.createColumnFilterWithParameter(

                            this.Terrasoft.ComparisonType.EQUAL,

                            "Id", Id));

                        esq.getEntityCollection(function (response) {

                            if (response.success && response.collection.getCount() == 1) {

                                var entity = response.collection.getByIndex(0);

                                var addr = entity.get("Address");

                                var city = entity.get("CityName");

                                var metro = entity.get("MetroName");

                                var add = '';

                                if (city != undefined && city != 'Москва')

                                  add += city + ', ';

                                if (metro != undefined)

                                  add += metro + ', ';

                                if (addr != undefined)

                                  add += addr;

                                this.log('Add = ' + add);

                                this.set("BpMetroAutoFill", add);

                            }

                        }, this);

                }

В консоли хрома вижу что столбцы, кроме Address пишутся isNotFound. 

Делал согласно https://academy.terrasoft.ru/documents/technic-sdk/7-8/poluchenie-rezul…

EntitySchemaQuery умеет довыгребать AccountAddress.SxSubwayStation.Name в таблице AccountAddress есть столбец SxSubwayStationId

Аналогично с City.

Что не так делаю, подскажите плиз?

Нравится

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

Прооосто ужас.

...rootSchemaName: "AccountAddress"... //запрос уже идёт в AccountAddress
...esq.addColumn("City.Name", "CityName");... // поэтому писать AccountAddress.City.Name не правильно
...esq.addColumn("SxSubwayStation.Name", "MetroName");.. //аналогично
...esq.filters.add("VacancyCandidateFilter222", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"Id", Id));
esq.getEntityCollection()... //Есть метод esq.getEntity(id, callback, scope). Зачем зазря писать фильр по id, а потом фильтровать коллекцию?

 

Варфоломеев Данила,

Угу, в первый день "отношений с платформой" этим "правильным методом" не получилось (был другой запрос), надо будет попробовать еще раз. Ща пока не до эстетики, но к ней придем, исправил, работает, уже хорошо, спасибо! 

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

https://prnt.sc/iv7ddn - есть деталь созданная в конструкторе, как в нее записывать значение в коде.

Например, текст детали = текст из "Адрес места работы" + " 100500" 

 

Юзаркейс: юзар открывает страницу и видит в поле: вычисленный текст при условии что он до этого был пуст

Нравится

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

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

Похожий кейс описан на Академии: https://academy.terrasoft.ru/documents/technic-sdk/7-12/ustanovka-dlya-polya-znacheniya-po-umolchaniyu. Можно попробовать по примеру реализовать Вашу задачу.

Одеяненко Юлия,

Спасибо, обошлось, другим путем, но надо и с академическим разобраться, спасибо!

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

Всем привет!

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

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

В голову приходит подобный код

if (this.isAddMode() || this.isCopyMode()) {

this.set("UsrStatus", значение справочника)

}

Но ничего подобного я не обнаружил в исходниках страницы продаж или лидов.

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

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

Знаю, что качестве второго аргумента в set нужно передавать конструкцию {value: "Guid",

                                              displayValue: "Caption" }

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

Нравится

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

1) На уровне объекта у колонки св-во: "значение по умолчанию". смотрим на какое справочное поле биндится полоска стадий, ну и соответственно ему задаём значение.

2) this.loadLookupDisplayValue(guid, #колонка_объекта_в_которую_надо_установить_значение#, callback, scope)

Спасибо. Оказалось все очень просто

Варфоломеев Данила, а можно еще пример работы с методом loadLookupDisplayValue?

К примеру мне нужно получить установить значение "Подписан" в справочной поле Состояние договора, название схемы ContractState, название поля на карточке usrContractState. Что нужно выполнить?

Трефилов Павел Сергеевич пишет:

пример работы с методом

this.loadLookupDisplayValue("UsrContractState", "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463"); //подменить на id значения "Подписан". Метод установит значение.
 
//или, если нужен коллбек:
 
this.loadLookupDisplayValue("UsrContractState", "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463", function() {
    //сюда провалимся после того, как система установит значение. Удобно, когда надо дальше работать со значением UsrContractState.
}, this)

 

Варфоломеев Данила,

Понятно, по сути не сильно это отличается от установки через set.

 this.set("UsrContractState", {value: "d7e40d7c-1fa4-49cb-a0d5-57a936f9a463", displayValue: "Подписан"});

Единственный бонус, что можно работать с колбеком.

Трефилов Павел Сергеевич пишет:

Единственный бонус, что можно работать с колбеком.

Не только. К UsrContractState через lookupListConfig/columns вы можете подгружать допполя. Так вот в случае вызова loadLookupDisplayValue, функция их подгрузит, через set - нет.

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

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

Нашел на форуме способ this.get("TabsCollection") + removeByKey.

И всё бы хорошо, но combinedMode, т.е. если я удалил вкладку, то открывая другую активность, где эта вкладка должна присутствовать, пользователь ее не видит. Казалось бы insert, но кого?

Есть ли полноценный работающий пример на этот случай?

Нравится

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

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

Золотарев Артем Андреевич,

А где можно создать такую глобальную переменную? Если я делаю

 

this.set("mActivityParticipantTab", tabsCollection.removeByKey("ActivityParticipantTab"));

то при заходе в новую активность this.get("mActivityParticipantTab") у меня undefined.

Во-первых, следите за контекстом. Проверьте, что вы set и get делаете в одном контексте. Также, если вы будете прятать несколько вкладок, то лучше будет использовать Terrasoft.DataValueType.COLLECTION и делать не "set", a "add", т.к. в переменной может храниться только одна вкладка.

Во-вторых, можно просто использовать контекст this и в него сохранить (что-то типа такого this.hiddenTabs = Ext.create("Terrasoft.Collection");)

Вероятнее всего вы пытаетесь делать this.get в контексте другого объекта, и там его нет

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

Добрый день, известно, что для активностей можно сделать разные страницы для каждого из ее типов. Создал я тип Активности "Звонок" и создал для нее собственную страницу. Вопрос: как привязать то, что для типа активности "Звонок" создана новая страница к пакету?

Нравится

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

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

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

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

Demchenko Olha,

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

Victor Ivanitski,

Для привязки вашей страницы, нужно добавить запись в таблицу SysModuleEdit, где в CardSchemaUId указать UId вашей страницы из таблицы SysSchema.

Пример скрипта для выборки существующих привязанных страниц к Активности:

select * from SysModuleEdit where SysModuleEntityId in (select Id from SysModuleEntity where SysEntitySchemaUId in (select Uid from SysSchema where Name like 'Activity'))

 

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

Коллеги, здравствуйте.



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



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



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

Нравится

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

Здравствуйте, Роман!

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

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

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

- добавить продукты на деталь какой-нибудь сущности (продажа/заказ/счет и т. п.), 

- создать ПФ, которую можно будет выводить со страницы того раздела, где деталь с продуктами,

- в ПФ добавить табличную часть по тому объекту, на детали которого находятся продукты.

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

Коллеги, 

а почему в справочнике "Часовые пояса" значения недоступны для добавления, редактирования и удаления? 



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

Нравится

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

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

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

Кстати, а как в системе отслеживается переход (и не переход) на летнее-зимнее время? Летом с Москвой одна разница, а зимой другая.

Владимир Соколов,

для понимания того, как bpm'online работает с датами, нужно помнить следующее:

  • В базе даты хранятся в UTC, т.е. "по Гринвичу"
  • При создании соединения приоритет использования часового пояса следующий (по убыванию):
  1. Часовой пояс из профиля пользователя.

    При этом используется колонка "TimeZoneId" из таблицы "SysAdminUnit".

     
  2. Системная настройка «DefaultTimeZone».

    По умолчанию заполняется значением "(GMT) Coordinated Universal Time" (в пакете Base есть соотв. привязка данных), т.е. с нулевым смещением.

     
  3. Клиентский часовой пояс.

    Определяется по передаваемому с клиентского приложения UTC смещению.

     
  4. Часовой пояс сервера приложений.

Учитывая вышеизложенное, время будет отображаться правильно и при переходах на летнее\зимнее, так как в базе дата хранится в UTC и для ее отображения она приводится к "правильному" часовому поясу (В том случае, когда в системной настройке или в профиле пользователей установлены корректные часовые пояса).

 

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

Здравствуйте! Может кто-нибудь подскажет в чём здесь дело?

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

Нравится

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

Александр, здравствуйте!

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

Если в переводах все корректно, напишите нам на support@terrasoft.ru для дальнейшего анализа. В письме укажите, пожалуйста, после каких манипуляций в приложении панель разделов начала так отображаться. Также необходим будет доступ к сайту с этой проблемой.

Одеяненко Юлия,

Да, в "Переводы" некорректный перевод (вопросительные знакие напротив некоторых записей), это в ручную нужно переводить всё?

Дульский Александр,

можно и вручную. Больше о переводах можно почитать на Академии: 

https://academy.terrasoft.ru/documents/studio/7-11/multiyazychie

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

При тестировании мои тестеры наделали кучу незакрытых задач БП, которые возникают, когда надо что-то заполнить на странице редактирования и сохранить её.

Как удалить/завершить их скопом?

Нравится

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

Скопом - никак. Пока я ковырялся, вроде видел, что можно array guid-ов на закрытие процессов послать, но это не точно.

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

Алексей, добрый день.

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

Логвин Андрей Витальевич,

А как отменить все процессы? Я знаю способ только по одному :)

Алексей-Карягин,

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

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

Добрый день.

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

Пробовал передать просто объект filterGroup - параметр с объектом не передается в модуль.

Пробовал передать 

filterGroup.serialize() 

- при десериализации строки получаю совершенно другую структуру объекта

Terrasoft.deserialize(filterGroup)

При добавлении этого фильтра в ESQ-запрос

происходит ошибка:

"Uncaught TypeError: a.on is not a function"

Подскажите, как корректно:

1. передать объект в параметры модуль?

2. провести сериализацию группы фильтров с последующим 



 

Нравится

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

ага. упирался уже в данный нюанс. Не могу найти пример с проекта, но фишка в serializationInfo. Вот пример из дефолтной конфигурации:

var serializationInfo = sectionFilters.getDefSerializationInfo();
serializationInfo.serializeFilterManagerInfo = true;
var deserializedFilters = Terrasoft.deserialize(sectionFilters.serialize(serializationInfo));

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



В консоли по быстрому накидал. Посмотрите, как различаются 2 результата десериализации (в моём примере v=Terrasoft.createFilterGroup()):

Варфоломеев Данила,

Огромное спасибо! Всё получилось.

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