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


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

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

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

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

Файлы обработки:

-