Здравствуйте!!
в террасофте реализована следующая функциональность:
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 добавить функцию

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

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