Публикации

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

Найдено публикаций: 10

prog1c 45 1 5

МассивБезДублей

Убирает дубли из массива значений
prog1c 45 1 5
Функция МассивБезДублей(ИсходныйМассив) Экспорт

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

КонецФункции // МассивБезДублей()

МассивВТаблицуЗначений

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

КонецФункции // МассивВТаблицуЗначений()

Удалить дубли строк в таблице значений

Удаляет дубли строк таблицы по указанным колонкам, если не указано, то ищет дубли во всем.
prog1c 45 1 5
Функция УдалитьДублиСтрокТаблицыЗначений(Таблица, Колонки = "") Экспорт

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

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

КонецФункции // УдалитьДублиСтрокТаблицыЗначений()

Объединить таблицы значений

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

ОставитьСтрокиТаблицыЗначений

Оставляет строки ТаблицыЗначений, соответсвующие структуре отбора (удаляет не соответсвующие)
prog1c 45 1 5
Функция ОставитьСтрокиТаблицыЗначений(Знач Таблица, СтруктураОтбора) Экспорт
	
	МассивСтрок = Новый Массив;
	РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
	Для каждого СтрокаОтбора Из РезультатОтбора Цикл
		МассивСтрок.Добавить(СтрокаОтбора);
	КонецЦикла;
	
	МассивУдаления = Новый Массив;
	Для Каждого СтрокаТЗ Из Таблица Цикл
		Если МассивСтрок.Найти(СтрокаТЗ) = Неопределено Тогда
			МассивУдаления.Добавить(СтрокаТЗ);
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого СтрокаТЗ Из МассивУдаления Цикл
		Таблица.Удалить(СтрокаТЗ);
	КонецЦикла;
	
    Возврат Таблица;
    
КонецФункции // ОставитьСтрокиТаблицыЗначений()

УдалитьСтрокиТаблицыЗначений

Удаляет строки ТЗ, соответсвующие структуре отбора
prog1c 45 1 5
Функция УдалитьСтрокиТаблицыЗначений(Знач Таблица, СтруктураОтбора) Экспорт
	
	МассивСтрок = Новый Массив;
	РезультатОтбора = Таблица.НайтиСтроки(СтруктураОтбора);
	Для каждого СтрокаОтбора Из РезультатОтбора Цикл
		МассивСтрок.Добавить(СтрокаОтбора);
	КонецЦикла;
	
	Для Каждого СтрокаТЗ Из МассивСтрок Цикл
		Таблица.Удалить(СтрокаТЗ);
	КонецЦикла;
	
    Возврат Таблица;
    
КонецФункции // УдалитьСтрокиТаблицыЗначений()

Передача таблицы значений в запрос

Передача таблицы значений в запрос. В качестве внешнего источника могут выступать: Таблица значений, Табличная часть, Результат запроса.
prog1c 45 1 5
Товары = Новый ТаблицаЗначений;	
Товары.Колонки.Добавить("Наименование");	
Товары.Колонки.Добавить("Количество");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
			   |	ВнешнийИсточник.Наименование,
			   |	ВнешнийИсточник.Количество
			   |ПОМЕСТИТЬ ВТ_ВнешнийИсточник
			   |ИЗ
			   |	&ВнешнийИсточник КАК ВнешнийИсточник
			   |;
			   |
			   |////////////////////////////////////////////////////////////////////////////////
			   |ВЫБРАТЬ
			   |	ВТ_ВнешнийИсточник.Наименование,
			   |	ВТ_ВнешнийИсточник.Количество КАК Количество
			   |ИЗ
			   |	ВТ_ВнешнийИсточник КАК ВТ_ВнешнийИсточник
			   |ГДЕ
			   |	ВТ_ВнешнийИсточник.Количество > 0
			   |
			   |УПОРЯДОЧИТЬ ПО
			   |	Количество";

Запрос.УстановитьПараметр("ВнешнийИсточник", Товары);			   
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
	
	// Обработка данных
	
КонецЦикла; 

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

Создает объект ТаблицаЗначений из списка колонок (строка с разделителями или массив)
prog1c 45 1 5
Функция ТаблицаЗначений(Колонки)

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

КонецФункции // ТаблицаЗначений()

Структура метаданных регистра сведений

Возвращает структуру метаданных регистра сведений. В параметр функции можно передать строковое название регистра, или объект РегистрСведений, МенеджерЗаписи, НаборЗаписей
prog1c 45 1 5
Функция СтруктураМетаданныхРегистраСведений(РегистрСведений) Экспорт
	
	СтруктураРегистра         = Неопределено;
	РегистрСведенийМетаданные = Неопределено;
	
	Если ТипЗнч(РегистрСведений) = Тип("Строка") Тогда
		РегистрСведенийМетаданные = Метаданные.НайтиПоПолномуИмени("РегистрСведений." + РегистрСведений);
	Иначе
		
		РегистрСведенийМетаданные = Метаданные.НайтиПоТипу(ТипЗнч(РегистрСведений));
		Если РегистрСведенийМетаданные <> Неопределено Тогда
			РегистрСведенийМетаданные = Метаданные.НайтиПоПолномуИмени("РегистрСведений." + РегистрСведенийМетаданные.Имя);
		КонецЕсли;
		
	КонецЕсли;
	
	Если РегистрСведенийМетаданные <> Неопределено Тогда
		
		НаименованиеРегистра       = РегистрСведенийМетаданные.Имя;
		МетаданныеРегистраСведений = Метаданные.РегистрыСведений[НаименованиеРегистра];

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

Колонки в строку

Возвращает строку с названиями колонок коллекции (ТаблицаЗначений, РезультатЗапроса)
prog1c 45 1 5
Функция КолонкиВСтроку(Коллекция, Разделитель=",")

	СтрКоллекция = "";
	
	Для каждого Колонка Из Коллекция.Колонки Цикл
		Если Не ПустаяСтрока(СтрКоллекция) Тогда
			СтрКоллекция = СтрКоллекция + Разделитель;
		КонецЕсли;
		СтрКоллекция = СтрКоллекция + Колонка.Имя;
	КонецЦикла;
	
	Возврат СтрКоллекция;

КонецФункции // КолонкиВСтроку()