Рассмотрим ситуацию, в которой у нас есть ПК с установленной операционной системой Windows и установленной 1С 8.3.6.
Какие нестандартные задачи мы сможем решить с данной связкой?
Из 1С нам доступно всё изобилие программных средств, умеющих работать через COM. При желании можно, например, открыть CD-Rom у пользователя:
ComОбъектWMPlayer = Новый COMОбъект("WMPlayer.OCX.7");
Дисководы = ComОбъектWMPlayer.cdromcollection;
Дисководы.item(0).eject();
Однако бывает, что нам нужно сделать в системе что-то специфичное, а необходимый функционал вы нашли в каком-нибудь vb-скрипте, ниже представлен шаблон, который можно использовать в данной ситуации:
wshShell = Новый COMОбъект("wScript.shell");
ПутьКСкрипту = wshShell.expandEnvironmentStrings("%HOMEDRIVE%")
+ wshShell.expandEnvironmentStrings("%HOMEPATH%") + "\VBSFrom1C.vbs";
СкриптVBS = Новый ТекстовыйДокумент;
ТекстСкрипта = "MsgBox " + Символ(34) + "Hello World!" + Символ(34);
СкриптVBS.ДобавитьСтроку(ТекстСкрипта);
Попытка
СкриптVBS.Записать(ПутьКСкрипту, КодировкаТекста.OEM);
ЗапуститьПриложение(ПутьКСкрипту);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Но вдруг запуск скриптов запрещён локальной политикой безопасности? В таком случае нам поможет HTML-приложение, которое по умолчанию имеет доступ к файловой системе, ниже представлен шаблон:
wshShell = Новый COMОбъект("wScript.shell");
ПутьКСкрипту = wshShell.expandEnvironmentStrings("%HOMEDRIVE%") + wshShell.expandEnvironmentStrings("%HOMEPATH%") + "\JavascriptFrom1C.hta";
СкриптJavascript = Новый ТекстовыйДокумент;
Символ34 = Символ(34);
ТекстСкрипта = "<!-- saved from url=(0014)about:internet --><!doctype>
|<html>
|<head>
| <HTA:APPLICATION ID=" + Символ34 + "oHTA" + Символ34 + "
| APPLICATIONNAME=" + Символ34 + "WMPTour" + Символ34 + "
| BORDER=" + Символ34 + "thin" + Символ34 + "
| BORDERSTYLE=" + Символ34 + "normal" + Символ34 + "
| CAPTION=" + Символ34 + "yes" + Символ34 + "
| maximizeButton=" + Символ34 + "no" + Символ34 + "
| minimizeButton=" + Символ34 + "no" + Символ34 + "
| ICON=" + Символ34 + "img/wmptour.ico" + Символ34 + "
| SHOWINTASKBAR=" + Символ34 + "no" + Символ34 + "
| SINGLEINSTANCE=" + Символ34 + "yes" + Символ34 + "
| SYSMENU=" + Символ34 + "yes" + Символ34 + "
| VERSION=" + Символ34 + "1.0" + Символ34 + "
| WINDOWSTATE=" + Символ34 + "normal" + Символ34 + ">
|</head>
|<body>
|<script>
| alert( 'Hello, World!');
|</script>
|</body>
|</html>
|";
СкриптJavascript.ДобавитьСтроку(ТекстСкрипта);
Попытка
СкриптJavascript.Записать(ПутьКСкрипту, КодировкаТекста.OEM);
ЗапуститьПриложение(ПутьКСкрипту);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Иногда нужно отправить письмо из 1С, тут пригодится следующий код (для mail.ru):
ИнПочта = Новый ИнтернетПочта;
ИнПрофиль = Новый ИнтернетПочтовыйПрофиль;
ИнПрофиль.ВремяОжидания = 180; ;
ИнПрофиль.АдресСервераSMTP = "smtp.mail.ru";
ИнПрофиль.АдресСервераPOP3 = "pop.mail.ru";
ИнПрофиль.Пользователь = "*@mail.ru";
ИнПрофиль.ПользовательSMTP = "*@mail.ru";
ИнПрофиль.Пароль = "*****";
ИнПрофиль.ПарольSMTP = "*****";
ИнПрофиль.ПортSMTP = 465;
ИнПрофиль.ИспользоватьSSLSMTP = Истина;
ИнПрофиль.ПортPOP3 = 995;
ИнПрофиль.ИспользоватьSSLPOP3 = Истина;
ИнПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
//ИнПрофиль.POP3ПередSMTP = Истина;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель.Адрес = "*@mail.ru";
Сообщение.Отправитель.ОтображаемоеИмя = "Робот";
Сообщение.Тема = "Проверка почтового бота";
Получатель = Сообщение.Получатели.Добавить("*@wateva.ru");
Попытка
ИнПочта.Подключиться(ИнПрофиль);
Исключение
Сообщить("При подключени к серверу произошла ошибка! Проверьте учетные данные профиля почты." + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
Текст=Сообщение.Тексты.Добавить();
//Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;
//ТекстПисьма=""; ВложенияПисьма="";
//ТекстПисьмаФорматированный.ПолучитьHTML(ТекстПисьма,ВложенияПисьма);
//Текст.Текст = ТекстПисьма;
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Текст.Текст = "Привет :)";
Попытка
ИнПочта.Послать(Сообщение);
ЭтаФорма.Доступность = Ложь;
Сообщить("Письмо отправлено!");
Исключение
Сообщить("При отправке возникли проблемы. Письмо не отправлено. Проверьте правильность заполнения профиля и почты." + ОписаниеОшибки(),СтатусСообщения.Важное)
КонецПопытки;
ИнПочта.Отключиться();
Бывает, что нужен какой-нибудь файлик с какого-нибудь ресурса, который использует https. Для начала проверим, проверяет ли данный адрес сертификаты перед загрузкой (я использую wget, т.к. удобно и стабильно):
wget https://www.*.ru/upload/file.txt --no-check-certificate
Если всё прошло удачно, делаем то же самое из 1С:
СерверИсточник = "www.*.ru";
Запрос = Новый HTTPЗапрос("/upload/file.txt");
// wget https://www.*.ru/upload/file.txt --no-check-certificate
Попытка
НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
Ответ = НТТР.Получить(Запрос, "C:\file.txt");
Если НЕ(Ответ.КодСостояния = 200) Тогда
// Что-то пошло не так.
КонецЕсли;
Исключение
Ошибка = ОписаниеОшибки();
КонецПопытки;
Если нам нужно запустить на клиентской машине какое-нибудь приложение, а клиент привык работать только с 1С, делаем следующее:
//1. Превращаем наш исполняемый файл в строку
ДД = Новый ДвоичныеДанные("C:\НашаПрограмма.exe");
Строка64 = Base64Строка(ДД);
//2. И добавляем его реквизитом в обработку
// в процедуру "ПриСозданииНаСервере".
Объект.ДвоичныеДанные = Строка64;
ОпятьДвоичныеДанные = Base64Значение(Объект.ДвоичныеДанные);
НашаПрограмма = "C:\НашаПрограмма.exe";
ОпятьДвоичныеДанные.Записать(НашаПрограмма);
ЗапуститьПриложение(НашаПрограмма);
При необходимости мы можем добавить произвольное приложение в автозапуск системы:
&НаКлиенте
Процедура ДобавитьПрограммуВАвтозапуск(ПолныйПутьКФайлу = "", ВключитьОтладку = Ложь)
Символ34 = Символ(34);
ВеткаАвтозапуска = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
СтрокаКоманды = "Reg Add "
+ Символ34 + ВеткаАвтозапуска + Символ34
+ " /v "
+ Символ34 + "Notepad" + Символ34
+ " /t REG_SZ /d "
+ Символ34 + ПолныйПутьКФайлу + Символ34
+ " /f"
+ " /reg:64";
ПутьКСкриптуДобавления = "C:\Users\Public\Documents\startNotepad_Autorun.bat";
ЗаписьТекста = Новый ЗаписьТекста(ПутьКСкриптуДобавления, КодировкаТекста.OEM);
Если ВключитьОтладку Тогда
ЗаписьТекста.ЗаписатьСтроку(СтрокаКоманды + Символы.ПС);
ЗаписьТекста.ЗаписатьСтроку("pause");
Иначе
ЗаписьТекста.ЗаписатьСтроку(СтрокаКоманды);
КонецЕсли;
ЗаписьТекста.Закрыть();
Оповещение = Новый ОписаниеОповещения("IDDQD", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение,ПутьКСкриптуДобавления);
КонецПроцедуры
&НаКлиенте
Процедура IDDQD(Первый, Второй) Экспорт
КонецПроцедуры