gifts2017

Создание скриншота для возможности отправки уведомления об ошибке программисту 1С

Опубликовал Андрей Краснокутский (Andry.Boris) в раздел Программирование - Практика программирования

Ознакомившись  с публикациями на тему «Отправка уведомления об ошибке программисту 1С с приложением скриншота» возник вопрос, а можно ли сделать процесс создания скриншота без поддержки ВК и универсальным по отношению к платформе…

Ознакомившись  с публикациями на тему «Отправка уведомления об ошибке программисту 1С с приложением скриншота» возник вопрос, а можно ли сделать процесс создания скриншота без поддержки ВК и универсальным по отношению к платформам 7.7 и 8.Х… Оказалось можно, но для этого нужно сделать скриншот сторонней системной утилитой. Пробороздив просторы гугла пришел к выводу, что простой и быстрой утилиты нет. Многие предлагают использовать сторонний софт и разные методы адаптации его в среде 1С. Тогда вооружившись минимальными знаниями, что были по программированию и имея под рукой пакет Microsoft Visual Basic 2010 Express написал небольшую утилиту весом в 81KB. Суть использования утилиты довольно таки проста, из любой платформы 1С даем команду выполнить внешнюю команду с параметрами… В результате получаем в определенном месте файл с нашим скриншотом. Что с ним потом делать… Всё что хотите… отправляйте на мыло, печатайте, и.т.д. Как транспортировать утилиту, да как угодно, можно в папке с базой, можно в составе конфигурации, а затем сохранять её на диск и запускать…

Какие параметры мы можем задать:

& - разделитель команд

path=”c:\temp\1c\Положить скриншот\Файл” – путь и имя файла для скриншота

type = “png” – формат в котором будет сохранен скриншот.

Поддерживаемые форматы:  jpg, jpeg, gif, bmp, emf, wmf, png, tiff

pause=”True” – включить вывод сообщения после скриншота

interval = “1000” – интервал паузы в милисекундах вывода сообщения после скриншота

text = “Улыбайтесь Вас снимает скрытая камера…” – сам текст сообщения после скриншота

help – краткая подсказка… видна на представленном скриншоте.

красным - обязательная комбинация параметров для создания скриншота

Утилита писана с использованием microsoft net framework 2.0 поэтому на компьютере должен быть этот пакет установлен, что на текущий момент используется практически на всех компьютерах. Поэтому проблем с использованием думаю, что не будет…

Пример для 1С:Предприятие 7.7

Процедура глЗадатьИмяСкриншота(ПолноеИмяФайла)
    Перем
ТекЧас,ТекМин,ТекСек;
   
ПутьКИБ = КаталогИБ()+"СообщитьОбОшибке\";
   
ТекДата = Формат(ТекущаяДата(),"ДДММММГГГГ");
   
ТекДата = СтрЗаменить(ТекДата,".","");
   
ТекущееВремя(ТекЧас,ТекМин,ТекСек);
   
ТекВремя = Формат(Число(ТекЧас),"Ч(0)2.0")+Формат(Число(ТекМин),"Ч(0)2.0")+Формат(Число(ТекСек),"Ч(0)2.0");
   
ПолноеИмяФайла = ПутьКИБ + "Скрин_"+ТекДата+"_"+ТекВремя;
КонецПроцедуры
// глЗадатьИмяСкриншота
//======================================================================
Функция глСоздатьСкриншот() Экспорт
    Перем
ПолноеИмяФайла;
   
// Получаем имя файла для скриншота
   
глЗадатьИмяСкриншота(ПолноеИмяФайла);
    Пока
ФС.СуществуетФайл(ПолноеИмяФайла)=1 Цикл
       
// Это из теории вероятности что более одного пользователя в один и
        // тотже момент времени нажмут на кнопку для скриншота
        // и если случилось сие чудо создать новое имя файла...
       
глЗадатьИмяСкриншота(ПолноеИмяФайла);
    КонецЦикла;
   
// соберем командную строку
   
Команда = КаталогИБ()+"ScreenShot.exe "+"path="""+ПолноеИмяФайла+""""+" & type=""bmp""";
   
// на всяк случай проверим размер свободного места на диске
   
Если ФС.СвободноеМестоНаДиске(Лев(КаталогИБ(),2))>104857600 Тогда
       
ЗапуститьПриложение(Команда);
       
// нужно дождаться появления файла
       
