Здравствуйте!

EXEC [dbo].[tsp_RegisterSection]
@ModuleCaptionRus = N'[Значение для колонки Caption в русской локализации]',
@ModuleCaptionEng = N'[Значение для колонки Caption в английской локализации]',
@ModuleName = N'SectionModule',
@ModuleSchemaName = N'[Название страницы раздела]',
@ModuleEntityName = N'[Название объекта раздела]',
@ModuleHeaderRus = N'[Заголовок страницы раздела в русской локализации]',
@ModuleHeaderEng = N'List of [Заголовок страницы раздела в английской локализации]',
@ModulePosition = -1,
@TypeColumnName = '[Название колонки типа объекта]'

Здесь, если я не добавляла страницу раздела и не создавала новый объект для раздела что мне следует писать в @ModuleSchemaName = N'[Название страницы раздела]',
@ModuleEntityName = N'[Название объекта раздела]',

Спасибо!

Нравится

5 комментариев

Здравствуйте, Сабина!

Эта процедура предназначена для регистрации в системе простого раздела без страниц редактирования. В случае, если у Вас нет страницы раздела и объекта, что Вы пытаетесь зарегистрировать?

Нет, раздел есть. Объекта нету.
Этому разделу при открытии передаются Id.
А в разделе отображаются и контакты и активности.
Как на прикрепленной картинке.

Как вы считаете, что правильнее создавать для этого раздел или страницу?

Спасибо

Сабина, раздел это и есть страница редактирования.
У каждого раздела/страницы редактирования/детали есть объект. У одного объекта может быть несколько страниц редактирования.

Если судить по картинке, то это участники активностей с Вашей стороны и со стороны клиента, а также все активности, которые были. (это на уровне предположения)
В системе уже реализованы подобные детали - "Участники активности" ("Участники продажи") и деталь "Активности" в разделе "Продажи".

Что должен отображать созданный раздел?

Мне надо реализовать смену прав для выбранных активностей. Выбирают активности, потом выбирают контакт для которого надо сменить права. (две колонки для того чтобы права контакта из первой колонки передать контакту из второй колонки. ) В идеале там должно быть разделение права на просмотр, редактирование и удаление. Но главное пока как-то продвинуться.

Здравствуйте, Сабина!

Для изменения прав доступа в системе реализован соответствующий элемент бизнес-процесса "Изменение прав доступа".

Вашу задачу попробуйте реализовать процессом.

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

Добрый день!

TS 3.3.2.174

Сделал новый раздел Мастером. В Администрировании указал права доступа для группы "Все пользователи", в корневой группе указал права тоже для всех пользователей.

В итоге каждый пользователь видит только свои добавленные записи.

Подскажите, пожалуйста, как можно раздел сделать общим для всех?

Спасибо!

Нравится

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

Алексей, настройте права доступа по умолчанию ("Администрирование" - "Права доступа по умолчанию").
Таким образом Вы определите уровень доступа на создаваемые записи для ролей.
Чтобы изменить права на уже созданные записи обратите внимание на эту тему

Наталия, спасибо!

То, что и нужно было)

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

Существует в разделе Контактов детальSMS. Хочу создать отдельный Раздел СМС где бы видно было все отправленные смс-ки, а не в разрезе одного контакта. Получается мне не нужно создавать tbl_sms, sq_sms и т.д. Все это уже есть, мне нужно только создать wnd_SMSWorkspace. Как это сделать, чтобы он базово создался по анологии других разделов?

Есть пост где указано следующее:

"Создание главного окна раздела

51. В группе [Common \ Workspaces \ Orders \ General \ Main Grid] создать окно [wnd_OrdersWorkspace] как наследник от [wnd_BaseWorkspace]."

А как создать окно [wnd_OrdersWorkspace] как наследник от [wnd_BaseWorkspace].
Я вижу в админке только создать новое окно и все...

Нравится

5 комментариев

Прорекламируюсь... :smile:
Такая возможность есть в нашем расширении:
http://www.community.terrasoft.ua/catalog/4245

Думаю вам поможет следующий пост
http://www.community.terrasoft.ua/developer/advice/4576

Этот пост я видел,..., из него цитата:

"Создание главного окна раздела

51. В группе [Common \ Workspaces \ Orders \ General \ Main Grid] создать окно [wnd_OrdersWorkspace] как наследник от [wnd_BaseWorkspace]."

А как создать [wnd_OrdersWorkspace] как как наследник от [wnd_BaseWorkspace]???

Вадим, Вам непонятно, как создать окно как наследник от другого окна?
если да, то есть команда "выберите родительское окно" в панели инструментов, под строкой меню.
версия 3.3:
выберите родительское окно (версия ТС 3.3)
версия 3.4:
версия 3.4

Да, оно.
Спасибо.

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

Добрый день.

Сегодняшний вопрос касается такой задачи: в системе есть новый раздел Объекты, и необходимо создать новую деталь в разделе Контрагенты, где отражать связанные с Контрагентом Объекты.

На сейчас получилось добавить саму деталь в раздел (в wnd_AccountsWorkspace). Я прописала обновление детали в scr_AccountsWorkspace. Для этого фукнция RefreshDetails() изменена, добавлены строки

        if (pcDetails.ActivePage.Name == pgObjectDetail.Name) {
                RefreshObjectDetail();
        } else

и созданы 2 новых функции

1)

function InitializeObjectDetail() {
        var DetailWindow = wndObjectDetail.Window;
        AccountsWorkspace.ObjectWindow = DetailWindow;
        SetAttribute(DetailWindow, 'ParentItemFieldName', 'object_clientID');
        DetailWindow.Prepare();        
        AccountsWorkspace.ObjectDataset =
                DetailWindow.ComponentsByName('dlData').Dataset;
}

2)

function RefreshObjectDetail() {
   if (AccountsWorkspace.InitializeObjectFlag != true) {
                InitializeObjectDetail();                          
                AccountsWorkspace.InitializeObjectFlag = true;
        }
        var AccountID = BaseWorkspace.GridDataset.ValAsGUID('ID');
        if (AccountID == AccountsWorkspace.ObjectOldAccountID) {
                return;
        } else {
                AccountsWorkspace.ObjectOldAccountID = AccountID;  
        }
        SetAttribute(AccountsWorkspace.ObjectWindow, 'ParentItemID',
                AccountID);
        RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
          AccountsWorkspace.ObjectDataset, 'object_clientID');
}      

Теперь при открытии детали возникает ошибка в функции:

function CheckAssigned(Object, ObjectName) {
        if (!Assigned(Object)) {
                var ErrorMgs = FormatStr(ObjectNotAssignedError, ObjectName);
                throw ErrorMgs;
        }
}

и появляется сообщение "OLE 80020101".
После этого деталь все же открывается, но пустая.
Если добавить в детали новый Объект, то он создается нормально, и после сохранения отражаются все Объекты, которые хранятся в системе, не зависимо от того, относятся ли они к данному контргагенту или нет.
Что еще я не учла при создании детали?
Какие изменения внести, чтобы деталь открывалась правильно?

Нравится

6 комментариев

Виктория, вероятно, Вы не создали параметр и фильтр сравнения под названием object_clientID в запросе выбора данных детали.

У меня есть ds_ObjectInAccount на основе sq_ObjectInAccount (поля Object и ObjectID). В этом запросе создан параметр AccountID, который сравнивается с полем object_clientID таблицы Object.
Надо переименовать этот параметр в object_clientID ?

Попробовала переименовать, но результат от этого никак не изменился. Ошибка получается на той же самой итерации.

Проверьте чтобы и параметр, и фильтр в sq_ObjectInAccount назывались object_clientID, поскольку Вы вызываете фильтр под таким названием:

RefreshDetailData(BaseWorkspace.GridDataset, 'ID', 
          AccountsWorkspace.ObjectDataset, 'object_clientID');

Да, я так и изменяла. Но это не помогает.
Может, надо где-то еще прописать обращение к указанному датасету ds_ObjectInAccount и запросу ?

Ой, как оказалось - я не там создавала этот самый параметр!!!
Надо было не создавать отдельный ds_ObjectInAccount и sq_ObjectInAccount, а написать этот параметр в существующем sq_Object, который создавался во время создания раздела!
Теперь все работает правильно.

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

Здравствуйте.
Вопрос, возможно, и не новый, но нужна помощь в создании нового раздела в системе, версия 3.3.1.
Для создания раздела собиралась воспользоваться Wizardoм, но при запуске скрипта появляется ошибка "Метод Main не существует"
Как правильно запустить мастер создания нового раздела или как устранить возникающую ошибку?

Нравится

5 комментариев

Вы, наверное, запускали его по F9 из скрипта. Запустите Terrasoft из командной строки с параметром названия окна:
..\TSClient.exe -wnd=wnd_CreateNewWorkspace

Да, процесс открытия мастера начался. Но получилась ошибка в выполняемом коде.

К сожалению, эта ошибка мне ни о чем не говорит. А у Вас точно актуальная версия мастера? Его можно запросить у службы поддержки, если что.

попробую обратиться в службу поддержки :sad:

Попробуйте прикрепленные сервисы. Перед импортом обязательно сделайте экспорт всех своих сервисов из ветки Common\Tools\Wizard.

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

В версіях починаючи з 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 — новый раздел.
Скажите в чем может быть проблема?

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

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

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

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