валидация
текущая дата
дата
7.13
Studio_Creatio

Добрый день. Применил валидацию даты согласно статье https://academy.terrasoft.ru/documents/technic-sdk/7-15/dobavlenie-validacii-k-polyu-stranicy

Всё работает хорошо. Но при удалении значения  поля почему, то распознаёт что не проходит валидацию. 

У меня поле желаемая дата не должна быть меньше текущей даты и времени или должно быть пусто. Пустым полем он не даёт сохранить. Скрин вложил. 

https://i.imgur.com/H9hksBj.png

 

Вот код:

// Метод-валидатор значения колонок [UsrCustomDate] и [CreatedOn].

            dueDateValidator: function() {

                // Переменная для хранения сообщения об ошибке валидации.

                var invalidMessage = "";

                // Проверка значений колонок [UsrCustomDate] и [CreatedOn].

                if (this.get("UsrCustomDate") < this.get("UsrDateReal"))  {

                    // Если значение колонки [UsrCustomDate] меньше значения колонки [CreatedOn], 

                    // в переменную invalidMessage помещается значение локализуемой строки с сообщением

                    // об ошибке валидации.

                    invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");

                }

        

                // Объект, свойство которого содержит сообщение об ошибке валидации.

                // Если валидация прошла успешна, в объекте возвращается пустая строка.

                return {

                    // Сообщение об ошибке валидации.

                    invalidMessage: invalidMessage

                };

            }

Нравится

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

Если в базе в поле Null, не факт, что в переменной JS тоже так. добавьте вывод в лог, посмотрите что там, а затем можно будет вписать в условие if проверку на такое значение.

Не смотрели, что попадает в переменную при очистке? Может, там как раз минимальная дата, вроде 01.01.01? Или оба сравниваемые поля пустые, их значения одинаковы и строгое сравнение при помощи «<» даёт отрицательный ответ? Попробуйте отладиться или просто выводить в консоль значение полей и результаты проверки.

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

Насколько я понял NULL. А NULL это меньше текущей даты. Можно ли 

        if (this.get("UsrCustomDate") < this.get("UsrDateReal")) как то изменить.? Чтобы принимал тоже NULL.

 

 

Если в базе в поле Null, не факт, что в переменной JS тоже так. добавьте вывод в лог, посмотрите что там, а затем можно будет вписать в условие if проверку на такое значение.

Я по трассировке проверил почему то window.console.log(); ничего не возвращает. 

  if (this.get("UsrCustomDate") < this.get("UsrDateReal"))  {

                      if (this.get("UsrCustomDate") !== null)  {

                    // Если значение колонки [UsrCustomDate] меньше значения колонки [CreatedOn], 

                    // в переменную invalidMessage помещается значение локализуемой строки с сообщением

                    // об ошибке валидации.

                    invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");

                }

                }

 

А есть ли текущее значение, а то я через бизнес-процессы обновляю всегда поле UsrDateReal???

В JS текущую дату и время можно узнать при помощи присвоения или сравнения с new Date().

Я проще нашёл решение. Просто к сравнительному полю привязал системную переменную текущая дата https://i.imgur.com/Xf3bcEA.png.&nbsp;

С new Date() нужно было попотеть по моему. 

Мне кажется, от лишнего поля в таблице расходов ресурсов всё же больше, чем от пары строк на JS, даже если нужно привести к нужному формату кодом.

Показать все комментарии
Деталь
7.13
Studio_Creatio

Добрый день!

Я создал свою деталь на основе статьи из wiki https://academy.terrasoft.ru/documents/technic-sdk/7-15/detal-s-redaktiruemym-reestrom 

Возникла проблема с регистрацией детали.

Выполнил скрипт добавления в таблицу [SysDetail]

 

DECLARE 

    -- Название схемы представления создаваемой миникарточки.

    @ClientUnitSchemaName NVARCHAR(100) = 'UsrTariffsForAddDetail',

    -- Название схемы объекта, к которому привязывается миникарточка.

    @EntitySchemaName NVARCHAR(100) = 'UsrAdduser',

    -- Название детали.

    @DetailCaption NVARCHAR(100) = 'Услуги.'

