Как сделать из excel 1с
Загрузка данных из Excel в 1С, как правило, нужна в следующих случаях:
- При выполнении обменом информацией между контрагентами (прайс-листы, акты сверки и т.д.);
- Для облегчения работы операторов в случаях, когда основной учет ведется в 1С, а некоторая его часть выполняется в таблицах Excel;
- При первичном заполнении базы данных.
Для выполнения этой операции можно использовать как типовой функционал, доступный при наличии подписки на информационно-технологическое сопровождение (ИТС), так и самостоятельно написанные обработки, реализованные через различные варианты подключения. В нашей статье мы постараемся максимально полно разобрать все возможные случаи и ответить на большинство существующих вопросов относительно загрузки данных из Excel в 1С.
Универсальный механизм
При ее запуске открывается форма (Рис.1):
Как видно из формы, она позволяет выполнять перенос информации в следующие объекты конфигурации:
- Справочник;
- Табличную часть документа или справочника;
- Регистр сведений.
В зависимости от того, в какое положение установлен переключатель, меняется поле выбора объекта.
Табличная форма обработки заполняется при открытии загружаемого файла.
Типовая обработка поддерживает выгрузки из:
Excel файлы большого объема могут загружаться достаточно долго, так что, если предполагается, что загрузка данных может происходить в несколько этапов или Вы точно знаете, что Вам придется несколько раз открывать существующий файл, для экономии нервов и времени, информацию из него лучше сохранить в mxl формат. Сделать это можно напрямую из формы обработки.
Важно понимать, что, если в исходном файле существуют группировки строк, подзаголовки и примечания, их надо будет удалить вручную.
Пометка – установкой или снятием флажка в строке определяется, будет ли заполняться соответствующий реквизит.
Представление реквизита – здесь прописывается синоним (наименование) реквизита метаданных, как оно задано в конфигураторе.
Поле поиска – если установить галочку в это поле, обработка будет осуществлять поиск элементов по соответствующему реквизиту и, в случае успеха, изменять существующие данные, дополнительная функция этого поля – защита от появления дубликатов.
Описание типов – отображает тип данных, который имеет тот или иной реквизит метаданных.
Режим загрузки – предлагает три варианта на выбор (Рис.3):
В последнем случае, активация поля Выражение вызовет открытие формы (Рис.4).
Номер колонки – поле, используемое для указания, из какой колонки экселевской таблицы необходимо брать данные для заполнения.
Значение по умолчанию – достаточно часто возникает ситуация, когда в загружаемом файле содержатся не все необходимые для записи элемента данные, в этом случае для заполнения будет проставлена информация, содержащаяся в данном поле.
Условие связи/Выражение для значения – частично мы уже коснулись этого поля, когда рассматривали вычисляемые поля, дополнительно в нем можно указать условие, в соответствии с которым будут синхронизированы исходные данные.
Чтобы каждый раз не убивать много времени на загрузку, прописывание соответствий и выражений, разработчики предусмотрели возможность сохранения варианта настройки в файл с расширением mxlz.
Загрузка данных через буфер обмена
Форма обработки содержит:
- Поле выбора даты, которая будет указывать, на какое время актуальна данная цена;
- Поле выбора контрагента, который прислал свой прайс-лист;
- Кнопку, позволяющую выбрать тип устанавливаемых цен;
- Табличную часть, которую можно заполнить загружаемыми данными.
Эту форму можно увидеть на Рис.6
Пояснение в верхней части формы объясняет, как пользоваться первой закладкой формы.
После выбора контрагента (в зависимости от того, выступает он поставщиком, комиссионером или продавцом) в таблице станут доступны дополнительные колонки для каждого типа цен.
Программа автоматически выполнит поиск соответствий внутри базы данных и, в случае, если таковых не найдется, предложит варианты устранения ошибки. Внешний вид табличной части можно контролировать с помощью переключателя. Кроме того, пользователь может самостоятельно сопоставить элементы загружаемого файла имеющимся в базе данным.
- Регистрировать все подряд;
- Регистрировать только те, которые изменились по сравнению с уже имеющимися в базе.
В текстовом поле можно внести комментарий, который будет записан в документе (Рис.9):
После выполнения обработки:
Варианты обработки переноса своими руками
Главная проблема в выдергивании данных из экселевского файла заключается в том, что 1С не имеет встроенного однозначного механизма его открытия. Существуют несколько вариантов подключения Excel к 1С:
- Через Microsoft ADODB – достаточно быстрый способ, который, как правило, применим и для файлового и для клиент-серверного варианта хранения базы;
- Через использование Microsoft Office – метод, который иногда сбоит при работе с SQL базами, как правило, работает несколько медленнее первого способа, к тому же требуется установленный Office;
- Через Libre Office – в отличие от предыдущего метода бесплатен, помимо xls и xlsx форматов поддерживает еще и собственные таблицы, но требует установленного пакета LibreOffice и некоторой подготовки загружаемого файла (первая строка таблицы должна содержать имена колонок).
Рассмотрим подробнее различные способы и варианты.
Через ADODB.Connection
Вообще ADO расшифровывается как ActiveX Data Object и служит для программного доступа к различным базам данных. Самая большая проблема при создании любого подключения к стороннему файлу (в том числе и к экселевскому) – грамотно составить строку подключения.
Для файлов Excel тут возможны три варианта:
- Если на компьютере установлено программное обеспечение Microsoft Access Database Engine 2010 Redistributable 32/64 bit, можно использовать строку (Рис.10); Рис.10
- Стандартное Windows подключение через драйвер Jet.OLEDB.4.0 будет выглядеть следующим образом (Рис.11) правда, открывать через эту строку таблицы, созданные в Microsoft Office 2007 и более поздних версиях (расширение xslx) невозможно; Рис.11
- Кроме этого, можно вызвать драйвер для Эксель, используемый в системе по умолчанию для этих таблиц (Рис.12); Рис.12
Параметры строки подключения:
- Provider – здесь определяется используемый драйвер;
- Data Source – определяет имя файла, который мы будем открывать;
- Extended Properties – здесь можно указать: нужна ли строка-заголовок для таблицы (HDR = YES говорит о том, что данные будут считываться с первой строки, HDR = NO – что со второй), открывается ли файл только для чтения (ReadOnly) и некоторые другие дополнительные параметры.
Создав строку подключения, мы можем соединиться с загружаемым файлом (Рис.13)
Теперь мы можем с помощью простого запроса (Рис.14) запустить выборку информации из загружаемого файла.
Набор записей, хранящихся на листе можно прочитать с помощью объекта Recordset. При этом первую запись листа можно получить параметром BOF (начало файла), а последнюю EOF (конец файла).
Через Excel приложение
Главное отличие от предыдущего способа – помимо драйверов работы с базами данных, на компьютере, где выполняется соединение, должен быть установлен Excel. Только в этом случае мы можем инициализировать приложение для чтения данных из таблицы (Рис 16).
У этого COM объекта есть несколько дочерних параметров, но главным для нас, при текущих условиях задачи, является параметр WorkBooks (Рис.17).
После инициализации книги необходимо определить лист, с которого будут считываться данные (Рис.18).
После этого можно перебирать внутри циклов строки и колонки таблицы открываемого файла.
Несколько слов о возможных ошибках
В случае работы через ADO (Рис.19);
Подключение и процедуру завершения работы с данными лучше всего организовывать внутри конструкции Попытка-Исключение-КонецПопытки, вызывая в исключительной ситуации описание ошибки. Хоть это иногда и замедляет работу, но существенно упрощает определение причины возникновения ошибки и, в конечном счете, способов её устранения.
Многие программисты сталкиваются с необходимостью загрузки в 1С из Excel или выгрузки в этот формат. Это связано с тем, что большое количество бухгалтеров, а также менеджеров используют этот формат для хранения и обработки данных.
1. Создание объекта приложение Excel
2. Программное открытие файла Excel, либо его создание при отсутсвии
3. Обращение к листу открытого файла Excel
4. Обойти все листы и скрыть их по условию
5. Добавить лист в самый конец(по умолчанию он добавляется в самое начало)
6. Очистить лист
7. Получить указанную область листа. Здесь используются переменные НомСтрВерх, НомСтрНиз, НомКолВерх, НомКолНиз – они обозначают координаты самой левой верхней ячейки и самой правой нижней ячейки областей
9. Функция по переводу Адреса стиля ссылок Excel из A1 в R1C1 на языке 1С.
Чтобы конвертировать стиль ссылок Excel с буквенными колонками в числовые можно из кода ниже сделать функцию с параметром АдресA1
В заключении
После выполнения действий необходимо закрыть книгу:
Выгрузка данных в Excel
Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных.
Для создания новой книги можно использовать следующий код:
При создании книги автоматически создаются листы (по умолчанию 3). Нам остается только выбрать нужный:
Или добавить в книгу новый лист:
Добавим в ячейку на листе значение:
Запишем книгу:
Где ПутьКФайлу - полный путь к файлу книги Excel (включая имя).
После выполнения действий необходимо закрыть книгу:
Часто используемые методы 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 - тонкая сплошная. |
Лист.Protect(); | Установка защиты на лист |
Лист.UnProtect(); | Снятие защиты с листа |
Лист.Cells(Строка, Столбец).Locked=0; | Ячейка будет доступной (и после установки защиты на лист) |
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
Как осуществить поиск / замену значений ячеек на листе
Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста. Текст для поиска в этом случае будет выглядеть так: ТекстДляПоиска
Как скопировать / удалить строку
Замечание. Приведенные выше примеры позволят, например, организвать работу с шаблонами на основании листов Excel.
Иногда требуется разобрать данные из Excel в 1С.
Я считаю что легче и быстрей поместить все данные в ТаблицуЗначений и уже там ими манипулировать.
Пример 2-х функций которые я использую:
ИзExcelВТаблицу – Читает Excel в ТаблицуЗначений
ЭлементСправочника – Создает или находит элемент справочника.
Теперь сам код:
Код 1C v 8.х
Пример вызова:
Код 1C v 8.х
или
Код 1C v 8.х
Теперь функция которой я использую когда надо создать элемент справочника из полученных данных.
Код 1C v 8.х
Автор: borismor
Похожие FAQ
Еще в этой же категории
Как сформировать документ в Word из 1С? (Active Document) 14
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _ Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа: 1. Путем замены шаблонного текста в макете Wordа. 2. Путем вставки текста с помощью закладок в Wo Как в excel сохраненный из 1С вставить новый лист? 14
Я думаю, все сталкивались с однолистовым excel файлом из 1С, у которого на первый взгляд, нет возможности добавить листы. Все не так страшно - их просто скрыли или, что чаще всего - даже не отображали (обусловлено созданием файла из стороннего прил Экспорт и Импорт данных 1С - Microsoft Excel 12
Экспорт Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка; Процедура Основ Преобразование XLS в MXL 10
Конвертация таблиц из Excel в MXL - скачать Converter Excel v MXL: Для 8.х - Для 7.7 - // Выбор файла Microsoft Excel Procedure FileNameStartChoice(Element, StdProcessing) StdProcessing = False; DialogFile = New FileDialog(FileDialogMode. Выгрузка данных в Excel с установкой разных параметров 9
// Процедура выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel // с указанным именем, используя преобразование данных к типу число и типу строка; Процедура ОсновныеДействияФормыЭкспорт(Кнопка) Попытка Посмотреть все в категории Работа с Microsoft Office и OpenOffice
Читайте также: