Имя: Пароль:
1C
 
Контроль печати документов
0 FOFA
 
03.11.06
10:01
Возниклад проблема...НА фирме много документов..Некоторые документы при печати почему-то принтере не печатает, как проверить что документ был успешно распечатан на принтере
1 GrayT
 
03.11.06
10:11
Посмотреть в выходно лотке (как вариант)
2 Лефмихалыч
 
03.11.06
10:12
(1) +1!
(0) Как ты хочешь программно смотреть в лоток принтера?
3 puls
 
03.11.06
10:16
(2) Процедура ПросмотрЛоткаПринтера() :))
4 puls
 
03.11.06
10:18
Если ПустоеЗначение(ЛотокПринтера) = 1 Тогда
Сообщить("Печать не выполнена")
Иначе
Сообщить("Печать выполнена")
КонецЕсли;
:))
5 VasilyKushnir
 
03.11.06
10:28
Некоторые доки действительно не печатаются. Почему до сих пор втыкнуть не могу. Главное тока на НР1200, на Кеноне и НР1160 - ноль проблем. Поллумеры:
1. При заполнении таблицы печати первую верхнюю строку и крайнюю левую ничем не заполняю, но в состав секций они входят - иногда помогает.
2. На паре рабочих мест помогло добавление мозгов до 256 и переход с 98 на ХР.
3. Написал специальную приблуду чистки реестра перед печатью. Выложена на Инфостарте, но сегодня сайт почемуто не доступен - откроется , дам ссылку. А если не в терпеж - пиши в личку, скину.
6 VasilyKushnir
 
03.11.06
10:30
Да и еще одно: в каждом документе есть реквизит "Печатался", но и он не всегда помогает - реквизит то заполнится, а что документ реально распечатался - не факт...
7 FOFA
 
03.11.06
10:30
(5), у нас печать идет в терминале, что ты порекомендуешь конкретно....много доков и как то надо контролировать.....в 1С даже ведется контроль песати доков
8 FOFA
 
03.11.06
10:30
Ты рекомендуешь поменять принтеры
9 FOFA
 
03.11.06
10:32
(5), а как это писать в личку, скинь пожалуйста эту фичу по чистке реестра
10 VasilyKushnir
 
03.11.06
10:33
Нет не рекомендую. Хоть и мучаемся с НР1200, но! Мыши плакали, матерились, но продолжали жрать кактус. Печатаем мы тоже в терминале - локально то как раз и нет проблем.
11 VasilyKushnir
 
03.11.06
10:34
Ага, у тебя открыта емеля  - сейчас скину.
12 FOFA
 
03.11.06
10:36
давай...спасибо.....наши хотят поставить на каждом доке штрих код, потом после выхода доков их всех сканировать, и потом смотреть те что неотсканированы и нараспечатаны печатать еще раз
13 Лефмихалыч
 
03.11.06
10:37
да просто не надо для больших объемов использовать дохлый домашний принтер. Предложи начальству не жмотить бабок, и купить например hp2420 или hp2300. Подозреваю, что в определенный момент принтер оказывается не способен очередь печати обмаслать.
14 FOFA
 
03.11.06
10:39
ну надо будет сказать.....я сам так думал, но ты знаешь как начальство хочет менят принтера
15 VasilyKushnir
 
03.11.06
10:41
И еще в этой приблуде я использую две библиотеки
Addon1C.DLL
RARUSLIB.DLL
У тебя они есть? Или тоже скинуть?
Но очень прошу - будь осторожен, это все-таки реестр...
Сделай копию реестра и сначала откатай на копии базы.
16 FOFA
 
03.11.06
10:41
хорошо....кинь пожалуста, у меня на дом компутере есть а на работе нет
17 smaharbA
 
03.11.06
10:42
Задолбал ты со своей утилитой (извини за грубость) то что она делает делает и 1С и руками и чем хошь (говорил уже что это боянище)
(12) апупеть, а может еще к каждому доку сопроводительную записку печатать, а лучче от руки заполнять - посодить счетчика
...
А если серьезно, то делаешь "постоянного получателя событий" - и зыришь что напечатано а что нет, ОС сама будет следить, ну исключения - зажованый лист, выключенный принтер и т.п.
18 smaharbA
 
03.11.06
10:42
(15) накуя ?
19 Лефмихалыч
 
03.11.06
10:42
(14) алгоритм прост: "Уважаемое начальство, либо новый принтер, либо проблему не решить ни как" - это примерный текст служебной записки.
20 smaharbA
 
03.11.06
10:43
+(17) и еще - надо верно писать конфигурацию, не мохать рукой на необязательные методы и параметры
21 FOFA
 
03.11.06
10:45
(17) что такое постоянного получателя событий...раскажи поподробнее
22 smaharbA
 
03.11.06
10:47
(21) почитай тут http://www.script-coding.info/WMI.html в оконцовке, счас лениво объяснять + только незабудь сделать скриптик чтобы его удалять коль чего... + ставь 1 сек интервал
23 VasilyKushnir
 
03.11.06
10:49
> то что она делает делает и 1С и руками и чем хошь

А как ты представляешь руками перед каждым фактом печати? Раньше юзеры у меня так и делали: не пошла печать - влез в реестр и снес ветку. Они же и попросили автоматизировать этот процесс. Да и ты сам не думаю, что спал бы спокойно, если б у тебя юзеры по реестру швендяли.
24 Лефмихалыч
 
03.11.06
10:52
(23) речь идет о программном контроле ВСЕХ событий, а не о ручном этих событий провокации
25 smaharbA
 
03.11.06
10:53
(23)
1. это полумера
2. командасистемы("regedit /s ФайлУдаленияВетки.reg")
содержимое
REGEDIT 4

[-HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Информационная База #1\V7\Default\Moxel\Default]
26 VasilyKushnir
 
03.11.06
10:57
>командасистемы("regedit /s ФайлУдаленияВетки.reg")

Через это я тоже прошел. А ты сам попробуй этот метод. Мигающее черное окошко просто задалбывает.
27 smaharbA
 
03.11.06
10:58
(26) ты кого спрашиваешь - знаешь ?
28 smaharbA
 
03.11.06
11:00
Шел=СоздатьОбъект("WScript.Shell");
Шел.run("regedit /s ФайлУдаленияВетки.reg",0,-1);
29 smaharbA
 
03.11.06
11:01
+(28) могу и метод дать без файла и без внешних утилит
Думаю ты уже должен заметить, что в этом вопросе кое чего знаю и умею
30 VasilyKushnir
 
03.11.06
11:03
FOFA, обработку скинул - тебе решать, на кокой веревка лучше повесится. Но, ИМХО, обработчик событий с интервалом 1 сек при общей тормознутости 1С...?

>ты кого спрашиваешь - знаешь ?
Не знаю - личной информации слишком мало по ссылке через ник.
31 smaharbA
 
03.11.06
11:05
(30) ты не понял про 1 Сек не будет никакой "тормознутости" и это к 1С никакого отношения не имеет это касательно ОС
(30) см (28) всего 2 строки кода и никаких череньких окошек и заметь ВК ненужны и работает начиная с 98 и далее
32 Лефмихалыч
 
03.11.06
11:06
(30) ты хоть понял, о каком обработчике речь?
33 smaharbA
 
03.11.06
11:09
//*******************************************
Процедура Сформировать()
   Шел=СоздатьОбъект("WScript.Shell");
   Шел.RegDelete("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Информационная База #1\V7\Default\Moxel\Default\");
КонецПроцедуры
34 smaharbA
 
03.11.06
11:10
+(33) но это как уже говорил - полумера
35 smaharbA
 
03.11.06
11:10
При ручной печати не запустишь автоматом :)
36 у лю 427
 
03.11.06
11:11
вотникуасебе...

Шарамба уже автоматизировал геморой...
37 Лефмихалыч
 
03.11.06
11:12
(33) неправильно, атилла, што называицца, промахнулси 8)
   Шел.RegDelete("HKCU\Software\1C\1Cv7\7.7\Информационная База #1\V7\Default\Moxel\Default\");
38 smaharbA
 
03.11.06
11:13
(36) да не, мнето накуя, у меняж конфа нормальная, а глядя на нее и твоий пинок и в других сделал
39 VasilyKushnir
 
03.11.06
11:15
Согласен, через скрипты довольно изящно получилось. А чего тогда сразу не предложил человеку решение, а полез в бутылку?

>[-HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Информационная База #1\V7\Default\Moxel\Default]

\V7\Default - А что вместо \Default разве не надо указывать текущего пользователя?
Да и "Информационная База #1" наверное в конкретной ситуации будет иметь несколько другой вид.
40 Лефмихалыч
 
03.11.06
11:18
не излечимо...
41 smaharbA
 
03.11.06
11:18
(39) это я к примеру, а "Информационная База #1" - тоже можно определить и для текущей базы и для других, программно, и тоже без приблуд (ВК)
42 smaharbA
 
03.11.06
11:19
+(41)->(39) в путылку лез потому что это не решение, это припарка
43 smaharbA
 
03.11.06
11:20
+(42) что в твоем, что в моем варианте
44 FOFA
 
03.11.06
11:21
Так можна в двух словах написать процедурку для 1с.......по обработке печати
45 VasilyKushnir
 
03.11.06
11:23
Понятно. Я потому и сказал, что это полумера, а метод реализации дело второстепенное. К сожалению, в свое время на многих форумах подымал этот вопрос, но безрезультатно, вот и пришлось кулибничать не хорошей жизни...

А все-таки

>ты кого спрашиваешь - знаешь ?

И каков ответ?
46 FOFA
 
03.11.06
11:24
()Так можна в двух словах написать процедурку для 1с, а то что то я уже запутался.......по обработке печати
47 smaharbA
 
03.11.06
11:27
(46) это вопрос ? про регистрацию событий печати ?
48 FOFA
 
03.11.06
11:28
да.....или как сделать что бы документы печатались на 99.99999999%
49 VasilyKushnir
 
03.11.06
11:33
smaharbA, черкни метод определения имени текущей базы, а имя пользователя, я думаю, человек уже без проблем вытащит. Честно говоря, это меня тоже заинтерисовало - со скриптами не работал к сожалению.

Думаю, что гарантии 99.(9)% никто не даст (это уже к ФОФА).
50 FOFA
 
03.11.06
11:36
smaharbA черкни (47)
процедурку
51 VasilyKushnir
 
03.11.06
11:39
Да кстати, smaharbA, а не присоветуешь литературу по скриптам на русском, да еще в электронном виде, да еще на халаву, сэр? Не сильно губу раскатал?
52 asady
 
03.11.06
11:44
(51)
я за него вам ссылочку дам:
http://script-coding.info/
53 smaharbA
 
03.11.06
11:45
второе - см обработку VasilyKushnir или (33)(под себя переделаешь), а лучче подумай и перепиши конфу, совсем не много...
...

первое -

Computer="."
Set Service = GetObject("winmgmts:\\" & Computer & "\Root\CIMV2")
Set oFilter = Service.Get("__EventFilter").SpawnInstance_()
oFilter.Name = "MonPrnJob"
oFilter.QueryLanguage = "WQL"
oFilter.Query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_PrintJob'"
oFilter.Put_
Set oConsumer = Service.Get("LogFileEventConsumer").SpawnInstance_()
oConsumer.Name = "MonPrnJobLog"
oConsumer.FileName = "C:\MonPrn.txt"
oConsumer.Text = "Name: %TargetInstance.Name%, Document: %TargetInstance.Document%, Owner: %TargetInstance.Owner%, TotalPages: %TargetInstance.TotalPages%, StartTime: : %TargetInstance.StartTime%, PagesPrinted: : %TargetInstance.PagesPrinted%"
oConsumer.Put_
Set oFilter = Service.Get("__EventFilter.Name='MonPrnJob'")
Set oConsumer = Service.Get("LogFileEventConsumer.Name='MonPrnJobLog'")
Set oBinding = Service.Get("__FilterToConsumerBinding").SpawnInstance_()
oBinding.Filter = oFilter.Path_
oBinding.Consumer = oConsumer.Path_
oBinding.Put_

это создать моникер - будет печатать в файл C:\MonPrn.txt все печати
(можно сделать на серваке и для всех компов в домене/сети в файлы по именам компов или в один с именами компов)

Set objService = GetObject("winmgmts:\\.\Root\CIMV2")
Set objFilter = objService.ExecQuery("select * from __EventFilter")
for each c in objFilter
c.Delete_
next
Set objConsumer = objService.ExecQuery("select * from LogFileEventConsumer")
msgbox objConsumer.count
for each c in objConsumer
c.Delete_
next

а это удалить "получателей" всех, файлы останутся, просто перестанет отслеживать
54 smaharbA
 
03.11.06
11:48
(51)->(52) неплохая ссылочка, много полезной инфы, но еще надо и вот тут http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/scriptinga.asp - но по англицки
55 FOFA
 
03.11.06
11:48
спсибо за информацию
56 smaharbA
 
03.11.06
11:51

//*******************************************
Процедура Сформировать()
   Корень=2147483649;//HKCU
   Ветка="Software\1C\1Cv7\7.7\titles\";
   ScrVBS = СоздатьОбъект("MSScriptControl.ScriptControl");
   ScrVBS.Language = "vbscript";
   ScrVBS.ExecuteStatement("set oReg=GetObject(""winmgmts:root\default:StdRegProv"")");
   ScrVBS.Eval("oReg.EnumValues("+Корень+","""+Ветка+""",Arr)");
   Стр=ScrVBS.Eval("join(Arr,vbCrLf)");
   Для к=1 По СтрКоличествоСтрок(Стр) Цикл
       ScrVBS.Eval("oReg.GetStringValue("+Корень+","""+Ветка+""","""+СтрПолучитьСтроку(Стр,к)+""", S)");
       Стр2=ScrVBS.Eval("S");
       Сообщить(""+СтрПолучитьСтроку(Стр,к)+"=="+Стр2);
   КонецЦикла;
КонецПроцедуры

...
это базы, ну текущую по сравнению СтрПолучитьСтроку(Стр,к) с КаталогИБ() получишь
57 Казанская Сирота
 
03.11.06
11:51
(53) жжошь)
58 smaharbA
 
03.11.06
11:54
+(56) а просче
КомандаСистемы("regedit /ea "+КаталогВременныхФайлов()+"Базы.txt HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\titles\")
59 VasilyKushnir
 
03.11.06
12:02
asady, спасибо за ссылку- именно то, что доктор прописал.

smaharbA, согласись, что хоть твой метод и без ВК, но с помощью Addon1C одной командой получить имя текущей базы - это все-таки нечто. И еще: хочу твой метод как альтернативу добавить в комментарии  к своей приблуде на инфостарт (когда же он наконец заработает!), но без ссылки на автора идеи это как-то не красиво будет выглядеть - не НИК же твой там прописывать... А еще лучше, если сам выложишь - ведь качают же мой вариант (хоть и не лишенный недостатков)! Значит эта тема актуальна для многих.
60 Лефмихалыч
 
03.11.06
12:06
(59) укажи ник - так больше народу поймет, кто это
61 VasilyKushnir
 
03.11.06
12:08
Кстати, кто-нить в курсах, почему инфостарт упал? Не случилось ли с ним то же что и с нова.ру - когда север ломанули?
62 FOFA
 
03.11.06
17:22
А что за сайт инфостар, киньте ссылку пожалуста