Для того чтобы добавить действие «Создать документ на основании договора» в раздел [Договоры] необходимо придерживаться следующего алгоритма:
1. Запустить Terrasoft Administrator.
2. Открыть сервис wnd_ContractsWorkspace. Перейти на закладку «Невизуальные», выделить компонент amiActions. Добавить новый ActionMenuItem:
Заполнить свойства следующим образом:
Сохранить изменения.
3. Перейти на закладку «События». Для добавленного компонента amiDocumentByContract создать обработчик события OnExecute:
В теле функции обработки события прописать код:
FUNCTION amiDocumentByContractOnExecute(ActionMenuItem, Sender) {
var ContractIDs = BaseWorkspace.Grid.SelectedIDs;
var Count = ContractIDs.Count;
IF (!Count||IsDatasetEmpty(dlContracts.Dataset)) {
ShowWarningDialog(GridNotContainsAnyRecords);
RETURN;
}
IF (Count > 1) {
var Message = FormatStr(GridContainsSomeRecords, Count);
IF (ShowConfirmationDialog(Message) == mrYes) {
CreateDocumentByContract(ContractIDs);
}
} else {
CreateDocumentByContract(ContractIDs);
}
}
В этом же скрипте (wnd_ContractsWorkspaceScript) реализовать функцию FUNCTION CreateDocumentByContract(ContractIDs)
FUNCTION CreateDocumentByContract(ContractIDs) {
var ContractDataset = dlContracts.Dataset;
FOR (var i=0; iContractIDs.Count; i++) {
var Dataset = Services.GetSingleItemByUSI(ContractDataset.USI);
var ContractID = ContractIDs.Items(i);
ApplyDatasetIDFilter(Dataset, ContractID, true);
Dataset.DisableEvents();
Dataset.Open();
var DefaultValues = GetNewDictionary();
var NamedArray = GetDatasetFieldsValuesNamedArray(Dataset, new Array(
'OwnerID', 'ContactID', 'CampaignID', 'OpportunityID',
/* MODULE PROJECTS */ 'ProjectID'/* ENDMODULE PROJECTS */));
AddNamedArrayToDictionary(NamedArray, DefaultValues);
var InvoiceDate = GetFieldValueFromDisabledField(Dataset, 'StartDate');
var ContractID = GetFieldValueFromDisabledField(Dataset, 'ID');
Dataset.Close();
Dataset.EnableEvents();
DefaultValues.ADD('ContractID', ContractID);
DefaultValues.ADD('InvoiceDate', InvoiceDate);
var Attributes = GetNewDictionary();
Attributes('IsCreatedByContractID') = ContractID;
CreateNewWindowEdit(Self, 'wnd_DocumentEdit', DefaultValues, Attributes);
}
}
Таким образом скрипт будет иметь вид:
4. Сохранить все внесенные изменения. Перезапустить приложение Terrasoft. Проверить работу функционала.
Перед внесением изменений в конфигурацию настоятельно рекомендуем создать резервную копию БД.