Реалізував механізм відслідковування посилань на юр.особу з двох таблиць.
Формую ds_ на основі запиту-вибірки з таблиць в якому здійснюється об'єднання записів:
[ID],
[ObjectID],
[ObjectName],
[ObjectType],
[ObjectDatasetUSI]
FROM
(SELECT
NEWID() AS [ID],
[tbl_ContactCareer].[ID] AS [ObjectID],
[tbl_ContactCareer].[JobTitle] AS [ObjectName],
N'Кар''єра' AS [ObjectType],
N'ds_ContactCareer' AS [ObjectDatasetUSI]
FROM
[dbo].[tbl_LegalPersons] AS [tbl_LegalPersons]
LEFT OUTER JOIN
[dbo].[tbl_ContactCareer] AS [tbl_ContactCareer] ON [tbl_ContactCareer].[LegalPersonID] = [tbl_LegalPersons].[ID]
WHERE(NOT [tbl_ContactCareer].[ID] IS NULL)
UNION ALL
SELECT
NEWID() AS [ID],
[tbl_AccountBillingInfo].[ID] AS [ObjectID],
[tbl_AccountBillingInfo].[Name] AS [ObjectName],
N'Платіжний реквізит' AS [ObjectType],
N'ds_AccountBillingInfo' AS [ObjectDatasetUSI]
FROM
[dbo].[tbl_LegalPersons] AS [tbl_LegalPersons]
LEFT OUTER JOIN
[dbo].[tbl_AccountBillingInfo] AS [tbl_AccountBillingInfo] ON [tbl_AccountBillingInfo].[LegalPersonID] = [tbl_LegalPersons].[ID]
WHERE(NOT [tbl_AccountBillingInfo].[ID] IS NULL)) AS [U]
ORDER BY 3 ASC
Такий запит нормально відпрацьовує.
Далі спробував доповнити запит ще на один UNION ALL:
[ID],
[ObjectID],
[ObjectName],
[ObjectType],
[ObjectDatasetUSI]
FROM
(SELECT
NEWID() AS [ID],
[tbl_Contact].[ID] AS [ObjectID],
[tbl_Contact].[Name] AS [ObjectName],
N'Контакт' AS [ObjectType],
N'ds_Contact' AS [ObjectDatasetUSI]
FROM
[dbo].[tbl_LegalPersons] AS [tbl_LegalPersons]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[LegalPersonID] = [tbl_LegalPersons].[ID]
WHERE(NOT [tbl_Contact].[ID] IS NULL)
UNION ALL
SELECT
NEWID() AS [ID],
[tbl_AccountBillingInfo].[ID] AS [ObjectID],
[tbl_AccountBillingInfo].[Name] AS [ObjectName],
N'Платіжний реквізит' AS [ObjectType],
N'ds_AccountBillingInfo' AS [ObjectDatasetUSI]
FROM
[dbo].[tbl_LegalPersons] AS [tbl_LegalPersons]
LEFT OUTER JOIN
[dbo].[tbl_AccountBillingInfo] AS [tbl_AccountBillingInfo] ON [tbl_AccountBillingInfo].[LegalPersonID] = [tbl_LegalPersons].[ID]
WHERE(NOT [tbl_AccountBillingInfo].[ID] IS NULL)
UNION ALL
SELECT
NEWID() AS [ID],
[tbl_ContactCareer].[ID] AS [ObjectID],
[tbl_ContactCareer].[JobTitle] AS [ObjectName],
N'Карєра' AS [ObjectType],
N'ds_ContactCareer' AS [ObjectDatasetUSI]
FROM
[dbo].[tbl_LegalPersons] AS [tbl_LegalPersons]
LEFT OUTER JOIN
[dbo].[tbl_ContactCareer] AS [tbl_ContactCareer] ON [tbl_ContactCareer].[LegalPersonID] = [tbl_LegalPersons].[ID]
WHERE(NOT [tbl_ContactCareer].[ID] IS NULL)) AS [U]
ORDER BY 3 ASC
Такий варіант дає стабільно "Разрушающий сбой".
Я перевірив, що будь-яка пара таблиць опрацьовується нормально, і тільки три об'єднання приводять до збою.
Працюю з версією 3.3.2.205
Це глюк, чи є якісь нюанси в налаштуваннях ?
Нравится
Я сподівався, що створену схему можна буде вільно нарощувати в залежності від потреби :(
Поменяйте местами таблицы в секции FROM, и поставьте Inner Join. Должно помочь.
Порядок змінив.
Не допомогло.
Зрештою, сам запит-то функціонує нормально...
Допомогла вставка команди
BaseGridArea.GridDataset.DisableEvents();
в скрипт:
function wnd_LegalPersonsDepGridAreaOnPrepare(Window) { Initialize(Window); scr_BaseGridArea.wnd_BaseGridAreaOnPrepare(Window); ApplyDatasetFilter(BaseGridArea.GridDataset ,LPDepGridArea.ParentItemFieldName ,LPDepGridArea.ParentItemID ,true); BaseGridArea.GridDataset.DisableEvents(); BaseGridArea.GridDataset.Open(); BaseGridArea.GridDataset.EnableEvents(); LPDepGridArea.DataGrid = GetAttribute(Window,'DataGrid'); }
Отож маємо у версії 3.3.2.205 :
ds_ на основі запиту з двох UNION ALL у вікні типу wnd_BaseGridArea обробляється успішно,
а вже третій UNION ALL викликає ситуацію "Разрушающий сбой"
яка лікується відключенням обробника подій
В даній ситуації мені не потрібно було обробляти ситуацію відкриття набору даних.
А якби було потрібно ?
Да, как-то странно.
У меня есть сервисы с 5-ю и более объединениями. Работают стабильно.
Может действительно глюк?
Здравствуйте Игорь,
Можете, пожалуйста, выгрузить сервисы, на которых воспроизводится данная проблема, будем пытаться воспроизвести.
Здравствуйте Игорь,
В обращении в тех. поддержку вы задали 2 вопроса:
1) Робота зі списком посилань на юр.особу - «ds_LegalPersonsDep» формується на базі «sq_LegalPersonsDep», саме з цим набором даних пов’язане питанн я про три UNION ALL
На юр.особу може йти посилання з певних таблиць, в моєму варіанті їх виявилось три. Пишу виявилось, бо модель відпрацьовував з двома таблицями і з ними все було добре, а як добавив ще одну таблицю, от тоді й проявилась проблемка. В поточному варіанті я вийшов з положення тим, що постарався всі позиції відкриття набору даних здійснювати при відключеному обробнику подій.
Сервис sq_LegalPersonsDep в препросмотре имел такой вид:
SELECT [ID], [ObjectID], [ObjectName], [ObjectType], [ObjectDatasetUSI] FROM (SELECT NEWID() AS [ID], [tbl_Contact].[ID] AS [ObjectID], [tbl_Contact].[Name] AS [ObjectName], N'Контакт' AS [ObjectType], N'ds_Contact' AS [ObjectDatasetUSI] FROM [dbo].[tbl_Account] AS [tbl_Account] INNER JOIN [dbo].[tbl_LegalPersons] AS [tbl_LegalPersons] ON [tbl_LegalPersons].[AccountID] = [tbl_Account].[ID] INNER JOIN [dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[LegalPersonID] = [tbl_LegalPersons].[ID] WHERE(NOT [tbl_Contact].[ID] IS NULL) UNION ALL SELECT NEWID() AS [ID], [tbl_AccountBillingInfo].[ID] AS [ObjectID], [tbl_AccountBillingInfo].[Name] AS [ObjectName], N'Платіжний реквізит' AS [ObjectType], N'ds_AccountBillingInfo' AS [ObjectDatasetUSI] FROM [dbo].[tbl_Account] AS [tbl_Account] INNER JOIN [dbo].[tbl_LegalPersons] AS [tbl_LegalPersons] ON [tbl_LegalPersons].[AccountID] = [tbl_Account].[ID] INNER JOIN [dbo].[tbl_AccountBillingInfo] AS [tbl_AccountBillingInfo] ON [tbl_AccountBillingInfo].[LegalPersonID] = [tbl_LegalPersons].[ID] WHERE(NOT [tbl_AccountBillingInfo].[ID] IS NULL) UNION ALL SELECT NEWID() AS [ID], [tbl_ContactCareer].[ID] AS [ObjectID], [tbl_ContactCareer].[JobTitle]+' : ('+[tbl_Contact].[Name]+')' AS [ObjectName], N'Кар''єра' AS [ObjectType], N'ds_ContactCareer' AS [ObjectDatabaseUSI] FROM [dbo].[tbl_Account] AS [tbl_Account] INNER JOIN [dbo].[tbl_LegalPersons] AS [tbl_LegalPersons] ON [tbl_LegalPersons].[AccountID] = [tbl_Account].[ID] LEFT OUTER JOIN [dbo].[tbl_ContactCareer] AS [tbl_ContactCareer] ON [tbl_ContactCareer].[LegalPersonID] = [tbl_LegalPersons].[ID] INNER JOIN [dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[ID] = [tbl_ContactCareer].[ContactID] WHERE(NOT [tbl_ContactCareer].[ID] IS NULL)) AS [U] ORDER BY 3 ASC
т.е в нем 2 Union ALL
Пытался воспроизвести ошибку на бинарных файлах версии 3.3.2.215, в предпросмотре сервиса sq_LegalPersonsDep никаких ошибок не было, далее создал окно, унаследовал его от wnd_BaseGridArea и подключил к нему ds_LegalPersonsDep, вывел результаты, ошибок также не было замечено.
Предлагаю вам использовать обновленные бинарные файлы, ссылку на которые я написал Вам в письме.
2) Сервіс «wnd_ContactEdit» , поле «edtAccount» (контрагент). При першому відкритті випадаючого списку сам список виявляється порожній, наступні відкриття – все добре. В чому причина я не розібрався і все залишається як описано.
Проблему решило отключение набора фильтров TaskFilters в сервисе sq_Account