Имя: Пароль:
1C
 
Создаем ВК "без программирования",получаем задержку в N-сек без 100% загр.
0 Ковычки
 
18.10.05
00:21
Создаем файл ComSleep.wsc со следующим содержимым
...
<?xml version="1.0" encoding="windows-1251"?>
<component>
<registration
   description="ComSleep"
   progid="ComSleep.WSC"
   version="1.00"
   classid="{424ac2bc-5732-4dea-be17-0211af99cd79}"
>
<script language="VBScript">
<![CDATA[
Dim WshShell
Function Register()
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "Компонент зарегистрирован в системе",3,"Компонент для получения функции ожидания Sleep",vbInformation
End Function
Function UnRegister()
 Set WshShell = CreateObject("WScript.Shell")
 WshShell.Popup "Компонент удален из системы",3,"Компонент для получения функции ожидания Sleep",vbInformation
End Function
]]>
</script>
</registration>
<public>
   <method name="Sleep">
   </method>
</public>
<script language="VBScript">
<![CDATA[
Function Sleep(T)
set Locator=CreateObject("WbemScripting.SWbemLocator")
set Service=Locator.ConnectServer()
Set UTCTime = Service.ExecNotificationQuery("Select * from __instancemodificationevent where TargetInstance isa 'Win32_UTCTime'")
sec=0
secold=0
sec2=int(T)
Do While sec2>sec
   Set objLatestEvent = UTCTime.NextEvent
   if secold<>objLatestEvent.TargetInstance.Second Then
       secold=objLatestEvent.TargetInstance.Second
       sec=sec+1
   End If
Loop
End Function
]]>
</script>
</component>
...
регестрируем regsvr32 /s /i:ComSleep.wsc scrobj.dll, это можно делать и из 1С, удалить сом из системы regsvr32 /s /u /i:ComSleep.wsc scrobj.dll
...
После регистрации в 1С пишем следующий код...
TimerCom=СоздатьОбъект("ComSleep.wsc");
/// Код 1С, и далее когда нужна задержка
ЗадержкаСек=10;
TimerCom.Sleep(ЗадержкаСек);
1 Скобки
 
18.10.05
01:00
(0) Зачем такие сложности?
Темп=КаталогВременныхФайлов()+"sleep.vbs";
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("wscript.sleep 1000");
Текст.Записать(Темп);
cmdLine="wscript.exe "+Темп;
WshShell=СоздатьОбъект("WScript.Shell");
Для сч=-10 По -1 Цикл
   Состояние("Осталось спать "+(-сч)+" секунд");
   WshShell.Run(cmdLine, 0, -1);
КонецЦикла;
Сообщить("Обработка завершена.","!");
ФС.УдалитьФайл(Темп);
2 Ковычки
 
18.10.05
01:02
+(1) Конечно точьность невелика, но например для задержки при проведении подойдет
Да кстати, вот код без сом объекта, прямо в 1С (но (0) приведен как можно создать ВК "без программирования")...
...
ЗадержкаСек=10;
Locator=CreateObject("WbemScripting.SWbemLocator");
Service=Locator.ConnectServer();
UTCTime = Service.ExecNotificationQuery("Select * from __instancemodificationevent where TargetInstance isa 'Win32_UTCTime'");
sec=0;
secold=0;
Пока ЗадержкаСек>=sec Цикл
objLatestEvent = UTCTime.NextEvent();
Если secold<>objLatestEvent.TargetInstance.Second Тогда
       secold=objLatestEvent.TargetInstance.Second;
       sec=sec+1;
КонецЕсли;
КонецЦикла;
3 Ковычки
 
18.10.05
01:05
(1) Это можешь и не приводить...(давно пора отойти от "внешних" скриптов)
в (0) как уже сказал, можно делать и не только задержку, много чего можно еще...
4 Скобки
 
18.10.05
01:06
А зачем они, такие "ВК без программирования"? Всё, что можно в них сделать, легко делается и без регистрации COM-серверов - просто текстовый файл vbs и вперёд.
5 Ковычки
 
18.10.05
01:08
(4) Извини, но видимо ты плохо представляешь что можно сделать скриптами...
Насчет без регистрации см (2)
6 Скобки
 
18.10.05
01:10
(5) Да ну? А ты хорошо представляешь? :)
А что значит "давно пора отойти от "внешних" скриптов"? Что ты называешь "внешними скриптами" и чем они плохи?
7 Ковычки
 
18.10.05
01:11
(6) Поищи по форуму по автору темы Ковычки, это маленькая толика...
8 Скобки
 
18.10.05
01:13
(7) Что поискать-то? А здесь поговорить почему не хочешь?
9 Ковычки
 
18.10.05
01:16
О чем говорить. Что есть скрипты. Ну вот небольшой пример Узнаем много интересного об файле запуска 1С, даже незная его файловое имя.
10 Скобки
 
18.10.05
01:21
Да ладно, кончай пеариться :)
Давай философское обоснование, почему "давно пора отойти от "внешних" скриптов"? :)
11 Скобки
 
18.10.05
01:26
Кстати, о птичках: имхо, wsc-компоненты нужны только для удобства повторного использования кода в тех же административных скриптах, не более. В 1С их применять неудобно, ибо замумукаешся регистрировать эти COM-сервера (прав у рядового пользователя может оказаться мало). А никаких принципиальных возможностей wsc-сервера не дадут...
12 Ковычки
 
18.10.05
01:27
(10) Нету правда счас настроения, курить охота, сигареты скончались.
Во "внешние" скрипты надо передать параметры (это просто конечно) потом эти параметры переделать в какие надо типы и прочее, да и обратно получить результат проблематично (наверно это основное), опять же только через файл.
А как в (0) можно файл и в тексте держать, "вывалив" его конечно получаем тоже ""внешний скрипт"", но несовсем результат в 1С возвращается легко...
13 Ковычки
 
18.10.05
01:28
(11) Прав может неоказаться и на выполнение "внешних" скриптов и скриптинга вцелом
14 Ковычки
 
18.10.05
01:29
+(13) и неиспользуй эту дрянь "имхо", так говорят пацанята (в основном)
15 Скобки
 
18.10.05
01:32
Сигареты надо заранее покупать, ёлы-палы :)
Такие вещи видел?
ScrCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrCtrl.Language="VBScript";
ScrCtrl.AddCode("
|Function Func()
|    Set SubDict = CreateObject(""Scripting.Dictionary"")
|    SubDict.Add 1, ""one""
|    SubDict.Add 2, ""two""
|    SubDict.Add 3, ""three""
|    Dict.Add 1, SubDict
|End Function
|");
Dict=СоздатьОбъект("Scripting.Dictionary");
ScrCtrl.AddObject("Dict",Dict);
ScrCtrl.Run("Func");
Для ы=1 по Dict.Count Цикл
   SubDict=Dict.Item(ы);
   Для ъ=1 по SubDict.Count Цикл
       Сообщить(SubDict.Item(ъ));
   КонецЦикла;
КонецЦикла;
Так что передача параметров и работа с заковыристыми типами данных - не проблема.
16 Скобки
 
18.10.05
01:34
Что у тебя за комплекс на это "имхо"? Так весь рунет говорит, с чего ты взял, что пацанята?
17 Скобки
 
18.10.05
01:38
А вот и с параметрами и с возвратом:
ScrCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrCtrl.Language="VBScript";
ScrCtrl.AddCode("
|Sub Exec1()
|    MsgBox ""Сообщение 1""
|End Sub
|Function Exec2(Txt)
|    MsgBox Txt
|    Exec2 = Txt
|End Function
|");
Module=ScrCtrl.Modules("Global");
CodeObject=Module.CodeObject;
Возвр=CodeObject.Exec2("Oops!");
Сообщить(Возвр);
18 smaharbA
 
18.10.05
01:38
Кстати на счет регистрации, достаточно один wsc зарегить, а при необходимости туда можно "находу" добавить/исправить метод/параметр
(15) А теперь попробуй с Item поработать не в словаре ;) , да кстати, ненадо мне приводить чужой код, (15) это балавство...
19 Ковычки
 
18.10.05
01:40
(17) и еще, у MSScripting медленное выполнение и ограничение на время выполнения, дальше он выдаст Превышено время... "Переключиться""Продолжить"
20 Скобки
 
18.10.05
01:47
(15) - это не "балавство", а пример подключения объекта к MSScriptControl. Ёксель, к примеру, при работе из 1цэ не всегда булев тип данных кушает (-1 за true не признаёт, вываливается на исключение). И с Ёкселем можно работать в этих случаях именно так...
Про Item: и с коллекциями разных объектов, которые не перевариваются 1С (если ты об этом), можно работать тоже через MSScriptControl...
21 Скобки
 
18.10.05
01:50
Насчёт "ограничения на время выполнения" у MSScriptControl, если ты не знал:
ScrCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
ScrCtrl.Language="VBScript";
ScrCtrl.AddCode("
|Sub Exec()
|    While 0=0
|    Wend
|End Sub
|");
ScrCtrl.Timeout=5000;
Попытка
   ScrCtrl.Run("Exec");
Исключение
   Сообщить(ОписаниеОшибки());
КонецПопытки;
Если поставишь Timeout=-1, эта музыка будет вечной :)
22 Ковычки
 
18.10.05
01:51
(20) Эти примеры из убогой алс выкинь, а ехель кушает всегда, несчитая некоторых моментов (PageSetup к примеру), но и это обходится без MSScripting, попробуй кстати через msscripting подключиться к весомому доку ехель...
23 Ковычки
 
18.10.05
01:52
(21) Небудет вечной, поверь...
24 Ковычки
 
18.10.05
01:53
+(23) Причина не во времени выполнения скрипта TimeOut дает только ограничение на выполнение, чтоб небыло бесконечно...
25 Ковычки
 
18.10.05
01:56
И еще, мсдн прочитан уже лет сколькото назад... Неприводи тут прописные истины...
Лучче привиди код нахождения ProcessID 1С (опять пиарю ;)), это так - тест... ;)
26 Скобки
 
18.10.05
01:57
"Эти примеры из убогой алс выкинь" - это конечно веский аргумент :) Про PageSetup именно и речь, кстати... А причём здесь "весомый док"? MSScriptControl удобен для работы с типами данных, которые в 1С глючат + для работы с WMI, вот и всё... И никакие WSC не нужны...
Колись насчёт (16).
27 smaharbA
 
18.10.05
02:00
Насчет (16) просто по прошествии нескольких лет (правда вот уже месяцев 10 я в интернете) увидев интернет ужаснулся, слова какието непонятные (сейчас конечно уже знаю что к чему), непонравились они мне почемуто...
28 Скобки
 
18.10.05
02:04
(27) Темнишь :) Кто-то задел тебя с этим "имхо", вот теперь и комплексуешь...
Твой "ехель" думаешь, намного лучше?
Кстати, насчёт "мсдн прочитан уже лет сколькото назад": думаешь, wsc - это не баян? :) Ещё какой :)
29 smaharbA
 
18.10.05
02:04
(26) Да, для работы с вми совем необязателен MSScripting и/или "внешние" скрипты (хотя конечно невсегда так, к примеру "полностью" ассинхронный доступ, вот тут то без "внешних" скриптов необойтись, тут и msscripting и com непомощники :( )
30 smaharbA
 
18.10.05
02:06
(28) Нетемню, в инете я был еще с ремартов, тогда было немного подругому, а обидки - "на обиженных воду возят" (такая есть приговорка в определенных местах)
31 smaharbA
 
18.10.05
02:08
Давай уж открывай "личину"...
32 Скобки
 
18.10.05
02:12
"для работы с вми совем необязателен MSScripting" - думаю, это ты про VBA :) Там свои геморрои... Например, CreateObject("Excel.Application") слишком умный, падло, подключается к существующему процессу, если таковой есть, а это не всегда хорошо. И вообще, Office может не стоять на машине... Так что MSScriptControl - пользительная весчь.
33 smaharbA
 
18.10.05
02:14
(32) Нет не о VBA, ты (2) то глядел?
А что насчет ProcessID Всеже?
34 Скобки
 
18.10.05
02:14
А смысл личину открывать? Думаешь, твоя личина зарегистрированная о чём-то говорит? Один чёрт, в инете все анонисты по определению :)
35 smaharbA
 
18.10.05
02:17
(34) Нет почемуж, майл у меня верный, да вообщето оказывается кроме почты я ничего неуказал ;)
36 Скобки
 
18.10.05
02:19
Насчет ProcessID не знаю, не озадачивался никогда. Считай тест я не прошёл :) Тока меня это почему-то не расстраивает :)
Про (2) понял - с помощью CreateObject("WbemScripting.SWbemLocator") можно обойтись во многих случаях без GetObject(), которой в семёрке нет. Плавали, знаем :)
Хороший ты собеседник, smaharbA, но спать пора...
37 Скобки
 
18.10.05
02:21
Ладно, бывай... Ещё поговорим как-нибудь...
38 Ковычки
 
18.10.05
02:23
Ладно, пока... спокойного сна Скобки...
39 Ковычки
 
18.10.05
12:18
Ну что, хоть покритикуйте еще кто, а... (ненавижу критику, хоть неконструктивную, хоть конструктивную)
40 Волшебник
 
модератор
18.10.05
12:20
Я не понял, зачем нужна "задержка при проведении" (2-й пост).
41 КонецЦикла
 
18.10.05
12:28
Ковычки, Скобки - жжоте, молодцы... респект!
42 romix
 
модератор
18.10.05
12:28
43 Ковычки
 
18.10.05
12:28
(40) При групповом, чтоб народу дать поработать
44 Ковычки
 
18.10.05
12:29
(40) чтоб транзакция дольше висела: 10, 20, 30 сек
45 Волшебник
 
модератор
18.10.05
12:31
Тогда нужно называть не "задержки при проведении", а "задержки между проведениями документов". А то я подумал, что специально замедляется проведение документа для каких-то целей...
46 smaharbA
 
18.10.05
12:31
Все небудет больше Ковычек (похоронил) 4(44)
47 Simod
 
18.10.05
12:38
По поводу задержек. И никакой нагрузки на процессор.
http://avb1c.narod.ru/?=a20
48 smaharbA
 
18.10.05
12:44
(47) Вы это попробуйте сначало, тыкали уже таким в нос, а (0) я привел как пример создания, кстати очень замечательно, можно находу дописывать переписывать если конечно СоздатьОбъект не ПриНачалеработы, а создается там где нужен...
посмотри на простоту использования/написания методов.
49 smaharbA
 
18.10.05
12:44
(47) а насчет загрузки, позырь, а потом говори
50 Simod
 
18.10.05
12:46
(48)
"(47) Вы это попробуйте сначало, тыкали уже таким в нос, а (0) я привел как пример создания, ..."  Дак ты или Ковычки ?   :-))
Я это не только пробовал, у меня это работает...
51 smaharbA
 
18.10.05
12:51
(50) Привел то Ковычки, но теперь я его(Ковычки) похоронил...
А насчет пробовать, всеж сделай вновь (47) и позырь на загрузку процесса 1С... и сделай как (0) хотя можно и просче и тож взгляни
52 romix
 
модератор
18.10.05
13:14
(47) Посмотрел. Ничего не понял. Имитация закрытия со статусом возврата 0 в цикле без пауз. Задержка обновления реализована через _getPerformanceCounter().
53 romix
 
18.10.05
13:16
(+52) Имхо тут нет никаких пауз в принципе - система дрючится со 100% загрузкой.
54 Simod
 
18.10.05
13:16
(51) Загрузка процесса 1С нулевая. Вообще-то я ничего против (0) не имею, просто считаю, что "Чем проще, тем лучше".
55 smaharbA
 
18.10.05
13:18
(54) Дак это и есть просче весь код в 1С прведенные в окончании (0) 3 строчки
56 Simod
 
18.10.05
13:21
(55) Да, но перед этим нужно сделать все действия до этих трех строк. Лично я все это (0) на память не запомню, а принцип заложенный в (47) очень прост и легко воспроизводим.
57 smaharbA
 
18.10.05
13:21
(53) Нет там в (47) небудет 100% загрузки, но всеже загрузит сколькото ну процентов на 10-20
58 Simod
 
18.10.05
13:33
(57) В (47) загрузка появляется из-за вывода времени и изменения цвета.
59 smaharbA
 
18.10.05
13:39
(58) Думаю что нет дейтвия вроде состояние и подобные могут даже снизить загрузку, вернее приостановить цикл
60 Simod
 
18.10.05
13:53
(59) Возможно, это не проверял. У меня эта идея (47) реализована в совершенно простом виде. При выполнении загрузка ЦП 0-2%, да и то вероятно из-за отображения некоторой информации на диалоговой форме.
61 raykom
 
18.10.05
14:03
Харе блатовать. Объясните мне, непонятливому, зачем в мирской жизни этот тюнинг на 1С ?? Я пока кроме понтов тута никакой практической пользы не вижу... . Поправьте, если что ... . Абрахамсу привет.
62 smaharbA
 
18.10.05
14:17
(61) Привет. А так, чтобы было. Просто частенько пишут ВК на всяческих дельфи/васике/си и прочем, а теже методы можно создать тем что есть в системе.
На очереди (открою тайну покрытую мраком), нахождение Hwnd окна без ВК и прочего, ну и одна из больных проблем архивация/выгрузка конфы(базы) с выгоном усеров, мягким, а затем жестким без участия 1С-админа...
А всеже жалко мне Ковычки, какой был парень...
63 goodfella
 
18.10.05
14:32
(61) Для удобства пользователей.
64 raykom
 
18.10.05
16:51
(62)Проспал все. Да Ковычки он не дурак вовсе, а что с ним ??? Спасибо за ликбез, понял, что нада, а зачем такинепонял. Ну да лана, глана, чоб людям нравилося :)).
65 raykom
 
18.10.05
16:52
(62) Как на счет времени ?? В смысле пивасика ?
66 smaharbA
 
18.10.05
16:58
(65) Давай, хоть счас
67 raykom
 
18.10.05
16:59
Счас, определюся в течении 20 мин. Вероятность 90% :) А чо с Ковычками то ??
68 raykom
 
18.10.05
17:01
Счас, определюся в течении 20 мин. Вероятность 90% :) А чо с Ковычками то ??
69 smaharbA
 
18.10.05
17:06
Да я убил его, логи нзарегистрировал и все... Хотя мне он нравился ;)
70 smaharbA
 
18.10.05
17:07
Ну что, пиво то пьем? Тока лучче на нейтральной территории, гденибудь в районе УПИ