comsafearray 1с

Понадобилось однажды мне в загрузку пользователей из AD подгрузить информацию о группе, в котором находится пользователь. Узнав, через редактор атрибутов ‘Active Directory‘, что за данную информацию отвечает атрибут ‘canonicalName‘, был быстро дописан механизм загрузки:

Но как оказалось, получаемый тип не был строкой. Это оказался тип данных COMSafeArray:

COMSafeArray
COMSafeArray

Итак, COMSafeArray – это тип данных, который позволяет работать с многомерными массивами из COM:

Справка 1с  COMSafeArray.
Справка 1с COMSafeArray.

Полистав немного справку и помучив отладчик, я понял что в моем случае группу пользователя из ‘AD‘, которая хранится в значение типа ‘COMSafeArray‘, можно выгрузить в обычный массив и дальше уже работать по старинке:

Выгрузить  COMSafeArray в Массив.
Выгрузить COMSafeArray в Массив.

Так же можно было просто читать значения, получая их по индексу, используя методы ‘GetLength’ и ‘GetValue’:

Важно понимать какой перед нами массив: одномерный или многомерный. От этого будет зависеть алгоритм работы с ним.

Вот таким нехитрым способом удалось загрузить информацию о группах пользователя из AD.

В типовых конфигурациях данных тип ‘COMSafeArray‘ используют в различных решениях при работе с файлами через com-соединения:

  • Процедура СравнитьФайлы(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов) Экспорт
  • Функция ИнициализироватьПечатнуюФормуOOWriter(Знач Шаблон = Неопределено) Экспорт
  • Функция ПолучитьТаблицуДанных(ExcelЛист, Данные, НомерНачальнойКолонки, НомерНачальнойСтроки, МассивНеРазрешимыхСимволов, БыстроеСчитываниеДанных, НомерКонечнойСтроки) Экспорт
  • и т.д.

С типами данных, в том числе и ‘COMSafeArray‘ , которые можно передавать через COM, можно ознакомиться в соответствующей статье на сайте 1с.

Так же данный тип можно использовать в скоростной загрузки данных в Ексель. Для этого всего лишь достаточно данные поместить в ‘COMSafeArray‘ и затем поместить их в диапазон ячеек:

Здесь стоит обратить внимание на то, что вместо стандартного сохранения ‘SaveAs’ используется ‘SaveCopyAs’. Так как в противном случае мы получим ошибку:

Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно.
Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно.

Каждый день узнаю что-то новое и каждый день не перестаю этому удивляться. Всем удачи!

Оставить комментарий

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