Счетчик = 1000000;
        Пока
Счетчик>0 Цикл
           
// Ждем отработки ScreenShot.exe
           
Счетчик = Счетчик - 1;
        КонецЦикла;
    КонецЕсли;
    Возврат
ПолноеИмяФайла+".bmp";
КонецФункции
// глСоздатьСкриншот

С удовольствием выслушаю все замечания…

Если кому-то покажется баяном, просьба резко не критиковать… ;)

ЗЫ: По просьбе добавил исходники

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ScreenShot
.exe 81,00Kb
30.07.12
94
.exe 81,00Kb 94 Скачать
Исходники ScreenShot
.rar 321,76Kb
30.07.12
19
.rar 321,76Kb 19 Скачать

См. также

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

Комментарии

1. Александр Лыткин (TrinitronOTV) 03.10.11 11:26
хорошая вещь - пригодиться
2. Андрей Краснокутский (Andry.Boris) 03.10.11 13:09
(1) TrinitronOTV,
Не забываем ставить + мне очень приятно если пригодиться...
3. Alex Misanets (Misanets) 03.10.11 16:35
Из описания к публикации:

"из любой платформы 1С даем команду выполнить внешнюю команду с параметрами…"

Пример кода можно?
4. Андрей Савенков (Ichigo) 04.10.11 01:41
Прикольная и главное актуальная вещь! Спасибо.
5. Андрей Краснокутский (Andry.Boris) 04.10.11 12:12
Спасибо.
Функционал можно развить, кому что нужно пишите...
допишем...
6. Alex Misanets (Misanets) 05.10.11 16:32
Ответ то будет на вопрос (3)?
7. Роман Романов (romansun) 05.10.11 16:49
(5)

Сделайте копирование скрина в буфер обмена. В 75% случаев это именно то, что нужно - вставить в письмо, в скайп, в документацию и пр.

я сам и заказчик на постоянной основе пользуемся getgreenshot.org
8. Анатолий (Анатолий50) 05.10.11 18:14
Не видел, но одобряю, идея очень хорошая. Еще бы и отправляла сама, или хотя бы собирала сведения, в каком месте остановилась программа. Поставил +
9. oav (oav) 06.10.11 09:12
Вещь хорошая. Надо попробовать... так ли все удобно???
10. Андрей Краснокутский (Andry.Boris) 06.10.11 14:35
(3) Пример для 7.7 добавлен... см. статью.
11. Андрей Краснокутский (Andry.Boris) 06.10.11 14:36
(8) В следующей редакции добавлю отправку по почте через SSL...
для 7.7 думаю это тоже особо актуально...
12. Alex Misanets (Misanets) 06.10.11 18:09
Что-то не получается никак в 8.2.

Процедура ВыполнитьНажатие(Кнопка)
ПолноеИмяФайла = "C:\Скрин_"+ТекущаяДата();
Команда = "C:\ScreenShot.exe "+"path="""+ПолноеИмяФайла+""""+" & type=""bmp""";
ЗапуститьПриложение(Команда);
КонецПроцедуры

В результате вроде должен появиться файл скрина на диске С:\ (там же и эксешник лежит), но нет, ничего нет.
В чем беда?
13. Евгений Сосна (pumbaE) 06.10.11 18:19
(12) Misanets, а просто так срабатывает? Не всегда ведь можно писать в корень диска С:, например в windows 7 нельзя по умолчанию.
14. Андрей Краснокутский (Andry.Boris) 06.10.11 18:22
(12) Возможно в єтой строке проблема
>> ПолноеИмяФайла = "C:\Скрин_"+ТекущаяДата();
Формируется имя с большим содержанием точек.
Воспользуйтесь моим методом, где формируется имя без точек...
и отрегулируйте количество кавычек:
>> Команда = "C:\ScreenShot.exe "+"path="""+ПолноеИмяФайла+"""+" & type=""bmp""";
15. Андрей Краснокутский (Andry.Boris) 06.10.11 18:26
(13) Поэтому и использовал строку
>> Команда = КаталогИБ()+"ScreenShot.exe "+"path="""+ПолноеИмяФайла+""""+" & type=""bmp""";
Если из командной строки запустить:
100% работает...
ScreenShot.exe path="C:\Program Files\screenshot"&type="png"
Дальше транслируйте команду в формате 1С
16. Alex Misanets (Misanets) 07.10.11 15:53
Andry.Boris пишет:

(12) Возможно в єтой строке проблема

>> ПолноеИмяФайла = "C:\Скрин_"+ТекущаяДата();

Формируется имя с большим содержанием точек.

Воспользуйтесь моим методом, где формируется имя без точек...

и отрегулируйте количество кавычек:

>> Команда = "C:\ScreenShot.exe "+"path="""+ПолноеИмяФайла+"""+" & type=""bmp""";

Спасибо, действительно проблема видимо в точках входящих в состав даты.
Решил файл хранить в темпе под простым именем типа
КаталогВременныхФайлов() + "screen"
и от туда брать его. Каждый раз файл будут перезаписан, если он существует.
17. Борис Скворцов (gaglo) 10.10.11 11:39
Пробороздив просторы гугла, значит? Так рекомендую произведение неподражаемого Нира Софера -
NirCmd v2.65 ! Просто и быстро позволяет сделать из командной строки около сотни самых разных вещей; среди них и создание скриншота: в файл или в буфер обмена, возможно с задержкой, поддерживаются разные форматы графического файла, и если несколько мониторов подключено, то можно по желанию получать скриншоты со всех доступных или только с главного...
ЗЫ. А Microsoft Net Framework всех версий отсутствует приблизительно на 120 из 130 компьютеров нашей фирмы, потому, что он там никому не нужен...
18. Сергей (Che) Коцюра (CheBurator) 10.10.11 12:24
мегакруто:
а можно ли сделать процесс создания скриншота без поддержки ВК и универсальным по отношению к платформам 7.7 и 8.Х… Оказалось можно, но для этого нужно сделать скриншот сторонней системной утилитой

- суперподход! вк - нам не нравятся, сделаем стороннюю утилиту...
..мдя...
.
для 7.7 - с использованием сторонней утилиты - то есть ВК: http://infostart.ru/public/14659/
+ у абадонны в миракле есть такой функционал.
+ к этому реально можно обойтись безо всяких ВК и сторонних утилит - принтскрин клавишу еще нгикто не отменял...
19. alexanderal (alexanderal) 10.10.11 13:29
а мне понравилось.... всяко с удаленщиками проще работать... эффект одной кнопки
20. Андрей Краснокутский (Andry.Boris) 10.10.11 14:04
(17) gaglo,
Я и не претендую на первенство изобретения велосипеда...
Это мой взгляд на вопрос, можете пользоваться любыми обработками как Вам желается...
21. Андрей Краснокутский (Andry.Boris) 10.10.11 15:12
(18) CheBurator,
ВК - сидит в памяти, это и есть то что может не нравиться,
причем зачем держать ВК если Вам нужна функция из неё только при возникновении
ситуации... К тому же избыток ВК в работающей может приводить к сбоям...

Про сторонние разработки те что Вы описали я в курсе,...

К тому же данная вещь на любителя...

Утилита универсальна, запустить всегда можно и не сложно...
Пользоваться или нет Вам решать, вариантов решения вопроса можно разложить множество...

Спасибо за комментарий.
22. Сергей (Che) Коцюра (CheBurator) 10.10.11 15:53
ВК загружать имеет смысл те, которые во время работы используются регулярно...
загруженная ВК - будет работать... по идее... (?)
а вот запуск сторонней утилыта запросто может обломаться из-за политик безопасности - раз, из-за нехватки зависимостей/софта - два (впрочем как и ВК ;0-)
.
поэтому я не люблю ВК/утилты в виде комбайнов... - если мне что-то надо - то ради одной возможности тянуть огромноый хвост невостребованных - бяка.. ;-)
.
так что, при существенном хотении задачу скриншота экрана можно полностью решить встроенными штатными средствами 1С/виндов... или с минимальным привлечением сторонних ВК/утилит
23. olga pt (pt_olga) 10.10.11 21:58
мы своих пользователей научили пользоваться Снагитом... на свою голову)))
удобней программки по скриншотам не видела
24. Андрей Краснокутский (Andry.Boris) 11.10.11 12:35
(23) pt_olga,
Как альтернатива Снагита можете посмотреть в сторону Gadwin PrintScreen - умеет делать
много и размер очень мал... сидит в трее, реагирует на кнопочку "PrintScreen"
может и отправить по электронке... Но статья не о том...

Не каждый пользователь сообразит, что нужно нажать PrintScreen и сохранить ошибку для
админа... а в данном разрезе можно автоматизировать процесс отлова ошибок и пользователю будет
незаметно...
25. Борис Скворцов (gaglo) 11.10.11 15:38
(20) Мне жаль (почему-то), что моё заявление вызвало именно такую реакцию.
Светлая сторона: Вы сами соорудили стороннюю утилиту под свои цели. И она работает. Похвально!
Тёмная сторона: Вы не нашли готовой утилиты, хотя могли и найти... (Непохвально?)
Мне лично не нравится в Ваших ответах лейтмотив "можете пользоваться любыми обработками как Вам желается...", "Пользоваться или нет Вам решать". Похоже, Вы все-таки обиделись даже на не самую резкую критику ;-[
Однако подождем следующую (см.11) редакцию велосипеда.
26. Николай Крылов (Nikola23) 14.10.11 00:52
Думаю, что будет сильно полезно при работе с множеством БД (соотв. с множеством пользователей).
Иногда из пользователей и пытками не вытянешь чо там за ошибка произошла, когда, при каких условиях.
А тут можно будет видеть не только работу с БД, но и попутно запущенные приложения.
27. Валерий (warenic) 17.10.11 17:44
Почитал описание, глянул на комменты... Зачем все эти сложности? Alt+PrintScreen - копируем снимок экрана в буфер. Теперь его можно вставить хоть в Paint, хоть в Word. Да хоть куда! И никаких ВК и изменений в коде...
28. Anneta86 (Leannet) 19.10.11 14:17
29. Олег Молочников (milkers) 19.07.12 15:19
Я бы с удовольствием воспользовался этим экзешником, если б смог проверить его на отсутствие закладок... Нужен исходный код.
30. Сергей NSerget (NSerget) 25.11.12 15:48
Отличная вещь.

У себя немного поправил:

//// нужно дождаться появления файла
//Счетчик = 10000;
//Пока Счетчик>0 Цикл
// // Ждем отработки ScreenShot.exe
// Счетчик = Счетчик - 1;
//КонецЦикла;

Счетчик = 1000000;
Пока НЕ ПроверитьСуществованиеФайла(КаталогВременныхФайлов() + ИмяФайлаСкринфота + ".jpg") Цикл
Счетчик = Счетчик - 1;
Если Счетчик = 0 Тогда
Возврат Ложь; // Скриншот не был создан
КонецЕсли;
КонецЦикла;
31. Дмитрий Колесников (EastGuy) 12.08.13 11:11
А вовремя открытого модального окна работает, можно сделать скрин?
32. Maxim Kolkin (the1) 12.08.13 11:15
полагаю, можно копнуть в сторону SendKeys + PrintScreen, а там уже вызывать или почту, или Пэйнт, или черта лысого. Но все равно плюс!
33. Mishanya Melnik (MishanyaMeepo) 22.08.14 15:38
(27) warenic, а если требуется автоматически при ошибках делать скрин и отправлять админам, без участия пользователя? А если нужно сделать большое количество снимков? Всяко легче написать обработку, а не нажимать много раз PrintScreen и вставлять в Paint.
34. Mishanya Melnik (MishanyaMeepo) 22.08.14 15:42
И еще насчет задержки/ожидания/delay:
Делать цикл с счетчиком неправильно, т.к. задержка предполагает приостановку процесса выполнения программы.
Поэтому можно сделать такую функцию:
//Установить задержку
Procedure delay(t) export 
	
	cmdLine= "ping -n 1 -w " + Формат(1000*t, "ЧГ=0")+" 1.0.0.0";
	
	WshShell = Новый COMОбъект("WScript.Shell");
	
	WshShell.Run(cmdLine, 0, -1);
	
EndProcedure
...Показать Скрыть


35. Артем Криничный (stifano) 27.02.15 19:49
Вещь!!! Очень пригодилась. Спасибо.
36. Андрей Краснокутский (Andry.Boris) 28.02.15 17:49
(35) stifano, На здоровья если помогло и не жалко + подкиньте мне пригодиться... ;)
37. DrZombi DrZombi (DrZombi) 07.04.15 14:07
А где для 1С 8.2 УФ и Вэб клиента?
Где использование технологии Нативел:)
38. Роман Уничкин (unichkin) 20.04.16 22:11
(37) DrZombi, какой native :) Это же не ВК))) И в УФ работает прекрасно. Из винды ессно. Автору зачет)
ох, вот это я археолог))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа