Имя: Пароль:
1C
1С v8
Запись системного времени в файл командной строкой
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, можно было и не торопиться.