Имя: Пароль:
1C
1C 7.7
v7: Изменение рабочей даты пользователем
0 kupec
 
18.01.16
15:48
Возможно ли в программе отловить изменение рабочей даты пользователем, т.е что-то наподобие функции ПриРучномИзмененииРабочейДаты()
1 serpentt
 
18.01.16
16:23
Себе сделали в "ключевых местах"(например при вводе ЗаказаПокупателю) проверку на выставленное время на сервере...

Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
            Скрипт.Language = "javascript";
            
            Locator = СоздатьОбъект("wbemscripting.swbemlocator");
            ServicesSet = Locator.ConnectServer("ИмяСервера", "root\cimv2",Юзер,Пасс);
            
            Items = ServicesSet.ExecQuery("Select * from Win32_LocalTime");
            Скрипт.AddObject("Коллекция",Items);
            Перечисленные = Скрипт.Eval("new Enumerator(Коллекция)");
            ч = Перечисленные.item(0).Properties_.Item("Hour").Value;
            м = Перечисленные.item(0).Properties_.Item("Minute").Value;        
            
            Если ВернутьТолькоЧасы = 1 Тогда
                Возврат Число(ч);
            Иначе
                Если Число(ч) >= ВремяСтопа Тогда
                    ФлагРазрешения = 0;
                    Сообщить("Время на сервере " + ч + ":" + м);
                КонецЕсли;
            КонецЕсли;


тоже можно наверное замутить и с датой.
2 kupec
 
18.01.16
16:31
(1) дату на сервере тоже ловлю. И думаю сделать раз в 15 минут проверку на соответствие её с рабочей. Если не равна, то приравнивать.
3 trdm
 
18.01.16
16:34
а у меня программа просто тупо ругается на разность даты/времени на компе пользователя и на сервере и запрещает запись документов и справочников.
Дату и время сервера запрашиваю у MS SQL запросом:
        ТекстЗапроса = "
        |--Получение даты и времени с сервера
        |SELECT
        |DATEPART(hour, GETDATE()) as hour
        |,DATEPART(minute, GETDATE()) as minute
        |,DATEPART(second, GETDATE()) as second
        |,DATEPART(year, GETDATE()) as year
        |,DATEPART(month, GETDATE()) as month
        |,DATEPART(day, GETDATE()) as day        
        |";
4 kupec
 
18.01.16
16:44
Дело немного в другом, для определенных людей рабочую дату можно менять, но так как они забывают её ставить обратно, нужно придумать механизм возврата даты обратно минут через 10 после её изменения...
5 kupec
 
18.01.16
16:45
Процедура МониторингИзмененияРабочейДаты()
    Если ДатаСервера=РабочаяДата() Тогда
        ДатаИзменена=0;
        Возврат;
    Иначе
        ТекущееВремя(Ч,М);
        Если ДатаИзменена=0 Тогда
            Сообщить(СокрЛП(ТекущаяДата())+" - "+СокрЛП(ТекущееВремя())+"   Изменена рабочая дата - примерно через 10 минут рабочая дата синхронизируется с сервером...");
            ТекущееВремя(Ч,М);
            ВремяИзмененияРабочейДаты=Ч*60+М;ДатаИзменена=1;
        КонецЕсли;
        ПрошлоВремениСИзмененияРабочейДаты=Ч*60+М;
        Если (ПрошлоВремениСИзмененияРабочейДаты-ВремяИзмененияРабочейДаты>9) Или (ПрошлоВремениСИзмененияРабочейДаты-ВремяИзмененияРабочейДаты<0) Тогда
            РабочаяДата(ДатаСервера,2);ДатаИзменена=0;
            Сообщить(СокрЛП(ТекущаяДата())+" - "+СокрЛП(ТекущееВремя())+"   Рабочая дата синхронизирована с сервером...");
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры
6 kupec
 
18.01.16
16:45
сделал вот так...
7 Serg_1960
 
18.01.16
17:20
Надеюсь автор не путает рабочую дату с проверкой времени на клиенте и на сервере?

ВремяНаКлиенте = ТекущаяДата();
ВремяНаСервере = ПроверкаРазницыВремени.ТекущаяДатаСервера();