В версіях починаючи з 3.2.0 можна створити розділ за допмогою майстра потрібно запустити Террасофт такою командою
tscrm.exe /wnd=wnd_CreateNewWorkspace
Для створення власноруч вам допоможе файл "Практические занятия_3.2v2.0.doc" файл прикріплений нижче.
Додам чого немає у вказаному вище мануалі.
При створенні сервісів sq_ ds_ для головної таблиці розділу їхні назви повинні співпадати з назвою таблиці. Інакше будуть проблеми з журналом змін БД. В мойому випадку були проблеми ще й зі звітом роботи користувачів в системі.
Щоб додати деталь "Нагадування":
1.Потрібно в скрипт Workspace додати перелік "Тип об'єкту нагадувань", в перелік додати значення "rst_КодРозділу"
2.Додати дві функції:
function InitializeRemindingsDetail() {
КодРозділуWorkspace.RemindingsWindow = wndRemindingsDetail.Window;
var DetailWindow = КодРозділуWorkspace.RemindingsWindow;
SetAttribute(DetailWindow, 'DatasetUSI', 'ds_Reminding');
SetAttribute(DetailWindow, 'ParentItemFieldName', 'SubjectID');
SetAttribute(DetailWindow, 'SubjectTypeID', rst_КодРозділу);
DetailWindow.Prepare();
КодРозділуWorkspace.RemindingsDataset =
DetailWindow.ComponentsByName('dlData').Dataset;
}
function RefreshRemindingsDetail() {
if (КодРозділуWorkspace.InitializeRemindingsFlag != true) {
InitializeRemindingsDetail();
КодРозділуWorkspace.InitializeRemindingsFlag = true;
}
var КодРозділуID = BaseWorkspace.GridDataset.ValAsGUID('ID');
if (КодРозділуID == КодРозділуWorkspace.RemindingsOldКодРозділуID) return;
КодРозділуWorkspace.RemindingsOldКодРозділуID = КодРозділуID;
SetAttribute(КодРозділуWorkspace.RemindingsWindow, 'ParentItemID',
BaseWorkspace.GridDataset.ValAsStr('ID'));
RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
КодРозділуWorkspace.RemindingsDataset, 'SubjectID');
}
3.В функцію RefreshDetails() додати:
if (pcDetails.ActivePage.Name == pgRemindingsDetail.Name)
RefreshRemindingsDetail();
4.В скрипт scr_Remindings в функцію OpenWorkspaceWindow() додати запис:
case rst_Код розділу:
GotoWorkspace('wnd_Код розділуWorkspace', SubjectID);
break;
break;
5.В select query sq_Remindings додати відповідний UNION ALL та параметр UrikiSubjectTypeID значення якого повинно зберігати id rst_КодРозділу взяте із переліку "Тип об'єкту нагадувань", бути уважним:
а) фільтр порівняння RemindTime повинен мати порівняння "="
б) поля ID, SubjectID, SubjectTypeID повинні бути помічені як завжди вибрані у запиті
Щоб додати деталь "Опис":
1.Потрібно в головній таблиці розділу до якого буде відноситися деталь "Опис" створити поле Description з типом даних "Большой бинарный объект".
2.Створити відповідний контейнер вікна в деталі з іменем wndDescriptionDetail та шаблоном Window = wnd_Description.
3.В функцію RefreshDetails() додати:
if (pcDetails.ActivePage.Name == pgDescriptionDetail.Name)
RefreshDescriptionDetail(BaseWorkspace, wndDescriptionDetail,
BaseWorkspace.GridDataset);
Щоб додати деталь "Доступ":
1.Створити в деталі відповідний контейнер вікна з назвою wndAccessDetail та значенням Window = wnd_AccessGridArea
2.В таблиці розділу активувати опцію "Администрируется по записям". Після збереження змін поруч створиться таблиця в якій будуть зберігатися права доступу tbl_Назва_батьківської_таблиці_Right"
3.В функцію RefreshDetails() додати:
if (pcDetails.ActivePage.Name == pgAccessDetail.Name)
RefreshAccessDetail(BaseWorkspace, wndAccessDetail, 'tbl_Назва_батьківської_таблиці_Right');
Щоб додати деталь "Файли":
1.Створити в деталі відповідний контейнер вікна з назвою wndFilesDetail та значенням Window = wnd_FilesDetail
2.Створити подібно іншим розділам сервіси tbl_FileInКодРозділу і iq_FileInКодРозділу
3.В сервіси додати поле "КодРозділуID" та ключі до головної таблиці розділу з активованою опцією "Каскадная связь"
4.В функцію RefreshDetails() додати:
if (pcDetails.ActivePage.Name == pgFilesDetail.Name)
RefreshFilesDetail(BaseWorkspace, wndFilesDetail, 'КодРозділуID', 'tbl_FileInКодРозділу', 'iq_FileInКодРозділу');
Місце зберігання функцій, що оновлюють перелік стандартних деталей scr_WorkspaceUtils
Щоб додати будьяку деталь та оновлювати її через стандартну функцію:
1.В таблицю, SelectQuery, Dataset розділу додати поле ідентифікторів для зв'язку з деталлю та одноіменний фільтр 'КодРозділуID' в SelectQuery.
2.В функцію RefreshDetails() додати:
if (pcDetails.ActivePage.Name == pgКодРозділуDetail.Name)
RefreshCommonDetail(BaseWorkspace, wndКодРозділуDetail, 'КодРозділуID', 'КодРозділуID');
де 'КодРозділуID' - поле і фільтр яке буде зв'язувати деталь з основним реєстром
Активація вкладки "Графіки" в реєстрі розділу:
1.В scr_GraphUtils додати в функцію GetWorkspacesEnum() ініціалізацію розділу WorkspaceCodes("Назва розділу") = 'wnd_КодРозділуWorkspace';
2.Потрібно прослідкувати щоб в скрипті wnd_КодРозділуWorkspaceScript в функції RefreshDetails() перед всіма командами був запис:
if (!scr_BaseWorkspace.RefreshDetails()) return;
Для підключення нового розділу до системи керування правами доступу:
1.Відкрити TSCRM розділ "Адміністрування" вкладка "Права доступу до груп таблиць"
2.Вказати "Назва"=Назва національними літерами і "Ім'я об'єкта SQL" = КодРозділуЛатиницею
3.В TSAdmin в сервісах таблиць що будуть відноситися до цієї групи прав вибрати назву групи прав в полі "Группа таблиц"
Для підключення нового розділу до системи звітів і відповідно додавався новостворений звіт в меню "Звіти" вашого розділу.
Потрібно додати відповідні записи в скрипт scr_ReportUtils в функцію GetWorkspaceCodeEnum(). Наприклад:
WorkspaceCodes("НазваРозділу") = 'wnd_КодРозділуWorkspace';
При активуванні журналу змін для полів типу BLOB:
- Переконайтесь, що цих полів не має в сервісах SelectQuery (включаючи вимкнені), які відносяться до розділів. Для полів типу BLOB необхідно сторити окремий SQ і DS. Інакше в журнал змін "здуріє": будуть додаватися записи після кожного перегляду запису через карточку редагування, після додання нового запису в реєстр в журнал будуть додаватися по 2 записи одразу, при зміні інших полів по яким відбувається відстеження змін - поле з типом BLOB буде очищатися (обнулятися).
- Обов'язково додайте в список відслідковуємих поле вказане в таблиці, як первинне для відображення. Інакше опції меню "Операції" для поля "Опис" будуть викликати помилки
Особисте спасибі Дмитру Гоморі, Артему Репко і іншим програмістам за допомогу у вирішенні даного питання.
Стаття по темі: Создание своего раздела