Кто знает точную формулу, как рассчитывается количество и цена единицы измерения в документах?
Суть в чем, я хочу ввести несколько единиц измерения для каждой номенклатуры.
Проблема вся в том, что в одной единице измерения мы измеряем обьем, а дрогой единицей площадь, а третьей количество.
м3, м2, пачка
Базовая единица Пачка = количеству в м3 - Она подтягивается на сайт
Единица хранения м3 = 1 коэф. - Единица в которой регистрируют поставщики товар
Единица для отчетов м2 = м3 / толщину изделия
Если Базовой единицей считать Пачка, то остаток отображается не верно (в Ведомостях Пачка = остатку 10, хотя это остаток в м3)
Если же Базовой единицей поставить м3, то это не удобно в плане учета и выписывания документов.
// Процедура выполняет стандартные действия при изменении единицы цены
// в строке табличной части документа.
//
// Параметры:
// СтрокаТабличнойЧасти - строка табличной части документа,
// ДокументОбъект - объект редактируемого документа
//
Процедура ПриИзмененииЕдиницыТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт
ИмяТабличнойЧасти = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
МетаданныеДокумента = ДокументОбъект.Метаданные();
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЕдиницаИзмеренияМест", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("КоличествоМест", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмерения)
И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Для " + СокрЛП(СтрокаТабличнойЧасти.Номенклатура) + " не выбрана единица измерения цены!
|Пересчет количества невозможен.");
Иначе
СтароеЗначениеКоэффициента = СтрокаТабличнойЧасти.Коэффициент;
НовоеЗначениеКоэффициента = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;
СтрокаТабличнойЧасти.Коэффициент = НовоеЗначениеКоэффициента;
Если НовоеЗначениеКоэффициента <> СтароеЗначениеКоэффициента
И СтароеЗначениеКоэффициента <> 0 Тогда
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест) Тогда
СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество * СтароеЗначениеКоэффициента
/ НовоеЗначениеКоэффициента;
КонецЕсли;
РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект);
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена *НовоеЗначениеКоэффициента
/ СтароеЗначениеКоэффициента;
КонецЕсли;
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаНоминальная", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
СтрокаТабличнойЧасти.ЦенаНоминальная = СтрокаТабличнойЧасти.ЦенаНоминальная *НовоеЗначениеКоэффициента
/ СтароеЗначениеКоэффициента;
КонецЕсли;
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПлановаяСтоимость", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
СтрокаТабличнойЧасти.ПлановаяСтоимость = СтрокаТабличнойЧасти.ПлановаяСтоимость *НовоеЗначениеКоэффициента
/ СтароеЗначениеКоэффициента;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмерения) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Для " + СокрЛП(СтрокаТабличнойЧасти.Номенклатура) + " не выбрана единица измерения цены!
|Пересчет количества невозможен.");
Иначе
СтароеЗначениеКоэффициента = СтрокаТабличнойЧасти.Коэффициент;
НовоеЗначениеКоэффициента = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;
СтрокаТабличнойЧасти.Коэффициент = НовоеЗначениеКоэффициента;
Если НовоеЗначениеКоэффициента <> СтароеЗначениеКоэффициента Тогда
// если в табличной части есть реквизит КоличествоМест, то цена задается не за ЕдиницуИзмерения,
// а за базовую единицу хранения остатков. Т.е. цену пересчитывать не нужно
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("КоличествоМест", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
// надо обновить изменение к-ва в документе
РассчитатьКоличествоТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект);
Иначе
// ПересчитатьЦену
Если СтароеЗначениеКоэффициента > 0
И ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Коэффициент
/ СтароеЗначениеКоэффициента;
КонецЕсли;
Если СтароеЗначениеКоэффициента > 0
И ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаВРознице", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
СтрокаТабличнойЧасти.ЦенаВРознице = СтрокаТабличнойЧасти.ЦенаВРознице * СтрокаТабличнойЧасти.Коэффициент
/ СтароеЗначениеКоэффициента;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ПриИзмененииЕдиницыТабЧасти