1с табличный документ в excel с формулами

Содержание:

1.       Основная информация про перенос формул 1С 8.3

2.       Алгоритм интеграции Excel

1.    Основная информация про перенос формул 1С 8.3

Коллеги, в данной статье будут рассмотрены алгоритмы записи и переноса из системы программ 1С:Предприятие формул в ячейки Excel. Так как существует множество интеграций Excel с системой 1С, то у многих возникает вопрос о переводе формул из 1С 8.3 Предприятие в MS Excel. Проще всего понять алгоритм на примерах задач, поэтому таким способом и будет задаваться «настроение» данной статьи.  

2.    Алгоритм интеграции Excel

Создадим следующий пример указания формулы внутри ячейки: Пусть в MS Excel Cells (1,3) необходимо переместить формулу вида «=СЦЕПИТЬ(Е1;С7). Для начала стоит заметить, что визуализация функций в ячейках MS Excel обычно не знакома разработчикам 1С, поэтому лучше приводить в вид функции Excel на VBA – это особый диалект языка Visual Basic, который расширяет возможности данного языка программирования и необходим для того, чтобы производить работу с различными приложениями Microsoft Office. Но для этого надо знать название каждой соответствующей функции Excel на VBA.

Для обеспечения данной операции нужно следовать такому алгоритму:

1. Создать и открыть новую книгу в MS Excel;

2. Перейти во вкладку меню «Сервис», после чего выбрать «Макрос», кликнуть на «Начать запись» и подтвердить, нажав на «ОК». После данного действия откроется небольшое окно, в котором будет кнопка квадратного типа, его закрывать нельзя;

3. Далее выбираем ячейку «С1», кликнув на неё, и прописываем в ней нужную нам формулу: «=СЦЕПИТЬ(Е1;С7);

4. Далее кликаем на квадратную кнопку, речь о которой шла выше, после этого действия мы одержали нужный нам макрос на VBA для Excel.

Далее следует проверить результат: для этого переходим во вкладку меню «Сервис», после чего выбираем «Макрос», кликаем на «Макросы», в данном пункте появится созданный в пункте выше «Макрос1». Кликаем на него и выбираем «Войти». После проделанных действий откроется редактор VBA, который является встроенным, и схож с конфигуратором 1С. Далее видим следующий текст, который приведён на скриншоте примера кода ниже:

Рис. 1 Программный код в редакторе VBA

По факту, в этом программном коде нам необходимы лишь следующая строчка:

Рис. 2 Строчка программного кода в редакторе VBA

Данная формула и будет тем, что при работе в системе 1С:Предприятие нужно ввести после «=». Проверим, как будет это выглядеть в коде конфигуратора 1С:

Рис. 3 Программный код при работе в системе 1С:Предприятие

Все действия сработали.

В результате, не трудно заметить, что строчку, представленную на рисунке 4, можно заменить на строчку, показанную на рисунке 5:

Рис. 4 Исходная строчка программного кода при работе в системе 1С:Предприятие



Рис. 5 Нужная строчка программного кода при работе в системе 1С:Предприятие

В этом случае результат останется прежним, но возможностей прибавится.

Таким образом, получение любой формулы из 1С 8.3 в MS Excel будет выглядеть аналогичным образом.

Можно рассмотреть ещё одну задачу: допустим при работе с таблицами MS Excel нужно чтобы при открытии файла в таблице был фильтр по заданным параметрам, как на скриншоте ниже:



Рис. 6 Фильтр по заданным параметрам при работе с таблицами MS Excel

В результате необходимо получить всю продукцию, количество которой, например, 11 единиц.

В этом случае программный код на платформе системы 1С:Предприятие будет выглядеть следующим образом:

Рис. 7 Программный код на платформе 1С:Предприятие

Специалист компании «Кодерлайн»

Айдар Фархутдинов

   DmitriyDI

24.05.18 — 15:36

Добрый день!

Есть табличный документ, в ячейке пишу: «=R6C2 — R10C2 — R12C2 — R14C2 — R17C2», сохраняю, таб. док сохраняю через Записать().

В сохраненном документе, отображается вместо моей формулы текст, если два раза по нему нажать, то появляется формула, как можно сделать, чтобы формула появлялась сразу при открытии эксель файла?

   DmitriyDI

1 — 24.05.18 — 15:40

(0) Может какой скрипт после сохранения над файлом экселевским выполнить. Или может обойти его перебором и что-нибудь указать?

   Масянька

2 — 24.05.18 — 15:42

(0) В настройках Excel — «показывать формулы, а не их значения».

   bolobol

3 — 24.05.18 — 15:44

(2) Это как поможет?

   DmitriyDI

4 — 24.05.18 — 15:47

(2) Это не то

   DmitriyDI

5 — 24.05.18 — 15:51

(0) пока выход видится такой, после сохранения подключаться к файлу, пробегать перебором, если текст ячейки начинается с =, то писать что-то вроде Ехсел.Cells(1, 3).FormulaR1C1.FormulaR1C1 = «=R6C2 — R10C2 — R12C2 — R14C2 — R17C2»;

   Gantosha

6 — 24.05.18 — 15:54

FormulaR1C1 ты формулу куда пишешь — ее вот сюда надо писать .

   DmitriyDI

7 — 24.05.18 — 15:55

(6) я формулу пишу в табличный документ 1Совский)) потом сохраняю как эксель

   Gantosha

8 — 24.05.18 — 15:57

ну, ето я не знаю ..у мне есть формулы , но там сохраняется в лист .. правда механизм расчета куда что писать дикий.

Но видимо с формулами и записью в 1с отчет тоже не прокатило. Иначе бы не стал мучатся.

   DmitriyDI

9 — 24.05.18 — 16:32

Есть еще варианты решения данной задачи? Пока пытаюсь заставить ком экселевский работать на сервере.

   bolobol

10 — 24.05.18 — 16:38

Можно попробовать в Эксель.Аппликейшн открыть этот файл и Селект(); Селектион.Реплэйс(«=», «=»); сделать. Интерактивно срабатывает.

   DmitriyDI

11 — 24.05.18 — 17:01

(10) Понял, спасибо! Буду пробовать.

   DmitriyDI

12 — 24.05.18 — 17:33

(0) дописал так, работает, если кому нужно (Вложение — полное имя сохраненного файла эксель):

    Excel = Новый COMОбъект(«Excel.Application»);  

    Книга = Excel.WorkBooks.Open(Вложение);

    Excel.Visible = 0;

    Excel.ActiveWindow.DisplayWorkbookTabs = 1;

    Excel.ActiveWindow.TabRatio = 0.6;    

    
    Лист = Книга.WorkSheets(1);

    
    ВсегоСтрок = Лист.Cells.SpecialCells(11).Row; //-кол-во строк всего

    ВсегоКолонок = Лист.Cells.SpecialCells(11).Column; //-кол-во колонок всего

    
    Для а = 1 По ВсегоСтрок Цикл

        Для б = 1 по ВсегоКолонок Цикл

            Если Лев(Лист.Cells(а, б).FormulaR1C1, 1) = «=» Тогда

                Лист.Cells(а, б).FormulaR1C1 = Лист.Cells(а, б).FormulaR1C1;

            КонецЕсли;

        Конеццикла;

    Конеццикла;

    
    FullName = Excel.ActiveWorkbook.FullName;            

    Excel.DisplayAlerts = false;

    Excel.ActiveWorkbook.SaveAs(FullName, 51); // 18 — xls 97-2003; 51 — xlsx 2007-2013

    //Excel.Visible = 1;       // если нужно поработать дальше с книгой

    Excel.Application.Quit(); // если просто выходим

   bolobol

13 — 25.05.18 — 09:15

А не проверял, случаем, с Селект(); Селектион.Реплэйс(«=», «=»); ? — не работает?

   DmitriyDI

14 — 25.05.18 — 09:56

(13) нет, точно синтаксиса не знаю, поэтому не стал

   bolobol

15 — 25.05.18 — 10:18

Для колонки «й», как взять именно колонку целиком, или от колонки до колонки, или весь лист — чтоб более просто — не скажу, а и почему именно так написано — тоже, Параметры — первый «на что меняем», а далее что за ,2,1,0,0 — тоже не вспомню, но, думаю, МСДН может пролить свет:

                                Эксель.Range(Эксель.Sheets(_ИспользуемаяСтраница).Cells(_НомерСтрокиЗаголовков+1,й),

                                    Эксель.Sheets(_ИспользуемаяСтраница).Cells(КонечнаяСтрокаДанных,й)).Select();

                                Эксель.Selection.Replace(«Истина», 1, 2, 1, 0, 0);

                                Эксель.Selection.Replace(«Да», 1, 2, 1, 0, 0);

                                Эксель.Selection.Replace(«Нет», 0, 2, 1, 0, 0);

                                Эксель.Selection.Replace(«Ложь», 0, 2, 1, 0, 0);

   bolobol

16 — 25.05.18 — 10:19

Первый — «что меняем», в второй — «на что», и далее «,2,1,0,0»- непонятных

   bolobol

17 — 25.05.18 — 10:20

Эксель = новый COMОбъект(«Excel.Application»);

  

DmitriyDI

18 — 30.10.18 — 17:56

(15)  работает, и быстрее чем мой вариант, этот вариант в итоге и оставил.

Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа » Внешние источники данных» и назовем его просто » Excel» .
https://helpf.pro/uploads/img


Автоматическая установка ширины колонки табличного документа. 0
Процедура, которая » примерно» делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего:
Процедура РасчетШириныКолонок(Табличный


Активация открытой книги Excel для корректировки 0
Нужно было получить для изменения уже открытую книгу Excel, а если она закрыта, то открыть и изменять.
Ниже код, который данную задачу решает.
Попытка
Эксель = Неопределено;
Книга = Неопределено;
Лист = Неопределено;
Состояние(» Выполняется


Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX
Перем СерверExcel;
Процедура КнопкаВыполнитьНажатие(Кнопка)
ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС);
КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count;
КоличествоКолонокДанных=ФайлХЛС.ActiveSheet


Быстрая функция чтения данных с листа Excel 10
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки ра


Посмотреть все результаты поиска похожих

В статье рассмотрены основные методы работы с массивами в 1С

В данной статье рассмотрен пример передачи данных из табличной части документа в параметр.

Для решения этой проблемы достаточно установить пользователя под которым будут выполняться регламентные задания.

Функция пропорционально распределяет сумму на необходимое количество

В тех случаях, когда возникает необходимость отключить авторегистрацию объектов, при записи объекта следует устанавливать дополнительное свойство.

В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам…

Примеры программного заполнения параметров и отборов для отчетов СКД

Примеры создания простых типов в 1С. Числа, строки ,логические, символы.

Данная функция преобразовывает Фамилию Имя Отчество в Фамилия И.О.

Примеры работы с деревом значений в 1С. Добавление, удаление, перемещение строк, создание копии, сортировка данных и др.

Примеры создания дерева значений, массивов, словарей, списка значений, структуры, таблицы значений

Примеры использования условий отбора в запросе 1С. Отборы по дате, по объектам, по параметрам и др.

Для анализа способов записи мы создали обработку, которая записывает файл Excel в двух вариантах. Форма обработки показана ниже:

Обработка выполняет запись 3 строк, в каждой строке 5 значений и одна картинка. Код обработки может выполняться как на клиенте, так и на сервере.

Вы можете скачать обработку и ознакомиться с ее работой по ссылке:

Выгрузка через Табличный документ

Это один из самых простых способов записи в xlsx и xls. В 1С в этом варианте Вы будете работать с объектом ТабличныйДокумент. Ниже показан пример записи в табличный документ, который Вы также можете найти в прилагаемой выше обработке:

&НаКлиенте
Процедура ВыполнитьЗаписьЧерезТабличныйДокумент()
	ТабДок = Новый ТабличныйДокумент;
	Для СтрокаНомер = 1 По 3 Цикл
		//Записываем значения строки
		Для КолонкаНомер = 1 По 5 Цикл
			Область = ТабДок.Область(СтрокаНомер, КолонкаНомер);
			Область.Текст = СтрокаНомер * КолонкаНомер;
		КонецЦикла;
		//Записываем изображение
		Область = ТабДок.Область(СтрокаНомер, 6);
		Область.Картинка = Элементы["Изображение" + СтрокаНомер].Картинка;
	КонецЦикла;
	ТипФайла = ТипФайлаТабличногоДокумента.XLSX; //Если запись в формате xls - тип файла ТипФайлаТабличногоДокумента.XLS97
	ТабДок.Записать(Каталог + "Тест.xlsx", ТипФайла);
КонецПроцедуры

Плюсы данного метода записи:

  • Не нужно устанавливать Excel на клиенте/сервере.
  • Не нужно реализовывать масштабирование изображений — Вы устанавливаете только ширину/высоту ячейки.
  • Высокая скорость записи т.к. не используется прослойка в виде COMОбъекта.

Минусы:

  • Нет возможности устанавливать формулы для ячеек.
  • Неконтролируемая конвертация табличного документа в документ Excel.  Как пример — могут смещаться изображения.

Замер производительности показывает общее время записи 0,28 сек.

Выгрузка через Excel

В этом варианте запись выполняется с помощью COMОбъекта Excel — устанавливаем соединение с Excel, создаем книгу и размещаем данные на ее листах. Обязательно закрываем книгу и соединение!

&НаКлиенте
Процедура ВыполнитьЗаписьЧерезExcel()
	Эксель = Новый COMОбъект("Excel.Application");
	Эксель.DisplayAlerts = 0;
	Эксель.ScreenUpdating = 0;
	Эксель.EnableEvents = 0;
	Книга = Эксель.WorkBooks.Add();
	Лист = Книга.WorkSheets(1);
	Для СтрокаНомер = 1 По 3 Цикл
		//Записываем значения строки
		Для КолонкаНомер = 1 По 5 Цикл
			Лист.Cells(СтрокаНомер, КолонкаНомер).Value = СтрокаНомер * КолонкаНомер;
		КонецЦикла;
		//Записываем изображение
		СтрокаКартинка = Элементы["Изображение" + СтрокаНомер].Картинка;
		ВременныйФайл = ПолучитьИмяВременногоФайла("" + СтрокаКартинка.Формат());
		СтрокаКартинка.Записать(ВременныйФайл);
		ЛистИзображение = Лист.Shapes.AddPicture(ВременныйФайл, Ложь, Истина, Лист.Cells(СтрокаНомер, 6).Left + 1, Лист.Cells(СтрокаНомер, 6).Top + 1, -1, -1);
		ЛистИзображение.Placement = 1;
		ЛистИзображение.LockAspectRatio = 0;
		//Масштабирование изображения
		ЛистИзображение.Width = 47;
		ЛистИзображение.Height = 29;
		Лист.Rows(СтрокаНомер).RowHeight = 33;
		ЛистИзображение.Height = 29;
		УдалитьФайлы(ВременныйФайл);
	КонецЦикла;
	ТипФайла = 51; //Если запись в формате xls - тип файла -4143
	Книга.SaveAs(Каталог + "Тест.xlsx", ТипФайла);
	Попытка
		Книга.Close(Ложь);
		Эксель.DisplayAlerts = 1;
		Эксель.Quit();
	Исключение
		Информация = ИнформацияОбОшибке();
		Сообщить(Информация.Описание);
	КонецПопытки;
КонецПроцедуры

Плюсы данного метода записи:

  • Полный контроль над процессом записи.
  • Доступ практически ко всем возможностям Excel.

Минусы:

  • Нужно устанавливать Excel на клиенте/сервере.
  • Нужно реализовывать масштабирование изображений. Алгоритм записи должен позиционировать изображение в ячейке устанавливая ширину и высоту. Также нужно настраивать высоту строки.
  • Низкая скорость записи.

Замер производительности показывает общее время записи 0,86 сек. Это в 3 раза медленнее чем запись через Табличный документ. По своему опыту можем отметить — медленнее может быть в 10 и более раз!

Итоги

При выборе варианта выгрузки лучше смотреть на поставленную задачу. Оптимально использовать запись через Табличный документ — многие моменты записи будут упрощены. Можно объединять 2 варианта записи — основу записывать через Табличный документ, а формулы добавлять с использованием Excel. Такая запись будет производительнее чем полная запись через Excel.

Наши разработки:

Like this post? Please share to your friends:
  • 1с способы чтения excel
  • 1с сохранить табличный документ в excel программно на сервере
  • 1с сохранить табличный документ в excel программно на разные листы
  • 1с сохранить табличные документы в разные листы excel
  • 1с сохранить таблицу значений в файл excel программно