gifts2017

1С – пастырь

Опубликовал Осипов Сергей (fixin) в раздел Программирование - Практика программирования

У клиента возникла задача. По соображениям безопасности нужно было проверять, запущена ли постоянно 1с у сотрудников в различных территориально удаленных подразделениях.

Для решения на компьютерах сотрудников я запускал скрипт, который создает файл в каталоге локальной VPN-сети, а в центре периодически запускал проверку наличия таких файлов. Делюсь опытом.
Уточнение задачи

При отсутствии отклика от 1С компьютера в течение 20 минут должно формироваться почтовое извещение.

Повторно такое извещение должно отправляться только через час.

Извещения должны приходить только в рабочее время работы сотрудников, для каждого компьютера оно разное.

В начале дня не должно быть ложных тревог, должен быть некоторый задел.

Если компьютер начал работу после извещения, об этом должно тоже приходить извещение.

Реализация

Для семафоров работы 1с у сотрудников я выделил в локальной сети общедоступный каталог. Флажки сделал в виде файлов, имя которых состояло из названия компьютеров:

 

Учитывая, что нужно хранить информацию о последнем извещении, решено было ее хранить в каталоге базы в отдельном файле check-settings.txt, чтобы не напрягать базу лишними операциями чтения и записи.

 

На компьютерах сотрудников периодически, раз в 3 минуты, выполнялся код вида:

ИмяФайла = "\\192.168.5.210\1c_obmen\here\" + СокрЛП(ИмяКомпьютера()) + ".xml";

Ф = Новый ТекстовыйДокумент();

Ф.Записать(ИмяФайла);

 

В центре периодически выполнялся код вида:

//Пути, настройки

ИмяКаталогаПроверок = "c:\1c_obmen\here\";

ФайлСохраненияНастроек = ФРАНЧ.ПолучитьКаталогБазы() + "\check-settings.txt";

КоличествоМинутДляИзвещения = 20;

КоличествоМинутДляПовторногоИзвещения = 60;

КоличествоМинутЗащитыОтСтартаКомпа = 45; //45 минут с момента старта компа ждем, не работаем

ИсхПолучатели = "boss@office.ru, support@office.ru, security@office.ru";

 

//Восстанавливаем из файла список последних оповещений

Попытка

       Т = Новый ТекстовыйДокумент();

       Т.Прочитать(ФайлСохраненияНастроек);

       СтруктураНастроек = ЗначениеИзСтрокиВнутр(Т.ПолучитьТекст());

Исключение

       СтруктураНастроек = Новый Структура("Компы", Новый ТаблицаЗначений());

       СтруктураНастроек.Компы.Колонки.Добавить("Комп");

       СтруктураНастроек.Компы.Колонки.Добавить("ДатаПоследнегоИзвещения");

       СтруктураНастроек.Вставить("ДатаПоследнейПроверки", '00010101');

КонецПопытки;

 

//Получаем список компов, от которых есть отзывы на сервере

ТекЗадача = Справочники._ЗадачиПоРасписанию.НайтиПоКоду("ПЭПР1СРАБ");

З = Новый Запрос(

"ВЫБРАТЬ

|      _ЗадачиПоРасписаниюМеста.Комп.Ссылка КАК Ссылка,

|      _ЗадачиПоРасписаниюМеста.Комп.Код КАК Код

|ИЗ

|      Справочник._ЗадачиПоРасписанию.Места КАК _ЗадачиПоРасписаниюМеста ГДЕ Ссылка = &ТекЗадача");

З.УстановитьПараметр("ТекЗадача", ТекЗадача);

Сообщить(ТекЗадача);

ТЗ = З.Выполнить().Выгрузить();

 

//Перебираем компы

Для Каждого Строка ИЗ ТЗ Цикл

       ТекКомп = Строка.Ссылка;

       //Проверяем, что текущее время подпадает под график работы сотрудника на компе

       СтруктураДанныхКомпа = _УчетРабочегоВремени.ПолучитьДанныеПоУчетуРабочегоВремениНаДату(ТекущаяДата(), ТекКомп);

       ВремяНачалаРаботыКомпа = СтруктураДанныхКомп.ВремяНачалаРаботы;

       ВремяОкончанияРаботыКомпа = СтруктураДанныхКомпа.ВремяОкончанияРаботы;

       Если НЕ ЗначениеЗаполнено(ВремяНачалаРаботыКомпа) ИЛИ НЕ ЗначениеЗаполнено(ВремяОкончанияРаботыКомпа) Тогда

             Продолжить;

       КонецЕсли;

      

       Сейчас = ТекущаяДата();

       ВремяСейчас = Дата(1, 1, 1, Час(Сейчас), Минута(Сейчас), Секунда(Сейчас));

      

       //Если комп еще не работает, не извещать (оставляем небольшой задел при старте компа)...

       Если ВремяСейчас < (ВремяНачалаРаботыКомпа + КоличествоМинутЗащитыОтСтартаКомпа * 60) ИЛИ ВремяСейчас > ВремяОкончанияРаботыКомпа Тогда

             Продолжить;

       КонецЕсли;

      

       //Проверяем извещения

       ТекКод = СокрЛП(Строка.Код);

       Ф = Новый Файл(ИмяКаталогаПроверок + "\" + ТекКод + ".xml");

       Если НЕ Ф.Существует() Тогда

             ДатаПроверки = '00010101';

       Иначе

             ДатаПроверки = Ф.ПолучитьВремяИзменения();

       КонецЕсли;

       //Сообщить("" + Строка.Ссылка + ": " + ДатаПроверки );

      

       Получатели = ИсхПолучатели;

       //Получатели = Получатели + "," + ТекКомп.ЭлектроннаяПочта;

       Получатели = Получатели + "," + ФРАНЧ.ПолучитьПочтовыеАдресаРуководителейСотрудников(ТекКомп);

       Получатели = ФРАНЧ.ДатьУникальныеПочтовыеАдреса(Получатели);

 

      

       ОтправлятьПисьмо = ложь;

      

      

       //Получаем строку с информацией о компе

       ИскСтрока = СтруктураНастроек.Компы.Найти(Строка.Ссылка, "Комп");

       ДатаПоследнегоИзвещения = '00010101';

       Если ИскСтрока = Неопределено Тогда

             ИскСтрока = СтруктураНастроек.Компы.Добавить();

             ИскСтрока.Комп = Строка.Ссылка;

             ИскСтрока.ДатаПоследнегоИзвещения = '00010101';

       КонецЕсли;

      

       //Получаем дату последнего извещения. Если это не сегодняшняя дата, сбрасываем ее...

       Если НачалоДня(ИскСтрока.ДатаПоследнегоИзвещения) <> НачалоДня(ТекущаяДата()) Тогда

             ИскСтрока.ДатаПоследнегоИзвещения = '00010101';

       КонецЕсли;

       ДатаПоследнегоИзвещения = ИскСтрока.ДатаПоследнегоИзвещения;

 

      

       //Если проверка не пройдена, т.е. комп не доложился...

       Если ТекущаяДата() - ДатаПроверки  > КоличествоМинутДляИзвещения * 60 Тогда

             //Нужно ли извещать

             //Если ранее не извещали или прошло нужное количество минут

             Извещать = НЕ ЗначениеЗаполнено(ДатаПоследнегоИзвещения) ИЛИ ТекущаяДата() - ДатаПоследнегоИзвещения > КоличествоМинутДляПовторногоИзвещения * 60;           

             Если Извещать Тогда

                    //Извещаем

                    ИскСтрока.ДатаПоследнегоИзвещения = ТекущаяДата();

                   

                    //Формируем письмо

                    Тема = "Не запущена база 1с на компе: " + Строка.Ссылка + " Нет подтверждения " + ?(НЕ ЗначениеЗаполнено(ДатаПроверки), "совсем", "" + Цел((ТекущаяДата() - ДатаПроверки) / 60) + " минут") + ".";

                    Тело = Тема;

                    Если ЗначениеЗаполнено(ДатаПоследнегоИзвещения) Тогда

                           Тело = Тело + Символы.ПС + "Дата последней активности компа: " + ?(НЕ ЗначениеЗаполнено(ДатаПроверки), " не указана", ДатаПроверки);

                           Тело = Тело + Символы.ПС + "Дата последнего извещения: " + ДатаПоследнегоИзвещения;

                    КонецЕсли;

                    //Нужно отправлять письмо

                    ОтправлятьПисьмо = истина;

             КонецЕсли;

            

       Иначе//Если проверка пройдена, т.е. комп доложился нормально

             //Если извещение было

             Если ЗначениеЗаполнено(ДатаПоследнегоИзвещения) Тогда

                    Если  ТекущаяДата() - ДатаПоследнегоИзвещения < КоличествоМинутДляПовторногоИзвещения * 60 Тогда

                           Тема = "База 1с опять заработала после не пройденной проверки на компе:  " + Строка.Ссылка + " Спустя " + Цел((ТекущаяДата() - ДатаПоследнегоИзвещения) / 60) + " минут после последнего извещения.";

                           Тело = Тема;

                           Если ЗначениеЗаполнено(ДатаПоследнегоИзвещения) Тогда

                                  Тело = Тело + Символы.ПС + "Дата последней активности компа: " + ?(НЕ ЗначениеЗаполнено(ДатаПроверки), " не указана", ДатаПроверки);

                                  Тело = Тело + Символы.ПС + "Дата последнего извещения: " + ДатаПоследнегоИзвещения;

                           КонецЕсли;

                           //Нужно отправлять письмо

                           ОтправлятьПисьмо = истина;

                           ИскСтрока.ДатаПоследнегоИзвещения = '00010101'; //Сбрасываем дату последнего извещения

                    КонецЕсли;

             КонецЕсли;

       КонецЕсли;

      

       //Отправляем письмо

       Если ОтправлятьПисьмо Тогда

             Сообщить(Тема);

             Сообщить(Тело);

             Тело = Тело + Символы.ПС + "Отправлено в: " + ТекущаяДата();

             ФРАНЧ.ОтправитьПисьмо(, Получатели, Тема, Тело);

       КонецЕсли;

      

КонецЦикла;

 

 

//Сохраняем в файл список последних оповещений

Т = Новый ТекстовыйДокумент();

Т.УстановитьТекст(ЗначениеВСтрокуВнутр(СтруктураНастроек));

Т.Вывод = ИспользованиеВывода.Разрешить;

Т.Записать(ФайлСохраненияНастроек);

Сообщить(ФайлСохраненияНастроек);

Недостатки решения и резюме

  1. Можно эмулировать работу 1С, создавая вручную файл. Можно обойти подписью файла хэшем. Но решено, что и так надежно. Аналогично, можно удалять чужие файлы из вредности, но аналогично, не принципиально.
  2. При отсутствии связи с компьютером возникает ложная тревога. Но это даже полезно, т.к. своевременно выявляются обрывы связи.

 

Таким образом достаточно просто была решена поставленная заказчиком задача.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Павлик (DimaP) 25.09.12 18:48
2. Алексей (LelikOFF) 25.09.12 20:22
Я бы отказался (что и сделал в аналогичной задаче) от такого списка файлов, и делал бы записи в регистр сведений
AlexO; RomaLut; +2 Ответить 1
3. Осипов Сергей (fixin) 25.09.12 22:52
(1) Да я люблю такие задачи, где простым эффектом решаютс сурьезные весчы.
(2) вы про какие файлы? про файл хранения настроек или файл семафоров. Файл семафоров часто меняется, незачем дергать базу. Кроме того, их можно и на FTP размещать, Если чо.
4. Сергей Валутин (Bacemo) 25.09.12 23:11
Идея нормальная. Пригодится для своих задач.
5. Степан (stepan_shock) 26.09.12 09:10
Ну запустил, клиент 1С, свернул и ушел пить кофе...
6. Алекс Ю (AlexO) 26.09.12 09:14
(4) Bacemo,
да вам все пригодится - какую обработку не возьми из последних :)
Что за задачи у вас такие?
7. Алекс Ю (AlexO) 26.09.12 09:18
(3) fixin,
Сергей, есть вполне себе надежные и ппростые средства системного администрирования и логгирования запуска и работы приложений.
Но жду от вас 1С:Управление межланетными полетами. С обязательным заделом под посещение Марса и Венеры :)
8. Андрей Казанцев (ander_) 26.09.12 09:25
(6) AlexO, видимо задача побольше сообщений набить :)
9. Anatolii Karasev (KapasMordorov) 26.09.12 10:18
1С: Назойливое очко Саурона.

Если всё выполняется в 1С же, почему бы список активных пользователей не использовать?
andron79; adminfo2002; ryst; +3 Ответить 1
10. Рустам Атаи (ryst) 26.09.12 10:36
Объясните пож., зачем городить огород с файлами когда можно сделать тоже самое на активных пользователях и регистре сведений? Плюс безопасность (например чтобы никто удалить/поменять немог) можно было бы реализовать средствами 1С.
adminfo2002; +1 Ответить 1
11. Серж Иванов (adminfo2002) 26.09.12 10:50
(5) stepan_shock, дальше создается зондекоманда, которая врывается к клиенту и ложит его лицом в пол :)
12. Степан (stepan_shock) 26.09.12 11:07
(11) adminfo2002, я бы сказал прямо в кофе:)
13. Осипов Сергей (fixin) 26.09.12 11:17
(9)(10) перечитайте пожалуйста условие задачи. Может быть я конечно не внятно объяснил, но о каком списке активных пользователей может идти речь, если речь идет о различных базах 1с в територриально удаленных подразделениях, пусть и связанных в VPN, замените для просветления VPN на FTP, может быть так проще будет понятно.
Речь вообще то о контроле за работой в РИБ базах.
14. Осипов Сергей (fixin) 26.09.12 11:18
(7) бесплатные, гибкие? Гибче, чем 1С? Дайде два.
15. Babys (babys) 26.09.12 11:55
(14) fixin, курите RTFM по винде, и будет вам щасте :)
Приходилось решать подобную проблему, решили виндовым скриптом, это в доменах.

2 fixin, а как быть с компами в НТТ? Куда, и главное когда, они будут выкладывать свои файлики ;)
16. Михаил Ражиков (tango) 26.09.12 11:56
(6) AlexO, у товарища задача простая - маней на скачку наскрести
17. Ловыгин Антон (wunderland) 26.09.12 12:01
чтобы никто не лазил по файлам руками можно либо на FTP хранить либо на SMB и сделать как с сусликом, который есть, но его никто не видит - запретить ls
З.Ы. - картинка очень понравилась :)
18. Anatolii Karasev (KapasMordorov) 26.09.12 12:08
(13)
если базы на сервере, то еще и информация на сервере 1С есть
19. Осипов Сергей (fixin) 26.09.12 12:10
(15) бла-бла. Если знаете, пишите статью. А так больше на разборки времени потратится. Можно конечно аудит на запуск назначить. но потом этот аудит надо в центр передавать как-то, тем более компы не в домене. Да ну нафиг, в виндовом гуане копаться. Тут все под рукой и делается быстро.
(18) базы файловые. К тому же если бы базы были и серверные, они бы хранились на разных серверах. VPN - медленная, 1с через нее не взлетит.
20. Андрей Вовк (wowkai) 26.09.12 12:39
а можно опубликовать текст скрипта, интересно опробовать у себя.
21. Олег Филиппов (comol) 26.09.12 13:04
Что-то по-моему перемудрили... Костыль какой-то получился. Типичная задача так называемого эхо-сервера. Создаётся база "Прослушиватель", а в остальных просто раз в период отсылаются пакеты. Для прослушивателя понадобится ВК. Таких куча. Как пример http://infostart.ru/public/69992/ Отсылку можно сделать и без ВК... через WinSock. Хотя если делать правильно то на клиенте нужна ВК key hook-ера, чтобы обрабатывать нажатия клавиш пользователей в 1С :)
22. Осипов Сергей (fixin) 26.09.12 13:11
(21) и это вы называете перемудрили? ;-)
имхо с пакетами как раз сложнее. ;-)
23. Роман (AzzZ) 26.09.12 13:42
Жесть какая ))) Согласен с (7) AlexO, есть другие способы решения данной проблемы, куда более мм... как бы это сказать, достойные что ль. Достаточно одного грамотного сис. админа.
Это как сделать 25 печатных форм по каждой организации "забыв" что есть такая вещь как параметры в макете, а информацию можно взять из справочника.
24. Осипов Сергей (fixin) 26.09.12 14:53
(23) бла, бла, бла. Способы в студию!
25. Роман (AzzZ) 26.09.12 15:23
Эм, ну можете забить в поисковике строчку: "Учет программного обеспечения". Посмотреть на доступные варианты программ. Есть там и бесплатные по моему. По факту ничего против Вашего способа не имею, просто есть другие, вполне возможно проще и надежней.
26. Илья (ПиН) 26.09.12 15:49
есть хорошая книжка Системное программирование, рекомендую...
27. Осипов Сергей (fixin) 26.09.12 16:09
(25)(26) все это неконкретика. я и сам посылать в Гугль умею. Пока не предложено других конкретных способов, буду юзать свой. ;-)

Конкретика - это озвучивание конкретного метода.
Например - назначить аудит на запуск и периодически скриптом скидывать журнал аудита в центр.
Тоже вариант, но надо узнавать, как ковырять журналы аудита программно. Это время.

