Имя: Пароль:
1C
 
Проблемы округления копеек
,
0 WhiteDragon93
 
10.06.15
10:27
Привет, товарищи!

Беда следующая, есть три типа цен, а именно:

1) Закупочная = Цене поступления;
2) Цена продажи, не включающая НДС = Закупочная + %наценки;
3) Цена, включающая НДС = Цена продажи, не включающая НДС + 18% и округленная до целых.

На ценниках, последняя, третья цена. По ней должны продать.
Итого имеем, для примера: 1) 60, 2) 80, 3) 95

Как изменить при продаже вторую цену, чтобы она при прибавке НДС давала третью цену.

Вопрос "Зачем?" бесполезен, так надо :)
1 ВРедная
 
10.06.15
10:30
(0) Никак. Потому что завтра у тебя появится другая цена, которая округляется автоматически в другую сторону и все повторится снова, только наоборот.
2 WhiteDragon93
 
10.06.15
10:31
(1) Пока что берем сферические условия в вакууме, без универсальности.
3 Масянька
 
10.06.15
10:32
(2) Я не поняла... 80 + 18% = 94,4. В чем вопрос?
4 butterbean
 
10.06.15
10:33
(0) 95/1.18 ... или нет?
5 MrKartez
 
10.06.15
10:34
80 + 18% + 0,5 = 94,9 = 95 Добавлять 0.5 не вариант?
6 WhiteDragon93
 
10.06.15
10:34
(3) на ценнике в магазине 95, она округляется до целых при формировании цен. По этой цене и должны отпустить.
7 WhiteDragon93
 
10.06.15
10:37
(5) а если цена будет 111, то получится 111+18%+0,5 = 131,48 вместо 131
8 ВРедная
 
10.06.15
10:40
(7) а говоришь без универсальности. Вот уже и другие суммы вылезли, которые в другую сторону "неправильно" округляются.
9 НЕА123
 
10.06.15
10:41
?(Цел(Ц)=Ц, Ц, Ц+1)
10 НЕА123
 
10.06.15
10:41
*
Цел(Ц) + ?(Цел(Ц)=Ц, 0, 1)
11 bolobol
 
10.06.15
10:46
Цена 2 у вас влияющая на цену 3 по условию 3. А вторая цена расчётная из цены 1. Поэтому цена 3 никак по-другому не может получится, кроме как из цены 2. Т.о. - ответом на ваш вопрос может быть "не требуется менять". Тогда в чём вопрос?
12 bolobol
 
10.06.15
10:49
У вас НДС при обратном вычислении получится больше и сумма без НДС станет больше. У меня вопрос - вы её куда запихнуть хотите? Выравнивание розничных цен к ценам, по которым продали, актом переоценки делается.
13 MrKartez
 
10.06.15
10:51
(7) Что?
Сообщить("ЧИСЛО РАВНО: "+Окр(Реквизит1+Реквизит1*0.18+0.5))

Только что задал реквизиту1 в обработке число 111, вернуло 131.
14 WhiteDragon93
 
10.06.15
10:53
(13) Нельзя округлять конечную сумму по строке
15 Масянька
 
10.06.15
10:55
(14) Чем не подходит (8) (9)?
16 НЕА123
 
10.06.15
10:56
(14)
чем (4) не устраивает?
17 WhiteDragon93
 
10.06.15
11:11
(16) в некоторых случаях получается верно, в некоторых нет.
То есть мы идем от противного: выделяем цену без НДС, но числа получаются с дробью до десятитысячных, а в 1С точность до сотых.

То есть иногда получается *,000018 - подходит без проблем, а иногда - *,07 - а округлять нельзя

Либо я где-то что-то упустил.
18 Масянька
 
10.06.15
11:11
Типовая семерка:

//******************************************************************************
// глОкруглить(Числ, ПорядокОкругления)
//
// Параметры:
//  Числ              - исходное число
//  ПорядокОкругления - элемент перечисления Порядки окгугления:
//  "шаг" округления (0.01 (арифметическое), 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100)
//
// Возвращаемое значение:
//  Округленное по заданному порядку значение
//
// Описание:
//  Округляет число вверх по заданному порядку. Т.е число 123.37 при порядке
//  округление 0.5 превратиться в 123.50, а число 0.1 при порядке округления
//  5 станет равным 5.
//  Если значение перечисления ОкрТочно, то округляет арифметически до 0.01
//
Функция глОкруглить(Числ, ПорядокОкругления) Экспорт
    Перем Рез;
    
    Если ПорядокОкругления = Перечисление.ПорядкиОкругления.ОкрТочно Тогда
        
        // арифметическое округление до 2-х знаков после запятой
        Рез = Окр(Числ, 2);
    Иначе
        // округление к верхней границе по заданному порядку
        
        // преобразуем порядок округления число
        Порядок            = Число(Строка(ПорядокОкругления));
        
        // вычислим количество интервалов, входящих в число
        КолвоИнтервал    = Числ / Порядок;
        
        // вычислим целое количество интервалов.
        КолвоИнтервалЦел= Цел(КолвоИнтервал);
        
        Если КолвоИнтервал = КолвоИнтервалЦел Тогда
            // Числа поделились нацело. Округлять не нужно.
            Рез    = Числ;
        Иначе
            Рез    = Порядок * (КолвоИнтервалЦел + 1);
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Рез;
КонецФункции // глОкруглить()
19 hhhh
 
10.06.15
11:17
(17) а какой смысл в этом пересчете? У вас есть Цена3 с нее вычисляете НДС Цена / 1.18 * 0.18. Этот НДС платите в бюджет. КАкой смысл привязывать к каким-то ценам там?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн