341
Создал раздел на тестовой БД, перенес его на рабочую, скопировал запись из таблицы tbl_Workspace на рабочую БД.
добавил раздел в рабочих местах, создал новою группу в администрировании, заполнил ею поле Группа таблиц в главной таблице нового раздела.
При загрузке ТС и переходе на новый раздел появляется ошибка - разрушительный сбой на строке
wndWorkspace.Window = WorkspaceWindow;
в функции
ShowGroupWorkspace
поставил дебагер, но он ошибки не показал!!!! и до конца функции все отработало хорошо, разрушительный сбой появился аж после окончания функции amiWorkspacesOnExecute.
впервые с такой проблемой стыкаюсь и уже сутки пытаюсь решить ее

Нравится

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

Вау, на тестовой тоже эта ошибка появилась!!! круто, значит всему виной бинарники?

Если до добавления раздела всё работало корректно на обеих базах, а после сломалось, то всему виной некорректное добавление раздела. Попробуйте удалить раздел и создать его заново. Для создания можно воспользоваться мастером разделов. Добавлять новые поля в раздел лучше при помощи FieldMaker.

"Зверев Александр" написал: Попробуйте удалить раздел и создать его заново

удалил все подчистую, создал его заново с помощью мастера - создалось без ошибок,
перезалил сервисы с тестовой, все наложилось хорошо, запускаю - та самая ошибка...

Значит, ошибка в сервисах с тестовой бызы. Возможно, поможет создание раздела с нуля там.

простите, был не внимательный, с тестой базы перетащил воркспейс где была активна нерабочая вкладка, в клиенте было на рабочей и все работало отлично, когда перенес - ТС отрывал по умолчанию активную вкладку - нерабочую, отсюда все проблемы...
А тестовая наверно сломалась из-за того, что кеш почистил

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

Всем привет, нужна помощь с разработкой отчета FastReport.

Создал скрипт по вызову FastReport-отчета по кнопке. На клиентском компьютере после 2-3х использований функции вылетает ошибка "разрушительный сбой". Строка на которой все рушится:

var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');

Проблема явно в этой строке, т.к. если скрываю в /* */ весь остальной код ошибка остается, а если наоборот (оставить только неё) я получаю сбой. Debugger-ом пройтись не удастся, на клиентском компьютере нет VS.

Нравится

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

Здравствуйте, Иван!

Как писала Наталья Бондарь в рамках обращения 0210495, попробуйте заменить

Services.GetNewItemByUSI('wnd_BaseFastReportPreview');
на
Services.GetSingleItemByUSI('wnd_BaseFastReportPreview');

Если это не даст результат, направьте по обращению сервисы отчета.

Вроде бы помогло. Спасибо!

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

Всем доброго времени суток, необходима помощь по решению проблемы с wnd_BaseFastReportPreview. Суть следующая:

Разработал скрипт по экспорту отчета в FastReport по нажатию на кнопку. На моей базе все отлично, на компьютере клиента после 2-3х вызовов функции вываливается ошибка "Разрушительный сбой". Нашел проблемную строку:

var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');

Дело наверняка в ней, т.к. закомментировав весь код функции кроме этой строчки я получаю ту же самую ошибку (и наоборот - 'спрятав' все кроме её и производных от неё я получаю log-и и могу дальше работать в программе). Права у клиента полные, кэш приложения пуст, пройтись debugger-ом вряд ли получится возможным.

Кто нибудь сталкивался с подобной проблемой?

Нравится

1 комментарий

Обсуждение перенесено в эту тему

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

Добрый день.
Есть следующий код на C#

string[] guid = new string[] {"{guid1}", "{guid2}"};
foreach(string id in guid)
{
    dsTask.SelectQuery[0].Filters["ID"].IsEnabled = true;
    dsTask.SelectQuery.Parameters["ID"].Value = "{Чего-то там}";
    dsTask.Open();
    if(!dsTask.IsEOF)
    {
        dsTask.Edit();
        dsTask.DataFields["StatusID"] = "GUID статуса";
        dsTask.DataFields["ResultID"] = "GUID результата";
        dsTask.Post();
    }
}

Цикл из двух итераций. Стабильно на второй итерации на строке dsTask.Edit() вываливается ошибка "Разрушительный сбой". Один раз эта ошибка вывалилась с описанием "Ошибка добавления объекта в Microsoft Script Control. Ошибка добавления модуля 'System\__GeneratedEnumsModule'. Разрушительный сбой". Guid1 и guid2 местами менять пробовал - результат тот же. Создавать ds_Task через GetNewItemByUSI для каждой итерации тоже пробовал - "Разрушительный сбой".
Версия ПО Террасофт: 3.3.2.245.

Нравится

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

Попробовал изменить код на такой:

string[] guid = new string[] {"{guid1}", "{guid2}"};
string[] workflowItemIDs = new string[] {"{wItem1}", "{wItem2}"};
workflowEngineComObj = Activator.CreateInstance(Type.GetTypeFromProgID("TSWorkflowLibrary.WorkflowEngine"));
WorkflowEngine we = new WorkflowEngine(workflowEngineComObj);
we.SetConnector(TS3Connector.comObj);
TS3Connector.Attributes["WorkflowEngine"] = workflowEngineComObj;
for(int i = 0; i < guid.Length; ++i)
{
    dsTask.DisableEvents();
    dsTask.SelectQuery[0].Filters["ID"].IsEnabled = true;
    dsTask.SelectQuery.Parameters["ID"].Value = guid[i];
    dsTask.Open();
    if(!dsTask.IsEOF)
    {
        dsTask.Edit();
        dsTask.DataFields["StatusID"] = "GUID статуса";
        dsTask.DataFields["ResultID"] = "GUID результата";
        dsTask.Post();
        we.ProcessWorkflowItem(workflowItemIDs[i]);
    }
}

Теперь код стабильно падает с той же ошибкой на втором вызове WorkflowEngine.ProcessWorkflowItem(). В чем может быть дело?

Как минимум в конце цикла надо добавить

dsTask.Close();

Потому что иначе обе итерации работают над одной записью.

if(!dsTask.IsEOF)
    {
        dsTask.Edit();
        dsTask.DataFields["StatusID"] = "GUID статуса";
        dsTask.DataFields["ResultID"] = "GUID результата";
        dsTask.Post();
    }

Исправьте на

if(!dsTask.IsEOF)
    {
        dsTask.Edit();
        dsTask.DataFields["StatusID"] = "GUID статуса";
        dsTask.DataFields["ResultID"] = "GUID результата";
        dsTask.Post();
        dsTask.GotoNext();
    }

У Вас получается зацикливание в dsTask.IsEOF, так как набор данных не доходит до конца.

Добавление GotoNext() не поможет - в каждой итерации сначала указывается фильтр по ID, потом открывается датасет, в нем одна запись. Просто датасет надо закрыть в конце итерации, чтобы новый фильтр сработал при последующем открытии датасета.

Спасибо за комментарии, dsTask у меня закрывается, просто код скопировал не до конца. Вот исправленный вариант:

string[] guid = new string[] {"{guid1}", "{guid2}"};
string[] workflowItemIDs = new string[] {"{wItem1}", "{wItem2}"};
workflowEngineComObj = Activator.CreateInstance(Type.GetTypeFromProgID("TSWorkflowLibrary.WorkflowEngine"));
WorkflowEngine we = new WorkflowEngine(workflowEngineComObj);
we.SetConnector(TS3Connector.comObj);
TS3Connector.Attributes["WorkflowEngine"] = workflowEngineComObj;
for(int i = 0; i < guid.Length; ++i)
{
    dsTask.DisableEvents();
    dsTask.SelectQuery[0].Filters["ID"].IsEnabled = true;
    dsTask.SelectQuery.Parameters["ID"].Value = guid[i];
    dsTask.Open();
    if(!dsTask.IsEOF)
    {
        dsTask.Edit();
        dsTask.DataFields["StatusID"] = "GUID статуса";
        dsTask.DataFields["ResultID"] = "GUID результата";
        dsTask.Post();
        we.ProcessWorkflowItem(workflowItemIDs[i]);
    }
    dsTask.Close();
}

"Разрушительный сбой" продолжает наблюдаться.

Riptor, вложите, пожалуйста, сервисы.

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

Коллеги, здравствуйте!

Никто не сталкивался с проблемой: когда у пользователя открывается окошко логина, то одновременно в журнале вываливается сообщение: "Разрушительный сбой".
Все вроде как потом работает, но данная надпись нервирует пользователей.

Это замечено как на машинах, на которых непосредственно установлен террасофт, так и у пользователей которые работают через терминальный сервер.
Версия бинарников 3.2.2.244

Спасибо!

Нравится

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

Добрый день. Пока не сталкивался с таким поведением.
Первое на что хотелось бы погрешить - бинарные файлы.
Второе - регистрация библиотек.

Возможно, обновление бинарных файлов в последний раз происходило путем замены существующего каталога Bin новым. Рекомендую удалять или перемещать в резервную папку старую версию, а на ее место выкладывать новую.

Предлагаю обратиться к нам на support@terrasoft.ru за последней сборкой (актуальная сейчас 3.3.2.276).

Павел!

Раньше замещение происходило на "ура" сейчас почему-то такое не происходит, было замечено на момент обновления на версию 3.3.2.275, когда в процессе обыкновенного замещения папок с файлами система выдавала не правильную версию. Если делать как предлагаете Вы, то строка в RunSettings теряет свой смысл,а она удобна!:

<UpdateSettings Enabled="False" Force="False" Type="Network" Path="....\Update CRM\TS_SoftKey_Rus" URL="" FTPUserName=""

Поэтому считаю, что Ваше решение не является полным и правильным. Как быть администратору, если надо обновить 200-300 пользователей?

Добрый день Павел!

В случае, если Terrasoft обновляется автоматически, происходит перерегистрация всех библиотек ядра, по очереди. Сначала их regsvr32 /u , перезапись и регистрация. Это корректно. Список файлов для удаление также формируется из Runsettings.xml - блок "Files for deletion". Обновление таким образом будет абсолютно корректным (если список файлов для регистрации и удаления не будет содержать ошибок).

Для включения режима автоматического обновления параметр UpdateSettings Enabled следует установить в значение "True" :

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

Реалізував механізм відслідковування посилань на юр.особу з двох таблиць.
Формую ds_ на основі запиту-вибірки з таблиць в якому здійснюється об'єднання записів:

SELECT
        [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:
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_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
Це глюк, чи є якісь нюанси в налаштуваннях ?

Нравится

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

Я сподівався, що створену схему можна буде вільно нарощувати в залежності від потреби :(

Поменяйте местами таблицы в секции 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
union
Пытался воспроизвести ошибку на бинарных файлах версии 3.3.2.215, в предпросмотре сервиса sq_LegalPersonsDep никаких ошибок не было, далее создал окно, унаследовал его от wnd_BaseGridArea и подключил к нему ds_LegalPersonsDep, вывел результаты, ошибок также не было замечено.

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

2) Сервіс «wnd_ContactEdit» , поле «edtAccount» (контрагент). При першому відкритті випадаючого списку сам список виявляється порожній, наступні відкриття – все добре. В чому причина я не розібрався і все залишається як описано.

Проблему решило отключение набора фильтров TaskFilters в сервисе sq_Account

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