ошибка при редактировании контрагента

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

Нравится

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

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

из данного сообщения можно сделать вывод, что Вы забили перевести Dataset в режим редактирования: Dataset.Edit();

Чтобы более точно ответить, необходимо видеть полный код, где возникает данная проблема.

//-----------------------------------------------------------------------------
// scr_AccountEdit
//-----------------------------------------------------------------------------

var AccountEdit = new Object();

function InitializeDataset() {
SetAttribute(dlData.Dataset, 'CommunicationDataset',
'ds_AccountCommunication');
SetAttribute(dlData.Dataset, 'AddressDataset', 'ds_AccountAddress');
SetAttribute(dlData.Dataset, 'CampaignDataset', 'ds_AccountInCampaign');
BaseDBEdit.Subject = 'Account';
BaseDBEdit.Dataset = dlData.Dataset;
}

function Initialize() {
InitializeDataset();
}

/* PRODUCT XRM */
function GetAccountBalanceForPeriod(AccountID, StartDays, EndDays, BalanceType){
var NowDate = new Date();
var BalanceSelectQuery = GetSingleItemByCode('sq_AccountsBalance',
'GetDatasetDisplayValue2');
ApplySelectQueryFilter(BalanceSelectQuery, 'AccountID', AccountID, true);
var EndDate;
if(!IsEmptyValue(EndDays)){
EndDate = AddDateDays(NowDate, (-1) * EndDays).getVarDate();
}
var StartDate;
if(!IsEmptyValue(StartDays)) {
StartDate = AddDateDays(NowDate, (-1) * StartDays).getVarDate();
}
EnableSelectQueryFilters(BalanceSelectQuery, (BalanceType == 'PL'), ['IsPL']);
EnableSelectQueryFilters(BalanceSelectQuery, (BalanceType == 'CF'), ['IsCF']);
ApplySelectQueryFilter(BalanceSelectQuery, 'DateTo', EndDate,
(!IsEmptyValue(EndDate)));
ApplySelectQueryFilter(BalanceSelectQuery, 'DateFrom', StartDate,
(!IsEmptyValue(StartDate)));
var BalanceDataset = BalanceSelectQuery.Open();
return BalanceDataset;
}

function InitializePostponementPayment(Window) {
var Dataset = dlData.Dataset;
edtPostponementPayment.DisableEvents();
try {
if (Dataset.State == dstInsert) {
edtPostponementPayment.Value = '15';
} else
if (Dataset.State == dstEdit) {
edtPostponementPayment.Value = Dataset('PostponementPayment') * 1;
}
} finally {
edtPostponementPayment.EnableEvents();
}
RefreshPostponementPayment(GetAttribute(Window, 'RecordID'));
edtPostponementPayment.IsReadOnly = !GetCanEditData(Dataset);
}

function RefreshPostponementPayment(AccountID){
var Dataset = dlData.Dataset;
var Value = Dataset.ValAsInt('PostponementPayment');
if (Value <= 0) {
Value = 14;
}
var HalfValue = parseInt(Value / 2);
edtPostPaymentPeriod1.Caption = " до " + HalfValue + " дней:";
edtPostPaymentPeriod2.Caption = " " + HalfValue + " - " +
Value + " дней:";
edtPostPaymentPeriod3.Caption = " более " + Value + " дней:";
edtAmmountPL.Tag = '0,' + HalfValue + ',PL';
edtAmmountCF.Tag = '0,' + HalfValue + ',CF';
edtAmmountPL30.Tag = HalfValue + ',' + Value + ',PL';
edtAmmountCF30.Tag = HalfValue + ',' + Value + ',CF';
edtAmmountPL90.Tag = Value + ',0,PL';
edtAmmountCF90.Tag = Value + ',0,CF';

var BasicAmountPL = GetAccountBalanceForPeriod(AccountID, HalfValue, 0, 'PL').
ValAsFloat('BasicAmount');
var BasicAmountCF = GetAccountBalanceForPeriod(AccountID, HalfValue, 0, 'CF').
ValAsFloat('BasicAmount');
var BasicAmountPLTotal = BasicAmountPL;
var BasicAmountCFTotal = BasicAmountCF;
edtAmmountCF.Value = AddDelimiter(BasicAmountCF);
edtAmmountPL.Value = AddDelimiter(BasicAmountPL);
if((BasicAmountPL == 0)||( BasicAmountCF == 0)){
lblPLPercent.Caption = "0 %";
} else {
lblPLPercent.Caption = AddDelimiter(((BasicAmountCF/BasicAmountPL)* 100).toFixed(2)) + " %"
}
BasicAmountPL = GetAccountBalanceForPeriod(AccountID, Value, HalfValue, 'PL').
ValAsFloat('BasicAmount');
BasicAmountCF = GetAccountBalanceForPeriod(AccountID, Value, HalfValue, 'CF').
ValAsFloat('BasicAmount');
BasicAmountPLTotal = BasicAmountPLTotal + BasicAmountPL;
BasicAmountCFTotal = BasicAmountCFTotal + BasicAmountCF;
edtAmmountCF30.Value = AddDelimiter(BasicAmountCF);
edtAmmountPL30.Value = AddDelimiter(BasicAmountPL);
if ((BasicAmountPL == 0) ||
(BasicAmountCF == 0)) {
lblPL30Percent.Caption = "0 %";
} else {
lblPL30Percent.Caption = AddDelimiter(((BasicAmountCF/BasicAmountPL) * 100).toFixed(2)) + ' %';
}
BasicAmountPL = GetAccountBalanceForPeriod(AccountID, null, Value, 'PL').
ValAsFloat('BasicAmount');
BasicAmountCF = GetAccountBalanceForPeriod(AccountID, null, Value, 'CF').
ValAsFloat('BasicAmount');
BasicAmountPLTotal = BasicAmountPLTotal + BasicAmountPL;
BasicAmountCFTotal = BasicAmountCFTotal + BasicAmountCF;
edtAmmountCF90.Value = AddDelimiter(BasicAmountCF);
edtAmmountPL90.Value = AddDelimiter(BasicAmountPL);
if ((BasicAmountPL == 0) || (BasicAmountCF == 0)) {
lblPL90Percent.Caption = "0 %";
} else {
lblPL90Percent.Caption = AddDelimiter(((BasicAmountCF/BasicAmountPL)* 100).toFixed(2)) + '%';
}
var BalanceAmount = (BasicAmountCFTotal - BasicAmountPLTotal).toFixed(2);
AccountEdit.BalanceAmount = BalanceAmount;
}

function AddDelimiter(Value){
var ParentValue = Value + '';
var StrValue = Value + '';
if (StrValue.indexOf('.') != -1) {
StrValue = StrValue.substr(0,StrValue.indexOf('.'));
}
if (StrValue.indexOf('-') != -1) {
StrValue = StrValue.substr(1);
}
var StrLen = StrValue.length;
var i = 0;
while (StrLen > 3) {
StrLen = StrLen - 3;
StrValue = StrValue.substr(0,StrLen) + ' ' + StrValue.substr(StrLen);
}
if (ParentValue.indexOf('.') != -1) {
StrValue = StrValue + ',' + ParentValue.substr(ParentValue.indexOf('.') + 1);
}
if (ParentValue.indexOf('-') != -1) {
StrValue = '-' + StrValue;
}
return StrValue;
}

function UpdateAccountBasicCurrencyCaptions() {
var CurrencyID = GetBasicCurrencyID();
var CurrencySymbol = GetCurrencySymbol(CurrencyID);
var SettledCreditField = dlData.Dataset.DataFields.ItemsByName('SettledCredit');
SettledCreditField.Caption = "Разрешенный кредит, " + CurrencySymbol;
lblCF.Caption = "Оплаты, " + CurrencySymbol;
lblPL.Caption = "Обязательства, " + CurrencySymbol;
edtBalanceAmount.Caption = "Текущий баланс, " + CurrencySymbol;
edtRemainAmount.Caption = "Остаток, " + CurrencySymbol;
}

function RecalcBalance(SettledCredit) {
var BalanceAmount = AccountEdit.BalanceAmount;
var RemainAmount = (SettledCredit + BalanceAmount*1).toFixed(2);
edtBalanceAmount.Value = AddDelimiter(BalanceAmount);
edtRemainAmount.Value = AddDelimiter(RemainAmount);
}

function SetPostponementPayment(Value) {
var Dataset = dlData.Dataset;
if ((Dataset.State == dstEdit) ||
(Dataset.State == dstInsert)) {
dlData.Dataset('PostponementPayment') = (Value * 1);
}
}
/* ENDPRODUCT XRM */

function InitializeCommunicationActionSmartTags() {
for (var i = 1; i < 6; i++) {
RefreshCommunicationActionSmartTag(
Self.ComponentsByName('edtCommunication' + i + 'Type'),
Self.ComponentsByName('edtCommunication' + i));
}
}

function CallCommunicationActionSmartTagHandler(ActionMenuItem) {
scr_CommunicationActionSmartTag.HandleCommunicationActionSmartTag(ActionMenuItem);
}

function InitAccountInfo() {
var Dataset = dlData.Dataset;
AccountEdit.OldName = Dataset.Values('Name');
}