Если будет конкретика - будем разговаривать. Если будут посылы в Гугл, отвечу симметрично.
dimaster; +1 Ответить
28. Алексей Верещагин (alexware) 26.09.12 20:43
Считаю, что такое решение вполне имеет право на существование и представление здесь. Всё-таки не используется никакой другой инструментарий, кроме 1C. А это тоже плюс. Часто, на самом деле, для многих (меня в том числе) требуется больше времени на разработку при использовании другого инструментария (которым пользуешься редко). Замечу только, что в начале чтения сбивает с толку фраза "Для решения на компьютерах сотрудников я запускал скрипт, который создает файл в каталоге локальной VPN-сети". Лучше писать "код", а не "скрипт". Всё-таки под скриптом обычно подразумевается другое.
29. г. Казань Рустем Гумеров (Rustig) 26.09.12 21:36
Читать статью вечером после всего рабочего дня тяжело, особенно если в начале статьи не отвечается на вопрос "Зачем?" Зачем заказчику это нужно было? Где-то среди комментариев проскальзывает "Речь вообще-то о контроле за работой в РИБ базах." Но и этого мало для понимания. А хотелось бы понять. :)
30. г. Казань Рустем Гумеров (Rustig) 26.09.12 21:46
Поддерживаю автора в том, что (выражусь своими словами, возможно с которыми автор не согласится) "говорунов-критиканов" среди прокомментировавших публикацию через чур много, хотя покамест они сами не отличились в написании более-менее добротных статей. Что ж, приходится только мириться с этим.
И наверное, название статьи лучше поменять на "Пример реализации семафоров внешними файлами для РИБ". Сухо, ясно, конкретно.
А то от названия "1С -пастырь" ждет чего-то более увлекательного, от того наверное такая резкая критика: все завлекаются названием, а получают по мордасам не всем интересными (актуальными) семафорами. :)
31. Anatolii Karasev (KapasMordorov) 27.09.12 07:40
(30)
Да, название завлекательное. А дальше:
задача. По соображениям безопасности
...
Для семафоров работы 1с у сотрудников я выделил в локальной сети общедоступный каталог.
32. Осипов Сергей (fixin) 27.09.12 07:51
(31) как корабль назовете, так он и поплывет. Программирование - дело творческое. К названию тоже нужно подходить с огоньком. Чтобы и суть отражало и запоминалось и брэндировало.
33. Роман (AzzZ) 27.09.12 08:59
(30) Rustig, статьи на инфостарте добавляют ЧСВ, но по факту многим просто лень что-то выкладывать. На счет "пастыря" согласен, но тут уж хозяин барин.

(31) KapasMordorov, про папку и безопасность меня тоже порадовало. Не совсем понятно какое отношение безопасность имеет к нахождению пользователя за компом(о_О). Более того к нахождению пользователя в программе 1С. Т.е. если пользователя нет в 1С он нарушает какой-то регламент местной безопасности?

По поводу гугла и отсылок к аналогичному программному обеспечению, я увы не альтруист, и просто так что-либо объяснять или делать не буду. Нет желания учить что-то новое? - Пожалуйста, это Ваше дело.

"Чтобы запоминалось и брэндировало" - зачёт ;)
34. Дмитрий Леонов (Psylocibine) 27.09.12 09:06
Идея нормальная. Пригодится для своих задач. (с)
35. kiril lipatov (kilokilo) 27.09.12 09:43
У нас другая задача решалась, но в результате можно так же отследить кто в базе и когда вошел.
Смысл: на все базы повешена процедура при входе, создающая COM соединение с одной центральной базой.
Получая список COM соединений - видим, кто там есть.
36. Осипов Сергей (fixin) 27.09.12 11:18
(35)и если сетка падает, никто не может зайти в базу.
как минимум, в вашей задаче требуется хранить очередь отложенных сообщений

(33) В данном случае в программе 1с реализован дополнительный контур безопасности, для которого требуется, чтобы 1с было запущено (типо подтверждения присутствия).
37. Сергей (Che) Коцюра (CheBurator) 27.09.12 13:02
Кривое решение. В случае терминального доступа ИмяКомпьютера() вернет сервер ДЛЯ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ
38. Осипов Сергей (fixin) 27.09.12 13:23
(37) Чебуратор, не подходи буквально. На практике я использую не имя компьютера, а код РИБ-базы (из плана обмена). Так что все пучком. Упрощение сделано для наглядности. Кроме того, в данном случае же не используется терминал, а если бы использовался, я бы нашел, как обойти решение.
39. Олег Филиппов (comol) 27.09.12 14:50
(21) comol, 3 строчки кода отсылка пакета... 10 строчек обработка отсылки... ну и 3 строчки на подключение ВК... решение задачи средствами для неё предназначенными...
40. Дмитрий Глеков (glek) 27.09.12 14:51
Хорошая идея. На карандаш
41. Осипов Сергей (fixin) 27.09.12 15:48
(39) ну раз все так просто - в студию!
не забудьте проверить, что фаервол не будет резать ваши пакеты.
42. Олег Филиппов (comol) 27.09.12 16:00
(41) fixin, Вообще кто-то про VPN писал... надо сказать "мини эхо-сервер" гораздо более надежный и простой в плане администрирования механизм чем ftp сервер :)...
43. Алекс Ю (AlexO) 27.09.12 16:18
(42) comol,
да у него файервол и внутри канала работает... в противном случае Сергей всегда скажет - "а я че - я ни че, делов не знаю, я по 1с только.." :)
44. Осипов Сергей (fixin) 27.09.12 16:50
(42) даже проще чем каталог с общим доступом? ;-)

строчки - в студию. покажи, как это просто. а я протестирую. гыгыгы
45. Роман Мильков (rommilk) 27.09.12 16:55
Можно все отслеживать по журналу регистрации, кто сколько отработал. Можно по com написать запрос к удаленным 1С-м.
46. Осипов Сергей (fixin) 27.09.12 17:20
(45) каталоги базы на удаленных точках закрыты из соображений безопасности, с COM обломитесь.
Анализ ЖР - это просто? бугога. К тому же это не оперативно.
47. Олег Филиппов (comol) 27.09.12 23:14
(44) fixin, Ну зачем же я баяны буду разводить... люди уже не раз всё писали: http://infostart.ru/public/119982/ http://infostart.ru/public/92596/ http://infostart.ru/public/69992/

Количество строчек кода думаю оцените :).
48. Олег Филиппов (comol) 27.09.12 23:18
(46) fixin,
COM обломитесь
А вот с COM+.... было бы очень даже ничего http://infostart.ru/public/93643/
49. Аркадий Кучер (Abadonna) 28.09.12 02:10
(5)
Ну запустил, клиент 1С, свернул и ушел пить кофе...

Специально для таких сволочей метод УстановитьКонтрольАктивности() вот отсюда ;) MiracleNative
(37)
В случае терминального доступа ИмяКомпьютера() вернет сервер ДЛЯ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ

Отправляю туда же, свойство ИмяКлиентаТерминала - реальный комп, с которого зашли в терминал.
50. abc2000 (abc2000) 28.09.12 03:20
Я бы использовал бы VBscript на каждой рабочей станции в автозагрузке, что то типа этого:

set WshShell = WScript.CreateObject("WScript.Shell")
KL = true

do while KL
if WshShell.AppActivate("Microsoft Word") then
WriteWord()
KL = false
end if
WScript.Sleep 3000
loop

function WriteWord()
WshShell.SendKeys "HELLO WORLD!"
end function

Естественно "Microsoft Word", заменить на 1С8.exe А "function WriteWord()" передлать в "function SendMail()"
51. abc2000 (abc2000) 28.09.12 03:32
Письмо вообще не проблема организовать, ну таймер только вставить через сколько посылать :)

Sub MySendMail(recipient,msg,subject)
Dim objSession, oInbox, colMessages, oMessage, colRecipients

Set objSession = CreateObject("MAPI.Session")
objSession.Logon "A Valid User Profile"

Set oInbox = objSession.Inbox
Set colMessages = oInbox.Messages
Set oMessage = colMessages.Add()
Set colRecipients = oMessage.Recipients

colRecipients.Add recipient
colRecipients.Resolve

oMessage.Subject = subject
oMessage.Text = msg
oMessage.Send

objSession.Logoff
Set objSession = nothing

End Sub
52. Алексей (alexqc) 28.09.12 10:05
Чтобы пользователи не мудрили с файлами - можно дать хитрые права на каталог, разрешив только создание но запретив запись. Чтобы не создавали файлы ручками - добавить механизм "подписи" файла - кидать туда время и сгенеренный по некому алгоритму хэш от остального содержимого (все упрется в то, моет ли пользователь узнать алгоритм генерации. но в конце концов есть шифрование модулей и вообще поставка без исходника).

Ну а лично я (если б встала задача получать пинги от удаленных 1Сок) такое бы делал через веб-сервисы - у нас же 1С8 а не 77 :) . Тогда бы отпали многие проблемы: с предоставлением файлового доступа; с удаленными, по HTTP работающими клиентами...
А поставить апач думаю автору/заказчику не будет проблемой.
53. Олег Филиппов (comol) 28.09.12 10:32
(52) alexqc, Да, Web сервисы правильнее всего были бы.
54. abc2000 (abc2000) 28.09.12 13:41
Не, с Веб сервисами, именно в его случае, не взлетит.
55. Осипов Сергей (fixin) 01.10.12 11:31
(47) это инструменты. напишите на них скрипт, бояном не будет. Это вам не бла-бла. ;-)
(49) у нас собственная система контроля активности, которую не обманешь.
(52) это все понятно, но это из пушки да по воробьям. ;-)
56. Осипов Сергей (fixin) 01.10.12 11:34
(53)(54) ага, куча лишнего инсталляций и администрирования ради банальной задачки. господа, соразмеряйте средства и цели. Одно дело, если веб-сервисы уже подняты, тогда да. А если не подняты, то и ну его.
57. Олег Филиппов (comol) 01.10.12 13:26
(56) fixin, Вообще web сервисы - нужен IIS и FTP сервер - нужен IIS (ну или apache и proftpd соответственно). Нужен только на сервере. ИХМО web сервер настроить проще чем ftp (не нужно квот, спец папок и т.п.). А более в чём разница не знаю...
58. Осипов Сергей (fixin) 01.10.12 15:06
(57) именно что ИМХО. в рамках VPN у клиента уже была расшаренная папка. Зачем добавлять гимора админу? Задачу нужно решать удобными клиенту средствами.
59. Олег Филиппов (comol) 01.10.12 17:12
(58) fixin, Ну не знаю... если таким образом рассуждать этак можно и остатки на справочниках хранить. "А зачем регистры, ведь в конфигурации уже есть справочники"... "Справочники клиенту более понятны"....
60. Осипов Сергей (fixin) 01.10.12 18:11
(59) демагогия detected. Справочники и регистры - это однородные элементы.
Существующая VPN и необходимость поднятия, конфигурирования и администрирования нового сервера - это как бы разные вещи.
Но если даже взять вашу аналогию, то если задача клиента решается на справочниках, причем будет работать и в случае масштабирования и разработка на справочниках стоит копейки, то нафига городить с регистрами?
61. abc2000 (abc2000) 01.10.12 20:45
Хранить остатки? Это из серии - зачем нужна 1С, если есть MsSql сервер.
62. Осипов Сергей (fixin) 01.10.12 21:42
(61) еще один. Регистры остатков на справочниках сделать сложнее, чем изучить регистры. А использовать имеющийся шаред-каталог на порядок проще, чем заниматься веб-сервисом, который не установлен в конторе у килиента.

Подходить, господа студенты, надо не академически, а практически.
63. abc2000 (abc2000) 01.10.12 22:48
(62) fixin,
Я не про справочники vs регистры писал, я про то что нафига нужна 1С если есть отличные СУБД :-)
64. Осипов Сергей (fixin) 02.10.12 01:00
(63) 1С нужна потому, что несмотря на наличие отличных СУБД, нет отличных RAD. Все RAD по сравнению с 1С - отстой.
65. abc2000 (abc2000) 02.10.12 03:17
(64) fixin,
Я вообще то имел ввиду не "зачем нужна сама 1С как система", а то что, чтобы хранить остатки можно сделать табличку в БД и с помощью запросов к БД с ними работать.
66. Div (Maldiv) 02.10.12 08:28
По-моему, не очень красиво работать с файликами. Если кто-то потрет файлики в шаред-каталоге? Конечно, я не знаю всех тонкостей, но база данных на сервере со временем входа/выхода в программу мне кажется предпочтительнее. Опять же, можно смотреть сведения за период.
67. Осипов Сергей (fixin) 02.10.12 10:47
(66) если заморачиваться, можно просто разрулить права.
68. Алексей (alexqc) 03.10.12 12:01
(55) ну я б не сказал что пушка... WS с апачем подымаются с пол-пинка (это вам не ИИС). Раз установленный никаких телодвижений более не требует - все остальное рулится 1Ской. Плюс нативная поддержка WS - не надо заморачиваться с форматом файлов и т.п., легко расширить в случае чего (вот захочет завтра заказчик чтобы не только обмен был, но и сообщения эскам посылать - что тогда?) и для программиста более прозрачно.
69. Осипов Сергей (fixin) 03.10.12 12:38
(68) это вы мне рассказываете, что WS подымается с полпинка? Да тут на ИС целая инструкция как его ставить. Да еще и интернет-сервер надо подымать, если в конторе его нет, а если есть - согласовывать с его админами. Кучу телодвижений ради пшика. И потом, веб-сервисы от 1с требуют ключей доступа и лишних лицензий, оно мне надо? ЧТобы лицензии в офисе отжирались на количество пользователей на точках?
70. Алекс Ю (AlexO) 03.10.12 12:53
(60) fixin,
Справочники и регистры - это однородные элементы.

чем это они вдруг стали однородны? Что оба объекта - в 1С?
ИМХО, если уж сравнивать - справочник ближе к документу по структуре хранения. Разница - в объеме используемых таблиц.
71. Алекс Ю (AlexO) 03.10.12 12:56
(69) fixin,
Так и напрашивается название "1С-пластырь".
Уж не взыщите :))
p1l1gr1m; +1 Ответить
72. Осипов Сергей (fixin) 03.10.12 12:58
(70) избавьте меня от софистики. Если вы не различили граней, то буквоедствовать - не ко мне. ;-)
73. abc2000 (abc2000) 03.10.12 19:56
(69) fixin,
WS разве требует лицензий от 1С на количество подключений?
74. Осипов Сергей (fixin) 03.10.12 22:23
(73) пардон, с тонким килиентом перепутал. ;-)
75. Алексей (alexqc) 09.10.12 17:02
(69) fixin, да, именно Вам, именно апач, именно с пол-пинка. Разумеется, я говорю это имея опыт и с апачем и с ИИСом.
А то что на ИС есть "инструкции" - ничего не значит, ибо все эти инструкции обычно в 3х картинках, и выглядят так:
1. Запустить инсталятор апача - поставить апач
2. Запустить инсталятор 1С - установить компонент работы с веб-сервером (если не установлен)
3. Запустить конфигуратор - выполнить публикацию.

Это не сложнее чем поднять виндовый ВПН (а там может еще с логинами/правами пое... придется) и легче чем настроить ФТП (как вы предлагали в (3) ), о чем уже говорилось.
76. Осипов Сергей (fixin) 09.10.12 18:27
(75) вот оно надо, получать опыт секса с апачем, если задача решается родными средствами 1с?
а ведь апач еще потом и админить надо, это не зиро-админинг систем.
77. Алексей (alexqc) 10.10.12 11:24
(76) хм, вроде выразился понятно... Ну ладно, повторюсь - секс это как раз с ВПН: это там может потребуется настройка прав и раздача логинов; а апач в базовой/минимальной установке и есть "зеро-аминингс". Т.к. апач базово настроен на только отдачу каталога-сайта, практически все модули выключены, и ничего больше он сделать не может. Тем и хорош - с одной стороны, безопасен (все отключено), с другой - функцонал достаточен (при публикации конфигуратор сам пропишет загрузку модуля и пути к каталогу), с третьей - администрирование можно возложить на плечи 1С.

ЗЫ. Вы вообще со связкой 1С8+веб работали? По вашей категоричности виден явно негативный опыт, или некая предубежденность. Если я прав, предлагаю всеж еще поэкспериментировать - уверен, В/С вам понравятся.
78. Осипов Сергей (fixin) 10.10.12 11:47
(77) вы вообще осознаете, что вы пишите.
ВНП - это данная нам в ощущениях необходимость. Она и без 1с будет поднята.
А веб-сервис от 1с - это рюшечки, нафиг клиенту не нужные. Зачем ему доплачивать админу?

Со связкой 1с + веб-сервис я работал и апач поднимал. Там, где это нужно, это полезно, но не надо из пушки да по воробушкам...
79. А Р (p1l1gr1m) 15.11.12 00:25
Дико, извините за скабрезность, "угорел" от ответов комментаторов и автора)
Ну а по существу, как вам вариант с отправкой статусов по email? Все необходимые средства есть, пишется в пару строчек, плюс немного кода на центральной базе для чтения inbox от удаленных баз.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа