Шаблоны кода 1С


Добавить новый Назад

Оправка Push уведомления

Оправка Push уведомления через онлайн сервис Pushover

Push Rest API

Процедура ОтправитьPushOverУведомление(ТекстСообщения, ЗаголовокСообщения)

	Сервер = "api.pushover.net";
	Адрес = "1/messages.json";
	TokenKey = "......"; //Здесь токен канала
	UserID = "......"; //Здесь ИД пользователя

	Соединение = Новый HTTPСоединение(Сервер,,,,Новый ИнтернетПрокси(истина),10, Новый ЗащищенноеСоединениеOpenSSL);
	СтрокаПараметров = "?token=%3&user=%4&html=1&message=%1&title=%2";
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%1", ТекстСообщения);
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%2", ЗаголовокСообщения);
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%3", TokenKey);
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%4", UserID);
	Запрос = Новый HTTPЗапрос(Адрес+СтрокаПараметров);
	
	Попытка
		Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	Исключение
		СообщениеПользователю = Новый СообщениеПользователю;
		СообщениеПользователю.Текст  = "Ошибка запроса к серверу: "+Ответ.КодСостояния;
		СообщениеПользователю.Сообщить();
		Возврат;
	КонецПопытки;	
	
	Если Ответ.КодСостояния <> 200 Тогда
	 	СообщениеПользователю = Новый СообщениеПользователю;
		СообщениеПользователю.Текст  = "Ошибка запроса к серверу: "+Ответ.КодСостояния;
		СообщениеПользователю.Сообщить();
		Возврат;
	КонецЕсли; 

КонецПроцедуры // ОтправитьPushУведомление()
Добавить комментарий

Запись документа XML иерархия

Запись документа XML, по иерархии

XML

Процедура ВыгрузитьСкладыНажатие(Элемент)		//выгрузка склады
	ЗаписьXML = Новый ЗаписьXML;
	ПутьКФайлу = 	КаталогВременныхФайлов()+ "Склады.xml";
	ЗаписьXML.ОткрытьФайл(ПутьКФайлу,  "UTF-8"); //Открываем файл для записи, указываем кодировку
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("Склады"); // Начало элемента 
	Выборка   = Справочники.Склады.ВыбратьИерархически();
	Пока Выборка.Следующий() Цикл  // Начинаем выгружать 
		если  Выборка.ЭтоГруппа = Истина тогда
			Если Выборка.УровеньВВыборке() = 0 Тогда 
			ЗаписьXML.ЗаписатьНачалоЭлемента("Склад"); // Начало элемента Склад
		ЗаписьXML.ЗаписатьАтрибут("Код",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель", Строка(Выборка.Родитель));
			ЗаписьXML.ЗаписатьКонецЭлемента();
		    Иначеесли Выборка.УровеньВВыборке() = 1 Тогда 
			ЗаписьXML.ЗаписатьНачалоЭлемента("Склад1"); 
		ЗаписьXML.ЗаписатьАтрибут("Код1",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование1", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель1", Строка(Выборка.Родитель));
		    ЗаписьXML.ЗаписатьКонецЭлемента();	
			КонецЕсли;
		иначеесли Выборка.ЭтоГруппа = Ложь тогда
		ЗаписьXML.ЗаписатьНачалоЭлемента("Склад2");
		ЗаписьXML.ЗаписатьАтрибут("Код2",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование2", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель2", Строка(Выборка.Родитель));
		ЗаписьXML.ЗаписатьАтрибут("Подразделение2", Строка(Выборка.Подразделение));
		ЗаписьXML.ЗаписатьАтрибут("ВидСклада2", Строка(Выборка.ВидСклада));
		ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента Организация
		КонецЕсли;
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента 
	ЗаписьXML.Закрыть();

КонецПроцедуры
Добавить комментарий

Выгрузка Запроса в XML документ, в виде дерева(В Виде иерархии)

Выгрузка Запроса в XML документ, в виде дерева

XML запрос иерархия XML дерево

Процедура ЛюбаяСЗапросом()
ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ПутьП,  "UTF-8"); //Открываем файл для записи, указываем кодировку
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("ОстаткиТоваров"); // Начало элемента 
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТоварыНаСкладах.Период КАК Период,
		|	ТоварыНаСкладах.Регистратор КАК Регистратор,
		|	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
		|	ТоварыНаСкладах.Количество КАК Количество
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		|ГДЕ
		|	ТоварыНаСкладах.Период МЕЖДУ &НачПериод И &КонПериод
		|	И ТоварыНаСкладах.Номенклатура В ИЕРАРХИИ(&Номенклатура)		
		|ИТОГИ ПО
		|		Регистратор";

Результат = Запрос.Выполнить();
	Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	ОбойтиУровеньДерева(Дерево.Строки, ЗаписьXML);   //вызов процедуры
	ЗаписьXML.ЗаписатьКонецЭлемента();     
	ЗаписьXML.Закрыть();

КонецПроцедуры

Процедура ОбойтиУровеньДерева(Строки, Запись)   // процедура для записи результата запроса с сохранением иерархии в текущий документ xml
	Для каждого Строка из Строки Цикл
		Если ПустаяСтрока(Строка(Строка.Номенклатура)) Тогда //Итог в запросе по "Регистратору"
			Запись.ЗаписатьНачалоЭлемента("Уровень");
			Запись.ЗаписатьАтрибут("Период",          Строка(Строка.Период));
			Запись.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
	   		Запись.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
			ОбойтиУровеньДерева(Строка.Строки, Запись); 
			Запись.ЗаписатьКонецЭлемента();  
		Иначе
			Запись.ЗаписатьНачалоЭлемента("Уровни");
			Запись.ЗаписатьАтрибут("Период",          Строка(Строка.Период));
			Запись.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
			Запись.ЗаписатьАтрибут("Номенклатура", Строка(Строка.Номенклатура));
	   		Запись.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
			ОбойтиУровеньДерева(Строка.Строки, Запись); 
			Запись.ЗаписатьКонецЭлемента();  
		КонецЕсли
	КонецЦикла; 
КонецПроцедуры
Добавить комментарий

Обработка Журнала Регистрации

Работа с журналом регистрации sqlite

Журнал Регистрации sqlite

ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения = "DRIVER=SQLite3 ODBC Driver;Database=" + ФайлЖурналаРегистрации + ";BigInt=1;";
ВнешниеИсточникиДанных.ЖурналРегистрации.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
ВнешниеИсточникиДанных.ЖурналРегистрации.УстановитьСоединение();

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
               |    ЗаписиЖурнала.Код,
               |    ЗаписиЖурнала.Важность,
               |    ЗаписиЖурнала.Дата,
               |    ЗаписиЖурнала.СтатусТранзакции,
               |    ЗаписиЖурнала.ДатаТранзакции,
               |    ЗаписиЖурнала.ИдентификаторТранзакции,
               |    ЗаписиЖурнала.Пользователь,
               |    ЗаписиЖурнала.Пользователь.Код,
               |    ЗаписиЖурнала.Пользователь.Наименование,
               |    ЗаписиЖурнала.Компьютер.Код,
               |    ЗаписиЖурнала.Компьютер.Наименование,
               |    ЗаписиЖурнала.Приложение.Код,
               |    ЗаписиЖурнала.Приложение.Наименование,
               |    ЗаписиЖурнала.Событие.Код,
               |    ЗаписиЖурнала.Событие.Наименование,
               |    ЗаписиЖурнала.Комментарий,
               |    ЗаписиЖурнала.Данные,
               |    ЗаписиЖурнала.ПредставлениеДанных,
               |    ЗаписиЖурнала.РабочийСервер,
               |    ЗаписиЖурнала.РабочийСервер.Код,
               |    ЗаписиЖурнала.РабочийСервер.Наименование,
               |    ЗаписиЖурнала.ОсновнойПорт,
               |    ЗаписиЖурнала.ВспомогательныйПорт
               |ИЗ
               |    ВнешнийИсточникДанных.ЖурналРегистрации.Таблица.ЗаписиЖурнала КАК ЗаписиЖурнала";
                   
ТаблицаДанных = Запрос.Выполнить().Выгрузить();
ВнешниеИсточникиДанных.ЖурналРегистрации.РазорватьСоединение();

//ОбычнаяДата = '00010101000000' + 635453673444260/10000; //03.09.2014 18:55:44
Комментарии: 1

Отправка электронной почты

Отправка электронной почты

Почта

Профиль = Новый ИнтернетПочтовыйПрофиль;
   Профиль.АдресСервераSMTP = "";
   Профиль.ПользовательSMTP = "";
   Профиль.ПарольSMTP = "";
   Профиль.ИспользоватьSSLSMTP = false;
   Профиль.ПортSMTP = 25; 
   Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации;

   Письмо = Новый ИнтернетПочтовоеСообщение;
   Текст1 = Письмо.Тексты.Добавить(Текст);
   Текст1.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
   Письмо.Тема = Тема; 
   Письмо.Отправитель = "";
   Письмо.ИмяОтправителя = "Сообщение от 1с";
   Письмо.Получатели.Добавить("");
   
   Почта = Новый ИнтернетПочта;     
   Попытка
      Почта.Подключиться(Профиль);
      Сообщить("Подключено");
   Исключение
       Сообщить("Не удалось подключиться к серверу");
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
   Попытка
      Почта.Послать(Письмо);
      Сообщить("Письмо отправлено");
   Исключение
       Сообщить("Не удалось отправить письмо");
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
    
   Почта.Отключиться();
   Сообщить("Соединение завершено");
Добавить комментарий

Удаление строк таблицы по условию

Обратный цикл по таблице значений с удалением строк по условию

Для Индекс = -ТЗ.Количество()+1 По -1 Цикл
	Стр =ТЗ.Получить(-Индекс);
	Если Найти(Стр.Имя, "ПодстрокаПоиска") > 0 Тогда
		ТЗ.Удалить(Стр);
	КонецЕсли;
КонецЦикла;
Комментарии: 3

Произношение текста голосом

произносит заданную фразу

Сообщить Голос Звук Диалог

Voice = Новый COMObject("SAPI.SpVoice");
Voice.Speak("Привет!");
Добавить комментарий

Задать вопрос

Вопрос и обработка ответа без синхронных методов (не модально)

Вопрос Оповещение Диалог Немодально

&НаКлиенте
Процедура ДиалогСВопросом(Команда)
     Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);	
     ПоказатьВопрос(Оповещение,  "Текст вопроса",  
        РежимДиалогаВопрос.ДаНетОтмена,
        0, // таймаут в секундах
        КодВозвратаДиалога.Да, // кнопка по умолчанию
        "Заголовок" 
    );    
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
     Если Результат = КодВозвратаДиалога.Да Тогда
        Сообщить("Ответ Да!");
    КонецЕсли;	
 КонецПроцедуры
Добавить комментарий

Пауза, ожидание в коде

Пауза выполнения кода

Пауза ожидание таймер

Процедура Ожидание(МСекунды)
	Перем Таймер;
	Таймер     = ТекущаяУниверсальнаяДатаВМиллисекундах() + МСекунды;
	Пока Таймер > ТекущаяУниверсальнаяДатаВМиллисекундах() Цикл
		Состояние(ОКР((Таймер-ТекущаяУниверсальнаяДатаВМиллисекундах())/1000),1);
	КонецЦикла;
КонецПроцедуры
Комментарии: 1

Преобразование ЧтениеJSON в Соответствие

Преобразует ЧтениеJSON любой глубины в Соответствие. Пример вызова: //JSONТекст - исходный текст в формате JSON Результат = Неопределено; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(JSONТекст); ОбработатьJSON(ЧтениеJSON, Результат); //Здесь на выходе из процедуры Результат = Соответствие;

ЧтениеJSON JSON Соответствие.

&НаСервере
Процедура ОбработатьJSON(ЧтениеJSON, Результат)
	
	ИмяСвойства = Неопределено;
	
	Пока ЧтениеJSON.Прочитать() Цикл
		TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
		
		Если TипJSON = ТипЗначенияJSON.НачалоОбъекта 
			ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
			НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);
			
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(НовыйОбъект);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда
				Результат.Вставить(ИмяСвойства, НовыйОбъект);
			КонецЕсли;
			
			ОбработатьJSON(ЧтениеJSON, НовыйОбъект);
			
			Если Результат = Неопределено Тогда
				Результат = НовыйОбъект;
			КонецЕсли;
		ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
			ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
		ИначеЕсли TипJSON = ТипЗначенияJSON.Число 
			ИЛИ TипJSON = ТипЗначенияJSON.Строка 
			ИЛИ TипJSON = ТипЗначенияJSON.Булево 
			ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(ЧтениеJSON.ТекущееЗначение);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") Тогда
				Результат.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
			КонецЕсли;
		Иначе
			Возврат;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Добавить комментарий

TurboConf

Удобный поиск шаблонов кода

прямо в Конфигураторе

Узнать подробнее