Здравствуйте!!
в террасофте реализована следующая функциональность:
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 добавить функцию
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; }
Откорректировать функцию SetValuesByPriceType в скрипте scr_OfferingUtils необходимо таким образом
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; }
Terrasoft Support Team