В версіях починаючи з 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:

  1. Переконайтесь, що цих полів не має в сервісах SelectQuery (включаючи вимкнені), які відносяться до розділів. Для полів типу BLOB необхідно сторити окремий SQ і DS. Інакше в журнал змін "здуріє": будуть додаватися записи після кожного перегляду запису через карточку редагування, після додання нового запису в реєстр в журнал будуть додаватися по 2 записи одразу, при зміні інших полів по яким відбувається відстеження змін - поле з типом BLOB буде очищатися (обнулятися).
  2. Обов'язково додайте в список відслідковуємих поле вказане в таблиці, як первинне для відображення. Інакше опції меню "Операції" для поля "Опис" будуть викликати помилки

Особисте спасибі Дмитру Гоморі, Артему Репко і іншим програмістам за допомогу у вирішенні даного питання.

Стаття по темі: Создание своего раздела

Нравится

Поделиться

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

Здравствуйте.
Используем Terrasoft Sales 3.2.0.16, Firebird 2.0.
Пытаюсь создать раздел при помощи tscrm.exe /wnd=wnd_CreateNewWorkspace.

Сначала при нажатии "создать раздел" выдало:

[09.11.26 15.22.08.334] (E) Dynamic SQL Error
SQL error code = -804
Function unknown
NEWID
An error was found in the application program input parameters for the SQL statement.
Error Code: 249
insert into tbl_RevenueGroup (ID, Name, IsPrivate) values (newid(), 'All Revenues', 0)

Нашел в базе пользовательскую ф-ю GUID_CREATE,
попробовал заменить ею. Теперь выдает:

[09.12.01 14.36.48.450] (E) Dynamic SQL Error
SQL error code = -204
Table unknown
TBL_REVENUEGROUP
At line 1, column 13
Undefined name
Error Code: 249
insert into tbl_RevenueGroup (ID, Name, IsPrivate) values (GUID_CREATE(), 'All Revenues', 0)

Revenue — новый раздел.
Скажите в чем может быть проблема?

При запуску з вказаним ключем, в мене особисто, з'являлось вікно майстра для створення розділу. Далі створювати не ризикнув. Створював з нуля власноруч по інструкції.

>При запуску з вказаним ключем, в мене особисто, з'являлось вікно майстра для створення розділу.
Помилка з'являється при завершенні створювання розділу в майстрі. При натисненні "ОК".

З нуля по інструкції теж створював. Але хотілося б це робити трошки швидше.

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