Обнаружена ошибки в версиях 7.8.х
При попытке привязать данные к пакету - данные по колонке Name подвязываются с пустым значением. Остальные поля подвязываются без проблем. Подобные данные были обнаружены и в базовых пакетах. Например данные пакета Base.

При попытке подвязать данные для нового объекта получается такая картина:

данные в базе

данные в пакете

Но в некоторых случаях колонка подвязывается. С чем связано пока не ясно.
Например на Версии 7.8.0.1434 всё подвязывается, кажется, без проблем...

Нравится

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

Здравствуйте, Вячеслав!

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

Подобное поведение наблюдается на множестве сайтов различных версий и билдов. Нет ли какой-то обобщенной рекомендации как исправить? Сайтов у нас много и по каждому сайту обращаться техподдержку будет долго и не удобно.
Или хотя-бы подскажите в какую сторону смотреть? Пробовали заполнять значениями таблицу *Lcz - результата не дало.

Здравствуйте, Вячеслав!

Благодарим Вас, что поставили нас в известность. Действительно, плавающую ошибку воспроизвели. Скорее всего, ошибка связана с локализациями. Передали на нашу команду R&D для решения, как только проблема будет исправлена, мы Вас уведомим.

Здорово! Спасибо, будем ждать.

Здравствуйте, Вячеслав.

Исправления попадут в релиз 7.9.1 (ориентировочная дата выхода - конец декабря).

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

Добрый день
Подкажите, пожалуйста, есть ли темы по вопросу создания кнопки в теле письма? Напр., отправляется е-мейл пользователю с ответом по обращению с просьбой оценить работу над этим обращением. Пользователь нажимает соответствующую кнопку и ответ авт-ки отправляется в ServiceDesk.

Нравится

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

Тут комплекс задач..
- получить ID нужного обращения, сгенерировать ссылку для перехода с участием этого ID;
- создать письмо на основе шаблонного html тела + подставить в него ссылку для перехода вместо заглушки, отправить письмо;
- поймать обработать событие перехода по ссылке из письма пользователем.

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

- получить ID нужного обращения, сгенерировать ссылку для перехода с участием этого ID - это понятно.
- создать письмо на основе шаблонного html тела - здесь не пойму. У нас есть шаблон писем (только текст), а шаблон html тела - это где и как создать?

Ну само html содержимое хоть в блокноте пишите примеров масса на просторах.
А дальше смотря как отправлять хотите - если процессом каким-то штатным действием, то надо смотреть можно ли там использовать html для тела письма, как там было в 5.х не помню уже (тут похожая ситуация, но для 7.х).
Если кодом пишете генерацию письма и отправку -то туда этот текст подставите потом...

Есть справочник «Шаблоны e-mail сообщений», есть действие БП «Обработать шаблон письма с макросами», которое с ним работает.

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

Добрый день!

Смотря на стандартные макросы для ПФ Word я увидел, что в них есть параметр arguments, который даже используется. Так вот у меня вопрос, как из ПФ Word передать в макрос аргументы?

Нравится

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

Сразу после имени макроса ставьте вертикальную полоску | и за ней любая строка, эта строка попадет в переменную arguments
к примеру:
column[#Macros|myparam#]

"Максим Шевченко" написал:

Сразу после имени макроса ставьте вертикальную полоску | и за ней любая строка, эта строка попадет в переменную arguments

к примеру:

column[#Macros|myparam#]

Спасибо!

Максим Шевченко,

возможно ли похожим способом передать аргументы для шаблона email сообщения?

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

К сожалению, примеров кейсов с добавлением аргументов в макрос для шаблонов Email-сообщений у нас нет. Инструкцию по созданию макросов Вы можете найти на Академии: https://academy.terrasoft.ru/documents/technic-sdk/7-11/dobavlenie-obrabotchika-makrosa-v-shablone-email-soobshcheniya

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

При выборе контрагента и открывающемся Lookup окне, заголовок ставится "Основные сферы деятельности" причем подобное воспроизводится во всех разделах.

Кто то сталкивался с подобным? В какую сторону копать вообще?
1

Нравится

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

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

Кэш и редис чистились, конечно. Нет с остальными сущностями нормально, более того в мултисправочнике, вроде Клиент в продаже при выборе Контрагент отображается нормально

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

Вопрос снят, кто то создал справочник и назвал его Основные сферы деятельности, подвязан на объект Контрагент

Интересный эффект получился :)

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

Нужно добавить любое поле, к примеру, "Дата". Делаю по документации не получается:
-Создаю замещающий объект в пакете customer;
-Выбираю Контрагента как родительский объект;
-Публикую;
-Создаю замещающий клиентский объект;
А в родительском объекте не знаю что выбрать

Нравится

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

Сделайте новое поле мастером раздела и потом можно изучить созданные автоматически замещающий объект и модуль :smile:

"Алексей Сахоров" написал:-Создаю замещающий клиентский объект;
А в родительском объекте не знаю что выбрать

по контексту - замещающий клиентский модуль все же...
Родителем указываете то, что хотели заместить, если карточка раздела Контрагента то AccountPageV2 (Страница редактирования контрагента)

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

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

Нравится

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

Действие на кнопке вызывает из BaseSectionV2 в итоге метод onActiveRowAction.
Он в свою очередь вызывает метод deleteRecords() из GridUtilitiesV2.
В теории я бы в замещающем модуле section вашего раздела переопределил метод родительский onActiveRowAction так, чтобы он вызывал при нажатии кнопки с тэгом "delete" ваш новый метод, подобный deleteRecords(), но с нужной вам проверкой. А по результатам проверки нужно будет окно поднять, тут похожее обсуждалось

"Александр Кудряшов" написал:deleteRecords

Александр теория понятна, нашел все эти методы
проблема с написанием кода, можете скинуть какой нибудь пример в плане переопределения
и где раcположить коды в моем модуле section?

Так то не теория )

"Евдокимов Евгений" написал:где раcположить коды в моем модуле section

В блоке methods вашего замещающего клиентского модуля section.
По аналогии с оригинальным пишем свой метод onActiveRowAction, в нем вызываем свой brand_new_deleteRecords().
brand_new_deleteRecords() также пишем в methods своего модуля.
Если время будет попробую код набросать...

"Александр Кудряшов" написал:Если время будет попробую код набросать...

все получилось, спасибо!

"Евдокимов Евгений" написал:все получилось, спасибо!

Ну вот и хорошо ))

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

Здравствуйте!
В sales enterprice 7.8 в организационной структуре добавляю на деталь Руководители руководителей для подразделения (перед этим проставив галку "Существует роль руководителей") https://yadi.sk/i/4h8HGHABykvEL, но пользователи, которых добавляю на эту деталь, после этого не могут войти в систему, возникает ошибка: https://yadi.sk/i/jddtLtGrykugX

Нравится

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

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

Просьба уточнить:
1. Вы используете сборку с демо-наполнением или softkey версию, т.к. судя по 1 скриншоту это демка с ограничением на создание пользователей и работу с лицензированием пользователей?
Рекомендации:
1. Выполнить действие по актуализации ролей после любой работы в организационной структуре;
2. Скомпилировать конфигурацию и обновить структуру БД;
Если рекомендованные действия не помогут, то просьба указать ссылку на сайт, о котором идет речь для более детального анализа.

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

Здравствуйте! Мы удалили не нужные для нас состояния обращений (Отменено и Закрыто). Теперь у нас нету "Закрыто". Его роль исполняет Решено, хотя оно не имеет конечного состояния, так как обращение может быть переоткрыто после нового входящего письма содержащего в теме номер обращения.

Суть вороса: В разделе Обращения есть чекпоинт Отображать закрытые. Нужно его перенастроить чтобы он отображал или не отображал обращения со статусом "Решено".

Для решения єтого вопроса проделел шаги:

1. В конфигурации добавляю замещающий клиентский модуль
2. В качестве родительского обекта выбрал Section page schema - Cases
3. Добавил код:
define("CaseSection", ["BaseFiltersGenerateModule"],
function(BaseFiltersGenerateModule) {
return {
entitySchemaName: "Case",
contextHelpId: "1001",
mixins: {},
attributes: {},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
messages: {},
methods: {

initQueryFilters: function(esq) {
this.callParent(arguments);
var isActive = this.get("IsActive");
if (isActive) {
esq.filters.removeByKey("FilterStatus");
} else {
esq.filters.add("FilterStatus", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Status.IsResolved", 0));
}
}
}
};
});
4. Нажимаю сохранить и выбрасывает ошибку. Не пойму что не так. Подскажите что сделал не так?

Нравится

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

Задачу закрываю. Вот робочий код. Спасибо!
define("CaseSection", [],
function() {
return {
entitySchemaName: "Case",
messages: {},
attributes: {},
diff: /**SCHEMA_DIFF*/[

]/**SCHEMA_DIFF*/,
methods: {
initQueryFilters: function(esq) {
var isActive = this.get("IsActive");
if (isActive) {
esq.filters.removeByKey("FilterStatus");
} else {
esq.filters.add("FilterStatus", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Status.IsResolved", 0));
}
}
}
};
});

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

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

Есть такая задача: на карточке клиента есть поле (к примеру Ответственный), которое нужно менять массово по нескольким карточками (количество неограниченно, может быть и по 100-200). Клиенты, по которым нужно поменять поле, выбираются с применением фильтра - настраивается динамический список. Как можно поменять массово это поля по нажатию на кнопку/действие, без необходимости выделения клиентов по отдельности. Может кто сталкивался с такой задачей?

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

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

Нравится

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

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

Попробуйте реализовать это процессом.
Используйте элемент "Изменить данные" для:
1) Построения фильтра
2) Задания новых значений полям.

Илья, добрый день!

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

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

Здравствуйте, Дмитрий.

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

var filters = this.getFilters();
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
   rootSchemaName: "Имя таблицы"
});
esq.filters.addItem(filters);
esq.addColumn("Name");
esq.execute(function(response){
  // обработка результата выборки
});

Строка var filters = this.getFilters(); вернет все фильтры, примененные к реестру раздела, которые затем применяются к esq.

Вместо Terrasoft.EntitySchemaQuery, Вы также можете воспользоваться Terrasoft.UpdateQuery для изменения записей.

Подскажите, пожалуйста, с чём может быть связано возникновение ошибки 'Collection item with Id "{AC47705B-A2C3-4D04-BBC6-26D7D66DB833}" not found' при выполнении execute UpdateQuery такого вида:

var update = Ext.create("Terrasoft.UpdateQuery", {
rootSchemaName: "BTSampInShipment"
});
update.setParameterValue("BTStatus", "5f382609-a175-411c-a603-7507a050214a", Terrasoft.DataValueType.GUID);
update.setParameterValue("BTSampleStatus", "24807e44-e2c6-4af3-b61a-00e1e0b4629d", Terrasoft.DataValueType.GUID);
update.filters.addItem(update.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Id", result1.collection.getByIndex(0).get("Id")));

Значение поля "{AC47705B-A2C3-4D04-BBC6-26D7D66DB833}" в самом update не фигурирует.

Где можно посмотреть откуда 'ноги растут'?

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

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

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

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

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

Павел,

"Терещук Павел" написал:

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


Данное решение не помогло устранить ошибку.

Какие есть ещё возможные варианты решения - отладка невозможна, так как мы используем приложение on-demand?

В консоли такой текст ошибок:
1) POST https://[название сайта]/0/DataService/json/SyncReply/UpdateQuery 500 (ItemNotFoundException)

2) Error while sending request
response status: 500 (ItemNotFoundException)
request url: ../DataService/json/SyncReply/UpdateQuery
method: POST
request data: {"rootSchemaName":"BTSampInShipment","operationType":2,"filters":{"items":{"89f74119-40cf-4668-83a5-9ae17d387abd":{"filterType":1,"comparisonType":3,"...

3) Uncaught i {errorCode: "ItemNotFoundException", message: "Collection item with Id "{AC47705B-A2C3-4D04-BBC6-26D7D66DB833}" not found.", stackTrace: undefined, errors: Array(0)}

В продолжении темы...

Описанная выше проблема заключалась в том, что ранее из entity schema была удалена колонка, а потом добавлена повторно новая, но с другим UId. Данная колонка использовалась в бизнес-процессе, который запускался по сигналу изменения записи в этой таблице.

Решение оказалось простым - из тестовой базы выгрузила старый вариант entity schema и загрузила на прод.

Надеюсь, кому-то решение поможет в будущем быстро решить проблему.

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

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

Нравится

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

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

Видимость кнопки печать определяется значением параметра IsCardPrintButtonVisible. Этот параметр задается в методе getCardPrintButtonVisible().

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

"Мотков Илья" написал:

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

Видимость кнопки печать определяется значением параметра IsCardPrintButtonVisible. Этот параметр задается в методе getCardPrintButtonVisible().

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


А можно пример пожалуйста? Кусок кода если Вас не затруднит.

Добрый день, Максим!
Код данного метода приведен ниже. Свою логику можете указать любую, вплоть до return true;

getCardPrintButtonVisible: function() {
  var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
  var result = MenuUtilities.getMenuVisible(cardPrintFormsCollection, this);
  this.set("IsCardPrintButtonVisible", result);
  return result;
}

"Мотков Илья" написал:getCardPrintButtonVisible: function() {
  var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
  var result = MenuUtilities.getMenuVisible(cardPrintFormsCollection, this);
  this.set("IsCardPrintButtonVisible", result);
  return result;
}

Большое Вам спасибо. :-)

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