Обновление прайс-листа в соответствии с курсом валюты
Здравствуйте!
Как пользователю обновить цены сразу во всём прайс-листе продуктов в соответствии с установленным в справочнике курсом валюты?
Нравится
Здравствуйте, Алексей!
Такой функционал реализован в версии 3.5.2.
Могу выслать метод, реализующий пересчет цены.
Андрей, можете и мне выслать.
Т.е. при изменении курса валют в справочнике автоматически пересчитывается базовая цена в карточке продукта и соответствующие цены в прайс листах?
Спасибо!
Андрей, здравствуйте!
К сожалению, у нас версия 3.3.2
Если не сложно - вышлите, пожалуйста. Вы меня очень выручите.
Здравствуйте!
В 3.5.2 пересчет реализовано действие, по которому вызывается следующая функция:
function amiRecalcOfferingPriceOnExecute(ActionMenuItem, Sender) { if (BaseWorkspace.Grid.SelectedIDs.Count == 0) { return; } var OfferingIDs = GetArrayByCollection(BaseWorkspace.Grid.SelectedIDs); var CurrentDate = GetLocalDate(); RecalcOfferingPrices(CurrentDate, OfferingIDs, 'IDs'); }
, где
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(); } }
Адаптацию под свои версии предлагаю Вам сделать самостоятельно.
Здравствуйте!
Оказалось, такая функция реализована ещё в 3.3.2.290 в действиях над продуктами
(раздел "Продукты" ->"Действия ->"Пересчитать и добавить новые цены по прайс-листам").
В любом случае - Андрей, спасибо Вам! :twisted:
Алексей, действительно, не подумал, что надо в Distribution смотреть.
Всегда пожалуйста!