Добрый день. Применил валидацию даты согласно статье 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, даже если нужно привести к нужному формату кодом.

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

Добрый день!

Я создал свою деталь на основе статьи из 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 модуле прописать код для редактирования в реестре. Это избавит вас от регестрации через базу, да и от колег слышал что у них бывало что проблемы в с использованием потом (хотя думаю они что-то просто забыли), но все же так экономине время и все точно работает так как мастер еще и кеш чистит потом. Только не забудьте переименовать модели созданные мастером и если будет после переименования ругаться по перекомпилируйте тоже

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

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

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

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

Добрый день,

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

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

Нравится

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

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

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

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

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

Развернул тестовую среду на 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 всем участникам проекта при добавлении активности по проекту конкретной категории.

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

 

Спасибо

Нравится

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

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

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



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

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

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



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

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

Добрый день! 

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

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

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

Нравится

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

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

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

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

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

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

Нравится

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

Добрый день!

 

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

 

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

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

 

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

Нравится

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

Добрый день.

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

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

Добрый день.

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

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

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

Добрый день!

 

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

 

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

Нравится

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 и поэкспериментировать в браузере, меняя размеры элементов вручную, чтобы получилось так, как нужно.

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

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

 

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

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

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



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



В случае, если на карточке редактирования присутствует вкладка с определенным ключом - необходимо "привязать" к ней деталь из 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, если вам вдруг не хватает геморроя в вашем проекте)

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