Цитата:
Сообщение от
kashperuk
Петр, правильно ли я понял, что вы при создании диаграмм указывали имена Calendar/Workday длиной больше, чем 60 символов? (Причина ошибки, собственно)
Немного не так. Данные классы вызываются из других стандартных классов (ganttClient -> GanttData -> GanttVcWorkdayCollection.
Я в своем коде (если быть полностью точным то он был написан не мной под четверку, я переносил его на пятерку) работаем только с классов GanttClient (ну и его подклассами).
При инициализации нашей формы через load() методы классов GanttClient -> GanttData вызывается в итоге метод createWorkday.
Далее пользователь в форме выбирает рабочий центр (WkrCtrId) и период планирования. Соответвенно эти новые данные передаются класс GanttClient, затем вызывается метод load(), который пересчитывает все внутренне содержимое.
Значение "проблемной" переменной workdayName формируется внутри стандарного функционала и для некоторых работ (ProdRouteJob) формируется из наименований первичного (Primary) рабочего центра плюс последовательно все вторичные (secondary). В нашем случае для одной операции (или работы ProdRouteJob) сформированный идентификатор календаря (workdayName) превысил заданные 60 символов.
В итоге получилось так, что вначале, при инициализации формы, GanttVcWorkday был создан, а при выборе в форме рабочего центра содержащего определеную операцию, метод findWorkdayName() не находил GanttVcWorkday. Далее система пыталась создать его заново, но при создании второго GanttVcWorkday с одинаковым именем COM объект живущий внутри GanttVcWorkday выдавал ошибку.
Вообщем немного коряво получилось описать. На конкретном примере все будет более понятно. Попробую на днях более четко описать проблемы - хотя самое важное и так понятно - хотелось бы, чтобы функции были симметричными - или обо обрезали до 60 символов или обе не обрезали. Инече конструкция из кода, когда вызывается:
If (! aa.findWorkdayName(x))
{
aa.createWorkday(x);
}
Если переменная x имеет длину более 60 символов.