Вопрос

Здравствуйте! Подскажите, пожалуйста, как добавить JS событие при сохранении контрагента/контакта?
Вот кусок кода на странцие:

methods: {
fir: function()
{
if (this.get("UsrKey").checked)
{
this.set("UsrLoyaltyOfContact", "Лояльно");
}
else
{
this.set("UsrLoyaltyOfContact", "Не определено");
}
}

}

UsrKey - Boolen Checkbox, UsrLoyaltyOfContact - Справочник.

Не могу разобраться, куда подвесить событие?

У меня такой же вопрос

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

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

Что-то похожее ранее обсуждалось здесь.

Вам необходимо переопределить метод onSaved в секции methods схемы страницы редактирования

                        // Переопределение базового метода Terrasoft.BasePageV2.OnSaved.
			// Выполняет постобработку сохранения записи
			onSaved: function(response, config) {
				// Вызов родительской реализации.
				this.callParent(arguments);
                                //Вызов Вашего метода
                                fir();
			}
Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

День добрый! Не знаю, знаете ли вы, но я теперь знаю, что в BPMonline 5.X можно редактировать записи в реестре, не открывая карточек редактирования. Выглядит это, как будто работа в ячейках Excel - Youtube.
Далее расскажу, как это настроить.

Во-первых

нужно разрешить редактирование в ячейках реестра
Заходим в страницу реестра контрагентов (для других разделов - соответствующие страницы) и выбираем TreeGrid, отображать все свойства и ставим галочку "Разрешить редактирование в ячейках":

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

Во-вторых

нужно включить подгрузку данных
На той же страницу для всех колонок в DataSource проставляем галочку "Всегда загружать данные":

После этого будем получать ошибку об отсутствии данных в каком-нибудь другом поле:lol: У меня это было AddressType:

В-третьих

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

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

Поделиться

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

Думаю, многие знают. А как быть с такой проблемой, что если записи на реестре две или более, то запись сохраняется переходом на другую строку реестра. Но если запись всего одна, то тут проблемка: переключиться на другую строку нельзя (ее нет), и никакие другие манипуляции не помогают сохранить запись после изменения некоторых ячеек. В пятерке эту проблему не стали решать (я про эту тему)

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Рассмотрим реализацию функционала на конкретном примере.Видоизменяем карточку контакта для собственных нужд: создаем отдельные поля "Фамилия", "Имя", "Отчество". Но также оставляем поле "ФИО", которое должно заполняться автоматически на основании суммы значений в вышеуказанных полях.

Для реализации подобного функционала во-первых, требуется создать функцию, которая будет заполнять поле ФИО. Эту функцию можно создать вначале скрипта, в котором будет обработчик события OnDatasetDataChange:

function CreateName(Dataset) {
var FirstName = Dataset.Values('FirstName');
FirstName = (IsEmptyValue(FirstName) ? '' : ' ' + FirstName);
var Surname = Dataset.Values('Surname');
Surname = (IsEmptyValue(Surname) ? '' : Surname);
var PatronymicName = Dataset.Values('PatronymicName');
PatronymicName = (IsEmptyValue(PatronymicName) ? '' : ' ' + PatronymicName);
Dataset.Values('Name') = Surname + FirstName + PatronymicName;
}

Затем на событии OnDatasetDataChange датасета необходимо для каждого из полей вызывать созданную предварительно функцию:

function SelfOnDatasetDataChange(DataField) {
var Dataset = DataField.ParentDataFields.ParentDataset;
if (DataField.Name == 'Surname') {
CreateName(Dataset);
return;
}
if (DataField.Name == 'FirstName') {
CreateName(Dataset);
return;
}
if (DataField.Name == 'PatronymicName') {
CreateName(Dataset);
return;
}
if ((Contact.IsUpdating || !Assigned(DataField) ||
(IsEmpty(DataField.Value)))) {
return;
};
}

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

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать