|
Запись системного времени в файл командной строкой | ☑ | ||
---|---|---|---|---|
0
Dzenn
гуру
21.05.12
✎
13:01
|
Преамбула: надо запретить юзерам править реализации вчерашней и более ранней даты.
Амбула: если использовать команду ТекущаяДата(), то некоторые продвинутые юзеры в случае необходимости злонамеренных действий просто догадаются изменить текущую дату на компьтютере. Поэтому, я решил, что надо на серваке запустить ежедневное задание, которое будет из командной строки записывать дату сервера в текстовый файл. Соответственно, вопрос тем, кто шарит - как одной командной строкой записать системную дату в текстовый файл? Возможно ли это станданртными методами Windows? Заранее спасибо. |
|||
1
pumbaEO
21.05.12
✎
13:05
|
Общий модуль "ПроверкаРазницыВремени":
// Определяет текущую (системную) дату на компьютере сервера 1С:Предприятия. // // Возвращаемое значение: // Дата - текущая (системная) дата // Функция ТекущаяДатаСервера() Экспорт Возврат ТекущаяДата(); КонецФункции // Установить начальное значение константы при обновлении версии ИБ. // Процедура ИнициализироватьПроверкуРазницыВремениССервером() Экспорт Константы.ПроверятьРазницуВоВремениССервером.Установить(Ложь); КонецПроцедуры Общий модуль "ПроверкаРазницыВремениКлиент" // Выполняет проверку разницы времени с сервером приложения. // // Возвращаемое значение: // Булево - Истина, если проверка завершилась успешно. // Ложь, если работа программы завершается. // Функция ВыполнитьПроверку() Экспорт Если ОпределитьЭтаИнформационнаяБазаФайловая() Тогда Возврат Истина; КонецЕсли; Если НЕ Константы.ПроверятьРазницуВоВремениССервером.Получить() Тогда Возврат Истина; КонецЕсли; ВремяНаКлиенте = ТекущаяДата(); ВремяНаСервере = ПроверкаРазницыВремени.ТекущаяДатаСервера(); РазницаВремени = ВремяНаСервере - ВремяНаКлиенте; ПредельнаяРазница = 15 * 60; // 15 минут Если РазницаВремени < ПредельнаяРазница И РазницаВремени > -ПредельнаяРазница Тогда Возврат Истина; КонецЕсли; Форма = Обработки.ПредупреждениеОРазницеВоВремениССервером.ПолучитьФорму(); Форма.ВремяНаСервере = ВремяНаСервере; Форма.ВремяНаКлиенте = ВремяНаКлиенте; Результат = Форма.ОткрытьМодально(); Если Результат <> Истина Тогда ЗавершитьРаботуСистемы(Ложь); Возврат Ложь; КонецЕсли; Возврат Истина; КонецФункции |
|||
2
Wobland
21.05.12
✎
13:06
|
запретить менять время не предлагать?
|
|||
3
Dzenn
гуру
21.05.12
✎
13:14
|
+ ситуация осложняется тем, что "сервер" - это не сервер в смысле 1С, а просто комп с файловой базой... работа по локальной сети с базой типа File="\\Main\s\base\Trade_1";
Вызов текущей даты из серверного модуля ничем не отличается, поэтому приходится изголяться. |
|||
4
vvp91
21.05.12
✎
13:41
|
set SDATE=%date:~6,4%%date:~3,2%%date:~0,2%
set STIME=%time:~0,2%%time:~3,2%%time:~6,2% echo %SDATE% %STIME% |
|||
5
vvp91
21.05.12
✎
13:43
|
Ну а по-хорошему надо NTP-запрос делать и дальше, например, писать время начала работы пользователя в регистр сведений.
|
|||
6
Torquader
21.05.12
✎
20:32
|
Самый простой способ - ставим на тот комп запрет изменения времени в групповых политиках - далее ставим простой http-сервер и при критичных операциях смело запрашиваем время у него через http-request - и если пользователь что-то поправил - ему вздрючку.
p.s. у меня на компах пользователи работают с правами администратора,но поправить время - не могут. |
|||
7
Мизантроп
21.05.12
✎
20:35
|
(6)
> далее ставим простой http-сервер и при критичных операциях смело запрашиваем время у него через http-request что такое http сервер? |
|||
8
Мизантроп
21.05.12
✎
20:36
|
если речь о www сервере, то время можно и более простыми способами получать
|
|||
9
Мизантроп
21.05.12
✎
20:47
|
net time /?
|
|||
10
hhhh
21.05.12
✎
23:21
|
как-то мне тоже приходилось проводить реализацию в случае синхронизации времени с сервером. Я открывал рядом два окошка: в одном менял дату, а в другом тут же нажимал ОК в реализации. Буквально в секунду укладывался. Но потом оказалось, что там интервал опроса где-то секунд 20, можно было и не торопиться.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |