EnableEvents() MemoryDataset
Скрипты
Разработка

При заполнении меморидатасета EnableEvents() переводит его в state 1

function edtPaymentCountOnChange(Edit) {
dlData.Dataset.Close();
dlData.Dataset.Open();
var i = 0;
PaymentEdit.TotalSum = GetAttribute(Self, 'TotalSum');
var Dataset = dlData.Dataset;
while(i Edit.Value){
Dataset.Append(); // Dataset.State = 3
Dataset.Values('Sum') = PaymentEdit.Sum;
i++;
Dataset.Values('Number') = i; // Dataset.State = 1 ???
Dataset.Post();
}
}
function dlDataOnDatasetDataChange(DataField) {
dlData.Dataset.DisableEvents();
switch (DataField.Name) {
case 'Sum':
if (dlData.Dataset.Values('Sum') != PaymentEdit.TotalSum){
dlData.Dataset.Values('Percent') = dlData.Dataset.Values('Sum')*100/PaymentEdit.TotalSum;
}else {
dlData.Dataset.Values('Percent') = 100;
}
break;
case 'Percent':
if (dlData.Dataset.Values('Percent') != 100) {
dlData.Dataset.Values('Sum') = dlData.Dataset.Values('Percent')*PaymentEdit.TotalSum/100;
}else {
dlData.Dataset.Values('Sum') = PaymentEdit.TotalSum;
}
break;
}
dlData.Dataset.EnableEvents();
}
на первой итерации цикла заходит на dlDataOnDatasetDataChange считает просенты и при выходе на EnableEvents() ставит стейт "1"

Нравится

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

Здравствуйте, Андрей!

Наверняка, скрипт, который Вы нам предоставили, не есть полным, точнее: функции, которые есть в данном письме взяты со скрипта окна. Мы можем сделать предположение, что также в Вашей конфигурации есть функция, которая вызывается в обработчике события Dataset DataChange, непосредственно на скрипте датасета.
Для решения данной проблемы можем Вам посоветовать реализовать dlData.Dataset.DisableEvents(); перед Dataset.Append(). Но это можно сделать в том случае если у Вас нет выполнения функционала, который есть на DataChange. Затем необходимо прописать dlData.Dataset.EnableEvents(); перед Dataset.Post().

Желаем удачи!

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