Имя: Пароль:
1C
1С v8
Решение округления
0 Chameleon1980
 
24.02.14
10:18
Не у кого наработок по правилам округления?
Типа:

до 5 р до 1 копейки
до 10р до 5 копеек
до 50р до 10 копеек
до 100р до 50 копеек
до 500р до рубля
свыше до 10р
1 Wobland
 
24.02.14
10:19
повтори вопрос, плз
2 butterbean
 
24.02.14
10:20
(0) функция пишется быстрее чем твой вопрос в (0) ))))
3 1Сергей
 
24.02.14
10:20
(1) >> Не у кого наработок по правилам округления?
4 Wobland
 
24.02.14
10:21
(3) спасибо
(0) ну
5 Irbis
 
24.02.14
10:23
(0) Кури Окр() со всеми параметрами
6 Ненавижу 1С
 
гуру
24.02.14
10:24
Создаем РС с полями: НижняяГраница, ВерхняяГраница, ЗначениеОкругления

заполняем его:

0 5 0.01
5 10 0.05
10 50 0.10
50 100 0.50
100 500 1.00
500 999999999999 10.00

а дальше легко как запросом, так и в коде
7 1Сергей
 
24.02.14
10:27
С тебя сто рублёв


Функция ОкрулитьДО(Число, Точность)
    Возврат Окр(Число / Точность) * Точность;
КонецФункции


Если Сумма < 5 Тогда
    Сумма = ОкруглитьДо(Сумма, 0.01);
ИначеЕсли Сумма < 10 Тогда
    Сумма = ОкруглитьДо(Сумма, 0.05);
ИначеЕсли Сумма < 50 Тогда
    Сумма = ОкруглитьДо(Сумма, 0.1);
ИначеЕсли Сумма < 100 Тогда
    Сумма = ОкруглитьДо(Сумма, 0.5);
ИначеЕсли Сумма < 500 Тогда
    Сумма = ОкруглитьДо(Сумма, 1);
Иначе
    Сумма = ОкруглитьДо(Сумма, 5);
КонецЕсли;
8 Ненавижу 1С
 
гуру
24.02.14
10:29
(7) в (6) универсальнее ))
9 1Сергей
 
24.02.14
10:30
(8) без моей формулы твои циферки будут висеть мёртвым грузом
10 ale-sarin
 
24.02.14
10:31
(6) А на зачем и верхняя и нижняя граница. Тогда еще пересечение проверять надо.
Одной хватит.
11 Chameleon1980
 
24.02.14
10:32
Округляем 123.123 до 50 копеек.

Окр(123.123/0,5)*0,5 = 123
12 Chameleon1980
 
24.02.14
10:34
чет не то
Счас соображу.
13 Ненавижу 1С
 
гуру
24.02.14
10:35
(10) пересечение проверяется на уровне целостности регистратора, зато проще в запросах работать

(9) "твоя" формула

Функция ОкрулитьДО(Число, Точность)
    Возврат Окр(Число / Точность) * Точность;
КонецФункции

слишком известна, чтобы она была реально твоей ))
14 Chameleon1980
 
24.02.14
10:38
округлите 8,71 по правилу 0,05
До пяти копеек получается.
15 Wobland
 
24.02.14
10:39
хм, ты намекаешь на веб-сервис на мисте? скорость округления будет не ахти
16 Chameleon1980
 
24.02.14
10:39
все праильно
17 Ненавижу 1С
 
гуру
24.02.14
10:39
(14) ты к чему это?
18 ale-sarin
 
24.02.14
10:40
(13) Я, на всякий случай прошу прощения, но что такое "пересечение проверяется на уровне целостности регистратора"? Мне не понятно.
19 Ненавижу 1С
 
гуру
24.02.14
10:41
(18) в событиях при записи регистра
20 ale-sarin
 
24.02.14
10:45
(19) Вот я и говорю в (10), что проверять придется пересечение. Естественно, не при округлении, а при записи в регистр.
21 grayshadow
 
24.02.14
10:48
нормальные наработки есть в округлении цены в злополучной УТ11
22 Ненавижу 1С
 
гуру
24.02.14
11:19
(20) но вы же крайне редко будете менять этот РС
23 ale-sarin
 
24.02.14
11:20
(22) Кому как. Я бы сделал только одну границу. Но это чисто мое мнение. Не настаиваю.
24 Ненавижу 1С
 
гуру
24.02.14
11:23
(23) с одной границей лишнее соединение при чтении, чтений очевидно будет больше записей
25 1Сергей
 
24.02.14
11:48
(24) +1
В этом есть смыл.
26 ale-sarin
 
24.02.14
11:49
(24) Возможно. Согласный.
27 МишельЛагранж
 
24.02.14
14:09
Самое главное - РС позволяет рулит границами из Предприятия, а код в (7) - надо постоянно править по ситуации.
28 fmrlex
 
24.02.14
14:15
(0) Ифигасе ты программист...
"Пацаны ваще ребята!"(с)
29 Chameleon1980
 
24.02.14
16:29
(28) что не так?
30 fmrlex
 
24.02.14
16:53
(29) Это задача уровня: "Ни у кого нет наработок сортировки пузырьком?"
31 МишельЛ
 
24.02.14
17:34
(30) давно ищу, никто не сознается ))
32 Wobland
 
24.02.14
17:47
(31) я бого реализовывал. будешь?
33 Hans
 
24.02.14
17:53
Задача не такая простая как кажется. Допустим мы округляем заказы, а реализуем частями -  это уже сложней.
34 МишельЛ
 
24.02.14
18:17
(32)чего реализовывал?
35 Wobland
 
24.02.14
18:19
(34) сортировка пресвятого Бого

Перем ГСЧ;

Процедура КнопкаВыполнитьНажатие(Кнопка)
    НН=8;
    М=Новый Массив(НН);
    Для й=0 По НН-1 Цикл
        М[й]=ГСЧ.СлучайноеЧисло(0, 256);
    КонецЦикла;
    
    й=0;
    Старт=ТекущаяУниверсальнаяДатаВМиллисекундах();
    Пока НЕ Отсортирован(М) Цикл
        й=й+1;
        Размешать(М);
    КонецЦикла;
    Финиш=ТекущаяУниверсальнаяДатаВМиллисекундах();
    Сообщить(""+(Финиш-Старт)+" мсек., "+й+" итераций");
КонецПроцедуры

Функция Отсортирован(М)
    Для й=1 По М.Количество()-1 Цикл
        Если М[й]<М[й-1] Тогда
            Возврат Ложь;
        КонецЕсли;
    КонецЦикла;
    Возврат Истина;
КонецФункции

Процедура Размешать(М)
    Н=М.Количество();
    Для й=0 По Н-1 Цикл
        ф=М[й];
        ж=ГСЧ.СлучайноеЧисло(0, Н-1);
        М[й]=М[ж];
        М[ж]=ф;
    КонецЦикла;
КонецПроцедуры

ГСЧ=Новый ГенераторСлучайныхЧисел;
36 МишельЛ
 
24.02.14
18:22
(35) это откуда?
ГенераторСлучайныхЧисел
37 Wobland
 
24.02.14
18:24
(36) штатная восьмёрка..
38 МишельЛ
 
24.02.14
18:24
(37) 8.2?
раньше не было
39 Wobland
 
24.02.14
18:25
(38) да вроде ещё в 8.1 завелось
40 МишельЛ
 
24.02.14
18:26
вроде когда оно мне понадобилось в кои веки, его не было еще....
41 МишельЛ
 
24.02.14
18:28
+ в 11 году еще не было:
http://kb.mista.ru/article.php?id=25
42 Wobland
 
24.02.14
18:29
обработка у меня в бардачке (для 8.1) с ГСЧ датирована 26.08.11
43 Wobland
 
24.02.14
18:33
порадовал комментарий ;)

    Для й=0 По Н Цикл
        стр=ТЗ.Добавить();
        // 1 - мальчик, 0 - девочка; блин, жизненно ;)
        стр.РебёнокРаз=ГСЧ.СлучайноеЧисло(0, 1);
        стр.РебёнокДва=ГСЧ.СлучайноеЧисло(0, 1);
    КонецЦикла;
44 МишельЛ
 
24.02.14
18:35
(43) 10 - ребенок
а что так напугало-то? ))
45 Wobland
 
24.02.14
18:36
...в одном ночном клубе когда-то вместо табличек на туалетный дверях были болт и гайка