NEW! Быстрый способ выгрузки в Excel без «геморроя» с помощью COMSafeArray.

30.03.14

Интеграция - Загрузка и выгрузка в Excel

Как очень быстро, легко и без всяких препятствий (драйвера ADODB, права пользователя Windows и т.п.) выгрузить данные в Excel с помощью COMSafeArray.

Скачать файлы

Наименование Файл Версия Размер
Шаблон выгрузки в Excel COMSafeArray.epf
.epf 8,48Kb
105
.epf 8,48Kb 105 Скачать

Заглянем в справку:

COMSafeArray  - объектная оболочка над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.

Т.е., существует универсальный массив  для передачи данных между различными COM-объектами.  Всё что нужно, это 1С и Excel, ничего лишнего. Именно это привлекло моё внимание к этому объекту.

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

Этот объект очень хитёр, т.к. при чтении файла из Excel возвращается массив в одном виде, а для передачи данных в Excel необходимо создать немного иной вариант. Но время было потрачено с пользой.

Кроме того, функция принимающая таблицу значений и сохраняющая данные в файл получилась универсальной. Теперь достаточно создать запрос с учётом некоторых нюансов и передать в эту функцию выгрузку запроса или таблицу значений.

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

ОБРАТИТЕ ВНИМАНИЕ!

  1. Если в ТЗ будут строки из чисел, то как поступить, чтобы Excel не превратил их в числа, описано в публикации «Выгрузка данных в Excel без «геморроя». Один, но принципиально важный момент» (Ищите в моих публикациях).
  2. Учтите, Excel не понимает дат меньше 01.01.1900, по этому и пустую дату передавать нельзя, будет ошибка.
  3. ТЗ должна содержать только примитивные типы Дата, Число, Строка, Булево.

Эти нюансы, дополнительно, описаны в самой обработке.

Также, обратите внимание на статью «Как предотвратить возникновение ошибки при одновременном обращении пользователя и обработки к Excel»  (Ищите в моих публикациях).

Excel Экспорт Выгрузка данных COMSafeArray Обмен

См. также

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210129    620    524    

439

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150698    367    375    

501

Маркетплейсный загрузчик для 12-ти маркетплейсов в "БП 3", "УТ 11", "КА 2", ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    31887    226    63    

117

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

Загрузка и выгрузка в Excel Оптовая торговля Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    214891    924    886    

939

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15069    79    0    

60

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101353    296    173    

312
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rasswet 82 02.04.14 08:49 Сейчас в теме
"по этому и пустую дату передавать нельзя"-натыкался на эти грабли. спасибо.
2. Evil Beaver 8107 02.04.14 10:01 Сейчас в теме
Решение интересное, не знал что можно диапазон ячеек сразу задать в виде SAFEARRAY.
Единственное замечание - уж очень много пафоса у вас в публикациях. Может попроще как-то?
Краткая суть, для тех кому интересен принцип предлагаемого решения:
// ИсходныйМассив - двумерный массив исходных данных (строки/колонки)
// Размер - размерности массива (см. синтакс-помощник для ComSafeArray)
Массив = Новый COMSafeArray(ИсходныйМассив, "VT_VARIANT", Размер);

// Самое главное. диапазону ячеек можно просто присвоить SAFEARRAY со значениями.
Лист.Range(Лист.Cells(2,1), Лист.Cells(Строк, Колонок)).Value = Массив;
Nikitos_NSK; DmitryShekhovtsev; rrustam11983; savauu; 0rel1; kelleam; JohnyDeath; json; AlexanderKai; dsv_nsk; artbear; Naill99; утюгчеловек; slavap; Yashazz; Nikola23; bulpi; +17 Ответить
5. akor77 197 02.04.14 17:34 Сейчас в теме
(2) Evil Beaver, На счёт "пафоса" - учту. Писал "на радостях", это эмоции радости выплеснулись. Постараюсь быть сдержанней.
3. Pr-Mex 136 02.04.14 11:21 Сейчас в теме
Ну, насчет того, что "в интернете ничего подобного мне не приходилось встречать. По этому пришлось стать первопроходцем." у гугла есть другое мнение:

https://www.google.ru/search?q=1%D1%81+SAFEARRAY&oq=1%D1%81+SAFEARRAY&aqs=chrome..69i57.3672j0j7&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8#newwindow=1&q=site%3Amista.ru+excel+comSAFEARRAY
Nikitos_NSK; 0rel1; dsv_nsk; artbear; Никс; Yashazz; Evil Beaver; +7 Ответить
4. akor77 197 02.04.14 17:30 Сейчас в теме
(3) Pr-Mex, Действительно, в книге знаний описано, не натыкался. По Вашей ссылке нашлась только одна статья по выгрузке. Может я опять не так ищу. Но заметьте, там ни слова о граблях.
6. akor77 197 02.04.14 20:43 Сейчас в теме
В обработке есть ошибки:
1. Поместить строку
Лист.Range(Лист.Cells(2,1), Лист.Cells(Строк, Колонок)).Value = Массив;

В попытку.
	Попытка
		Лист.Range(Лист.Cells(2,1), Лист.Cells(Строк, Колонок)).Value = Массив;
	Исключение
		Книга.Close();
		Книга = Неопределено;
		Excel.Interactive = Истина;
		Excel.DisplayAlerts = Истина;
		Excel.Application.Quit();
		Excel = Неопределено;
		Возврат "Ошибка при вставке массива. Подробно: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
	КонецПопытки;
Показать

2. Переместить "возврат" ниже
	Попытка
		Книга.SaveAs(ПутьКФайлу, 56);
	Исключение
		Книга.Close();
		Книга = Неопределено;
		Возврат "Ошибка при записи файла. Подробно: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); // Отсюда
		Excel.Interactive = Истина;
		Excel.DisplayAlerts = Истина;
		Excel.Application.Quit();
		Excel = Неопределено;
		//Сюда
	КонецПопытки;
Показать
7. DoctorRoza 03.04.14 08:04 Сейчас в теме
За идею +, за оформление -! :)
8. makc2k 107 03.04.14 09:17 Сейчас в теме
Данный подход чем то похож на метод excel CopyFromRST, когда результат адошного запроса сразу сбрасывается на лист. Только вот все равно тяжеловесный эксель нужно запускать. Тем не менее это кирпичик в копилку знаний.
9. nofx 20.02.16 15:06 Сейчас в теме
Хреново что нужно указывать границы диапазона области, если работаем с именованными областями.
10. user659124_s.kostina 07.02.18 10:21 Сейчас в теме
После выполнения обработки созданный файл Ексель будет висеть в процессах.
Если рОткрыватьДляПросмотра Тогда
			#Если Клиент Тогда
				Ексель.Visible=Истина;
			#КонецЕсли
		КонецЕсли;
		//чтобы файл не висел в процессах после выполнения обработки  		
		Ексель.DisplayAlerts = 0; 
		Ексель.Quit();
		Ексель.DisplayAlerts = 1; 
		Ексель=Null;
Показать
Оставьте свое сообщение