Содержание:
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С:Предприятие
Специалист компании «Кодерлайн»
Айдар Фархутдинов
24.05.18 — 15:36
Добрый день!
Есть табличный документ, в ячейке пишу: «=R6C2 — R10C2 — R12C2 — R14C2 — R17C2», сохраняю, таб. док сохраняю через Записать().
В сохраненном документе, отображается вместо моей формулы текст, если два раза по нему нажать, то появляется формула, как можно сделать, чтобы формула появлялась сразу при открытии эксель файла?
1 — 24.05.18 — 15:40
(0) Может какой скрипт после сохранения над файлом экселевским выполнить. Или может обойти его перебором и что-нибудь указать?
2 — 24.05.18 — 15:42
(0) В настройках Excel — «показывать формулы, а не их значения».
3 — 24.05.18 — 15:44
(2) Это как поможет?
4 — 24.05.18 — 15:47
(2) Это не то
5 — 24.05.18 — 15:51
(0) пока выход видится такой, после сохранения подключаться к файлу, пробегать перебором, если текст ячейки начинается с =, то писать что-то вроде Ехсел.Cells(1, 3).FormulaR1C1.FormulaR1C1 = «=R6C2 — R10C2 — R12C2 — R14C2 — R17C2»;
6 — 24.05.18 — 15:54
FormulaR1C1 ты формулу куда пишешь — ее вот сюда надо писать .
7 — 24.05.18 — 15:55
(6) я формулу пишу в табличный документ 1Совский)) потом сохраняю как эксель
8 — 24.05.18 — 15:57
ну, ето я не знаю ..у мне есть формулы , но там сохраняется в лист .. правда механизм расчета куда что писать дикий.
Но видимо с формулами и записью в 1с отчет тоже не прокатило. Иначе бы не стал мучатся.
9 — 24.05.18 — 16:32
Есть еще варианты решения данной задачи? Пока пытаюсь заставить ком экселевский работать на сервере.
10 — 24.05.18 — 16:38
Можно попробовать в Эксель.Аппликейшн открыть этот файл и Селект(); Селектион.Реплэйс(«=», «=»); сделать. Интерактивно срабатывает.
11 — 24.05.18 — 17:01
(10) Понял, спасибо! Буду пробовать.
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(); // если просто выходим
13 — 25.05.18 — 09:15
А не проверял, случаем, с Селект(); Селектион.Реплэйс(«=», «=»); ? — не работает?
14 — 25.05.18 — 09:56
(13) нет, точно синтаксиса не знаю, поэтому не стал
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);
16 — 25.05.18 — 10:19
Первый — «что меняем», в второй — «на что», и далее «,2,1,0,0»- непонятных
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С
Для решения этой проблемы достаточно установить пользователя под которым будут выполняться регламентные задания.
1С
Функция пропорционально распределяет сумму на необходимое количество
1С
В тех случаях, когда возникает необходимость отключить авторегистрацию объектов, при записи объекта следует устанавливать дополнительное свойство.
1С
В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам…
1С
Примеры программного заполнения параметров и отборов для отчетов СКД
1С
Примеры создания простых типов в 1С. Числа, строки ,логические, символы.
1С
Данная функция преобразовывает Фамилию Имя Отчество в Фамилия И.О.
1С
Примеры работы с деревом значений в 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.