Все публикации

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

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

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

    ДанныеТаб = Отчет.ТаблицаФормы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)), "ЧГ=");
КонецФункции

FastCode - сервис для программистов 1С Промо

Огромная база полезных шаблонов кода, статьи, курсы, интересные разработки, поиск по БСП, ответы на вопросы, помощь сообщества разработчиков. Клиент для поиска прямо в Конфигураторе!
bolsun
Бесплатно

Конструктор массива (Массив = Массив(Значение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 41 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 35 7
/// Как немодально ввести значение определенного
/// типа от пользователя в 1с 8.3, 8.2 
 
&НаКлиенте
Процедура КакИнтерактивноВвестиЗначениеОпределенногоТипа(Команда)
 
    Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", 
      ЭтотОбъект);	
 
    ПоказатьВводЗначения(
        Оповещение,
        , // пропускаем начальное значение
        "Введите значение",
        "Число"
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВводаЗначения(Результат, Параметры) Экспорт	
 
    Если Не Результат = Неопределено Тогда
        Сообщить(Результат);		
    КонецЕсли;
 
КонецПроцедуры
 

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

html представление виджета взято из ДО и переделано
buketoff 35 7
// Возвращает 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 Цикл
		
		Выполнить("Шаблон = СтрЗаменить(Шаблон, ""%""+Сч, Парам"+Сч+")");
		
	КонецЦикла; 						
	
	Возврат Шаблон;
		
КонецФункции

Переменные среды (windows)

Ищет переменные среды (системные, локальные, временные)
// Функция - Переменные среды
//
// Параметры:
//  Тип	 - Строка - "System" - переменные среды операционной системы.
//					"User" - переменные среды пользователя.
//					"Volatile" - временные переменные.
//					"Process" - переменные среды текущего командного окна.
// 
// Возвращаемое значение:
//   - Соответствие, содержащая переменные среды
//
Функция ПеременныеСреды(Тип = "System") Экспорт
	
	Перем Оболочка;
	
	сПеременныеСреды = Новый Соответствие;
	
	Если ЭтоКлиентWindows() Тогда
		
		Попытка
			Оболочка = Новый COMОбъект("WScript.Shell");
			КоллекцияПеременных = Оболочка.Environment(Тип);
		Исключение
			Сообщить("Не удалось подключить компоненту 'WScript.Shell' по причине: "+ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
			Возврат сПеременныеСреды;
		КонецПопытки;
		
		Для каждого ЭлКоллекции Из КоллекцияПеременных Цикл
			
			Если НЕ ЗначениеЗаполнено(ЭлКоллекции) Тогда
				Продолжить;
			КонецЕсли; 
			
			МассивЧастей = РазложитьСтрокуВМассив(ЭлКоллекции, "=");
			
			Если МассивЧастей.Количество() = 2 Тогда
				сПеременныеСреды.Вставить(МассивЧастей.Получить(0), МассивЧастей.Получить(1));
			КонецЕсли; 
			
		КонецЦикла; 
		
		Оболочка = Неопределено;

	КонецЕсли; 
		
	Возврат сПеременныеСреды;
	
КонецФункции

Чтение значения атрибута узла XML или объекта XDTO

Позволяет произвести чтение значения атрибута узла/объекта xdto по имени, с помощью Фабрики XDTO. В конце пример использования. При чтении XML фабрикой XDTO во всех названиях узлов и свойств имеющих знак тире "-", платформа автоматически меняет тире на нижнее подчеркивание. Этот нюанс учтен в функции.
Функция ЗначениеСвойстваXDTO(ОбъектXDTO, Имя)

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

	
	Возврат Значение;

КонецФункции

// ИСПОЛЬЗОВАНИЕ
//
// На входе имеем XML. И нам нужно получить значение атрибута "message"

СтрокаXML = "
| <response>
| <payment message='Техническая ошибка'>
|  <from>
|    <amount>0.00</amount>
|  </from>
| </payment>
| </response>";

// Полный процесс получения будет выглядеть так

ЧтениеXML = Новый ЧтениеXML(); 
ЧтениеXML.УстановитьСтроку(СтрокаXML); 

Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

ЧтениеXML.Закрыть();

Платеж = ЗначениеСвойстваXDTO(Данные, "payment");

Если Платеж <> Неопределено Тогда
	
	Ошибка = ЗначениеСвойстваXDTO(Платеж, "message");  // Ошибка = "Техническая ошибка"

	Сообщить(Ошибка);

КонецЕсли;

Сообщение с открытием только что созданного документа

navarrow 5
	Сообщение = Новый СообщениеПользователю();
	Сообщение.Текст = "Создан документ начисления паритетных взносов: " + Док;
	Сообщение.КлючДанных = Док.Ссылка;
	Сообщение.ПутьКДанным = "Объект";
	Сообщение.Сообщить();

Соединяем план и факт

Коллеги добрый вечер. Составляю отчет на СКД "Анализ расхода продуктов питания". Отчёт должен сравнивать фактические расходы продуктов с плановыми показателями. Ниже набросок Запроса (набора данных) ВЫБРАТЬ РасходПродуктовПоКДОбороты.Учреждение, РасходПр...
SDV 38 8

Обращение к имени субконто по COM

Субконто.PredefinedDataName

Менеджер ссылки по менеджеру объектов

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

&НаСервере
Процедура МенеджерОбъектаСтрокойПриИзмененииНаСервере()
    МенеджерСсылка = МенеджерСсылкиПоМенеджеруМД(Объект.МенеджерОбъектовСтрокой);
    Элементы.Ссылка.ОграничениеТипа = Новый ОписаниеТипов(МенеджерСсылка);
КонецПроцедуры

Сопоставления объектов проводок в базе-приемнике БП3 по COM-соединению

Функция СчетБазы(База,КодСчета,Предопределенный = Истина)
    Если Предопределенный Тогда
        Результат = База.ПланыСчетов.Хозрасчетный[КодСчета];
    Иначе
        Результат = База.ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчета);
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

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

Процедура УстановитьСубконтоБазы(База,Счет, Субконто, ИмяСубконто, ЗначениеСубконто)
    База.БухгалтерскийУчет.УстановитьСубконто(Счет, Субконто, ИмяСубконто, ЗначениеСубконто);
КонецПроцедуры

Проверка поля на существование

buketoff 35 7
Если Документ.Метаданные().Реквизиты.Найти("ИмяРеквизита") = Неопределено Тогда
     Сообщить("Поле ИмяРеквизита отсутствует");
КонецЕсли;