Добрый день, Сообщество!

Кто нибудь сталкивался с задачей отправки электронных счет фактур или актов в систему Диадок славной компании СБК Контур. Уже который месяц пытаюсь получить от них внятного и работающего примера, но вот никак. Есть пример, но он до конца не работает(

Нравится

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

Здравствуйте.
С системой Диадок не сталкивался, но на вскидку, можно попробовать записывать данные в их базу напрямую, например через шлюзовые таблицы или использовать что-то на подобие ADO-Connection.

В общем то там у них ActiveX библиотека, в которой реализована обертка над их Web API. Но примеров отправки готовых XML докуметов нету или я их не нашел, вот второй месяц поддержку мучаю, прислали скрипт, но он не работает.

Здравствуйте.
Повторю, что у нас прецедентов интеграции с такой системой не было, но, вероятно, Вам будет любопытно ознакомиться с: http://habrahabr.ru/company/skbkontur/blog/175871/

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

Добрый день!

в руководстве администратора http://www.training.terrasoft.ru/system/files/TS_AG_3.4.0.pdf
параграф 4.4. Настройка правил поиска дублей с.152
написано что для версий Террасофт 3.Х доступно окно настроек для правил поисков дублей [Правила поиска дублей]
у нас версия 3.4.1 но данной настройки у нас нет.
посмотрел среди сервисов через конфигуратор, там тоже нет ничего похожего.

подскажите пожалуйста в чем может быть проблема?

Нравится

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

Здравствуйте, Андрей!

В конфигураторе сервисы называются wnd_DuplicateSearchSettingsEdit (карточка) и wnd_DuplicateSearchSettingsGridArea (реестр).

Что касается запуска настроек поиска из пользовательской части, то запуск выполняется из настроек:

Настройки - > Правила поиска дублей.

Андрей, здравтсвуйте!

да? как раз так и написано в руководстве: Настройки - > Правила поиска дублей.

но у нас этого почему то нет,
и сервисов wnd_DuplicateSearchSettingsEdit wnd_DuplicateSearchSettingsGridArea в конфигураторе нет.

по вхождению Duplicate находятся только такие:

scr_DuplicatesUtils
scr_MergeDuplicates
scr_SubjectDuplicates
wnd_MergeDuplicates
wnd_SubjectDuplicates

они вроде используются в другом месте Файл -> Сервис -> Проверка дублей

?

Андрей, здравствуйте!

да иммено так напасано в Руководстве: Настройки - > Правила поиска дублей.

но у нас этого нет.

так же я не смог найти сервисы wnd_DuplicateSearchSettingsEdit и wnd_DuplicateSearchSettingsGridArea .

по вхождению Duplicate находятся только сервисы:

scr_SubjectDuplicates
scr_MergeDuplicates
scr_DuplicatesUtils
wnd_MergeDuplicates
wnd_SubjectDuplicates

Вот как выглядит меню настройки

Здравствуйте, Андрей!

Дело в том, что у Вас выполнялся так называемый лайт-переход с версии 3.3.2 на версию 3.4.1.

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

При этом конфигурационная часть, в частности, сервисы окна настроек поиска, хранимые процедуры - не переносились.

В этом, собственно, причина, почему настройка правил поиска дублей отсутствует.

понятно, спасибо!

а можно ли эти сервисы получить отдельно?
или где то найти?

Андрей,

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

Мы можем направить Вам дистрибутив версии 3.4.1, используя который Вы сможете попробовать самостоятельно перенести данный функционал.

Сообщите, пожалуйста, если это необходимо.
Если необходимо - просьба сообщить по адресу: support@terrasoft.ru

да, нам данный функционал был бы очень полезен!

Андрей, Вы напишите на support@terrasoft.ru ?

кстати в в вышеупомянутом руководстве http://www.training.terrasoft.ru/system/files/TS_AG_3.4.0.pdf
параграф 4.4. Настройка правил поиска дублей с.152
сказано

цитата :
<<
В Terrasoft 3.X реализована возможность поиска дублей по всем таблицам
конфигурации системы.
>>

неточность в руководстве?

да Андрей, я написал на support@terrasoft.ru

Андрей,

письмо получили, дистрибутив направим.

Что касается руководства, то упомянутая цитата касается версии 3.4.0 и выше.

Ответ службы поддержки:
В Terrasoft XRM + Service Desk версии 3.4.1 нет русского релиза

как быть?

Андрей,

мы направили Вам демо-версию Terrasoft XRM версии 3.4.1.

В ней реализован функционал настройки поиска дублей - Вы можете использовать ее в качестве примера.

Да, сборку получили, спасибо!
Там есть запароленные архивы. не подскажете пароль?

Андрей,

направили линк повторно и указали пароль.

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

Добрый день! В нашей компании встал вопрос с быстродействием системы. В частности менеджеры в региональных офисах стали жаловаться на долгое открытие разделов и карточек в системе. Для эксперимента были сняты трейсы через Profiler. На трейсах были обнаружены непонятные пары запросов: Audit Login и Audit Logout, постоянно отправляемые на сервер. Кроме того, с помощью сниффера, получили странную картину: в определённые моменты времени и сервер и клиент одновременнно простаивают. В связи спроблемой с быстродействием хотелось бы больше понимать механизм работы системы. Можно ли получить больше информации по этому вопросу?

Нравится

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

Здравствуйте.
В стандартной конфигурации запросов вида "Audit Login", "Audit Logout" нет. Вероятнее всего, что это либо проектная доработка, либо внесены изменения в конфигурацию с Вашей стороны. Что касается быстродействия, то можно попробовать перестроить индексы базы данных путём запуска "хранимки" sp_reindex_all_tables (скрипт для её создания прикрепил). Запускать нужно в нерабочее время и предварительно ОБЯЗАТЕЛЬНО создать резервную копию базы данных.

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

Добрый день!

Прошу помочь с таким вопросом -

как получить возможность фильтровать данные по нескольким полям (критериям)?
Например по контрагентам + по средствам связи + и.т.д.

Спасибо.

Нравится

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

Нужно прописывать связи и фильтрацию в скрипте, который отвечает за выборку в том или ином wnd из базы данных.
Как новичок могу что-то упустить, подождите ответ здешних гуру.

Здравствуйте.
Такая возможность была добавлена только в версии 3.5.2 в сборках, которые были выпущены после 14.03.2014. При такой фильтрации используется логический оператор "И". Если у Вас более ранняя версия, то для выбора множественного условия нужно использовать менеджер фильтрации (слева внизу) + там существует возможность выбора разных условий (И, ИЛИ, =, <> и т. д.).

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

Скажем, есть такая хранимая процедура:

ALTER PROCEDURE [dbo].[spBuildingAddress]
        @AOGUID uniqueidentifier
AS
BEGIN
        SELECT * FROM fias_ADDROBJ WHERE AOGUID = @AOGUID
        SELECT AOGUID FROM fias_ADDROBJ WHERE AOGUID = @AOGUID
END

она возвращает два набора данных (см. прикрепленный файл), можно ли в Террасофте получить доступ к обоим этим наборам? если можно, то как?

версия 3.0.2.244

Нравится

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

Скажите, а зачем? Почему нельзя использовать обычную процедуру, а лучше функцию?

А Вы с какой целью интересуетесь?

А Вы?:wink:

В Terrasoft есть возможность получать в SelectQuery в качестве источника данных результаты, возвращаемые функцией. Для хранимых процедур можно получать значения выходных параметров.

"Зверев Александр" написал:есть возможность получать в SelectQuery в качестве источника данных результаты, возвращаемые функцией

версия 3.0.2 ? там оно уже работало?

И кстати действительно непонятно, почему бы результаты работы данной процедуры не получать без процедуры :) простым сервисом sq_ в Terrasoft

"Александр Кудряшов" написал:

версия 3.0.2 ? там оно уже работало?


Можно проверить, тут написано, как такое делается.

И кстати действительно непонятно, почему бы результаты работы данной процедуры не получать без процедуры :) простым сервисом sq_ в Terrasoft


Можно написать view с логикой и привязать сервис tbl к нему.

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

Нет, нельзя. А если узнаете, что как-то можно, напишите.

спасибо...

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

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

Есть настроенная интеграция ТС + 1С, которая добавляет и обновляет данные в 1С по UID1C. К примеру Накладные в ТС и Накладные в 1С. Счета в ТС и Счета в 1С.
А вот как обновить, к примеру, в 1С Накладную (Реализация (акты, накладные)) установить галочку Подписан, а источник в ТС Продажа, также булевское поле Подписана.
В первом случае все просто - там всегда в 1С из ТС добавляется новая запись со связью по UID1C. И по этому UID1C можно затем обновлять данные в 1С.
В случае Продаж новые записи из ТС в 1С (и обратно) не попадают. Единственное, по какому признаку можно их связать - это номер Продажи в ТС (Пример: "П345") и комментарий в накладной 1С ("Продажа номер П345-06072015").
Как можно в этом случае поставив галочку в ТС в Продаже "Подписана", чтобы накладная в 1С была Подписана (установлена галочка Документ подписан).

