Всем привет! 

Приглашаем в нашу команду опытного Разработчика C# (CRM Terrasoft) для внедрения крупного проекта. Интересные задачи и классные люди будут рядом! 
Если вдруг Вы аналитик, тоже пишите? 

Мой ТГ: @VikmarIt Буду рада любым вопросам:)

Задачи в данной роли:

  • Внедрение CRM-системы Terrasoft;
  • Участие в обсуждении функциональных требований и бизнес-процессов;
  • Разработка бизнес-процессов;
  • Настройка интерфейса системы с помощью low-code;
  • Написание серверного кода на C#;
  • Написание клиентского кода на JavaScript;
  • Интеграция с другими системами компании;
  • Рефакторинг существующего кода.

Что ждем от вас:

  • Опыт разработки на C# от 2 лет;
  • Опыт разработки на JavaScript от 2 лет;
  • Опыт работы с MS SQL / PostgreSQL от 2 лет;
  • Знание Creatio Terrasoft от 0,5 лет;
  • Опыт работы с Jira/TFS;
  • Опыт работы с git;
  • Умение читать BPMN 2.0;
  • Наличие разработанных (реализованных) проектов;
  • Умение работы с чужим кодом;
  • Дисциплинированность, ответственность (своевременное и точное исполнение поставленных задач);
  • Умение работать в быстром темпе, в режиме многозадачности.

Что предлагаем мы:

  • Масштабные и интересные проекты, работа с ведущими компаниями России;
  • Высокая зарплата + бонусы;
  • Свобода в принятии решений и посещении офиса (главное результат);
  • Крутой и молодой коллектив. Традиции, квизы, мы празднуем все дни рождения и праздники вместе;
  • Возможность работать удаленно или с переездом в Москву;
  • Оформление по ТК, конференции и обучение.

Мой ТГ: @VikmarIt Буду рада любым вопросам:)

Нравится

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

Добрый день!

После запуска процесса Генерация структуры БД в браузере не появился файл, где его искать?

Спасибо!

Нравится

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

Перейдите на преднастроенную страницу, при нажатии должен скачаться файл.

Полозюков Евгений Петрович, перешла на страницу, нажимаю, но файл не появляется

Открывайте консоль разработчика и смотрите ошибку. Перекомпилируйте все.

Полозюков Евгений Петрович,

Спасибо!

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

Необходимо обновить систему до версии 7.16.1, в гайде на академии описано только обновление до последней версии.
Так как же обновиться до определенной версии?

Нравится

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

Добрый день.

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

Обратите внимание, что обновляться нужно с версии на версию последовательно, не пропуская версии, которые идут между ними!

И ещё важный момент, если например, Вы обновляетесь с версии 7.16.1 на 7.16.3, а потом хотите с версии 7.16.3 на 7.16.4, то в папке с обновлениями должны находиться только дистрибутивы версий, которые идут после текущей и включительно до той, на которую Вы обновляетесь.

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

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

Добрый день.

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

Обратите внимание, что обновляться нужно с версии на версию последовательно, не пропуская версии, которые идут между ними!

И ещё важный момент, если например, Вы обновляетесь с версии 7.16.1 на 7.16.3, а потом хотите с версии 7.16.3 на 7.16.4, то в папке с обновлениями должны находиться только дистрибутивы версий, которые идут после текущей и включительно до той, на которую Вы обновляетесь.

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

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

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

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

Нравится

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

У меня есть решение, но не очень красивое, там идет изменение в DOM. Могу поделиться (ставим код на свой страх и риск). Как раз в соседнем посте идею для вендора создал с вопросом, как сделать красивее.

А если сделать справочник в виде раздела и использовать мини-карточку?

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

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

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

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

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

Доброго времени суток коллеги, подскажите пожалуйста где могу найти этот раздел   ссылка : https://academy.terrasoft.ru/documents/technic-sdk/7-15/rabota-s-obektami-creatio-po-protokolu-odata-s-ispolzovaniem-http-zaprosov 
Пишет перенесена. Спасибо

Нравится

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

Ислам, сейчас информация по OData есть в академии тут (обратите внимание на переключатели «руководство», «примеры» и «референс»), также интересующие Вас примеры запросов вынесены на сайт Postman.

 

А вот эта же статья, которую Вы искали, но для более старой версии 7.8, ещё до переименования системы.

 

А где Вы нашли этот текст на чёрном фоне со ссылкой?

Ислам, сейчас информация по OData есть в академии тут (обратите внимание на переключатели «руководство», «примеры» и «референс»), также интересующие Вас примеры запросов вынесены на сайт Postman.

 

А вот эта же статья, которую Вы искали, но для более старой версии 7.8, ещё до переименования системы.

 

А где Вы нашли этот текст на чёрном фоне со ссылкой?

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

Добрый день Александр, благодарю за помощь Это расширение "Dark Reader", так как целый день читаю документацию глаза устают поэтому поставил такой цвет. 

Так а где нашли текст с нерабочей ссылкой?

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

Проходил обучения модули тут 

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

Стоит задача.

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

 

 

Пожалуйста не скидывайте пример: https://academy.terrasoft.ru/docs/7-16/developer/front-end_development/…

Я уже разукрасил грид при загрузке. И пробовал маркетплейс модули но там нет такого функционала.

Теперь нужно при клике, выделенную запись красить исходя из её типа.

 

Стоит полный бандл creatio.

Нравится

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

Ставим debugmode. В BaseGridDetailV2 устанавливаем дебагер на rowSelected там виден call stack отрисовки таблицы. Выводим в консоль this, видим что там есть свойства rowsStyles, cellsClasses, но они нигде не описаны в документации, если разберетесь можете попробовать использовать их.
В нашем случае нам нужны свойства collectionItemPrefix и model.$ActiveRow зная из мы можем составим полный id элемента строки, к примеру id="ContactAddressDetailV2DataGridGrid-d4dc6c60-2243-4b00-a122-7cb4987c07f6-item-82140c2c-41eb-48bb-97fb-51d0c5e92cfd".
Зная id получаем с помощью Ext.getCmp или обычного js, dom-элемент строки и можете манипулировать его свойствами как хотите.

Взял за основу:

https://academy.terrasoft.ru/docs/7-16/developer/front-end_development/…

В  методе детали prepareResponseCollectionItem добавил цвет и маркер по условию:

item.customStyle = {
"EnteringInitialBalances":"",
"--selected-color":"red"
};

И через подключенный css добавил цвет при выделении:

.grid-row-selected[style*=Entering-initial-balances] {
    background-color: var(--selected-color) !important;
}

Результат

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

Здравствуйте, может кто сталкивался с данной проблемой.

Ошибка появляется после фиксации пакета в svn. Скриншоты прикрепил.

Прикрепленные файлы

Нравится

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

Код ActivityPageV2 прикрепите.

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

 

Также в старых сборках версии 7.12 был неправильный формат файлов, созданных мастером разделов, при фиксации пакета в SVN была такая же ошибка. Но в более поздних сборках 7.12.4.415, 7.12.3.986, 7.12.2.936 уже исправили. Если у Вас не 7.17, а одна из старых версий 7.12 и ниже, то обновите до указанных.

Полозюков Евгений Петрович,

 

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

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

 

Обновлял до 7.17, не помогло.

Посмотрю настройки SVN. Или руками пересохранять всё буду, спасибо.

Вопрос решился пересохранением всех клиентских модулей в конфигурации. 

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

Доброго времени суток коллеги. У меня возникли две проблемы. Имею вызов метода 


      SetUrlAnswer: function() {
 
        var xhr = new XMLHttpRequest();
 
        var url = "http://localhost/0/rest/Service1/Testing";
 
        xhr.open("GET", url);
 
        xhr.responseType = "json";
 
        xhr.setRequestHeader("Content-type", "application/json");
 
        var self = this;
 
        xhr.onreadystatechange = function() {
 
            if (xhr.readyState === 4 && xhr.status === 200) {
 
                // for (var i = 0; i < xhr.length; i++ ) {
 
                  self.set("UsrCharCode",
 
                   JSON.stringify(xhr.response[0].CharCode));
 
                  self.set("UsrID", 
 
                   JSON.stringify(xhr.response[0].ID));
 
                  self.set("UsrNameV", 
 
                   JSON.stringify(xhr.response[0].Name));
 
                  self.set("UsrNominal", 
 
                   JSON.stringify(xhr.response[0].Nominal));
 
                  self.set("UsrNumCode",
 
                   JSON.stringify(xhr.response[0].NumCode));
 
                  self.set("UsrPrevious", 
 
                  JSON.stringify(xhr.response[0].Previous));
 
                  self.set("UsrValues", 
 
                   JSON.stringify(xhr.response[0].Value));
 
                // }
 
 
 
            } else {
 
               // Пока не реализовано
 
                self.set("UsrCharCode", "Не правильное получение данных!");
 
            }
 
        };xhr.send();
 
 

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

Вопрос второй(очень важный): Этот метод возвращает каждый раз разный массив данных. Вопрос в  том  Creatio предусмотрено генерация полей исходя из ответа сервера? Например мне в ответ приходит 4 видов валют USD, RUB, EUR, UZS и исходя из ответа сгенерировать таких групп полей:Надеюсь смог объяснить свою боль. Спасибо

Нравится

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

Ислам Ибрагимжанов,

Я описал общую идею как работает DataService, можете поискать реализацию и попробовать понять, но это про сложные вещи.

Вам пока нужно начать использовать ServiceHelper и его функцию callService.

И читайте документацию, там такие кейсы описаны.

Зачем вы используете чистый XMLHttpRequest, уже есть классы для работы с сервисами.

https://academy.terrasoft.ru/docs/7-16/developer/back-end_development/c…

Итерацию можно сделать циклом по массиву с наименованиями полей. Можно сделать по переменным объекта. Список полей для итерации можно возвращать со стороны сервера. Тут у вас полная свобода действий.

Полозюков Евгений Петрович,

Я не понял один момент

Список полей для итерации можно возвращать со стороны сервера. Тут у вас полная свобода действий. 

Вы это про мой второй вопрос? Я что то не до  конца понял. 

Ислам Ибрагимжанов,

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

Полозюков Евгений Петрович,

Мне нужно сгенерировать поля для этих данных. Через выше указанный способ релаьно реализовать такое?

Ислам Ибрагимжанов,

Я описал общую идею как работает DataService, можете поискать реализацию и попробовать понять, но это про сложные вещи.

Вам пока нужно начать использовать ServiceHelper и его функцию callService.

И читайте документацию, там такие кейсы описаны.

Полозюков Евгений Петрович, Спасибо за помощь. Я понял идеюyes

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

Доброго времени суток коллеги, я столкнулся с проблемой. Имею колонки и кнопку Мне нужно при нажатии на кнопку "Очистить"  очистить данные у всех полей. 
Прочитал пару ответов поэтому вопросу тут в Community,  и написал функцию: 
 

clearFileBalance: function() {
  var budgetSales = this.get("UsrBudgetSales");
      this.set(budgetSales, null);
  var facticallySum = this.get("UsrFacticallySum");
      this.set(facticallySum, null);
  var result = this.get("UsrEqualsBudget");
      this.set(result, null);
  }
},

Она вызывается тут по клику: 

clearFileBalanceClick: function(clearFileBalance) {
       this.clearFileBalance();
 }

Он почему-то она не работает. Что я делаю не так? Спасибо

Нравится

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

Доброе утро.

this.get("НазваниеПоля") - получает значение

 

this.set("НазваниеПоля", Значение) - устанавливает Значение в НазваниеПоля. Название поля в данном случае должно быть текстом

 

 

var budgetSales =  this.get("UsrBudgetSales"); //код запишет в переменную budgetSales ЗНАЧЕНИЕ поля UsrBudgetSales.

Чтобы очистить поле, нужно в UsrBudgetSales записать null:

this.set("UsrBudgetSales", null);

 

Есть еще вот такой вариант записи:

this.$UsrBudgetSales = null;

Доброе утро.

this.get("НазваниеПоля") - получает значение

 

this.set("НазваниеПоля", Значение) - устанавливает Значение в НазваниеПоля. Название поля в данном случае должно быть текстом

 

 

var budgetSales =  this.get("UsrBudgetSales"); //код запишет в переменную budgetSales ЗНАЧЕНИЕ поля UsrBudgetSales.

Чтобы очистить поле, нужно в UsrBudgetSales записать null:

this.set("UsrBudgetSales", null);

 

Есть еще вот такой вариант записи:

this.$UsrBudgetSales = null;

Дмитрий А., Я понял) Спасибо ) Заработало)

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

 

 

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

 

 

Доброго времени суток коллеги. Я столкнулся с проблемой у меня есть функция:
 

 calculateBalance: function() {
                var amount = this.get("UsrBudgetSales");
                if (!amount) {
                    amount = 0;
                }
                var paymentAmount = this.get("UsrFacticallySum");
                if (!paymentAmount) {
                    paymentAmount = 0;
                }
                var result = amount - paymentAmount;
                this.set("UsrEqualsBudget", result);
 
            }

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

Не могу сделать проверку тут,

	onPageClick: function(SetHelloAttribute, calculateBalance) {
                // if(какая-то проверка) {
                    this.calculateBalance();
               // }
 

Как я понял свойство set сразу же устанавливает значение в поле. А в methodName она вызывается? 

  dependencies: [
                    {
                        columns: ["UsrBudgetSales", "UsrFacticallySum"],
                        methodName: "calculateBalance"
                    }

Буду благодарен разъяснение. Так как недавно начал изучать Creatio, мог ошибиться в общей логике. Спасибо

Нравится

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

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

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

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

 

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

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

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

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

 

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

Алла Савельева, Все сработало. Благодарю

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