Синхронизация с Сервером 1С во внешнем соединении


Позволяет установить время удаленного SQL-сервера на компьютере при выполнении обмена через Внешнее соединение

Предыстория:

Возникла необходимость в синхронизации времени перед обменом в локальной базе с удаленным Сервером 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 = Неопределено;
КонецЕсли;

Файлы обработки:

-



Back to top