Создан новый раздел "Коммерческое предложение". Несколько полей разных типов. При добавлении новой записи всё прекрасно работает.
При редактировании вылезает ошибка:
OLE error 80020102
Единственный выполнявшийся после загрузки раздела запрос был:
exec sp_executesql N'SELECT
[tbl_Service].[ID] AS [ID],
[tbl_Service].[Path] AS [Path],
[tbl_Service].[Code] AS [Code],
[tbl_Service].[ServiceTypeCode] AS [ServiceTypeCode],
[tbl_Service].[Caption] AS [Caption],
[tbl_Service].[Description] AS [Description],
[tbl_Service].[Version] AS [Version],
[tbl_Service].[LockedByUserID] AS [LockedByUserID],
[tbl_Service].[DatabaseID] AS [DatabaseID],
[tbl_Service].[CreatedOn] AS [CreatedOn],
[tbl_Service].[CreatedByID] AS [CreatedByID],
[tbl_Service].[ModifiedOn] AS [ModifiedOn],
[tbl_Service].[ModifiedByID] AS [ModifiedByID]
FROM
[dbo].[tbl_Service] AS [tbl_Service]
WHERE([tbl_Service].[Code] = @P1)',N'@P1 nvarchar(4000)',N'uf_comminv'
Выполнял его отдельно - возвращает одну запись, хотя пользовательских полей там нет в принципе. Пробовал удалять таблицу с пользовательскими полями, тогда не заходит вообще на форму без каких-либо ошибок, как для добавления, так и для редактирования записи.
По отладчику отследил место в скрипте scr_BaseDBEditUtils, которое вылетает:
1. ProcessBaseDBEditOnPrepare
2. EditRecord
3. OpenDatasetWithRecordID
function OpenDatasetWithRecordID(Dataset, ID) {
MessageBox('OpenDatasetWithRecordID_1');
Dataset.Close();
ApplyDatasetIDFilter(Dataset, ID, true);
MessageBox('OpenDatasetWithRecordID_2');
Dataset.Open();
MessageBox('OpenDatasetWithRecordID_finish');
}
Вот тут вылетает:
Dataset.Open();
Не пойму что не так.
Права пользователя установлены на таблицу и на раздел, тем более что пользователь системный Администратор.
Применение решений аналогичных ошибок на форуме ничего не дало.
Общая информация
Дата/Время: 03.11.2011 16:40:48
Название компьютера: MICROSOF-5876D6
Имя пользователя: ndrozdov
Операционная система: Windows XP Professional, Build: 2600, 'Service Pack 3'
Системный язык: Русский
Процессор: Intel, Intel(R) Core(TM)2 Duo CPU T5250 @ 1.50GHz, MMX
Видеосистема: 1280x768 pixels, 32 bpp
Время работы системы: 0 day(s) 07:53:47.0250
Время работы программы: 0 day(s) 00:00:32.0266
Исполняемый файл: C:\Program Files\Terrasoft\Bin\TSClient.exe
Версия: 3.3.2.197
Класс исключения: EOleException
Сообщение об ошибке: OLE error 80020102
Подскажите, пожалуйста, куда копать?
Нравится
Ошибку так и не выявил, удалял все поля модуля и упоминания о них в скриптах.
Тупо пересоздал раздел, все заработало.
Судя по всему при создании какая-то галочка не была проставлена.
Вопрос решен.
После долгих походов по граблям этой ошибки вычислил и нашел как лечить её, в случае использования визарда для редактирования разделов.
Проблема 1:
При редактировании полей типа "Справочник", слетает привязка справочника к источнику данных, не всегда но процентов в 80 случаев.
Лечение:
Съём запрета на изменение поля "Источник данных" в момент редактирования записи. Функция "DisableControlsForEdit" скрипта "scr_WndUserFieldsItemEdit".
function DisableControlsForEdit() { // Так было раньше: // var IsEnabled = !(UserFieldsItemEdit.ForUserFields||Self.Attributes('IsEdit')); // Так стало: var IsEnabled = !UserFieldsItemEdit.ForUserFields; EnableControl(cbType, IsEnabled); if (edtDictionaries.IsEnabled) { EnableControl(edtDictionaries, IsEnabled); } }
Проблема 2:
При удалении полей типа "Справочник" в запросе на выборку остаются не удалёнными таблицы запроса к справочникам в блоке "FROM". Это приводит к тому, что при добавлении записи все прекрасно, но при редактировании окно вылетает с вышеуказанной ошибкой;
Ошибка происходит, когда при выборке значения справочника, где должна быть 1 строка, возвращается большее количество строк.
Лечение - заходим в запрос sq_<название сервиса> и удаляем ненужные привязки;
Радуемся жизни:)