Skip to content

Latest commit

 

History

History
174 lines (120 loc) · 8.39 KB

Универсальные.md

File metadata and controls

174 lines (120 loc) · 8.39 KB

Универсальные процедуры и функции 01

1. Получаем таблицу значений на основании колонок запроса

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

Функция ТаблицаЗначенийИзКолонокЗапроса(РезультатЗапроса)

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

	Возврат ТаблицаЗначений;

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

2. Оставить только нужные символы в строке

Функция ОставитьТолькоНужныеСимволы(
	ИсходнаяСтрока = "",
	Кириллица = Ложь,
	Латиница = Ложь,
	Числа = Ложь,
	Знач НужныеСимволы = "",
	ПервыйСимволТолькоБуква = Ложь)

	Результат = "";
	
	СимволыКириллицы = "";
	Для НомерСимвола = 1040 По 1103 Цикл 
		СимволыКириллицы = СимволыКириллицы + Символ(НомерСимвола);
	КонецЦикла;
	
	СимволыЛатиницы = "";
	Для НомерСимвола = 65 По 90 Цикл 
		СимволыЛатиницы = СимволыЛатиницы + Символ(НомерСимвола);
	КонецЦикла;
	
	Для НомерСимвола = 97 По 122 Цикл 
		СимволыЛатиницы = СимволыЛатиницы + Символ(НомерСимвола);
	КонецЦикла;
	
	НужныеСимволы = НужныеСимволы + ?(Кириллица, 	СимволыКириллицы, "");
	НужныеСимволы = НужныеСимволы + ?(Латиница, 	СимволыЛатиницы, "");
	НужныеСимволы = НужныеСимволы + ?(Числа, 		"0123456789", "");
	
	Для НомерСимвола = 1 По СтрДлина(ИсходнаяСтрока) Цикл
		
		ТекущийСимвол = Сред(ИсходнаяСтрока, НомерСимвола, 1);
		
		Если Найти(НужныеСимволы, ТекущийСимвол) = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		Если ПервыйСимволТолькоБуква
			И Результат = ""
			И Найти(СимволыКириллицы + СимволыЛатиницы, ТекущийСимвол) = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		Результат = Результат + ТекущийСимвол;

	КонецЦикла;
	
	Возврат Результат;

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

3. Приведение и проверка типа

ОписаниеТипа = Новый ОписаниеТипов("Число");
КоличествоДнейРазрешения = ОписаниеТипа.ПривестиЗначение(Значение);

4. Получить таблицу дат через запрос

Функция ПолучитьТаблицуДат(НачалоПериода, КонецПериода, Тип = "")
	
	#Область ТекстЗапросаТаблицыДат
	
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, РазностьДат.НомерДняИзДиапазона) КАК ДатаТабеля
	|ПОМЕСТИТЬ ВТ_ДатыТабеля
	|ИЗ
	|	(ВЫБРАТЬ
	|		aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d КАК НомерДняИзДиапазона
	|	ИЗ
	|		(ВЫБРАТЬ 0 КАК a
	|		ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3
	|		ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6
	|		ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa
	|			ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb
	|			ПО (ИСТИНА)
	|			ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc
	|			ПО (ИСТИНА)
	|			ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6
	|			ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd
	|			ПО (ИСТИНА)
	|	ГДЕ
	|		aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК РазностьДат
	|
	|СГРУППИРОВАТЬ ПО
	|	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, РазностьДат.НомерДняИзДиапазона)
	|";
	
	#КонецОбласти
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
	Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
	
	Если ЗначениеЗаполнено(Тип) Тогда
		
		СтрокаПоиска = "ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, РазностьДат.НомерДняИзДиапазона)";
		СтрокаЗамены = "ДОБАВИТЬКДАТЕ(&НачалоПериода, " + Тип + ", РазностьДат.НомерДняИзДиапазона)";
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, СтрокаПоиска, СтрокаЗамены);
		
		СтрокаПоиска = "aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)";
		СтрокаЗамены = "aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, " + Тип + ")";
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, СтрокаПоиска, СтрокаЗамены);
		
	КонецЕсли;
	
	Результат = Запрос.Выполнить();
	Возврат Результат.Выгрузить();
	
КонецФункции

5. Таблица значений из колонок запроса

Функция ТаблицаЗначенийИзКолонокЗапроса(РезультатЗапроса)

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

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