1. 1C / Говнокод #20156

    −97

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    		|	РАЗНОСТЬДАТ(&Дата1, &Дата2, МЕСЯЦ) КАК РезультатРазность";
    Запрос.УстановитьПараметр("Дата1",СтрТЧ.ДатаНачала);
    Запрос.УстановитьПараметр("Дата2",СтрТЧ.ДатаОкончания);
    Результат = Запрос.Выполнить().Выгрузить();
    КолвоМесяцев = Результат[0].РезультатРазность+1;

    Классика жанра. Ходим на сервер, чтобы посчитать разность дат. Ну да, сервер же у нас целыми днями воздух гоняет, заняться ему больше нечем. Давайте 2+2 складывать начнем через сервак.
    Причем, б*ть, через сервер приложений, который в свою очередь погонит запрос на сервер MSSQL.

    Запостил: mrbus, 08 Июня 2016

    Комментарии (25) RSS

    • > РАЗНОСДАТЬ

      что делает эта функция?
      Ответить
      • Разность дат в месяцах, причем с игнорированием дня и времени, (т. е. между 31.01.16 23:59:59 и 01.02.16 0:00:00 будет разность 1 месяц, так же как и между 01.01.16 и 29.02.16),
        считается элементарно:
        КолвоМесяцев = Месяц(ДатаОкончания) - Месяц(ДатаНачала) + 12 * (Год(ДатаОкончания) - Год(ДатаНачала))
        Ответить
      • В 1с хотя бы редко сокращают... А вот увидев всякие СРЗНАЧ и СТЬЮДРАСПОБР в экселе я долго плакал кровавыми слезами...
        Ответить
        • З.Ы. ЧИСТРАБДНИ - это повелительное наклонение глагола ЧИСТРАБДНУТЬ?
          Ответить
          • Звучит пошленько так...
            Ответить
            • СТЬЮДРАСПОБР ЧИСТРАБНУЛ СВОЙ СРЗНАЧ.
              Ответить
              • https://www.youtube.com/watch?v=zsWlWdlSsIk

                Не бойся, без хуев на пол экрана
                Ответить
                • мля. дубляжи все такой же отстой как я их и помню.

                  ЗЫ никто "шутки" не уловил. "РАЗНОСДАТЬ" это то как я прочитал "РАЗНОСТЬДАТ".
                  Ответить
                  • Я уловил, но ждал, когда кто-нибудь ещё заметит. Оказалось, что всем плевать.
                    Ответить
    • > Ходим на сервер, чтобы посчитать разность дат.

      Вы будете смеятся, но я раз такое в продакшене видел: это был воркараунд для обработки leap year & DST. потому что в приложении (С++) этого не могли сделать.
      Ответить
      • А я за текущим временем к sql ходил, чтобы не париться с синхронизацией часиков на клиенте...
        Ответить
        • в одной прикладухе народ говорил это тоже делали - пока не появился важный кастомер в алжире. они обслуживают на севере африки страны в четырех часовых поясях. на установку часового пояса в локальных офисах полагатся нельзя - поэтому им пришлось аппликуху на локальное время пересаживать, и все сторед просиджес/этц соответственно переписиывать.
          Ответить
          • вы оба так говорите, будто в этом есть что-то плохое

            если на клиенте в принципе нельзя полагаться, что там будет ntp, то время сервера - единственная вещь, с которой можно жить

            у нас есть пара систем, где число клиентов тысячами считается
            вот все они, к сожалению, при старте и далее регулярно в течение дня спрашивают сервер о реальном времени и ведут свои виртуальные часы (основанные на разнице серверного времени и системного), потому что иначе никак
            Ответить
            • Разница же непостоянна, как на неё можно полагаться?
              Ответить
              • +- пара секунд там терпимо

                или ты имеешь в виду, что пользователь вне клиента может переставить системные часы?
                может, это повод перезапросить серверное время ещё раз и уточнить новую разницу
                Ответить
                • Летнее время.
                  Ответить
                  • покрывается тем, что написал выше
                    Ответить
                    • Осталось понять, когда перезапрашивать. А так как летнее время имеет тенденцию внезапно меняться в разных странах, придётся тянуть зависимость от tzdata.
                      Ответить
                      • > когда перезапрашивать
                        Никогда*. Просто надо просить у операционки значение монотонно растущего счётчика, а не время ;) Ну или UTC, но его могут руками облапать.

                        *изредка, например раз в день, чтобы дрейф часов компенсировать
                        Ответить
                        • > монотонно растущего счётчика
                          хитрый какой
                          когда клиент на js, это всё становится уже не так тривиально

                          > когда перезапрашивать
                          когда локальное время внезапно не согласуется с ожиданиями, каким оно всё ещё должно быть с точки зрения клиента

                          как я уже писал, мне тут повезло, плюс минус несколько секунд никого не обломают - для задач хватает (часы в юзеринтерфейсе, слежение за расписанием работы в минутах), распространение серверного времени через http rest уже навлекает на себя приличную погрешность + таймеры в js сами по себе неточные (особенно, когда таб неактивный)
                          Ответить
    • Просто это самый простой для программиста способ.
      Это титановый костыль, который через пару месяцев станет несъемным протезом
      Ответить
      • А потом им 100 Гб оперативы на сервере мало
        Ответить
    • > который в свою очередь погонит запрос на сервер MSSQL.
      а ты проверял профайлером, что действительно погонит на sql?
      тут нет обращения к таблицам данных
      Ответить

    Добавить комментарий