документ
продукт
счет
цены
Скрипты
Разработка

Цены в счете

Здравствуйте!!
в террасофте реализована следующая функциональность:
1. В разделе Продукты есть вкладка Цены, на которой можно указать оптовую и розничную цену (в деньгах)
2. В разделе Контрагенты есть вкладка Типы цен, на которой можно указать оптовую и розничную цену в датах
3. В раздел Счета добавить новый счет и указать дату, которая бы попадала в какой либо из промежутков дат, указанных в разделе Контрагенты. Затем создать на вкладке счетов Продукты новую запись. В результате в атрибут Цена карточки Продукты по счету автоматически подставляется тот тип цены из раздела Продукты, дата которого указана в карточке счета...

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

С уважением, Гашникова Екатерина

Нравится

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

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