Показать сообщение отдельно
Старый 22.10.2008, 02:41   #72  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Цитата:
Сообщение от 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 символов.
За это сообщение автора поблагодарили: kashperuk (5).