Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Функции единицы измерения УТП 8.3 Конф. 1.2 УТП
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Общий раздел > Корзина
RSL-1
Кто знает точную формулу, как рассчитывается количество и цена единицы измерения в документах?
Суть в чем, я хочу ввести несколько единиц измерения для каждой номенклатуры.
Проблема вся в том, что в одной единице измерения мы измеряем обьем, а дрогой единицей площадь, а третьей количество.
м3, м2, пачка
Базовая единица Пачка = количеству в м3 - Она подтягивается на сайт
Единица хранения м3 = 1 коэф. - Единица в которой регистрируют поставщики товар
Единица для отчетов м2 = м3 / толщину изделия
Если Базовой единицей считать Пачка, то остаток отображается не верно (в Ведомостях Пачка = остатку 10, хотя это остаток в м3)
Если же Базовой единицей поставить м3, то это не удобно в плане учета и выписывания документов.
// Процедура выполняет стандартные действия при изменении единицы цены
// в строке табличной части документа.
//
// Параметры:
//  СтрокаТабличнойЧасти - строка табличной части документа,
//  ДокументОбъект       - объект редактируемого документа
//
Процедура ПриИзмененииЕдиницыТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект) Экспорт

    ИмяТабличнойЧасти   = ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти);
    МетаданныеДокумента = ДокументОбъект.Метаданные();

    Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЕдиницаИзмеренияМест", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
        Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("КоличествоМест", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда

            Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмерения)
               И ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) Тогда
                ОбщегоНазначения.СообщитьОбОшибке("Для " + СокрЛП(СтрокаТабличнойЧасти.Номенклатура) + " не выбрана единица измерения цены!
                                 |Пересчет количества невозможен.");
            Иначе
                СтароеЗначениеКоэффициента = СтрокаТабличнойЧасти.Коэффициент;
                НовоеЗначениеКоэффициента  = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;

                СтрокаТабличнойЧасти.Коэффициент = НовоеЗначениеКоэффициента;

                Если НовоеЗначениеКоэффициента <> СтароеЗначениеКоэффициента
                   И СтароеЗначениеКоэффициента <> 0 Тогда
                    

                    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест) Тогда
                        СтрокаТабличнойЧасти.Количество  = СтрокаТабличнойЧасти.Количество * СтароеЗначениеКоэффициента
                                                           / НовоеЗначениеКоэффициента;
                    КонецЕсли;

                    РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект);




                    Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                        СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена *НовоеЗначениеКоэффициента
                                                    / СтароеЗначениеКоэффициента;
                    КонецЕсли;
                    
                    
                    Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаНоминальная", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                        СтрокаТабличнойЧасти.ЦенаНоминальная = СтрокаТабличнойЧасти.ЦенаНоминальная *НовоеЗначениеКоэффициента
                                                    / СтароеЗначениеКоэффициента;
                    КонецЕсли;
                    
                    Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПлановаяСтоимость", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                        СтрокаТабличнойЧасти.ПлановаяСтоимость = СтрокаТабличнойЧасти.ПлановаяСтоимость *НовоеЗначениеКоэффициента
                                                    / СтароеЗначениеКоэффициента;
                    КонецЕсли;
                                                
                                                
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    Иначе
        
        Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЕдиницаИзмерения) Тогда
            ОбщегоНазначения.СообщитьОбОшибке("Для " + СокрЛП(СтрокаТабличнойЧасти.Номенклатура) + " не выбрана единица измерения цены!
                             |Пересчет количества невозможен.");
        Иначе
            СтароеЗначениеКоэффициента = СтрокаТабличнойЧасти.Коэффициент;
            НовоеЗначениеКоэффициента  = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;

            СтрокаТабличнойЧасти.Коэффициент = НовоеЗначениеКоэффициента;

            Если НовоеЗначениеКоэффициента <> СтароеЗначениеКоэффициента Тогда

                // если в табличной части есть реквизит КоличествоМест, то цена задается не за ЕдиницуИзмерения,
                // а за базовую единицу хранения остатков. Т.е. цену пересчитывать не нужно
                Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("КоличествоМест", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                    // надо обновить изменение к-ва в документе
                    РассчитатьКоличествоТабЧасти(СтрокаТабличнойЧасти, ДокументОбъект);
                Иначе
                    // ПересчитатьЦену
                    Если СтароеЗначениеКоэффициента > 0
                        И ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("Цена", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                        СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Цена * СтрокаТабличнойЧасти.Коэффициент
                        / СтароеЗначениеКоэффициента;
                    КонецЕсли;

                    Если СтароеЗначениеКоэффициента > 0
                        И ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЦенаВРознице", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
                        СтрокаТабличнойЧасти.ЦенаВРознице = СтрокаТабличнойЧасти.ЦенаВРознице * СтрокаТабличнойЧасти.Коэффициент
                        / СтароеЗначениеКоэффициента;
                    КонецЕсли;
                    
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;

    КонецЕсли;

КонецПроцедуры // ПриИзмененииЕдиницыТабЧасти
Vofka
Не надо создавать одинаковые по смыслу темы. Можете задать уточняющий вопрос в уже вами необходимо зарегистрироваться для просмотра ссылки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.