Заглянем в справку:
COMSafeArray — объектная оболочка над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.
Т.е., существует универсальный массив для передачи данных между различными COM-объектами. Всё что нужно, это 1С и Excel, ничего лишнего. Именно это привлекло моё внимание к этому объекту.
Скажу честно, мне пришлось потратить целый день, чтобы понять, как работать с этим объектом, в интернете ничего подобного мне не приходилось встречать. По этому пришлось стать первопроходцем.
Этот объект очень хитёр, т.к. при чтении файла из Excel возвращается массив в одном виде, а для передачи данных в Excel необходимо создать немного иной вариант. Но время было потрачено с пользой.
Кроме того, функция принимающая таблицу значений и сохраняющая данные в файл получилась универсальной. Теперь достаточно создать запрос с учётом некоторых нюансов и передать в эту функцию выгрузку запроса или таблицу значений.
Предложенная обработка спроектирована таким образом, что может быть вызвана как пользователем, так и регламентным заданием.
ОБРАТИТЕ ВНИМАНИЕ!
- Если в ТЗ будут строки из чисел, то как поступить, чтобы Excel не превратил их в числа, описано в публикации «Выгрузка данных в Excel без «геморроя». Один, но принципиально важный момент» (Ищите в моих публикациях).
- Учтите, Excel не понимает дат меньше 01.01.1900, по этому и пустую дату передавать нельзя, будет ошибка.
- ТЗ должна содержать только примитивные типы Дата, Число, Строка, Булево.
Эти нюансы, дополнительно, описаны в самой обработке.
Также, обратите внимание на статью «Как предотвратить возникновение ошибки при одновременном обращении пользователя и обработки к Excel» (Ищите в моих публикациях).
«по этому и пустую дату передавать нельзя»-натыкался на эти грабли. спасибо.
Решение интересное, не знал что можно диапазон ячеек сразу задать в виде SAFEARRAY.
Единственное замечание — уж очень много пафоса у вас в публикациях. Может попроще как-то?
Краткая суть, для тех кому интересен принцип предлагаемого решения:
Ну, насчет того, что «в интернете ничего подобного мне не приходилось встречать. По этому пришлось стать первопроходцем.» у гугла есть другое мнение:
(3) Pr-Mex, Действительно, в книге знаний описано, не натыкался. По Вашей ссылке нашлась только одна статья по выгрузке. Может я опять не так ищу. Но заметьте, там ни слова о граблях.
(2) Evil Beaver, На счёт «пафоса» — учту. Писал «на радостях», это эмоции радости выплеснулись. Постараюсь быть сдержанней.
В обработке есть ошибки:
1. Поместить строку
В попытку.
Показать
2. Переместить «возврат» ниже
Показать
За идею +, за оформление -! 🙂
Данный подход чем то похож на метод excel CopyFromRST, когда результат адошного запроса сразу сбрасывается на лист. Только вот все равно тяжеловесный эксель нужно запускать. Тем не менее это кирпичик в копилку знаний.
Хреново что нужно указывать границы диапазона области, если работаем с именованными областями.
После выполнения обработки созданный файл Ексель будет висеть в процессах.
Показать