Нравится

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

Пример установки галочки в TS для компонента BoolDataControl с помощью sql запрос:

UPDATE tbl_Opportunity SET [Название поля] = 1 {WHERE [Условие отбора]}

Где

  • 1 = true (галка установлена)
  • 0 = false (галка не установлена)

Нет, в ТС ничего программно обновлять не надо.
Процесс такой:
Пользователь (менеджер) в ТС в Продаже в ручную ставит галочку "Подписана".
В 1С программно (возможно через скрипт в OnBeforeRecordExport) в нужной (связанной с этой Продажей) Накладной ставится галочка "Документ подписан".

Связь между Продажей (ТС) и Накладной (1С):
Продажа - Номер (Пример: "П345").
Накладная - Комментарий (Пример: "Продажа номер П345-0607201")

Как пример может быть Накладную (1C) можно выбрать кодом 1С?:

ВЫБРАТЬ РТУ.Проведен ИЗ
       Документ.РеализацияТоваровУслуг КАК РТУ
       ГДЕ РТУ.Комментарий ПОДОБНО "П345%"

Только как это реализовать в OnBeforeRecordExport?

А ещё можно было бы сделать очень просто:

ОБНОВИТЬ Документ.РеализацияТоваровУслуг SET Проведен = "1"
       ГДЕ Комментарий ПОДОБНО "П345%"

(где "Проведен" и есть "Документ подписан".)
Только 1С такого делать не позволяет.

Или как-то их попытаться сначало связать по UID1C?

Добавьте в таблицу Продажи (TS) поле UID1C с типом идентификатор, в котором будете хранить идентификатор с таблицы Накладная (1C) и работайте через него, это будет намного проще и избавит Вас от потенциальных ошибок

Поле UID1C в таблице Продажи (TS) присутствует. Каким образом связать это поле с идентификатором с таблицы Накладная (1C), если есть только вышеперечисленные условия (Номер Продажи - Комментарий 1С)?

Есть несколько вариантов:

  1. 1. Из TS в 1C (данные создаются в TS)
  2. При выполнении импорта из TS значение в поле UID1C таблицы Продажи (TS) отсутствует. В момент создания новой записи в 1C, мы запоминаем сгенерированное значение ID для таблицы Накладная (1C), после чего подставляем это значение в поле UID1C таблицы Продажи (TS)

  3. 2. Из 1C в TS (данные создаются в 1C)
  4. При выполнении экспорта данных из 1C в TS, мы уже знаем идентификатор в 1C. по этому сразу можем подставить значение в поле UID1C таблицы Продажи (TS)

  5. 3. Можно использовать шлюзовые таблицы для обмена данными между 1C и TS
Показать все комментарии

Вопрос: при использовании кода 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 или у одного из их партнёров.

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

Добрый день!

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

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

Добрый день!

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

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

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

Спасибо.

Нравится

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

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

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

спасибо!

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

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

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

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

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

    Интегрируеся с 1С 8.3, нужно динамически установить Договор для Счёта.

    Для этого нужно

    1. Получить контрагента 1С (т.к. договор его)
    2. Получить Основной договор этого контрагента

    Контрагента получить легко:
    var Contragent = Param.Obj1C.Справочники.Контрагенты.НайтиПо[...];

    А вот со вторым вариантом становится веселее. Есть следующая функция:

    Param.Obj1C.Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию

    Она принимает 4 аргумента: Название, точное совпадение, родителя и владельца

    Первое, второе и четвёртое нам известно - это "Основной договор", false и контрагент, которого мы получили выше. Но третьего не дано (sic!). Язык 1С позволяет опускать ненужные параметры, но компилятор Террасофта этого сделать не даёт, так что нужно что-то туда вставить.

    Вопрос: что?

    Я пробовал null, false, 0, {}, Справочники.Контрагенты.ПустаяСсылка(), ""

    Всё время жалуется на несоответствие типов.

    Нравится

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

    В разных местах предлагают вроде:

    ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка())

    Не знаю, можно ли вызвать эту функцию из TS.

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