function CheckAccountData() {
var Dataset = dlData.Dataset;
var NewName = Dataset.Values('Name');
var AccountID = Dataset.Values('ID');
var NameWasChanged = (NewName != AccountEdit.OldName);
var Result = true;
if ((NameWasChanged) && (!GetAttribute(Self, 'isMassEdit'))) {
var IsAccountLicensed = GetIsAccountLicensed(AccountID);
if (IsAccountLicensed) {
var Message = "Изменение '%1' контрагента у пользователя системы, может стать причиной повреждения лицензии. Продолжить?"
var SubjectName = Dataset.DataFields('Name').Caption;
var MessageStr = FormatStr(Message, SubjectName);
var Result = (ShowConfirmationDialog(MessageStr) == mrYes);
}
}
return Result;
}

function PrepareFinanceDetail() {
pgFinance.IsVisible = !Self.Attributes('HideFinanceDetail');
}

// ----------------------------------------------------------------------------
// Event handlers
// ----------------------------------------------------------------------------

function wnd_AccountEditOnPrepare(Window) {
Initialize();
wnd_BaseDBEditOnPrepare(Window);
/* PRODUCT XRM */
UpdateAccountBasicCurrencyCaptions();
InitializePostponementPayment(Self);
PrepareFinanceDetail();
/* ENDPRODUCT XRM */
InitAccountInfo();
InitializeCommunicationActionSmartTags();
RecalcBalance(dlData.Dataset('SettledCredit'));
}

function edtOwnerOnPrepareSelectWindow(LookupDataControl) {
PrepareLookupDataControl(LookupDataControl, dlData.Dataset);
}

function edtCountryOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
FilterLookupDataControlLookupDatasetByTerritory(LookupDataControl,
edtTerritory.DataField.Value);
}

function edtCityOnPrepareSelectWindow(LookupDataControl) {
FilterLookupDataControlLookupDatasetByState(LookupDataControl,
edtState.DataField.Value);
FilterLookupDataControlLookupDatasetByCountry(LookupDataControl,
edtCountry.DataField.Value);
}

function edtStateOnPrepareSelectWindow(LookupDataControl) {
FilterLookupDataControlLookupDatasetByCountry(LookupDataControl,
edtCountry.DataField.Value);
}

function btnOKOnClick(Control) {
if (!CheckAccountData()) {
return;
}
scr_BaseDBEdit.btnOKOnClick(Control);
}

function dlDataOnDatasetDataChange(DataField) {
var ActivityName = DataField.Name;
var FieldName = DataField.Name;
var Dataset = DataField.ParentDataFields.ParentDataset;
var ActivityValue = DataField.Value;
/* PRODUCT XRM */
if (FieldName == 'PostponementPayment') {
RefreshPostponementPayment(Dataset('ID'));
}
if ((FieldName == 'SettledCredit') || (FieldName == 'PostponementPayment')) {
if (Dataset.ValAsFloat('SettledCredit') < 0) {
ShowWarningDialog("Разрешенный кредит не может быть меньше 0");
Dataset('SettledCredit') = 0;
return;
}
RecalcBalance(Dataset('SettledCredit'));
}
/* ENDPRODUCT XRM */
if (FieldName.indexOf('Communication') == 0) {
var Index = FieldName.substr(13, 1);
var CommTypeDataControl =
Self.ComponentsByName('edtCommunication' + Index + 'Type');
var CommDataControl =
Self.ComponentsByName('edtCommunication' + Index);
RefreshCommunicationActionSmartTag(CommTypeDataControl, CommDataControl,
(FieldName.indexOf('Type') > -1));
}
if (ActivityName == 'ActivityID') {
if (IsEmptyValue(ActivityValue)) {
Dataset.DataFields('FieldID').Value = null;
} else {
Dataset.DataFields('FieldID').Value =
GetFieldValueFromLookupDatasetByLookupField(DataField, 'FieldID');
}
}
}

/* PRODUCT XRM */
function amiBalanceSelectOnExecute(ActionMenuItem, Sender) {
var Tag = Sender.Tag;
if (dlData.Dataset.State == dstInsert) {
if (ShowConfirmationDialog(NeedToSaveRecordBeforeProceed) != wmrYes) {
return;
}
if (!CheckAccountData()) {
return;
}
if (!WindowWasPrepared(Self)) {
return;
}
Self.ComponentsByName('btnOK').IsEnabled = false;
try {
var Result = SaveChangesWithCheck(Self, BaseDBEdit);
}
finally {
Self.ComponentsByName('btnOK').IsEnabled = true;
}
if (!Result) {
return;
}
dlData.Dataset.Edit();
}
if (IsEmptyValue(Tag)) {
return;
}
var AccountID = GetAttribute(Self, 'RecordID');
var FilterValues = Tag.split(',');
var wndOpportunities = Services.GetNewItemByUSI('wnd_CashflowGridArea');
var Dataset = wndOpportunities.ComponentsByName('dlData').Dataset;
Dataset.Close();
var NowDate = new Date();
var DateTo = AddDateDays(NowDate, (-1) * FilterValues[0]);
var DateFrom = AddDateDays(NowDate, (-1) * FilterValues[1]);
Dataset.Close();
ApplyDatasetFilter(Dataset, 'AccountBalanceDateFrom', DateFrom.getVarDate(),
(FilterValues[1] != 0));
ApplyDatasetFilter(Dataset, 'AccountBalanceDateTo', DateTo.getVarDate(), true);
ApplyDatasetFilter(Dataset, 'DebtorCreditorID', AccountID, true);
ApplyDatasetFilter(Dataset, 'IsActual', true, true);
EnableSelectQueryFilters(Dataset.SelectQuery, (FilterValues[2] == 'PL'), ['IsPL']);
EnableSelectQueryFilters(Dataset.SelectQuery, (FilterValues[2] == 'CF'), ['IsCF']);
wndOpportunities.Attributes('NotifyObject') = Self;
wndOpportunities.Attributes('IsFromAccountFinanceEdit') = true;
if (FilterValues[2] == 'PL') {
wndOpportunities.Attributes('DefaultRecipientID') = AccountID;
}
if (FilterValues[2] == 'CF') {
wndOpportunities.Attributes('DefaultPayerID') = AccountID;
}
wndOpportunities.Prepare();
wndOpportunities.Show();
Dataset.Open();
}

function edtPostponementPaymentOnChange(Edit) {
var PostponementPayment = new String(
IsEmptyValue(Edit.Value) ? 0 : Edit.Value);
if ((!IsIntegerValue(PostponementPayment)) || (((PostponementPayment*1)+'').length > 4) ||
(PostponementPayment*1 < 0) || (PostponementPayment*1 > 9999)) {
ShowWarningDialog("Отсрочка платежей должна быть целым положительным числом от 0 до 9999");
} else {
SetPostponementPayment(PostponementPayment);
}
}
/* ENDPRODUCT XRM */

function wnd_AccountEditOnNotify(ScriptableService, Sender, Message, Data) {
/* PRODUCT XRM */
if ((Message == MSG_AFTERCLOSE) &&
(ExtractUSICodeEx(Sender.USI) == 'wnd_CashflowGridArea')) {
var Dataset = dlData.Dataset;
if ((Dataset.State != dstBrowse) &&
(Dataset.State != dstInsert) &&
(Dataset.State != dstEdit)) {
return;
}
RefreshPostponementPayment(Dataset('ID'));
RecalcBalance(Dataset('SettledCredit'));
}
/* ENDPRODUCT XRM */
}

function dlDataOnDatasetAfterOpen(Dataset) {
/* PRODUCT XRM */
AccountEdit.IsPostponementPaymentInitialized = false;
/* ENDPRODUCT XRM */
}

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

У Вас проблема скорее всего в коде:

if (ActivityName == 'ActivityID') {
	if (IsEmptyValue(ActivityValue)) {
		Dataset.DataFields('FieldID').Value = null;
	} else {
		Dataset.DataFields('FieldID').Value =
			GetFieldValueFromLookupDatasetByLookupField(DataField, 'FieldID');
	}
}

У меня этот код отрабатывает корректно.

Опишите более подробно кейс воспроизведения.

я сделал back up, но не помогло (при добавлении или редактировании вид деятельности или отраслей контрагента выбивает даную ошибку, не могу разобраться где именно и что делать .... сейчас моя функция имеет вид:
function dlDataOnDatasetDataChange(DataField) {
var FieldName = DataField.Name;
var Dataset = DataField.ParentDataFields.ParentDataset;
/* PRODUCT XRM */
if (FieldName == 'PostponementPayment') {
RefreshPostponementPayment(Dataset('ID'));
}
if ((FieldName == 'SettledCredit') || (FieldName == 'PostponementPayment')) {
if (Dataset.ValAsFloat('SettledCredit') < 0) {
ShowWarningDialog("Разрешенный кредит не может быть меньше 0");
Dataset('SettledCredit') = 0;
return;
}
RecalcBalance(Dataset('SettledCredit'));
}
/* ENDPRODUCT XRM */
if (FieldName.indexOf('Communication') == 0) {
var Index = FieldName.substr(13, 1);
var CommTypeDataControl =
Self.ComponentsByName('edtCommunication' + Index + 'Type');
var CommDataControl =
Self.ComponentsByName('edtCommunication' + Index);
RefreshCommunicationActionSmartTag(CommTypeDataControl, CommDataControl,
(FieldName.indexOf('Type') > -1));
}
}

Возможно у Вас проблема была не здесь, а в другом месте конфигурации.

Выполните отладку кода при помощи Microsoft Visual Studio или Microsoft Script Debugger.

Павел, спасибо, ви очень помогли)))

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