COMSafeArray.Из массива 1

Конструкторы

Создает COMSafeArray с заданным типом элемента из элементов массива значений. Значения элементов COMSafeArray выбираются из массива, заданного в параметре <ТипЭлемента> по следующему правилу: Каждое значение старшего индекса COMSafeArray определяет его срез с количеством измерений на 1 меньше. Для каждого значения старшего индекса из COMSafeArray выбирается соответствующее значение из массива и этим значением инициализируется срез COMSafeArray. Если в массиве нет значения с соответствующим индексом, то срез COMSafeArray инициализируется значением типа Неопределено. Так продолжается до тех пор, кока срез не станет одним элементом COMSafeArray. Если срез не является элементом, а элемент массива не является массивом, то считается, что он является массивом длины 1. Если размерности COMSafeArray заданы, то построенный COMSafeArray будет иметь заданные размерности. Если не заданы, то они определяются по максимальным индексам массива и максимальному уровню вложенности массивов.

Синтаксис

Новый COMSafeArray(<Массив>, <ТипЭлемента>, <<разм0>,...,<размN-1>>)

Примеры платформы

Массив1 = Новый Массив;
Массив2 = Новый COMSafeArray(Массив1, "VT_I4", 2, 3);
Полное описание, параметры и ограничения

COMSafeArray.Из массива 1

COMSafeArray (COMSafeArray)

Из массива 1

Доступен, начиная с версии 8.0.

Синтаксис:
Новый COMSafeArray(<Массив>, <ТипЭлемента>, <<разм0>,...,<размN-1>>)
Параметры:

<Массив> (обязательный)
Тип: Массив.
Массив - источник данных для COMSafeArray.

<ТипЭлемента> (обязательный)
Тип: Строка.
Определяет тип элемента COMSafeArray.

<<разм0>,...,<размN-1>> (необязательный)
Тип: Число.
Количество элементов COMSafeArray по каждой из размерностей, начиная со старшей.
<разм0> задает количество элементов по нулевому, самому старшему, измерению COMSafeArray;

<разм1> - по первому измерению, если COMSafeArray более чем двумерный;
и так далее. Всего параметров столько, сколько измерений должно быть в COMSafeArray.
Описание:

Создает COMSafeArray с заданным типом элемента из элементов массива значений.
Значения элементов COMSafeArray выбираются из массива, заданного в параметре <ТипЭлемента> по следующему правилу:
Каждое значение старшего индекса COMSafeArray определяет его срез с количеством измерений на 1 меньше.

Для каждого значения старшего индекса из COMSafeArray выбирается соответствующее значение из массива и этим значением инициализируется срез COMSafeArray. Если в массиве нет значения с соответствующим индексом, то срез COMSafeArray инициализируется значением типа Неопределено.
Так продолжается до тех пор, кока срез не станет одним элементом COMSafeArray.
Если срез не является элементом, а элемент массива не является массивом, то считается, что он является массивом длины 1.
Если размерности COMSafeArray заданы, то построенный COMSafeArray будет иметь заданные размерности. Если не заданы, то они определяются по максимальным индексам массива и максимальному уровню вложенности массивов.

Пример:

// Построить двумерный COMSafeArray с типом элемента VT_I4

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

// взять из массива.

Массив1 = Новый Массив;
// заполнение массива Массив1 значениями

// ...

Массив2 = Новый COMSafeArray(Массив1, "VT_I4", 2, 3);

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

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Передать матрицу двух товаров в COMSafeArray

Из двух заполненных массивов строк строим матрицу VT_I4; показываем тип, размеры, чтение и заполнение второго независимого массива.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Собственная учебная база на Windows. Фрагмент вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи, выполняемой на Windows.

  2. Все значения и COMSafeArray создаются самим примером в памяти. COMОбъект, Excel/Word, внешние компоненты, базы и сеть не используются.

  3. Запускайте три задачи отдельно. Размеры маленькие и фиксированные; не заменяйте их неограниченными значениями из внешнего API.

  4. Имена GetDimensions/GetValue/SetValue/Resize — реальные имена методов установленной справки, не придуманный английский перевод.

  5. Сверка API/статические тесты не подтверждают фактическое выполнение COMSafeArray в установленной 1С.

ИсходныеСтроки = Новый Массив;
Первая = Новый Массив;
Первая.Добавить(10);
Первая.Добавить(20);
Первая.Добавить(30);
Вторая = Новый Массив;
Вторая.Добавить(40);
Вторая.Добавить(50);
Вторая.Добавить(60);
ИсходныеСтроки.Добавить(Первая);
ИсходныеСтроки.Добавить(Вторая);
Матрица = Новый COMSafeArray(ИсходныеСтроки, "VT_I4", 2, 3);
Сообщить(Матрица.GetDimensions() = 2);
Сообщить(Матрица.GetType() = "VT_I4");
Сообщить(Матрица.GetLength(0) = 2);
Сообщить(Матрица.GetLength(1) = 3);
Сообщить(Матрица.GetValue(0, 0) = 10);
Сообщить(Матрица.GetValue(1, 2) = 60);
ЗаполненнаяКопия = Новый COMSafeArray("VT_I4", 2, 3);
Для НомерСтроки = 0 По 1 Цикл
    Для НомерКолонки = 0 По 2 Цикл
        ЗаполненнаяКопия.SetValue(НомерСтроки, НомерКолонки, Матрица.GetValue(НомерСтроки, НомерКолонки));
    КонецЦикла;
КонецЦикла;
ЗаполненнаяКопия.SetValue(0, 0, 99);
Сообщить(ЗаполненнаяКопия.GetValue(0, 0) = 99);
Сообщить(Матрица.GetValue(0, 0) = 10);
ВыгруженныеСтроки = Матрица.Выгрузить();
Сообщить(ВыгруженныеСтроки.Количество() = 2);
Сообщить(ВыгруженныеСтроки.Получить(1).Количество() = 3);
Сообщить(ВыгруженныеСтроки.Получить(1).Получить(2) = 60);

Разбор по шагам

  1. Две строки исходных данных 10/20/30 и 40/50/60 заданы полностью, без многоточия заполните массив.

  2. Конструктор Из массива 1 получает вложенные Массив, строку VT_I4 и размеры 2,3. Размерность 0 — старшая, здесь строки; размерность 1 — колонки.

  3. VT_I4 — знаковое целое 4 байта, не произвольная точность числа 1С. Все наши значения заведомо помещаются в этот диапазон.

  4. Конструктор По типу элемента 1 задаёт тип и размеры, но не гарантирует исходные значения. Поэтому каждую ячейку второго массива заполняем до чтения.

  5. Изменение второй матрицы не меняет первую. Выгрузить копирует содержимое в обычные вложенные массивы 1С, а не возвращает тот же COMSafeArray.

Как проверить результат

  1. Одиннадцать логических проверок дают Истина; исходная матрица сохранила 10 в первой ячейке.

  2. Выгруженный второй ряд содержит три значения, последнее 60. Не запущено внешнее приложение.

Ожидаемый результат

Показана настоящая двумерная структура COM с двумя способами конструирования и независимым заполнением.

На что обратить внимание

  1. Не читайте ячейки конструктора по типу до явного заполнения.

  2. Один плоский массив из шести значений не выдаётся здесь за две вложенные строки.

  3. VT_I4 нельзя использовать для строк или дробных денежных сумм без согласования типа COM.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.