Хочу сделать функцию добавления записи и возвратом null или RecordID

function AddRecordByWnd(WindowName) {
var Attributes = GetNewDictionary();
Attributes('RecordID') = GUID_NULL;

var DefaultValues = GetNewDictionary();
var EditWindow = Services.GetNewItemByUSI(WindowName);

SetAttributesByDictionary(EditWindow, Attributes);
SetAttribute(EditWindow, 'DefaultValues', DefaultValues);

EditWindow.Prepare();
ModalResult = EditWindow.ShowModal();
if (ModalResult == wmrOK) {
return EditWindow.Attributes.Values('RecordID');
} else {
return null;
}
}

Все вроде бы работает хорошо, но с одним но.

Вызываю так:
AddRecordByWnd('wnd_Account_Edit')

Появляется карточка, ничего не заполняю, жму OK.
Выдается сообщение, что мол поле не заполнено. Кликаю в сообщении OK.
Карточка закрывается и фугкция возвращает RecordID не существующей записи.

Внимание, вопрос: почему карточка закрывается если она не заполнена корректно, хотя выводится сообщение что она не заполнена?

Нравится

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

Здравствуйте, Евгений!

После нажатия на кнопку "ОК" в окне о незаполненных обязательных полях, мы попадаем в тело основной функции и ModalResult == wmrOK?
В таком случае, тут нужно делать дополнительную проверку.

По идее как работает это в стандартном режиме, так это окно не закрывается пока не заполниш все или не нажмешь отмена. Не?

Здравствуйте, Евгений.

Дело в том, что после нажатия на кнопку "ОК" в окне предупреждения о том, что заполнены не все поля, в случае с модальным показом окна, карточка закрывается с результатом wrmOK, после чего мы попадаем в тело основной функции.

Передам данную информацию разработчикам для анализа.

В данный момент предлагаю Вам дополнить Вашу логику проверкой того, была ли добавлена запись в датасет либо нет, к примеру:

//-----------------------------------------------------------------------------
// scr_Test
//-----------------------------------------------------------------------------
 
function Main()
{ 
AddRecordByWnd('wnd_AccountEdit');
}
 
function AddRecordByWnd(WindowName) {
do
{
var Attributes = GetNewDictionary();
Attributes('RecordID') = GUID_NULL;
 
var DefaultValues = GetNewDictionary();
var EditWindow = Services.GetNewItemByUSI(WindowName);
 
SetAttributesByDictionary(EditWindow, Attributes);
SetAttribute(EditWindow, 'DefaultValues', DefaultValues);
 
EditWindow.Prepare();          
var USI = EditWindow.ComponentsByName('dlData').Dataset.USI;
var count = checkCount(USI);
ModalResult = EditWindow.ShowModal(); 
}
while (checkCount(USI) == count)
if (ModalResult == wmrOK) {
return EditWindow.Attributes.Values('RecordID');
} else {
return null;
}
}
 
function checkCount(USI)
{
var Dataset = Services.GetNewItemByUSI(USI);
Dataset.Open();
var count = Dataset.RecordsCount;
Dataset.Close();
return count;	
}
Показать все комментарии