Библиотека универсальных функций и процедур (v 1.3)

Публикация № 319157

Разработка - Универсальные функции

Библиотека Универсальные функции

85
Привожу тексты различных универсальных функций и процедур, которыми постоянно пользуюсь.
Некоторые функции достаточно специфичны, но многими пользуюсь практически каждый день.

Все функции писал сам (может быть, пару функций где-то позаимствовал, но сейчас уже не вспомню, где и когда). Не буду претендовать на оригинальность, возможно, ряду функций существует достаточно аналогов, в т.ч. на данном сайте.

Надеюсь, кому-нибудь они будут полезны.

#Область РаботаСПримитивнымиТипами

#Область РаботаСоСтроками

Функция ЦифровыеСимволы() Экспорт
	Возврат "0123456789";
КонецФункции // ()

Функция ПустойУИД() Экспорт
	
	Возврат "00000000-0000-0000-0000-000000000000";	
	
КонецФункции // ()

Функция ИнвертироватьСтроку(Знач Строка) Экспорт

	НоваяСтрока = "";
	
	Если Строка <> "" Тогда
		ДлинаСтроки = СтрДлина(Строка);
		
		Для Индекс = 0 По ДлинаСтроки-1 Цикл
		
			НоваяСтрока = НоваяСтрока+Сред(Строка,ДлинаСтроки-Индекс,1)	
		
		КонецЦикла; 
	
	КонецЕсли;
	
	Возврат НоваяСтрока;

КонецФункции // ()

Функция СтрОбрезатьСправа(Знач Строка,ЧислоСимволов) Экспорт
	
	Возврат Лев(Строка,СтрДлина(Строка)-ЧислоСимволов);	

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

Функция СтрОбрезатьСлева(Знач Строка,ЧислоСимволов) Экспорт

	Возврат Прав(Строка,СтрДлина(Строка)-ЧислоСимволов);	

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

Функция СтрЗаменитьСправа(Знач Строка,ЧислоСимволов,СтрокаЗамены) Экспорт

	Возврат СтрОбрезатьСправа(Строка,ЧислоСимволов)+СтрокаЗамены;			

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

Функция СтрЗаменитьСлева(Знач Строка,ЧислоСимволов,СтрокаЗамены) Экспорт

	Возврат СтрокаЗамены+СтрОбрезатьСлева(Строка,ЧислоСимволов);			

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

Функция СобратьПредставлениеЗначений(МассивЗначений,Разделитель = " ",ФорматнаяСтрока = "") Экспорт

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

КонецФункции // ()

Процедура ДобавитьСтрокуТекста(Текст,Строка) Экспорт
	
	Если не ПустаяСтрока(Строка) Тогда
		Текст = Текст+?(ПустаяСтрока(Текст),"","
		|")+Строка;
	КонецЕсли;
	
КонецПроцедуры 

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

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

Процедура СтрГрупповаяЗамена(Строка,СоответствиеЗамен) Экспорт
	Для каждого ЭлементСоответствия Из СоответствиеЗамен Цикл
		Строка = СтрЗаменить(Строка,ЭлементСоответствия.Ключ,ЭлементСоответствия.Значение);
	КонецЦикла;
КонецПроцедуры

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

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

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

#КонецОбласти

Функция _Число(Значение) Экспорт
	Если Значение = Неопределено Тогда
		Возврат 0;
	Иначе
		Возврат Значение;
	КонецЕсли; 
КонецФункции
 
Функция ПроверкаДеления(Делимое,Делитель) Экспорт
	Возврат ?(Делитель = 0,0,Делимое/Делитель);
КонецФункции 

Функция ЗначенияЗаполнены(МассивЗначений) Экспорт
	
	Результат = Истина;
	
	Для каждого ЭлементМассива Из МассивЗначений Цикл
		Результат = Мин(Результат,ЗначениеЗаполнено(ЭлементМассива));
	КонецЦикла;
	
	Возврат Результат;

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

Функция ДатыРавны(Дата1,Дата2) Экспорт
	Возврат НачалоДня(Дата1) = НачалоДня(Дата2);
КонецФункции // ()
 
#КонецОбласти 

#Область РаботаСМассивом

Функция СоздатьМассив(Элемент1 = Неопределено,
	Элемент2 = Неопределено,
	Элемент3 = Неопределено,
	Элемент4 = Неопределено,
	Элемент5 = Неопределено,
	Элемент6 = Неопределено,
	Элемент7 = Неопределено,
	Элемент8 = Неопределено) Экспорт

	МассивЭлементов = Новый Массив;
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент1);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент2);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент3);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент4);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент5);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент6);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент7);
	ДобавитьЭлементВМассив(МассивЭлементов,Элемент8);
	Возврат МассивЭлементов;

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

Процедура ДобавитьЭлементВМассив(Массив,Элемент) Экспорт

	Если Элемент <> Неопределено Тогда
		Массив.Добавить(Элемент);
	КонецЕсли; 		

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

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

#КонецОбласти 
 
#Область РаботаССоответствием

Процедура ВставитьЗначениеВложенногоСоответствия(Соответствие,МассивКлючей,Значение) Экспорт
	
	ТекущееСоответствие = Соответствие;
	ЧислоКлючей = МассивКлючей.Количество();
	
	Если ЧислоКлючей > 1 Тогда
	
		Для Индекс = 0 По ЧислоКлючей-2 Цикл
			Элемент = МассивКлючей[Индекс];
			ДанныеСоответствия = ТекущееСоответствие[Элемент];
			
			Если ДанныеСоответствия = Неопределено Тогда
				ТекущееСоответствие.Вставить(Элемент,Новый Соответствие);
			КонецЕсли; 
			
			ТекущееСоответствие = ТекущееСоответствие[Элемент];
		КонецЦикла; 
	
	КонецЕсли; 
	
	ТекущееСоответствие.Вставить(МассивКлючей[ЧислоКлючей-1],Значение);

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

Функция ПолучитьЗначениеВложенногоСоответствия(Соответствие,МассивКлючей) Экспорт
	
	ТекущееСоответствие = Соответствие;
	
	Для каждого Элемент Из МассивКлючей Цикл
		
		ДанныеСоответствия = ТекущееСоответствие[Элемент];
		
		Если ДанныеСоответствия = Неопределено Тогда
			Возврат Неопределено;
			Прервать;
		КонецЕсли; 
		
		ТекущееСоответствие = ДанныеСоответствия;
	
	КонецЦикла;
	
	Возврат ДанныеСоответствия;

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

Процедура АгрегироватьЗначениеВложенногоСоответствия(Соответствие,МассивКлючей,Значение) Экспорт
	
	ТекущееЗначение = ПолучитьЗначениеВложенногоСоответствия(Соответствие,МассивКлючей);
	
	Если ТипЗнч(ТекущееЗначение) = Тип("Число") Тогда
		ВставитьЗначениеВложенногоСоответствия(Соответствие,МассивКлючей,ТекущееЗначение+Значение);
	Иначе	
		ВставитьЗначениеВложенногоСоответствия(Соответствие,МассивКлючей,Значение);
	КонецЕсли; 
	
