Автозаполнение по событию

Здравствуйте! Есть объект (объект раздела), при создании которого нужно чтобы поле UsrNumber заполнялось автоматически. Добавляю событие [перед добавлением записи] по этмоу гайду.
Создал [Задание-сценарий] внутри с:

Entity.SetColumnValue("UsrNumber", "Numberrrrrrr");
return true;

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

Нравится

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

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

"Зарицкий Олег Васильевич" написал:

Павел,

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


Вообще задача такова - автонумерация полей формата типа "номер - тут зависящие от поля буквы - месяц\дата", поэтому вариант в свойствах установить значение не вариант)

Павел,

Есть несколько подходов по генерации номера. В основном применение того или иного варианта зависит от задачи.

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

Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

Отладка серверного кода: http://www.community.terrasoft.ru/blogs/8747

"Толмачев Дмитрий Юрьевич" написал:

Павел,

Есть несколько подходов по генерации номера. В основном применение того или иного варианта зависит от задачи.

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

Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

Отладка серверного кода: http://www.community.terrasoft.ru/blogs/8747


Спасибо за разъяснения, понял. Я думал, что событие [перед добавлением записи] срабатывает в тот момент, когда я жму кнопку "добавить".

"Толмачев Дмитрий Юрьевич" написал:Если вы хотите, чтобы пользователь сразу видел новый номер на странице, то логику скорее всего необходимо вешать на странице редактирования в JS коде.

Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

А если надо и так, и так (иногда счета создаются автоматически, иногда пользователем), то необходимо делать 2 одинаковые логики - в JS и в процессе?

Владимир,

Если для вас важна последовательность нумерации я бы сделал логику только на уровне объекта в момент сохранения, либо через триггеры (как предлагал Дмитрий тут: http://www.community.terrasoft.ru/forum/topic/14256). Тем более предполагается автоматическое формирование счетов. Неудобство в том, что пользователь сразу не видит номер создаваемого счета.

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

"Толмачев Дмитрий Юрьевич" написал:Если же для вас важно отобразить номер пользователю, то в общем случае могут быть пробелы в нумерации.

А если надо отобразить после сохранения (для ввода продуктов, например, всё равно сохраняется счёт), то как его быстро подчитать из БД?

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

Если нумерация зависит от количества записей, то данная задача решается следующими путями:
1) через ESQ в событии объекта
2) через CustomQuery в событии объекта
3) через БП, запускающийся по событию после добавления записи.

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

"Павел И" написал:Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

Дополнительный вопрос:

Стандартный User Task для action = Generate number имеет 2 параметра: ResultCode и EntitySchema.
Необходимо же нумеровать счета в зависимости от типа.

В JS реализовали так (в System Settings задали маски для типов счетов):

getIncrementCode: function(callback, scope) {
	var data = {
		sysSettingName: "ClientInvoice" 
                  + this.get("Resources.Strings.IncrementNumberSuffix"),	
                sysSettingMaskName: "ClientInvoice" 
                  + this.get("Resources.Strings.IncrementMaskSuffix")
	};
	this.callServiceMethod("SysSettingsService", "GetIncrementValueVsMask", function(response) {
		callback.call(this, response.GetIncrementValueVsMaskResult);
	}, 
         data, scope || this); 
},

А как это же реализовать в БП?

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

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

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