Почему нельзя использовать ТекущаяДата()

27.10.23

Разработка - Механизмы платформы 1С

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

ИТС запрещает использовать ТекущаяДата(), но исчерпывающей информации на вопрос "Почему?" нет ни там, ни на ИС, поэтому написал данную заметку. Тем не менее, совсем не знакомым с темой, стоит прочитать статью на ИТС (по этой ссылке)и бегло статью на ИС "О времени и 1С" (к сожалению, ровно через неделю после моей публикации Юрий Пермитин удалил все свои статьи с инфостарта. НО СЕЙЧАС 27.10.2023 СТАТЬЮ ОПЯТЬ ВОССТАНОВИЛИ).

Цитаты с ИТС:

 

2.1. Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса.

3.1. В клиентском коде использование функции ТекущаяДата также недопустимо. Это требование обусловлено тем, что текущее время, вычисленное в клиентском и серверном коде, не должно различаться.

2.2. В тех случаях, когда требуется «универсальная» отметка времени, не зависящая от часового пояса текущего сеанса пользователя, в контексте которого выполняется серверный вызов, следует использовать функцию УниверсальноеВремя.

А именно остались вопросы:

1. Раз уж по неведомой пока причине, запретили использовать ТекущаяДата(), то почему бы вместо неё не дать возможность всегда использовать ТекущаяДатаСеанса()? Почему в платформе не сделали функцию ТекущаяДатаСеанса() доступной на клиенте? Тем более, что инфа о времени сеанса клиента изначально физически лежит на клиенте.

 

2. Хорошо, раз на клиенте недоступна ТекущаяДатаСеанса(), то почему ИТС не разрешает на клиенте вызывать ТекущаяДата()? Ведь ТекущаяДатаСеанса() выполненная на сервере по идее будет равняться ТекущаяДата() выполненная на клиенте.
Вместо этого ИТС рекомендует вызывать метод БСП ДатаСеанса(), который как раз и вернёт значение равное ТекущаяДатаСеанса() только при этом не будет делать серверный вызов, за счёт того, что он был сделан однократно в начале сеанса и была вычислена ПоправкаКВремениСеанса = ТекущаяДатаСеанса(вычисленная на сервере) - ТекущаяДата(вычисленная на клиенте).

 

3. Почему в качестве универсального времени ИТС указывает безальтернативно использовать УниверсальноеВремя()? Почему вместо этого нельзя использовать ТекущаяДата() вычисленное на сервере?

 


Опосляскриптум:

Да, тема вроде похожа на древний копролит. Но при попытке дать джунам почитать что-то, чтобы найти ответы на конкретно поставленные вопросы, пришлось сочинять самому. Поэтому если вы считаете что, данные вопросы уже отвечены, то милости просим ссылку + конкретные цитаты, отвечающие на данные вопросы - в противном случае злословия не принимаются)))
------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!

Проверено на платформе 8.3.17.1989.

ТекущаяДата ТекущаяДатаСеанса Ограничения Нельзя Стандарт УниверсальноеВремя ДатаСеанса Дата Время ЧасовойПояс

См. также

БСП. Добавляем отчет в меню Отчеты

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3192    John_d    10    

89

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    5011    mrXoxot    11    

100

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7049    dsdred    36    

113

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19158    SeiOkami    46    

118

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9483    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6553    sebekerga    54    

95

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    16946    SeiOkami    31    

104
Отзывы
40. json 3308 24.08.22 12:52 Сейчас в теме
(14) Тут подмена понятий.

Есть стандарты - рекомендации от вендора. Их нужно стремиться соблюдать.
А есть типовые конфигурации, при написании которых архитектор не отследил, что разработчик не соблюдает стандарт.

То есть если типовая не соблюдает стандарты, это не значит, что их нет и их не надо соблюдать.

Позиция, что если типовые не соблюдают, то мы тоже не будем - контрпродуктивная

"вендор часто пишет то что сам не делает" - вендор это не один человек, а команда. И добиться от каждого разработчика 100% соблюдения, близко к нереальному.
Кроме того часть кода могли быть написаны до появления стандарта, но тот код не меняют.
Это не является аргументом в пользу того, что не нужно соблюдать стандарты.
Artem-B; SagittariusA; Lolmes; AllexSoft; Sejix; charushkin; Vary; Drivingblind; ubnkfl; ixijixi; mitia.mackarevich; ardn; Orlando Skibraves; user825349; user1224429; torr1983; elephant_x; dmpas; DarkAn; Alias; Bassgood; Патриот; +22 Ответить
13. Патриот 450 23.08.22 10:13 Сейчас в теме
(12) Ииииии? Не нужно и нам соблюдать стандарты и надо хреновертить? Есть стандарт. Он вызывал вопросы. Я эти вопросы закрыл данной статьёй.
Artem-B; charushkin; Светлый ум; Vary; Drivingblind; sulfur17; Артано; Innuil; wuff; andron77777; unichkin; PLAstic; Vidz; +13 3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Torin 752 23.08.22 08:43 Сейчас в теме
(0)
ИТС запрещает использовать ТекущаяДата()
- Что? Че за чушь?
Painted; mitia.mackarevich; Ali_q; +3 Ответить
4. VISkvortsov 23.08.22 09:02 Сейчас в теме
(1) Почему чушь?
https://its.1c.ru/db/v8std#content:643:hdoc:_top:%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B0%D1%8F%D0%B4%D0%B0%D1%82­%D0%B0%D1%81%D0%B5%D0%B0%D0%BD%D1%81%D0%B0

2.1. Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса.


3.1. В клиентском коде использование функции ТекущаяДата также недопустимо. Это требование обусловлено тем, что текущее время, вычисленное в клиентском и серверном коде, не должно различаться.
SagittariusA; Innuil; Teut_Vlad; Патриот; +4 Ответить
7. Torin 752 23.08.22 09:43 Сейчас в теме
(4)
Почему чушь?
- вы типовые посмотрите :) Кому запрещают? Там сплошняком ТекущаяДата() :)

"не рекомендуют" - соглашусь.. так как могут быть последствия .. а запрещают...- бред!
Прикрепленные файлы:
adhocprog; ZOMI; BelskyAV; Painted; mitia.mackarevich; echo77; Serg O.; Bassgood; philya; bilex; maksa2005; 1v7; KOTzilla; Ali_q; smit1c; +15 Ответить
8. Патриот 450 23.08.22 09:53 Сейчас в теме
(7)

1. коллега, вы ответили на цитату из ИТС, где написано, что использовать ТекущаяДата "недопустимо" и всё равно пишите что это чушь.

2. приводить в пример типовой код хрен знает какой древности, возможно до создания этого стандарта в обоснование, что этого стандарта нет - это очень странно
11. Torin 752 23.08.22 10:06 Сейчас в теме
(8)
2. приводить в пример типовой код хрен знает какой древности, возможно до создания этого стандарта в обоснование, что этого стандарта нет - это очень странно