КонецПроцедуры

Функция СоздатьСоответствиеТаблицы(МенеджерТаблицы,ИмяРеквизита) Экспорт
	
	СоответствиеТаблицы = Новый Соответствие;
	Выборка = МенеджерТаблицы.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		СоответствиеТаблицы.Вставить(Выборка.Ссылка,Выборка[ИмяРеквизита]);	
	КонецЦикла; 
	
    Возврат СоответствиеТаблицы;
	
КонецФункции

#КонецОбласти 

#Область РаботаСоСтруктурой

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

Функция СравнитьЗначенияКлючей(СтрокаКлючей,Источник1,Источник2) Экспорт

	МассивКлючей = СтрРазделить(СтрокаКлючей,",");
	Равны = Истина;
	
	Для каждого ЭлементМассива Из МассивКлючей Цикл
		Если Источник1[ЭлементМассива] <> Источник2[ЭлементМассива] Тогда
			Равны = Ложь;	
			Прервать;
		КонецЕсли; 
	КонецЦикла; 
	
	Возврат Равны;

КонецФункции // ()

#КонецОбласти 

#Если не (ТонкийКлиент или ВебКлиент) Тогда
	
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Работа со списком значений
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

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

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Работа с деревом значений
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Функция ВыгрузитьДеревоЗначенийВТаблицуЗначений(Дерево, Таблица = Неопределено) Экспорт

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

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

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Запросы
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Функция ПолучитьРеквизитыПоСсылкам(Знач МассивСсылок,Знач СтрокаРеквизитов,Знач СтрокаРеквизитов1 = Неопределено) Экспорт

	ОдинРеквизит = Неопределено;
	РеквизитИсточник = Неопределено;
	ОднаСсылка = Неопределено;
	ВторойУровень = Ложь;
	МассивРеквизитов = СтрРазделить(СтрокаРеквизитов,",");
	
	Если МассивРеквизитов.Количество() = 1 и СтрокаРеквизитов1 <> Неопределено Тогда
		РеквизитИсточник = МассивРеквизитов[0];
		МассивРеквизитов = СтрРазделить(СтрокаРеквизитов1,",");
		ВторойУровень = Истина;
	КонецЕсли;
	
	Если ТипЗнч(МассивСсылок) <> Тип("Массив") Тогда
		ОднаСсылка = МассивСсылок;
		МассивСсылок = СоздатьМассив(МассивСсылок);
	КонецЕсли;
	
	Запрос = Новый Запрос;
	ТекстЗапроса = "";
	Номер = 0;
	
	Для каждого Ссылка Из МассивСсылок Цикл
		Номер = Номер+1;
		ИмяТаблицы = Ссылка.Метаданные().ПолноеИмя();
		ТекстЗапроса = ТекстЗапроса+"
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	Таблица.Ссылка,";
		
		Для каждого Реквизит Из МассивРеквизитов Цикл
			ТекстЗапроса = ТекстЗапроса+"
			|	Таблица."+?(ВторойУровень,РеквизитИсточник+"."+Реквизит,Реквизит)+" КАК "+Реквизит+",";
		КонецЦикла; 
		
		ТекстЗапроса = СтрОбрезатьСправа(ТекстЗапроса,1);
		ТекстЗапроса = ТекстЗапроса+"
		|ИЗ "+ИмяТаблицы+" КАК Таблица
		|ГДЕ
		|	Таблица.Ссылка = &Ссылка"+Номер+";";
		Запрос.УстановитьПараметр("Ссылка"+Номер,Ссылка);
	КонецЦикла; 
	
	Запрос.Текст = ТекстЗапроса;	
	РезультатПакета = Запрос.ВыполнитьПакет();
	СоответствиеРезультатов = Новый Соответствие;
	
	Если МассивРеквизитов.Количество() = 1 Тогда
		ОдинРеквизит = МассивРеквизитов[0];
	КонецЕсли; 
	
	Для Индекс = 0 По Номер-1 Цикл
		Выборка = РезультатПакета[Индекс].Выбрать();
		
		Если Выборка.Следующий() Тогда
			СоответствиеРезультатов.Вставить(Выборка.Ссылка,
			?(ОдинРеквизит = Неопределено,ПолучитьСтруктуруПоКлючам(
			?(СтрокаРеквизитов1 = Неопределено,СтрокаРеквизитов,СтрокаРеквизитов1),Выборка),Выборка[ОдинРеквизит]));
		КонецЕсли; 
	
	КонецЦикла; 
	
	Если ОднаСсылка <> Неопределено Тогда
		Возврат СоответствиеРезультатов[ОднаСсылка];
	Иначе 
		Возврат СоответствиеРезультатов;	
	КонецЕсли; 
	
КонецФункции

Функция ПолучитьЗаписиТаблицы(ПутьТаблицы,СтруктураОтбора,СтрокаРеквизитов = "Ссылка",КоличествоЗаписей = 0) Экспорт

	Запрос = Новый Запрос;
	ИмяТаблицы = СтрЗаменить(ПутьТаблицы,".","");
	МассивРеквизитов = СтрРазделить(СтрокаРеквизитов,",");
	БезРеквизитов = МассивРеквизитов.Количество() = 1;
	
	ТекстЗапроса = 
	"ВЫБРАТЬ"+?(КоличествоЗаписей = 0,""," ПЕРВЫЕ "+Формат(КоличествоЗаписей,"ЧГ=0"));
	
	Для каждого ЭлементМассива Из МассивРеквизитов Цикл
		ТекстЗапроса = ТекстЗапроса+"
		|	"+ИмяТаблицы+"."+ЭлементМассива+",";
	КонецЦикла; 
	
	ТекстЗапроса = СтрОбрезатьСправа(ТекстЗапроса,1);
	ТекстЗапроса = ТекстЗапроса+"
	|ИЗ "+ПутьТаблицы+" КАК "+ИмяТаблицы+"
	|ГДЕ
	|	ИСТИНА";
	
	Для каждого ЭлементСтруктуры Из СтруктураОтбора Цикл
		Запрос.УстановитьПараметр(ЭлементСтруктуры.Ключ,ЭлементСтруктуры.Значение);
		ТекстЗапроса = ТекстЗапроса+"
		|	И "+ИмяТаблицы+"."+ЭлементСтруктуры.Ключ+" В (&"+ЭлементСтруктуры.Ключ+")";
	КонецЦикла;
	
	Запрос.Текст = ТекстЗапроса;
	Результат = Запрос.Выполнить();
	
	Если КоличествоЗаписей = 1 Тогда
		Выборка = Результат.Выбрать();
		
		Если Выборка.Следующий() Тогда
			Если БезРеквизитов Тогда
				Возврат Выборка[МассивРеквизитов[0]]; //значение
			Иначе
				Возврат Выборка; //элемент выборки
			КонецЕсли;	
		КонецЕсли; 
		
	ИначеЕсли БезРеквизитов Тогда
		Возврат Результат.Выгрузить().ВыгрузитьКолонку(МассивРеквизитов[0]); //массив
	Иначе	
		Возврат Результат.Выбрать(); //выборка
	КонецЕсли; 

КонецФункции // ()

#Область РаботаСОтчетами

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

Процедура УстановитьПараметрОтчета(Настройки,ИмяПараметра,Значение) Экспорт
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(ИмяПараметра,Значение);
КонецПроцедуры

Процедура ПолучитьПараметрОтчета(Настройки,ИмяПараметра) Экспорт
	Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра));
КонецПроцедуры

#КонецОбласти 

#КонецЕсли 

#Область РаботаСПроизвольнымиКоллекциями

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

Процедура УстановитьЗначениеПоКлючу(Источник,Ключ,Значение) Экспорт
	
	Если Источник <> Неопределено Тогда
		Приемник = Новый Структура(Ключ);
		ЗаполнитьЗначенияСвойств(Приемник,Источник);
		
		Если Приемник[Ключ] <> Неопределено Тогда
			Источник[Ключ] = Значение;
		КонецЕсли;
		
	КонецЕсли;
 
КонецПроцедуры 

Функция ПроверитьЗаполнениеРеквизитов(Источник,СтрокаРеквизитов,
	ПолнаяПроверка = Истина,
	ФормироватьСообщение = Истина,
	ВыводитьСообщение = Истина,
	ВызовИсключения = Ложь) Экспорт

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

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

Процедура ЗаполнитьЗначенияРеквизитов(Источник,СтрокаРеквизитов,Заполненные = Истина,Значение = Неопределено) Экспорт
	
	МассивКлючей = СтрРазделить(СтрокаРеквизитов,",");
	
	Для каждого Ключ Из МассивКлючей Цикл
		Если не Заполненные или ЗначениеЗаполнено(Источник[Ключ]) Тогда
			Источник[Ключ] = Значение;
		КонецЕсли; 
	КонецЦикла;
	
КонецПроцедуры

#Если не (ТонкийКлиент или ВебКлиент) Тогда
 
Функция СоздатьКопиюОбъекта(Источник) Экспорт
	Возврат ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Источник));
КонецФункции 

Функция ИмяЭлементаПеречисления(ЭлементПеречисления) Экспорт

	ИмяПеречисления = ЭлементПеречисления.Метаданные().Имя;
	Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Перечисления[ИмяПеречисления].Индекс(ЭлементПеречисления)].Имя;	

КонецФункции 
 
#КонецЕсли 
	
#КонецОбласти 

#Если не (ТонкийКлиент или ВебКлиент) Тогда

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Работа с транзакциями
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Процедура ЗафиксироватьАктивнуюТранзакцию() Экспорт
	Если ТранзакцияАктивна() Тогда
		ЗафиксироватьТранзакцию();
	КонецЕсли; 
КонецПроцедуры

Процедура ОтменитьАктивнуюТранзакцию() Экспорт
	Если ТранзакцияАктивна() Тогда
		ОтменитьТранзакцию();
	КонецЕсли; 
КонецПроцедуры

Процедура ЗавершитьАктивнуюТранзакцию(Отказ) Экспорт

	Если Отказ Тогда
		ОтменитьАктивнуюТранзакцию();
	Иначе	
		ЗафиксироватьАктивнуюТранзакцию();	
	КонецЕсли; 	

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

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Шифрование
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Функция ПолучитьЗашифрованныеДанные(ИдентификаторДанных,ДанныеШифрования,КлючШифрования) Экспорт
	
	Попытка
		
		Путь = КаталогВременныхФайлов()+"\"+ИдентификаторДанных;
		ПутьФайла = Путь+".txt";
		ПутьАрхива = Путь+".zip";
		ЗаписьТекста = Новый ЗаписьТекста(ПутьФайла);
		ЗаписьТекста.Записать(ДанныеШифрования);
		ЗаписьТекста.Закрыть();
		ЗаписьАрхива = Новый ЗаписьZipФайла(ПутьАрхива,КлючШифрования,,,,МетодШифрованияZIP.AES256);
		ЗаписьАрхива.Добавить(ПутьФайла);
		ЗаписьАрхива.Записать();
		ДвоичныеДанные = Новый ДвоичныеДанные(ПутьАрхива);
		Возврат Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных(9));
		
	Исключение
		Возврат Неопределено;
	КонецПопытки; 

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

Функция ПолучитьРасшифрованныеДанные(ИдентификаторДанных,ХранилищеДанных,КлючШифрования) Экспорт
	
	Попытка
		КаталогСохранения = КаталогВременныхФайлов();
		Путь = КаталогСохранения+"\"+ИдентификаторДанных;
		ПутьАрхива = Путь+".zip";
		ХранилищеДанных.Получить().Записать(ПутьАрхива);
		ЧтениеАрхива = Новый ЧтениеZipФайла(ПутьАрхива,КлючШифрования);
		ЭлементАрхива = ЧтениеАрхива.Элементы[0];
		ЧтениеАрхива.Извлечь(ЭлементАрхива,КаталогСохранения);
		ЧтениеАрхива.Закрыть();
		ЧтениеТекста = Новый ЧтениеТекста(КаталогСохранения+"\"+ЭлементАрхива.Имя);
		Данные = ЧтениеТекста.Прочитать();
		ЧтениеТекста.Закрыть();
		Возврат Данные;
		
	Исключение
		Возврат Неопределено;
	КонецПопытки; 

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

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Прочее
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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

Функция ИнициализироватьCOMОбъект(Имя) Экспорт
	
	Попытка
		COMОбъект = Новый COMОбъект(Имя);
		Возврат COMОбъект; 
	Исключение
		Сообщить("Произошла ошибка инициализации "+Имя);
	КонецПопытки; 	

КонецФункции // ()

#КонецЕсли 
                        
85

Скачать файлы

Наименование Файл Версия Размер
Конфигурация с интегрированной библиотекой функций
.cf 11,50Kb
01.06.15
46
.cf 1.3 11,50Kb 46 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. lex27119 17.12.14 10:42 Сейчас в теме
Есть несколько весьма интересных функций
awk; bashirov.rs; +2 Ответить
2. Famza 82 17.12.14 12:53 Сейчас в теме
Автор lex271, а в (1) lex27119 он же?
Аналоги функций есть в типовых конфах, или наоборот
3. Infector 142 17.12.14 13:32 Сейчас в теме
Подозреваю, что с использованием заимствований из типовых конф в нетиповые встает вопрос авторских прав.

А вот мне интересно - кто-нибудь еще нечто подобное делал?

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

Функция ДобавитьВДерево(Дерево, НачальныйУровеньДерева, ТекСтрокаТаблицы, ИменаКлючевыхПолейСписком)
	
	ТекРодитель = Дерево;
	
	Для Уровень = 1 По ИменаКлючевыхПолейСписком.Количество()+1 Цикл
		
		Если Уровень < НачальныйУровеньДерева Тогда
			СтрокТекУровня = ТекРодитель.Строки.Количество();
			ТекРодитель = ТекРодитель.Строки[СтрокТекУровня-1];
		Иначе	
			СтрокаТекУровня = ТекРодитель.Строки.Добавить();
			Если Уровень <= ИменаКлючевыхПолейСписком.Количество() Тогда 
				Для СчПоля = 0 По Уровень - 1 Цикл
					ИмяТекПоля = ИменаКлючевыхПолейСписком[СчПоля].Значение;
	                 СтрокаТекУровня[ИмяТекПоля] = ТекСтрокаТаблицы[ИмяТекПоля];			
				КонецЦикла;
			Иначе
				ЗаполнитьЗначенияСвойств(СтрокаТекУровня, ТекСтрокаТаблицы);
			КонецЕсли;
			ТекРодитель = СтрокаТекУровня;
		КонецЕсли;	
			
	КонецЦикла	
		
КонецФункции

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

Показать
5. TMV 14 17.12.14 18:00 Сейчас в теме
(3) Infector,
с использованием заимствований из типовых конф в нетиповые встает вопрос авторских прав

Довольно странное утверждение, ведь количество ключевых слов ограничено, а значит можно запросто своим умом составить такую же функцию и пр.. Да, и разве можно тогда пользоваться шаблонами?
9. leasing 3 24.12.14 13:42 Сейчас в теме
(3) Infector, как защитить авторское право 1С на функцию ЗдравствуйМир() , если она оказалась в составе типовой, но её еще в школе ВСЕ проходили?
Если любая из приведенных тут автором функций завтра окажется в составе типовой? Или уже есть там, но автор-то не был в курсе (не обязан он всякую муру на рынок выбрасываемую читать) и получил тот же результат?
Я это все к тому, что если взять тридцать программистов и дать им одно и тоже задание, то обязательно получим энное количество совпадающих решений. Объектом авторского является произведение и его части. Чем крупнее произведение, тем больше вероятность, что там есть неоригинальные части, которые встречаются у других авторов. В музыке плагиатом не считается если совпало менее 4 нот подряд.
Будем считать, хе-хе, если из конфигурации взято не более трех объектов, то это не считается нарушением авторских прав?
KazanKokos; izidakg; jobkostya1c8; alex271; +4 Ответить
12. Yashazz 2859 25.12.14 11:14 Сейчас в теме
Всё, здесь изложенное, я сделал и начал использовать в 2009 году, задолго до появления похожих функционалов в типовых конфах. В том числе и (3) - быстрые переходы между разными коллекциями - давным-давно себе сделал. Вообще, удивлён подобными публикациями - это как выложить 2*2=4 и вдруг получить отчётливый интерес. Или современные одинэсники уже даже такие простейшие вещи полагают супер-наработкой?
13. alex271 323 25.12.14 11:24 Сейчас в теме
(12) Yashazz,
Я думаю, тут дело не в том, что это супер-наработка, а в том, что многие программисты не хотят заниматься разработкой универсальных механизмов.
Я на оригинальность не претендую, это написано в шапке публикации, но раз выложенные библиотеки вызвали оживленный интерес, значит в них есть потребность.
Возможно, фирме 1С стоит подумать и добавить в технологическую платформу ряд универсальных функций, чтобы они сразу были под рукой у начинающих программистов.
14. BlackCors 4 25.12.14 12:38 Сейчас в теме
(13) alex271, да, это интересный вопрос. Может стоило поместить в платформу например ТЗ в ДЗ или что подобное? Почему на этапе планирования такие возможности не промелькнули ни в одной версии платформы, хотя бы в бета версиях?
15. BlackCors 4 25.12.14 12:46 Сейчас в теме
(12) Yashazz, + к тому что сказал alex271 у любого программиста в любом проекте ограниченно время, а объем задания не ограничен)) Заниматься постоянным изобретением велосипеда, нет никакого желания. И не только 1с-ков ;) К тому же большинство задач (основная масса) которые ставят программистам 1с однотипны, уникальных задач куда более низкий процент, мое оценочное суждение ;) Поэтому наработка подобной базы решений очень полезная вещь.
16. leasing 3 25.12.14 13:10 Сейчас в теме
(12) (12) Yashazz, как могло случиться такое невероятное событие, что вы написали и стали использовать в 2009 году все, что автор тут выложил в 2014?
json; spetzpozh; +2 Ответить
17. Gureev 25.12.14 15:14 Сейчас в теме
(3) Infector, если целый модуль свистнуть - то да.

использование отдельных процедур, особенно если они представляют из себя общий алгоритм, а не работу с конкретными объектами конкретной конфигурации
- то нет. никаких авторских прав.
4. ruslan0277 4 17.12.14 14:24 Сейчас в теме
Добавлю в копилку:
Функция ТипЛюбаяСсылка() Экспорт
	Имена = 
	"Справочники
	|Документы
	|Перечисления
	|ПланыВидовХарактеристик
	|ПланыСчетов
	|ПланыВидовРасчета
	|ПланыОбмена
	|БизнесПроцессы
	|Задачи";
	ЧислоИмен = СтрЧислоСтрок(Имена);
	ВсеСсылки = Новый ОписаниеТипов(Новый Массив());
	Для Номер = 1 по ЧислоИмен Цикл
		ВсеСсылки = Новый ОписаниеТипов(ВсеСсылки, Вычислить(СтрПолучитьСтроку(Имена, Номер)).ТипВсеСсылки().Типы());
	КонецЦикла;
	ВсеСсылки = Новый ОписаниеТипов(ВсеСсылки, БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы());
	Возврат ВсеСсылки;
КонецФункции

Функция ТипыОбъектов(КакМассив=Ложь)
	Имена = 
	"Справочники
	|Документы
	|ПланыВидовХарактеристик
	|ПланыСчетов
	|ПланыВидовРасчета
	|ПланыОбмена
	|БизнесПроцессы
	|Задачи";
	ЧислоИмен = СтрЧислоСтрок(Имена);
	
	м = Новый Массив;
	
	Для Номер = 1 по ЧислоИмен Цикл
		мд = Метаданные[СтрПолучитьСтроку(Имена, Номер)];
		
		Для Каждого мдОбъекта Из мд Цикл
			ПолноеИмя = мдОбъекта.ПолноеИмя();
			
			поз = Найти(ПолноеИмя,".");
			Если поз<>0 Тогда
				ИмяОбъекта = Лев(ПолноеИмя,поз-1)+"Объект"+Сред(ПолноеИмя,поз);
				
				м.Добавить(Тип(ИмяОбъекта));
				
				Для Каждого мдТЧ Из мдОбъекта.ТабличныеЧасти Цикл
					ИмяОбъекта = Лев(ПолноеИмя,поз-1)+"ТабличнаяЧасть"+Сред(ПолноеИмя,поз)+"."+мдТЧ.Имя;
					м.Добавить(Тип(ИмяОбъекта));
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	ВсеОбъекты = Новый ОписаниеТипов(м);
	
	Если КакМассив Тогда
		Возврат м;
	Иначе
		Возврат ВсеОбъекты;
	КонецЕсли;
КонецФункции

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

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

//не рекомендуется для ссылок, ибо полезет в базу
//и вообще не очень красиво
Функция СвойствоСуществует(Объект,ИмяСвойства) Экспорт
	Результат = Ложь;
	
	Выполнить("
	|Попытка
	|	а = Объект."+ИмяСвойства+";
	|	Результат = Истина;
	|Исключение
	|	Результат = Ложь;
	|КонецПопытки
	|");
	
	Возврат Результат;
КонецФункции

Функция СравнитьСпискиЗначений(сп1,сп2,СравниватьПометки=Ложь,СравниватьПредставления=Ложь) Экспорт
	Если сп1.Количество()<>сп2.Количество() Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Для Каждого эл1 Из сп1 Цикл
		Индекс = сп1.Индекс(эл1);
		
		эл2 = сп2[Индекс];
		
		Если эл1.Значение<>эл2.Значение Тогда
			Возврат Ложь;
		КонецЕсли;
		
		Если СравниватьПометки Тогда
			Если эл1.Пометка<>эл2.Пометка Тогда
				Возврат Ложь;
			КонецЕсли;
		КонецЕсли;
		
		Если СравниватьПредставления Тогда
			Если эл1.Представление<>эл2.Представление Тогда
				Возврат Ложь;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Истина;
КонецФункции
Показать
6. Infector 142 18.12.14 08:28 Сейчас в теме
Не утверждаю, но смею предположить.
Конечно, простые функции могут быть воспроизведены разными авторами в одинаковом содержании. С более сложными - нереально. Хотя бы стиль написания будет отличаться (я разделю 1 функцию на три мелких, кто-то не станет и т.д.)
7. kaging 7 24.12.14 10:41 Сейчас в теме
Можно думаю сюда прикрутить еще вот это
Функция КратноеЧисло(ЧислоПроверки, КратноЧислу)
	
	РезультатДеления = ЧислоПроверки / КратноЧислу;
	Если Цел(РезультатДеления) =  Окр(РезультатДеления, 2) Тогда 
		Возврат Истина;
	Иначе 
		Возврат Ложь;
	КонецЕсли;
	
КонецФункции
Показать


Или я ее просто не заметил у автора :(
8. Nebiros777 5 24.12.14 11:50 Сейчас в теме
Чтобы каждый раз не писать свои функции весьма полезно. Скорость разработки повышается, главное быстро найти нужный модуль. А так в закладки по-любому!
10. dolter 117 24.12.14 14:09 Сейчас в теме
Все не просмотрел - слишком много букв. Но покритиканствовать охота )

Функция СтрОбрезатьСлева(Знач Строка,ЧислоСимволов) Экспорт

    Возврат Прав(Строка,СтрДлина(Строка)-ЧислоСимволов);    

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


Заменить на

Функция СтрОбрезатьСлева(Знач Строка,ЧислоСимволов) Экспорт

    Возврат Сред(Строка,ЧислоСимволов + 1);    

КонецФункции
alexscamp; +1 Ответить
11. dolter 117 24.12.14 16:44 Сейчас в теме
В любом случае ПЛЮС!

Но )... ПодставитьПараметрыВСтроку - заменить на:

Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Параметры) Экспорт
	
    Для Каждого Элм Из Параметры Цикл
    	СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%" + Элм.Ключ, ?(ТипЗнч(Элм.Значение) = Тип("Строка"), Элм.Значение, СокрЛП(Элм.Значение)));
	КонецЦикла;
	
	Возврат СтрокаПодстановки;
    
КонецФункции
Показать


Пример вызова:

ПодставитьПараметрыВСтроку(СтрокаПодстановки, Новый Структура("1,2,3,5", "123", Формат(ТекущаяДата(), "ДЛФ=D"), "321", 555));


Плюсы: работает быстрее и не имеет ограничений по количеству параметров
18. chmv 25.12.14 16:44 Сейчас в теме
Я бы включила гораздо больше стандартных функций в 1с (особенно при работе со строкой)
Их очень мало, так что приходится дописывать в глобальных модулях
SemenovaMarinaV; Fox-trot; +2 Ответить
19. chmv 25.12.14 16:47 Сейчас в теме
Мне понравилась ИнвертироватьСтроку
20. Yashazz 2859 25.12.14 19:31 Сейчас в теме
Насчёт отсутствия преобразований, зашитых в платформу - целиком согласен.
21. dyak84 29.12.14 10:48 Сейчас в теме
Автору спасибо очень интересно работает со строкой. Есть чему поучится. Так держать
22. nipil 16.01.15 10:39 Сейчас в теме
Забрал в копилку.
Понравилась сама идея формирования публичной библиотеки необходимых функций.
Желательно выработать и принять классификатор. (Группы, подгруппы и т.д.)
23. SemenovaMarinaV 26.01.15 10:50 Сейчас в теме
Для меня интересны функции работы со строкой. Полезно. Но лучше бы 1с расширило круг функций работы со строкой.
24. Andris_infostart 18.03.15 16:30 Сейчас в теме
25. alex271 323 01.06.15 08:02 Сейчас в теме
Обновил публикацию.
Учел новые функции версии 8.3.6
26. KazanKokos 8 05.06.18 10:27 Сейчас в теме
А
 Возврат 
в функциях уже необязателен?
////////////////////////////////////////////////////////////­///////////////////////////////////////////////////////////
// Прочее
////////////////////////////////////////////////////////////­///////////////////////////////////////////////////////////

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

Функция ИнициализироватьCOMОбъект(Имя) Экспорт
    
    Попытка
        COMОбъект = Новый COMОбъект(Имя);
        Возврат COMОбъект; 
    Исключение
        Сообщить("Произошла ошибка инициализации "+Имя);
    КонецПопытки;     

КонецФункции // ()
Показать
27. dolter 117 05.06.18 23:56 Сейчас в теме
Да, собственно, возврат в функции действительно не обязателен - вернется значение Неопределено и все.
Оставьте свое сообщение

См. также

Универсальная подсистема ДМ 5

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Россия Windows Абонемент ($m) Универсальные функции

ДМ — дополнительные модули Это не альтернатива или дополнение БСП. Данная подсистема призвана быстро получить множество нужных функций в любой конфигурации. Для использования подсистемы изменения в конфигурацию вносить не надо. К сожалению поддержка обычных форм прекращена и поэтому данная разработка предназначена только для УФ. Разработка ведётся с 2009 года, но именно этот релиз был подготовлен на платформе 8.3.15.1565

1 стартмани

вчера в 10:43    190    1    strange2007    7       

Генерация QR кода для любых конфигураций 1С (обычные и управляемые формы) 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Универсальные обработки Универсальные функции

Для генерации используется компонента типовой конфигурации УТ11, встроенная в общий макет "КомпонентаПечатиQRКода". Ниже приведены процедуры, чтобы сделать обработку самостоятельно (только для УФ).

1 стартмани

11.10.2019    693    5    dm1try    0       

Универсальное удаление движений регистров накопления по всем непроведенным документам 10

Инструменты и обработки Программист Пользователь Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные функции Чистка базы

Попалась база КА 2.4 с движениями по регистрам, у которых регистратор был непроведен или помечен на удаление. Написал небольшую обработку по удалению таких записей из регистров.

1 стартмани

27.09.2019    1249    2    John_d    14       

1С REST API клиент. Обмен из 1С с сайтом/магазином WordPress/WooCommerce с помощью REST API 11

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf УУ Оптовая торговля Розничная торговля Абонемент ($m) Универсальные обработки WEB Универсальные функции

Обмен 1С с сайтом на WordPress и магазином Woocommerce. Внешняя обработка сделана как REST API клиент сайта WordPress, позволяет разработчику публиковать/изменять/удалять/просматривать посты/страницы/товары/фотографии (в связке с товаром/страницей) на сайте/магазине WordPress/Woocommerce. Обработки сделаны с использованием обычных форм, демо-формы использования в комплекте.

10 стартмани

29.07.2019    2034    4    osivv    14       

Экспортные процедуры и функции общих модулей БП 3.0, ЗУП 3.1, УТ 11 32

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Windows Абонемент ($m) Универсальные функции

Таблицы экспортных процедур и функций общих модулей конфигураций БП КОРП 3.0, ЗУП КОРП 3.1, УТ 11 + обработка по формированию такой таблицы из любой конфигурации.

14.06.2019    3513    329    SanchoD    29       

Работа с графической схемой в объектной модели DOM 41

Статья Программист Конфигурация (md, cf) v8 v8::УФ Абонемент ($m) Универсальные функции

Пример кода для работы с графической схемой в объектной модели DOM, платформа 8.3.12.

1 стартмани

04.06.2019    3610    4    botokash    19       

Программное формирование картинки в 1С:Предприятие 8.3.9 (ПотокВПамяти / ЗаписьДанных) 50

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные функции

В статье представлен код программного формирования картинки (двоичные данные) без всяких внешних компонент, без формирования строки Base64, используя лишь встроенные механизмы 1С предприятие 8.3.9 (объекты ПотокВПамяти и ЗаписьДанных). Сам по себе код формирования картинки не несёт ничего нового. Всё описано в википедии. Захотелось попробовать новые методы, но никак не доходитили руки. В приложении обработка практически с этим же кодом.

1 стартмани

16.05.2019    4334    5    yku    7       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 514

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    25461    245    bonv    108       

Альтернатива внешним печатным формам. ЗУП 3.1 23

Статья Программист Расширение (cfe) v8 v8::СПР ЗУП3.x Зарплата Абонемент ($m) Печатные формы документов Универсальные функции Практика программирования Разработка

Как в ЗУП 3.1.8 отказаться от внешних печатных форм и расширением увеличить количество полей, доступных при редактировании макетов, для изменения печатных форм Т1, Т5, Т8 и аналогичные пользователями.

1 стартмани

30.01.2019    5968    10    Mogilnikova    2       

Создание и запуск скрипта для ввода текста на базе AutoHotkey 7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Универсальные функции

Механизм для ввода текста в поля данных, в случаях, когда нет возможности использовать буфер обмена. Полезен в тех случаях, когда необходимо ввести пароль в заблокированный сеанс RDP или когда надо передать какую-либо текстовую информацию в удаленный сеанс, а буфер обмена не доступен или отключен администратором.

1 стартмани

28.01.2019    2305    1    Wezoowy    1       

Использование подсистемы БСП "Заполнение объектов" 134

Статья Программист Расширение (cfe) v8 v8::УФ 1cv8.cf Россия Абонемент ($m) Практика программирования Универсальные функции БСП (Библиотека стандартных подсистем)

Применение механизмов БСП для добавления новых команд заполнения к формам различных объектов. Использование расширений конфигурации для доработки. Шаблоны для реализации собственных команд заполнения.

1 стартмани

23.11.2018    13085    8    ids79    22       

Отправка электронной почты с помощью локального почтового клиента из 1С, развернутой под удаленным рабочим столом 13

Инструменты и обработки Программист Пользователь Архив с данными v8 КА1 БП2.0 УТ10 УПП1 Windows Абонемент ($m) Печатные формы документов Универсальные функции Email

Решение для интерактивной (нажал-отредактировал) отправки электронных писем и печатных форм через почтовый клиент (Thunderbird, Outlook) находящийся на локальном компьютере, из конфигурации 1С, развернутой под удаленным рабочим столом (RDP, remote-app). Подходит также для локального развертывания 1С. Представлен пример быстрой интеграции с конфигурациями "Управление торговлей 10.3", "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1", "Бухгалтерия предприятия 2.0".

1 стартмани

21.09.2018    11236    10    stvorl    0       

Пропорциональное распределение в запросе 35

Статья Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Периодически в работе сталкиваюсь с задачей пропорционального распределения сумм в запросе. Ситуация усложняется, когда распределяемые суммы изначально не известны и определяются в процессе выполнения запроса. Эта статья один из примеров решения такой задачи.

1 стартмани

28.06.2018    8046    1    invertex    7       

Проверка таблицы на дублирование строк (ТаблицаЗначений, ТабличнаяЧасть) и получение массива таких строк 9

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Функция для проверки дублирования строк в ТаблицеЗначений или ТабличнойЧасти. Также, если необходимо, возвращает массив задублированных строк (можно обработать).

1 стартмани

05.02.2018    7816    6    uri1978    27       

Свертка таблицы значений. С блэкджеком и всем остальным 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Функция свертки таблицы значений. Умеет в отличие от стандартного метода все, что можно делать на языке запросов.

1 стартмани

22.01.2018    7559    2    dusha0020    10       

Определение MIME-типа файла 6

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные функции

Небольшая, но полезная функция для определения MIME-типа файла по его расширению. Сэкономит время разработчикам.

1 стартмани

12.01.2018    7277    2    o.nikolaev    4       

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула 8

Отчеты и формы Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Печатные формы документов Практика программирования Универсальные функции

Расширяем функционал вывода нижнего / верхнего колонтитула. Стандартно 1С имеет достаточно ограничений по выводу и наполнению колонтитулов содержимым, взять хотя бы такие, как вывод только текста и отсутствие ограничения на номер конечной страницы. А при разработке кода сталкиваешься с тем, что свой блок с нижним колонтитулом нужно прижимать к низу страницы. Казалось бы быстро решаемый вопрос, но и в нем есть нюансы. Сейчас я расскажу о том, как решалась эта задача. UPD 15.02.2018. Добавлен вывод верхнего колонтитула; Вывод колонтитулов на первой и последней странице управляется параметрами; Научился считать страницы: Добавлено заполнение переменных аналогичных стандартным из колонтитулов; Задаются форматы даты и времени. Ограничения прежние: 1. Повторно сформировать табличный документ после смены параметров страницы интерактивно.; 2. Передавать данные для более плотной печати как можно более мелко нарезанными кусками.

1 стартмани

29.12.2017    21562    21    agent00mouse    0       

Запуск приложений на клиенте из RDP-сессии 8

Инструменты и обработки Системный администратор Архив с данными v8 1cv8.cf Windows Абонемент ($m) Универсальные функции

Часто на терминальном сервере, где работает 1С, закрыт или ограничен запуск сторонних приложений, интернет и т.д. Такая ситуация часто встречается в облаках. В данной статье описан простой вариант выхода из ситуации, когда все необходимое стороннее ПО запускается на клиенте. Обработки содержат код, приведенный в статье, и могут быть доработаны под конкретную инфраструктуру.

1 стартмани

30.10.2017    8430    5    GusevNA    4       

Простые подсистемы: Библиотека подсистем 11

Инструменты и обработки Системный администратор Программист Конфигурация (md, cf) v8 Абонемент ($m) Инструментарий разработчика Универсальные обработки Универсальные функции

Библиотека простых подсистем и наработок, облегчающих жизнь разработчика и внедренца, предоставляя относительно готовые решения. Логическое развитие линейки публикаций "Простые подсистемы". Базируются на БСП. Вошли часть ранее опубликованных подсистем и новые. Всего 5 штук (будет больше).

1 стартмани

26.10.2017    7902    7    pbabincev    1       

Размеры управляемой формы 101

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Работа с интерфейсом Универсальные функции

Как рассчитать ширину и высоту управляемой формы или отдельного элемента, чтобы адаптировать интерфейс программно при их изменении.

1 стартмани

08.10.2017    17759    51    json    8       

Шаблон внешней обработки регламентного задания с формой настройки параметров выполнения 86

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Инструментарий разработчика Универсальные функции

Шаблон внешней обработки призван упростить программисту процесс реализации внешнего регламентного задания. Пригоден к использованию во всех конфигурациях на управляемых формах, в которых присутствует подсистема "Дополнительные отчеты и обработки" из состава библиотеки стандартных подсистем (БСП) версии 2.1 и выше.

1 стартмани

28.05.2017    17507    144    Bassgood    10       

Многопоточность. Универсальный «Менеджер потоков» (фреймворк) с отслеживанием зависимости объектов 176

Статья Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Практика программирования Математика и алгоритмы Универсальные функции Производительность и оптимизация (HighLoad)

Восстановление партий, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

26.05.2017    38518    168    DarkAn    86       

Универсальная процедура по загрузке файла из интернета 10

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования WEB Универсальные функции

Передаем в процедуру всего два параметра: откуда взять и куда положить. Остальное она сделает сама

1 стартмани

17.05.2017    11737    9    json    2       

Правильный вопрос 16

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные функции

Заметили, что пользователи бездумно кликают по первой попавшейся кнопке, не удосужившись прочитать текст предупреждения или вопроса? Данная функция призвана решить данную проблему!

1 стартмани

15.05.2017    9156    SvoyakMartin    15       

Web сервис 1С 24

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) Практика программирования WEB Универсальные функции

Пример реализации простого web сервиса. Особенность: не используются XDTO пакеты, определяемые в дереве конфигураций; возможность передачи любых структур данных: списки значений, таблицы значений, табличные документы и т.п.

1 стартмани

21.03.2017    22261    74    hiduk    33       

Набор математических функций 20

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные функции

Небольшой набор математических функций для работы с массивами чисел.

1 стартмани

12.01.2017    11018    2    SvoyakMartin    17       

Сравнение строк. Наибольшая общая последовательность 6

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Универсальные функции

Заданы две строки Строка1 и Строка2. Требуется найти наибольшую общую подпоследовательность (НОП) этих строк.

1 стартмани

14.11.2016    7385    2    Alex_YAM    4       

Набор процедур для парсера консоли запросов 7

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Универсальные функции

Данный набор функций и процедур необходимо вставить в Консоль запросов для управляемого приложения 1С 8.2 - 8.3 (Такси) http://infostart.ru/public/64522/, и вы получите возможность разбирать сложные запросы на вложенные, вносить необходимые правки и собирать измененные подзапросы в запрос. Данный модуль не содержит консоли!!! Ее придется отдельно скачать по ссылке http://infostart.ru/public/64522/

1 стартмани

09.11.2016    7838    3    blockcode    5       

Организация выбора месяца из списка (универсально + НЕ модально ) 7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Работа с интерфейсом Универсальные функции

Пришлось столкнуться с такой проблемой, как выбор месяца из ниспадающего списка (с элементами вида "НазваниеМесяца Год") с возможностью изменения года. Хочу предложить универсальный вариант реализации данного механизма на основе механизма http://infostart.ru/public/167549/ ЗЫ: основные отличия: - вместо "НачалоВыбораИзСписка" работаем с "ОбработкаВыбора" без модальности - Обратное преобразование в дату не только на русском - Универсальность процедур. Одна функция выбирается в нескольких полях.

1 стартмани

09.11.2016    10708    11    igorkosmos    4       

Отладка/доработка модуля менеджера "на лету" 89

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Практика программирования Универсальные функции

Данный прием позволяет отлаживать и дорабатывать модуль менеджера во внешней обработке без необходимости пересохранять конфигурацию и перезапускать базу

1 стартмани

23.10.2016    22812    19    json    22       

Автоматическое разбиение строки на подстроки по ширине колонки / ячейки или по количеству символов 12

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки Универсальные функции

Длинный адрес контрагента или нестандартная фамилия не входит в одну строку, а РазмещениеТекста = Переносить по какой-либо причине не устраивает? Что можно сделать? Вот пара полезных функций для решения данного вопроса с примерами применения.

1 стартмани

21.10.2016    11806    2    SvoyakMartin    3       

Сверка таблиц при разработке через тестирование 14

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 Абонемент ($m) Инструментарий разработчика Практика программирования Универсальные функции

Данная статья про инструмент, который я использую уже продолжительное время, и который, по моему мнению, заслуживает внимания. Также опишу несколько примеров его применения.

1 стартмани

09.10.2016    12159    11    json    1       

(Удобняшка) выполнение произвольного кода в большом количестве баз 4

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 Абонемент ($m) Универсальные функции

Небольшой помощник при наличии в содержании большого количества баз. Процедура общего модуля, которая позволяет выполнять произвольный код в базе в удобном виде.

1 стартмани

29.09.2016    9245    1    nomadon    4       

Функция преобразования промежутка времени в строку 7

Статья Программист Нет файла v8 1cv8.cf Россия Абонемент ($m) Универсальные функции

Функция предназначена для преобразования промежутка времени в строку с разбивкой по годам, дням, часам, минутам, секундам.

1 стартмани

23.09.2016    8357    5    vovant    1       

Вывод Таблицы Значений или Дерева Значений на экран управляемой формы без объявления колонок в реквизитах формы 49

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Примеры взаимных преобразований Таблицы значения в Дерево значений или Табличный документ с использованием универсальных функций и макетов Системы компоновки данных. Примеры представлены в форме удобной для копирования в разработку.

1 стартмани

13.09.2016    28350    47    pavley2002    11       

Алгоритм по переносу вложенных запросов в пакеты 15

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Универсальные функции

Запросы неудобно отлаживать, если в них есть вложенные запросы. Данный алгоритм помогает отредактировать текст запроса таким образом, чтобы все вложенные запросы перенеслись в пакеты.

1 стартмани

26.08.2016    7980    19    ostapchenko.alexandr    20       

7 правил RFC 4180 22

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Универсальные функции

Что такое CSV? Описание правил формата RFC4180 и пара функций чтения/записи CSV текста в ТЗ согласно этим рекомендациям (с экранированием и _поддержкой многострочных полей_).

1 стартмани

22.08.2016    12770    15    kuzyara    2       

Запросы &НаКлиенте для Управляемого приложения 6

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Разбитый между клиентом и сервером код размывает и усложняет логику прикладного решения. Для запроса из базы данных одной записи предлагаю &НаКлиенте использовать универсальную процедуру "ЗаполнитьИзЗапроса".

1 стартмани

08.05.2016    7208    2    sereginseregin    14       

Консоль и функция рекурсивного запроса 9

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Тестирование и исправление Универсальные функции

Консоль предназначена для отладки и просмотра результатов выполнения РЕКУРСИВНОГО ЗАПРОСА в режиме 1С:Предприятие. В консоли реализована универсальная функция для выполнения рекурсивных запросов.

1 стартмани

10.02.2016    10664    5    sereginseregin    1       

Генерация QR-кода (управляемая форма, обычное и управляемое приложение) 59

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Windows Абонемент ($m) Универсальные функции Универсальные обработки

Обработку можно быстро и легко интегрировать в любую конфигурацию с и без БСП (Библиотека Стандартных Подсистем).

3 стартмани

04.02.2016    35774    153    tunesoft    24       

Динамический отбор динамического списка. Управляемая форма 1С: 8.3 11

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Универсальные функции

Так как в версии 1С:Предприятие 8.3.6 в управляемой форме появилась возможность получать текущие данные динамического списка с учетом всех отборов и видимости полей, было решено добавить простой удобный отбор по полям динамического списка, так как нас не устраивали стандартные отборы. В тестовой информационной базе наглядно показано как работает этот вариант отбора. При добавлении,удалении, изменении колонок динамического списка, поля отбора будут динамически строиться и работать на основании текущего состояния динамического списка - без доработки. В данной публикации только показываю идею использования новой возможности версии 1С 8.3.6, поэтому данный вариант отбора можно улучшать бесконечно.

1 стартмани

25.01.2016    16944    23    1prog@bk.ru    3       

Расчет интегралов 8

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) Практика программирования Универсальные функции

Обработка для расчета определенного интеграла методом прямоугольников

1 стартмани

27.11.2015    8339    sojuznik    12       

Автоматическая подстановка уничтожений временных таблиц в текст запроса 7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные функции

Функция, которая сама подставляет в текст запроса "УНИЧТОЖИТЬ" в местах последнего использования ВТ.

1 стартмани

14.11.2015    15129    SeiOkami    3       

Механизм контроля заполнения реквизитов 32

Инструменты и обработки Системный администратор Программист Архив с данными v8 1cv8.cf Абонемент ($m) Практика программирования Универсальные функции

Механизм позволяет в пользовательском режиме настраивать контролируемые реквизиты, тем самым помогает справиться с невнимательностью пользователей. Не требует снятия с поддержки типовых объектов, внося минимум изменений в конфигурацию. Не привязан ни к конкретным конфигурациям, ни к БСП.

1 стартмани

25.10.2015    10326    28    yur4ik9408    10       

Регистрация запуска обработок во внешнем источнике данных 16

Инструменты и обработки Системный администратор Архив с данными v8 1cv8.cf Windows Абонемент ($m) Сервисные утилиты Универсальные функции

На нашем предприятии эксплуатируется три информационные базы, в которые по просьбам трудящихся постоянно создаются и добавляются новые внешние отчеты и обработки. Некоторые из них устаревают сразу же после их первого использования, другие чуть позже, какие-то используются постоянно. Давно хотел получить инструмент, позволяющий отслеживать статистику использования внешних отчетов и обработок.

1 стартмани

23.10.2015    8473    4    vsuh    2       

Прикрепление внешних файлов к документам и справочникам 1С 8.3 (управляемые формы) 30

Инструменты и обработки Системный администратор Программист Конфигурация (md, cf) v8 1cv8.cf Россия Windows Абонемент ($m) Универсальные функции Практика программирования

В данной статье мы рассмотрим, как просто и быстро в любую конфигурацию на базе управляемых форм добавить функционал прикрепления внешних файлов к документам и справочникам. Я начну описание с нуля, т.е. с создания пустой конфигурации. Так что даже любой малоопытный разработчик (вроде меня =) ) сможет реализовать данный функционал в своей или уже написанной конфигурации. Если Вам не хочется разбираться с ниже написанной инструкцией, можете скачать файл*.doc с описанием и скриншотами, либо уже саму готовую конфигурацию.

1 стартмани

15.10.2015    63254    119    omenfarsh    27       

Нелинейная многомерная оптимизация - это просто. Часть 3. Имитация отжига 39

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Математика и алгоритмы Универсальные функции

Метод имитации отжига для поиска оптимального решения. И, как обычно, универсальная функция поиска этого самого решения.

1 стартмани

13.10.2015    14895    22    dusha0020    5