INSERT INTO SysDetail(Caption, DetailSchemaUId, EntitySchemaUId)

VALUES(@DetailCaption,

     (SELECT TOP 1 UId

      from SysSchema

      WHERE Name = @ClientUnitSchemaName),

      (SELECT TOP 1 UId

      from SysSchema

      WHERE Name = @EntitySchemaName))



В таблице добавилась запись. Но в разделе все так же отображается, что деталь не зарегистрирована.

Прошу помочь, в чем может быть проблема? Изображение удалено.

Нравится

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

Сделайте полную компиляцию, очистите Redis. Но если честно, то советовал бы Вам создавать через мастер деталей, а потом просто в Detail модуле прописать код для редактирования в реестре. Это избавит вас от регестрации через базу, да и от колег слышал что у них бывало что проблемы в с использованием потом (хотя думаю они что-то просто забыли), но все же так экономине время и все точно работает так как мастер еще и кеш чистит потом. Только не забудьте переименовать модели созданные мастером и если будет после переименования ругаться по перекомпилируйте тоже

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

Добрый день! полная компиляция и очистка кэша не помогла.

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

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

Добрый день,

Как в бизнес процессе реализовать такое условие: 

Если котировка валюты была создана или изменилась от предыдущего значения более, чем на 5%, то поставить задачу верификатору на подтверждение изменений с текстом сообщения: "Требуется подтверждение на [добавление / изменение] валюты [Название валюты]. Предыдущее значение: [Предыдущее значение]. Новое значение: [Новое указанное значение]"

Нравится

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

Добавьте в объект Валюта колонку "Предыдущее значение котировки". Далее простой БП на добавление актуальной котировки (очевидно, будете брать её из CurrencyRate как запись с пустой EndDate?). И после сравнения и постановки задачи можете поменять колонку "Предыдущее значение котировки"

Добавьте в объект Валюта колонку "Предыдущее значение котировки". Далее простой БП на добавление актуальной котировки (очевидно, будете брать её из CurrencyRate как запись с пустой EndDate?). И после сравнения и постановки задачи можете поменять колонку "Предыдущее значение котировки"

Показать все комментарии
on-site
Компиляция
7.14
Studio_Creatio

Приветствую.

Развернул тестовую среду на Windows Server 2012 R2.

При попытке компиляции возникает ошибка

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified

   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)

   at Terrasoft.Core.Compilation.ProjectBuilder.BuildInternal(String projectFilePath, String tempPath, BuildCommandParameters parameters)

Кто нибудь сталкивался с такой проблемой? Версия 7.14.4

.Net Framework стоит 4.7

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

 

 

Нравится

1 комментарий
отправка
email
участники
7.15
Studio_Creatio

Подскажите как решить вопрос отправки email всем участникам проекта при добавлении активности по проекту конкретной категории.

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

 

Спасибо

Нравится

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

Добавляете элемент "Читать данные", в котором отфильтровать всех участников данного проекта, которым не было отправлено данного письма. 

Читать первую запись, отправлять письмо. Вернуться обратно к элементу "Читать данные". И так по кругу, пока всем не будут отправлены письма.



Единственное, что если вы используете стандартный элемент Send email, то нигде в системе не остается следов о том, что письмо участнику было добавлено. Тогда можно сделать поле в объекте участника и отмечать в нём факт отсылки.

Добавляете элемент "Читать данные", в котором отфильтровать всех участников данного проекта, которым не было отправлено данного письма. 

Читать первую запись, отправлять письмо. Вернуться обратно к элементу "Читать данные". И так по кругу, пока всем не будут отправлены письма.



Единственное, что если вы используете стандартный элемент Send email, то нигде в системе не остается следов о том, что письмо участнику было добавлено. Тогда можно сделать поле в объекте участника и отмечать в нём факт отсылки.

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

Добрый день! 

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

Ожидаемо, что редактирование будет продолжено в том же окне редактирования.

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

Нравится

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

А что за версия у Вас используется?

В 7.15.3 после нажатия подтверждения не спрашивает, но и не закрывает редактор, только показывает уведомление:

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

Добрый день! Как в шаблон письма добавить ссылку просмотра веб-версии письма, аналог {{WebLetterUrl}}?

Не имеется в виду просмотр веб-версии при верстке шаблона, имеется в виду  просмотр веб-версии письма на стороне получателя письма.

Нравится

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

Добрый день!

 

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

 

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

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

 

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

Нравится

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

Добрый день.

К сожалению, в базовой версии такая возможность отсутствует.

Как альтернативный вариант, можно выделить записи по типам объектов разным цветом.

Добрый день.

К сожалению, в базовой версии такая возможность отсутствует.

Как альтернативный вариант, можно выделить записи по типам объектов разным цветом.

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

Добрый день!

 

Подскажите пожалуйста, возможно ли сделать ширину вертикального реестра настраиваемой (управлять шириной) ?

 

Заранее спасибо за ответ!

Нравится

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

Добрый день! Вы имеете в виду плиточное представление? Если да то на данный момент такой возможности нет.

Спасибо за ответ!

 

Имею в виду вот эту вот область:

 

А возможно ли тогда просто изменить ее ширину на постоянной основе?

Алексей имел в виду другое, впрочем, по поводу управления шириной этого элемента я тоже не уверен.

 

Если просто поменять ширину, то посмотреть, где менять, можно так, как я недавно писал тут. В Вашем случае этот размер (30em) задан в CSS схемы SectionModuleV2:

.schema-wrap.two-el .left-el {
	position: fixed;
	left: 24em;
	top: 10.5em;
	bottom: 0;
	overflow-y: hidden;
	width: 30em;
	border-right: solid 1px #e1e8f2;
	z-index: 11;
	background-color: white;
}

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

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

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

Спасибо за ответ!

 

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

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

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

Сумел все таки увеличить эту зону, там одним элементом дело не обходится :)

 

Спасибо за помощь!

Показать все комментарии
Клиентский модуль
js
Деталь
7.15
Studio_Creatio

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



Возникла проблема при разработке клиентского модуля - необходимо динамически менять "родителя" детали в зависимости от условий.



В случае, если на карточке редактирования присутствует вкладка с определенным ключом - необходимо "привязать" к ней деталь из diff (код ниже)

В случае, если вкладка найдена не была - добавить вкладку с привязкой детали (то есть выполнить процедуру вставки на основе diff)



Есть ли возможность динамически изменить свойство "parentName" у детали? (или как получить объектное представление детали для изменения свойства)

define("SomeModuleName", [], function() {
    return {
    details: {
        "DetailName": {
            "schemaName": "schemaName",
            "entitySchemaName": "entitySchemaName",
            "filter": {
                "detailColumn": "detailColumn",
                "masterColumn": "Id"
            }
        }
    },
    diff: /**SCHEMA_DIFF*/[ 
        {
            "operation": "insert",
            "name": "AddedTabName",
            "values": {
                "items": [],
                "caption": {
                    "bindTo": "Resources.Strings.AddedTabNameCaption"
                },
            },
            "parentName": "Tabs",
            "propertyName": "tabs",
            "index": 1
        },
    {
        "operation": "insert",
        "name": "CardDetail",
        "values": {
            "itemType": this.Terrasoft.ViewItemType.DETAIL,
            "visible": { "bindTo": "CardDetailVisible" }
        },
        "parentName": "AddedTabName",
        "propertyName": "items",
        "index": 0
        },
    ]/**SCHEMA_DIFF*/,
    methods: {
        onEntityInitialized: function() {
            this.callParent(arguments);
            // myMethodToUpdateVisibility();
        },
        }
    };
});

Вкладка (tab) на которую надо перенести деталь также динамически (также из кода клиентского модуля) добавляется сторонним пакетом.



Спасибо

Нравится

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

Добрый день! Возможно, проще добавить 2 детали на разные вкладки, и в зависимости от условий ненужное скрывать, чем динамически вставлять\перемещать

Добрый день! Возможно, проще добавить 2 детали на разные вкладки, и в зависимости от условий ненужное скрывать, чем динамически вставлять\перемещать

Лопатин Константин,

Спасибо за ваш вариант, попробую такой подход.

или как предложил Лопатин Константин или технически есть возможность закидывать и изымать элемент через ext, если вам вдруг не хватает геморроя в вашем проекте)

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