Записки программиста 1с

Массивы в 1с : Предприятии

Массивы в 1с : Предприятии можно использовать аналогично другим системам программирования.

Также Массив в языке программирования 1С — это универсальная коллекция элементов, следующих друг за другом, которые могут быть доступны с помощью индекса. Элементы могут быть любого типа, в том числе и типа Массив. У каждого элемента в массиве есть уникальный номер, который называют Индексом. Посредством индекса можно получить доступ к данному элементу.
Все элементы в массиве упорядочены, т.е. первый элемент имеет индекс, равный нулю,
второй — одному, и так далее.

Массивы в 1с. Создание массива

Конструктор — это то, как создается определенный объект. Все массивы создаются с помощью конструктора Новый. Синтаксис:

Новый Масссив(<КоличествоЭлементов1>,…,<КоличествоЭлементовN>)

Массив можно создать при помощи следующей конструкции:

// в массиве сразу 3 элемента
 Массив = Новый Массив(3);

Для работы с массивами в 1с существуют различные программные методы. Рассмотрим их ниже:

Массивы в 1с
Методы работы с массивами в 1с

Метод Добавить() в массивах 1с

Добавить элемент в массив можно следующим образом:

Массив.Добавить("знач1");//Добавили строковый элемент

Массив.Добавить();//Добавили пустой элемент в массив

Метод Вставить() в массивах 1с

Позволяет Вставить элемент в массив 1с. Для вставки необходимо указать номер позиции или номер вставляемого элемента.

// в массив вставляем элемент
 Массив.Вставить(0,"Новое значение");

Метод Количество() в 1с

Данный метод выводит количество элементов массива. Знание количества элементов позволяет перебрать элементы при помощи цикла для.

// в массиве находим количество
 
Массив= новый массив(20);
Колво=Массив.Количество();
Сообщить("Количество="+Колво);

Метод Найти() в массивах 1с

// в массиве метод Найти
 Сообщить(Массив.Найти("знач1"));

Возвращаемое значение
Число — индекс первого найденного элемента массива
Неопределено — если элемент не был найден

1с как получить индекс элемента массива

Строка=Массив[8];
Индекс=Массив.Найти(Строка);

Метод Удалить() в 1с

Удаляет элемент массива по заданному номеру.

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

Метод Очистить() в 1с

Производит очистку или удаление всех элементов массива.

// в массиве метод Очистить
 Массив.Очистить();

Метод ВГраница в 1с

// в массиве в массиве метод ВГраница
 НомерПоследнегоЭлемента = Массив.ВГраница;

Заполнение массива случайными числами 1с

Для заполнения массива случайными числами можно с помощью цикла с использованием кода:

массив= новый массив(20);
для индекс=0 по 19 цикл
ГСЧ = Новый ГенераторСлучайныхЧисел(Индекс);
СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 25);
массив[индекс]=СлучайноеЧисло;
конеццикла;
&НаКлиенте
Процедура Сгенерировать(Команда)
    
    Если Объект.Количество = 0 Тогда
        ПоказатьПредупреждение(, "Ошибка! введите от 1 до 100");
        Возврат;
    ИначеЕсли Объект.Количество > 100 Тогда
        ПоказатьПредупреждение(, "Ошибка! Введено больше 100");
        Возврат;
    КонецЕсли;
    
    СгенерироватьПредпросмотрНаСервере();
    
КонецПроцедуры   

&НаСервере
Процедура СгенерироватьПредпросмотрНаСервере()
    
    Объект.Предпросмотр.Очистить();
    
    Для номер=1 по Объект.Количество Цикл
        СтрокаПредпросмотра = Объект.Предпросмотр.Добавить();
        СтрокаПредпросмотра.Наименование = ГенНаименование(номер); 
		Объект.Наименование=ГенНаименование(номер);
        СтрокаПредпросмотра.Артикул = ГенАртикул(номер);
		Объект.Артикул=ГенАртикул(номер);
        СтрокаПредпросмотра.Тип = ГенТип(номер);
		Объект.Тип=ГенТип(номер);
        СтрокаПредпросмотра.ЕдиницаИзмерения = ГенЕдиницаИзмерения(номер);
		Объект.ЕдиницаИзмерения=ГенЕдиницаИзмерения(номер);
    КонецЦикла;
    
КонецПроцедуры
&НаКлиенте
Процедура СоздатьВБазе(Команда)
    
    Если Объект.Предпросмотр.Количество() = 0 Тогда
        ПоказатьПредупреждение(, "Сначала сгенерируйте предпросмотр!");
        Возврат;
    КонецЕсли;
    
    СоздатьВБазеНаСервере();
    
КонецПроцедуры    

&НаСервере
Процедура СоздатьВБазеНаСервере()
    
    Для Каждого СтрокаПредпросмотра Из Объект.Предпросмотр Цикл
        Элемент = Справочники.Номенклатура.СоздатьЭлемент();
        Элемент.Наименование = СтрокаПредпросмотра.Наименование;
        Элемент.Артикул = СтрокаПредпросмотра.Артикул;
        Элемент.ТипНоменклатуры = СтрокаПредпросмотра.Тип;
        Элемент.ЕдиницаИзмерения = СтрокаПредпросмотра.ЕдиницаИзмерения;
        Элемент.Записать();
    КонецЦикла;
    
    Сообщить("Успешно создано " + Объект.Предпросмотр.Количество() + " элементов");
    
КонецПроцедуры    

&НаСервере
Функция ГенАртикул(номер);
	массив= новый массив(25);
	Строка="А-";
	Для индекс=0 по 9 Цикл
		Индекс1=Секунда(ТекущаяДата());
		ГСЧ = Новый ГенераторСлучайныхЧисел(индекс+Индекс1+номер);
		СлучайноеЧисло = ГСЧ.СлучайноеЧисло(48, 57);
		Буква=Символ(СлучайноеЧисло);
	Строка=Строка+Буква;	
	КонецЦикла;

	Возврат Строка;
КонецФункции  

&НаСервере
Функция ГенТип(номер);
	Индекс=Секунда(ТекущаяДата());
		ГСЧ = Новый ГенераторСлучайныхЧисел(Индекс+номер);
		СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 9);
		Цифра=СлучайноеЧисло;
		
		Если Цифра%3=0 Тогда
			Тип=Перечисления.ТипыНоменклатуры.Сырье;
		ИначеЕсли Цифра%3=1 Тогда
			Тип=Перечисления.ТипыНоменклатуры.Полуфабрикат;
		Иначе
	        Тип=Перечисления.ТипыНоменклатуры.ГотоваяПродукция;
        КонецЕсли;	            
	Возврат Тип;
	
КонецФункции

&НаСервере
Функция ГенНаименование(номер);  
	массив= Новый массив(25);
	Строка=""; 
	Для индекс=0 по 25 Цикл
		Индекс1=Секунда(ТекущаяДата());
       	ГСЧ = Новый ГенераторСлучайныхЧисел(индекс+Индекс1+номер);
		СлучайноеЧисло = ГСЧ.СлучайноеЧисло(65, 90);
		Буква=Символ(СлучайноеЧисло);
	Строка=Строка+Буква;	
	КонецЦикла;

	Возврат Строка
КонецФункции

&НаСервере
Функция ГенЕдиницаИзмерения(номер);
		Индекс=Секунда(ТекущаяДата());

		ГСЧ = Новый ГенераторСлучайныхЧисел(Индекс+номер);
		СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0, 9);
		Цифра=СлучайноеЧисло;
		
		Если Цифра%3=0 Тогда
			ЕД=Справочники.ЕдиницыИзмерения.НайтиПоКоду("000000001");
		ИначеЕсли Цифра%3=1 Тогда
			ЕД=Справочники.ЕдиницыИзмерения.НайтиПоКоду("000000002");
        Иначе
	        ЕД=Справочники.ЕдиницыИзмерения.НайтиПоКоду("000000003");
        КонецЕсли;	
	Возврат ЕД;
КонецФункции

&НаКлиенте
Процедура Очистить(Команда)
    // Тоже используем реквизит
    Объект.Предпросмотр.Очистить();
КонецПроцедуры

&НаКлиенте
Процедура СформироватьСпецификации(Команда)
	Открытьформу("Обработка.ГенерацияСпецификации.Форма");
КонецПроцедуры


Прикладываю фрагмент кода для создания и вывода массива без повторяющихся элементов.

         массив= новый массив(20);

         Массив2=новый массив(20);
         для индекс=0 по 19 цикл
                   массив[индекс]=индекс;
         конеццикла;

         k=0;

         для индекс=0 по 19 цикл
                   ГСЧ = Новый ГенераторСлучайныхЧисел(Индекс);
                   СлучайноеЧисло = ГСЧ.СлучайноеЧисло(0,19-k);
                   массив2[индекс]=массив[СлучайноеЧисло];
                   Массив.Удалить(СлучайноеЧисло);
                   k=k+1;
         конеццикла;

         Для Каждого ЭлементМассива из Массив2 Цикл
                  Результат.ДобавитьСтроку(ЭлементМассива);//.Добавить(ЭлементМассива);
                   //Сообщить(ЭлементМассива); // 
         КонецЦикла;

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

Двумерные массивы в 1с

Встроенный язык платформы 1С:Предприятие 8.3 позволяет создавать двумерные и многомерные массивы. По своей сути — это массивы массивов (ведь никто не запрещал задавать в качестве элементов массива другие массивы). Давайте на примерах разберемся, как создавать и работать с такими массивами.

Рассмотрим пример создания двумерного массива. Создадим массив состоящий из 7 дней и каждый день состоит из 24 часов.

Во-первых создадим двумерный массив.

день=7;
	час=24;
	ДеньНедели=новый массив(день);
	ДеньНедели[0]=новый массив(час);

        ДеньНедели[1]=новый массив(час);
	ДеньНедели[2]=новый массив(час);
Массивы в 1с
Создаем двумерный массив

Во-вторых заполним двумерный массив значениями:

Массивы в 1с
Заполняем двумерный массив значениями

Создание двумерного массива в 1с

Массивы в 1с
Создание двумерного массива в 1с
        колво=5;
	 Массив = новый массив(колво);
	Для номер=0 По колво-1 Цикл
	 Массив[номер]=новый массив(колво);
	КонецЦикла;

Заполнение двумерного массива 1с случайными числами.

Для номер=0 По колво-1 Цикл
	 Строка1="";
	 Для номер1=0 По колво-1 Цикл
		ГСЧ = Новый ГенераторСлучайныхЧисел(номер*номер1);
                   СлучайноеЧисло = ГСЧ.СлучайноеЧисло(1,50-колво);
                   
		Массив[номер][номер1]=СлучайноеЧисло;
		
	Строка1=строка1+" "+Строка(Массив[номер][номер1]);
	КонецЦикла;
 	Сообщить(Строка1);
 
КонецЦикла;

Многомерный массив

Многомерный массив создается аналогично двумерному, только добавляется еще одно измерение.

В нашем примере добавим количество недель в году(52).

неделя=52;

Такой массив может хранить неделя * день * час элементов. Для программного обращения к элементам трехмерного массива необходимо указывать имя массива, а также три индекса: первый — индекс строки, второй — индекс колонки, третий — индекс глубины:

Рассмотрены Массивы в 1с : Предприятии и их основные методы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *