Ознакомившись с публикациями на тему «Отправка уведомления об ошибке программисту 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";
КонецФункции // глСоздатьСкриншот
С удовольствием выслушаю все замечания…
Если кому-то покажется баяном, просьба резко не критиковать… ;)
ЗЫ: По просьбе добавил исходники