8.х ЗУП. Округление к меньшему значению.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Katakiarika, 21 фев 2017.

  1. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Есть документ "Оплата за фактически отработанные часы", Результат документа вычисляется по формуле:

    Оклад/Норма часов*Отработанные часы.

    Например: 7532/96*20 = 1569.1666...., программа округляет всё до 1569.17, надо, чтобы округлялось до 1569.16

    Я из формы документа обратился к событию результата при изменении в модуле формы
    Код:
    Процедура ЧасыДоплатРезультатПриИзменении(Элемент)
        СтрТаб = ЭлементыФормы.ЧасыДоплат.ТекущаяСтрока;
        СтрТаб.Авторасчет=Ложь;
    КонецПроцедуры
    Подставлял
    Код:
    Округл = Окр(ЧасыДоплат, 2)
    - это никак не отразилось. При установки параметра Разрядность на 3 или 4 также ничего не изменилось.
  2. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Также задавал формат в свойствах поля. Тоже никакого результата.
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Отнимаете от округляемого значения половину цены деления округления и округляете как обычно.

    В вашем случае цена деления округления - 0.01
    Katakiarika нравится это.
  4. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Я же правильно понимаю, что это надо делать в обработчике события "ПриИзменении" нужного поля?
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    В первом приближении - да, либо в том месте, где происходит "глобальный" пересчет значения.
    Katakiarika нравится это.
  6. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    А "округлять, как обычно" - это через встроенную ф-цию Окр(Число, разрядность, РежимОкругления)? (не приходилось вообще никогда ничего округлять в 1С, поэтому не знаю, как именно это сделать)
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Да.
    Katakiarika нравится это.
  8. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Вот написал, не отработало. Видимо, не правильно что-то.
    Код:
    Процедура ЧасыДоплатРезультатПриИзменении(Элемент)
        СтрТаб = Окр(ЭлементыФормы.ЧасыДоплат.ТекущаяСтрока - 0.005, 2, РежимОкругления.Окр15как10);
        СтрТаб.Авторасчет=Ложь;
    КонецПроцедуры
    
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    ТекущаяСтрока - это строка табличной части. Сам реквизит должен еще быть.
    Katakiarika нравится это.
  10. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    В форме документа создавать реквизит Результат надо или обращаться к тому, который в самом документе находится?
    Если создавать, то какой тип должен быть? Ссылка на документ, или просто число?
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Должен быть уже. В нем хранится результат расчетов по формуле. Тип - число.
    Katakiarika нравится это.
  12. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    В форме документа его нет. Есть в качестве реквизита табличной части в данных документа.

    Код:
    СтрТаб = Окр(ЭлементыФормы.ЧасыДоплат.Результат - 0.005, 2, РежимОкругления.Окр15как10);
    такая запись является верной?
    --- Объединение сообщений, 21 фев 2017 ---
    Еще вопрос.. как округлять 1569.166 не до 1569.17, а до 1569.20.. (это пример), или универсального решения нет для такого?
    Последнее редактирование: 21 фев 2017
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Так вы ж получаете текущую выделенную строку табличной части документа.

    В первом приближении - да, верно.

    Округлять точно так же, только цена деления будет уже 0.1.
    Katakiarika нравится это.
  14. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    что такое "первое приближение"?
    Никакого результата нет всё равно.. так и округляется до 17-ти сотых. Возможно, я просто не туда вставляю код.
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Первое приближение = "не углубляясь в детали", потому что при углублении в детали могут появится нюансы.
    --- Объединение сообщений, 21 фев 2017 ---
    Код:
    ТекСтрока =  ЭлементыФормы.ЧасыДоплат.ТекущиеДанные;
    ТекСтрока.Результат = Окр(ТекСтрока.Результат - 0.005, 2, РежимОкругления.Окр15как10);
    Katakiarika нравится это.
  16. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Спасибо. С округлением я разобрался, вроде как. Но нюанс всё таки появился. Нужно округлить частность Оклада и нормы часов до сотых и после этого уже умножать на фактически отработанные часы. Например:
    Оклад = 7 532
    Норма часов = 96
    7532/96 = 78.458.

    Фактически отработанные часы = 93.

    78.458*93 = 7296.62

    А если 78.458 округлим до 78.46*93 = 7296.78(ну или до десятых 7296.8) - что и должно получиться в итоге.

    Мне для этого нужно уже искать вычисление и там таким же образом, с помощью Окр округлять?
  17. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Все так же, с помощью Окр().

    Пример:
    Код:
    ТекСтрока = ЭлементыФормы.ЧасыДоплат.ТекущиеДанные;
    ТекЧастность = Окр(ТекСтрока.Оклад / ТекСтрока.НормаЧасов, 2);
    ТекСтрока.Результат = Окр(ТекЧастность * ТекСтрока.ФактическиеЧасы, 2);
    
    Katakiarika нравится это.
  18. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    не могу найти, где вычисление происходит вообще.
    Полез в редактор формул, при попытке изменить - получил ошибку. Через редактор вообще реально это сделать? Запись вроде

    Код:
    Окр(ТарифнаяСтавкаМесячная/НормаВремениЗаМесяцВДнях, 2) * ВремяВДнях;
    

    Вложения:

    • 2.png
      2.png
      Размер файла:
      32,9 КБ
      Просмотров:
      3
  19. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Вообще, думаю, реально.
    Слитно писать нужно ТарифнаяСтавкаМесячная...
  20. TopicStarter Overlay
    Katakiarika
    Offline

    Katakiarika Опытный в 1С

    Регистрация:
    9 сен 2016
    Сообщения:
    68
    Симпатии:
    0
    Баллы:
    26
    Так и думал. Только вот, что получил..
    --- Объединение сообщений, 22 фев 2017 ---
    В общем, создам новую формулу и привяжу ее к сотрудникам..

    Вложения:

    • 3.png
      3.png
      Размер файла:
      18 КБ
      Просмотров:
      3
    Последнее редактирование: 22 фев 2017

Поделиться этой страницей