8.х Прибавить дни к дате в документе

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

  1. TopicStarter Overlay
    bluntschi
    Offline

    bluntschi Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    422
    Симпатии:
    0
    Баллы:
    26
    добрый день, подскажите, как можно прибавить к дате 30 дней?
    на форме документа есть поле дата оплаты и дата поступления,
    при изменении даты оплаты дата поступления должна прибавлять на 30 дней,
    делаю так:
    Код:
    ДатаОплаты = ЭлементыФормы.ДатаПоступления+30*24*60*60;
        ЭлементыФормы.ДатаОплаты = ДатаОплаты;
  2. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    376
    Баллы:
    104
    ровно 30 дней или просто месяц?

    есть такой вариант
    Код:
    Встроенные функции языка.ДобавитьМесяц (Script functions.AddMonth)
    Встроенные функции языка (Script functions)
    ДобавитьМесяц (AddMonth)
    Синтаксис:
    
    ДобавитьМесяц(<Дата>, <ЧислоМесяцев>)
    Параметры:
    
    <Дата> (обязательный)
    
    Тип: Дата. 
    Исходная дата.
    <ЧислоМесяцев> (обязательный)
    
    Тип: Число. 
    Количество месяцев, которое необходимо добавить к исходной дате. Если принимает отрицательное значение, то число месяцев вычитается.
    Возвращаемое значение:
    
    Тип: Дата. 
    Дата, полученная в результате добавления.
    Описание:
    
    Добавляет (или вычитает) к указанной дате заданное число месяцев.
    Доступность:
    
    Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
    
    --- Объединение сообщений, 20 мар 2014 ---
    или сразу прибавляй 2592000, если именно 30 дней
    Последнее редактирование: 20 мар 2014
  3. TopicStarter Overlay
    bluntschi
    Offline

    bluntschi Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    422
    Симпатии:
    0
    Баллы:
    26
    решилось этим
    Код:
    ДатаОплатыЗначение = ЭлементыФормы.ДатаПоступления.Значение + 30*24*60*60;
        ЭлементыФормы.ДатаОплаты.Значение = ДатаОплатыЗначение;
    
  4. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    376
    Баллы:
    104
    а по другому никак, ибо в 8-ке дата идёт со временем, и посему прибавляет секунды, хотя раз ввели ДобавитьМесяц, могли бы и ДобавитьДень сделать
    в 7.7 можно было дни прибавлять напрямую, так как там только дата была
  5. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    К чему такие извращения? По-моему, можно было просто
    Код:
    ДатаОплаты = ДатаПоступления + 30*24*60*60;
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    ДобавитьМесяц() - КоличествоСекундВодномДне
  7. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    376
    Баллы:
    104
    не прокатит походу, ибо и 30 и 31 и 28 и 29 есть дней :)
  8. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Так что, требуется к дате прибавить месяц или тупо 30 дней???
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    ИМХО лучший ответ #5

    Не надо в коде писать 2592000. 30*24*60*60 лучше. Или как крайний вариант 30 * 86400.
  10. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    376
    Баллы:
    104
    достоверно ТС так и не сообщил, хоть вопрос задавался
    --- Объединение сообщений, 21 мар 2014 ---
    без комментов - да не надо, особенно если пилишь или после тебя будут другие или не один
    а с комментами спокойно,
    Код:
    ДатаОплаты = ДатаПоступления + 2592000 // 30 суток выраженные в секундах, 30 дней * 24 часа в сутках * 60 минут в часе * 60 секунд в минуте;
    
    кстати, перемножение 4-х чисел тоже не особо подлежит написанию без коментария
    --- Объединение сообщений, 21 мар 2014 ---
    ну если 1С заставляет так извращяться, то куда деваться?
    Последнее редактирование: 21 мар 2014
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Я даже больше скажу: даже если разрабатываешь один и больше разработчиков не предвидится - так писать не стоит, поскольку через пару месяцев открыв код, ты будешь минуту вспоминать, что это за магическое число и откуда взялось.

    Ну здесь уже дальше пойдет полемика, о том, сколько должно быть комментариев и какие они должны быть.
    Я сторонник того, что код надо стараться делать самокомментируемым.
    Комментарий "// 30 суток выраженные в секундах, 30 дней * 24 часа в сутках * 60 минут в часе * 60 секунд в минуте;" - ни о чем. Это ведь можно понять и так, если написать 30*24*60*60. В контексте с названием переменной "ДатаПоступления" на мой взгляд это однозначно дает понять о чем речь, вообще без написания комментариев.
    Комментарий не должен расписывать то, что и так видно по выражению, т.е. не должен быть чем-то вроде "а в следующей строчке мы умножаем два числа", а он должен объяснять что происходит, т.е. быть вроде "рассчитаем дату оплаты, в соответствии с отсрочкой платежа", а то что для этого складываются-умножаются два числа - это ведь и так видно по коду.

    Ну это все так, мысли вслух.
    Tiger86 нравится это.
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в точку
  13. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Добавлю от себя. Есть общепринятые правила. Или их еще можно назвать программиорванием хорошего тона. Никто не принуждает, но быдло код на вашей совести будет. shurikvz, это не к тебе. Просто напомнило об этом твое сообщение ))))
  14. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    376
    Баллы:
    104
    изначально это на совести 1С будет :)

    PS
    в 7.7 данный вопрос даже не возникал, там это было
    столько мелочей порезали, которые хоть и мелочь но удобны
    тот же замер времени своего кода в милисекундах, в 8 вернули/ввели только в 8.2.17
    --- Объединение сообщений, 21 мар 2014 ---
    я вообще-то сразу был за штатную вариант платформы "ДобавитьМесяц", но ТС так не прояснил, нужно ему чётко 30 дней или просто календарный месяц
    всегда стараешься штатное пользовать, и уж только на полным неимением вариантов его использования выстраиваешь конструкции

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