Борьба с ошибкой: в детали "Интервью" раздела "Опросы" не удаляются только что созданные записи
Несколько раз встречал ошибку: в детали "Интервью" раздела "Опросы" не удаляются только что созданные записи. Пользователь сам создал запись, и сам же не может её удалить. Когда-то я помнил причины, почему так происходит (там хитро, если столкнусь с ошибкой опять - опишу подробно), а вот решение сохранилось. Предлагаю, быть может, не самый оптимальный вариант, но вполне рабочий. Суть изменений сводится к подмене датасетов, по которым определяются права на удаление.
На событие btnDeleteOnClick скрипта wnd_ContactInSurveyGridAreaScript помещаем такую функцию:
//Удаление. Поскольку Dataset другой, сообщаем функции удаления,
//что проверку доступности записей на удаление следует производить
//по другому датасету, а именно ds_InterviewAnswer
SetAttribute(dlData.Dataset, 'ContactInSurveyFiction', 'ds_InterviewAnswer');
scr_BaseGridArea.btnDeleteOnClick(Control);
//и тут же избавляемся от этого атрибута
dlData.Dataset.Attributes('ContactInSurveyFiction') = null;
}
Потом в scr_WindowUtils, в функции DeleteDataGridRecords, в середине, где стыкуются два цикла, вносим следующие изменения:
var MustDoFiction = false;
if (Dataset.Attributes.IsValueExists('ContactInSurveyFiction')) {
MustDoFiction = true;
FictionDataset = GetSingleItemByCode(Dataset.Attributes('ContactInSurveyFiction'), 'ContactInSurveyFiction');
}
//Собственно, удаление.
for (var i = 0; i ArrayIDs.length; i++) {
try {
ID = ArrayIDs[i];
//Здесь происходит проверка на наличие прав на удаление
/* старый вариант
CanDeleteRecord =
GetIsRecordIDAccessAllowByDataset(Dataset, ID, 'CanDelete');
*/
CanDeleteRecord =
GetIsRecordIDAccessAllowByDataset(
(MustDoFiction)? FictionDataset:Dataset, ID, 'CanDelete');
после строки "CanDeleteRecord =" оставляем всё, как в базовой версии. Права на удаление теперь проверяются по "правильному" датасету, а удаление происходит откуда надо.