Популярное

БСП
Разработки

Чат бот ВКонтакте на 1С. Курс

Интенсив по разработке чат бота ВКонтакте. Используя API ВКонтакте создавать чат бот ВКонтакте из 1С. Получить список пользователей группы ВКонтакте и разослать им сообщения.
FastCode 66 8
Бесплатно

Чтение файлов Excel в таблицу значений (автоматическое наименование столбцов)

Функция считывает содержимое страницы файла Excel в таблицу значений, автоматически именует столбцы таблицы по первой строке файла. Пробелы заменяются на "".
eXtend88 59 1 1 1
&НаСервере
Функция ПодготовитьТаблицуСДанными(ФайлАдресВХранилище)
	
	ИмяФайлаСервер = ПолучитьИмяВременногоФайла(".xlsx");
	ФайлИмпорта = ПолучитьИзВременногоХранилища(ФайлАдресВХранилище);
	ФайлИмпорта.Записать(ИмяФайлаСервер);
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Попытка
		ТабличныйДокумент.Прочитать(ИмяФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;	
	
	ПЗ = Новый ПостроительЗапроса;
	ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());
	ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
	ПЗ.ЗаполнитьНастройки();
	ПЗ.Выполнить();
	
	ТаблицаПромежуточныхДанных = ПЗ.Результат.Выгрузить();
	
	Возврат	ТаблицаПромежуточныхДанных;
	
КонецФункции

TurboConf - расширение Конфигуратора 1С Промо

TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
bolsun
5 000 руб.

Отправка сообщения в чат-бот телеграм

Удобно использовать при отладке: добавив к условию точки остановки <здесь ваше произвольное условие> И ОповеститьВтелеграм(ОписаниеОшибки()) = Неопределено - отправит в телеграм причину ошибки, если она произошла. Или, условие точки остановки ОповеститьВтелеграм("Процедура окончена") = Неопределено И Ложь - сообщит о том, что точка остановки пройдена
mikaelangelo 41 1
// отправка любого сообщения, в т.ч. ОписаниеОшибки(), в Телеграм бот
Функция ОповеститьВтелеграм(Сообщение) Попытка 
	
	// 1) Создаем бота в телеграме, для этого нужно перейти в @BotFather и проследовать инструкциям,
	//    по окончании которых нам предоставят Access token	
	ДанныеДоступа = "это Access token";
	
	// 2) однократно получаем ID чата с ботом, предварительно написав боту любое сообщение
	// быстро: https://cms3.ru/kak-poluchit-chat-id-telegram/
	// чуть дольше: из текста json ответа, в объекте chat: "chat": {"id": "ид чата"}
    Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    ТекстJSONОтвета = Соединение.Получить(Новый HTTPЗапрос("bot" + ДанныеДоступа + "/getUpdates")).ПолучитьТелоКакСтроку();
	//(затем можно закомментировать две строчки кода выше)
	ИдЧата = "это chat.id";
	
      // 3) Отправляем сообщение с ранее указанными сообщением, токеном, ид чата
   ЗапрячьТелегу = Новый HTTPСоединение("api.telegram.org",443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
   ЗапрячьТелегу.Получить(Новый HTTPЗапрос("bot" + ДанныеДоступа + "/sendMessage?chat_id=" + ИдЧата + "&text=" + Сообщение));
	
Исключение КонецПопытки КонецФункции

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

произносит заданную фразу
Jratdroid 36 1 1
Voice = Новый COMObject("SAPI.SpVoice");
Voice.Speak("Привет!");

Запустить внешнее приложение

Выполняет запуск внешнего процесса, с оповещением и ожиданием результата
bolsun 37 4
&НаКлиенте
Процедура КомандаВыполнитьПрограмму(Команда)
	
	СтрокаЗапуска = "C:\Application.exe";
	
	НачатьЗапускПриложения(Новый ОписаниеОповещения("НачатьЗапускПриложенияЗавершение", ЭтотОбъект), СтрокаЗапуска,, Истина);
	
КонецПроцедуры  

&НаКлиенте
Процедура НачатьЗапускПриложенияЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт 
    
    //Вставить обработку завершения выполнения
    
КонецПроцедуры

Как получить дату и время создания элемента справочника, документа по ссылке

Kams 21 1
 // но по GUID можно определить время и дату
Функция ДатаСозданияСсылки(Ссылка)
    ГУИД = Ссылка.УникальныйИдентификатор();
    Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
    Разрядность = СтрДлина(Строка16);
    ЧислоСек = 0;
    Для Позиция = 1 По Разрядность Цикл
        ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;
    Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
КонецФункции   

Обмен через ВЕБ Сервисы 2 часть

Обмен через ВЕБ Сервисы , Подключение к созданной web ссылке с другой базы.
Артур 47 2 3
Процедура КнопкаЗаполнитьТаблицуИзПервойБазыНажатие(Кнопка)
      
	ВСОпределение = Новый WSОпределения("127.7.7.7/Obmen/ws/Obmen.1cws?wsdl", "admin", "pass"); 
//127.7.7.7 - ВашИПАдресГдеОпубликованWebСервис 
//admin - пользователь информационной базы с полными правами и пароль -pass
	ВСПрокси = Новый WSПрокси(ВСОпределение, "127.7.7.7", "Obmen", "ObmenSoap");
//127.7.7.7 - URl пространство имен Веб сервиса первой базы, Obmen -наименование 
// расширения ,
//ObmenSoap тоже самое Но добавляем Soap к названии ))
	
	Склад= Элементы.Склад.Значение; //Элемент формы, выбранное поле - склад
	Время=ТекущаяДата();
	
	ВСПрокси.Пользователь = "admin";
	ВСПрокси.Пароль = "pass";
	
	Данные = ВСПрокси.ОстаткиТоваровТНН(Строка(Склад),Дата(Время));  // подключаемся и получаем данные xml 
	
	попытка
	
	ЧтениеXML               = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(данные);  //Открываем файл
	Пока ЧтениеXML.Прочитать() Цикл
		Если ЧтениеXML.ТипУзла                  = ТипУзлаXML.НачалоЭлемента Тогда 
			Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
				ст = Таб.Добавить();  //Табличная часть на форме 
				ст.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута("Номенклатура"));
				ст.Склад = Справочники.Склады.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута("Склад"));
				ст.КоличествоНачальныйОстаток = ЧтениеXML.ЗначениеАтрибута("КоличествоНачальныйОстаток");
				ст.КоличествоПриход = ЧтениеXML.ЗначениеАтрибута("КоличествоПриход");
				ст.КоличествоРасход = ЧтениеXML.ЗначениеАтрибута("КоличествоРасход");
				ст.КоличествоКонечныйОстаток = ЧтениеXML.ЗначениеАтрибута("КоличествоКонечныйОстаток");
				прервать;	
			конеццикла;
		КонецЕсли;
	конеццикла;	
	
	исключение
	    сообщить(Данные);
	КонецПопытки;
	
	
конецпроцедуры

Обмен через ВЕБ Сервисы 1 часть

Обмен xml файлами через ВЕБ Сервисы (Запрос остаток товаров с одной базы на другую по wеб сервису,) настройка и создание web сервиса.
Артур 47 2 3
//1.Создаем web-сервис (заполняем только "Основные" и "Прочее", пока что ...)
//      - Имя любое(не критично, но желательно на англ.)
//      -URl пространство имен - вводим ip адресс для удобства (пример: 127.7.7.7)
//      -Пакеты XDTO , я еще не совсем разобрался )), поэтому выбираю стандартный 
//        (http://v8.1c.ru/8.1/xdto),  особой роли не играет в данном примере.
//        -Имя файла публикации - Любое значение с форматом *.1cws(Пример:  Obmen.1cws)
//2. Создаем Операцию с параметрами (Напоминает стандартную "Функцию" с параметрами)
//       Например -Операция "ОстаткиТоваровНТТ" 
//       тип возвращаемого значение- "Строка"- string (http://www.w3.org/2001/XMLSchema)
//3 создаем операции :Время с Типом: DataTime , Склад с Типом: string - пока хватит )
//4 создаем процедуру для операции "ОстаткиТоваровНТТ", в свойствах операции и 
//  заполним функцию ниже:
//5 в самом конце, обновляем базу и публикуем, готово!


Функция ОстаткиТоваровНТТ(Склад, Время)

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("UTF-8"); 
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("ОстаткиТоваров"); 

	Запрос = Новый Запрос;
	Запрос.Текст ="ВЫБРАТЬ
	              |	ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
	              |	ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
	              |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток,
	              |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
	              |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход,
	              |	СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
	              |ИЗ
	              |	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериод, &КонПериод, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
	              |ГДЕ
	              |	ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад				  
		      |СГРУППИРОВАТЬ ПО
	              |	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	              |	ТоварыНаСкладахОстаткиИОбороты.Склад,
	              |
	              |УПОРЯДОЧИТЬ ПО
	              |	Номенклатура УБЫВ"; 

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

Программное открытие отчета или обработки из справочника "ВнешниеОбработки"

Функция открывает внешний отчет или обработку из справочника "ВнешниеОбработки", нужно передать только имя обработки.
ROXy 25 1 2
Функция ОткрытьВнешнийОтчет(ИмяОтчета) Экспорт
 
    ПутьКВременномуФайлу=КаталогВременныхФайлов()+
"ВременныйФайл" + формат(ТекущаяДата(),"ДФ=ddMMyyyyhhmmss")+ ".tmp";
    о = Справочники.ВнешниеОбработки.НайтиПоНаименованию(ИмяОтчета);
    
    Если о=Справочники.ВнешниеОбработки.ПустаяСсылка() Тогда
        Возврат неопределено;    
    КонецЕсли;
    
    Справочники.ВнешниеОбработки.НайтиПоНаименованию(ИмяОтчета).ХранилищеВнешнейОбработки.Получить().Записать(ПутьКВременномуФайлу);
    
    Если о.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет Тогда
        ВнешниеОтчеты.ПолучитьФорму(ПутьКВременномуФайлу).Открыть();
    КонецЕсли;
    
    Если о.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка Тогда
        ВнешниеОбработки.ПолучитьФорму(ПутьКВременномуФайлу).Открыть();
    КонецЕсли;
    
    УдалитьФайлы(ПутьКВременномуФайлу);
    
    Возврат неопределено;    
    
конецфункции

Чтение Excel через Табличный документ

chugindanil 16 1
//На клиенте

ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбора.Заголовок = "Выберите файл";

Если ДиалогВыбора.Выбрать() Тогда
	ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; 
	Команда1НаСервере(ИмяФайла);
	
КонецЕсли; 


//На сервере

//Вывод в табличный документ

ТабличныйДокумент = Новый ТабличныйДокумент;

ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

//вывод в таблицу значений

ПЗ = Новый ПостроительЗапроса;

ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличныйДокумент.Область());

ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;

ПЗ.ЗаполнитьНастройки();

ПЗ.Выполнить();

ТаблицаЗначений = ПЗ.Результат.Выгрузить();

Как по GUID определить время и дату создания ссылки?

Как по GUID определить время и дату создания ссылки?
Yashar 21 1 1
Функция UUID_Timestamp(Ссылка)
	
	ГУИД = Ссылка.УникальныйИдентификатор();
    // Например ГУИД равен: bdb62d89-cede-11e4-b12b-d4ae52b5e909
    // Дата содержится в первых символах, bdb62d89-cede-11e4 которые нужно переставить задом наперед: 11e4-cede-bdb62d89
    Строка16 = Сред(ГУИД, 15, 4) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
    
    // Убираем "лишние" знаки "-"(тире).
    Строка16 = СтрЗаменить(Строка16, "-", "");
    
    // Убираем первый символ, так как в нем содержится версия стандарта (зашит в седьмой октет)
    Строка15 = Сред(Строка16, 2);
    
    // Получаем timestamp в 60 бит : 1E4 CEDE BDB6 2D89
    ЧислоСек = 0;
    Для Позиция = 1 По СтрДлина(Строка15) Цикл
        ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка15,Позиция,1))*Pow(16,СтрДлина(Строка15) - Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;
    
    // Прибавляем к дате начала Григореанского календаря
    Возврат Дата(1582, 10, 15, 00, 00, 00) + ЧислоСек + СмещениеСтандартногоВремени() + СмещениеЛетнегоВремени();;
    
КонецФункции

GET-запрос к HTTP-серверу

GET-запрос к HTTP-серверу
stawen 53 3 1
Заголовки=Новый Соответствие();
Заголовки.Вставить("Content-Type","application/xml");
Заголовки.Вставить("Accept","application/xml");

Запрос=Новый HTTPЗапрос();
Запрос.АдресРесурса="clients/list";
Запрос.Заголовки=Заголовки;

Соединение=Новый HTTPСоединение("api.yourserver.ru");//таким образом полный URL запроса http://api.yourserver.ru/clients/list
Ответ=Соединение.Получить(Запрос);
КодСостояния=Ответ.КодСостояния;
СтрокаОтвета=Ответ.ПолучитьТелоКакСтроку();	

Если КодСостояния=200 тогда
	ЧтениеXML=Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаОтвета);
	Попытка
		КонтрагентыСписокXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип("http://api.yourserver.ru/xdto","ClientList"));
	Исключение
		Сообщить(СформироватьСообщениеОбОшибке(ИнформацияОбОшибке()));
		Предупреждение("Сервер прислал плохие данные!");
		Возврат;
	КонецПопытки;
	//обработка объекта XDTO	
Иначе
	//обработка ошибочных кодов
КонецЕсли;

Сведения о внешней обработке - Отчет

Автоматическое заполнение сведений о внешней обработки для отчета
reborn85 31 1 2

#Область ОсновныеНастройкиДляПодключения
//не забываем заполнять Обработка->Действия->Свойства->ХранилищеВариантовОтчетов
Функция ВернутьСтруктуруПараметров()
	
	Структура = Новый Структура();
	Структура.Вставить("Документ","");
	Структура.Вставить("Представление",ЭтотОбъект.Метаданные().Представление());
	Структура.Вставить("Наименование",ЭтотОбъект.Метаданные().Синоним);
	Структура.Вставить("Идентификатор",ЭтотОбъект.Метаданные().Имя);
	Структура.Вставить("Версия","1.0.0.0");
	Возврат Структура;	
	
КонецФункции 

Функция СведенияОВнешнейОбработке() ЭКСПОРТ
	
	ПараметрыОбработки = ВернутьСтруктуруПараметров();
	
	Сведения = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	Сведения.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
	Сведения.Наименование = ПараметрыОбработки.Наименование;
	
	стр = Сведения.Команды.Добавить();
	стр.Представление = ПараметрыОбработки.Представление;
	стр.Идентификатор = ПараметрыОбработки.Идентификатор;
	стр.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	
	Возврат Сведения;
	
КонецФункции
#КонецОбласти

Сохранение таблицы значений в XML

ArturR 31 2
ДанныеНакладной = Новый ТаблицаЗначений();
	ДанныеНакладной.Колонки.Добавить("НоменклатураАртикул");
	ДанныеНакладной.Колонки.Добавить("Количество");
	ДанныеНакладной.Колонки.Добавить("Цена");
	
	Для Каждого Стр Из Товары Цикл
		Если Стр.Номенклатура.Артикул = "" Тогда
			Сообщить ("Внимание! В номенклатуре " + Стр.Номенклатура + " не определен артикул.");
		Иначе		
			СтрокаТЗ = ДанныеНакладной.Добавить();
			СтрокаТЗ.НоменклатураАртикул = Стр.Номенклатура.Артикул;
			СтрокаТЗ.Количество = Стр.Количество;
			СтрокаТЗ.Цена = Стр.Цена;		
		КонецЕсли;
	КонецЦикла;
	Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
	XML = Новый ЗаписьXML;
	ИмяФайла = "" + КРВ_ВспомогательныеФункции.УбратьНули(Номер)
	+ " - " + КРВ_ВспомогательныеФункции.УбратьНедопустимыеСимволы(Контрагент);
	
	XML.ОткрытьФайл("d:\1C_DATA\ОБМЕН\" + ИмяФайла + ".xml");
	Сериализатор.ЗаписатьXML(XML, ДанныеНакладной);

POST-запрос к HTTP-серверу

POST-запрос к HTTP-серверу
stawen 53 3 1
ЗаписьXML=Новый ЗаписьXML(); 
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
Фабрика.ЗаписатьXML(ЗаписьXML, КонтрагентXDTO);//объект XDTO создан и заполнен ранее 

Заголовки=Новый Соответствие();
Заголовки.Вставить("Content-Type","application/xml");
Заголовки.Вставить("Accept","application/xml");

Запрос=Новый HTTPЗапрос();
Запрос.АдресРесурса="clients/add";
Запрос.Заголовки=Заголовки;
Запрос.УстановитьТелоИзСтроки(ЗаписьXML.Закрыть());

Соединение=Новый HTTPСоединение("api.yourserver.ru");//таким образом полный URL запроса http://api.yourserver.ru/clients/add
Ответ=Соединение.ОтправитьДляОбработки(Запрос);
КодСостояния=Ответ.КодСостояния;
СтрокаОтвета=Ответ.ПолучитьТелоКакСтроку();
Если КодСостояния=201 тогда
	ЧтениеXML=Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаОтвета);
	Попытка
		СтатусРаботыXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип("http://api.yourserver.ru/xdto","Status"));
	Исключение
		Сообщить(СформироватьСообщениеОбОшибке(ИнформацияОбОшибке()));
		Предупреждение("Сервер прислал плохие данные!");
		Возврат;
	КонецПопытки;
	//обработка объекта XDTO
Иначе
	//обработка ошибочных кодов
КонецЕсли;

Создание регламентного задания из внешней обработки

buketoff 35 7
// Функция возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
	
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");

    ПараметрыРегистрации.Вставить("Наименование", "Демо обработка");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Демо обработка");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
    "Демо обработка",
    "Идентификатор",
    "ВызовСерверногоМетода",
    Истина,"");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
	
КонецФункции


Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции


Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


Процедура ВыполнитьКоманду(Идентификатор, ОбъектыНазначения) Экспорт
	
	// Тело процедуры
					
КонецПроцедуры

ЗаписьJSON

Формирует строку со структурой JSON без создания файла
Bezeus 15 1
	ЗаписьJSON = Новый ЗаписьJSON;
	
	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
	ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
	
	ЗаписьJSON.ЗаписатьНачалоОбъекта();
		ЗаписьJSON.ЗаписатьИмяСвойства("Выражение");
		ЗаписьJSON.ЗаписатьЗначение("Сумма 1 + 1");
		ЗаписьJSON.ЗаписатьИмяСвойства("Результат");
		ЗаписьJSON.ЗаписатьЗначение(2);
	ЗаписьJSON.ЗаписатьКонецОбъекта();

	ТелоЗапроса = ЗаписьJSON.Закрыть();

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

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

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

Соединение и запрос данных из другой базы 1с

делаем запрос в УТ из сторонней базы для поиска документа
kAndrat 15 1
//Подключение к внешней базе
&НаСервере
 Функция ПодключитьВнешнийИсточник(СтрокаСоединения, ОбъектПодключения="V82.COMConnector") 
	 Попытка
		 Connector = Новый COMОбъект("V82.COMConnector");
		 COM = Connector.connect(СтрокаСоединения);
		 Возврат COM;
	 Исключение
		  Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
		  Возврат Неопределено;
	 КонецПопытки;
	 
 КонецФункции	


&НаКлиенте
Процедура Подключение(Команда)
	ПодключениеСервер();
КонецПроцедуры


//Подключение и Выгрузка данных из сторонней базы
&НаСервере
Процедура ПодключениеСервер()
	 Соединение = ПодключитьВнешнийИсточник("Srvr=""ИмяСервера"";Ref=""ИмяБазы"";Usr=""Пользователь"";Pwd=""Пароль"";");
	 Запрос = Соединение.NewObject("Запрос");
	 Запрос.Текст = "ВЫБРАТЬ
		|	РеализацияТоваровУслуг.Номер
		|		ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|		ГДЕ
		|	РеализацияТоваровУслуг.Номер =  &Номер";
	Запрос.УстановитьПараметр("Номер",Номер);
	РезультатЗапроса = Запрос.Выполнить().Выгрузить(); //Получили COM объект
	Преобразование = ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(РезультатЗапроса));  //преобразовали COM объект

	Для каждого стр из Преобразование Цикл
		Сообщить(стр.номер);
	КонецЦикла;
		
КонецПроцедуры

Создание схемы компоновки данных программно

Функция на вход принимает Запрос, Текст запроса, таблицу значений и дерево значений
miha 7 1
// Пример универсальной функции для создания схемы компоновки данных
// Опубликовал Дмитрий Иванов (kambl) в раздел Программирование - Практика программирования
// http://infostart.ru/public/575659/
//
// Если вам приходится часто создавать схему компоновки данных программно или вы начинающий специалист и пытаетесь разобраться, что же за зверь такой СКД, то эта статья может оказаться вам полезной. Функция создает схему компоновки с минимально необходимой структурой данных. С помощью передачи дополнительных параметров есть возможность добавления ресурсов и оформления.
// Появилась необходимость часто прибегать к программному созданию схемы компоновки данных. Было принято решение написать универсальную функцию принимающую различные наборы данных и на выходе возвращающую готовую СКД. Функция на вход принимает Запрос, Текст запроса, таблицу значений и дерево значений.
// Помимо набора данных функция принимает ряд необязательных параметров:
//
//  Структура ресурсов: содержит перечень полей ресурсов, где ключ - ИмяПоля, Значение(Строка) - Агрегатная функция ("Сумма", "Среднее", "Количество",  и т.д.);
//  Флаг АвтоЗаполнениеДоступныхПолей;
//  Строковое Имя макета оформления.
//
// НаборДанных (Типы: Строка, Запрос, ТаблицаЗначений, ДеревоЗначений)
// Искомый набор данных
//
// СтруктураРесурсов (Тип: Структура) - Структура полей ресурсов, где ключ - ИмяПоля, Значение(Строка) - Агрегатная функция
//
// ВноситьПоляВыбора (Тип: Булево) - Флаг добавление полей набора
//
// ИмяСтандартногоМакетаОформления (Тип: Строка) - Имя макета оформления
//
Функция СоздатьСхемуКомпоновкиДанных(НаборДанных, СтруктураРесурсов = Неопределено, АвтоЗаполнениеДоступныхПолей = Истина, ИмяСтандартногоМакетаОформления = "")
	СКД = Новый СхемаКомпоновкиДанных;

	// Заполнение основных данных схемы
	ИсточникДанных = СКД.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя                = "ИсточникДанных";
	ИсточникДанных.ТипИсточникаДанных = "Local";

	Если      ТипЗнч(НаборДанных) = Тип("Строка") или
	          ТипЗнч(НаборДанных) = Тип("Запрос") Тогда
		ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
		ТекущийНаборДанных.Имя                          = "ОсновнойНабор";
		ТекущийНаборДанных.Запрос                       = ?(ТипЗнч(НаборДанных) = Тип("Строка"), НаборДанных, НаборДанных.Текст);
		ТекущийНаборДанных.ИсточникДанных               = "ИсточникДанных";
		ТекущийНаборДанных.АвтоЗаполнениеДоступныхПолей = АвтоЗаполнениеДоступныхПолей;

		ТипНабора = "Запрос";
	ИначеЕсли ТипЗнч(НаборДанных) = Тип("ТаблицаЗначений") или
	          ТипЗнч(НаборДанных) = Тип("ДеревоЗначений") Тогда
		ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
		ТекущийНаборДанных.Имя            = "ОсновнойНабор";
		ТекущийНаборДанных.ИмяОбъекта     = "ТаблицаИсточник"; // связывание с внешними данными идёт именно по нему
		ТекущийНаборДанных.ИсточникДанных = "ИсточникДанных";

		ТипНабора = "Объект";
	Иначе
		Возврат Неопределено;
	КонецЕсли;

	НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;

	// Создание структуры.
	// Группировка, детальные записи и автовыбранное поле
	Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	Группировка.Использование = Истина;

	АвтоПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	АвтоПоле.Использование = Истина;

	КоллекцияКолонок = Новый ТаблицаЗначений;
	КоллекцияКолонок.Колонки.Добавить("Имя");
	КоллекцияКолонок.Колонки.Добавить("ТипЗначения");
	КоллекцияКолонок.Колонки.Добавить("Заголовок");

	Если      ТипНабора = "Запрос" Тогда
		ПостроительЗапроса = Новый ПостроительЗапроса;
		Если ТипЗнч(НаборДанных) = Тип("Строка") Тогда
			ПостроительЗапроса.Текст = СокрЛП(НаборДанных);
		Иначе
			ПостроительЗапроса.Текст = СокрЛП(НаборДанных.Текст);
		КонецЕсли;
		ПостроительЗапроса.ЗаполнитьНастройки();

		Для Каждого ПолеОтбора Из ПостроительЗапроса.ВыбранныеПоля Цикл
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя         = ПолеОтбора.Имя;
			НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ПолеОтбора.ПутьКДанным].ТипЗначения;
			НоваяКолонка.Заголовок   = ПолеОтбора.Представление
		КонецЦикла;
	ИначеЕсли ТипНабора = "Объект" Тогда
		Для Каждого Колонка Из НаборДанных.Колонки Цикл
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя = Колонка.Имя;
			НоваяКолонка.ТипЗначения = Колонка.ТипЗначения;
			НоваяКолонка.Заголовок = Колонка.Имя;
		КонецЦикла;
	КонецЕсли;

	// Добавление ресурсов
	Если ТипЗнч(СтруктураРесурсов) = Тип("Структура") Тогда
		Для Каждого ЭлСтруктуры Из СтруктураРесурсов Цикл
			// Проверка, а Существует ли поле ресурса среди полей набора
			Если КоллекцияКолонок.Найти(ЭлСтруктуры.Ключ) <> Неопределено Тогда
				// Проверка на правильность указания агрегатной функции
				Если      ЭлСтруктуры.Значение = "Сумма" ИЛИ
				          ЭлСтруктуры.Значение = "Среднее" ИЛИ
				          ЭлСтруктуры.Значение = "Максимум" ИЛИ
				          ЭлСтруктуры.Значение = "Минимум" ИЛИ
				          ЭлСтруктуры.Значение = "Количество" Тогда
					ПолеРесурса             = СКД.ПоляИтога.Добавить();
					ПолеРесурса.ПутьКДанным = ЭлСтруктуры.Ключ;
					ПолеРесурса.Выражение   = ЭлСтруктуры.Значение + "(" + ЭлСтруктуры.Ключ + ")";
				ИначеЕсли ЭлСтруктуры.Значение = "КоличествоРазличные" Тогда
					ПолеРесурса             = СКД.ПоляИтога.Добавить();
					ПолеРесурса.ПутьКДанным = ЭлСтруктуры.Ключ;
					ПолеРесурса.Выражение   = "Количество(Различные " + ЭлСтруктуры.Ключ + ")";
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

	// Добавление полей в набор
	Для Каждого НоваяКолонка Из КоллекцияКолонок Цикл
		ПолеНабора = ТекущийНаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ПолеНабора.Заголовок   = СокрЛП(НоваяКолонка.Заголовок);
		ПолеНабора.Поле        = СокрЛП(НоваяКолонка.Имя);
		ПолеНабора.ПутьКДанным = СокрЛП(НоваяКолонка.Имя);

		// Удалим Неопределено и NULL
		Массив = Новый Массив;
		Для Каждого ТекущийТип Из НоваяКолонка.ТипЗначения.Типы() Цикл
			Если ТекущийТип = Тип("Неопределено") ИЛИ ТекущийТип = Тип("NULL") ИЛИ
			     ТекущийТип = Неопределено ИЛИ ТекущийТип = Null Тогда
				Продолжить;
			КонецЕсли;
			Массив.Добавить(ТекущийТип);
		КонецЦикла;
		ПолеНабора.ТипЗначения = Новый ОписаниеТипов(Массив, НоваяКолонка.ТипЗначения.КвалификаторыЧисла,
		                                             НоваяКолонка.ТипЗначения.КвалификаторыСтроки,
		                                             НоваяКолонка.ТипЗначения.КвалификаторыДаты);

		ВыбранноеПолеКомпоновкиДанных = НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПолеКомпоновкиДанных.Поле          = Новый ПолеКомпоновкиДанных(ПолеНабора.ПутьКДанным);
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
	КонецЦикла;

	// Оформление
	Если не ПустаяСтрока(ИмяСтандартногоМакетаОформления) Тогда
		ЗначениеПараметраВывода = НастройкиПоУмолчанию.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
		ЗначениеПараметраВывода.Значение      = ИмяСтандартногоМакетаОформления;
		ЗначениеПараметраВывода.Использование = Истина;
	КонецЕсли;

	Возврат СКД;
КонецФункции  // СоздатьСхемуКомпоновкиДанных