Сводная таблица Excel из 1С

30.07.21

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

Сводная таблица Excel из 1С - как сделать ее программно через COM соединение.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Числовые значения констант Excel
.zip 30,78Kb
1
1 Скачать (1 SM) Купить за 1 850 руб.

Неожиданно столкнулся с задачей выкинуть из 1С 7.7 данные в Excel и сделать из них сводную таблицу. В целом, все это можно использовать и под 1С 8, но это уже сами, если что )))

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

Итак, первое, с чем я столкнулся - это константы Excel, всякие xlYes, xlNo и т.д. Я вдруг обнаружил, что выковыривать их значения из документации Microsoft довольно муторно, а обратиться к ним по имени через внешнее соединение нельзя.

В качестве бонуса я приложу файл со списком констант и их числовыми значениями, я же сделал у себя СписокЗначений, назвал его глКонстантыExcel и запихал все это туда, так как периодически приходится сталкиваться с экспортом/импортом через Excel.

Конкретно тут используются константы:

xlSrcRange = 1
xlYes = 1
xlNo = 2
xlDatabase = 1

Вторая грабля - это создание нового листа, дело в том, что надо использовать Null в качестве передаваемого параметра, а из 1С 7.7 это ну никак не получится, поэтому пришлось использовать скрипты.

Треьтья грабля, на которую я убил более всего времени - это коллекция PivotCaches. В отличии от остальных коллекций листа Excel,это не объект коллекции, а метод, возвращающий коллекцию (внезапно, правда), то есть обращаться к нему надо так:

ОбъектЛистExcel.PivotCaches().Create( ну и далее уж параметры

Далее уже код:

//============================================================
Функция ПолучитьЛистExcel(Книга, ТекущийЛист, Заголовок="")
	//__ как, по вашему передать null из 1С 7.7 ?????
	// в общем, создаем скрипт
	врСкрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
	врСкрипт.Language = "javascript";
	// кладем туда параметры
	врСтраницы = Книга.WorkSheets();
	врСкрипт.AddObject("Worksheets", врСтраницы);
	врСкрипт.AddObject("LastWorksheet", ТекущийЛист);
	// и возвращаем вычисленное там значение уже в переменную 1С
	врЛист = врСкрипт.eval("Worksheets.add(null,LastWorksheet,null,null);");
	Если СокрЛП(Заголовок)="" Тогда
		// ну и переименовываем по необходимости
		врЛист.Name = СокрЛП(Заголовок);
	КонецЕсли;
	Возврат врЛист;
КонецФункции	// ПолучитьЛистExcel

//__ тут у нас есть
//  глКонстантыExcel - это список значений с константами Excel и их числовыми значениями
//  ИмяФайла - это существующий, сохраненный ранее файл с отчетом, в книге на 1 листе лежат данные
//  Габариты - это список значений с границами данных в отчете (Лево, Верх, Право, Низ)
//============================================================
Процедура УмнаяТаблицаExcel(ИмяФайла, Габариты)
	Попытка
		врExcel = СоздатьОбъект("Excel.Application");     
		врExcel.DisplayAlerts = 0;  // без лишних вопросов
	Исключение
		Сообщить("Excel на компьютере не установлен..","!");
		Возврат;
	КонецПопытки;
	врКнигаТемп = врExcel.WorkBooks.Open(ИмяФайла); //открываем файл
	врExcel.Visible = 1; // пусть будет видимый для пользователя
	врЛистТемп = врКнигаТемп.WorkSheets(1); // получаем 1 лист
	врЛистТемп.Name = "Данные"; // переименовываем его
	// получаем диапазон ячеек данными
	врДиапазон = врЛистТемп.Range(врЛистТемп.Cells(Габариты.Получить("Верх"), Габариты.Получить("Лево")),врЛистТемп.Cells(Габариты.Получить("Низ"), Габариты.Получить("Право")));
	// создаем умную таблицу
	врУмнаяТаблица = врЛистТемп.ListObjects.Add(глКонстантыExcel.Получить("xlSrcRange"), врДиапазон, глКонстантыExcel.Получить("False"), глКонстантыExcel.Получить("xlYes"));
	// задаем ей имя
	врУмнаяТаблица.Name = "SmTable1";
	// получаем PivotCahce - вот тут я особенно долго мучался и так и не нагуглил ответа
	// даже немного повезло, дело в том, что я вызывал PivotCaches.Create(...,
	// а оказалось, что PivotCaches - это не коллекция, а метод, возвращающий коллекцию,
	// и обращаться к нему надо PivotCahces().Create(...
	врКэшДляСвода = врКнигаТемп.PivotCaches().Create(глКонстантыExcel.Получить("xlDatabase"), "SmTable1");
	// создаем новый лист, куда помести уже сводную таблицу
	врНовЛист = ПолучитьЛистExcel(врКнигаТемп, врЛистТемп, "Свод");
	// ну и, наконец, создаем саму сводную таблицу
	// в качестве последнего параметра я передаю имя умной таблицы, так как у Microsoft
	// в описании сказано, что следует передавать имя, потому что при передаче объекта 
	// может "неожиданно возникнуть ошибка" (с) Microsoft
	врСвод = врКэшДляСвода.CreatePivotTable(врНовЛист.Cells(2,2), "PvTable1");
	
КонецПроцедуры

В приложенном файле в архиве таблица Excel с кодами констант Excel и их числовыми значениями.

Вот такой вот пример. По правилам надо указать точную версию, где тестировалось - это 1С 7.70.027 (правда, 7.7 уже давно не обновляется).

Excel PivotTable СводныеТаблицы КонстантыExcel

См. также

Банковские операции Загрузка и выгрузка в Excel Бухгалтер Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Бухгалтерский учет Платные (руб)

Решение предоставляет комплексную загрузку банковской выписки из CSV, XLS, TXT файла в 1С 7.7 любой конфигурации. Позволяет создавать документы выбранного вида, например "Строка выписки банка (приход/расход)", или многострочный табличный документ, например Выписка, для каждой операции из загружаемого файла банковской выписки. Загружает реквизиты документа, а также создаёт контрагентов и другие необходимые элементы справочников.

3588 руб.

29.07.2021    22291    14    22    

15

Загрузка и выгрузка в Excel ККМ Программист Бухгалтер Пользователь Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Бухгалтерский учет Управленческий учет Абонемент ($m)

Выполняет выгрузку товаров (всех, только с признаком в прайсе, только из указанной папочки) с гибкой настройкой выгружаемых данных. Формируется файл в формате XLSX подходящий для прямой удаленной загрузки в кассовый аппарат АТОЛ 91Ф/92Ф и им подобных, имеющих управление через Личный кабинет АТОЛ (lk.atol.ru).

1 стартмани

31.01.2021    8321    2    &-rey    1    

4

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Программист Пользователь Платформа 1С v7.7 1С:Комплексная 7.7 Управленческий учет Абонемент ($m)

Обработки группового дополнения данных о номенклатуре. Ввод веса и объема существующих товаров вручную в форму таблицы значений и затем запись в справочник Номенклатуры и Единиц. Закачка весов и объемов существующих товаров из Эксель в справочник Номенклатуры и Единиц. Загрузка внешних кодов товаров из Эксель в справочник Номенклатуры. Редактирование внешних кодов товаров в форме списка. Дозаполнение реквизитов существующих товаров из Эксель (ключевые поля - штрихкод, наименование, внешний код).

1 стартмани

11.10.2019    12059    2    ksnik    2    

2

Оптовая торговля Загрузка и выгрузка в Excel Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)

В данной публикации приведены примеры обработок обмена дистрибьютора с поставщиками и покупателями через Эксель. Создание товаров-новинок. Автоматическое формирование Заказа поставщику по продажам. Заполнение бланка заказа поставщику. Загрузка приходной накладной от поставщика. Загрузка любых справочников из Эксель, например товарных сертификатов. Выгрузка прайслиста в бланк заказа (создание бланка заказа). Загрузка заявки покупателя из произвольного файла Эксель. Загрузка заявки покупателя из бланка заказа.. Для работы требуется установленный MS Excel.

1 стартмани

08.09.2019    16452    10    ksnik    2    

3

Загрузка и выгрузка в Excel Перенос данных 1C Программист Пользователь Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 1С:ERP Управление предприятием 2 Абонемент ($m)

Описание технологии загрузки любых адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3 на примере ERP. Предлагаемый способ просто чудо, он гарантирует результат, он очень простой и качественный! Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С!

1 стартмани

16.08.2019    19584    18    ksnik    12    

8

Загрузка и выгрузка в Excel Оптовая торговля Розничная торговля Перенос данных 1C Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Управление торговлей 10 1С:Комплексная 7.7 1С:ERP Управление предприятием 2 Управленческий учет Абонемент ($m)

Описание практического опыта переноса данных из двух устаревших учетных систем в одну современную с обобщением справочников (например номенклатуры, контрагентов, партнеров) и объединением учетных данных устаревших систем в единую новую УС применяя комбинацию стандартной загрузки из Эксель и КД2. Данная публикация является примером переноса данных из сильно устаревших и сильно переписанных конфигураций 1С:Предприятия 7.7 и 8 в современную 1С 8.3 своими силами при условии невозможности или нежелания пользоваться обновлением релизов и типовой функциональностью универсального обмена данными типовых мастеров переноса данных. Отличительной особенностью публикации является устранение зависимости от версий релиза конфигураций, отказ от обновлений устаревших конфигураций.

1 стартмани

29.07.2019    21369    16    ksnik    0    

6
Оставьте свое сообщение