Запись в excel из 1с. Что лучше – «1С» или «Excel»? Подключение внешнего загрузчика
Вступление.
Многие знают, что Excel гораздо старше 1С. На мой взгляд, это очень успешный продукт, и нареканий о нем я не слышал. Excel прост и универсален. Он способен выполнять не только простые арифметические операции, но и сложные вычисления, построение графиков и т.п. Знаю примеры, когда организации до перехода на 1С вели часть бухгалтерии в Excel. Многие и сейчас параллельно используют две программы. В этой статье рассмотрим способы обмена данными между 1С и Excel.
Таблицы 1С и Excel.
Многие пользователи для удобства работы сохраняют таблицы 1С (печатные формы) в формате Excel (*.xls). После чего в полученном файле делают различные группировки, сортировки, вычисления и т.п. Связано это с тем, что в таблицах 1С нет такого огромного функционала как в таблицах Excel. Но в версии 1С 8.0 есть нововведения, делающих работу с таблицами более комфортной.
На сайте 1С (http://www.1c.ru/) есть полезная программка, которая дает возможность открывать таблицы 1С в Excel и сохранять лист Excel как таблицу 1С. Это пригодится в том случае, если таблицу 1С не сохранили в формате Excel, а на том компьютере, где нужно открыть эту таблицу не установлена 1С. Да и постоянно помнить о том, что сохранить таблицу 1С нужно в формате Excel, не будет необходимости.
Полная информация о программе находится здесь.
Скачать программу можно здесь (архив zip 682 739 байт).
Замечание: В Excel разделителем дробной части считается символ ",". Поэтому перед сохранением таблицы 1С в формате Excel замените в ней другой разделитель (например ".") на ",". Иначе в Excel с этими числами не удастся произвести вычисления, или они вообще не будут отображаться как числа. Например, в таблице 1С "15.2" отобразится в Excel как "15.фев".
Получение данных из Excel.
Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка
Исключение
Сообщить(ОписаниеОшибки() +
);
Возврат;
КонецПопытки;
позволит нам получить доступ через переменную "Эксель" к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.
Открытие книги (файла):
Книга
=
Эксель
.
WorkBooks
.
Open
(ПутьКФайлу
);
ПутьКФайлу - полный путь к файлу книги Excel.
Выбор листа книги для работы с ним:
или
Лист
=
Книга
.
WorkSheets
(ИмяЛиста
);
НомерЛиста - номер листа в книге, ИмяЛиста - имя листа в книге.
Получение значения ячейки листа:
Значение
=
Лист
.
Cells
(НомерСтроки
,
НомерКолонки
).
Value
;
Важно: не забывайте поле выполнения нужных действий добавлять код Эксель . Quit (); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
Вывод данных в Excel.
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Попытка
Эксель
= СоздатьОбъект("Excel.Application"
);
Исключение
Сообщить(ОписаниеОшибки() +
" Программа Exсel не установлена на данном компьютере!"
);
Возврат;
КонецПопытки;
Книга
=
Эксель
.
WorkBooks
.
Add
();
Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:
Лист
=
Книга
.
WorkSheets
(НомерЛиста
);
либо добавить в книгу новый лист, если необходимо:
Лист
=
Книга
.
Sheets
.
Add
();
Следующим шагом будет установка значения ячейки:
Лист
.
Cells
(НомерСтроки
,
НомерКолонки
).
Value
=
Значение
;
НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Попытка
Книга
.
SaveAs
(ПутьКФайлу
);
Исключение
Сообщить(ОписаниеОшибки()
+
" Файл не сохранен!"
);
Возврат;
КонецПопытки;
ПутьКФайлу - полный путь к файлу книги Excel (включая имя).
Важно:
не забывайте, что в имени файлов не должно содержаться символов \ / : * ? " > < |.
Часто используемые методы для чтения/установки значений в Excel.
Эксель = СоздатьОбъект("Excel.Application" ); | Получение доступа к приложению Excel. |
Эксель . Visible = Видимость ; | 0 - Excel не виден, 1 - виден. |
Книга = Эксель . WorkBooks . Add (); | Создание новой книги (файла) Excel. |
Книга . SaveAs (ИмяФайла ); | Сохранение книги Excel. |
Лист = Книга . WorkSheets . Add (); | Добавление нового листа в книгу. |
Книга = Эксель . WorkBooks . Open (ИмяФайла ); | Открытие существующей книги (файла) Excel. |
Лист = Книга . WorkSheets (НомерЛиста ); | Установка листа в качестве рабочего с номером НомерЛиста. |
Лист . Name = ИмяЛиста ; | Задание рабочему листу имени ИмяЛиста |
Лист . PageSetup . Zoom = Масштаб ; | Задание параметра страницы "Масштаб" (от 10 до 400). |
Лист . PageSetup . Orientation = Ориентация ; | Ориентация: 1 - книжная, 2 - альбомная. |
Лист . PageSetup . LeftMargin = Эксель . CentimetersToPoints (Сантиметры ); | Задание левой границы (в сантиметрах). |
Лист . PageSetup . TopMargin = Эксель . CentimetersToPoints (Сантиметры ); | Задание верхней границы (в сантиметрах). |
Лист . PageSetup . RightMargin = Эксель . CentimetersToPoints (Сантиметры ); | Задание правой границы (в сантиметрах). |
Лист . PageSetup . BottomMargin = Эксель . CentimetersToPoints (Сантиметры ); | Задание нижней границы (в сантиметрах). |
Лист . Columns (НомерКолонки ) . ColumnWidth = Ширина ; | Задание ширины колонке. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Value = Значение ; | Ввод данных в ячейку. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Font . Name = ИмяШрифта ; | Установка шрифта в ячейке. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Font . Size = РазмерШрифта ; | Установка размера шрифта в ячейке. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Font . Bold = Жирный ; | 1 - жирный шрифт, 0 - нормальный. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Font . Italic = Курсив ; | 1 - наклонный шрифт, 0 - нормальный. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Font . Underline = Подчеркнутый ; | 2 - подчеркнутый, 1 - нет. |
Лист . Cells (НомерСтроки , НомерКолонки ) . NumberFormat = Формат ; | Установка формата данных ячейки. |
Лист . Cells (НомерСтроки , НомерКолонки ) . Borders . Linestyle = ТипЛинии ; | Установка рамок ячейки. 1 - тонкая сплошная. |
Уже давно самой популярной программой среди бухгалтеров, планировщиков, экономистов и управленцев стало приложение 1C. Оно имеет не только разнообразное количество конфигураций для различных видов деятельности, но и локализации под стандарты учета в нескольких странах мира. Все больше предприятий переходят на ведение учета именно в этой программе. Но процедура переноса данных вручную из других программ учета в 1C — довольно долгое и скучное занятие, отнимающее массу времени. Если на предприятии велся учет с помощью Excel, то процесс переноса можно существенно автоматизировать и ускорить.
Производить перенос данных из Excel в 1С требуется не только на начальном периоде работы с данной программой. Иногда наступает необходимость подобного, когда по ходу деятельности нужно занести какие-то списки, хранящиеся в книге табличного процессора. Например, если требуется перенести прайс-листы или заказы из онлайн-магазина. В случае, когда списки небольшие, то их можно вбить и вручную, но что делать, если они содержат сотни наименований? Для того, чтобы ускорить процедуру, можно прибегнуть к некоторым дополнительным возможностям.
Для автоматической загрузки подойдут практически все типы документов:
- Список номенклатуры;
- Список контрагентов;
- Список прайсов;
- Перечень заказов;
- Информация о покупках или продажах и т.д.
Сразу нужно отметить, что в 1С нет встроенных инструментов, которые позволяли бы переносить данные из Эксель. Для этих целей нужно подключить внешний загрузчик, который представляет собой файл в формате epf .
Подготовка данных
Нам нужно будет подготовить данные в самой таблице Excel.
Кроме этих универсальных действий по подготовке данных в книге Эксель, нужно будет ещё привести документ в соответствие с требованиями конкретного загрузчика, который мы будем использовать, но об этом мы поговорим чуть ниже.
Подключение внешнего загрузчика
Подключить внешний загрузчик с расширением epf к приложению 1С можно, как до подготовки файла Эксель, так и после. Главное, чтобы к началу процесса выполнения загрузки оба этих подготовительных момента были решены.
Существует несколько внешних загрузчиков таблиц Эксель для 1С, которые созданы различными разработчиками. Рассматривать мы будем пример с использованием инструмента для обработки информации «Загрузка данных из табличного документа» для версии 1С 8.3.
Одной из основных баз данных, с которыми работает 1C, является список номенклатуры товаров и услуг. Поэтому для описания процедуры загрузки из Excel остановимся на примере переноса именно этого типа данных.
- Возвращаемся к окну обработки. Так как мы будем загружать номенклатуру товаров, то в параметре переключатель должен стоять в позиции «Справочник» . Впрочем, он так установлен по умолчанию. Переключать его следует только тогда, когда вы собрались переносить другой тип данных: табличную часть или регистр сведений. Далее в поле «Вид справочника» кликаем по кнопке, на которой изображено многоточие. Открывается выпадающий список. В нем нам следует выбрать пункт «Номенклатура» .
- После этого обработчик автоматически расставляет те поля, которые программа использует в этом виде справочника. Нужно сразу отметить, что совсем не обязательно заполнять все поля.
- Теперь опять открываем переносимый документ Excel. Если наименование его колонок отличается от наименования полей справочника 1С, которые содержат соответствующие, то нужно переименовать эти столбцы в Экселе так, чтобы названия полностью совпадали. Если в таблице имеются столбцы, для которых в справочнике нет аналогов, то их следует удалить. В нашем случае такими столбцами являются «Количество»
и «Цена»
. Также следует добавить, что порядок расстановки столбцов в документе должен строго совпадать с тем, который представлен в обработке. Если для некоторых столбцов, которые отображены в загрузчике, у вас нет данных, то эти колонки можно оставлять пустыми, но нумерация тех столбцов, где имеются данные, должна совпадать. Для удобства и быстроты редактирования можно применять специальную возможность Эксель для быстрого перемещения колонок местами.
После того, как данные действия произведены, жмем на значок «Сохранить» , который представлен в виде пиктограммы, изображающей дискету в верхнем левом углу окна. Затем закрываем файл, нажав на стандартную кнопку закрытия.
- Возвращаемся в окно обработки 1С. Жмем на кнопку «Открыть» , которая изображена в виде папки желтого цвета.
- Запускается окно открытия файла. Переходим в директорию, где расположен документ Эксель, который нам нужен. Переключатель отображения файлов по умолчанию установлен для расширения mxl . Для того чтобы показать нужный нам файл, его требуется переставить в позицию «Лист Excel» . После этого выделяем переносимый документ и жмем на кнопку «Открыть» .
- После этого содержимое открывается в обработчике. Чтобы проверить корректность заполнения данными, жмем на кнопку «Контроль заполнения» .
- Как видим, инструмент контроля заполнения сообщает нам, что ошибки не найдены.
- Теперь перемещаемся во вкладку «Настройка» . В «Поле поиска» ставим галочку в той строке, которая у всех наименований, заносимых в справочник номенклатуры, будет уникальная. Чаще всего для этого используют поля «Артикул» или «Наименование» . Это нужно делать для того, чтобы при добавлении новых позиций в список, данные не задваивались.
- После того, как все данные внесены и настройки выполнены, можно переходить к непосредственной загрузке информации в справочник. Для этого кликаем по надписи «Загрузить данные» .
- Выполняется процесс загрузки. После её завершения можно перейти в справочник номенклатуры и убедиться, что все нужные данные туда добавлены.
Мы проследили процедуру добавления данных в справочник номенклатуры в программе 1C 8.3. Для других справочников и документов загрузка будет проводиться по тому же принципу, но с некоторыми нюансами, с которыми пользователь сможет разобраться самостоятельно. Также нужно заметить, что у различных сторонних загрузчиков процедура может отличаться, но общий подход остается у всех одинаковый: сначала обработчик загружает из файла информацию в окно, где производится её редактирование, а уже потом она добавляется непосредственно в базу данных 1С.
Довольно часто, при общении с потенциальными клиентами, я слышу о том, что им вполне хватает функционала таблицы от офисного пакета, и они не видят смысла в программах «1С». Все потому что некоторые по-прежнему ассоциируют данное решение лишь с программами для бухгалтера, что является неправдой.
«Excel» – универсальный и массовый продукт, с этим не поспоришь. Практически каждый может воспользоваться данной программой, в отличие от разработок «1С», которые направлены на узких специалистов. Используя «зеленые» таблицы, можно произвольно реализовывать необходимый функционал, который будет удобным: тут и финансовая модель организации со всеми взаиморасчетами, управленческий учет, даже регламентированный, большой выбор визуализации данных, возможность собственноручно расширять возможности программы, используя различные надстройки – все в Ваших руках, все с нуля...
Хорошо, если Вы только начинаете свой бизнес, постепенно учитывая необходимые данные в таблице по взаимоотношениям с клиентами, поставщиками, контролирующими органами, выстраивая свою произвольную структуру, но как быть дальше, когда база данных станет объемной, а штат сотрудников будет исчисляться десятками? Все так же считать по собственным параметрам? Я за то, чтобы не путать удобство с привычкой, которая зачастую мешает систематизации бизнеса, а следственно - его оптимизации.
Для наглядности давайте представим какие могу возникнуть потребности в автоматизации учета, например, у торговли:
1. Анализ продаж в рамках определенного периода.
Руководитель отдела продаж может анализировать данные по продажам. Ему ведь важно понимать выполняется ли план, насколько эффективны его стратегии, чтобы в случае неэффективности вовремявнести корректировку в работу.
2. Складской учет.
Нужно ли объяснять, что для продаж также важно понимание наличия товара на складе, какой товар может быть зарезервирован, а какого нет в наличии и что нужно заказать? Думаю, тут и так все понятно.
3. Ведение базы контрагентов.
Даже если собственник продает лишь то, что можно купить здесь и сейчас, что характерно для сектора B2C, то с базой поставщиков у него немного другие отношения – договора, первичка... Представьте, насколько это удобно, когда все, что связано с поставщиком автоматически сразу отображается в единой базе? Менеджер, отвечающий за склад, сразу видит наличие товара на складе, другой сотрудник, ответственный за документы, мониторит информацию по их наличию, исполняются ли все обязательства по договорным отношениям, кто и сколько кому должен. А в случае расхождений можно сверить данные за определенный период, сформировав результат менее чем за минуту.
4. Прибыль организации.
Сформировать отчет по прибыли не составит большого труда, поскольку все данные по расходам и доходам уже и так присутствуют в базе. При том условии, если информация вносится своевременно, по крайней мере, нужной датой. Тут основополагающий фактор – личная ответственность пользователя.
Если у Вас не так много клиентов и поставщиков, Вам действительно подойдет «Excel», так как времени предостаточно для конструирования собственных схем в таблице и их заполнений, с последующим распределением документов по различным папкам на компьютере: договора, поставщики, клиенты, клиенты по соседству, клиенты в разработке, клиенты на удаление – бесконечный и увлекательный процесс создания папок в папке. А если информации становится много, удобно ли в этом случае вести учет своей базы? Конечно, всегда есть исключения, порой встречаются организации с большими оборотами, у которых данные по финансам ведутся только в «Excel». Сколько же при этом времени у них уходит на обмен и объединение данными между отделами? Отвечу: много.
Я не представляю, как в большом количестве документов «Excel», организованных произвольной системой, оперативно найти нужный. К примеру, при предоставлении документов на требования от налоговой. Как бухгалтер будет сдавать отчетность в контролирующие органы, когда информация вся разрознена? Бухгалтерия, конечно, может быть на аутсорсинге и некоторых собственников бизнеса, к сожалению, может не волновать какие у данного специалиста могут быть процессы лишь бы балансы сводил. Но даже если так, то как тогда при этом организован процесс обмена документами? Насколько быстро сотрудник на стороне разберется в импровизированной информационной структуре?
Про «1С» такого сказать не могу, поскольку там вся информация структурирована и взаимосвязана:
-
Единая база как для удаленных, так и для штатных сотрудников, в которой можно работать со всеми стандартизированными и произвольными документами;
Формирование отчетности в контролирующие органы происходит на основании данных, которые уже отражены в программе, нет необходимости открывать множество файлов, сводить несколько значений в одну таблицу получая итоговые результаты.
В защиту «Excel»
Наверное, Вам показалось, что я против построения данных в «зеленых» таблицах. Отнюдь. На самом деле я сам частенько веду некоторые дела в «Excel»: если мне нужны произвольные вычисления, если мне необходимо сегментировать данные по клиентам, проводя аналитику по тем параметрам, которых нет в «1С» - да, такое бывает – я иду в «Excel». Проще говоря, в таблицах я занимаюсь вычислениями, нестандартным анализом, но систематизирую все потом все равно в «1С».
Да и потом, для просмотра выгруженных файлов из «1С» все равно понадобиться «Excel», так как данные в «1С» хранятся в электронных таблицах. Вам кажется, что это замкнутый круг? Я скажу по-другому: «1С» и «Excel» идут рядом как два напарника, но у каждого из них свое предназначение, они хорошо дополняют друг друга, но не взаимозаменяют.
Если Вам нужно систематизировать ваши дела с учетом законодательной системы нашего государства, с учетом специфики и направленности бизнеса, тем более, когда дело касается больших объемов информации, то Вам нужен «1С». Если Вам нужны произвольные расчеты, построение стратегии с нуля, визуализация нестандартных данных по аналитике, то к Вашим услугам «Excel». Но гораздо удобней работать с данными решениями одновременно.
Что в итоге – «1С» или «Excel»?
На самом старте, если вопрос именно в финансах на автоматизацию, хотя базовые программы «1С» стоят не таких уж больших денег, я бы воспользовался «Excel». Огромный плюс, в том, что данные из «зеленых» таблиц без потерь можно подгрузить в «1С». Но по мере масштабирования, я бы советовал обратить внимание на программы по автоматизации бизнес-процессов. Их много, и не обязательно это может быть «1С»...
Переход на «1С» можно осуществить тогда, когда Вы понимаете, что необходимо оптимизировать свои ресурсы, в том числе автоматизировать вопросы по взаимоотношению с клиентами и поставщиками, с надзорными органами. В общем, наладить свои рабочие процессы, чтобы повысить эффективность бизнеса, когда обработка информации будет занимать большое количество времени, а файлы «Excel» уже не будут справляться с объемами вводимых данных.
Однако не каждая «1С» может Вам подойти, нужно учитывать различные факторы: специфику и сферу бизнеса, масштабы, потребность в ежедневных задачах, рутину которую необходимо свести к минимуму. Все индивидуально. Истина, как я уже говорил, где-то между «1С» и «Excel» – она в дополнении друг друга.
На этом, пожалуй, все. Но если возникнут вопросы, то обращайтесь, постараемся Вам помочь. Успешных бизнес-процессов, коллеги!
Данный способ простой. Его суть заключается в том, что объект ТабличныйДокумент имеет методы:
- Записать(< ИмяФайла>, < ТипФайлаТаблицы >) для выгрузки данных в файл;
- Прочитать(< ИмяФайла>, < СпособЧтенияЗначений >) для загрузки данных из файла.
Внимание!
Метод Записать
()
доступен как на клиенте, так и на сервере. Метод Прочитать
()
доступен только на стороне сервера. Необходимо помнить об этом
при планировании клиент-серверного взаимодействия.
Рассмотрим пример сохранения табличного документа в файл. Необходимо любым способом создать и заполнить объект ТабличныйДокумент, а выгрузка в файл осуществляется всего лишь одной строкой:
ТабДок. Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента. XLSX );
Здесь ТабДок — сформированный табличный документ, ПутьКФайлу — имя файла для выгрузки, ТипФайлаТабличногоДокумента.XLSX — формат создаваемого файла. Поддерживаются следующие форматы Excel:
- XLS95 — формат Excel 95;
- XLS97 — формат Excel 97;
- XLSX — формат Excel 2007.
ТабДок = Новый ТабличныйДокумент;
ТабДок. Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение );
Здесь ПутьКФайлу — путь к загружаемому файлу Excel. СпособЧтенияЗначенийТабличногоДокумента.Значение определяет, каким образом нужно интерпретировать данные, считываемые из исходного документа. Доступны варианты:
- Значение;
- Текст.
Обмен через OLE
Обмен через технологию OLE automation, пожалуй, самый распространенный вариант программной работы с файлами Excel. Он позволяет использовать весь функционал, предоставляемый Excel, но отличается медленной скоростью работы по сравнению с другими способами. Для обмена через OLE требуется установка MS Excel:
- На компьютере конечного пользователя, если обмен происходит на стороне клиента;
- На компьютере сервера 1С:Предприятие, если обмен происходит на стороне сервера.
Пример выгрузки :
// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application»);
// Отключение вывода предупреждений и вопросов
Эксель. DisplayAlerts = Ложь;
// Создание новой книги
Книга = Эксель. WorkBooks. Add();
// Позиционирование на первом листе
Лист = Книга. Worksheets(1);// Запись значения в ячейку
Лист. Cells(НомерСтроки, НомерКолонки). Value = ЗначениеЯчейки;// Сохранение файла
Книга. SaveAs(ИмяФайла);
Эксель. Quit();
Эксель = 0;
Примеры чтения :
// —— ВАРИАНТ 1 ——
// Создание COM-объекта
Эксель = Новый COMОбъект(«Excel.Application» );
// Открытие книги
Книга = Эксель. Workbooks. Open(ПутьКФайлу );
Лист = Книга. Worksheets(1 );// Закрытие книги
Книга. Close(0 );// Закрытие Эксель и освобождение памяти
Эксель. Quit();
Эксель = 0 ;// —— ВАРИАНТ 2 ——
// Открытие книги
Книга = ПолучитьCOMОбъект(ПутьКФайлу );
// Позиционирование на нужном листе
Лист = Книга. Worksheets(1 );// Чтение значения ячейки, обычно здесь располагается цикл обхода ячеек
ЗначениеЯчейки = Лист. Cells(НомерСтроки, НомерКолонки). Value;// Закрытие книги
Книга. Application. Qui t();
Для обхода всех заполненных строк листа Excel можно использовать следующие приемы:
// —— ВАРИАНТ 1 ——
КоличествоСтрок = Лист. Cells(1 , 1 ). SpecialCells(11 ). Row;
Для НомерСтроки = 1 По КоличествоСтрок Цикл
ЗначениеЯчейки = Лист. Cells(НомерСтроки, НомерКолонки). Value ;
КонецЦикла;// —— ВАРИАНТ 2 ——
НомерСтроки = 0 ;
Пока Истина Цикл
НомерСтроки = НомерСтроки + 1 ;
ЗначениеЯчейки = Лист. Cells(НомерСтроки, НомерКолонки). Value;
Если НЕ ЗначениеЗаполнено(ЗначениеЯчейки ) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Вместо последовательного обхода всех строк листа можно выгрузить все данные в массив и работать с ним. Такой подход будет быстрее при чтении большого объема данных:
ВсегоКолонок = Лист. Cells(1 , 1 ). SpecialCells(11 ). Column;
ВсегоСтрок = Лист. Cells(1 , 1 ). SpecialCells(11 ). Row;Область = Лист. Range(Лист. Cells(1 , 1 ), Лист. Cells(ВсегоСтрок, ВсегоКолонок));
Данные = Область. Value. Выгрузить ();
В таблице ниже приведены наиболее востребованные свойства и методы для работы с Excel через OLE:
Действие | Код | Комментарий |
Работа с приложением | ||
Установка видимости окна приложения | Эксель. Visible = Ложь; | |
Установка режима вывода предупреждений (выводить/не выводить) | Эксель. DisplayAlerts = Ложь; | |
Закрытие приложения | Эксель. Quit(); | |
Работа с книгой | ||
Создание новой книги | Книга = Эксель. WorkBooks. Add (); | |
Открытие существующей книги | Книга = Эксель. WorkBooks. Open(ИмяФайла ); | |
Сохранение книги | Книга. SaveAs(ИмяФайла ); | |
Закрытие книги | Книга. Close(0 ); | |
Работа с листом | ||
Установка текущего листа | Лист = Книга. WorkSheets(НомерЛиста ); | |
Установка имени | Лист. Name = Имя ; | |
Установка защиты | Лист. Protect (); | |
Снятие защиты | Лист. UnProtect (); | |
Установка ориентации страницы | Лист. PageSetup. Orientation = 2 ; | 1 — книжная, 2 — альбомная |
Установка левой границы | Лист. PageSetup. LeftMargin = Эксель. CentimetersToPoints(Сантиметры ); | |
Установка верхней границы | Лист. PageSetup. TopMargin = Эксель. CentimetersToPoints(Сантиметры ); | |
Установка правой границы | Лист. PageSetup. RightMargin = Эксель. CentimetersToPoints(Сантиметры ); | |
Установка нижней границы | Лист. PageSetup. BottomMargin = Эксель. CentimetersToPoints(Сантиметры ); | |
Работа со строками, колонками, ячейками | ||
Установка ширины колонки | Лист. Columns(НомерКолонки). ColumnWidth = Ширина ; | |
Удаление строки | Лист. Rows(НомерСтроки). Delete (); | |
Удаление колонки | Лист. Columns(НомерКолонки). Delete(); | |
Удаление ячейки | Лист. Cells(НомерСтроки, НомерКолонки). Delete (); | |
Установка значения | Лист. Cells(НомерСтроки, НомерКолонки). Value = Значение ; | |
Объединение ячеек | Лист. Range(Лист. Cells(НомерСтроки, НомерКолонки), Лист. Cells(НомерСтроки1, НомерКолонки1)). Merge (); | |
Установка шрифта | Лист. Cells(НомерСтроки, НомерКолонки). Font. Name = ИмяШрифта ; | |
Установка размера шрифта | Лист. Cells(НомерСтроки, НомерКолонки). Font. Size = РазмерШрифта ; | |
Установка жирного шрифта | Лист. Cells(НомерСтроки, НомерКолонки). Font. Bold = 1 ; | 1 — жирный шрифт, 0 — нормальный |
Установка курсива | Лист. Cells(НомерСтроки, НомерКолонки). Font. Italic = 1 ; | 1 — курсив, 0 — нормальный |
Установка подчеркнутого шрифта | Лист. Cells(НомерСтроки, НомерКолонки). Font. Underline = 2 ; | 2 — подчеркнутый, 1 — нет |
Для того, чтобы узнать какое свойство нужно менять или какой метод вызвать можно воспользоваться макросами Excel. Если записать макрос с требуемыми действиями, то после можно посмотреть программный код на VBA записанного макроса.
Использование COMSafeArray
При выгрузке больших объемов данных из 1С в Excel для ускорения можно использовать объект COMSafeArray . Согласно определению из синтакс-помощника, COMSafeArray — объектная оболочка над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями по технологии OLE.
// Создание COMSafeArray
МассивКом = Новый COMSafeArray(«VT_Variant» , ВсегоКолонок, ВсегоСтрок );
// Заполнение COMSafeArray
Для Стр = 0 По ВсегоСтрок — 1 Цикл
Для Кол = 0 По ВсегоКолонок — 1 Цикл
МассивКом. SetValue(Кол, Стр, Значение );
КонецЦикла;
КонецЦикла;
// Присвоение области листа Excel значений из COMSafeArray
Лист. Range(Лист. Cells(1 , 1 ), Лист. Cells(ВсегоСтрок, ВсегоКолонок)). Value = МассивКом ;
Обмен через ADO
Файл Excel при обмене через ADO представляет собой базу данных, к которой можно обращаться при помощи SQL-запросов. Установка MS Excel не требуется, но обязательно наличие драйвера ODBC, при помощи которого будет осуществляться доступ. Используемый драйвер ODBC определяется при указании строки соединения к файлу. Обычно требуемый драйвер уже установлен на компьютере.
Обмен через ADO заметно быстрее обмена через OLE, но при выгрузке нет возможности использовать функционал Excel для оформления ячеек, разметки страниц, задания формул и т.д.
Пример выгрузки :
Соединение = Новый COMОбъект(«ADODB.Connection»);
Соединение. ConnectionString = «
|Data Source=»+ ИмяФайла + «;
;
Соединение. Open(); // Открытие соединения// Создание COM-объекта для команды
Команда = Новый COMОбъект(«ADODB.Command» );
Команда// Присвоение текста команды для создания таблицы
Команда. CommandText = «CREATE TABLE [Лист1] (Колонка1 char(255), Колонка2 date, Колонка3 int, Колонка4 float)» ;
Команда. Execute(); // Выполнение команды// Присвоение текста команды для добавления строки таблицы
Команда. CommandText = «INSERT INTO [Лист1] (Колонка1, Колонка2, Колонка3, Колонка4) values (‘абвгдеё’, ‘8/11/2017’, ‘12345’, ‘12345,6789’)» ;
Команда.Execute(); // Выполнение команды// Удаление команды и закрытие соединения
Команда = Неопределено;
Соединение. Close ();
Соединение = Неопределено ;
Для создания нового листа и формирования его структуры можно воспользоваться объектами ADOX.Catalog и ADOX.Table . В этом случае код примет вид:
// Создание COM-объекта для работы с книгой
Книга = Новый COMОбъект(«ADOX.Catalog» );
Книга. ActiveConnection = Соединение;// Создание COM-объекта для работы со структурой данных на листе
Таблица = Новый COMОбъект(«ADOX.Table» );
Таблица. Name = «Лист1» ;
Таблица. Columns. Append(«Колонка1» , 202 );
Таблица. Columns. Append(«Колонка2» , 7 );
Таблица. Columns. Append(«Колонка3» , 5 );
Таблица. Columns. Append(«Колонка4» , 5 );// Создание в книге листа с описанной структурой
Книга. Tables. Append(Таблица);
Таблица = Неопределено;
Книга = Неопределено;
В приведенном примере в методе
Таблица. Columns. Append («Колонка1» , 202 );
во втором параметре указывается тип колонки. Параметр необязательный, вот некоторые значения типа колонки:
- 5 — adDouble;
- 6 — adCurrency;
- 7 — adDate;
- 11 — adBoolean;
- 202 — adVarWChar;
- 203 — adLongVarWChar.
Пример чтения :
// Создание COM-объекта для соединения
Соединение = Новый COMОбъект(«ADODB.Connection» );// Установка строки соединения
Соединение. ConnectionString = «
|Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source=»+ ИмяФайла + «;
|Extended Properties=»»Excel 12.0 XML;HDR=YES»»;» ;
Соединение. Open(); // Открытие соединения// Создание COM-объекта для получения выборки
Выборка = Новый COMОбъект(«ADODB.Recordset» );
ТекстЗапроса = «SELECT * FROM [Лист1$]» ;// Выполнение запроса
Выборка. Open(ТекстЗапроса, Соединение);// Обход результата выборки
Пока НЕ Выборка. EOF() Цикл
ЗначениеКолонки1 = Выборка. Fields. Item(«Колонка1» ). Value; // Обращение по имени колонки
ЗначениеКолонки2 = Выборка. Fields. Item(0 ). Value; // Обращение по индексу колонки
Выборка. MoveNext();
КонецЦикла;Выборка. Close();
Выборка = Неопределено;
Соединение. Close();
Соединение = Неопределено;
В строке соединения параметр HDR определяет как будет восприниматься первая строка на листе. Возможны варианты:
- YES — первая строка воспринимается как названия колонок. К значениям можно обращаться по имени и по индексу колонки.
- NO — первая строка воспринимается как данные. К значениям можно обращаться только по индексу колонки.
В приведенных примерах рассмотрено лишь несколько объектов ADO. Объектная модель ADO состоит из следующих объектов:
- Connection;
- Command;
- Recordset;
- Record;
- Fields;
- Stream;
- Errors;
- Parameters;
- Properties.
Выгрузка без программирования
Для сохранения данных из 1С в Excel не всегда целесообразно прибегать к программированию. Если в режиме Предприятия пользователь может отобразить требуемые для выгрузки данные, то, их возможно сохранить в Excel без программирования.
Для сохранения табличного документа (например, результата отчета) можно вызвать команду Сохранить или Сохранить как… главного меню.
В открывшемся окне требуется выбрать каталог, имя и формат сохраняемого файла.
Для сохранения данных динамических списков (например, списка номенклатуры) необходимо:
- Вывести данные в табличный документ при помощи команды Еще ⇒ Вывести список… ;
- Сохранить табличный документ в требуемый формат.
Довольно часто, при общении с потенциальными клиентами, я слышу о том, что им вполне хватает функционала таблицы от офисного пакета, и они не видят смысла в программах «1С». Все потому что некоторые по-прежнему ассоциируют данное решение лишь с программами для бухгалтера, что является неправдой.
«Excel» – универсальный и массовый продукт, с этим не поспоришь. Практически каждый может воспользоваться данной программой, в отличие от разработок «1С», которые направлены на узких специалистов. Используя «зеленые» таблицы, можно произвольно реализовывать необходимый функционал, который будет удобным: тут и финансовая модель организации со всеми взаиморасчетами, управленческий учет, даже регламентированный, большой выбор визуализации данных, возможность собственноручно расширять возможности программы, используя различные надстройки – все в Ваших руках, все с нуля...
Хорошо, если Вы только начинаете свой бизнес, постепенно учитывая необходимые данные в таблице по взаимоотношениям с клиентами, поставщиками, контролирующими органами, выстраивая свою произвольную структуру, но как быть дальше, когда база данных станет объемной, а штат сотрудников будет исчисляться десятками? Все так же считать по собственным параметрам? Я за то, чтобы не путать удобство с привычкой, которая зачастую мешает систематизации бизнеса, а следственно - его оптимизации.
Для наглядности давайте представим какие могу возникнуть потребности в автоматизации учета, например, у торговли:
1. Анализ продаж в рамках определенного периода.
Руководитель отдела продаж может анализировать данные по продажам. Ему ведь важно понимать выполняется ли план, насколько эффективны его стратегии, чтобы в случае неэффективности вовремявнести корректировку в работу.
2. Складской учет.
Нужно ли объяснять, что для продаж также важно понимание наличия товара на складе, какой товар может быть зарезервирован, а какого нет в наличии и что нужно заказать? Думаю, тут и так все понятно.
3. Ведение базы контрагентов.
Даже если собственник продает лишь то, что можно купить здесь и сейчас, что характерно для сектора B2C, то с базой поставщиков у него немного другие отношения – договора, первичка... Представьте, насколько это удобно, когда все, что связано с поставщиком автоматически сразу отображается в единой базе? Менеджер, отвечающий за склад, сразу видит наличие товара на складе, другой сотрудник, ответственный за документы, мониторит информацию по их наличию, исполняются ли все обязательства по договорным отношениям, кто и сколько кому должен. А в случае расхождений можно сверить данные за определенный период, сформировав результат менее чем за минуту.
4. Прибыль организации.
Сформировать отчет по прибыли не составит большого труда, поскольку все данные по расходам и доходам уже и так присутствуют в базе. При том условии, если информация вносится своевременно, по крайней мере, нужной датой. Тут основополагающий фактор – личная ответственность пользователя.
Если у Вас не так много клиентов и поставщиков, Вам действительно подойдет «Excel», так как времени предостаточно для конструирования собственных схем в таблице и их заполнений, с последующим распределением документов по различным папкам на компьютере: договора, поставщики, клиенты, клиенты по соседству, клиенты в разработке, клиенты на удаление – бесконечный и увлекательный процесс создания папок в папке. А если информации становится много, удобно ли в этом случае вести учет своей базы? Конечно, всегда есть исключения, порой встречаются организации с большими оборотами, у которых данные по финансам ведутся только в «Excel». Сколько же при этом времени у них уходит на обмен и объединение данными между отделами? Отвечу: много.
Я не представляю, как в большом количестве документов «Excel», организованных произвольной системой, оперативно найти нужный. К примеру, при предоставлении документов на требования от налоговой. Как бухгалтер будет сдавать отчетность в контролирующие органы, когда информация вся разрознена? Бухгалтерия, конечно, может быть на аутсорсинге и некоторых собственников бизнеса, к сожалению, может не волновать какие у данного специалиста могут быть процессы лишь бы балансы сводил. Но даже если так, то как тогда при этом организован процесс обмена документами? Насколько быстро сотрудник на стороне разберется в импровизированной информационной структуре?
Про «1С» такого сказать не могу, поскольку там вся информация структурирована и взаимосвязана:
-
Единая база как для удаленных, так и для штатных сотрудников, в которой можно работать со всеми стандартизированными и произвольными документами;
Формирование отчетности в контролирующие органы происходит на основании данных, которые уже отражены в программе, нет необходимости открывать множество файлов, сводить несколько значений в одну таблицу получая итоговые результаты.
В защиту «Excel»
Наверное, Вам показалось, что я против построения данных в «зеленых» таблицах. Отнюдь. На самом деле я сам частенько веду некоторые дела в «Excel»: если мне нужны произвольные вычисления, если мне необходимо сегментировать данные по клиентам, проводя аналитику по тем параметрам, которых нет в «1С» - да, такое бывает – я иду в «Excel». Проще говоря, в таблицах я занимаюсь вычислениями, нестандартным анализом, но систематизирую все потом все равно в «1С».
Да и потом, для просмотра выгруженных файлов из «1С» все равно понадобиться «Excel», так как данные в «1С» хранятся в электронных таблицах. Вам кажется, что это замкнутый круг? Я скажу по-другому: «1С» и «Excel» идут рядом как два напарника, но у каждого из них свое предназначение, они хорошо дополняют друг друга, но не взаимозаменяют.
Если Вам нужно систематизировать ваши дела с учетом законодательной системы нашего государства, с учетом специфики и направленности бизнеса, тем более, когда дело касается больших объемов информации, то Вам нужен «1С». Если Вам нужны произвольные расчеты, построение стратегии с нуля, визуализация нестандартных данных по аналитике, то к Вашим услугам «Excel». Но гораздо удобней работать с данными решениями одновременно.
Что в итоге – «1С» или «Excel»?
На самом старте, если вопрос именно в финансах на автоматизацию, хотя базовые программы «1С» стоят не таких уж больших денег, я бы воспользовался «Excel». Огромный плюс, в том, что данные из «зеленых» таблиц без потерь можно подгрузить в «1С». Но по мере масштабирования, я бы советовал обратить внимание на программы по автоматизации бизнес-процессов. Их много, и не обязательно это может быть «1С»...
Переход на «1С» можно осуществить тогда, когда Вы понимаете, что необходимо оптимизировать свои ресурсы, в том числе автоматизировать вопросы по взаимоотношению с клиентами и поставщиками, с надзорными органами. В общем, наладить свои рабочие процессы, чтобы повысить эффективность бизнеса, когда обработка информации будет занимать большое количество времени, а файлы «Excel» уже не будут справляться с объемами вводимых данных.
Однако не каждая «1С» может Вам подойти, нужно учитывать различные факторы: специфику и сферу бизнеса, масштабы, потребность в ежедневных задачах, рутину которую необходимо свести к минимуму. Все индивидуально. Истина, как я уже говорил, где-то между «1С» и «Excel» – она в дополнении друг друга.
На этом, пожалуй, все. Но если возникнут вопросы, то обращайтесь, постараемся Вам помочь. Успешных бизнес-процессов, коллеги!