Back to top

Массив 1с (Примеры работы)

Опубликовано e-1c@mail.ru - пт, 06/23/2017 - 07:53

О массивах

Это программный набор элементов. Он служит для:

  1. Отбора значений.
  2. Сортировки. Каждой позиции в массиве присваивается индекс. Это облегчает поиск. И вы можете сослаться на объект, написав его номер.
  3. Объединения и сохранения записей.
  4. Разделения групп, создания подстрок.
  5. Массив — сам по себе объект. К нему будет привязана переменная. Можно обратиться к отдельным его частям или использовать его целиком в процедурах. Например, можно объединить группу значений «Сотрудники отдела N» и внести туда имена и фамилии работников.

Проведём аналогию. Представьте книжный шкаф. Книги в нём расставлены по разным «ячейкам». Если вести учёт, вы будете знать, где находится каждый объект. И без труда его достанете. Но если книги, журналы и газеты хаотично разбросаны на столе, поиск нужной вещи затянется. Хотя это не отражает все возможности уникальных коллекций.

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