Автор Тема: Проблема копеек: что это и как её решать?  (Прочитано 36885 раз)

0 Пользователей и 1 Гость просматривают эту тему.

k_v_v

  • Модератор
  • Новичок
  • *****
  • Сообщений: 0
  • ФИО: Кузин Владимир
Проблема копеек: что это и как её решать?
« Ответ #30 : Октябрь 15, 2011, 08:41:00 am »
Romdavid,
 Реальный остаток в регистре будет сохраняться с точностью заданной в конфигураторе. Это как в Excel установленная галочка "Точность как на экране".
 А "проблема копеек" - это когда рассчитывают цену (Цена=СуммаОстаток/КоличествоОстаток), записывают ее с точностью до 2 знаков, а потом Пытаются ровнехенько списывать Цена*КоличествоСписания. Вот тут в конце и повисают копейки.

Кенгуру

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Кенгуру
Проблема копеек: что это и как её решать?
« Ответ #31 : Октябрь 17, 2011, 11:20:56 am »
Quote (k_v_v)
А "проблема копеек" - это когда рассчитывают цену (Цена=СуммаОстаток/КоличествоОстаток), записывают ее с точностью до 2 знаков, а потом Пытаются ровнехенько списывать Цена*КоличествоСписания. Вот тут в конце и повисают копейки.

 Спасибо))


Калифорниец

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Игорь
Проблема копеек: что это и как её решать?
« Ответ #32 : Октябрь 29, 2013, 10:40:29 am »
Цитата Romdavid ()
aveegoРазница между

 СуммаСписания = СуммаОстаток * КоличествоСписания / КоличествоОстаток
 и
 СуммаСписания = СуммаОстаток / КоличествоОстаток * КоличествоСписания

 есть. В первом случае точность полученного результата будет выше.

 По-моему абсолютно идентичны. Скобок же здесь нет. Тут ведь приоритет арифметических операций роль играет, у умножения приоритет выше, поэтому 1С будет вычислять вторую формулу как первую. Разве нет?

java

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Владимир
Проблема копеек: что это и как её решать?
« Ответ #33 : Октябрь 29, 2013, 11:16:39 am »
Код
               
               Если  ОсталосьСписать >=Выборка.КолвоПарт тогда
                   КолвоСписания=Выборка.КолвоПарт;
                   СуммаСписания=Выборка.СуммаПарт;
               Иначе
                   КолвоСписания=ОсталосьСписать;
                   СуммаСписания=ОсталосьСписать* Выборка.СуммаПарт/Выборка.КолвоПарт;
               КонецЕсли;
                  
               ОсталосьСписать=ОсталосьСписать-КолвоСписания;
                  
               ...
               Движение.Сумма = СуммаСписания;
               Движение.КолвоКт = КолвоСписания;
               ....


 Добавлено (29.10.2013, 11:16)
 ---------------------------------------------
 
Цитата Калифорниец ()
1С будет вычислять вторую формулу как первую. Разве нет?

 1) неточность математическая из-за бесконечных дробей :
 3/17*17=2,9999....
 3*17/17=3

 2) неточность из-за ограниченной точности реквизитов:
 хорошо, если это переменные вам известные, а что если тип уже определен причем с фиксированной точностью например 2 знака после запятой.
 3/1.000.000*500.000 и получаете 0,00

 Лучше уж  3*500.000/1.000.000 и получить 1,50

 Как видите, тут уже не "проблема копеек", а "проблема рублей" может всплыть, если точность жестко задана
« Последнее редактирование: Октябрь 29, 2013, 11:39:40 am от Владимир »

mister-x

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Проблема копеек: что это и как её решать?
« Ответ #34 : Октябрь 29, 2013, 01:04:47 pm »
здесь http://expert.chistov.pro/public/102366/ Несколько рекомендаций готовящимся к 1С:Специалист по Платформе оговорена проблема копеек так:
 
Цитата
7. Правильный порядок расположения операндов при расчете себестоимости. Проблема копеек. Есть мнение, что правильно делать так:

 PS. опять форум лагает,  "съел" мне сообщение
« Последнее редактирование: Октябрь 29, 2013, 01:16:56 pm от Андрей »

Калифорниец

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Игорь
Проблема копеек: что это и как её решать?
« Ответ #35 : Октябрь 29, 2013, 01:11:04 pm »
mister-x, да, я читал что там написано. Однако в методичке по "Конфигурирование платформы", преподы пишут вот так:

 Списать = Мин(ОсталосьСписать, ВыборкаДетальные.КоличествоОстаток);
             
             СуммаСписания = ?(Списать = ВыборкаДетальные.КоличествоОстаток, ВыборкаДетальные.СтоимостьОстаток,
             ВыборкаДетальные.СтоимостьОстаток/ВыборкаДетальные.КоличествоОстаток * Списать);

 Выдрал из своего кода, но способ из методички.

 Так что решать вам, кому верить, или преподам принимающим экзамен, или по той ссылке.

mister-x

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Проблема копеек: что это и как её решать?
« Ответ #36 : Октябрь 29, 2013, 01:19:17 pm »
Цитата Калифорниец ()
По-моему абсолютно идентичны. Скобок же здесь нет. Тут ведь приоритет арифметических операций роль играет, у умножения приоритет выше, поэтому 1С будет вычислять вторую формулу как первую. Разве нет?
видимо что-то сейчас поменялось с приоритетами ариф. операций, когда я учился в школе, то операции умножения и деления были равными по приоритету  wink
« Последнее редактирование: Октябрь 29, 2013, 01:19:50 pm от Андрей »

Калифорниец

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Игорь
Проблема копеек: что это и как её решать?
« Ответ #37 : Октябрь 29, 2013, 01:26:27 pm »
Может и я парюсь, просто тут умножение первей стоит:

 Приоритет выполнения операций:
 
  • () – скобки
     
  • - и + – унарный минус
     
  • * и / – умножение и деление
     
  • + и – - сложение и вычитание

  • Гулик

    • Новичок
    • *
    • Сообщений: 0
    • ФИО: Гуля
    Проблема копеек: что это и как её решать?
    « Ответ #38 : Октябрь 29, 2013, 01:46:24 pm »
    Цитата mister-x ()
    видимо что-то сейчас поменялось с приоритетами ариф. операций, когда я учился в школе, то операции умножения и деления были равными по приоритету wink
     mister-x,немножко не в тему smile
     http://asaratov.livejournal.com/3656300.html
    « Последнее редактирование: Октябрь 29, 2013, 01:46:54 pm от Гуля »

    Калифорниец

    • Новичок
    • *
    • Сообщений: 0
    • ФИО: Игорь
    Проблема копеек: что это и как её решать?
    « Ответ #39 : Октябрь 29, 2013, 01:49:46 pm »
    Гулик, да, это еще год назад на мисте обсуждали. Знатная жесть.)

    Гулик

    • Новичок
    • *
    • Сообщений: 0
    • ФИО: Гуля
    Проблема копеек: что это и как её решать?
    « Ответ #40 : Октябрь 29, 2013, 01:51:51 pm »
    сорри за баян тогда smile
     а мы на женском форуме на днях только обсуждали это...

    java

    • Новичок
    • *
    • Сообщений: 0
    • ФИО: Владимир
    Проблема копеек: что это и как её решать?
    « Ответ #41 : Октябрь 29, 2013, 06:31:36 pm »
    Моя логика отказывается понимать, почему правильным считается:
    Код
    НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток,   
       Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток);

     Допустим у нас 300 гаек общей суммой на 3000 рублей
     И мы хотим списать 1 гайку.

     Если считать по-нормальному, то 1*3000/300 =10
     Тогда она спишется по 10 рублей, что соответствует истине.

     А если "методически верным способом" вот так, то Окр(1/300,2)*3000=0*3000=0 рублей
     И так можно бесплатно списать 0-99 гаек,
     останется 200, начнет списывать их:
     100-ю по 30 рублей,
     101-ю по 29,7 рублей
     102-ю по 29,4 рублей
     103-ю по 29,11 рублей (сюрприз: 2910,9*0,01= 29,109 , которая неявно округлится до 29,11)

     И так далее , когда количество останется 50, то  списание пойдет шибче, ведь умножать придётся на 0,02.

     И что из этого всего выйдет непонятно!
    « Последнее редактирование: Октябрь 29, 2013, 11:35:53 pm от Владимир »

    mister-x

    • Новичок
    • *
    • Сообщений: 0
    • ФИО: Андрей
    Проблема копеек: что это и как её решать?
    « Ответ #42 : Октябрь 29, 2013, 08:24:38 pm »
    Цитата Калифорниец ()
    Может и я парюсь, просто тут умножение первей стоит:
     
     Вы некорректно выразились тут
     
    Цитата Калифорниец ()
    Тут ведь приоритет арифметических операций роль играет, у умножения приоритет выше


     вот это правильно
     
    Цитата Калифорниец ()
    просто тут умножение первей стоит

    Alyx Ruby

    • Пользователь
    • **
    • Сообщений: 72
    • ФИО: Alyx Ruby
    Проблема копеек: что это и как её решать?
    « Ответ #43 : Октябрь 29, 2013, 08:44:16 pm »
    Гулик, Это действительно нечто!! surprised (по ссылке http://asaratov.livejournal.com/3656300.html), видимо преподаватели-"профессора"   хотят приучить с детства мыслить по-программистски. wink Чтобы детки не путали операнды местами, чтобы не было пресловутой "проблемы копеек". В 1С действительно надо сначала умножение делать, а потом деление - результат точнее получается, это особенность машинного деления, запрятанная глубоко в недрах компьютера, а причем тут порядок множителей в реальной жизни?! Точно, жесть нашей жизни.... biggrin
    « Последнее редактирование: Октябрь 29, 2013, 08:46:06 pm от Roxana Bush »

    Гулик

    • Новичок
    • *
    • Сообщений: 0
    • ФИО: Гуля
    Проблема копеек: что это и как её решать?
    « Ответ #44 : Октябрь 29, 2013, 09:02:13 pm »
    уф, хорошо, что я не заморачивалась проблемой копеек в свое время biggrin
     щас бы всё по правилам сделала б уже конечно, по крайней мере так же как в примере у Эсников

     Добавлено (29.10.2013, 21:02)
     ---------------------------------------------
     AlyxRuby, всё готовишься, невидно тебя!!
    « Последнее редактирование: Октябрь 29, 2013, 09:05:19 pm от Гуля »