см. :)
Прикрепленные файлы:
adhocprog; BelskyAV; Monex; mitia.mackarevich; Bassgood; bilex; maksa2005; Hans; +8 Ответить
2. ardn 627 23.08.22 08:57 Сейчас в теме
Заголовок кликбейтный. Использовать можно. Но не рекомендуется
BelskyAV; Ali_q; +2 Ответить
10. Патриот 450 23.08.22 09:58 Сейчас в теме
(2) слова "недопустимо" с ИТС вам не о чём не говорят?
12. Torin 752 23.08.22 10:10 Сейчас в теме
(10) Берем любую конфигурацию на ОФ ( например УПП релиз 1.3.185.1 от 19.08.22 :) там знать ничего не знают о том что кто то кому то что то запретил :)
adhocprog; BelskyAV; +2 Ответить
13. Патриот 450 23.08.22 10:13 Сейчас в теме
(12) Ииииии? Не нужно и нам соблюдать стандарты и надо хреновертить? Есть стандарт. Он вызывал вопросы. Я эти вопросы закрыл данной статьёй.
Artem-B; charushkin; Светлый ум; Vary; Drivingblind; sulfur17; Артано; Innuil; wuff; andron77777; unichkin; PLAstic; Vidz; +13 3 Ответить
14. Torin 752 23.08.22 10:19 Сейчас в теме
(13) Какой вывод напрашивается? что Типовые конфигурации разрабатываемые вендором , не соответствуют стандарту разработки установленному самим вендором! Это ли не чушь?
P/S вендор часто пишет то что сам не делает. "Мой стандарт - как хочу так и применяю"
dmitryada; BelskyAV; 7OH; mevgenym; Yashazz; +5 Ответить
40. json 3308 24.08.22 12:52 Сейчас в теме
(14) Тут подмена понятий.

Есть стандарты - рекомендации от вендора. Их нужно стремиться соблюдать.
А есть типовые конфигурации, при написании которых архитектор не отследил, что разработчик не соблюдает стандарт.

То есть если типовая не соблюдает стандарты, это не значит, что их нет и их не надо соблюдать.

Позиция, что если типовые не соблюдают, то мы тоже не будем - контрпродуктивная

"вендор часто пишет то что сам не делает" - вендор это не один человек, а команда. И добиться от каждого разработчика 100% соблюдения, близко к нереальному.
Кроме того часть кода могли быть написаны до появления стандарта, но тот код не меняют.
Это не является аргументом в пользу того, что не нужно соблюдать стандарты.
Artem-B; SagittariusA; Lolmes; AllexSoft; Sejix; charushkin; Vary; Drivingblind; ubnkfl; ixijixi; mitia.mackarevich; ardn; Orlando Skibraves; user825349; user1224429; torr1983; elephant_x; dmpas; DarkAn; Alias; Bassgood; Патриот; +22 Ответить
43. Torin 752 24.08.22 13:15 Сейчас в теме
(40)
Есть стандарты - рекомендации от вендора. Их нужно стремиться соблюдать.
- именно с этой позицией я и согласен , что это именно рекомендация. !! Вы просто на момент представьте, вы разработали решение.. а ту вам тычут стандартом и говорят " А вендор пишет - "запретил"" ! У вас код не по стандарту.. переписывайте :)

(40)
Кроме того часть кода могли быть написаны до появления стандарта, но тот код не меняют.

Какие ключевые параметры стандарта? - это дата его принятия ( где на ИТС дата принятия что данный метод... с такого то числа , как тогда можно говорить что код написан до появления :)

я никоим образом не говорю что стандартов не нужно придерживаться в процессе разработки, нужно! Но и вендору следовало бы в этом случае контролировать не только тех кто подает заявки на 1С:Совместимо ( а там как раз и проверяют по актуальному стандарту не зависимо от того когда этот стандарт был принят ( хоть даже сегодня)..) . но и свои собственные решения .. Как никак вендор сертифицирован по ИСО :)
dmitryada; BelskyAV; unknown181538; Bassgood; +4 Ответить
45. Alxby 1145 24.08.22 13:28 Сейчас в теме
(40)Для чего нужны стандарты? Я вижу три причины: 1) Обеспечение правильного функционирования, производительности, надежности и безопасности. Теоретически вендор лучше знает внутреннее устройство платформы и может определить наиболее эффективные правила разработки. 2) Обеспечение одинаковости написания кода разными разработчиками. Не важно насколько он эффективный, главное - одинаковый. 3) Приведение к стандарту - некое ритуальное действо, нужное только лишь для сдачи проекта и прохождения сертификации. А теперь давайте подумаем, для чего соблюдать именно этот стандарт из статьи? Тем более, как правильно указано в (14), в собственных конфигурациях 1С стандарты слабо соблюдаются.
BelskyAV; +1 Ответить
47. Torin 752 24.08.22 14:18 Сейчас в теме
(45) Коллега ну вот для пример есть Стандарт разработки драйверов ТО там все понятно, все по версиям .. что действует , что не действует , что в архиве.. и так далее то есть разработчик может понимать что и когда актуализировалось и что и когда изменилось.
В стандарте же разработки .. такого нет!! мало того этот стандарт применим и к 8.2 :) А там этих методов и в помине нет.. !
58. dmitryada 16.02.23 07:33 Сейчас в теме
Почитал статью, изучил ИТС. И не понял рекомендаций, на такой случай:

1) Офис во Владивостоке
2) Офис в МСК.
3) Сервер в МСК.

4) Во Владивостоке по местному времени ввели поступление товара например в 12:00.

Какой датой этот товар появится на остатках для пользователя в МСК?

По идее, для обоих пользователей поступление товара должно отображаться одинаково, чтобы он был доступен для них в одно и тоже время.

То есть нам это время нужно приводить к одному часовому поясу, например, 05:00 по МСК.

А как по человечески для такой ситуации использовать ТекущаяДатаСеанса()?


(13)
3. ardn 627 23.08.22 08:58 Сейчас в теме
Ну и тут исчерпывающе написано, на мой взгляд
Работа в разных часовых поясах
https://its.1c.ru/db/v8std/content/643/hdoc
1v7; smit1c; +2 Ответить
9. Патриот 450 23.08.22 09:56 Сейчас в теме
(3) а вы её сами пробовали читать? там нет ответов, на раскрытые в статье вопросы. А также данную ссылку я привёл ДВАЖДЫ в первом абзаце статьи
Volosokrad1990; +1 Ответить
5. user1086697 23.08.22 09:03 Сейчас в теме
Мне кажется, используют внутреннюю функцию ТекущаяДата() и не парятся.
Многие разработчики говорят, что лучше использовать текущаядатасеанса() только из-за того, что проверяется часовой пояс клиента.
6. smit1c 106 23.08.22 09:10 Сейчас в теме
Пока работаешь в одном часовом поясе об этих вопросах не задумываешься....
ixijixi; 7OH; Bassgood; philya; Tavalik; zqzq; mrChOP93; fancy; t278; Vidz; 1v7; Drivingblind; Ali_q; Obertone; SergeyTerentyev; +15 Ответить
15. rpgshnik 3647 23.08.22 13:54 Сейчас в теме
16. Патриот 450 23.08.22 14:09 Сейчас в теме
(15) а вы читали статью? Тут вроде не сильно много.
1. данную ссылку я привёл и ответов на три заданных вопроса там нет.
2. если считаете иначе, специально для этого написал "если вы считаете что, данные вопросы уже отвечены, то милости просим ссылку + конкретные цитаты, отвечающие на данные вопросы"
17. Vidz 23.08.22 14:53 Сейчас в теме
Спасибо за статью. Как раз из-за того, что в типовых используется ТекущаяДата() я об этом даже не задумывался.. Пока у одного из клиентов не добавилась пара часовых поясов. Конфа самописная с вкраплениями БСП.

Теперь вот думаю как разрулить ситуацию:
HTTP-сервис, внешнее событие - входящий телефонный звонок. Приходит из облачной АТС билайна. Надо фиксировать пропущенный звонок. Звонки идут на +3 и +7 часовые пояса.
Причем клиенты могут звонить на общеканальные номера - "группы обзвона" (а не конкрентному менеджеру, в спр. пользователе которого как раз и можно было бы хранить часовой пояс). В 1С такое приходит как "событие звонок" на все номера в "группе номеров". Т.е. если в группе 4 номера, то придёт 4 события звонок. Если звонок был пропущенный, то должен сформироваться 1 пропущенный звонок (а не 4). И вот как определять дату для такого пропущенного? Вычислять часовой пояс по всем пользователям входящим в группу, брать УниверсальноеВремя() + ЧасовойПояс? 0_о

Как вообще жить пользователям с разными часовыми поясами в одной базе? Я пока в раздумиях...
Cерый; +1 Ответить
18. Патриот 450 23.08.22 15:30 Сейчас в теме
(17) Пожалуйста
Вы не описали, зачем вам дата.

1. УниверсальноеВремя используется в одном случае - когда необходимо в хронологической последовательности эти события отсортировать. И часовой пояс к нему в таком случае прибавлять не нужно - вызываете без параметров, и часовой пояс прибавится из тек сеанса автоматом.
2. если цель любая другая, то ТекущаяДатаСеанса() и ДатаСеанса() в случае клиента.
3. может быть вам нужна и универсальная дата и дата сеанса сразу в разных реквизитах.
19. Vidz 23.08.22 15:52 Сейчас в теме
(18) Ситуация, что я описал всегда происходит на сервере. Формула УниверсальноеВремя() + ЧасовойПояс скорее должна приводить к результату ТекущаяДатаСеанса() как если бы пользователи создавал документ интерактивно.
ТекущаяДатаСеанса() меня не спасёт, т.к. событие всегда происходит на сервере который в часосвом поясе +7. Само событие "Пропущенный телефонный звонок" должно быть зафиксировано во времени часового пояса пользователя, которому звонили. Т.е. на сервере всегда +7, а звонки могут быть для пользователей +3 и +7 часовых поясов
20. Патриот 450 23.08.22 16:54 Сейчас в теме
(19)
Само событие "Пропущенный телефонный звонок" должно быть зафиксировано во времени часового пояса пользователя, которому звонили.

Тогда вам нужна ТекущаяДатаСеанса()
Об этом цитата из ИТС в начале статьи
Во всех серверных процедурах и функциях вместо функции ТекущаяДата, которая возвращает дату и время серверного компьютера, следует использовать функцию ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса.

ТекущаяДатаСеанса() выполненная на сервере будет разной в зависимости от часового пояса сеанса а не сервера.
36. Vidz 24.08.22 08:04 Сейчас в теме
(20)
ТекущаяДатаСеанса() выполненная на сервере будет разной в зависимости от часового пояса сеанса а не сервера.


Так. И какая же будет ТекущаяДатаСеанса(), если речь идёт про HTTP сервис работающий на сервере с часовым поясом +7??
38. minotavr_x86 8 24.08.22 10:02 Сейчас в теме
(36) Я бы записал звонок по времени без часового пояса, а пользователю при отображение показывал время с поправкой на его часовой пояс.
user591389_aska_rabota; sashocq; +2 Ответить
21. PerlAmutor 129 23.08.22 20:25 Сейчас в теме
Что использовать в качестве параметра виртуальной таблицы Остатки(), чтобы получить остаток на текущую секунду. ТекущуюДатуСеанса() или текущую дату сервера?
ayuplotnikov; info1i; +2 Ответить
22. info1i 223 23.08.22 20:49 Сейчас в теме
(21) На текущий момент можно без раздумий пропустить параметр даты. Если же вопрос принципиальный, то, конечно, текущую дату сервера; при получении остатков ТекущаяДатаСеанса может привести к ошибке.
ТекущаяДатаСеанса, которая приводит время сервера к часовому поясу пользовательского сеанса
- вот это приведение как раз и может привести к ошибке.
50. sashocq 193 26.08.22 09:04 Сейчас в теме
(21) Это зависит от того, как вы пишите данные в этот регистр.

Пример: у вас в базе работают одновременно из Москвы (UTC+3) и из Красноярска (UTC+7). Они примерно одновременно вводят поступление товара на склад +1 шт. После этого пользователь из Мск хочет посмотреть остаток на текущий момент времени. Если у вас что-то такое, то вам нужно определиться с тем как вы формируете текущие движения. Должно быть так, чтобы пользователь из Мск увидел этот остаток по своему времени, а не через 4 часа.

Определитесь с датой/временем движений — ответите на свой вопрос.
54. PerlAmutor 129 26.08.22 18:52 Сейчас в теме
(50) Движения в подавляющем случае в той же ERP делаются на дату и время документа. Дата документа обычно равна Текущей дате сеанса. Не проблема получить остаток на текущий момент не указывая период в параметре виртуальной таблицы. Но уже проблема, когда ты пытаешься получить остаток на дату создания нового документа. Переписывать логику формирования движений во всей ERP никто не будет.
23. info1i 223 23.08.22 20:56 Сейчас в теме
Был в моем опыте случай, когда ТекущаяДатаСеанса, наоборот, с сервера возвращала ошибочное время, а ТекущаяДата возвращала правильное, в итоге написал ТекущуюДату. Про стандарт знаю, но применимость этого стандарта крайне редкая, так как редко где есть кластер из нескольких серверов в разных часовых поясах.
В большинстве случаев у заказчика в кластере 1 или 2, или 3 сервера, и все они в одном часовом поясе, поэтому достаточно использовать ТекущуюДату.
24. Alxby 1145 23.08.22 21:39 Сейчас в теме
Очередной идиотский неоднозначный стандарт. Опять авторы стандартов решают за разработчиков как им, т.е. разработчикам, использовать средства платформы. Почему получение текущей даты обязательно должно быть связано с клиент-серверным взаимодействием или с обработкой дат, хранимых в БД? Что это за искусственное самоограничение круга решаемых задач? Вот навскидку примеры: получение интервалов времени на клиенте между событиями (время выполнения клиентской обработки, замер скорости ввода информации пользователем и т.п.), логи каких-нибудь процессов на клиенте, система напоминаний ("будильник") на клиенте. Все это просто и правильно решается с помощью ТекущаяДата(). Вместо тупого запрета лучше пропагандировать информацию когда можно использовать ТекущаяДата(), а когда - нельзя, и почему. Если уж так хочется снизить количество архитектурных ошибок при построении клиент-серверной системы, работающей в разных часовых поясах, тогда надо переименовать ТекущаяДата() в ТекущаяДатаЛокальногоКомпьютера(), тогда даже новичок обратит на это внимание и задумается, как правильно ему решить свою задачу.
SagittariusA; корум; odinsmot; user591389_aska_rabota; chinser; 7OH; Hans; unknown181538; Bassgood; +9 Ответить
51. sashocq 193 26.08.22 09:10 Сейчас в теме
(24)
получение интервалов времени на клиенте между событиями


Вот для таких случаев лучше использовать ТекущаяУниверсальнаяДатаВМиллисекундах(). Во-первых, повышается точность, во-вторых не столкнётесь с ошибкой при переходе между летним и зимним временем во время выполнения (редкий случай, знаю).
53. Alxby 1145 26.08.22 10:04 Сейчас в теме
(51)Согласен. Забавно только, что ТекущаяУниверсальнаяДатаВМиллисекундах доступна на клиенте, а ТекущаяУниверсальнаяДата - нет. ТекущаяДата на клиенте запрещается стандартом, а ТекущаяУниверсальнаяДатаВМиллисекундах - нет. Хорошо было бы, если бы кто-нибудь нашел хоть какое-то логическое объяснение этим фактам.
25. ZoTik1987 23.08.22 21:46 Сейчас в теме
А я если я железно уверен, что ВСЕ пользователи базы "сидят" в серверном часовом поясе, можно использовать ТекущаяДата()?
Поручик; +1 Ответить
26. Alxby 1145 23.08.22 22:10 Сейчас в теме
(25)Конечно, о чем и речь. ТекущаяДата() - абсолютно легальное средство платформы. И разработчику виднее, когда его использовать, а когда - нет, вне зависимости что написано в стандарте.
Поручик; +1 Ответить
31. Патриот 450 23.08.22 22:48 Сейчас в теме
(25) конечно, если вы железно уверены, что несоблюдение любого стандарта не принесёт вам проблем, то вы можете его не соблюдать. Можете не соблюдать даже тогда, когда уверены, что это принесёт проблемы)
27. Alxby 1145 23.08.22 22:15 Сейчас в теме
Кстати, все видели как реализована в БСП функция ДатаСеанса()? Это надо постараться элементарную операцию реализовать таким громоздким кодом. Вдобавок разработчики БСП почему то уверены, что время на сервере и клиенте идет одинаково и поправку можно вычислить в начале и потом ее просто использовать (привет, переход на зимнее время!).
user591389_aska_rabota; ixijixi; zqzq; philya; +4 Ответить
28. Патриот 450 23.08.22 22:19 Сейчас в теме
(27) вы под эту статью пришли сразу комменты писать? Тут полстраницы текста, можно потрудиться почитать. В статье описано, как выглядит функция ДатаСеанса() и почему она так выглядит
29. Alxby 1145 23.08.22 22:29 Сейчас в теме
(28) Да нет, я не в упрек автору. Разумеется я прочитал эту статью, так же как и другие на эту тему. Статья однозначно полезная - подробнее раскрывает стандарт 1С. Но это не отменяет того, что слепо верить этому стандарту нельзя, а также того, что в функции БСП заложена мина. Хоть вероятность ее срабатывания очень мала, но об этом нужно знать и ее учитывать.
41. philya 77 24.08.22 12:59 Сейчас в теме
(29)Все банальнее: клиент сходил в интернет и синхронизировал время.
42. Alxby 1145 24.08.22 13:13 Сейчас в теме
(41)Вроде бы в этом случае не должно быть коллизии. Во всяком случае ТекущаяДата() и ДатаСеанса() дадут одинаковый эффект
30. Патриот 450 23.08.22 22:47 Сейчас в теме
(29) Спасибо. По поводу мины, уверен, что её там нет. Насколько помню, перехода на летнее время в нашей стране больше нет. Даже если оно где-то есть, не в курсе, не будет ли оно происходить в одно и тоже универсальное время сразу во всех часовых поясах - это бы решило проблему. Но в любом случае, ничто не мешает разработчикам функции бсп это предусмотреть, повесить обработчик ожидания, который в нужный момент пересчитает ПоправкаКВремениСеанса, поэтому, если проблема реальна, уверен, так оно и работает и можно смело юзать ДатаСеанса()
32. Alxby 1145 23.08.22 22:57 Сейчас в теме
(30)Смотрите: предположим, что админы сервера решили "подправить" время на сервере. До тех пор, пока клиент не обновит значение поправки, ДатаСеанса() будет возвращать неверное значение. Хуже того, возможна ситуация, когда два клиентских компьютера, расположенных в одной комнате, с одинаковым локальным временем, в течение нескольких минут будут получать разные значения ДатаСеанса()!
SagittariusA; user591389_aska_rabota; philya; Vidz; Perfolenta; Патриот; +6 Ответить
44. Патриот 450 24.08.22 13:27 Сейчас в теме
(32) Вывод - исправлять время на сервере, пока на нём работают какие угодно приложения, не остановив их - плохая идея и очевидно крайне редкая)
46. Alxby 1145 24.08.22 13:30 Сейчас в теме
(44)Да, редкая. К сожалению это не единственная проблема. Придется наверное статью по этому поводу писать).
52. sashocq 193 26.08.22 09:15 Сейчас в теме
(44) Приложения должны это учитывать. Это может быть даже какая-то автоматическая корректировка времени через интернет, чтобы на сервере время стало корректным.
56. NiGMa 29.08.22 13:37 Сейчас в теме
(44)Серверная ОС при "сдвиге" текущего времени на существенный интервал (скажем, 5 минут) делает это не мгновенно, а постепенно, добавляя (или убирая) несколько миллисекунд в каждую секунду -- именно для того, чтобы сгладить возможную "неожиданность" для приложений.

И, кстати, "Заблуждения программистов относительно времени": https://habr.com/ru/post/146109/
33. d.zhukov 1400 24.08.22 03:35 Сейчас в теме
Говорят если использовать функцию "ТекущаяДата", может сдетонировать боезаряд, устанавливаемый на все серверное оборудование, предусмотренный на случай глобальных военных конфликтов. Будьте осторожны с функцией "ТекущаяДата"
Altez; rpgshnik; +2 Ответить
34. user612295_death4321 24.08.22 07:12 Сейчас в теме
Видимо есть те, кто уже наступить на эти грабли и те кто обязательно наступит )
35. Dragonim 139 24.08.22 07:25 Сейчас в теме
Столкнулся с этой проблемой при использовании облачного сервиса Рарус и одной из их отраслевых конфигураций. В документе во время первого проведения дата устанавливалась как "ТекущаяДата", но сервер находился в Москве, а заказчик в Екатеринбурге. В результате у всех документов время было сдвинуто на 2 часа назад. Пришлось потрошить конфигурацию и менять "ТекущаяДата" на "ТекущаяДатаСеанса".
37. kser87 2441 24.08.22 09:32 Сейчас в теме
Полезное, спасибо. Как раз недавно воевал с разницей во времени в Сибири и Санкт-Петербурге.
Патриот; +1 Ответить
39. cdiamond 233 24.08.22 11:11 Сейчас в теме
Для полного комплекта не хватает функций ВремяСеанса, ДатаВремя, ТекущееВремя, ТекущееВремяСеанса, КоторыйЧас и СколькоВремени.
odinsmot; veretennikoff; ixijixi; cdrw3; ardn; Serg O.; shard; v3132; info1i; d.zhukov; rptp2021; +11 Ответить
48. dmpas 418 25.08.22 10:14 Сейчас в теме
(39)
КоторыйЧас и СколькоВремени

я так понимаю, эти две функции должны работать на клиенте и задавать вопрос пользователю?
maksa2005; +1 Ответить
49. cdiamond 233 25.08.22 17:17 Сейчас в теме
(48) Неправильно понимаете. Согласно традиции 1с наименования функций платформы не должны отражать их ключевые особенности и отличие от других похожих функций
alex_4x; sashocq; +2 Ответить
55. gybson 29.08.22 10:12 Сейчас в теме
Какое-то насилие над функциональным программированием. Чего они функцию не переписали, чтобы правильно работала?
user591389_aska_rabota; alex_4x; ixijixi; r.zdorkin; +4 Ответить
57. alex_4x 85 26.01.23 09:31 Сейчас в теме
(55) Это потому что сделать один раз правильно - это неинтересно. Нужно создать кучу костылей и внести сумятицу.
И объяснено это будет тем, что мол в случае, когда синхронизация времени с сервером не нужна, используйте просто дату, это будет быстрее. Прямо будет вообще на много быстрее, летать прям будет, а в случае с синхронизацией - будет дольше. Ну и конечно же можно потом полемику разводить по этому поводу.
59. zastep 26.10.23 11:39 Сейчас в теме
Очень хорошо описаны варианты использования различных функций работы со временем в статье:
https://infostart.ru/1c/articles/1017637/
60. Патриот 450 27.10.23 12:45 Сейчас в теме
(59) эта ссылка приведена в начале моей статьи. Моя статья отвечает на вопрос, на который там полного ответа не было. Причём эту статью сначала удалили, теперь восстановили. Но за коммент спасибо, теперь я узнал, что эти статьи восстановили.
Оставьте свое сообщение