Выгрузка формул из 1с в excel
Существует несколько способов программной работы с файлами Excel из 1С. Каждый из них имеет свои преимущества и недостатки.
Обмен через табличный документ
Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:
- Записать (< ИмяФайла >, < ТипФайлаТаблицы >) для выгрузки данных в файл;
- Прочитать (< ИмяФайла >, < СпособЧтенияЗначений >) для загрузки данных из файла.
Внимание!
Метод Записать () доступен как на клиенте, так и на сервере. Метод Прочитать () доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.
Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:
ТабДок . Записать ( ПутьКФайлу , ТипФайлаТабличногоДокумента . XLSX );
Загрузка из файла осуществляется также достаточно просто:
ТабДок = Новый ТабличныйДокумент ;
ТабДок . Прочитать ( ПутьКФайлу , СпособЧтенияЗначенийТабличногоДокумента.Значение );
Обмен через OLE
Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:
- На компьютере конечного пользователя, если обмен происходит на стороне клиента;
- На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.
Пример выгрузки:
Примеры чтения:
Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:
Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:
ВсегоКолонок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Column ;
ВсегоСтрок = Лист . Cells ( 1 , 1 ). SpecialCells ( 11 ). Row ;Область = Лист . Range ( Лист . Cells ( 1 , 1 ), Лист . Cells ( ВсегоСтрок , ВсегоКолонок ));
Данные = Область . Value . Выгрузить ();
В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:
Для того, чтобы узнать какое свойство нужно менять или какой метод вызвать можно воспользоваться макросами Excel. Если записать макрос с требуемыми действиями, то после можно посмотреть программный код на VBA записанного макроса.
Использование COMSafeArray
Обмен через ADO
Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.
Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.
Пример выгрузки:
Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table. В этом случае код примет вид:
В приведенном примере в методе
во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:
Пример чтения:
В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:
В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:
- Connection;
- Command;
- Recordset;
- Record;
- Fields;
- Stream;
- Errors;
- Parameters;
- Properties.
Выгрузка без программирования
Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.
В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.
Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:
Остались вопросы?
Спросите в комментариях к статье.
Отчетов таких была написана куча и на доработку каждого требовалось куча времени. Я захотел попробовать найти какой-нибудь новый подход - все формулы засунуть в макет. Но меня поджидал облом. С простыми формулами типа "=RC[-2]-RC[-1]" все было замечательно - внести как текст и все ок, но, когда потребовалось реализовать формулу чуть посложнее, типа "=СУММ(R[1]C:R[КоличествоСтрок]C)", то тут ждал облом. Тут сразу напрашивается шаблон, но как оказалось, шаблон никак не хотел выводить символ "[", т.к. для 1С это служебный символ, определяющий параметры для шаблона. Поиск в инете типа "как вывести квадратные скобки в шаблоне макета" ничего не дал, вообще ничего не дал! Путем проб и ошибок выяснилось, чтоб вывести "КакойТоТекст[1]" нужно задать "КакойТоТекст [ [1]". А вот чтоб задать "КакойТоТекст[1]ещё[ КоличествоСтрок ]", где КоличествоСтрок - это параметр, который нужно менять, то тут нужно извратиться по жёсткому - "КакойТоТекст [] [[1]ещё [] [[[ КоличествоСтрок ]]". Конструкция [] - нужна, чтоб не удалялся текст - "КакойТоТекст".
Итого: копируем формулу Excel, модифицируем её:
1. заменяем " ; " на " , "
2. к неизменным значениям в скобках добавляем спереди [] [
3. изменяемые значения в скобках обворачиваем [] [[изменяемое значение в скобках]. И макет готов.
И тогда весь код при формировании Excel будет минимальным:
Эксель = Новый COMОбъект("Excel.Application");
Эксель.Application.DisplayAlerts = False;
Эксель.Application.ReferenceStyle = "xlR1C1";
Эксель.Application.ErrorCheckingOptions.InconsistentFormula = Ложь;
ВсегоКолонок = ТабличныйДокумент.ШиринаТаблицы;
ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы;
МассивКом = Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).FormulaR1C1;
Для Ном = 1 По МассивКом.GetLength(0) Цикл
Для Ном2 = 1 По МассивКом.GetLength(1) Цикл
Значение = МассивКом.GetValue(Ном,Ном2);
Если НЕ Найти(Значение, "") = 0 Тогда
МассивКом.SetValue(Ном, Ном2, СтрЗаменить(Значение, "", ""));
КонецЕсли;
КонецЦикла;
КонецЦикла;
Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).FormulaR1C1 = МассивКом; //Если тут ошибка, то скорее всего косяк в формуле
Как вы будете использовать макет - это ваше дело, хотите формируйте отчет через СКД используя Макет, хотите выводите отчет алгоритмически. В приложенном файле, я использую алгоритмическое формирование табличного документа (через СКД не получилось получить КоличествоСтрок), а затем формирую Excel файл из него. Приложенный файл это шаблон для ознакомления с подходом, он будет запускаться в Бухгалтерии, УТ, в общем там где есть регистр сведений ЦеныНоменклатуры.
Конечно формула в таком виде "=КакойТоТекст [] [[1]ещё [] [[[ КоличествоСтрок ]]" мне не очень нравится. Если кто-нибудь знает, как можно представить формулу в более наглядном виде, был бы рад узнать.
а вообще то "выгружать можно по-разному, можно по OLE прицепиться к экселю, и непосредственно в нем уже все формировать. Можно просто сформировать таблицу одинэсовскую и сохранить как экселевскую, можно использовать внешнюю компоненту, можно использовать йоксель. Миллион вариантов. Нужно знать каким способом это делается чтобы что-то конкретное советовать."! сказал специалист по 1с в ответ на ваш вопрос
Последний раз редактировалось eikhner; 16.10.2012 в 21:49 .Покажите исходный (выгруженный из 1С) файл Excel,
и пример того, во что должен превратиться этот файл (после превращения формул в формулы)
Макрос можете сами записать, и сохранить в личной книге макросов.
Для этого, включите запись макросов, и произведите замену по всей книге знака = на знак =
(это «оживит» имеющиеся на листе формулы)
Покажите исходный (выгруженный из 1С) файл Excel,
и пример того, во что должен превратиться этот файл (после превращения формул в формулы)
Макрос можете сами записать, и сохранить в личной книге макросов.
Для этого, включите запись макросов, и произведите замену по всей книге знака = на знак =
(это «оживит» имеющиеся на листе формулы)
Спасибо за ответы, изначально я просто не понимал многого.
Действительно, есть Ёксель, с ним можно много сделать. Но все же непонятно, почему экспорт из 1С есть, но формулы он не переносит.
Спасибо, дальше сам разберусь, я все уже понял. Я думал тут засада от недостатка знаний как передать формулы, а они тупо заведомо не передаются, стандартными средствами даже нет такого. И все же не правильно мне кажется каждый раз выгружая прайс (а это бывает и не по разу в день) колдовать со всякими = . Люблю, когда все само автоматически красоту наводит.
Не забуду если, после решения поделюсь опытом. И ваще по 1С узкоспециализированные все форумы, чего-то более менее сходу понятного добиться с них ваще не реально. Там такие мозги сидят, для них вопрос по формулам смешон.
Выгрузка данных из 1С в Excel - задача, которая встречается довольно часто, но, к сожалению, не все пользователи знают как ее правильно решить.
Хорошая новость заключается в том, что сделать это очень просто, буквально в 2 клика мышкой.
Выгрузка данных из отчетов 1С в Excel
Для начала откроем отчет. Любой. В нашем примере мы рассмотрим два отчета: один из УНФ, другой из УТ.
✅ Способ №1 (Подходит для всех конфигураций)
Нажмите на клавиатуре Ctrl+S. Самый универсальный способ.
✅ Способ №2 (Конфигурации на управляемых формах)
Нажать на иконку с дискетой в правом верхнем углу
✅ Способ №3 (Конфигурации на обычных формах)
Нажать файл, затем "сохранить" или "сохранить как". Или нажать на на иконку с дискетой.
✅ Способ №4 (Сохранение данных по нажатию кнопки из формы отчета)
Во многих типовых конфигурациях на форму отчета выведены кнопки, при нажатии на которые, можно сохранить данные.
Вне зависимости от способа, которым вы воспользуетесь, откроется окно сохранения файла.
В этом окне нужно указать адрес папки, в которую вы хотите сохранить файл:
Затем необходимо указать имя файла:
Обязательно указываем тип файла (выбираем старый или новый формат Excel).
Кстати, не обязательно выбирать именно Excel, если вам нужно сохранить данные в Word или PDF - просто выберите интересующий вас формат в списке.
После этого нажимаем на кнопку "Сохранить":
Файл с данными из отчета в формате Excel появится в указанной вами папке :)
Сохранение данных из списков и табличных частей в Excel
Еще одна полезная фишка, о которой стоит рассказать.
А вы знали, что практически любой список или табличную часть документа из 1С можно запросто сохранить в Excel? Теперь знаете.
Управляемые формы
Для примера откроем список заказов клиентов в УНФ:
Перед тем, как вывести его на печать, возможно? вы захотите установить период, а также нужные вам отборы.
Читайте также: