Вопрос: при использовании кода Log.Write(1, "Предупреждение"); - лог выводиться на экран пользователя и параллельно пишеться в файл. Как сделать чтоб на экран не выводилось, а только писалось в файл C:\Users\AZhukov\AppData\Roaming\Terrasoft\3.3.2\Logs?

Нравится

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

Можно

Log.Write(0, "Текст"); 

"Зверев Александр" написал:

Можно Log.Write(0, "Текст");

Так на экран тоже сообщение выводиться.

Если окно лога закрыть, то при приходе нового сообщения само не выводится, пока вручную не открыть лог.

Если выводить не нужно в принципе, тогда используйте функции для вывода в файл.

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

Здравствуйте!
Добавляю в окно дополнительное поле в данном случае "Подвал" и хочу сделать возможность выбора его значения, как занести эти данные в справочник(необходимо заполнить поле LookupDatasetLink), чтобы корректно отображались необходимые данные.

Нравится

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

Нужно на карточке создать невизуальный компонент типа DataLink, привязать его к датесету справочника «Подвалы», а затем у копонента edtPodval сослаться на этот DataLink в поле LookupDatasetLink.

а где сам ds создать?

Есть статья Создание нового справочника или см. в руководстве администратора.

А как Вы собрались фильтровать, в саму карточку помещения ещё не добавили поле?

Спасибо за наводку, справочник создал , в карточку поле добавил

но вот когда добавляю новую квартиру указав в поле подвал то, или иное значение, после добавления и повторного просмотра карточки поле остается пустым и фильтрации не происходит, если я ее делаю только по полю подвал

мои действия сейчас, мне необходимо добавить в wnd_ObjectsWorkspaceScript кусок скрипта для выполнения тех или иных действий при выборе значения из поля "подвал"? и почему не сохраняется значение при добавлении новой карточки?

В карточку поле добавляется не так.
См. статью как добавить вручную или воспользуйтесь FieldMaker.

Добавил через FieldMaker, все ок,
добавляю в левое поле, где фильтрация и пытаюсь отфильтровать только по нему, фильтрация не происходит...
Или туда тоже надо через FieldMaker добавлять?

Судя по скриншоту, левая панель — это не базовая логика, а какие-то доработки.

Нужно сделать полностью аналогично какому-то другому полю-справочнику этой панели.

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


аналогичные поля

Вот сам скрипт по обработке запросов из этого окна wnd_ObjectsWorkspace, сюда не надо ничего добавлять?:

 // ----------------------------------------------------------------------------
// wnd_ObjectsWorkspaceScript                
// ----------------------------------------------------------------------------
 
var ObjectsWorkspace = new Object();
 
function Initialize() {                    
	InitializeGroups('tbl_ObjectsGroup', 'ds_ObjectsInGroup', 'ObjectsID');
	InitializeGridData();
	pgGraphs.IsVisible = false;
	pgGraphs.IsAccessible = false;
	pgGraphsDetail.IsVisible = false;
	pgGraphsDetail.IsAccessible = false;
}
 
function InitializeGridData() {
	var GridWindow = wndGridData.Window;
	PrepareGridWindow(GridWindow, dlObjects);
	wndCheckerboard.Window.Prepare();
	wndCheckerboard.Window('dlData').Dataset.Open();
	dlCheckerboard.Dataset = wndCheckerboard.Window('dlData').Dataset;
	PrepareCommonDetails('ObjectsID');
	PrepareChangeLogContract('ContractID');
}
 
 
function InitializeCheckerboard(BuildingID, SectionID, GroupID, IsExtended) {
	var grdData = wndCheckerboard.Window('grdData');
	wndCheckerboard.Window.BeginUpdate();
	grdData.IsMultiLineData = false;
	var DatasetLink = wndCheckerboard.Window('dlData');
	var Dataset = DatasetLink.Dataset;
	Dataset.Close();
	grdData.DatasetLink = System.EmptyValue;
	PrepareCheckerboard(Dataset, SectionID, GroupID, BuildingID, IsExtended);
	grdData.DatasetLink = DatasetLink;	
	grdData.IsMultiLineData = true;
	wndCheckerboard.Window.EndUpdate();	
 
}
 
function RefreshObjects() {
	RefreshWorkspace();
}	
 
function InitializeObjectsGroupsDetail() {
	ObjectsWorkspace.ObjectsGroupsWindow = wndGroupsDetail.Window;
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow, 'DatasetUSI', 
		'ds_ObjectsInGroup');
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow,
		'SelectDataTableUSI', 'tbl_ObjectsGroup');	
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow,
		'ParentItemFieldName', 'ObjectsID');
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow,
		'ItemTypeName', "Объекты");
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow, 'MemoryDatasetUSI', 
		'mds_GroupsDetail'); 
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow,
		'WorkspaceGridDataset', BaseWorkspace.GridDataset);
	ObjectsWorkspace.ObjectsGroupsWindow.Prepare();
	var DatasetLink = ObjectsWorkspace.
		ObjectsGroupsWindow.ComponentsByName('dlData');
	ObjectsWorkspace.ObjectsGroupsDataset = DatasetLink.Dataset;		
}
 
function RefreshObjectsGroupsDetail() {
	if (ObjectsWorkspace.InitializeObjectsGroupsFlag != true) {
		InitializeObjectsGroupsDetail();                           
		ObjectsWorkspace.InitializeObjectsGroupsFlag = true;
	}
	var ObjectsID = dlObjects.Dataset.ValAsGUID('ID');
	SetAttribute(ObjectsWorkspace.ObjectsGroupsWindow, 'ParentItemID', 
		ObjectsID);
	RefreshDataset(ObjectsWorkspace.ObjectsGroupsDataset);	
}	
 
//%Init and Refresh Detail Functions% (Workspace Wizard Bookmark)
 
function RefreshDetails(ParentItemID) {
	if (!scr_BaseWorkspace.RefreshDetails()) {
		return;
	}
	if (pcDetails.ActivePage.Name == pgGroupsDetail.Name) {
		RefreshObjectsGroupsDetail();
	}
 
	else if (pcDetails.ActivePage.Name == pgAccessDetail.Name) {
		RefreshAccessDetail(BaseWorkspace, wndAccessDetail, 'tbl_ObjectsRight');
	}
	/*else if (pcDetails.ActivePage.Name == pgReservationDetail.Name) {
		RefreshCommonDetail(BaseWorkspace, wndReservationDetail, 'ObjectsID', 'ObjectsID', 
			null, null, null, null, null, ParentItemID);
	}*/
	else if (pcDetails.ActivePage.Name == pgObjectHistoryDetail.Name) {
		RefreshCommonDetail(BaseWorkspace, wndObjectHistoryDetail, 'ObjectsID', 'ObjectsID',
			null, null, null, null, null, ParentItemID);
	}
	else if (pcDetails.ActivePage.Name == pgTasksDetail.Name) {
		RefreshCommonDetail(BaseWorkspace, wndTasksDetail, 'ObjectID', 'ObjectID',
			null, null, null, null, null, ParentItemID);
	}	
	else if (pcDetails.ActivePage.Name == pgContractDetail.Name) {
 
		RefreshCommonDetail(BaseWorkspace, wndContractDetail, 'ObjectID', 'ObjectID',
			null, null, null, null, null, ParentItemID);
	}	
	else if (pcDetails.ActivePage.Name == pgDocumentDetail.Name) {
		SetAttribute(wndDocumentDetail.Window, 'HideButtonsFrame', true);
		RefreshCommonDetail(BaseWorkspace, wndDocumentDetail, 'ObjectID', 'ObjectID',
			null, null, null, null, null, ParentItemID);
	}	
	else if (pcDetails.ActivePage.Name == pgPriceHistoryDetail.Name) {
		SetAttribute(wndPriceHistoryDetail.Window, 'HideButtonsFrame', true);
		RefreshCommonDetail(BaseWorkspace, wndPriceHistoryDetail, 'ObjectsID', 'ObjectsID',
			null, null, null, null, null, ParentItemID);
	}
	else if (pcDetails.ActivePage.Name == pgFilesDetail.Name) {
		RefreshFilesDetail(BaseWorkspace, wndFilesDetail, 'ObjectID',
			'tbl_FileInObject', 'iq_FileInObject', "объекта", ParentItemID);
	} 
	else
	if (pcDetails.ActivePage.Name == pgDeficit.Name) {
		RefreshCommonDetail(BaseWorkspace, wndDeficit, 'ObjectID', 'ObjectID', null, 'wnd_DeficitEdit');
	} else
	if (pcDetails.ActivePage.Name == pgInvoiceDetail.Name) {
		RefreshCommonDetail(BaseWorkspace, wndInvoiceDetail, 
			'ObjectID', 'ObjectID');
	} else
	if (pcDetails.ActivePage.Name == pgLayout.Name) {
		RefreshLayoutDetail();			
	} else
	if (pcDetails.ActivePage.Name == pgObjectLogPrice.Name) {
		SetAttribute(wndObjectLogPrice.Window, 'HideButtonsFrame', true);
		RefreshCommonDetail(BaseWorkspace, wndObjectLogPrice, 
			'ObjectID', 'ObjectID');
	}
	//%Refresh Details BookMark% (Workspace Wizard Bookmark)
	else
	if (pcDetails.ActivePage.Name == pgHistoryUDDU.Name) {
		RefreshCommonDetail('', wndHistoryUDDU, 
		'BuildingID', 'BuildingID', 'ds_DatePlanCompletedUDDULog', 'wnd_BuildingEdit',
		null, true, false, GetFieldValueFromDisabledField(BaseWorkspace.GridDataset, 'BuildingID'));
	}
	else if (pcDetails.ActivePage.Name == pgHistoryPDKP.Name) {
		RefreshCommonDetail('', wndHistoryPDKP, 
		'BuildingID', 'BuildingID', 'ds_DatePlanCompletedPDKPLog', 'wnd_BuildingEdit',
		null, true, false, GetFieldValueFromDisabledField(BaseWorkspace.GridDataset, 'BuildingID'));
	} else
	if (pcDetails.ActivePage.Name == pgChangeLogContract.Name) {
		RefreshChangeLogContract();
	} else if (pcDetails.ActivePage.Name == pgPaymentNotTied.Name) {
		RefreshCommonDetail(BaseWorkspace, wndPaymentNotTied,'ObjectID', 'NotTiedObjectID');
	}
}
 
function PrepareChangeLogContract() {
return;
	if (!System.GetHasLicense('DatabaseLog')) {
	    ObjectsWorkspace.ShowChangesLogContractDetail = false;
	} else {
		ObjectsWorkspace.ContractLogTable = BaseWorkspace.GridDataset.
			DataFields('ContractID').LookupDataset.SelectQuery.Items(0).FromTable;
		ObjectsWorkspace.ShowChangesLogContractDetail = ObjectsWorkspace.GridTable.IsTrackChanges;
 
	}
	pgChangeLogContract.IsAccessible = ObjectsWorkspace.ShowChangesLogContractDetail;
    if (ObjectsWorkspace.ShowChangesLogContractDetail) {
    	pgChangeLogContract.IsVisible = true;
	} else {
        return;
	} 
	ObjectsWorkspace.ChangeLogContractWindow = wndChangeLogContract.Window;
	if (!ParentItemIDName) {
		ObjectsWorkspace.ParentItemIDName = 'ContractID';
	} else {
		ObjectsWorkspace.ParentItemIDName = ParentItemIDName;
	}
	ObjectsWorkspace.InitializeChangesLogFlag = false;
}
 
function RefreshChangeLogContract() {
return;
    var ChangesLogWindow = ObjectsWorkspace.ChangeLogContractWindow;
	var ParentItemID = null;
	if (ObjectsWorkspace.GridDataset.IsActive) {
		ParentItemID = ObjectsWorkspace.GridDataset.
			ValAsGUID(ObjectsWorkspace.ParentItemIDName);
	}
 	if (ObjectsWorkspace.InitializeChangesLogFlag != true) {
		var IsBuildChangesLogWindow = BuildChangesLogWindow(
			ObjectsWorkspace.GridTable, ObjectsWorkspace.GridDataset, 
			'COntractID', ParentItemID, ChangesLogWindow);
		if (!IsBuildChangesLogWindow) {
			BaseWorkspace.ShowChangesLogDetail = false;
			Log.Write(2, "Ошибка при попытке показать журнал изменений");
		}
		ObjectsWorkspace.InitializeChangesLogFlag = true;
	} else { 
		var ChangesLogDataset = 
			ObjectsWorkspace.ChangeLogContractWindow.ComponentsByName('dlData').Dataset;
		RefreshDetailData(BaseWorkspace.GridDataset, 
			'ContractID', ChangesLogDataset, 'RecordID');
	}
	var btnOperations = ChangesLogWindow.ComponentsByName('btnOperations');
	btnOperations.IsEnabled = !IsEmptyGUID(ParentItemID);
}
 
function RefreshLayoutDetail() {
	if (ObjectsWorkspace.InitializeDescriptionFlag != true) {
		InitializeLayoutDetail();
		ObjectsWorkspace.InitializeDescriptionFlag = true;
	}
	var ObjectID = BaseWorkspace.GridDataset.ValAsGUID('ID');
	if (ObjectID == ObjectsWorkspace.LayoutOldObjectID) {
		return;
	} else {
		ObjectsWorkspace.LayoutOldObjectID = ObjectID;  
	}
	RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
		ObjectsWorkspace.LayoutDataset, 'ID');
}
 
function InitializeLayoutDetail() {
	ObjectsWorkspace.LayoutDataset = wndLayoutDetail.Window.
		ComponentsByName('dlData').Dataset;
}
 
function GetObjectIDFromWorkspace() {
	if (pcData.ActivePage.Name == 'pgGridData') {
		return dlObjects.Dataset.ValAsGUID('ID'); 
	}
	if (pcData.ActivePage.Name == 'pgCheckerboard') {
		var Column = wndCheckerboard.Window('grdData').SelectedColumn;
		if (IsEmptyValue(Column)) {
			return;
		}
		var Field = Column.DataField; 
		if (IsEmptyValue(Field)) {
			return;
		}
		if (IsEmptyValue(Field.Tag)) {
			return;
		}
		var FieldValue = dlCheckerboard.Dataset(Field.Tag); 
		var FieldInfo = ParseFieldValue(FieldValue);
		if (IsEmptyValue(FieldInfo)) {
			return;
		}
		return FieldInfo.ID;
	}
}
 
// ----------------------------------------------------------------------------
// Event handlers
// ----------------------------------------------------------------------------
 
function ReportMenuItemOnExecute(ActionMenuItem) {
    scr_BaseWorkspace.ReportMenuItemOnExecute(ActionMenuItem);
}
 
function wnd_ObjectsWorkspaceOnPrepare(Window) {
	Initialize();
	btnLegend.IsVisible = (pcData.ActivePage.Name == 'pgCheckerboard');
	UpdateControl();
	amiSetAccessToFlats.IsVisible = Connector.CurrentUser.IsAdmin;
	RecalcCheckerboard();
	amiReportSoldObjects.IsVisible = false;
}
 
function UpdateControl()	{
	var TypeID = edtType.Value;
	var IsObjectID = !!edtObject.Value;
	var IsBuildingID = !!edtBuilding.Value;
	var IsParking = (TypeID == objcttpParking);
	edtBuilding.IsEnabled = (IsObjectID);
	edtSection.IsEnabled = ((IsBuildingID) && (!IsParking));
	edtCompartment.IsEnabled = ((IsBuildingID) && (IsParking));
}
 
function dlGroupsOnDatasetAfterPositionChange(Dataset) {
	scr_BaseWorkspace.dlGroupsOnDatasetAfterPositionChange(Dataset);
	if (BaseWorkspace.GroupsWereInitialized){
		RefreshObjects();
	}
}
 
function dlObjectsOnDatasetAfterPositionChange(Dataset) {
	if (Dataset.Attributes('IsNew') != true) {
		RefreshDetails();
	}
	Dataset.Attributes('IsNew') = false;
	if (!ObjectsWorkspace.NotRefreshFilters) {
		//edtBuilding.Value = GetDatasetFieldValue(Dataset, 'BuildingID');
		//edtSection.Value = GetDatasetFieldValue(Dataset, 'SectionID'); 
	}
}
 
function pcDetailsOnChangeActivePage(Pages) {
	RefreshDetails(GetObjectIDFromWorkspace());
}
 
function dlObjectsOnDatasetRefreshRecord(Dataset, KeyValue, 
	AddNewRecordOnPage) {
	if (AddNewRecordOnPage) {
		AddItemInGroup(BaseWorkspace.GroupsDataset, 'ds_ObjectsInGroup',
			KeyValue, 'ObjectsID'); 
		RefreshDetails();
	}
}
 
function dlGroupsOnDatasetRefreshRecord(Dataset, KeyValue, AddNewRecordOnPage) {
	scr_BaseWorkspace.dlGroupsOnDatasetRefreshRecord(Dataset, KeyValue,
		AddNewRecordOnPage);
	RefreshObjects();
}
 
function wnd_ObjectsWorkspaceOnNotify(ScriptableService, Sender, Message, Data) {
	if ((Message == MSG_GROUPSCHANGED) && 
		(pcDetails.ActivePage.Name == pgGroupsDetail.Name)) {
			RefreshObjectsGroupsDetail();
		return;
	}
	if (Message == 'REFRESH_CHECKERBOARD') {
		RefreshDetails(Data);
		return;
	}
	/* MODULE WORKFLOW */
	if ((Message == 'MSG_OK') && (Sender.Tag == 'StartWorkflow')) {
		var WorkflowID = Sender.Attributes('KeyValue');
		var ParamNames = new Array();
		var ParamValues = new Array();
		ParamNames.push('ObjectID');
		ParamValues.push(ObjectsWorkspace.ObjectID);
		ObjectsWorkspace.ObjectID = null;
		WFStartByID(WorkflowID, ParamNames, ParamValues);
		return;
	}
	/* ENDMODULE WORKFLOW */
 
	scr_BaseWorkspace.wnd_BaseWorkspaceOnNotify(
		ScriptableService, Sender, Message, Data);	
}
 
function dlObjectsOnDatasetBeforeOpen(Dataset) {
	var IsInSingleRowMode = GetIsInSingleRowMode();
	if (IsInSingleRowMode != true) {	
		ApplyStandardWorkspaceFilter();		
		var ObjectID = edtObject.Value;
		var BuildingID = edtBuilding.Value;
		var SectionID = edtSection.Value;
		ApplyDatasetFilter(Dataset, 'ObjectID', ObjectID, !IsEmptyValue(ObjectID));
		ApplyDatasetFilter(Dataset, 'BuildingID', BuildingID, !IsEmptyValue(BuildingID));
		ApplyDatasetFilter(Dataset, 'SectionID', SectionID, !IsEmptyValue(SectionID));
        ApplyDatasetFilter(Dataset, 'ObjectTypeID', edtType.Value, !IsEmptyValue(edtType.Value));
        ApplyDatasetFilter(Dataset, 'CompartmentID', edtCompartment.Value, !IsEmptyValue(edtCompartment.Value));
        ApplyDatasetFilter(Dataset, 'Name', edtName.Value, !IsEmptyValue(edtName.Value));
        ApplyDatasetFilter(Dataset, 'StateID', edtStatus.Value, !IsEmptyValue(edtStatus.Value));
        ApplyDatasetFilter(Dataset, 'ReservationID', edtReservation.Value, !IsEmptyValue(edtReservation.Value));
        var ExistContract = edtExistContract.Value;
        if(ExistContract)	{
        	var Group = GetDatasetFieldValuesByID('ds_ContractGroup',ExistContract,'IsFiltered','FilterData');
        	var Filter = Dataset.SelectQuery.Items(0).Filters.Items(0)('ExistContractFilter');
        	var Query = Filter.TestExpression.ExpressionSelectQuery;
        	Filter.IsEnabled = true;
        	if(Group('IsFiltered'))	{   		
        		var IDs = GetFilterBuider(ExistContract,dlContractGroup.Dataset);
				ApplySelectQueryIncludeFilter(Query,'ContractIDs',IDs,true,null,Dataset.SelectQuery.Parameters);
				EnableSelectQueryFilters(Query, IDs.length==0, ['GroupID']);	
        	}	else	{
        	    EnableSelectQueryFilters(Query, false, ['ContractIDs']);
        	    EnableSelectQueryFilters(Query, true, ['GroupID']);
        	}
        	SetParameterValue(Dataset.SelectQuery.Parameters,'ExistContractFilter',ExistContract);
        }
        var NotExistsContract = edtNotExistsContract.Value;
        if(NotExistsContract)	{
        	var Group = GetDatasetFieldValuesByID('ds_ContractGroup',NotExistsContract,'IsFiltered','FilterData');
        	var Filter = Dataset.SelectQuery.Items(0).Filters.Items(0)('NotExistContractFilter');
        	var Query = Filter.TestExpression.ExpressionSelectQuery;
        	Filter.IsEnabled = true;
        	if(Group('IsFiltered'))	{   		
        		var IDs = GetFilterBuider(ExistContract,dlContractGroup2.Dataset);
				ApplySelectQueryIncludeFilter(Query,'ContractIDs',IDs,true,null,Dataset.SelectQuery.Parameters);
				EnableSelectQueryFilters(Query, IDs.length==0, ['GroupID']);	
        	}	else	{
        		ApplySelectQueryFilter(Query,'GroupID',ExistContract,true);
        	    EnableSelectQueryFilters(Query, true, ['GroupID']);
        	}
        	SetParameterValue(Dataset.SelectQuery.Parameters,'ExistContractFilter',NotExistsContract);
        }
		var CheckerboardFilters = GetCheckerboardFilters();
		if (CheckerboardFilters) {
		    ApplyDatasetFilter(Dataset, 'FloorFrom', CheckerboardFilters.FloorFrom, !IsZeroValue(CheckerboardFilters.FloorFrom));
		    ApplyDatasetFilter(Dataset, 'FloorTo', CheckerboardFilters.FloorTo, !IsZeroValue(CheckerboardFilters.FloorTo));
		    ApplyDatasetFilter(Dataset, 'BasicAmountFrom', CheckerboardFilters.BasicAmountFrom, !IsZeroValue(CheckerboardFilters.BasicAmountFrom));
		    ApplyDatasetFilter(Dataset, 'BasicAmountTo', CheckerboardFilters.BasicAmountTo, !IsZeroValue(CheckerboardFilters.BasicAmountTo));
		    ApplyDatasetFilter(Dataset, 'RoomsFrom', CheckerboardFilters.RoomsFrom, !IsZeroValue(CheckerboardFilters.RoomsFrom));
		    ApplyDatasetFilter(Dataset, 'RoomsTo', CheckerboardFilters.RoomsTo, !IsZeroValue(CheckerboardFilters.RoomsTo));
		} else {
			EnableDatasetFilters(Dataset, false, 'FloorFrom', 'FloorTo', 
				'BasicAmountFrom', 'BasicAmountTo', 'RoomsFrom', 'RoomsTo');
		}
	}
}
 
function GetFilterBuider(GroupID,FilterDataset)	{
	var dsContract = dlContractFilter.Dataset;
	if(!ObjectsWorkspace.ContractBuilder)	{
		ObjectsWorkspace.ContractBuilder = System.CreateObject('TSObjectLibrary.FiltersBuilder');
		ObjectsWorkspace.ContractBuilder.Dataset = dsContract;	
	}
	var Filter = ObjectsWorkspace.ContractBuilder;
	Filter.FilterDataset = FilterDataset;
	Filter.FilterDataFieldName = 'FilterData';		
	Filter.UseDummyFilter = true;
	Filter.Load();
	Filter.ApplyFilter();
	RefreshDataset(dsContract);
	var IDs = new Array();
	for(;!dsContract.IsEOF;dsContract.GoToNext())	{
		IDs.push(dsContract('ID'));	
	}	
	dsContract.Close();
	return IDs; 	 	
}
 
function edtSectionOnPrepareSelectWindow(LookupControl, SelectWindow) {
	var Dataset = LookupControl.LookupDatasetLink.Dataset;
	var BuildingID = edtBuilding.Value;
	ApplyDatasetFilter(Dataset, 'BuildingID', BuildingID, true);
}
 
function edtSectionOnChange(LookupControl) {
	if (ObjectsWorkspace.DisableSectionControl) {
		return;
	}
	if (!IsEmptyValue(LookupControl.Value))	{
		edtBuilding.Value = GetDatasetFieldValueByID('ds_Section', LookupControl.Value, 
					'BuildingID');
		edtCompartment.Value = null;
	}
	RecalcCheckerboard();
	RebuildCheckboard();
	edtCompartment.UnPrepareDropDownList();
	//btnApplyFilterOnClick(LookupControl);	
}
 
function RecalcCheckerboard() {
	if (IsEmptyValue(edtBuilding.Value) && (pcData.ActivePage.Name == pgCheckerboard.Name)) {
		wndCheckerboard.Window('dlData').Dataset.Close();
		btnApplyFilter.IsEnabled = false;
	} else {
		btnApplyFilter.IsEnabled = true;		
	}
}
 
function btnApplyFilterOnClick(Control) {
	var SectionID = edtSection.Value;
	var BuildingID = edtBuilding.Value;
	var GroupID = GetSelectedGroupID();
	ObjectsWorkspace.NotRefreshFilters = true;
	RefreshObjects();
	if (!IsEmptyValue(SectionID) || !IsEmptyValue(BuildingID)) {
		InitializeCheckerboard(BuildingID, SectionID);
	}
	var IsExtended = chbIsExtended.IsChecked;
 
	var CheckerboardFilters = GetCheckerboardFilters();
	wndCheckerboard.Window.Attributes('CheckerboardFilters') = CheckerboardFilters;	
	wndCheckerboard.Window.Attributes('ObjectsFilteredIDs') =  GetObjectsFilteredIDs(CheckerboardFilters)
	if (!IsEmptyValue(BuildingID)) {
		InitializeCheckerboard(BuildingID, SectionID, GroupID, IsExtended);
	}	 	
	ObjectsWorkspace.NotRefreshFilters = null;
}
 
function edtBuildingOnChange(LookupControl) {
	ObjectsWorkspace.DisableSectionControl = true;
	if (edtObject.Value == null) {
		var BuildingID = edtBuilding.Value;
		if (BuildingID != null) {
			edtObject.Value = GetDatasetFieldValueByID('ds_Building', BuildingID, 'ObjectID')
		}
	}
	edtSection.Value = null;
	ObjectsWorkspace.DisableSectionControl = false;
	edtSection.UnPrepareDropDownList();
	edtCompartment.UnPrepareDropDownList();
	RecalcCheckerboard();
	RebuildCheckboard();
	//btnApplyFilterOnClick(LookupControl);
	UpdateControl();
}
 
function amiCreateContractOnExecute(ActionMenuItem, Sender) {
	var ObjectID = GetObjectIDFromWorkspace();
	if (IsEmptyValue(ObjectID)) {
		ShowInformationDialog('Объект не выбран!');
		return;
	}
	var Result = GetDatasetFieldValuesByID('ds_Objects', ObjectID, 
		'AccountID', 'Amount', 'BuilderID', 'ContactID', 
		'InventoryPrice', 'ObjectTypeID');
	var Dataset = GetSingleItemByCode('ds_Contract', 'amiCreateContractOnExecute');
	Dataset.Append();
	var ContractID = Connector.GenGUID();
	Dataset('ID') = ContractID;
	Dataset('OwnerID') = Connector.CurrentUser.ContactID;
	Dataset('StartDate') = GetLocalDate();
  	Dataset('DueDate') = GetLocalDate();
	Dataset('CustomerID') = Result('AccountID');
	if (Result('ObjectTypeID') == cntOTFlat) {
		Dataset('AmountWoNDS') = Result('Amount');
	}
	Dataset('BuilderID') = Result('BuilderID');
	Dataset('ContactID') = Result('ContactID');
	Dataset('ObjectID') = ObjectID;
	Dataset('Amount') = Result('Amount');
	Dataset.Post();
	Dataset.Close();
	if (mrYes == ShowConfirmationDialog("Перейти к созданной записи?")) {
		GotoWorkspace('wnd_ContractsWorkspace', ContractID)
	};
}
 
function amiChangePriceByMeterOnExecute(ActionMenuItem, Sender) {
	var Win = Services.GetNewItemByUSI('wnd_ChangePriceByMeter');
	Win.IsDesigning = false;
	Win.Prepare();
	Win.Show();
}
 
function btnLegendOnClick(Control) {
	var wnd = Services.GetNewItemByUSI('wnd_CheckerboardColorGridArea');
	wnd.Attributes('IsWorkspace') = true;
	wnd.Attributes('HideButtonsFrame') = true;
	wnd.Prepare();
	wnd.Show();
}
 
function pcDataOnChangedActivePage(Pages) {
	scr_BaseWorkspace.pcDataOnChangedActivePage(Pages);
	btnLegend.IsVisible = (Pages.ActivePage.Name == 'pgCheckerboard');
	RebuildCheckboard();
}
 
function pcDataOnChangeActivePage(Pages) {
	RecalcCheckerboard();
}
 
function amiSetAccessToFlatsOnExecute(ActionMenuItem, Sender) {
	var Attr = GetNewDictionary();
	Attr('BuildingID') = edtBuilding.Value;
	Attr('SectionID') = edtSection.Value;
	ShowEditWindowEx('wnd_SetAccessToFlats', Attr);
}
 
function amiReportSoldObjectsOnExecute(ActionMenuItem, Sender) {
	var HasRights = GetIsCurrentUserHas(auTopManagers) ||
		GetIsCurrentUserHas(auProjectManager) ||
		GetIsCurrentUserHas(auDOManager) ||
		GetIsCurrentUserHas(auCRMCoord) ||
		GetIsCurrentUserHas(auCentralOffice);
	if (!HasRights) {
		ShowWarningDialog("У Вас недостаточно прав для запуска отчета");
		return;
	}
	ShowEditWindowEx('wnd_ReportSoldProjects');
}
 
function amiRunWorkflowOnExecute(ActionMenuItem, Sender) {
	var WindowCaption = "Процессы";
	ObjectsWorkspace.ObjectID = dlObjects.Dataset.ValAsGUID('ID');
	SelectServiceByCode('WorkflowDiagram', false, Self, 'StartWorkflow', 
		WindowCaption);
}
 
function edtBuildingOnPrepareSelectWindow(LookupControl, SelectWindow) {
	var Dataset = LookupControl.LookupDatasetLink.Dataset;
	var ObjectID = edtObject.Value;
	ApplyDatasetFilter(Dataset, 'ObjectID', ObjectID, true);	
}
 
function edtProjectOnChange(LookupControl) {
	edtBuilding.Value = null;
}
 
function GetSelectedGroupID() {
    var GroupsWindow = wndGroups.Window;
    var GroupsDataset = GroupsWindow.ComponentsByName('dlData').Dataset;
    var SelectedGroupID  = GroupsDataset.Values('ID');
	return SelectedGroupID;
}
 
function GetObjectsInGroupIDs() {
	var GroupID = GetSelectedGroupID();
	var SectionID = edtSection.Value;
	var BuildingID = edtBuilding.Value;
	var ObjectsInGroupIDs = GetNewDictionary();	
    var Dataset = GetSingleItemByCode('ds_Objects','GetObjectsInGroupIDs');
    ApplyDatasetFilter(Dataset, 'SectionID', SectionID, !IsEmptyValue(SectionID));
    ApplyDatasetFilter(Dataset, 'BuildingID', BuildingID, !IsEmptyValue(BuildingID));
 
 	if (IsEmptyValue(GroupID)) {
		return ObjectsInGroupIDs;
	}
	var GroupDataset = GetGroupObjectsDataset(GroupID);
	var IsFiltered = !!GroupDataset('IsFiltered');
	var ParentGroupID = GroupDataset('IsFiltered');
	if (IsEmptyValue(ParentGroupID)) {
		ObjectsInGroupIDs;
	}   
 
    ApplyDatasetFilter(Dataset, 'GroupID', GroupID, !IsFiltered);
 
	var FilterBuilder = GetObjectsFilterBilder(Dataset);		    
	if (IsFiltered) {
		//динамика
 
		if (!Assigned(FilterBuilder.FilterDataset)) {
			FilterBuilder.FilterDataset = GroupDataset;
		}
		FilterBuilder.Load();
		FilterBuilder.ApplyFilter();
	} else { //статика
		FilterBuilder.ClearFilter();			
	}   
 		Dataset.Open();
		try {
			if (IsDatasetEmpty(Dataset)) {
				return ObjectsInGroupIDs;
			}
			while (!Dataset.IsEOF) {
				ObjectsInGroupIDs(Dataset('ID')) = true;
				Dataset.GotoNext();
			}		
		} finally {
			Dataset.Close();
		}
		return ObjectsInGroupIDs;   
}
 
function GetCheckerboardFilters() {
	var CheckerboardFilters = new Object();	
	CheckerboardFilters.FloorFrom = edtFloorFrom.Value;
	CheckerboardFilters.FloorTo = edtFloorTo.Value;
	CheckerboardFilters.BasicAmountFrom = edtBasicAmountFrom.Value;
	CheckerboardFilters.BasicAmountTo = edtBasicAmountTo.Value;
	CheckerboardFilters.RoomsFrom = edtRoomsFrom.Value;
	CheckerboardFilters.RoomsTo = edtRoomsTo.Value;
	if (IsZeroValue(CheckerboardFilters.FloorFrom) &&
		IsZeroValue(CheckerboardFilters.FloorTo) &&
		IsZeroValue(CheckerboardFilters.BasicAmountFrom) &&
		IsZeroValue(CheckerboardFilters.BasicAmountTo) &&
		IsZeroValue(CheckerboardFilters.RoomsFrom) &&
		IsZeroValue(CheckerboardFilters.RoomsTo)) {
    	return null;
	}
	return CheckerboardFilters; 
}
 
function GetObjectsFilteredIDs(CheckerboardFilters) {	
	var GroupID = GetSelectedGroupID();
	var SectionID = edtSection.Value;
	var BuildingID = edtBuilding.Value;	
	var ObjectsFilteredIDs = GetNewDictionary();
	if (IsEmptyValue(CheckerboardFilters)) {
		return ObjectsFilteredIDs;
	}	
    var Dataset = GetSingleItemByCode('ds_Objects','GetObjectsFilteredIDs');
    ApplyDatasetFilter(Dataset, 'SectionID', SectionID, !IsEmptyValue(SectionID));
    ApplyDatasetFilter(Dataset, 'BuildingID', BuildingID, !IsEmptyValue(BuildingID));
    ApplyDatasetFilter(Dataset, 'FloorFrom', CheckerboardFilters.FloorFrom, !IsZeroValue(CheckerboardFilters.FloorFrom));   
    ApplyDatasetFilter(Dataset, 'FloorTo', CheckerboardFilters.FloorTo, !IsZeroValue(CheckerboardFilters.FloorTo));   
    ApplyDatasetFilter(Dataset, 'BasicAmountFrom', CheckerboardFilters.BasicAmountFrom, !IsZeroValue(CheckerboardFilters.BasicAmountFrom));   
    ApplyDatasetFilter(Dataset, 'BasicAmountTo', CheckerboardFilters.BasicAmountTo, !IsZeroValue(CheckerboardFilters.BasicAmountTo));   
    ApplyDatasetFilter(Dataset, 'RoomsFrom', CheckerboardFilters.RoomsFrom, !IsZeroValue(CheckerboardFilters.RoomsFrom));   
    ApplyDatasetFilter(Dataset, 'RoomsTo', CheckerboardFilters.RoomsTo, !IsZeroValue(CheckerboardFilters.RoomsTo));   
	Dataset.Open();
	try {
		if (IsDatasetEmpty(Dataset)) {
			return ObjectsFilteredIDs;
		}
		while (!Dataset.IsEOF) {
			ObjectsFilteredIDs(Dataset('ID')) = true;
			Dataset.GotoNext();
		}		
	} finally {
		Dataset.Close();
	}
	return ObjectsFilteredIDs;    
}
 
function amiSummaryReportOnExecute(ActionMenuItem, Sender) {
	var wnd = Services.GetNewItemByUSI('wnd_SummaryReportFilter');
	wnd.Prepare();
	wnd.Show();
}
 
function amiNewFormOnExecute(ActionMenuItem, Sender) {
	var wnd = Services.GetNewItemByUSI('wnd_SummaryReportFilter2');
	wnd.Prepare();
	wnd.Show();
}
 
function amiSalePlanOnExecute(ActionMenuItem, Sender) {	
	wnd = Services.GetNewItemByUSI('wnd_SalesPlan');
	wnd.Attributes('fnFiles') = fnFiles;
	wnd.Show();
}
 
function amiPlanExecutionOnExecute(ActionMenuItem, Sender) {
	wnd = Services.GetNewItemByUSI('wnd_PlanExecution');
	wnd.Show();
}
 
function amiLoadSalesPlanOnExecute(ActionMenuItem, Sender) {
	LoadSalesPlan();
}
 
function fnFilesOnFileChange(FileChangeNotifier, FileName, FileID) {
	LoadSalesPlan(FileName);
}
 
function amiExportOnExecute(ActionMenuItem, Sender) {
	var wnd = Services.GetNewItemByUSI('wnd_ObjectsExportGridArea');
	SetAttribute(wnd,'Export',true);
	wnd.Prepare();
	wnd.Show();
}
 
function RebuildCheckboard()	{
	if(pcData.ActivePage.Name == 'pgCheckerboard')	{
		wndCheckerboard.Window.Notify(Self,'Rebuild_Checkboard',edtSection.Value);
	}
}
 
function edtObjectOnChange(LookupControl) {
	edtBuilding.UnprepareDropDownList();
	edtBuilding.DisableEvents();
	edtSection.DisableEvents();
	edtBuilding.Value = null;
	edtSection.Value = null;
	edtSection.EnableEvents();
	edtBuilding.EnableEvents();
	UpdateControl();
	RebuildCheckboard();
}
 
function edtCompartmentOnPrepareSelectWindow(LookupControl, SelectWindow) {
	var Dataset = LookupControl.LookupDatasetLink.Dataset;
	var BuildingID = edtBuilding.Value;
	var ObjectID = edtObject.Value;
	ApplyDatasetFilter(Dataset, 'BuildingID', BuildingID, !!BuildingID);
	ApplyDatasetFilter(Dataset, 'ObjectID', ObjectID, !!ObjectID);	
}
 
function edtCompartmentOnChange(LookupControl) {
	edtObject.UnPrepareDropDownList();
	edtSection.UnPrepareDropDownList();
	if(edtCompartment.Value)	{
		Compartment = GetDatasetFieldValuesByID('ds_Compartment',edtCompartment.Value,'ObjectID','BuildingID');
		if(edtBuilding.Value!=Compartment('BuildingID')) edtBuilding.Value = Compartment('BuildingID');
		if(edtObject.Value!=Compartment('ObjectID')) edtObject.Value = Compartment('ObjectID');
		edtSection.Value = null;
	}
}
 
function edtTypeOnChange(LookupControl) {
	UpdateControl();
}
 
function btnClearFilterOnClick(Control) {
	edtObject.Value = null;
	edtBuilding.Value = null;
	edtSection.Value = null;
	edtCompartment.Value = null;
	edtName.Value = '';
	edtFloorFrom.Value = 0;
	edtFloorTo.Value = 0;
	edtBasicAmountFrom.Value = 0;
	edtBasicAmountTo.Value = 0;
	edtRoomsFrom.Value = 0;
	edtRoomsTo.Value = 0;
	RefreshObjects();
}
 
function amiSalesPalnOnExecute(ActionMenuItem, Sender) {
	var wnd = Services.GetNewItemByUSI('wnd_SalesReport');
	wnd.Show();//TODO
}

например в этот кусок:

function GetObjectsFilteredIDs(CheckerboardFilters) {   
        var GroupID = GetSelectedGroupID();
        var SectionID = edtSection.Value;
        var BuildingID = edtBuilding.Value;     
        var ObjectsFilteredIDs = GetNewDictionary();
        if (IsEmptyValue(CheckerboardFilters)) {
                return ObjectsFilteredIDs;
        }       
    var Dataset = GetSingleItemByCode('ds_Objects','GetObjectsFilteredIDs');
    ApplyDatasetFilter(Dataset, 'SectionID', SectionID, !IsEmptyValue(SectionID));
    ApplyDatasetFilter(Dataset, 'BuildingID', BuildingID, !IsEmptyValue(BuildingID));
    ApplyDatasetFilter(Dataset, 'FloorFrom', CheckerboardFilters.FloorFrom, !IsZeroValue(CheckerboardFilters.FloorFrom));   
    ApplyDatasetFilter(Dataset, 'FloorTo', CheckerboardFilters.FloorTo, !IsZeroValue(CheckerboardFilters.FloorTo));   
    ApplyDatasetFilter(Dataset, 'BasicAmountFrom', CheckerboardFilters.BasicAmountFrom, !IsZeroValue(CheckerboardFilters.BasicAmountFrom));   
    ApplyDatasetFilter(Dataset, 'BasicAmountTo', CheckerboardFilters.BasicAmountTo, !IsZeroValue(CheckerboardFilters.BasicAmountTo));   
    ApplyDatasetFilter(Dataset, 'RoomsFrom', CheckerboardFilters.RoomsFrom, !IsZeroValue(CheckerboardFilters.RoomsFrom));   
    ApplyDatasetFilter(Dataset, 'RoomsTo', CheckerboardFilters.RoomsTo, !IsZeroValue(CheckerboardFilters.RoomsTo));   
        Dataset.Open();
        try {
                if (IsDatasetEmpty(Dataset)) {
                        return ObjectsFilteredIDs;
                }
                while (!Dataset.IsEOF) {
                        ObjectsFilteredIDs(Dataset('ID')) = true;
                        Dataset.GotoNext();
                }               
        } finally {
                Dataset.Close();
        }
        return ObjectsFilteredIDs;    
}

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

Если у Вас возникают затруднения при самостоятельной разработке, Вы можете сформулировать свои требования и заказать услугу доработок у Terrasoft или у одного из их партнёров.

Спасибо, все получилось.
Вопрос по отчетам можно задавать здесь, или необходимо создать лучше новую тему?

Добрый день!

По каждому вопросу необходимо создавать отдельную тему.

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

Стоит задача разделить документы на 2 раздела с разными типами. Есть ли возможность определять несколько разделов для одного объекта в mobile с некоторыми фильтрами или прийдется делать для это представление в базе данных bpm?

Нравится

1 комментарий

Да, вы правы, нельзя добавить на один объект 2 раздела. Предложенный вариант вполне жизненный – реализовать новое представление с фильтром.

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

Как программно управлять сворачиванием и разворачиванием групп полей и деталей? Например, при открытии карточки одну деталь всегда показывать развёрнутой, а другую свёрнутой? (Сейчас система запоминает последнее состояние и использует его для следующего показа)

Нравится

1 комментарий

Владимир, здравствуйте!

Согласно Вашей бизнес-задаче Вы можете переопределить функцию onDetailCollapsedChanged, которая отвечает за отображение детали:

/**
				 * Обрабатывает сворачивание или разворачивание детали.
				 * @protected
				 * @virtual
				 * @param {Boolean} isCollapsed Признак свернутости/развернутости детали.
				 */
				onDetailCollapsedChanged: function(isCollapsed) {
					var profile = this.getProfile();
					var key = this.getProfileKey();
					if (profile && key) {
						profile.isCollapsed = isCollapsed;
						this.Terrasoft.utils.saveUserProfile(key, profile, false);
					}
					this.set("IsDetailCollapsed", isCollapsed);
				},
Показать все комментарии

Снова здравствуйте,

BPM 7.5. Столкнулся с проблемой.
Есть сущность, в неё несколько табов (e.g. Tab1 и Tab2), в табах field groups. Tab1 - первый слева направо, т.е. открыт по умолчанию, и видны поля. Нужно добавить поле в Tab2, закрытый / неактивный по умолчанию. Но не просто добавить, и менять скрывать / снова показывать по условию. Я это делаю путём биндинга функции на свойство "visible" в размете. Еслие поле на карточке (не в табе) или в первом (открытом) то всё работает. Если же поле находится в Tab2, то при открытии сущности бросается исключение. Что делать? Какие обходные пути?

Пример функции:

getUsrAssignedRecVisible: function() {
        var department = this.get("UsrDepartmentUsr");
        return department && department.displayValue === "Engineering"
}

Пример разметки с биндингом:

{
        "operation": "insert",
        "name": "UsrAssignedRec",
        "values": {
                "layout": {
                        "column": 12,
                        "row": 0,
                        "colSpan": 12,
                        "rowSpan": 1
                },
                "bindTo": "UsrAssignedRec",
                "caption": {
                        "bindTo": "Resources.Strings.UsrAssignedRecCaption"
                },
                "textSize": 0,
                "contentType": 5,
                "labelConfig": {
                        "visible": true
                },
                "enabled": true,
                "visible": { "bindTo": "getUsrAssignedRecVisible" }
        },
        "parentName": "group_gridLayout",
        "propertyName": "items",
        "index": 10
},

Спасибо

Нравится

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

"trickbz" написал:Если же поле находится в Tab2, то при открытии сущности бросается исключение.

Какое именно исключение бросается?

удалено, хотя может и поздно) Это всего лишь пилот

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

Как можно программно узнать, в какие динамические и статические группы попадает запись?

Нравится

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

Со статикой просто - запрос к таблице например AccountInFolder.
С динамикой интереснее :) в 3.х когда-то давно писал код, чтобы вытаскивал принадлежность к динамическим группам - читал параметры фильтрации из таблицы групп, применял фильтры, получал выборку записей. В 5.х и 7.х такого делать не приходилось. Посему проголосую.

Действительно, для статических подойдет

"Александр Кудряшов" написал:запрос к таблице например AccountInFolder
, как ранее написал Александр.
Если речь идет и о динамических, то в данном случае обращаться следует к таблице [AccountFolder], если уже рассматривать на примере контрагентов.

Очевидно, условия фильтрации записаны в поле [SearchData].
Но как его расшифровать и применить к записи?

Здравствуйте, Владимир!

Расшифровать можете следующим образом:

select cast(searchdata as varchar(max)) from accountfolder where id= 'F4C0A351-4D37-4B00-AA40-87452566380F'

Ну а дальше писать собственный парсер.

"Безродный Андрей" написал:Ну а дальше писать собственный парсер.

Наверняка, bpm'online уже как-то парсит эти данные? Может, можно использовать имеющийся?

Владимир, нет такой возможности.
Данная реализация вшита в ядро.

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

Добрый день!

В карточке контрагента есть возможность задавать два поля:
"Статус контрагента" и "Категория"
(см. вложенный файл)

При этом в списке "все контрагенты" столбцом отображается только информация из поля "статус контрагента", поле "категория" не подтягивается.

Подскажите как это можно исправить (настроить).

Спасибо.

Нравится

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

А где вложенный файл?
Вытянуть колонку в реестр можно, нажав на кнопку [+] в правом верхнем углу реестра и выбрав нужную колонку.
Это только для текущего пользователя, если надо для всех — настраивается иначе.

Файл приложен.
Надо для всех пользователей.
Настраивается иначе - как именно?

спасибо!

Уточняю вопрос. смотрите скрин.

Примерно так:

  • Закрыть Terrasoft.
  • Запустить программу TSAdmin (Администратор Terrasoft).
  • Открыть в ней сервис wnd_AccountsGridArea (выбрать в дереве справа «Accounts\General\Main Grid\wnd_AccountsGridArea»). Откроется дизайнер окна реестра контрагентов.
  • В дизайнере в дереве слева выбрать элемент gvAll (все контрагенты). Нажать на нём правой кнопкой мыши и выбрать «Определить колонки». Откроется список колонок.
  • Найти колонку CategoryID (или как там она у Вас называется), поставить ей галочку возле названия и галочку «Видимая» внизу окошка.
  • Нажать «ОК», затем сохранить изменения в сервисе, нажав на иконку с дискетой.
  • Закрыть TSAdmin, открыть Terrasoft.
  • Александр, спасибо Вам больше. Все получилось!

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

    Добрый день!
    Подскажите, как включить журнал аудита в BPM 7.5

    Нравится

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

    Здравствуйте, Дарья!

    Для включения журнала аудита необходимо выполнить следующие три шага:

    1. Перевести значения параметров в "true" в теге конфигурационного файла web.config загрузчика (находится в корневой директории сайта):

    <operationLogger useAdminUserLog="true" useAdminUnitAdminLog="true" useAdminUserRoleLog="true" useAdminEntitySchemaLog="true" useAdminEntitySchemaOperationLog="true" useAdminEntitySchemaExternalServiceLog="true" useAdminEntitySchemaRecordDefRightLog="true" useAdminEntitySchemaColumnLog="true"  useAdminOperationLog="true" useAdminSettingsLog="true" useAdminOperationAuditLog="true" useAdminClientIPLog="true" useUserAuthorizationLog="true" useUserSessionLog="true" />

    2. Добавить в файл log4net.config (находится в папке Terrasoft.WebApp) следующие строчки настроек, если таковых нет:

    <log4net>
    	<-- другие настройки --->
    	<appender name="OperationLogAppender" type="Terrasoft.Core.OperationLog.OperationLogAppender" />
    	<logger name="OperationLogger">
    		<level value="INFO" />
    		<appender-ref ref="OperationLogAppender" />
    	</logger>
    </log4net>

    3. Перезапустить приложение

    Спасибо.
    Скажите, а эти шаги описаны вообще в какой-то инструкции (администратора, например)

    Дарья, Вы можете получить инструкцию по запросу в службу технической поддержки (support@terrasoft.ru).
    Дополнительно прикрепляю её к данному посту. audit_log_enable.doc

    Мне кажется, было бы удобнее, если бы она была где-то заранее описана и содержалась бы в каком-то документе, касающемся администрирования.
    А то приходится гадать, то ли я пропустила какую-то фразу в инструкциях и регламентах, и надо лучше смотреть, то ли это вообще нигде не описано, и надо отдельно запрашивать.

    Спасибо за инструкцию)

    Дарья, спасибо за пожелание!
    Полностью с Вами согласны, поэтому в версии 7.7 мы включим инструкцию в основную документацию.

    Хорошего Вам дня :)

    Добрый день. Скажите пож-та журнал изменений также активируется на 7,5? Или есть инструкция и по ней тоже?

    Добрый день, Марат.

    Ознакомиться с инструкцией по активации журнала изменений на 7.5 Вы можете по ссылке:

    http://academy.terrasoft.ru/documents/docs/product/bpm'online%20sales/enterprise/7.5.0/BPMonlineHelp/section_change_log/change_log.htm

    Здравствуйте!
    У меня sales ondemand Версия 7.8.0.3374
    Интересует вопрос о ток как посмотреть логи изменения контакта и возможно ли это?

    За контактом был закреплен один ответственный, но потом в БП его поменяли на другого (и автора тоже). Можна ли узнать кто бил ответственным и автором до изменений?

    Добрый день!

    Не отображаются изменения в окне Журнал аудита.
    Был создан новый пользователь системы, но в журнале это событие не отобразилось. Пишет "при установленном фильтре в разделе нет ни одной записи", хотя фильтр никакой не устанавливался. Используется Демо версия 7.9.0.1228
    Подскажите, в чем может быть проблема? Файлы конфигурации менял согласно приведенным выше инструкциям.

    Добрый день, Дмитрий.

    Для просмотра журнала аудита системных операций требуется доступ к системной операции [Просмотр раздела “Журнал аудита”], а для просмотра и выполнения архивации — [Управление разделом “Журнал аудита”]. Проверьте данные настройки.

    Более подробную информацию о работе с Журналом аудита вы можете найти по следующей ссылке: https://academy.terrasoft.ru/documents/service-enterprise/7-8/razdel-zh….

    Мария, спасибо за ответ. Доступ есть, но события не отображаются.

    Дмитрий, для более детального анализа проблемы обратитесь в Техническую поддержку Террасофт.

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

    Добрый день,
    Возможно кто-то решал такую задачу:
    Необходимо создать канал, в который собирались бы все комментарии из лент обращений.
    И больше ничего.

    Нравится

    1 комментарий

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

    Пользовательскими средствами данный функционал невозможно реализовать.
    Так как по сути лента каждой записи является отдельным каналом и нет возможности все комментарии передать в один канал.

    В разделе «Лента» отображается то, что непосредственно было опубликовано в данном разделе.

    Если Вы хотите видеть комментарии, то Вам необходимо подписаться на обновления ленты новой/существующей записи и в результате новые комментарии отобразятся на панели уведомлений.

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

    Каким образом можно загруженные данные подтянуть в модель карточки?
    Например в следующем коде данные подгружаются в одном из контроллеров, но установка их в loadedRecord не меняет состояние отображаемых значений в карточке. Также никаких изменений не просходит при обращении к модели одного из вложенных элементов во view.

    onLoadRecord: function(loadedRecord) {
                    this.callParent(arguments);
                    var store = Ext.create('Terrasoft.store.BaseStore', {
                        model: 'Account'
                    });
                    var queryConfig = Ext.create('Terrasoft.QueryConfig', {
                        columns: ['Name', 'Ownership', 'AccountCategory', 'TypeOfFacility'],
                        modelName: 'Account'
                    });
                    store.loadPage(1, {
                        queryConfig: queryConfig,
                        filters: Ext.create('Terrasoft.Filter', {
                            property: 'Id',
                            value: loadedRecord.data.Account.data.Id
                        }),
                        callback: function(records, operation, success) {
                            var record = records[0];
                            if (record) {
                                var name = record.get('Name');  
                                loadedRecord.set('OutletName', name);
                            }
                        },
                        scope: this
                    });

    Нравится

    1 комментарий