Как сделать массив структур 1с

Обновлено: 06.07.2024

  1. Список значений (в отличие от массива у значений из списка есть представление, реализована возможность сортировки и интерфейсного представления коллекции);
  2. Таблица значений – коллекция, имеющая колонки для расширенного описания значения, подобную структуру можно получить, выполнив запрос;
  3. Дерево – очень похоже на таблицу, дополненную структурой подчиненности;
  4. Структура – динамический набор имен и значений переменных;
  5. Соответствие – подобно структуре, только переменные сопоставляются не строковым представлениям, а друг другу.

Методы массива

Программное создание экземпляра массива происходит с помощью с помощью оператора Новый() (Рис.1).

Как видно из приведенного примера массивы можно создавать как с фиксированным количеством элементов, так и без этого ограничения.

Прежде, чем приступать к обсуждению методов работы с массивом, давайте определимся с двумя понятиями:

  • Индекс элемента – можно представить как порядковый номер отдельно взятого значения;
  • Количество элементов – число элементов в коллекции, его определение доступно с помощью метода Количество().

Важно знать: в 1С подсчет количества значений любой коллекции начинается с 1, а раздача индексов с 0, т.е первый элемент в массиве имеет индекс 0. Таким образом, обход коллекции с помощью цикла с итератором должен начинаться с 0 и заканчиваться количеством элементов минус 1, в противном случае система с помощью окна (Рис.2) уведомит о наступлении исключительной ситуации.

Любой объект конфигурации имеет свои методы для работы, массив не исключение, перечислим их с некоторой расшифровкой:

Одномерные и многомерные массивы

В простейшем случае одномерный массив может содержать значения различных типов (Рис.3)

Результат выполнения вышеприведенного кода представлен на Рис.4

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

В старших классах средней школы дается представление о понятии двумерной матрицы. Это такой набор данных, каждый элемент которого имеет два индекса (в простейшем случае порядковый номер по вертикали и по горизонтали) именно она лучше всего иллюстрирует понятие двумерного массива.

Создавая подобную матрицу можно указать количество строк и столбцов, которые будут использованы.

Допустим, перед нами стоит задача создать массив из фамилии, имени и отчества двух сотрудников. С помощью кода (Рис.5) создаем соответствующий массив с фиксированным количеством столбцов и строк.

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

Использование массива

Массивы в 1С чаще всего используются для:

  1. Создания различных отборов используемых при работе с запросами и другими коллекциями значений;
  2. Передачи списков в качестве параметров между процедурами и функциями;
  3. Обмена данными с внешними компонентами, подключенными с использованием COM технологии.


Структура в 1С 8.3 - это коллекция пар Ключ (только строковый тип) + Значение (любой тип данных). Ключ всегда - это имя свойства, а значение - само свойство. Обычно используется для хранения небольшого двумерного массива, и передачи между процедурами набора каких-либо параметров. Структура в отличии от соответствия упорядочивает элементы при добавлении.

Со структурами можно работать и в серверном и клиентском контексте. Может использоваться в реквизитах управляемой формы.


✔ Создание Структуры (через Строку или Ключ)

&НаКлиенте
Процедура СозданиеСтруктуры ()

// Вариант 1: через строку
СтрКлиент = Новый Структура ( "КлиентИмя, ДатаРегистриции, КолРаботников" , "ОАО ""Савушкин продукт""" , '19961230' , 3120 );
Сообщить ( СтрКлиент . КлиентИмя + ", создано " + СтрКлиент . ДатаРегистриции + ", количество работников" + СтрКлиент . КолРаботников );

// Вариант 2: через Ключ
СтрКлиент = Новый Структура ;
СтрКлиент . Вставить ( "КлиентИмя" , "ОАО ""Савушкин продукт""" ); // , (произв. типа)
СтрКлиент . Вставить ( "КлиентБелИмя" , "ААТ ""Савушкін прадукт""" );
СтрКлиент . Вставить ( "УНП" , "200030514" );
СтрКлиент . Вставить ( "ДатаРегистриции" , '19961230' );
СтрКлиент . Вставить ( "Сайт" , "savushkin.by" );
СтрКлиент . Вставить ( "НомерТелефона" , "+375(162)470624" );
СтрКлиент . Вставить ( "КолРаботников" , 3120 );

Сообщить ( СтрКлиент . КлиентИмя + " (на бел.языке " + СтрКлиент . КлиентБелИмя + "), УНП " + СтрКлиент . УНП +
", создано " + СтрКлиент . ДатаРегистриции + ", www:" + СтрКлиент . Сайт + ", телефон №" +
СтрКлиент . НомерТелефона + ", количество работников" + СтрКлиент . КолРаботников );

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

Массив доступен как на клиенте, так и на сервере. Массивы не хранятся в базе данных и используются для работы с временными наборами данных. Доступ к элементам массива осуществляется по индексу через оператор […] (первый элемент имеет индекс 0). Также для массива возможен обход посредством оператора Для каждого … Из … Цикл. Имеется возможность организовывать многомерные массивы.

Структуры часто образуют массивы. Чтобы объявить массив структур, вначале необходимо определить структуру (то есть определить агрегатный тип данных), а затем объявить переменную массива этого же типа. Например, чтобы объявить 100-элементный массив структур типа addr , который был определен ранее, напишите следующее:

Это выражение создаст 100 наборов переменных, каждый из которых организован так, как определено в структуре addr .

Чтобы получить доступ к определенной структуре, указывайте имя массива с индексом. Например, чтобы вывести ZIP-код из третьей структуры, напишите следующее:

Как и в других массивах переменных, в массивах структур индексирование начинается с 0.

Для справки : чтобы указать определенную структуру, находящуюся в массиве структур, необходимо указать имя этого массива с определенным индексом. А если нужно указать индекс определенного элемента в структуре, то необходимо указать индекс этого элемента. Таким образом, в результате выполнения следующего выражения первому символу члена name , находящегося в третьей структуре из addr_list , присваивается значение ‘X’.

Пример со списком рассылки

Чтобы показать, как используются структуры и массивы структур, в этом разделе создается простая программа работы со списком рассылки, и в ее массиве структур будут храниться адреса и связанная с ними информация. Эта информация записывается в следующие поля: name (имя), street (улица), city (город), state (штат) и zip (почтовый код, индекс).

Вся эта информация, как показано ниже, находится в массиве структур типа addr :

Обратите внимание, что поле zip имеет целый тип unsigned long . Правда, чаще можно встретить хранение почтовых кодов, в которых используются строки символов, потому что этот способ подходит для почтовых кодов, в которых вместе с цифрами используются и буквы (как, например, в Канаде и других странах). Однако в нашем примере почтовый индекс хранится в виде целого числа; это делается для того, чтобы показать использование числового элемента в структуре.

Вот main() — первая функция, которая нужна программе:

Функция начинает выполнение с инициализации массива структур, а затем реагирует на выбранный пользователем пункт меню.

Функция init_list() готовит массив структур к использованию, обнуляя первый байт поля name каждой структуры массива. (В программе предполагается, что если поле name пустое, то элемент массива не используется.) А вот сама функция init_list() :

Функция menu_select() выводит меню на экран и возвращает то, что выбрал пользователь.

Обратите внимание, что если все элементы массива структур заняты, то find_free() возвращает -1. Это удобное число, потому что в массиве нет -1-го элемента.

Функция delete() предлагает пользователю указать индекс той записи с адресом, которую требуется удалить. Затем функция обнуляет первый байт поля name .

И последняя функция, которая требуется программе, — это list() , которая выводит на экран весь список рассылки. Из-за большого разнообразия компьютерных сред язык С не определяет стандартную функцию, которая бы отправляла вывод на принтер. Однако все нужные для этого средства имеются во всех компиляторах С. Возможно, вам самим захочется сделать так, чтобы программа работы со списками могла еще и распечатывать список рассылки.

Ниже программа обработки списка рассылки приведена полностью. Если у вас остались какие-либо сомнения относительно ее компонентов, введите программу в компьютер и проверьте ее работу, делая в программе изменения и получая соответствующие результаты.

Читайте также: