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

30.07.12

Задачи пользователя - Адаптация типовых решений

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

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

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

Ознакомившись  с публикациями на тему «Отправка уведомления об ошибке программисту 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";
КонецФункции
// глСоздатьСкриншот

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

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

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

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4452    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2953    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    1994    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

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

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

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

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

я сам и заказчик на постоянной основе пользуемся getgreenshot.org
39. imax26 91 29.04.17 06:12 Сейчас в теме
(7)
Копирование в буфер обмена делается - сюрприз - клавишей PrintScreen
8. Анатолий50 05.10.11 18:14 Сейчас в теме
Не видел, но одобряю, идея очень хорошая. Еще бы и отправляла сама, или хотя бы собирала сведения, в каком месте остановилась программа. Поставил +
11. Andry.Boris 59 06.10.11 14:36 Сейчас в теме
(8) В следующей редакции добавлю отправку по почте через SSL...
для 7.7 думаю это тоже особо актуально...
9. oav 06.10.11 09:12 Сейчас в теме
Вещь хорошая. Надо попробовать... так ли все удобно???
12. Misanets 340 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 нельзя по умолчанию.
15. Andry.Boris 59 06.10.11 18:26 Сейчас в теме
(13) Поэтому и использовал строку
>> Команда = КаталогИБ()+"ScreenShot.exe "+"path="""+ПолноеИмяФайла+""""+" & type=""bmp""";
Если из командной строки запустить:
100% работает...
ScreenShot.exe path="C:\Program Files\screenshot"&type="png"
Дальше транслируйте команду в формате 1С
14. Andry.Boris 59 06.10.11 18:22 Сейчас в теме
(12) Возможно в єтой строке проблема
>> ПолноеИмяФайла = "C:\Скрин_"+ТекущаяДата();
Формируется имя с большим содержанием точек.
Воспользуйтесь моим методом, где формируется имя без точек...
и отрегулируйте количество кавычек:
>> Команда = "C:\ScreenShot.exe "+"path="""+ПолноеИмяФайла+"""+" & type=""bmp""";
16. Misanets 340 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 компьютеров нашей фирмы, потому, что он там никому не нужен...
20. Andry.Boris 59 10.10.11 14:04 Сейчас в теме
(17) gaglo,
Я и не претендую на первенство изобретения велосипеда...
Это мой взгляд на вопрос, можете пользоваться любыми обработками как Вам желается...
25. gaglo 11.10.11 15:38 Сейчас в теме
(20) Мне жаль (почему-то), что моё заявление вызвало именно такую реакцию.
Светлая сторона: Вы сами соорудили стороннюю утилиту под свои цели. И она работает. Похвально!
Тёмная сторона: Вы не нашли готовой утилиты, хотя могли и найти... (Непохвально?)
Мне лично не нравится в Ваших ответах лейтмотив "можете пользоваться любыми обработками как Вам желается...", "Пользоваться или нет Вам решать". Похоже, Вы все-таки обиделись даже на не самую резкую критику ;-[
Однако подождем следующую (см.11) редакцию велосипеда.
18. CheBurator 3119 10.10.11 12:24 Сейчас в теме
мегакруто:
а можно ли сделать процесс создания скриншота без поддержки ВК и универсальным по отношению к платформам 7.7 и 8.Х… Оказалось можно, но для этого нужно сделать скриншот сторонней системной утилитой

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

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

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

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

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

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

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

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

Счетчик = 1000000;
Пока НЕ ПроверитьСуществованиеФайла(КаталогВременныхФайлов() + ИмяФайлаСкринфота + ".jpg") Цикл
Счетчик = Счетчик - 1;
Если Счетчик = 0 Тогда
Возврат Ложь; // Скриншот не был создан
КонецЕсли;
КонецЦикла;
31. EastGuy 53 12.08.13 11:11 Сейчас в теме
А вовремя открытого модального окна работает, можно сделать скрин?
32. ixijixi 1775 12.08.13 11:15 Сейчас в теме
полагаю, можно копнуть в сторону SendKeys + PrintScreen, а там уже вызывать или почту, или Пэйнт, или черта лысого. Но все равно плюс!
34. 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 3 27.02.15 19:49 Сейчас в теме
Вещь!!! Очень пригодилась. Спасибо.
36. Andry.Boris 59 28.02.15 17:49 Сейчас в теме
(35) stifano, На здоровья если помогло и не жалко + подкиньте мне пригодиться... ;)
37. DrZombi 286 07.04.15 14:07 Сейчас в теме
А где для 1С 8.2 УФ и Вэб клиента?
Где использование технологии Нативел:)
38. unichkin 1559 20.04.16 22:11 Сейчас в теме
(37) DrZombi, какой native :) Это же не ВК))) И в УФ работает прекрасно. Из винды ессно. Автору зачет)
ох, вот это я археолог))
40. user1004898 28 24.11.21 18:40 Сейчас в теме
не понятно, что за объект ФС ? в каком месте он инициализирован?
Оставьте свое сообщение