Предыстория:
Возникла необходимость в синхронизации времени перед обменом в локальной базе с удаленным Сервером 1С базы центрального офиса. Исследования методов 1С: ТекущаяДата() и ТекущаяУниверсальнаяДата() выявили, что они выполняются на локальном компьютере, а не на удаленном сервере 1С, куда подключается внешнее соединение. Кроме того, в серверном модуле, где выполняется процедура обмена, недоступны методы 1С: ВыполнитьКомандуСистемы
Решение:
Для получения времени сервера 1С пришлось использовать прямое подключение к серверу SQL (сервер 1С запущен на том же компьютере), а для изменения времени локальной базы использован vbscript. На SQL-сервере надо предварительно создать пользователя GetTime с правами Public (и для базы Master дать роль DBReader).
Текст 1С 8.Х:
con = New COMОбъект("ADODB.Connection");
con.Provider="SQLOLEDB";
con.ConnectionString = "Driver={Microsoft OLE DB Provider};" +
"Data Source=PR-SQL-08;" +
"Initial Catalog=Master;" +
//"Integrated Security=false;" +
//"DataTypeCompatibility=80;" +
"User ID=GetTime; PassWord=******;";
con.Open();
recset = New COMОбъект("ADODB.Recordset");
recset = con.Execute("SELECT GETDate() as tm");
ВремяТут = ТекущаяДата();
recset.MoveFirst();
// получаем время на Скуле
ВремяЦО=recset.fields("tm").value;
con.Close();
con = Неопределено;
Если ВремяТут-ВремяЦО>3 или ВремяЦО-ВремяТут>3 Тогда
Scr = NEW COMОбъект("WScript.Shell");
mtm = ТекущаяДата()-(ВремяТут-ВремяЦО);
time = "cmd /C""time "+час(mtm)+":"+Минута(mtm)+":"+Секунда(mtm)+"""";
рр=Scr.Run("" + time + "",0,True);
Scr = Неопределено;
КонецЕсли;
достаточно было сделать такую функцию:
Главное, поместить эту функцию в серверный модуль 🙂
В типовых уже давно добавили проверку разницы времени клиента и сервера. Можно было бы и посмотреть. Как в типовой сделано общий модуль «ПроверкаРазницыВремени», процедура такая же как и в (1).
(1),(2)
а вы попробуйте то же самое при подключении к Серверу через Внешнее соединение
Спасибо! То что нужно! Работает на ура!
(3) Попробовал, работает.
Вызываю данную функцию по внешнему соединению.
Возврат