Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Вывод отчета в Эксель (http://forums.kuban.ru/f1040/vyvod_otcheta_v_eksel--5701940.html)

Pusto 13.05.2014 10:08

Вывод отчета в Эксель
 
Нужно сделать так чтобы при выполнении отчета программно сохранялся как в таблицу так и в Эксель.

Ткачик 13.05.2014 10:09

Нужно сделать - делай!

Helen1986 13.05.2014 10:15

(0) - заплатить одноЭснику

user1C 13.05.2014 10:16

разрешаю...

oxo 13.05.2014 10:39

шутники :)

Sisoy 13.05.2014 10:54

(0) Разрешаю.
ТабличныйДокумент (SpreadsheetDocument)
Записать (Write)
Синтаксис:

Записать(<ИмяФайла>, <ТипФайлаТаблицы>)

ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType)
Значения

ANSITXT (ANSITXT)
DOCX (DOCX)
HTML (HTML)
HTML3 (HTML3)
HTML4 (HTML4)
MXL (MXL)
MXL7 (MXL7)
ODS (ODS)
PDF (PDF)
TXT (TXT)
XLS (XLS)
XLS95 (XLS95)
XLS97 (XLS97)
XLSX (XLSX)

bma1 13.05.2014 10:54

в 7-ке это делается одним способом
в 8-ке без СКД и Построителя отчета - другим
в 8-ке без СКД с Построителем отчета - третьим
в 8-ке с СКД - четвертым
а если бедет УФ, то еще пара способов есть...
Выбирай.

Helen1986 13.05.2014 15:06

убейте пятого - все одно он лох

VZ 13.05.2014 16:59

Убить всех: ТС пометил тему "v7" ;)
Поэтому;
1. Использовать метод Записать() со вторым параметром XLS, или HTM, или HTML.
2. Через запись файла екселя по OLE.
3. Через приблуды, называемые ВК
4. Через одноэсовскую приблуду "Работа с файлами": поддерживает командную строку, работает в любой винде, бесплатна (т.е. халява)

DeiMos 14.05.2014 10:22

Обработка "Быстрое сохранение таблиц 1С (mxl) в формате Excel
=============================================================

Обработка создана для решения двух существующих проблем 1С:Предприятия:

* медленное сохранение табличных документов в формате Microsoft Excel.
* некачественное сохранение табличных документов в формате Microsoft Excel.

Проблема 1: Медленное сохранение.
=================================
Суть состоит в том, что время, которое нужно 1С для сохранения, резко возрастает
при увеличении объема сохраняемого документа. Если небольшие документы объемом
до 1-2 тыс. строк 1С сохраняет еще за приемлемое время, то документы объемом
выше 10 тыс. строк могут сохраняться несколько часов (или даже суток).

Проблема 2: Некачественное сохранение.
======================================
Штатный конвертер 1С не отличается высоким качеством. Например, конвертер
не поддерживает текст в ячейках длиной более 255 символов: при сохранении
более длинный текст будет усекаться. Также не поддерживаются ячейки с поворотом
текста, часто ячейки с многострочным текстом имеют высоту в одну строку,
часто не переносятся многострочные объединения ячеек и другое. Подробнее можно
посмотреть на этой странице: [url]http://yoksel.net.ru/ProblemyStandartnogoMxl2Xls[/url]

Данная обработка решает эти проблемы.

Скоростные характеристики.
==========================
Отчет "Анализ продаж", 18 тыс. строк: 4,46 сек.
Отчет "Анализ продаж", 78 тыс. строк: 17,23 сек.
Отчет "Анализ продаж", 184 тыс. строк: 24,44 сек.

(Для таблиц объемом больше 65536 строк сохраняется только 65536 строк -
поэтому разница между временем 78 тыс. и 184 тыс. строк невелика)

Тестовая таблица 10 тыс. строк x 256 столбцов (2,5 млн. ячеек): 57,32 сек.

Преимущества программы по сравнению с другими решениями
=======================================================

Для ускорения сохранения часто используется решение, известное под названием
"патч Ромикса". Решение связано с модификацией кода 1С (патчем).
Отсюда вытекают основные проблемы решения:
- Проблемы при смене релиза 1С - при изменении релиза патч может перестать
работать или вообще приведет к нестабильной работе 1С (аварийные завершения
и возможность потери данных).

- Потенциальная ненадежность: т.к. исходных кодов 1С в открытом доступе
нет, то и нет стопроцентной уверенности в корректности произведенной
модификации.

Используемая в данной обработке внешняя компонента Йоксель не производит
каких-либо модификаций исполняемого кода 1С, поэтому в ней отсутствуют
указанные выше проблемы.

Другая проблема патча - "все равно медленно". В случае использования табличных
документов со сложным форматирование сохранение все равно производится
достаточно медленно. Компонента Йоксель сохраняет таблицы со сложным
форматирование быстро.

Для решения проблем некачественного сохранения табличных документов в Excel
часто применяют различные обработки, которые работает с Excel по технологии
OLE-Automation и либо выполняют конвертирование документов полностью
самостоятельно, либо сначала конвертируют документ стандартным конвертером,
а потом исправляют допущенные конвертером ошибки.

Основной недостаток подобного решения: медленно. Обработки написаны
на встроенном языке 1С:Предприятия и, значит, работают медленно, т.к.
программный код интерпретируется. Далее, тормоза вносит использование
OLE-Automation - данная технология никогда не предназначалась для обмена
большими объемами данных.

Другой недостаток: необходимость наличия Excel. В связи с ужесточением ситуации
с нелицензионным ПО, предприятия часто отказываются от использования
Microsoft Office и переходят на свободное программное обеспечение (OpenOffice).
Поэтому Excel может и отсутствовать. Также бывают ситуации, когда наличие Excel
на компьютере нежелательно - например, в случае терминального сервера.

Компонента Йоксель не требует наличия Excel, поэтому может использоваться там,
где Excel отсутствует. Также Йоксель написан на компилируемом языке - поэтому
работает быстро.


Установка
=========
Для установки нужно следующее:

1) Если у вас еще не установлена FormEx или 1С++ версии 2.0, скопируйте
компоненту FormEx (файл FormEx.dll) в каталог с программными файлами 1С
(например, в каталог C:/Program Files/1Cv77/BIN).

2) Если у вас еще не установлена компонента Йоксель, скопируйте файл
"SpreadSheet.dll" в каталог с программными файлами 1С
(например, в каталог C:/Program Files/1Cv77/BIN).

(если нет возможности разместить внешние компоненты в каталоге программных
файлов, то можно поместить компоненты в каталог информационной базы)

3) Скопируйте файл "Быстрое сохранение mxl в xls.ert" в подкаталог "ExtForms"
каталога информационной базы.

4) В "Конфигураторе" добавьте на какую-нибудь панель инструментов кнопку
следующего вида:
- Объект: "Задача".
- Команда: "Задача.Выполнить".
- Подсказка и короткая подсказка: "Сохранение таблицы в Excel"
- Параметры - Формула: "ОткрытьФорму ("Отчет",,КаталогИБ () + "ExtForms/Быстрое сохранение mxl в xls.ert")"

Использование
=============
Переключитесь на табличный документ 1С, который требуется сохранить в Excel,
и нажмите на созданную в Конфигураторе кнопку. В открывшейся форме укажите,
куда следует сохранить табличный документ и нажмите кнопку "Сохранить".

О программе
===========
Для сохранения табличных документов 1С в формат Excel использована
внешняя компонента "Йоксель". Кроме сохранения таблиц в Excel Йоксель
обладает еще следующими возможностями:
- прямое (без наличия Excel) чтение файлов Excel и конвертирование их в формат
табличных документов 1С с сохранением форматирования;

- преобразование табличных документов в графические файлы форматов
JPEG, PNG, BMP;

- отображение табличных документов на диалоговых формах 1С:Предприятия
с возможностью построения таблиц в режиме ввода данных
нефиксированной структуры.

Сайт проекта: [url]http://yoksel.net.ru[/url]

Для получения активного табличного документа в 1С:Предприятии использована
внешняя компонента FormEx. Компонента реализует ряд возможностей по управлению
интерфейсом 1С:Предприятия и ряд других сервисных функций.

Страница компоненты: [url]http://dorex.ru/?projects&formex[/url]

Связаться с автором данной обработки можно по адресу: [email]uzhast1c@gmail.com[/email]

economist 21.05.2014 15:46

Еще вариант, для непрограммистов: в код отчета добавляете одну вот эту строку:

Записать("C:\1C_OUT\MyOtchet1", "TXT")

А затем открываете Excel, сохраняете чистую книгу в XLSM, запускаете запись макроса, далее ФАЙЛ-ОТКРЫТЬ, настраиваете плюшки и разделители и останавливаете запись макроса. Макрос назначаете на кнопку в XLSM-файле. И этой кнопкой каждый открываете свой отчет.

ПЛЮСЫ: работает быстро, быстрее OLE, COM, ВК и Йокселя в частности, быcтрее ADO, чтения в объект Range, чтения в массив итп.... Быстрее всего...

1 млн строк на 16 тыс. столбцов - ЛЕГКО. А форматирование можно повторить тем же макросом, просто дописав его.

economist 21.05.2014 16:04

Еще в защиту своего TXT-метода реконструкции таблицы в Excel - все вышеперечисленные способы так или иначе некорректно корежат сложноформатированную табличную часть. Даже Йоксель. Для желающих - сохраните например Баланс Йокселем и удивитесь.

Да, в TXT производства 1С - используется разделитель [Tab] - табуляция. Это очень верное решение. Парсится по этому разделителю всегда без проблем.

Чучундер 21.05.2014 17:52

самое главное - сохранять в тэхатэ сложное форматирование

roma n 21.05.2014 18:03

10-economist > Как-то не заморачивался с сохранением таких объёмов в xls(x)... ради интереса: а MS Office за сколько такую таблицу поднимает потом, не умирает?

VZ 21.05.2014 18:51

Если сохраняют в xls тысячи строк, то надо срочно наводить порядок в консерватории.
Бо БД (начиная с ДБФ) придуманы именно для того, чтобы не ползать по тысячам строк, отбирая нужные данные.
Использование таблиц xls в тысячи строк аналогично авиации на конной тяге.

roma n 21.05.2014 19:41

14-VZ > убедить в этом фискалов иногда туго. Легче дать чем отказать. Было дело- выливал напрямик в csv несколько миллионов поводок с текстовым представлением субконто в движениях, а вот что они, болезные, потом с этим счастьем делали ХЗ,- поднять полученный файл даже не пытался

Управление торговлей 11 21.05.2014 20:05

10-economist >записывать макрос вручную? фу. я для расстановки форматов в 1с формировал скрипт на vba, а затем excel его запускал

VZ 21.05.2014 20:07

15-roma n > Сие "продукт" имитационной экономики. Когда кормящиеся из бюджета "частные предприниматели" имеют возможность кормить некомпетентных "специалистов".

economist 22.05.2014 10:23

Чучундер - сложное форматирование легче повторить макросом в Excel на голом TXT, чем тащить его через OLE. Плюс можно сделать массу разумных упрощений.

Вот например дятлам из компании 1С было недосуг посмотреть на то, что делают юзвери с их типовыми отчетами. Глядишь, они бы получше и попроще их сверстали. Есть масса грубейших эргономических просчетов, за которое ЗАО 1С нужно поставить двойку.

К примеру, почему во всех типовых отчетах отсутствуют обязательные к пониманию "размерности", такие как ед. измерения? Масло в литрах, бочках и тоннах выглядит абс. одинаково.

А цена? Где цена??? Почему 300 тыс. бухов в РФ каждый день десятки раз делят сумму на кол-во на калькуляторе?

Почему нет кол-го учета на 90-х счетах, ведь это жутко удобно, и все знают что группы спр-в Номенклатура и Виды Н. - все без исключения юзвери создают в рамках одной размерности (или хотя бы весовой, как наиболее универсальной)?

Почему нет банальнейшего контроля уникальности субконто? Я видел много баз, и скажу что на 10 тыс. контрагентов - всегда будет 100 двойников и 50 "однофамильцев".

Все это колоссальнейшие "драйверы" роста числа ошибок.

А форма отчетов? В 90% случаев типовые отчеты юзверя сохраняют в Excel и дорабатывают, включают фильтры, меняют параметры страницы для печати итп. Знаете как выглядит самый распространенный в РФ "черновик"??? - это лист карточки счета 1С, на котором есть лишь одна колонка - сальдо конечное. А за дефолтные поля по 20 мм всех 1-сников надо выгнать садить новые леса.

roma n - Excel 2007 таблицу на 300 тыс. строк и 10 полей из TXT открывает/парсит за 10-12 секунд. Вообще производительность Excel (с формулами, автофильтрами итп) - резко падает с >100k строк. У нового LibreOffice с поддержкой вычислений формул на GPU - этой ступеньки нет.

VZ - вы давно или просто не работали в новом Excel/Calc. Во-первых, объемы "тысячи строк" для табличных процессоров легки, поскольку внутреннее представление данных в файлах XLS/ODS - аналогично продвинутым СУБД. Там есть те же индексы, триггеры, хранимые процедуры, польз. функции, кэш, система транзакций, многопользовательский конкурентный доступ и даже язык автоматизации (это я про VBA). И все это вполне работает на разумных объемах до 100K строк до 200 полей.

А такие расширения как PowerPivot - делают Excel применимым на многомилионных базах. И неважно где лежат сами исходные данные - в TSV, в СУБД (потом десятки тысяч строк для анализа подтягиваются через упомянутый PP или через ODBC) - главное что Excel позволяет динамически манипулировать этими данными безо всяких UPDATE, просто включив Автофильтр и используя Автозаполнение отфильтрованных ячеек, и в этом плане Excel не заменит ни одна СУБД.

Управление торговлей - макрос легче записать, а затем вручную подсократить, чем высматривать по F2 в Object Browser каждые нужные метод/свойство. Я, например, не заморачиваюсь запоминать vb-константы, номера цветов, имена функций, если макрорекордер мне сам их поставит как надо. Вы за ради интереса попробуйте отобразить рядом два окна - Exel и VBA в режиме записи макроса и произведите необходимые действия в листе - будет приятно удивлены скоростью трансляции их в программный код (а также мыслями, как это все улучшить). По сравнению с сидением в пофигураторе и отладчике 1С с кодом VBA и OLE - это как елей на душу.


Текущее время: 15:26. Часовой пояс GMT +3.