Здравствуйте!!
в террасофте реализована следующая функциональность:
1. В разделе Продукты есть вкладка Цены, на которой можно указать оптовую и розничную цену (в деньгах)
2. В разделе Контрагенты есть вкладка Типы цен, на которой можно указать оптовую и розничную цену в датах
3. В раздел Счета добавить новый счет и указать дату, которая бы попадала в какой либо из промежутков дат, указанных в разделе Контрагенты. Затем создать на вкладке счетов Продукты новую запись. В результате в атрибут Цена карточки Продукты по счету автоматически подставляется тот тип цены из раздела Продукты, дата которого указана в карточке счета...
Мне нужно реализовать тоже только для раздела Документ. Подскажите какие скрипты и функции смотреть, где это реализовано для счета.
С уважением, Гашникова Екатерина
Нравится
Добрый день!
Спасибо за Ваш вопрос.
Для того, чтобы реализовать запрашиваемую Вами функциональность Вам необходимо сделать изменения в скрипте scr_OfferingUtils в функции SetValuesByPriceType по аналогии c реализацией для раздела Счета.
В разделе Счета данная функциональность реализована в функции DataChange, которая вызывается на событие SelfOnDatasetDataChange для ds_OfferingInInvoiceScript.
В функции SetValuesByPriceType реализована функциональность работы с ценами для разделов Счета, Проекты, а именно работа с ценами на закладке Продукты Менеджера деталей соответствующего раздела.
Будем рады ответить на все Ваши вопросы.
Terrasoft Support Team
так поняла, что за вставку цен в продукт по счету отвечает функция SetValuesByPriceType внутри scr_OfferingUtils.
для решения своей задачи попробовала заменить везде в этой функции InvoiceID на DocumentID.
получилось следующее:
function SetValuesByPriceType(Dataset, ScriptObject) {
if (ScriptObject.WorkspaceFieldName == 'DocumentID') {
if (!Assigned(scr_OfferingUtils.AccountIDDocument)) {
var DocumentID = Dataset.Values('DocumentID');
scr_OfferingUtils.AccountIDDocument = GetDocumentParameterByDocumentID(
DocumentID,'AccountID');//CustomerID
scr_OfferingUtils.CurrenDateDocument = GetDocumentParameterByDocumentID(
DocumentID,'Date');
}
var AccountID = scr_OfferingUtils.AccountIDDocument;
var CurrentDate = scr_OfferingUtils.CurrenDateDocument;
} else if (ScriptObject.WorkspaceFieldName == 'OpportunityID') {
if (!Assigned(scr_OfferingUtils.AccountIDOpportunity)) {
var OpportunityID = Dataset.Values('OpportunityID');
scr_OfferingUtils.AccountIDOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'CustomerID');
scr_OfferingUtils.CurrenDateOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'StartDate');
}
var AccountID = scr_OfferingUtils.AccountIDOpportunity;
var CurrentDate = scr_OfferingUtils.CurrenDateOpportunity;
} else
return false;
var PriceCategoryID = GetPriceTypeOfferingByAccountID(AccountID, CurrentDate);
if (!IsEmptyValue(PriceCategoryID)) {
var ResultArray = GetOfferingPriceByPriceCategoryID(PriceCategoryID,
Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
}
var ResultArray = GetOfferingPriceByMainPrice(Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
return false;
}
Открываю раздел Документы, добавляю новый продукт, выбираю дату из любого промежутка, заданного в разделе Контрагенты на закладке Типы цен. Захожу на закладку Продукты по документам, добавляю новую карточку и при выборе продукта выдается ошибка 'Ошибка выполнения метода 'SelfOnDatasetDataChange'. Предполагается наличие объекта'
Скажите по правильному ли я пошла пути и если да, то как исправить ошибку?
Гашникова Екатерина
Добрый день.
Для того, чтобы реализовать требуемую функциональность Вам необходимо в scr_OfferingUtils добавить функцию
[javascript]
function GetDocumentParameterByDocumentID(DocumentID, Parameter) {
var DocumentDataset = GetSingleItemByCode('ds_Document', 'scr_OfferingUtils');
EnableDatasetFilters(DocumentDataset, false);
ApplyDatasetIDFilter(DocumentDataset, DocumentID, true);
DocumentDataset.Open();
var Result = null;
if (!IsDatasetEmpty(DocumentDataset)) {
Result = DocumentDataset.Values(Parameter);
}
DocumentDataset.Close();
return Result;
}
[/javascript]
Откорректировать функцию SetValuesByPriceType в скрипте scr_OfferingUtils необходимо таким образом
[javascript]
function SetValuesByPriceType(Dataset, ScriptObject) {
if (ScriptObject.WorkspaceFieldName == 'InvoiceID') {
if (!Assigned(scr_OfferingUtils.AccountIDInvoice)) {
var InvoiceID = Dataset.Values('InvoiceID');
scr_OfferingUtils.AccountIDInvoice = GetInvoiceParameterByInvoiceID(
InvoiceID,'CustomerID');
scr_OfferingUtils.CurrenDateInvoice = GetInvoiceParameterByInvoiceID(
InvoiceID,'InvoiceDate');
}
var AccountID = scr_OfferingUtils.AccountIDInvoice;
var CurrentDate = scr_OfferingUtils.CurrenDateInvoice;
} else if (ScriptObject.WorkspaceFieldName == 'OpportunityID') {
if (!Assigned(scr_OfferingUtils.AccountIDOpportunity)) {
var OpportunityID = Dataset.Values('OpportunityID');
scr_OfferingUtils.AccountIDOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'CustomerID');
scr_OfferingUtils.CurrenDateOpportunity = GetOpportunityParameterByOpportunityID(
OpportunityID,'StartDate');
}
var AccountID = scr_OfferingUtils.AccountIDOpportunity;
var CurrentDate = scr_OfferingUtils.CurrenDateOpportunity;
} else if (ScriptObject.WorkspaceFieldName == 'DocumentID') {
if (!Assigned(scr_OfferingUtils.AccountIDDocument)) {
var DocumentID = Dataset.Values('DocumentID');
scr_OfferingUtils.AccountIDDocument = GetDocumentParameterByDocumentID(
DocumentID,'AccountID');
scr_OfferingUtils.CurrenDateDocument = GetDocumentParameterByDocumentID(
DocumentID,'Date');
}
var AccountID = scr_OfferingUtils.AccountIDDocument;
var CurrentDate = scr_OfferingUtils.CurrenDateDocument;
} else
return false;
var PriceCategoryID = GetPriceTypeOfferingByAccountID(AccountID, CurrentDate);
if (!IsEmptyValue(PriceCategoryID)) {
var ResultArray = GetOfferingPriceByPriceCategoryID(PriceCategoryID,
Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
}
var ResultArray = GetOfferingPriceByMainPrice(Dataset.Values('OfferingID'));
if (!IsEmptyValue(ResultArray)) {
SetOfferingValues(Dataset, ResultArray, ScriptObject);
return true;
}
return false;
}
[/javascript]
Terrasoft Support Team