Имя: Пароль:
1C
1С v8
Ошибка расчета цены с НДС
0 Начинающий_13
 
10.04.15
16:44
Здравствуйте.

Помогите убрать копейку.
Ввожу данные

НДС в Сумме

Кол                   1
Цена                100
Сумма              100
Ставка НДС    18
НДС                 15.25
Всего               100

Переключаю в НДС сверху

Кол                   1
Цена                84.75
Сумма              84.75
Ставка НДС    18
НДС                 15.26
Всего               101

Переключаю обратно в НДС в сумме

Кол                   1
Цена                100.01
Сумма              100.01
Ставка НДС    18
НДС                 15.26
Всего               100.01

Формулы расчета Суммы,  Расчета СуммыНДС, Расчета Всего взяты из БП 3.0


Процедура ПриИзмененииСуммаВключаетНДСПересчитатьДанныеТабличнойЧасти(Форма, ИмяТаблицы, ЗначениеПустогоКоличества = 0, ПрименяютсяСтавки4и2 = Ложь) Экспорт
    
    Элементы = Форма.Элементы;
    Объект   = Форма.Объект;
         
    Для Каждого СтрокаТаблицы из Объект[ИмяТаблицы] Цикл
        
        
        Если Объект.СуммаВключаетНДС Тогда  // ???????????????????????????????
            СтрокаТаблицы.Цена  = СтрокаТаблицы.Цена * (100 + МА_УчетНДСВызовСервераПовтИсп.ПолучитьСтавкуНДС(СтрокаТаблицы.СтавкаНДС, ПрименяютсяСтавки4и2)) / 100;
        Иначе // Цана без НДС
            СтрокаТаблицы.Цена  = (СтрокаТаблицы.Цена * 100) / (100 + МА_УчетНДСВызовСервераПовтИсп.ПолучитьСтавкуНДС(СтрокаТаблицы.СтавкаНДС, ПрименяютсяСтавки4и2));
        КонецЕсли;

        
        МА_РаботаСТабличнымиЧастямиКлиентСервер.РассчитатьСуммуТабЧасти(СтрокаТаблицы, ЗначениеПустогоКоличества);
        
        Если СтрокаТаблицы.Свойство("НДС") Тогда
            МА_РаботаСТабличнымиЧастямиКлиентСервер.РассчитатьСуммуНДСТабЧасти(СтрокаТаблицы, Объект.СуммаВключаетНДС, ПрименяютсяСтавки4и2);
        КонецЕсли;
        
        Если СтрокаТаблицы.Свойство("Всего") Тогда
            СтрокаТаблицы.Всего = СтрокаТаблицы.Сумма + ?(Объект.СуммаВключаетНДС, 0, СтрокаТаблицы.НДС);
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры
1 Cyberhawk
 
10.04.15
16:48
Сделай тот же пример, только изначально цену поставь 100.01 и посмотри, что будет...
2 Начинающий_13
 
10.04.15
16:50
Тогда все возвращается как и было при вводе
3 Cyberhawk
 
10.04.15
16:52
Ну вот: что при 100.00, что при 100.01 конечный результат одинаковый. Как ты планируешь это исправить? Как отличить, что в первом случае нужно вернуть 100.00, а во втором оставить 100.01?
4 Cyberhawk
 
10.04.15
16:54
Проверил в демо-базе БП 3.0, там такое же поведение. В общем случае задача не решается.
Добавь предупреждение "Цены будут очищены" при возвращении галочки и очищай цену, либо перезаполняй по цене, которая хранится в инфобазе - в 1С сделана для этого галочка "Перезаполнить цены"
5 Начинающий_13
 
10.04.15
16:56
1 Конечный результат в первом случае 100 (при вводе 100)
Возвращает 100.01
2 Во втором случае конечный результат 100.01 (при вводе 100.01) возвращает 100.01
Как и надо ничего не изменелось.
6 Начинающий_13
 
10.04.15
16:58
Цена старая берется из спр. номенклатура в БП 3.0 если папять не изменяет. Сдель цена не хранится в спр...
Вот и думаю как получить предыдущию цену.
7 Начинающий_13
 
10.04.15
17:01
Где ее сохрнить на время?
8 Cyberhawk
 
10.04.15
17:01
Слишком много телодвижений придется делать, а ради чего?
Сохранять на время можешь в структуре ДополнительныеСвойства документа-объекта
9 Начинающий_13
 
10.04.15
17:04
Можно в ТЗ, затем загрузить..
Какие варианты еще есть?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший