Обновление прайс-листа в соответствии с курсом валюты
Здравствуйте!
Как пользователю обновить цены сразу во всём прайс-листе продуктов в соответствии с установленным в справочнике курсом валюты?
Нравится
Здравствуйте, Алексей!
Такой функционал реализован в версии 3.5.2.
Могу выслать метод, реализующий пересчет цены.
Андрей, можете и мне выслать.
Т.е. при изменении курса валют в справочнике автоматически пересчитывается базовая цена в карточке продукта и соответствующие цены в прайс листах?
Спасибо!
Андрей, здравствуйте!
К сожалению, у нас версия 3.3.2
Если не сложно - вышлите, пожалуйста. Вы меня очень выручите.
Здравствуйте!
В 3.5.2 пересчет реализовано действие, по которому вызывается следующая функция:
[javascript]
function amiRecalcOfferingPriceOnExecute(ActionMenuItem, Sender) {
if (BaseWorkspace.Grid.SelectedIDs.Count == 0) {
return;
}
var OfferingIDs = GetArrayByCollection(BaseWorkspace.Grid.SelectedIDs);
var CurrentDate = GetLocalDate();
RecalcOfferingPrices(CurrentDate, OfferingIDs, 'IDs');
}
[/javascript]
, где
[javascript]
function RecalcOfferingPrices(CurrentDate, SelectedIDs, FilterName) {
var RecordsCount = SelectedIDs.length;
if (RecordsCount == 0) {
ShowWarningDialog("Не выбрано ни одной записи");
return;
}
var OfferingDataset = GetSingleItemByCode('ds_Offering', 'RecalcOfferingPrices');
EnableDatasetFields(OfferingDataset, false);
EnableDatasetFields(OfferingDataset, true, ['ID', 'CurrencyID', 'Rate']);
ApplyDatasetIncludeFilter(OfferingDataset, 'IDs', SelectedIDs, true);
OfferingDataset.Close();
OfferingDataset.Open();
var PriceCategoryDataset = GetSingleItemByCode('ds_PriceCategory', 'RecalcOfferingPrices');
EnableDatasetFields(PriceCategoryDataset, false);
EnableDatasetFields(PriceCategoryDataset, true, ['ID', 'IsBase',
'PriceCalcMethodID', 'Name', 'DiscountPercent', 'CurrencyID']);
ApplyDatasetFilter(PriceCategoryDataset, 'IsDefault', true, true);
PriceCategoryDataset.Close();
PriceCategoryDataset.Open();
var OfferingID;
var PriceCalcMethodID;
var PrimeCost;
var PriceCategoryID;
OfferingDataset.GotoFirst();
while (!OfferingDataset.IsEOF) {
OfferingID = OfferingDataset('ID');
PriceCategoryDataset.GotoFirst();
while (!PriceCategoryDataset.IsEOF) {
PriceCategoryID = PriceCategoryDataset('ID');
PriceCalcMethodID = PriceCategoryDataset('PriceCalcMethodID');
PrimeCost = GetOfferingPrimeCost(OfferingID, PriceCalcMethodID) *
(1 + PriceCategoryDataset('DiscountPercent') / 100);
if (!IsZeroValue(PrimeCost)) {
var OfferingPriceObject = GetOfferingPriceData(OfferingID,
CurrentDate, PriceCategoryID, true);
var Dataset = OfferingPriceObject.Dataset;
if (IsEmptyValue(OfferingPriceObject.ID) ||
GetDateDiff(OfferingPriceObject.StartDate, CurrentDate) != 0) {
OfferingPriceObject.PriceKindID = opk_PriceList;
OfferingPriceObject.PriceCategoryID = PriceCategoryID;
OfferingPriceObject.PriceCategoryName = PriceCategoryDataset('Name');
if (IsEmptyValue(OfferingPriceObject.ID)) {
OfferingPriceObject.CurrencyID = PriceCategoryDataset('CurrencyID');
}
OfferingPriceObject.Rate = GetCurrencyRate(
OfferingPriceObject.CurrencyID, CurrentDate, false);
OfferingPriceObject.StartDate = CurrentDate;
OfferingPriceObject.DueDate = CurrentDate;
OfferingPriceObject.ID = null;
FillOfferingPriceObjectDefault(OfferingPriceObject, CurrentDate);
OfferingPriceObject.IsPriceWithTaxCalc = false;
}
OfferingPriceObject.BasicPrice = PrimeCost;
OfferingPriceObject.Price = RoundFloatValue(CalcNonBasicPrice(
OfferingPriceObject.BasicPrice, OfferingPriceObject.CurrencyID,
OfferingPriceObject.Rate), 2);
OldIsPriceWithTaxCalc = OfferingPriceObject.IsPriceWithTaxCalc;
OfferingPriceObject.IsPriceWithTaxCalc = false;
OfferingPriceDataChange('Price', OfferingPriceObject.Price,
OfferingPriceObject);
OfferingPriceObject.IsPriceWithTaxCalc = OldIsPriceWithTaxCalc;
if (IsEmptyValue(OfferingPriceObject.ID)) {
AppendOfferingPriceByObject(OfferingID, OfferingPriceObject);
} else {
Dataset.Edit();
CopyOfferingPriceObjectToDataset(OfferingPriceObject, Dataset);
Dataset.Post();
}
}
PriceCategoryDataset.GotoNext();
}
OfferingDataset.GotoNext();
}
}
[/javascript]
Адаптацию под свои версии предлагаю Вам сделать самостоятельно.
Здравствуйте!
Оказалось, такая функция реализована ещё в 3.3.2.290 в действиях над продуктами
(раздел "Продукты" ->"Действия ->"Пересчитать и добавить новые цены по прайс-листам").
В любом случае - Андрей, спасибо Вам! :twisted:
Алексей, действительно, не подумал, что надо в Distribution смотреть.
Всегда пожалуйста!