Публикации

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

Подключение к базе через com соединение и создание нового документа

buketoff 32 6
//выбираем сотрудника

ЗапросВ = КомСоединение.NewObject("Запрос");
ЗапросВ.Текст = "
|ВЫБРАТЬ первые 1 
|Сотрудники.Ссылка КАК Сотрудник
|ИЗ
|Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|НЕ Сотрудники.СтруктураКомпании = ЗНАЧЕНИЕ(Справочник.СтруктураКомпании.ПустаяСсылка)
|И Сотрудники.ФизическоеЛицо.Наименование = &ФизическоеЛицо
|И Сотрудники.ПометкаУдаления = ЛОЖЬ
|";

ЗапросВ.УстановитьПараметр("ФизическоеЛицо", СтруктураДанных.Сотрудник.Наименование);

com_Результат     = ЗапросВ.Выполнить().Выбрать();// COM объект    

Если com_Результат.следующий() Тогда
	//нашли сотрудника
	
	com_ТЗ_Сотрудники = com_Результат.Сотрудник;// COM объект
	
	// Получаем таблицу значений из COM-объекта
	// COMОбъект в -> строку
	// Запишем COMОбъект в строку на стороне базы-источника
	
	стр_ТЗ_Сотрудники = КомСоединение.ЗначениеВСтрокуВнутр(com_ТЗ_Сотрудники);
	
	// получим таблицу значений из строки
	ТЗ_Сотрудники = ЗначениеИзСтрокиВнутр(стр_ТЗ_Сотрудники);
	
	МенеджерДокумента = КомСоединение.Документы.ЗаписьВРНФактическиеОтпуска;
	КомСоединение.УстановитьБезопасныйРежим(Ложь);
	КомСоединение.УстановитьПривилегированныйРежим(Истина);
	
	НовДок      = МенеджерДокумента.СоздатьДокумент();
	НовДок.Дата = СтруктураДанных.Период;
	НовДок.Сотрудник...
	
Иначе
	//соответственно не нашли
	
	com_ТЗ_Сотрудники = Неопределено;
КонецЕсли;

Получить имя формы выбора по ссылке


&НаСервереБезКонтекста
Функция ПолучитьИмяФормыВыбора(Ссылка)
  
	Возврат Ссылка.Метаданные().ПолноеИмя() + ".ФормаВыбора";
	
КонецФункции

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

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

УТ 114. Выбрать все документы, по определенному виду номенклатуры.

Список типов документов можно наполнить нужными. ВидНоменклатуры - реквизит на форме обработке или указывать программно
buketoff 32 6
&НаСервере
Процедура ВыбратьДокументыНаСервере()
	
	ТЗДокументы.Очистить();
	
	СписокИменДокументов = СформироватьСписокСТипамиДокументов();
	
	ТекстЗапроса = "";
	
	Для каждого Вид Из СписокИменДокументов Цикл
		
		Если ТекстЗапроса<>"" Тогда
			ТекстЗапроса=ТекстЗапроса+"
			|ОБЪЕДИНИТЬ ВСЕ ";
		КонецЕсли;
			                           
		Шаблон =
		"ВЫБРАТЬ
		|  ТЧ.Ссылка КАК Ссылка,
		|  ТЧ.Номенклатура КАК Номенклатура
		|ИЗ
		|  Документ.ПриобретениеТоваровУслуг.Товары КАК ТЧ
		|ГДЕ ТЧ.Ссылка.Проведен И ТЧ.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";
		
		ТекстЗапроса = ТекстЗапроса+СтрЗаменить(Шаблон, "ПриобретениеТоваровУслуг", Вид);
		
	КонецЦикла; 	
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		НоваСтрокаТЗ = ТЗДокументы.Добавить();
		НоваСтрокаТЗ.Документ = Выборка.Ссылка;
	КонецЦикла;
	
КонецПроцедуры

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

Найти значение в строке

Добрый день, помогите пожалуйста, есть строка вида 355035|uin=18810150201111703544|TechCode=03|ruleId=18810150201111703544|quittDate=11.11.2020| Разложил по разделители | в массив. Массив. Найти не помогает так как допустим мне нужно uin= но после равно ка...

Выгрузить схему компоновки данных (скд) в файл/строку

Позволяет получить выходной xml схемы компоновки данных (скд) из переданной схемы, программно. Аналогично нажатию на кнопку "сохранить схему в файл". Полезно когда необходимо отладить схему формирующуюся программно.
&НаСервере
Функция СхемаКомпоновкиСтрокой(Схема) Экспорт
	
	СтрокаСхемы = "";
	
	ЗаписьXML = Новый ЗаписьXML;
	
	Путь = ПолучитьИмяВременногоФайла("xml");
	
	ЗаписьXML.ОткрытьФайл(Путь);
	
	СериализаторXDTO.ЗаписатьXML(
                               ЗаписьXML, 
                               Схема, 
                               "dataComposition", 
                               "http://v8.1c.ru/8.1/data-composition-system/composition-template");
	
	ЗаписьXML.Закрыть();
	
	ЧтениеТекста = Новый ЧтениеТекста(Путь);
	
	СтрокаСхемы = ЧтениеТекста.Прочитать();
	
	ЧтениеТекста.Закрыть();
	
	Возврат СтрокаСхемы;
	
КонецФункции

Выгрузка данных в формате CSV

выгрузка данных в формате CSV, для ут 10.3, УПП

мой код

Процедура ВыполнитьНажатие(Команда) 
	ИмяФайла = "Обмен";
	//ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	//
	//ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайла+".csv";
	//ДиалогОткрытияФайла.Каталог = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки";
	Режим        = РежимДиалогаВыбораФайла.Открытие;
	ДиалогВыбора = новый ДиалогВыбораФайла(Режим);
	//ДиалогВыбора.ПолноеИмяФайла = "";
	//Фильтр       = "Файл данных (*.csv)|*.csv";
	//ДиалогВыбора.Фильтр = Фильтр;
	ДиалогВыбора.Заголовок = "Выберите Каталог";    
	Если ДиалогВыбора.Выбрать() Тогда
		ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
	КонецЕсли;
	//ИмяФайла = "C:\Users\Сотрудник_1С\Desktop\Внешние обработки"+"Обмен.csv";
	ВыгрузитьВCSV(ИмяФайла);
	
КонецПроцедуры

Функция ВыгрузитьВCSV(имяФайлаCSV);
	разделитель = ";";
	ТаблицаЗначений = ПолучитьНоменклатуру();
	//Тут может быть любое получение данных, в моем случае номенклатура, цены, бренд и остатки
	текст = СоздатьДанныеCSV(ТаблицаЗначений,разделитель);
	ЗаписатьCSV(текст,имяФайлаCSV);
	
КонецФункции

Функция СоздатьДанныеCSV(ТаблицаЗначений,разделитель)
	
	текст="";
	для каждого запись из ТаблицаЗначений Цикл
		если текст="" тогда
			текст=СоздатьЗаголовкиCSV(ТаблицаЗначений,разделитель) 
			+ Символы.ПС;    
		КонецЕсли;    
		
		сообщить(запись.Наименование);
		текст = текст + запись.Код 
		+ разделитель + запись.КодПроизводителя
		+ разделитель + запись.Наименование
		+ разделитель + запись.Цена
		+ разделитель + запись.Бренд
		+ разделитель + запись.Наличие             
		+ Символы.ПС;        
	КонецЦикла;
	
	//сообщить(текст);
	Возврат текст;
	
КонецФункции //

Функция ЗаписатьCSV(текст,имяФайла)              
	кодировка = КодировкаТекста.ANSI;
	ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла,Кодировка);            
	//ТекстовыйФайлЗапись.ЗаписатьСтроку(текст);
	ТекстовыйФайлЗапись.Записать(текст);
	ТекстовыйФайлЗапись.Закрыть();    
	Возврат 0;
	
КонецФункции 

Вывести список пользователей с пустым паролем

Вывести список пользователей ИБ, у которых не заполнен пароль
&НаСервере

мПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
	
Для Каждого мПользователь Из мПользователи Цикл

	Если ПустаяСтрока(
		мПользователь.СохраняемоеЗначениеПароля)
		И мПользователь.АутентификацияСтандартная Тогда

		Сообщить(мПользователь);

	КонецЕсли;

КонецЦикла;

Создание пользователя и добавление в группу доступа (БСП)

Демонстрация процесса создания пользователя, добавления его в группу доступа и назначения основных прав в системе, в конфигурации с БСП
&НаСервере
Процедура СоздатьПользователя(ИмяПользователя, ПолноеИмя, Пароль, ГруппаДоступа)
	
	ОписаниеПользователяИБ 								= Пользователи.НовоеОписаниеПользователяИБ();
	ОписаниеПользователяИБ.Имя 							= ИмяПользователя;
	ОписаниеПользователяИБ.ПолноеИмя					= ПолноеИмя;
	ОписаниеПользователяИБ.Пароль						= Пароль;
	ОписаниеПользователяИБ.ПарольУстановлен				= Истина;
	ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора		= Истина;
	ОписаниеПользователяИБ.АутентификацияСтандартная	= Истина;
	ОписаниеПользователяИБ.АутентификацияОС				= Ложь;
			
	СоздаватьПользователяИБ = Истина;

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

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

Итоги в подвале таблицы с учетом отбора

Штатные итоги в таблицах выводятся без учета установленных отборов
&НаКлиенте
Процедура ОбновитьИтоги(Команда)

    ДанныеТаб = Отчет.ТаблицаФормы1;
	Сумма1 = 0;
	Если Элементы.ТаблицаФормы1.ВыделенныеСтроки.Количество() > 1 тогда
		Для каждого с из Элементы.ТаблицаФормы1.ВыделенныеСтроки цикл
			стр = ДанныеТаб.НайтиПоИдентификатору(с);
			Сумма1 = Сумма1 + стр.СуммаЗатрат;
		КонецЦикла;
	Иначе
		Для каждого стр из ДанныеТаб цикл
			Если Элементы.ТаблицаФормы1.ПроверитьСтроку(стр.ПолучитьИдентификатор()) тогда
				 Сумма1 = Сумма1 + стр.СуммаЗатрат;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	Элементы.ТаблицаФормы1.ПодчиненныеЭлементы.ТаблицаФормы1СуммаЗатрат.ТекстПодвала = Формат(Сумма1,"ЧДЦ=2");
КонецПроцедуры

Номер без префикса и лидирующих нулей

Функция возвращает номер без префикса и лидирующих нулей. Необычное решение от Сергея.

Автор: ildarovich

Razlagutt 10 2
Функция ЧислоСправа1(Номер)
   Возврат Формат(Число("0" + Сред(Номер, СтрДлина(СокрП(
   СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер
   , "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " "))) + 1)), "ЧГ=");
КонецФункции

Конструктор массива (Массив = Массив(Значение1, ... , Значение20))

- Конструктор массива берет на вход до 20 Параметров, и возвращает их в виде массива - Если первый Параметр это Массив, то в него добавляются остальные Параметры - Рекомендуется добавить в Глобальный модуль - Пример использования: ТЗ = Новый ТаблицаЗначений; Для Каждого ИмяКолонки Из Массив("Колонка1", "Колонка2") Цикл ТЗ.Колонки.Добавить(ИмяКолонки) КонецЦикла;
Функция Массив(
    З1=Неопределено, З2=Неопределено, З3=Неопределено, З4=Неопределено, З5=Неопределено, 
    З6=Неопределено, З7=Неопределено, З8=Неопределено, З9=Неопределено, З10=Неопределено, 
    З11=Неопределено, З12=Неопределено, З13=Неопределено, З14=Неопределено, З15=Неопределено, 
    З16=Неопределено, З17=Неопределено, З18=Неопределено, З19=Неопределено, З20=Неопределено) Экспорт
    
	Если ТипЗнч(З1) = Тип("Массив") Тогда
		М = З1	
	Иначе  
		М = Новый Массив();
		Если З1=Неопределено Тогда Возврат М; Иначе М.Добавить(З1); КонецЕсли;
	КонецЕсли;
    
   Если З2=Неопределено Тогда Возврат М; Иначе М.Добавить(З2); КонецЕсли; 
   Если З3=Неопределено Тогда Возврат М; Иначе М.Добавить(З3); КонецЕсли; 
   Если З4=Неопределено Тогда Возврат М; Иначе М.Добавить(З4); КонецЕсли; 
   Если З5=Неопределено Тогда Возврат М; Иначе М.Добавить(З5); КонецЕсли; 
   Если З6=Неопределено Тогда Возврат М; Иначе М.Добавить(З6); КонецЕсли; 
   Если З7=Неопределено Тогда Возврат М; Иначе М.Добавить(З7); КонецЕсли; 
   Если З8=Неопределено Тогда Возврат М; Иначе М.Добавить(З8); КонецЕсли; 
   Если З9=Неопределено Тогда Возврат М; Иначе М.Добавить(З9); КонецЕсли; 
   Если З10=Неопределено Тогда Возврат М; Иначе М.Добавить(З10); КонецЕсли; 
   Если З11=Неопределено Тогда Возврат М; Иначе М.Добавить(З11); КонецЕсли; 
   Если З12=Неопределено Тогда Возврат М; Иначе М.Добавить(З12); КонецЕсли; 
   Если З13=Неопределено Тогда Возврат М; Иначе М.Добавить(З13); КонецЕсли; 
   Если З14=Неопределено Тогда Возврат М; Иначе М.Добавить(З14); КонецЕсли; 
   Если З15=Неопределено Тогда Возврат М; Иначе М.Добавить(З15); КонецЕсли; 
   Если З16=Неопределено Тогда Возврат М; Иначе М.Добавить(З16); КонецЕсли; 
   Если З17=Неопределено Тогда Возврат М; Иначе М.Добавить(З17); КонецЕсли; 
   Если З18=Неопределено Тогда Возврат М; Иначе М.Добавить(З18); КонецЕсли; 
   Если З19=Неопределено Тогда Возврат М; Иначе М.Добавить(З19); КонецЕсли; 
   Если З20=Неопределено Тогда Возврат М; Иначе М.Добавить(З20); КонецЕсли;
	
	Возврат М;
КонецФункции

XML -> Структура/Соответствие (хмл в структуру/соответствие)

- Преобразует XML файл (и даже простенькую html страничку) в виде строки или пути к файлу в Структуру (и подструктуры), содержащую Ключи = Узлам XML файла - Значения узлов одного уровня с одинаковыми наименованиями помещаются в массив - Аттрибуты игнорируются
mikaelangelo 40 1
Функция ЧитатьХМЛ(XML, КакСтруктуру = Ложь) Экспорт
	
	Если СтрНачинаетсяС(НРег(СокрЛП(Лев(XML, 1024))), "<") ИЛИ НРег(Лев(XML, 5)) = "<html" ИЛИ НРег(Лев(XML, 14)) = "<!doctype html" Тогда
		ЧтениеXML.УстановитьСтроку(XML);
	ИначеЕсли НайтиФайлы(Лев(СокрЛП(XML), 260)).Количество() > 0 Тогда 
		Файл = Новый Файл(XML);
		Если Не Файл.Существует() Тогда
			ВызватьИсключение "Файл """ + XML + """ не существует!";
		КонецЕсли;
		Файл = "";
		ЧтениеXML.ОткрытьФайл(XML);
	КонецЕсли;
	
	Если КакСтруктуру Тогда
    	Корень = ЧитатьКакСтруктуру(ЧтениеXML);
	Иначе
    	Корень = ЧитатьКакСоответствие(ЧтениеXML);
	КонецЕсли;
	
	ЧтениеXML = "";
	
	Возврат Корень;
КонецФункции

Функция ЧитатьКакСтруктуру(XML, ТипПоследнегоЭлемента = Неопределено)
	Ветка = Новый Структура;
	Значение = "";
	
	Пока XML.Прочитать() Цикл
		ТипУзла = XML.ТипУзла;
		Если ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			ТипПоследнегоЭлемента = ТипУзлаXML.НачалоЭлемента;
			Временно = "";
			Если Ветка.Свойство(XML.Имя, Временно) Тогда
				Если ТипЗнч(Временно) <> Тип("Массив") Тогда
					ЭнЗэ = Новый Массив;
					ЭнЗэ.Добавить(Временно);
					Временно = ЭнЗэ;
					ЭнЗэ = "";
					Ветка.Удалить(XML.Имя);
					Ветка.Вставить(XML.Имя, Временно);
				КонецЕсли;
				Временно.Добавить(ЧитатьКакСтруктуру(XML, ТипПоследнегоЭлемента));
			Иначе
				Ветка.Вставить(XML.Имя, ЧитатьКакСтруктуру(XML, ТипПоследнегоЭлемента));
			КонецЕсли;
		ИначеЕсли ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
			ТипПоследнегоЭлемента = ТипУзлаXML.КонецЭлемента;
			Возврат ?(ЗначениеЗаполнено(Ветка), Ветка, Значение);
		ИначеЕсли ТипУзла = ТипУзлаXML.Текст И Не ТипПоследнегоЭлемента = ТипУзлаXML.Текст Тогда
			ТипПоследнегоЭлемента = ТипУзлаXML.Текст;
			Значение = XML.Значение;
			XML.Прочитать(); //Вычитка закрывающего тега
			Возврат Значение;
		Иначе
			// игнорируем текст вне узлов
			// можем также добавлять текст вне узлов в текст, находящийся в предыдущем узле через какой нибудь спецсимвол
			// например через Таб, код ниже:
			//Временно[Временно.ВГраница()] = Временно[Временно.ВГраница()] + Символы.Таб + XML.Значение
		КонецЕсли;
	КонецЦикла;
	
	Возврат Ветка;
КонецФункции

Функция ЧитатьКакСоответствие(XML, ТипПоследнегоЭлемента = Неопределено)	
	Ветка = Новый Соответствие;
	Значение = "";
	
	Пока XML.Прочитать() Цикл
		ТипУзла = XML.ТипУзла;
		Если ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			ТипПоследнегоЭлемента = ТипУзлаXML.НачалоЭлемента; 
			Имя = XML.Имя;
			Временно = Ветка.Получить(Имя);
			Если Временно = Неопределено Тогда
				Ветка.Вставить(Имя, ЧитатьКакСоответствие(XML, ТипПоследнегоЭлемента));
			Иначе
				Если ТипЗнч(Временно) <> Тип("Массив") Тогда
					ЭнЗэ = Новый Массив;
					ЭнЗэ.Добавить(Временно);
					Временно = ЭнЗэ;
					ЭнЗэ = "";
					Ветка.Удалить(Имя);
					Ветка.Вставить(Имя, Временно);
				КонецЕсли;
				Временно.Добавить(ЧитатьКакСоответствие(XML, ТипПоследнегоЭлемента));
			КонецЕсли;
		ИначеЕсли ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
			ТипПоследнегоЭлемента = ТипУзлаXML.КонецЭлемента;
			Возврат ?(ЗначениеЗаполнено(Ветка), Ветка, Значение);
		ИначеЕсли ТипУзла = ТипУзлаXML.Текст И Не ТипПоследнегоЭлемента = ТипУзлаXML.Текст Тогда
			ТипПоследнегоЭлемента = ТипУзлаXML.Текст;
			Значение = Значение + XML.Значение;
			XML.Прочитать(); //Вычитка закрывающего тега
			Возврат Значение;
		Иначе
			// игнорируем текст вне узлов
			// можем также добавлять текст вне узлов в текст, находящийся в предыдущем узле через какой нибудь спецсимвол
			// например через Таб, код ниже:
			//Временно[Временно.ВГраница()] = Временно[Временно.ВГраница()] + Символы.Таб + XML.Значение   						
		КонецЕсли
	КонецЦикла;
	
	Возврат Ветка;
КонецФункции

CSV в массив из структур

Перевести строку с заголовками (CSV) в массив из структур
Функция ПреобразоватьCSVвМассив(CSV)
	
	Разделитель        = Символы.Таб;
	ЗаголовкиCSV       = СокрЛП(СтрПолучитьСтроку(CSV,1));
	МассивЗаголовков   = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗаголовкиCSV, Разделитель, Ложь, );
	
	DATA = Новый Массив;
	Для НомерСтроки=2 По СтрЧислоСтрок(CSV) Цикл  
		Строка         = СтрПолучитьСтроку(CSV, НомерСтроки);
		МассивПодстрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка, Разделитель, Ложь, );
		Структура      = Новый Структура(СтрЗаменить(ЗаголовкиCSV,  Разделитель, ","));
		Инд            = 0;
		Для Каждого КлючЗначение Из Структура Цикл
			Структура[КлючЗначение.Ключ] = МассивПодстрок[Инд];
			Инд = Инд+1;
		КонецЦикла;
		DATA.Добавить(Структура);
	КонецЦикла;
		
	Возврат DATA;
		
КонецФункции

Открытие значения элемента ОФ ячейки таблицы при клике на нем

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

Пример формирования внешней печатной формы из макета Word. БСП

Демонстрация процесса формирования внешней печатной формы документа из макета Word средствами БСП

Функция СведенияОВнешнейОбработке() Экспорт
	
	// Стандартное описание сведений о внешней печатной форме

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

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	// Просто передаем управление дальше если удовлетворяет условию

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НазваниеКоманды") Тогда
		ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати) Экспорт
	
	 // Сначала получим данные а потом передадим их для заполнения макета
		
	МассивДанныхЗаполнения = ПолучитьДанныеДляПечатиДокумента(МассивОбъектов);	
		
	ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати);
		
КонецПроцедуры 

Функция ПолучитьДанныеДляПечатиДокумента(МассивОбъектов)

	// здесь происходит заполнение данными для ПФ

	Данные = Новый Структура;
	
	...
	
	Возврат Данные;
	
КонецФункции 

Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати)

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

	// Наличие пустого табличного документа в коллекции обязательно

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

	// Определим какие области в документе Word хотим заполнить 
	// Для этого у нас документ должен быть размечен конструкциями 
	// {v8 Область.НазваниеОбласти} 
	// {/v8 Область.НазваниеОбласти}
	// наличие областей обязательно

		ОбластьЗаявление = Новый Структура;
		ОбластьЗаявление.Вставить("ИмяОбласти", "Заявление");
		ОбластьЗаявление.Вставить("ТипОбласти", "Общая");
		
	// Передаем данные заполнения для заполнения печатной формы 
	// Имена параметров данных заполнения должны совпадать с размеченными параметрами в документе в виде  
	// {v8 НазваниеПараметра}

		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаявление);
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения, Ложь);

	// Поместим получившийся документ в коллекцию печатных форм, в раздел ОфисныеДокументы
	// так БСП поймет что нужно открывать Word при формировании печатной формы

		АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);
		УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
		УправлениеПечатью.ОчиститьСсылки(Макет);
		
		ОфисныеДокументы = Новый Соответствие;
		
		ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, НСтр("ru = 'Название документа'"));
		
		ПечатнаяФорма.СинонимМакета    = НСтр("ru = 'Название документа (документ Microsoft Word)'");
		ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
		
	КонецЕсли;

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

Немодально ввести значение определенного типа от пользователя

buketoff 32 6
/// Как немодально ввести значение определенного
/// типа от пользователя в 1с 8.3, 8.2 
 
&НаКлиенте
Процедура КакИнтерактивноВвестиЗначениеОпределенногоТипа(Команда)
 
    Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", 
      ЭтотОбъект);	
 
    ПоказатьВводЗначения(
        Оповещение,
        , // пропускаем начальное значение
        "Введите значение",
        "Число"
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВводаЗначения(Результат, Параметры) Экспорт	
 
    Если Не Результат = Неопределено Тогда
        Сообщить(Результат);		
    КонецЕсли;
 
КонецПроцедуры
 

HTML представление виджета

html представление виджета взято из ДО и переделано
buketoff 32 6
// Возвращает html представление виджета.
//
// Параметры:
//   Заголовок - Строка - html текст заголовка виджета.
//   Подвал - Строка - html текст подвала виджета.
//   ТелоВиджета - Строка - html текст тела виджета.
//   ФонаВиджета - Строка - цвет фона виджета в виде шестнадцатеричного значения.
//   ЦветРамкиТаблицы - Строка - цвет рамок таблиц в виджете, в виде шестнадцатеричного значения.
//
// Возвращаемое значение:
//   Строка - html представление виджета.
//
Функция HTMLПредставлениеВиджета(
		Заголовок = "", Подвал = "", ТелоВиджета, ФонаВиджета, ЦветРамкиТаблицы)
	
	HTMLТекст = "<html><head><meta name=""viewport"" content=""viewport-fit=cover, width=device-width"" />"
		+ СтильHTML(ЦветРамкиТаблицы)
		+ "<body bgcolor=" + ФонаВиджета + ">";
		
	HTMLТекст = HTMLТекст + СтрЗаменить("
	|<table class=""one"">
	|<tr><td>
	|<table class=""title"">
	|<tr>
	|<td class=""menu"">
	|</td>
	|<td class=""title"">
	|<p>	
	|" + Заголовок + "
	|</td>
	|</tr>
	|</table>	
	|</td></tr>	
	|<tr class=""height100""><td>
	|" + ТелоВиджета + "
	|</td></tr>	
	|<tr><td>	
	|<table>
	|<tr>	
	|<td width=""5"">
	|</td>	
	|<td height=""18"">
	|" + Подвал + "
	|</td>	
	|</tr>
	|</table>	
	|</td></tr>	
	|</table>	
	|</body></html>", "|","");
		
		
	
	УдалитьВредоносныйКодИзТекста(HTMLТекст); 
	
	Возврат HTMLТекст;
	
КонецФункции

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

Условное оформление на обычных формах (ОФ)

Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОформлениеСтроки.Ячейки.Отгружен.ЦветФона = ?(ДанныеСтроки.Отгружен, WebЦвета.СветлоРозовый, WebЦвета.БледноБирюзовый);
КонецПроцедуры

Форматирование после вставки (скрипт для TurboConf)

Скрипт для TurboConf, который после вставки из буфера форматирует вставляемый фрагмент кода (например, выравниваются отступы относительно окружающего кода). //@script_name FormatAfterPaste //@script_display_name Форматировать фрагмент после вставки //@scri...
Sneer 1

СтрШаблон (8.1, 8.2, 8.3 в режиме совместимости 8.2)

Аналог функции СтрШаблон версии 8.3 для младших версий платформы. Подставляет параметры в строку по номеру. Возвращает готовую строку с подставленными параметрами.
Функция _СтрШаблон_(Шаблон, Парам1 = "", Парам2 = "", Парам3 = "", Парам4 = "", Парам5 = "",
					Парам6 = "", Парам7 = "", Парам8 = "", Парам9 = "") экспорт					
					
	Для Сч=1 По 9 Цикл
		
		Выполнить("Шаблон = СтрЗаменить(Шаблон, ""%""+Сч, Парам"+Сч+")");
		
	КонецЦикла; 						
	
	Возврат Шаблон;
		
КонецФункции