Каталог решений - Интересные возможности 1С

Интересные возможности 1С

Интересные возможности 1С

В наличии

Пара примеров использования сторонних языков программирования из 1С, отправка почты на примере mail.ru и загрузка файлов с HTTPS

Категория:

Описание

Рассмотрим ситуацию, в которой у нас есть ПК с установленной операционной системой 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(Первый, Второй)  Экспорт    
КонецПроцедуры

has been added to your cart:
Оформление заказа