Имя: Пароль:
1C
1C 7.7
v7: Помогите с правильной формулой округления копеек
0 Georg68
 
10.03.17
05:42
Делаю двойной ценник, где одна цена со скидкой 2% и эту цену надо округлить до 50коп в меньшую сторону. А округляется только до рубля.

Цел((Число(Печрубли) + Число(Печкопейки)/100)*0.98)   - это рубли
?((((число(Печрубли) + число(печкопейки)/100)*0.98) %1)*100 >= 50, "50", "00")    - это копейки

Что не так?
1 PuhUfa
 
10.03.17
05:47
Какие страхи сутра -)
А что у тебя в Печкопейки?
2 Рэйв
 
10.03.17
06:17
Если я правильно телепатирую,то..

Окр(Число(Печрубли+"."+Печкопейки),1,РежимОкругления.Окр15как10)
3 Рэйв
 
10.03.17
06:18
конечно если Печрубли и Печкопейки - строковые цифры, как подразумевается в сабже
4 Zmich
 
10.03.17
06:47
(3). Неправильно. Например, 6 копеек как отработает твой код?
5 Рэйв
 
10.03.17
07:02
(4)тогда попростому по крестьянски:-)

ч=Число(Печрубли+"."+Печкопейки);

А=?(ч-Цел(ч)>=0.5,Цел(ч)+0.5,Цел(ч));
Сообщить(""+Ч+"->"+А);
6 h-sp
 
10.03.17
07:59
(5) это же до рубля
7 Ёпрст
 
10.03.17
08:08
(0) Во всех типовых
глОкруглить()
там усё есть
8 Масянька
 
10.03.17
08:10
Функция глОкруглить(Числ, ПорядокОкругления) Экспорт
    Перем Рез;
    
    Если ПорядокОкругления = Перечисление.ПорядкиОкругления.ОкрТочно Тогда
        
        // арифметическое округление до 2-х знаков после запятой
        Рез = Окр(Числ, 2);
    Иначе
        // округление к верхней границе по заданному порядку
        
        // преобразуем порядок округления число
        Порядок            = Число(Строка(ПорядокОкругления));
        
        // вычислим количество интервалов, входящих в число
        КолвоИнтервал    = Числ / Порядок;
        
        // вычислим целое количество интервалов.
        КолвоИнтервалЦел= Цел(КолвоИнтервал);
        
        Если КолвоИнтервал = КолвоИнтервалЦел Тогда
            // Числа поделились нацело. Округлять не нужно.
            Рез    = Числ;
        Иначе
            Рез    = Порядок * (КолвоИнтервалЦел + 1);
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Рез;
КонецФункции // глОкруглить()

(7) Опередил, блин... :)
9 1dvd
 
10.03.17
08:16
делим число на 0,5
округляем до целых
умножаем на 0,5
10 h-sp
 
10.03.17
08:26
(8) нет тут до 50 копеек
11 Ёпрст
 
10.03.17
08:30
(10) есть
12 пипец
 
10.03.17
08:31
не правильные пчелы ... )))
13 Ёпрст
 
10.03.17
08:32
//******************************************************************************
// глОкруглить(Числ, ПорядокОкругления)
//
// Параметры:
//  Числ              - исходное число
//  ПорядокОкругления - элемент перечисления Порядки окгугления:
//  "шаг" округления (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
14 Ёпрст
 
10.03.17
08:33
Просто, Масяне вломы тебе всё копипастить, в надежде на то, что ты сам посмотришь хотя-бы описалово функции, и откроешь, наконец, пофигуратор
15 Масянька
 
10.03.17
08:36
(14) - А вы что и есть за меня будете?
- Ага.
(С)
16 Georg68
 
10.03.17
08:39
Господа, спасибо огромное за отзывчивость, но я, признаюсь, практически простой юзер, мне эту формулу то подсказали.
Можно попроще?
Что конкретно вставить в Свойства? Или всё же в модуле надо добавить?
17 НЕА123
 
10.03.17
08:39
Цена2=Цена*0.98;
Цена2Окр = Окр(Цена2*2,0,Окр15как10)/2
как-то так...
18 Ёпрст
 
10.03.17
08:41
(17) це клюшки, там нету Окр15как10
19 Georg68
 
10.03.17
08:43
Чет не получается
20 Масянька
 
10.03.17
08:43
(16) До чего дошел прогресс... (С)
Если простой юзер - позови спеца. Если все-таки хочешь сам - разбирайся.
21 НЕА123
 
10.03.17
08:43
РежимОкругления.Окр15как10
22 Georg68
 
10.03.17
08:43
Переменная не определена (Цена2Окр)
Цена2<<?>>=Цена*0.98;
23 Georg68
 
10.03.17
08:44
Нет у нас спецов в нашей деревне, так сам и маюсь
24 Масянька
 
10.03.17
08:47
(23) Тьфу! Деревня! (С)
Покажи код, где считаешь вторую цену.
25 Georg68
 
10.03.17
08:47
Цел((Число(Печрубли) + Число(Печкопейки)/100)*0.98)   - это рубли


Вот эта формула стоит в Свойствах рублей.
Она в принципе работает.

А копейки расположены в другой ячейке и у них другая формула, она округляет в меньшую сторону до рубля, хоть с 89 копеек, хоть с 5.
26 Масянька
 
10.03.17
08:49
(25) А на фига отдельно?
27 Georg68
 
10.03.17
08:50
ну копейки меньше по размеру, стоят повыше рубля в ценнике
жалко, что скрины сюда не вставить
28 Georg68
 
10.03.17
08:51
29 Масянька
 
10.03.17
08:51
(27) Скрины: клади/ложи сюда - https://pastenow.ru/. А потом сюда ссылку.
30 1dvd
 
10.03.17
08:51
(27) сначала нужно вычислить цену как число с копейками, а потом уже отделять рубли и копейки
31 Georg68
 
10.03.17
08:51
Открываются у вас скины?
32 1dvd
 
10.03.17
08:52
(28) лопни мои глаза...
33 Georg68
 
10.03.17
08:52
сам в шоке
34 НЕА123
 
10.03.17
08:52
ай, 7....


Окр((Число(Печрубли) + Число(Печкопейки)/100)*0.98*2,0,1)/2  -  Цел((Число(Печрубли) + Число(Печкопейки)/100)*0.98,0,Окр15как10)/2)
35 Georg68
 
10.03.17
08:53
Эту куда? В рубли или копейки?
36 1dvd
 
10.03.17
08:53
(34) иди уже отсюда, опять не правильно :)
37 Масянька
 
10.03.17
08:53
(32) Это ты мягко сказал...
(33) Сделай две цены (руб. коп.). По человечески.
38 НЕА123
 
10.03.17
08:53
*Окр15как10 -> 1
39 Масянька
 
10.03.17
08:54
(35) А покажи просто ценник (без свойств).
40 НЕА123
 
10.03.17
08:55
(36)
ладно. попыток - не убыток.
41 Georg68
 
10.03.17
08:57
42 Georg68
 
10.03.17
08:57
43 Масянька
 
10.03.17
09:08
(42) Покажи код, где делятся рубли и копейки.
44 Fedor-1971
 
10.03.17
09:11
(43) ТС засунул код вычисления в ячейки ТабличногоДокумента

(41)(42) вот блин, говорят же человеку "сделай по уму", нет будем доставать гланды автогеном через задний проход.
Порядок действий:
1. в печатном макете делаешь нормальные выражения ЦенРуб, ЦенКоп (если уж нужно то и Коп) - именно выражениями, а не вычислениями непойми чего и как
2. исправляешь процедуру Печать (или как она у тебя называется) примерно так:
ЦенРуб=глОкруглить(Цена, 1);
ЦенКоп=глОкруглить(Цена-5%, 0.5);
Коп=ЦенКоп-Цел(ЦенКоп);

Надеюсь Цена-5% сам осилишь?
45 Рэйв
 
10.03.17
09:12
(6)я так понял ему надо округление  назад с шагом 50 копеек. или я тогда не понимаю какая у него схема..
46 Масянька
 
10.03.17
09:12
(44) Ну, я надеюсь сама цена не в макете вычисляется?
47 Fedor-1971
 
10.03.17
09:16
(44) и да, перед тем как что-то делать устрой себе ликбез, как минимум посмотри на типовые "как там сделано", как максимум книжки почитай
(45) По ходу, ему нужно просто отобразить две цены "Продажи" (округление до 1 рубля) и "Со скидкой" (Цена - 5% с округлением до 0,5 рубля)
(46) Вроде как прямо в макете, там начало Число(????)
48 Fedor-1971
 
10.03.17
09:17
(47) ошибся (44) -> 44+
49 Georg68
 
10.03.17
09:28
Даже боюсь уже вас ) Понимаю, бесят такие как я.


Это

ЦенРуб=глОкруглить(Цена, 1);
ЦенКоп=глОкруглить(Цена-5%, 0.5);
Коп=ЦенКоп-Цел(ЦенКоп);

добавляю в Модуль?

А в Свойствах просто ставлю  ЦенРуб  ?
50 Georg68
 
10.03.17
09:29
Так не работает
51 Масянька
 
10.03.17
09:39
(50) Ты покажешь, где разбиваешь цену на рубли и копейки?!
Откуда берется вот это "Печрубли" и "Печкопейки"?
52 Georg68
 
10.03.17
09:41
Перем ПечФирма;
Перем ПечРубли, ПечКопейки;
        
//******************************************************************************
// ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
//
// Параметры:
//  Таб             - таблица, в которую выполняется вывод ценника
//  ПечНаименование - наименование ТМЦ
//  ПечЕдиница      - единица измерения ТМЦ
//  ПечРозн         - цена ТМЦ
//  Столбик         - номер столбика.
//  Ряд             - номер ряда
//
53 Georg68
 
10.03.17
09:41
Это в начале модуля
54 Georg68
 
10.03.17
09:42
ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена);
        ПечРозн    = глФРМ(ВремЦена); // печатаем по розничным ценам - поэтому глРубли

            ПечРубли    = Цел(ВремЦена);
        ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2);
55 Масянька
 
10.03.17
09:42
(52) Ё - очень терпеливый человек, а я нет!
Где ПечРубли=...?
56 Fedor-1971
 
10.03.17
09:43
(49) это просто 5, не, даже 5+
ты прочитал (44)? я написал куда добавить просто в модуль или в процедуру Печать?
На пальцах:
1. правая кнопка мыши на кнопке формы которая печатает ценники - свойства - вкладка "Дополнительно" - внимательно читаем поле "Формула"
2. идём в модуль и находим процедуру из поля "Формула"
3. Медитируем на тему "Куда вставить код из (44)"
4. По результатам - профит или "Вай-Вай ВСЁ сломал"
57 Масянька
 
10.03.17
09:46
(54) Ну, наконец-то...
Вот это "ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2)" меняй на "ПечКопейки = Прав(глОкруглить(ВремЦена, 0.5 ), 2)".
58 Georg68
 
10.03.17
09:47
Таак? Поменял.
А в Свойствах всё таки что ставим?
59 Масянька
 
10.03.17
09:48
(58) ПечКопейки.
60 Georg68
 
10.03.17
09:50
ПечКопейки = Прав(глОкруглить(ВремЦена, 0.5 ), 2)<<?>>
61 Georg68
 
10.03.17
09:53
Можно весь модуль сюда выложить?
62 Fedor-1971
 
10.03.17
09:54
(61) зачем?
ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2);
Чем должна заканчиваться строка?
63 Georg68
 
10.03.17
09:56
Мы же заменили эту строку

Вот это "ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2)" меняй на "ПечКопейки = Прав(глОкруглить(ВремЦена, 0.5 ), 2)".
64 Масянька
 
10.03.17
09:56
(60) точку с запятой ";" в конце поставь.
65 Масянька
 
10.03.17
09:57
(62) Надо его побить... Или путь Ё его укусит...
66 Fedor-1971
 
10.03.17
09:57
(63) заменили Часть строки, а не ВСЮ.
Там ещё есть ";" в конце, так мелочь, но интерпретатору она очень нужна
67 Georg68
 
10.03.17
09:58
Ура...
тупой ученик попался
Но копейки сейчас везде.. копейки   97коп, 68 коп
68 Масянька
 
10.03.17
09:59
(67) Не... Убить - мало... :)
В свойствах рубли оставь, а вместо той фигни про копейки напиши просто "Число(ПечКопейки)".
69 Georg68
 
10.03.17
10:04
Это в Свойствах копейки
https://dl.dropboxusercontent.com/u/80917909/55.jpg

Верно?
70 Масянька
 
10.03.17
10:06
(69) У тебя там было изначально -
?((((число(Печрубли) + число(печкопейки)/100)*0.98) %1)*100 >= 50, "50", "00")
Теперь должно быть -
(число(Печрубли) + число(печкопейки)
71 Fedor-1971
 
10.03.17
10:08
(67) Ученик? Дружище, ученик слушает и пытается вникнуть, а не как школяр играет в "Угадал - Не угадал"

(70) просто ПечКопейки, мы их уже получили в виде строки
72 Масянька
 
10.03.17
10:10
(71) Дык, надо-то чего?
73 Georg68
 
10.03.17
10:12
Я и пытаюсь вникнуть, но очень сложно когда учитель путается в показаниях все время.))
Последовательности в действиях не вижу.
В модуле я исправил
Вот это "ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2)" меняй на "ПечКопейки = Прав(глОкруглить(ВремЦена, 0.5 ), 2)".

Потом, после того как меня хотели побить, укусить и убить наконец... сказали что в Свойствах ставим  "просто "Число(ПечКопейки)"
Потом оказалось, что ставить надо  "Теперь должно быть -
(число(Печрубли) + число(печкопейки)"
Ну как тут понять то)))
74 Fedor-1971
 
10.03.17
10:14
(73) Определись: у тебя в макете дважды печатаются копейки, там параметры разные? Название ПечКопейки - там где цена со скидкой? а как называется нечто там где просто цена? (в твоей ситуации, должна быть просто строка "00")
75 Georg68
 
10.03.17
10:15
Первую цену я вообще не трогаю, ту, которая без скидки.
76 Georg68
 
10.03.17
10:15
В ней стоит   ПечКопейки
77 Масянька
 
10.03.17
10:16
(73) Афигеть... Какой строптивый ученик попался...
78 Georg68
 
10.03.17
10:16
Так старый же, старше Федора на 3 года ))
79 Масянька
 
10.03.17
10:16
(76) Ты сейчас корежишь то, что на скрине в (28)?
80 Georg68
 
10.03.17
10:17
так всё уж переправил на 10 раз
обратно сделать?
81 Fedor-1971
 
10.03.17
10:18
(80) не дёргайся излишне
(75) хорошо, пойдём другим путём:
Смотрим на макет:
ечРуб - как называется и что обозначает
Копе - как я понимаю копейки, как называется и что обозначает
Числ - как называется и что обозначает
ечК - как называется и что обозначает
82 Fedor-1971
 
10.03.17
10:19
81+ макет который в (69), если там формулы пиши их
83 Масянька
 
10.03.17
10:20
(80) Бэкап надо делать.
84 Georg68
 
10.03.17
10:23
Итак.
Первая цена, которая без скидки.
Свойства рубли  -  ПечРубли
Свойства копейки  - ПечКопейки

Копейки сейчас не округляются
85 Georg68
 
10.03.17
10:25
Может у меня нет глОкруглить , конфигурация очень древняя и переписанная вся
86 Fedor-1971
 
10.03.17
10:25
(84) не так по каждой строке, что-бы было понимание, просто дополни мои строки данными (тут формула из макета): назначение
87 Fedor-1971
 
10.03.17
10:26
(85) ты бы получил ошибку, типа "такой функции нету"
88 Fedor-1971
 
10.03.17
10:27
86+ только пиши текущее состояние из макета
89 Georg68
 
10.03.17
10:27
ну да
90 Fedor-1971
 
10.03.17
10:28
(89) что ну да? дополни строки из (81)
91 se85
 
10.03.17
10:28
Хех это уже анекдот какой то получается, может кто нибудь подключится к нему удаленно да сделает?!
92 Fedor-1971
 
10.03.17
10:29
(91) а смысл? Он и дальше будет непонимать, что делает. Раз записался в ученики будет насильно учиться
93 Georg68
 
10.03.17
10:32
Нет, ну делов то в принципе на копейку. Только упорядочить надо этот мозговой штурм.

1. Что правим в модуле?
2. Что пишем в Свойствах.
94 se85
 
10.03.17
10:32
(92) Что б чему то обучить, обучаемый должен хотя бы что то понимать!!! Наш же клиент не понимает что и как работает ибо ни когда с этим не сталкивался :(
95 Georg68
 
10.03.17
10:33
Согласен, в формулах я не понимаю, я ценники сам делаю, размеры и простые выражения.
Но это сложная формула.
96 Georg68
 
10.03.17
10:34
Потому и прошу помощи. Форум же для этого и придумали или я не прав? Погнобить тупых юзеров придумали форум?)) Ну так с этим нормально.)
97 Fedor-1971
 
10.03.17
10:35
(93) блин, вежливо, матом тебя прошу, дополни строки из (81)
потом до модуля доберёмся
(94) вот и разберётся и станет аксакалом и будет других учить
98 Georg68
 
10.03.17
10:38
Первая цена, которая без скидки.
Свойства рубли  -  ПечРубли
Свойства копейки  - ПечКопейки


Вторая
Рубли   -    (число(Печрубли) + число(печкопейки))
Копейки свою вставил обратно
?((((число(Печрубли) + число(печкопейки)/100)*0.98) %1)*100 >= 50, "50", "00")
99 Georg68
 
10.03.17
10:40
В ценнике сейчас такая фигня
https://dl.dropboxusercontent.com/u/80917909/Безымянный.jpg

Поменялись местами цены, так как переменную в первой цене мы не трогали
100 Fedor-1971
 
10.03.17
10:40
(98) ну просил же, оставь начало потом - потом в () формула из макета, потом словами назначение. что бы получилось одной строкой привязка ячейки макета и её смысла
101 Georg68
 
10.03.17
10:41
))) ваще понятно
а написать просто выражение не проще
102 Fedor-1971
 
10.03.17
10:43
(101) нет, ты потом запутаешься при изменении и сколь нибудь сложная логика заполнения ячейки окончится вешалкой при реализации
103 Fedor-1971
 
10.03.17
10:43
102+ давай как-то ускорься, мне тоже работать надо
104 Georg68
 
10.03.17
10:47
Так затык полный уже
105 Georg68
 
10.03.17
10:47
если до того была какая-то смутная картинка, теперь нет совсем
106 Fedor-1971
 
10.03.17
10:48
(104) Ещё нет, так движемся самым простым путём:
Устанавлиай в макете:
ечРуб - ЦенаПродажи
Копе - КопейкиПродажи
Числ - СкидкаЦена
ечК - СкидкаКопейки

Поясни:
ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена); - это цена со скидкой или продажи
107 Georg68
 
10.03.17
10:49
Это цена продажи была
108 Это_mike
 
10.03.17
10:50
(93) это не "мозговой штурм". это какой-то "безмозглый"
109 se85
 
10.03.17
10:51
(107) Не скромный вопрос, а ты все эти операции делаешь на тестовой базе или рабочей?!
110 Georg68
 
10.03.17
10:52
это какой-то "безмозглый"
Не спорю. В каждом деле должны быть профессионалы.
Вы в моем деле тоже наверняка не шарите, а я ас ))
Я и прошу помочь с формулой, а вы от меня много ожидаете просто ))
111 Georg68
 
10.03.17
10:52
Макет ценника то можно на любой править
112 Fedor-1971
 
10.03.17
11:09
(107) замечтательно:
ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена);
ЦенаПродажи=глОкруглить(ВремЦена , 1);
КопейкиПродажи=Прав(Строка(ЦенаПродажи-Цел(ЦенаПродажи)),2); // на случай если  вздумаешь оставить копейки в Цене продажи
СкидкаЦена=глОкруглить(Окр(ВремЦена-(ВремЦена*0.05)),2,1), 0.5); //отняли 5% и округлили до 50 коп.
СкидкаКопейки=Прав(Строка(СкидкаЦена-Цел(СкидкаЦена)),2); // твои копейки
Теперь соотноси в голове: в макете ты указал выражение в ячейке (не длинную формулу, а именно переменную, которую можешь заполнять любым способом, хоть двумя экранами кода). В процедуре заполнения макета просто вычисляешь нужное тебе значение

(110) Нескромный вопрос: ас в чём? (торговля? металлообработка (зубофрезерные станки? Электроэррозионные станки? компрессорное оборудование?), экспедирование?, документооборот? - конфигурации делал, компрессоры - до уровня конструктора)
Это типа я похвастался
113 Fedor-1971
 
10.03.17
11:14
112+ Хотя немного не так, вот так

ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена);
ЦенаПродажи=глОкруглить(ВремЦена , 1);
КопейкиПродажи=Прав(Строка(ЦенаПродажи-Цел(ЦенаПродажи)),2);// на случай если  вздумаешь оставить копейки в Цене продажи
ЦенаПродажи=Цел(ЦенаПродажи);
СкидкаЦена=глОкруглить(Окр(ВремЦена-(ВремЦена*0.05),2,1), 0.5);//отняли 5% и округлили до 50 коп.
СкидкаКопейки=Прав(Строка(СкидкаЦена-Цел(СкидкаЦена)),2); // твои копейки
СкидкаЦена=Цел(СкидкаЦена);
114 Georg68
 
10.03.17
11:22
Это в Модуль ставим? В начале можно?
А в Свойствах всё таки что оставляем?
115 Fedor-1971
 
10.03.17
11:34
(114) код ставим после
ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена); - если процедура глобальная, то ничего не заменяем, просто добавляем код.
В свойствах ячейки макета как в (106) или по смыслу, где какая цифра должна быть - название заполненной переменной
116 Georg68
 
10.03.17
12:04
Не могу понять я Вас , Федор. Переоцениваете мои способности всё же.
117 Fedor-1971
 
10.03.17
12:12
(116) Которая часть непонятна?
По макету: открываем свойства ячейки и вместо "бла-бла" пишем наименование переменной, например, открываем свойства ячейки, где должна быть цена продажи, всё чистим и пишем "ЦенаПродажи" и т.д. имена переменных известны из (113)

По коду: ищем строку ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена); и после неё вставляем (113)
118 Georg68
 
10.03.17
12:17
ЦенаПродажи<<?>>
Переменная не определена (ЦенаПродажи)
119 Fedor-1971
 
10.03.17
12:21
(118) информативно, это откуда?
120 Georg68
 
10.03.17
12:21
Это после изменений выдает при попытке вывести ценник
121 Georg68
 
10.03.17
12:22
В Свойствах пишу СкидкаКопейки  ?
122 Georg68
 
10.03.17
12:24
Докум.ВыбратьСтроки();
    Пока Докум.ПолучитьСтроку() = 1 Цикл
        Если ДокумВид = "ПереоценкаРозница" Тогда // пропускаем ТМЦ, где цена не менялась
             Если Докум.ЦенаСтарая = Докум.ЦенаНовая Тогда
                 Продолжить;    
             КонецЕсли;
        КонецЕсли;
         ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена);    
         
ЦенаПродажи=глОкруглить(ВремЦена , 1);
КопейкиПродажи=Прав(Строка(ЦенаПродажи-Цел(ЦенаПродажи)),2); // на случай если  вздумаешь оставить копейки в Цене продажи

ЦенаПродажи=Цел(ЦенаПродажи);
СкидкаЦена=глОкруглить(Окр(ВремЦена-(ВремЦена*0.02),2,1), 0.5); //отняли 5% и округлили до 50 коп.

СкидкаКопейки=Прав(Строка(СкидкаЦена-Цел(СкидкаЦена)),2); // твои копейки

СкидкаЦена=Цел(СкидкаЦена);
         
         
         
         
         
        ПечРозн    = глФРМ(ВремЦена); // печатаем по розничным ценам - поэтому глРубли
123 Fedor-1971
 
10.03.17
12:27
(120) понятно, глФРМ(ВремЦена) - вот это выводит ценник или делает нечто другое?
где реализован вывод ценника? Вылаживай всю процедуру печати из модуля
(121) Да для ячейки, где должны быть скидочные копейки
124 Georg68
 
10.03.17
12:28
Перем ПечФирма;
Перем ПечРубли, ПечКопейки;
//******************************************************************************
// ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
//
// Параметры:
//  Таб             - таблица, в которую выполняется вывод ценника
//  ПечНаименование - наименование ТМЦ
//  ПечЕдиница      - единица измерения ТМЦ
//  ПечРозн         - цена ТМЦ
//  Столбик         - номер столбика.
//  Ряд             - номер ряда
//
// Возвращаемое значение:
//  Нет.
//
// Описание:
//  Добавляет ценник в таблицу.
//
Процедура ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд,Производитель, ПечКод="") Экспорт
    
     Столбик = Столбик + 1;
    
     Колонка     = ((Столбик - 1) % 3) + 1;
     Ряд          = Цел(((Столбик - 1) % 5)/1) + 1;
    
     Если (Колонка = 1) И (Ряд = 1) И (Столбик > 1) Тогда
          Таб.НоваяСтраница();
     КонецЕсли;
    
     Если Колонка = 1 Тогда
          Таб.ВывестиСекцию("Товар|Ценник");
     Иначе
          Таб.ПрисоединитьСекцию("Товар|Ценник");
     КонецЕсли;
    
КонецПроцедуры // ДобавитьЦенник()

//******************************************************************************
// Печать(Докум, Устройство=0, КолвоКопий=1)
//
// Параметры:
//  Докум      - контекст выводимого документа (ПереоценкаРозница, ПоступлениеТМЦРозница),
//  Устройство - если 0, то вывод на экран, иначе - на принтер,
//               необязателен, по умолчанию - на экран,
//  КолвоКопий - количество копий, по умолчанию - 1.
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Формирует таблицу с ценниками.
//
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
    
    ДокумВид = Докум.Вид();
    Если ДокумВид = "ПереоценкаРозница" Тогда
        ИдРознЦена = "ЦенаНовая";
    ИначеЕсли ДокумВид = "ПоступлениеТМЦРозница" Тогда
        ИдРознЦена = "РозничнаяЦена";
    ИначеЕсли ДокумВид = "РеализацияРозница" Тогда
        ИдРознЦена = "Цена";
    ИначеЕсли ДокумВид = "ПеремещениеТМЦ" Тогда
        Если Докум.СкладПолучатель.РозничныйСклад = 1 Тогда
            ИдРознЦена = "Цена";
        Иначе
            Предупреждение("Нельзя печатать ценники при перемещении
                           |ТМЦ на оптовый склад!", 60);
            Возврат;    
        КонецЕсли;
    Иначе
        Возврат;    
    КонецЕсли;
    
    //  Создание Таблицы для выходного отчета
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    
    ПечФирма = СокрЛП(Докум.Фирма.ЮрЛицо.ПолнНаименование);
    
    Столбик = 0;
    Ряд     = 0;
    
    Докум.ВыбратьСтроки();
    Пока Докум.ПолучитьСтроку() = 1 Цикл
        Если ДокумВид = "ПереоценкаРозница" Тогда // пропускаем ТМЦ, где цена не менялась
             Если Докум.ЦенаСтарая = Докум.ЦенаНовая Тогда
                 Продолжить;    
             КонецЕсли;
        КонецЕсли;
         ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена);    
         
ЦенаПродажи=глОкруглить(ВремЦена , 1);
КопейкиПродажи=Прав(Строка(ЦенаПродажи-Цел(ЦенаПродажи)),2); // на случай если  вздумаешь оставить копейки в Цене продажи

ЦенаПродажи=Цел(ЦенаПродажи);
СкидкаЦена=глОкруглить(Окр(ВремЦена-(ВремЦена*0.02),2,1), 0.5); //отняли 5% и округлили до 50 коп.

СкидкаКопейки=Прав(Строка(СкидкаЦена-Цел(СкидкаЦена)),2); // твои копейки

СкидкаЦена=Цел(СкидкаЦена);
         
         
         
         
         
        ПечРозн    = глФРМ(ВремЦена); // печатаем по розничным ценам - поэтому глРубли
            // ((( dk 16/04/2013
        ПечРубли    = Цел(ВремЦена);
        ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2);
        //сообщить("--------------------------------------------------------------------------------");
    //    Сообщить(ВремЦена);
        //сообщить(ПечКопейки);
        // dk )))
        
        
        
        ПечНаименованиеТМЦ = СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "")+"/"+Докум.Номенклатура.Код+"/";
        ДобавитьЦенник(Таб, Докум.Фирма, ПечНаименованиеТМЦ, Докум.Единица, ПечРозн, Столбик, Ряд,СокрЛП(Докум.Номенклатура.СтранаПроисхождения));
        глОживить(1);
    КонецЦикла;
    
    Если Устройство = 0 Тогда
        Таб.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Товарные ценники","");
    Иначе    
        Таб.ПараметрыСтраницы(,,,,,,,,,1,,);
        Таб.КоличествоЭкземпляров(КолвоКопий);
        Таб.Напечатать(0);
    КонецЕсли;
    
КонецПроцедуры // Печать()

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//  Кнопка "Печать"
//
// Описание:
//
Процедура ПоКнопкеПечать()
    
    Если Док.Выбран() = 0 Тогда
        Предупреждение("Не выбран документ!", 60);
        Возврат;
    КонецЕсли;
    
    Печать(Док);
    
КонецПроцедуры // ПоКнопкеПечать()

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()
    
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        
        Докум      = Форма.Параметр.Получить("Контекст");
        Устройство = Форма.Параметр.Получить("Устройство");
        КолвоКопий = Форма.Параметр.Получить("КоличествоКопий");
    
        Печать(Докум, Устройство, КолвоКопий);
        Статусвозврата(0);
        Возврат;
    КонецЕсли;
    
КонецПроцедуры // ПриОткрытии()
125 Злопчинский
 
10.03.17
12:28
помедленнее, я записываю!
126 Fedor-1971
 
10.03.17
12:40
(124)измени:
глФРМ(ВремЦена) - если это вычисление цены со скидкой, то
СкидкаЦена=глОкруглить(глФРМ(ВремЦена),2,1), 0.5);

Процедура ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд,Производитель, ПечКод="", ЦенаПродажи="", КопейкиПродажи="", СкидкаЦена="", СкидкаКопейки="") Экспорт

ДобавитьЦенник(Таб, Докум.Фирма, ПечНаименованиеТМЦ, Докум.Единица, ПечРозн, Столбик, Ряд,СокрЛП(Докум.Номенклатура.СтранаПроисхождения), ЦенаПродажи, КопейкиПродажи, СкидкаЦена, СкидкаКопейки);

и будет тебе счасце
127 Fedor-1971
 
10.03.17
12:44
(125) стенограмма заседания совета профилактики безграмотности?
ТС реально далёк от программирования, круто вляпался пытаясь что-то исправить
128 Fedor-1971
 
10.03.17
12:47
126+ вот так: СкидкаЦена=глОкруглить(глФРМ(ВремЦена), 0.5); Остались лишние параметры. Пока можешь не менять, отладь то что сейчас есть
129 Georg68
 
10.03.17
12:56
Нет счастья

{G:\1CBASES\DB\EXTFORMS\PRNFORMS\___ЦЕНА_6ШТ_2_СМЕСИ.ERT(127)}: Переменная не определена (Таб)
Таб<<?>>.Напечатать(0);
{G:\1CBASES\DB\EXTFORMS\PRNFORMS\___ЦЕНА_6ШТ_2_СМЕСИ.ERT(128)}: Переменная не определена (Таб)
КонецЕсли;<<?>>
{G:\1CBASES\DB\EXTFORMS\PRNFORMS\___ЦЕНА_6ШТ_2_СМЕСИ.ERT(129)}: Обнаружено логическое завершение исходного текста модуля
130 Fedor-1971
 
10.03.17
12:59
(129) показывай код, что у тебя получилось
131 Georg68
 
10.03.17
12:59
А вот так
СкидкаЦена=глОкруглить(глФРМ(ВремЦена), 0.5);

вот так
КолвоИнтервал    = Числ / Порядок;
{Глобальный модуль(243)}: Операция деления не определена для строковых величин
132 Fedor-1971
 
10.03.17
12:59
130+ опять где-то не поставил ";"
133 Georg68
 
10.03.17
13:00
Перем ПечФирма;
Перем ПечРубли, ПечКопейки;
//******************************************************************************
// ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
//
// Параметры:
//  Таб             - таблица, в которую выполняется вывод ценника
//  ПечНаименование - наименование ТМЦ
//  ПечЕдиница      - единица измерения ТМЦ
//  ПечРозн         - цена ТМЦ
//  Столбик         - номер столбика.
//  Ряд             - номер ряда
//
// Возвращаемое значение:
//  Нет.
//
// Описание:
//  Добавляет ценник в таблицу.
//

      Процедура ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд,Производитель, ПечКод="", ЦенаПродажи="", КопейкиПродажи="", СкидкаЦена="", СкидкаКопейки="") Экспорт
     Столбик = Столбик + 1;
    
     Колонка     = ((Столбик - 1) % 3) + 1;
     Ряд          = Цел(((Столбик - 1) % 5)/1) + 1;
    
     Если (Колонка = 1) И (Ряд = 1) И (Столбик > 1) Тогда
          Таб.НоваяСтраница();
     КонецЕсли;
    
     Если Колонка = 1 Тогда
          Таб.ВывестиСекцию("Товар|Ценник");
     Иначе
          Таб.ПрисоединитьСекцию("Товар|Ценник");
     КонецЕсли;
    
КонецПроцедуры // ДобавитьЦенник()

//******************************************************************************
// Печать(Докум, Устройство=0, КолвоКопий=1)
//
// Параметры:
//  Докум      - контекст выводимого документа (ПереоценкаРозница, ПоступлениеТМЦРозница),
//  Устройство - если 0, то вывод на экран, иначе - на принтер,
//               необязателен, по умолчанию - на экран,
//  КолвоКопий - количество копий, по умолчанию - 1.
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Формирует таблицу с ценниками.
//
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
    
    ДокумВид = Докум.Вид();
    Если ДокумВид = "ПереоценкаРозница" Тогда
        ИдРознЦена = "ЦенаНовая";
    ИначеЕсли ДокумВид = "ПоступлениеТМЦРозница" Тогда
        ИдРознЦена = "РозничнаяЦена";
    ИначеЕсли ДокумВид = "РеализацияРозница" Тогда
        ИдРознЦена = "Цена";
    ИначеЕсли ДокумВид = "ПеремещениеТМЦ" Тогда
        Если Докум.СкладПолучатель.РозничныйСклад = 1 Тогда
            ИдРознЦена = "Цена";
        Иначе
            Предупреждение("Нельзя печатать ценники при перемещении
                           |ТМЦ на оптовый склад!", 60);
            Возврат;    
        КонецЕсли;
    Иначе
        Возврат;    
    КонецЕсли;
    
    //  Создание Таблицы для выходного отчета
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    
    ПечФирма = СокрЛП(Докум.Фирма.ЮрЛицо.ПолнНаименование);
    
    Столбик = 0;
    Ряд     = 0;
    
    Докум.ВыбратьСтроки();
    Пока Докум.ПолучитьСтроку() = 1 Цикл
        Если ДокумВид = "ПереоценкаРозница" Тогда // пропускаем ТМЦ, где цена не менялась
             Если Докум.ЦенаСтарая = Докум.ЦенаНовая Тогда
                 Продолжить;    
             КонецЕсли;
        КонецЕсли;
         ВремЦена = Докум.ПолучитьАтрибут(ИдРознЦена);    
         
ЦенаПродажи=глОкруглить(ВремЦена , 1);
КопейкиПродажи=Прав(Строка(ЦенаПродажи-Цел(ЦенаПродажи)),2); // на случай если  вздумаешь оставить копейки в Цене продажи

ЦенаПродажи=Цел(ЦенаПродажи);
СкидкаЦена=глОкруглить(глФРМ(ВремЦена), 0.2); //отняли 5% и округлили до 50 коп.

СкидкаКопейки=Прав(Строка(СкидкаЦена-Цел(СкидкаЦена)),2); // твои копейки

СкидкаЦена=Цел(СкидкаЦена);
                             
         
        ПечРозн    = глФРМ(ВремЦена); // печатаем по розничным ценам - поэтому глРубли
            // ((( dk 16/04/2013
        ПечРубли    = Цел(ВремЦена);
        ПечКопейки  = Прав("00" + ((ВремЦена*100) % 100), 2);
        //сообщить("--------------------------------------------------------------------------------");
    //    Сообщить(ВремЦена);
        //сообщить(ПечКопейки);
        // dk )))
        
        
        
        ПечНаименованиеТМЦ = СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "")+"/"+Докум.Номенклатура.Код+"/";
        ДобавитьЦенник(Таб, Докум.Фирма, ПечНаименованиеТМЦ, Докум.Единица, ПечРозн, Столбик, Ряд,СокрЛП(Докум.Номенклатура.СтранаПроисхождения), ЦенаПродажи, КопейкиПродажи, СкидкаЦена, СкидкаКопейки);

        глОживить(1);
    КонецЦикла;
    
    Если Устройство = 0 Тогда
        Таб.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Товарные ценники","");
    Иначе    
        Таб.ПараметрыСтраницы(,,,,,,,,,1,,);
        Таб.КоличествоЭкземпляров(КолвоКопий);
        Таб.Напечатать(0);
    КонецЕсли;
    
КонецПроцедуры // Печать()

//******************************************************************************
// ПоКнопкеПечать()
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//  Кнопка "Печать"
//
// Описание:
//
Процедура ПоКнопкеПечать()
    
    Если Док.Выбран() = 0 Тогда
        Предупреждение("Не выбран документ!", 60);
        Возврат;
    КонецЕсли;
    
    Печать(Док);
    
КонецПроцедуры // ПоКнопкеПечать()

//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()
    
    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
        
        Докум      = Форма.Параметр.Получить("Контекст");
        Устройство = Форма.Параметр.Получить("Устройство");
        КолвоКопий = Форма.Параметр.Получить("КоличествоКопий");
    
        Печать(Докум, Устройство, КолвоКопий);
        Статусвозврата(0);
        Возврат;
    КонецЕсли;
    
КонецПроцедуры // ПриОткрытии()
134 Fedor-1971
 
10.03.17
14:40
(131) тогда засада,
делай так СкидкаЦена=глОкруглить(Число(глФРМ(ВремЦена)), 0.5);
или верни назад то что было

(133) по коду ошибки не видно, кликни в конфигураторе по тексту ошибки и увидишь где она
135 Georg68
 
10.03.17
14:44
Вооот. Пальцев то было у всех, а уж если профи умывают руки, нефиг на простого юзера наезжать ))
136 Масянька
 
10.03.17
14:46
Я-то думала, что уже всё работает...
137 Fedor-1971
 
10.03.17
14:47
(135) о как простой юзер, ты откуда взял текст ошибки?
138 Fedor-1971
 
10.03.17
14:48
137+ или предлагаешь угадать что в твоём коде строка 127?
139 Georg68
 
10.03.17
14:50
Чего уж я ошибку скопировать не могу.
140 Georg68
 
10.03.17
14:51
Ничего не работает, возвращаюсь первоначальному варианту, там хоть до рубля округлял.
141 Fedor-1971
 
10.03.17
14:52
(140) ну это как знаешь. Так и не ответил где вылезла ошибка в конфигураторе или в пользовательском режиме
142 Georg68
 
10.03.17
14:53
В пользовательском, когда на печать вывожу
143 Масянька
 
10.03.17
14:55
(135) Профи (это не про меня) - не умывают руки. Просто сложно "на пальцах" объяснять.
Если есть TeamViewer - давай, пока есть время.
144 Fedor-1971
 
10.03.17
14:55
(142) и не даёт возможности щёлкнуть по ошибке? Чай обманываешь, ученик.
145 Georg68
 
10.03.17
14:57
Есть ТИМ
146 Georg68
 
10.03.17
14:57
Готовы?
147 Fedor-1971
 
10.03.17
14:59
(146) давай ID и Пароль
148 Fedor-1971
 
10.03.17
15:00
(147) есть 10 минут
149 Georg68
 
10.03.17
15:03
477 396 503
150 Georg68
 
10.03.17
15:03
a4k3m4
151 Georg68
 
10.03.17
15:04
2 монитора
152 Fedor-1971
 
10.03.17
15:04
(151) ща обновлюсь
153 Fedor-1971
 
10.03.17
15:06
869 320 753 добавь в белый список
154 Georg68
 
10.03.17
15:07
и так пройдет
155 Fedor-1971
 
10.03.17
15:08
(154) "Вы находитесь в чёрном списке этого партнёра или не входите в белый список"
156 Fedor-1971
 
10.03.17
15:10
уже вернул?
157 Georg68
 
10.03.17
15:10
угу
158 Fedor-1971
 
10.03.17
15:11
ладно, чего не хватает в таком раскладе?
159 Georg68
 
10.03.17
15:12
округление в минус до рубля
хот елось бы до 50коп
160 Масянька
 
10.03.17
15:15
(147) Вот чего раньше молчал?
161 Fedor-1971
 
10.03.17
15:18
тут надо копейки?
162 Georg68
 
10.03.17
15:18
до 50коп
163 Fedor-1971
 
10.03.17
15:25
пробуй
164 Fedor-1971
 
10.03.17
15:40
Держи и радуйся, 15 минут
165 Fedor-1971
 
10.03.17
15:40
с наведением красоты
166 Georg68
 
10.03.17
15:41
Математически округляет сейчас.
Ну фиг с ним
167 Fedor-1971
 
10.03.17
15:42
(166) а как тебе нужно?
168 Georg68
 
10.03.17
15:42
в меньшую сторону
169 Georg68
 
10.03.17
15:43
в первом топике написал
170 Georg68
 
10.03.17
15:43
да ладно
171 Georg68
 
10.03.17
15:44
номер телефона или карточку для дотации можно?
172 Fedor-1971
 
10.03.17
15:46
(171) В РБ тебе золотой платёж будет
тогда так
СкидкаКопейки=?(СкидкаКопейки > 50, 50, 0);
173 Fedor-1971
 
10.03.17
15:47
Сам модернизируешь или показать?
174 Fedor-1971
 
10.03.17
16:03
173 Только, Бога ради, в модуле, а не в ячейке печатной формы
175 Georg68
 
10.03.17
16:05
вот эту строку изменить?

СкидкаКопейки=?(СкидкаКопейки=0,"00",Строка(СкидкаКопейки));
176 Fedor-1971
 
10.03.17
16:07
(175) да, СкидкаКопейки=?(СкидкаКопейки >= 50, "50", "00");
177 Georg68
 
10.03.17
16:13
только <= надо знак
178 Georg68
 
10.03.17
16:15
Всё равно он непонятно считает, но с процентами всегда так
179 azernot
 
10.03.17
16:25
Функция ОкруглитьДО(ИсходноеЧисло, РазрядОкругления = 0.5, РежимОкругления = 3);
    
    ОстатокОтДеления = ИсходноеЧисло % РазрядОкругления;
    Если РежимОкругления = 1 Тогда
        //Обычный по мат. правилам
        Результат = ИсходноеЧисло - ?(ОстатокОТДеления>=(РазрядОкругления/2), -РазрядОкругления + ОстатокОТДеления, ОстатокОТДеления);
    ИначеЕсли РежимОкругления = 2 Тогда
        //Обычный по мат. правилам, 0.5 округляется в меньшую сторону
        Результат = ИсходноеЧисло - ?(ОстатокОТДеления>(РазрядОкругления/2), -РазрядОкругления + ОстатокОТДеления, ОстатокОТДеления);
    ИначеЕсли РежимОкругления = 3 Тогда
        //В меньшую сторону
        Результат = ИсходноеЧисло - ОстатокОтДеления;
    ИначеЕсли РежимОкругления = 4 Тогда
        //В большую сторону
        Результат = ИсходноеЧисло - ОстатокОтДеления + РазрядОкругления;
    КонецЕсли;
    
    Возврат Результат;
КонецФункции
180 Fedor-1971
 
10.03.17
16:48
(177) в таком варианте 205,2 = 205,50, а 205,52 = 205,00 как-то гнутенько и даже близко на округление не похоже.
Там где идёт вычисление СкидкаКопейки замени 0,5 на 0,01 и получишь цену округлённую до копеек, дальше строка из (176)
181 Fedor-1971
 
10.03.17
16:55
180 не, исправляй в вычислении СкидкаЦена, там есть округление до 0,5