наверх
Свободные IT публикации
логин:
пароль:

Работа с массивами в 1С 8.x


Как создать массив?

СозданныйМассив = Новый Массив();
СозданныйМассив = Новый Массив(10);

Как создать многомерный массив?

ДвумерныйМассив = Новый Массив(2, 8); 

ДвумерныйМассив = Новый Массив; 
МассивВторогоПорядка = Новый Массив(8); 
ДвумерныйМассив.Добавить(МассивВторогоПорядка); 
ДвумерныйМассив.Добавить(МассивВторогоПорядка); 

Значение = ДвумерныйМассив[2][5];
Значение = ДвумерныйМассив.Получить(2).Получить(5);

Как добавить элементы в массив?

НашМассив.Добавить(НовоеЗначение);

Массив = Новый Массив; 
Массив.Вставить(5, "ООО ""Лабан""");

Как определить размер массива?

Размер = НашМассив.Количество();

Как обратиться к элементу массива?

ПервоеЗначение = НашМассив[0]; 
НашМассив[9] = ДесятоеЗначение; 
ПервоеЗначение = НашМассив.Получить(0); 
НашМассив.Установить(9, ДесятоеЗначение);

Как перебрать элементы массива?

Для Каждого ЭлементМассива Из МассивЭлементов Цикл 
	Если ТипЗнч(ЭлементМассива) = Тип("Число") Тогда 
		Сообщить(ЭлементМассива); 
	КонецЕсли; 
КонецЦикла; 

Для Сч = 0 по МассивЭлементов.ВГраница() Цикл 
	Если ТипЗнч(МассивЭлементов[Сч]) = Тип("Число") Тогда 
		МассивЭлементов[Сч] = 0; 
	КонецЕсли; 
КонецЦикла;

Как удалить элемент массива?

МассивЭлементов.Удалить(0); 

Индекс = МассивЭлементов.ВГраница();
Пока Индекс >= 0 Цикл 
	Если ТипЗнч(МассивЭлементов[Индекс]) = Тип("Число") Тогда 
		МассивЭлементов.Удалить(Индекс); 
	КонецЕсли; 
	Индекс = Индекс - 1; 
КонецЦикла;

Как удалить все элементы массива?

Массив.Очистить();

Как удалить повторяющиеся элементы массива?

Процедура УдалитьПовторяющиесяЭлементы(Массив) 

	ТекущийИндекс = 0; 
	ВсегоЭлементов = Массив.Количество(); 
	Пока ТекущийИндекс < ВсегоЭлементов Цикл 
		Индекс2 = ТекущийИндекс + 1; 
		Пока Индекс2 < ВсегоЭлементов Цикл 
			Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда 
				Массив.Удалить(Индекс2); 
				ВсегоЭлементов = ВсегоЭлементов - 1; 
			Иначе 
				Индекс2 = Индекс2 + 1; 
			КонецЕсли; 
		КонецЦикла; 
		ТекущийИндекс = ТекущийИндекс + 1; 
	КонецЦикла; 

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

Как скопировать массив?

Функция СкопироватьМассив(ИсходныйМассив) 

	МассивКопия = Новый Массив; 
	Для Каждого Элемент Из ИсходныйМассив Цикл 
		МассивКопия.Добавить(Элемент); 
	КонецЦикла; 
	Возврат МассивКопия; 

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

Как проверить, что два массива идентичны?

Функция ПроверитьИдентичностьМассивов(ПервыйМассив, ВторойМассив) 

	НаибольшийИндекс = ПервыйМассив.ВГраница(); 
	Если НаибольшийИндекс > ВторойМассив.ВГраница () Тогда 
		Возврат Ложь; 
	КонецЕсли; 

	Для Счетчик = 0 По НаибольшийИндекс Цикл 
		Если ПервыйМассив[Счетчик] <> ВторойМассив[Счетчик] Тогда 
			Возврат Ложь; 
		КонецЕсли; 
	КонецЦикла; 

	Возврат Истина; 

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

В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать?

СписокЗначений = Новый СписокЗначений; 
СписокЗначений.ЗагрузитьЗначения(МассивНаименований); 
СписокЗначений.СортироватьПоЗначению(); 
МассивНаименований = СписокЗначений.ВыгрузитьЗначения(); 

СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Убыв);

Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. Как удалить все пустые значения массива?

Процедура УдалитьПустыеЭлементы(МассивНоменклатуры) 

	Счетчик = 0; 
	КоличествоЭлементов = МассивНоменклатуры.Количество(); 
	Пока Счетчик < КоличествоЭлементов Цикл 
		Если МассивНоменклатуры [Счетчик].Пустая() Тогда 
			МассивНоменклатуры.Удалить(Счетчик); 
			КоличествоЭлементов = КоличествоЭлементов - 1; 
		Иначе 
			Счетчик = Счетчик + 1; 
		КонецЕсли; 
	КонецЦикла; 

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

Как получить массив номенклатурных позиций, использованных в табличных частях "Номенклатура" и "Тара" накладной?

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

Есть две таблицы значений. Как получить массив совпадающих имен колонок?

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

Как в запросе сделать отбор по нескольким вариантам заполнения реквизита типа "ПеречислениеСсылка"?

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

МассивПричин = Новый Массив; 
МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускБезСохраненияЗарплаты); 
МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускУчебный); 

Запрос.УстановитьПараметр("МассивПричин", МассивПричин);

Как из регистра сведений "РасчетчикиЗарплатыОрганизации" получить в виде массива всех расчетчиков зарплаты определенного подразделения организации?

Функция ПолучитьМассивРасчетчиков(Подразделение) 

	НаборЗаписей = РегистрыСведений.РасчетчикиЗарплатыОрганизации.СоздатьНаборЗаписей(); 
	НаборЗаписей.Отбор.ПодразделениеОрганизации.Установить(Подразделение); 
	НаборЗаписей.Прочитать(); 
	МассивРасчетчиков = НаборЗаписей.ВыгрузитьКолонку("Пользователь"); 

	Возврат МассивРасчетчиков; 

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

Функция ПолучитьМассивРасчетчиков(Подразделение) 

	Запрос = Новый Запрос; 
	Запрос.Текст = "
	|ВЫБРАТЬ 
	|	РасчетчикиЗарплатыОрганизации.Пользователь КАК Расчетчик 
	|ИЗ 
	|	РегистрСведений.РасчетчикиЗарплатыОрганизации КАК РасчетчикиЗарплатыОрганизации 
	|ГДЕ 
	|	РасчетчикиЗарплатыОрганизации.ПодразделениеОрганизации = &Подразделение"; 

	Запрос.УстановитьПараметр("Подразделение", Подразделение); 

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

	МассивРасчетчиков = Новый Массив; 
	Пока Выборка.Следующий() Цикл 
		МассивРасчетчиков.Добавить(Выборка.Расчетчик); 
	КонецЦикла; 

	Возврат МассивРасчетчиков; 

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