Vaniev Alexander

141
Рейтинг

Kis_s



  •   Регистрация: 22.01.2015 (9 лет назад)

  •   Был(а) на сайте: 19.04.2024

Друзья
  • Alexey Smeshkov
Подписчики 2

Группы

Профессиональный разработчик

Рейтинг 141

Программа - всплывающий клиент для оповещения и работы с 1С без интерактивного запуска самого 1С:Предприятия пользователем

Инструменты и обработки Системный администратор Программист Windows Абонемент ($m) Приложение (exe) Инструментарий разработчика

Клиент при запуске подключается к 1C:Предприятию. После этого висит в системном трее и с определенной периодичностью опрашивает базу данных. В случае каких-либо изменений, показывает пользователю необходимую информацию. Также, прямо в окне клиента можно реализовать Web интерфейс для каких-нибудь несложных действий, например, утверждения Заявок или Участия в корпоративном чате. Таким образом можно организовать двустороннюю связь Клиент - 1С:Предприятие без открытия главного окна программы.

1 стартмани

27.01.2015    28236    109    Kis_s    41       

73

UsersLog.exe. Система полной отчетности об использовании рабочего времени пользователями. 1С, Word, Excel, Кино, Интернет, Одноклассники, ВКонтакте и т.д. Не только 1С, но и все активные окна Windows посекундно!

Инструменты и обработки Системный администратор Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Windows Абонемент ($m) Приложение (exe) Инструменты администратора БД Учет рабочего времени

Система полной отчетности об использовании рабочего времени пользователями. Не только 1С, но и все активные окна Windows. Сколько времени и на что потрачено... Клиент UsersLog.exe запускается фоном на рабочих местах пользователей. Постоянно отслеживает активное окно Windows, его заголовок и имя процесса. Все это пишется в центральную базу данных sql, dbf или Excel. Конфигурация на 1С анализирует эти данные и строит любые отчеты использования рабочего времени по пользователям. Вплоть до конкретного заголовка любого окна. В случае отключения от центральной базы (ноутбук уехал в командировку) все данные пишутся локально, а при подключении к центральной базе - перемещаются в неё. Используются только официальные и документированные функции Windows.

1 стартмани

26.01.2015    25558    209    Kis_s    77       

68

Комментарии

AdminUsersLog.exe. Система полной отчетности об использовании рабочего времени пользователями. 1С, Word, Excel, Кино, Интернет, Одноклассники, ВКонтакте и т.д. Не только 1С, но и все активные окна Windows посекундно!#36 29.01.15 22:47
(35) arktika1, Как нравится .... можно и туда и туда ... просто локальному клиенту запретить считать окно терминала - этим будет заниматься клиент на сервере ....
AdminUsersLog.exe. Система полной отчетности об использовании рабочего времени пользователями. 1С, Word, Excel, Кино, Интернет, Одноклассники, ВКонтакте и т.д. Не только 1С, но и все активные окна Windows посекундно!#34 29.01.15 17:15
(29) ilialin, Отчет "выдран" из рабочей базы. "Время по-факту" - это как раз время, которое отражает программа. Там еще есть ВремяПоПлану, ВремяПоНорме, Отклонения, Превышения, Эффективность и прочие показатели, которые хотел клиент ....
DevПрограмма - всплывающий клиент для оповещения и работы с 1С без интерактивного запуска самого 1С:Предприятия пользователем#25 29.01.15 17:08
(22) BorovikSV, Уже ... новая версия именно такая и будет .... получается в сумме около 500 Кб .....
(23) Angry, Спасибо за идеи .... будем воплощать по мере возможности ... Тем более (А ведь никто не сказал!), я лихо промахнулся, и, вместо ComConnector использовал полноценное Com-соединение .... ;о((( .... спать нужно больше ....

На данный момент новый релиз "в процессе отладки" ... есть проблемы с утечкой памяти .... отлавливаю .... как будет готово - выложу.
Сделано:
- Нормальный V8*.ComConnector. Без запуска процесса 1С, через нормальное внешнее соединение... V8*.Application пока оставил ...
- Нормальное поведение и отображение OnLine/OffLine без криков об ощибке соединения и т.д....
- Часы работы, чтобы отцеплялась от базы ...
- 1С обработка для тестирования глобальных процедур с выводом их результата в html и возможностью прямо там покликать по ссылкам ...
- Включаемое самологирование для отладки проблем ...
- Команды Back/Forvard
- Отслеживание изменений элементов пользователем и вопрос при обновлении...
- Нормальная работа демобазы на клиент-серверном варианте..
- Несколько управляющих команд от функций 1Са... (но вот уважаемый Angry набросал еще ;о))))
- Многое по-мелочи ...
DevПрограмма - всплывающий клиент для оповещения и работы с 1С без интерактивного запуска самого 1С:Предприятия пользователем#21 28.01.15 16:01
(19) Angry, Никогда не соединялся программно с Webом 1Са .... если есть примеры реализации с открытым кодом, да еще чтобы можно было вызвать глобальные функции (язык не важен) - с радостью посмотрю ... возможно, реализую ....
DevПрограмма - всплывающий клиент для оповещения и работы с 1С без интерактивного запуска самого 1С:Предприятия пользователем#20 28.01.15 15:58
(18) reddima, спасибо, что помогаете выявлять проблемы .... Что касается Com - соединения, то, видимо, 1Ска не быстро откликается, вот и проходит время .... вечером погоняю в таком режиме на sql базах ....

На текущий момент я переделал глобальные модули:

1. PopUp1C (Свойства Глобальный/Клиент/Сервер)
Код
Функция PopUpIndex(Параметр="") Экспорт
   
   Стр = "<img src='IMG\home.png'><br><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Page' Name='PopUpБюджеты'>Бюджеты</a><br><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Page' Name='PopUpКалькулятор'>Калькулятор</a><br><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Page' Name='PopUpСсылки'>Ссылки</a><br><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Page' Name='PopUpЧасы'>Часы</a><br><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Command' Name='ReadMe.html'>Описание</a><br><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Page' Name='PopUpИнформация'>О программе</a><br><br>"+Символы.ПС;
   
   Возврат Стр;
КонецФункции

Функция PopUpБюджеты(Параметр="") Экспорт
   Возврат PopUp1CНаСервере.PopUpБюджетыНаСервере(Параметр);
КонецФункции

Процедура PopUpУтвердить(Параметр="") Экспорт
   PopUp1CНаСервере.PopUpУтвердитьНаСервере(Параметр);
КонецПроцедуры

Функция PopUpКалькулятор(Параметр="", ПредыдущаяСтрока="", СтрокаРезультат = "") Экспорт
   Возврат PopUp1CНаСервере.PopUpКалькуляторНаСервере(Параметр);
КонецФункции

Функция PopUpCalc(Параметр="") Экспорт
   Возврат PopUp1CНаСервере.PopUpCalcНаСервере(Параметр);
КонецФункции

Функция PopUpСсылки(Параметр="") Экспорт
   Стр = "<img src='IMG\links.png'><br><br>"+Символы.ПС;
   
   
   Стр = Стр + "<a href='http://yandex.ru'>Yandex в этом окне</a><br>"+Символы.ПС;
   Стр = Стр + "<a href='http://yandex.ru' target='_blank'>Yandex в новом окне IE</a><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Command' Name='http://www.google.com'>Google в окне браузера по-умолчанию</a><br>"+Символы.ПС;
   Стр = Стр + "<a href='' ID='Command' Name='c:\'>Диск c:\ в проводнике</a><br>"+Символы.ПС;
   Стр = Стр + "<a href='c:\'>Диск c:\ в этом окне</a><br>"+Символы.ПС;
   
   Стр = Стр + "<br><br><i>Для возврата назад из некоторых ссылок воспользуйтесь пунктом Home контекстного меню значка в системном трее!</i>"+Символы.ПС;
   
   Возврат Стр;
КонецФункции

Функция PopUpЧасы(Параметр="") Экспорт
   Стр = "<img src='IMG\time.png'><br><br>"+Символы.ПС;
   
   Стр = Стр + "<font size='30' color='#ea0ff2'>"+СокрЛП(ТекущаяДата())+"</font><br><br>"+Символы.ПС;
   
   Стр = Стр + "<br><br><i>Эта страница будет автоматически появляться при каждом опросе 1С, т.к. содержание ответа от 1С (строка времени) меняется!</i>"+Символы.ПС;
   
   Возврат Стр;
КонецФункции

Функция PopUpИнформация(Параметр="") Экспорт
   Стр = "<img src='IMG\favorites.png'><br><br>"+Символы.ПС;
   
   Стр = Стр + "PopUp1C v1.1 (C)AltSystem 2015<br><br><a href='mailto:vaniev12@gmail.com'>vaniev12@gmail.com</a>"+Символы.ПС;
   
   Возврат Стр;
КонецФункции


2. PopUp1CНаСервере (Свойства Сервер/Вызов сервера)
Код
Функция СтрокаВМассив(Знач Стр, Разделитель, МинимальноЭлементов=0) Экспорт
   мДанных = Новый Массив;
   Поз = Найти(Стр,Разделитель);
   Пока Поз<>0 Цикл
      мДанных.Добавить(Лев(Стр,Поз-1));
      Стр = Сред(Стр,Поз+1);
      
      Поз = Найти(Стр,Разделитель);
   КонецЦикла;
   Если Стр<>"" Тогда
      мДанных.Добавить(Стр);
   КонецЕсли;
   Пока мДанных.Количество()<МинимальноЭлементов Цикл
      мДанных.Добавить("");
   КонецЦикла;
   Возврат мДанных;
КонецФункции

Функция ПараметрВТаблицу(Знач Параметр, МинимумКолонок=0) Экспорт
   //В параметре приходит массив из эленемнов DHTML, примерно такой (разделители = перевод строки и табуляция):
   
   //Doc000000001   checkbox   <INPUT type=checkbox border=0 name=Doc000000001>      
   //Doc000000002   checkbox   <INPUT CHECKED type=checkbox border=0 name=Doc000000002>   1   
   //Doc000000003   checkbox   <INPUT type=checkbox border=0 name=Doc000000003>      
   //accept   button   <INPUT id=Function type=button value=OK name=accept>   OK
   
   Т = Новый ТаблицаЗначений;
   
   мСтрок = СтрокаВМассив(Параметр, Символы.ПС);
   Для ИндексСтрок=0 По мСтрок.ВГраница() Цикл
      мЗначений = СтрокаВМассив(мСтрок[ИндексСтрок], Символы.Таб, МинимумКолонок);
      
      Пока Т.Колонки.Количество()<мЗначений.Количество() Цикл
         Т.Колонки.Добавить("_"+СокрЛП(Т.Колонки.Количество()));
      КонецЦикла;
      
      СтрТ = Т.Добавить();
      Для ИндексКолонок=0 По мЗначений.ВГраница() Цикл
         СтрТ[ИндексКолонок] = мЗначений[ИндексКолонок];
      КонецЦикла;
   КонецЦикла;
   
   Пока Т.Колонки.Количество()<МинимумКолонок Цикл
      Т.Колонки.Добавить();
   КонецЦикла;
   
   Возврат Т;
КонецФункции

Функция ПолучитьТаблицуДокументов() Экспорт
   Запрос = Новый Запрос;
   Запрос.Текст = 
   "ВЫБРАТЬ
   |   Бюджет.Ссылка,
   |   Бюджет.ВерсияДанных,
   |   Бюджет.ПометкаУдаления,
   |   Бюджет.Номер,
   |   Бюджет.Дата КАК Дата,
   |   Бюджет.Проведен,
   |   Бюджет.Кому,
   |   Бюджет.ОтКого,
   |   Бюджет.Утвержден,
   |   Бюджет.Сумма,
   |   Бюджет.Комментарий
   |ИЗ
   |   Документ.Бюджет КАК Бюджет
   |ГДЕ
   |   Бюджет.Кому = &Кому
   |
   |УПОРЯДОЧИТЬ ПО
   |   Дата";
   
   Запрос.УстановитьПараметр("Кому",ИмяПользователя());
   
   Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Функция PopUpБюджетыНаСервере(Параметр="") Экспорт
   ТД = ПолучитьТаблицуДокументов();
   
   //выводим таблицу
   Стр = "<img src='IMG\documents.png'><br><br>"+Символы.ПС;
   Стр = Стр + "<font color=de4d4d><b>Документы на акцепт:</font></b><br><br>"+Символы.ПС;
   Стр = Стр + "<table bgcolor=#ffffff cellSpacing='0' cellPadding='5' border='0'>"+Символы.ПС;
   Стр = Стр + "<tr bgcolor=#ffffff><td><b>Документ</b></td><td><b>От кого</b></td><td><b>Сумма</b></td><td><b>Комментарий</b></td><td><b>Утвердить</b></td></tr>"+Символы.ПС;
   Для Каждого СтрТД Из ТД Цикл
      ЧетнаяСтрока = ТД.Индекс(СтрТД)%2;
      checked = ?(СтрТД.Утвержден," checked","");
      Стр = Стр + "<tr bgcolor="""+?(ЧетнаяСтрока,"#ffffff","#f0f0f0")+""">
         |<td>"+СокрЛП(СтрТД.Ссылка)+"</td>
         |<td>"+СокрЛП(СтрТД.ОтКого)+"</td>
         |<td>"+Формат(СтрТД.Сумма,"ЧДЦ=2")+"</td>
         |<td>"+СокрЛП(СтрТД.Комментарий)+"</td>
         |<td><div><input border=0 class='checkbox0' bgcolor=#ffffff type='checkbox' name='Doc"+СтрТД.Номер+"'"+checked+"></div></td>
      |</tr>"+Символы.ПС;
   КонецЦикла;
      
   //добавляем кнопку OK в последнюю строку
   Сообщение = "Покупайте наших слонов...";
   
   Стр = Стр + "<tr bgcolor=#ffffff><td colspan='4'><marquee scrollamount='3'>"+Сообщение+"</marquee></td><td> <input id='Procedure' name='PopUpУтвердить' value='OK' type='Button'> </td></tr>"+Символы.ПС;
   Стр = Стр + "</table>"+Символы.ПС;
   
   Стр = Стр + "<br><br><i>Проставьте утвержденные бюджеты и нажмите ОК. Данные в базе изменятся.</i>"+Символы.ПС;
   
   //Возврат СокрЛП(ТекущаяДата())+"<br><br>"+Символы.ПС+Стр;
   Возврат Стр;
КонецФункции

Процедура PopUpУтвердитьНаСервере(Параметр="") Экспорт
   //В параметре приходит массив из эленемнов DHTML, примерно такой (разделители = перевод строки и табуляция):
   
   //Doc000000001   checkbox   <INPUT type=checkbox border=0 name=Doc000000001>      
   //Doc000000002   checkbox   <INPUT CHECKED type=checkbox border=0 name=Doc000000002>   1   
   //Doc000000003   checkbox   <INPUT type=checkbox border=0 name=Doc000000003>      
   //accept   button   <INPUT id=Function type=button value=OK name=accept>   OK
   
   ТП = PopUp1CНаСервере.ПараметрВТаблицу(Параметр, 4);
   ТД = PopUp1CНаСервере.ПолучитьТаблицуДокументов();
   
   Для Каждого СтрТП Из ТП Цикл
      Если НРег(СтрТП[1])="checkbox" Тогда
         СтрТД = ТД.Найти(Сред(СтрТП[0],4),"Номер");
         Если СтрТД<>Неопределено Тогда
            Утвержден = ?(СокрЛП(СтрТП[3])="1",Истина,Ложь);
            Если Утвержден<>СтрТД.Утвержден Тогда
               Док = СтрТД.Ссылка.ПолучитьОбъект();
               Док.Утвержден = Утвержден;
               Если Не Док.Проведен Тогда
                  Док.Записать(РежимЗаписиДокумента.Запись);
               Иначе
                  Док.Записать(РежимЗаписиДокумента.Проведение);
               КонецЕсли;
            КонецЕсли;
         КонецЕсли;
      КонецЕсли;
   КонецЦикла;
КонецПроцедуры

Функция PopUpКалькуляторНаСервере(Параметр="", ПредыдущаяСтрока="", СтрокаРезультат = "") Экспорт
   Стр = "<img src='IMG\calc.png'><br><br>"+Символы.ПС;
   
   Если СтрокаРезультат<>"" Тогда
      Стр = Стр + СтрокаРезультат+"<br><br>";
   КонецЕсли;
   
   Стр = Стр + "Что посчитать: ";
   Стр = Стр + "<input name='TextCalc' type='Text' border='3' value='"+ПредыдущаяСтрока+"'>";
   
   //добавляем кнопку OK
   Стр = Стр + "<input id='Function' name='PopUpCalc' value='OK' type='Button'>"+Символы.ПС;
   
   Стр = Стр + "<br><br><i>Введите любую формулу и нажмите ОК. 1С выполнит вычисление и вернет результат или ошибку.</i>"+Символы.ПС;
   
   Возврат Стр;
КонецФункции

Функция PopUpCalcНаСервере(Параметр="") Экспорт
   //В параметре приходит массив из эленемнов DHTML, примерно такой (разделители = перевод строки и табуляция):
   
   //TextCalc   text   <INPUT value=10+15 border=3 name=TextCalc>   10+15   
   //PopUpCalc   button   <INPUT id=Function type=button value=OK name=PopUpCalc>   OK
   
   ТП = ПараметрВТаблицу(Параметр, 4);
   
   СтрТП = ТП.Найти("TextCalc",ТП.Колонки[0].Имя);
   ПредыдущаяСтрока = "";
   Результат = "";
   Если СтрТП<>Неопределено Тогда
      ПредыдущаяСтрока = СтрТП[3];
      Попытка
         Результат = Вычислить(СтрТП[3]);
         СтрокаРезультат = "<font color='#4978af'><b>"+СокрЛП(СтрТП[3])+" = "+СокрЛП(Результат)+"</b></font>";
      Исключение
         Результат = ОписаниеОшибки();
         СтрокаРезультат = "<font color='#f97e7e'><b>"+СокрЛП(СтрТП[3])+" = "+СокрЛП(Результат)+"</b></font>";
      КонецПопытки;
   КонецЕсли;
   
   Возврат PopUpКалькулятор(Параметр, ПредыдущаяСтрока, СтрокаРезультат);
КонецФункции


Тестировал на sql - вроде все отпускается. При непостоянном подключении, действительно, есть проблемы - будем решать, что же делать ;о)))