Хочу создать новый раздел. В нем добавить окошко в котором отображались бы имеющиеся проекты.
Всё сделал по образцу с wnd_ProjectWorkspace и соответственно ProjectGridArea.
В этом обработчике InitializeGridData возникает ошибка:
debugger
var GridWindow = wndGridData.Window;
PrepareGridWindow(GridWindow, dlProject);
PrepareCommonDetails('ProjectID', true);
}
В PrepareGridWindow(GridWindow, dlProject); ошибка "Предполагается наличие объекта".
Что не так, не могу разобраться никак.
Нравится
Здравствуйте, Ильдар.
Прежде всего, проверьте, указан ли в свойствах Вашего wnd_***Workspase TemplateWindowUSI = wnd_BaseWorkspace, поскольку функция PrepareGridWindow прописана в скрипте scr_BaseWorkspace.
Если не указан, то укажите, но при этом, предварительно сделайте бекап сервиса, потому что, когда Вы укажите новый TemplateWindowUSI наработки, которые Вы сделали в этом окне пропадут и появится пустое базовое окно.
Если же TemplateWindowUSI указан, то попробуйте просто прикрепить к скрипту Вашего окна скрипт BaseWorkspace.
Возможно, Вам также будет интересно почитать описание создания нового раздела по этой ссылке: http://community.terrasoft.ru/developer/advice/4576
Спасибо, Инна, помогло (указал шаблон окна wnd_BaseWorkspace).
Но возникла следующая проблема в дереве отображаются узлы, но названий нет. Такое ощущение, что это VirtualStringTree.
Но я не знаю хорошо работу с Terrasoft, не могли бы вы помочь и с этим вопросом?
И еще, тут же. Как после этого выбрать какой то проект и создать на его основе запрос для отображения его в другом окне?
К сожалению, в чем именно может проблема так сразу сказать сложно.
попробуйте следующее:
- проверьте, выбраны ли у Вас поля для отображения в реестре;
- выполните sq_ Вашего раздела и проверьте, возвращает ли он записи;
- указано ли в датасете первичное поле для отображения;
- если запрос возвращает значения, то проверьте GridArea, пошагово сравните ее с GridArea раздела "Проекты".
Инна, огромное спасибо, действительно помогло :) я уж так запутался в этих окнах, что забыл отметить некоторые поля.
Кстати, тогда еще пару вопросов:
1) как удалить все эти окна, которые я насоздавал? Они не удаляются по причине:
а) у них где-то какой-то одинаковый идентификатор;
б) совпадающее имя.
Их теперь не исправить и не изменить.
2) Как сделать так, чтоб в дереве сразу отображалось много записей, а не первые 10?
P.S.
"И еще, тут же. Как после этого выбрать какой то проект и создать на его основе запрос для отображения его в другом окне?"
В общем по этому вопросу я сделал так, в той форме где находится TreeArea (мои проекты) на DblClick я повесил функцию из основного окна раздела. Это правильная реализация?
По первому вопросу, попробуйте, прежде всего, отвязать окна от датасетов и удалять не сразу окна, а начать с их содержимого, возможно, в процессе, Вам удастся обнаружить, что за идентификаторы там дублируются и исправить это.
Второе, попробуйте в sq установить значение "Выбрать первые" равное -1
А по третьему вопросу, я не совсем понимаю, о чем идет речь, но если все работает так, как Вам нужно, то хорошо.
Инна Безверхняя,
II линия службы поддержки Terrasoft.
По первому вопросу, я никак не могу окна исправить, изменить. И удалить соответственно тоже.
По второму, у уже проверял это свойство и там действительно -1. Что интересно, что в основном разделе "Проекты" все проекты отображаются на одной странице. А у меня нет. Что и как установить до меня так и не дошло.
Ну а последний вопрос пока отложу в сторонку.
Спасибо за ответы!
Ну видимо мой вопрос очень труден :)
1) как удалить все эти окна, которые я насоздавал? Они не удаляются по причине:
а) у них где-то какой-то одинаковый идентификатор;
б) совпадающее имя.
Их теперь не исправить и не изменить.
2) Как сделать так, чтоб в дереве сразу отображалось много записей, а не первые 10?
Ильдар, попробуйте удалить лишние окна непосредственно из таблицы сервисов (tbl_service)в БД, выполнив в MS SQL Server запрос: delete * from tbl_service where .....
Что касается количества записей, отображаемых в дереве, оно может быть изменено следующим образом:
- в сервисе датасета необходимо создать обработчик события OnDataserBeforeOpen
- в функции обработки данного события прописать Dataset.FetchRecordsCount = 40;
Спасибо, Наталия!
По первому пункту действительно помогло, я бы сам вряд ли нашел где это физически хранится в БД.
Но вот по второму вопросу - не помогло. У меня также отображается только 10.
На странице с проектами - отображаются все проекты, а у на моей созданной странице только первые 10. Но я так и не нашел, где можно это изменить.
Ильдар, проверьте какое количество записей возвращает запрос выбора (sq_xxx), возможно, согласно Вашему запросу их всего 10.
я уже по этому поводу писал выше у меня стоит параметр -1. Я решил проблему по другому, я установил свойство grdData.Mode = dtmFull.
Но теперь у меня другой вопрос. Как соединяются задачи и файлы? Как к задаче прикрепляются файлы?
Я посмотрел таблицу tbl_Task и tbl_Files, но не нашел никакую связь.
Вам необходимо обратить внимание на таблицу tbl_FileInTask, именно она используется для хранения информации о файлах в разделе "Задачи".
Спасибо за ответ.
Но для меня всё так же остался непонятным вопрос.
Вот есть у меня список проектов, по щелчку на определенный проект, я хочу выполнить запрос, который бы в соответствии с ID проекта в окне grd_Data отображал дерево из другой таблицы.
Как бы это реализовать?
В общем описываю предыдущий вопрос.
Имеется новый раздел. Слева в wndGroups описываются все проекты системы.
По клику на какой-нибудь проект в правом окне реестра должна отобразится древовидная структура созданной мною таблицы.
Это вид запроса.
Что мне теперь прописать в обработчике события двойного нажатия клавиши, и как после выполнения запроса отобразить в реестре таблицу в виде дерева?
Обработка переключения элементов в дереве групп происходит по событию OnDatasetAfterPositionChange датасета групп, которое обычно вызывает базовый обработчик scr_BaseWorkspace.dlGroupsOnDatasetAfterPositionChange. Вам следует обратить внимание на обработку в этих двух функциях.
а как мне прописать выполнение запроса?
как передать параметры запросу? Я не очень понимаю этот момент.
Используйте уже написанные скрипты конфигурации. Передача значения ID происходит через атрибуты. Накладывание фильтра можно производить по ApplyDatasetFilter(Dataset, 'Filter_Name', Filter_Value, true) - при этом название параметра должно совпадать с названием фильтра сравнения в запросе. Второй вариант - передавать параметры через Dataset.SelectQuery.Parameters('Param_Name').Value = ParamValue и использовать EnableDatasetFilters(Dataset, true, 'Param_Name') для включения отдельного фильтра с последующим открытием (и выполнением) запроса Dataset.SelectQuery.Open()