Выгрузка в Excel и чтение xlsx в 1С 8.3: от кнопки до кода
Содержание
Чтобы открыть данные 1С в Excel, без программиста хватает двух действий. Список выводят через Ещё → Вывести список, затем сохраняют табличный документ в формате xlsx (Ctrl+S). Отчёт или печатную форму сохраняют кнопкой с дискетой в их окне. Файл Excel можно открыть и в самой 1С: Главное меню → Файл → Открыть.
Программные способы нужны, когда выгрузка повторяется каждый день или файл надо разобрать по ячейкам. Табличный документ работает везде и не требует установленного Excel. COM-объект управляет самим Excel, но только на Windows. ADO читает лист как таблицу базы данных. Ниже каждый способ по шагам и ошибки, на которых спотыкаются чаще всего.
Выгрузка из 1С в Excel через интерфейс
Этот способ одинаков для БП 3.0, ЗУП 3.1, УТ 11 и других конфигураций на платформе 8.3. Он работает в тонком клиенте, в веб-клиенте и в облаке.
Список документов или справочника
- Откройте нужный список, например журнал счетов или справочник номенклатуры.
- Настройте отбор, если нужна только часть строк.
- Нажмите
Ещё → Вывести список. - В окне отметьте колонки, которые нужны в файле. Флажок «Только выделенные» оставляет только выделенные строки.
- Нажмите «ОК». Откроется табличный документ.
- Нажмите
Ctrl+SилиГлавное меню → Файл → Сохранить как. - В поле типа файла выберите лист Excel с расширением
*.xlsxи сохраните.
После этого файл открывается двойным щелчком, как любая книга Excel.
Нужно быстро перенести 20–30 строк? Выделите ячейки в табличном документе, нажмите Ctrl+C и вставьте в Excel через Ctrl+V. Границы и колонки сохраняются.
Отчёт или печатная форма
- 📊 Отчёт. Сформируйте его и нажмите кнопку с дискетой «Сохранить» в командной панели отчёта. Выберите формат xlsx.
- 🧾 Печатная форма (счёт, акт, ТОРГ-12, УПД). В окне печати нажмите «Сохранить». Отметьте формат «Лист Microsoft Excel» и место: на компьютер или присоединить к документу.
Если в окне сохранения отметить несколько форматов, 1С запишет файл в каждом из них. Это удобно, когда нужен и PDF для контрагента, и xlsx для себя.
В веб-клиенте и в облаке файл не открывается сам. Он попадает в папку загрузок браузера, откуда его и открывают.
Какой способ открыть Excel из 1С выбрать
| Способ | Когда подходит | Нужен ли Excel | Ограничения |
|---|---|---|---|
Вывести список + сохранение | Разовая выгрузка списка | Нет | Вручную каждый раз |
| Кнопка «Сохранить» в отчёте и печатной форме | Отчёт или документ для отправки | Нет | Вручную |
| Табличный документ в коде | Регулярная выгрузка, загрузка из xlsx | Нет | Нужен доступ к Конфигуратору или расширению |
COM-объект Excel.Application | Форматирование, формулы, несколько листов | Да, на ПК пользователя | Только Windows, медленно на больших файлах |
ADO (ADODB.Connection) | Быстро прочитать большой лист как таблицу | Нет, но нужен драйвер ACE | Только Windows, важна разрядность |
| Рассылка отчётов | Отчёт в xlsx по расписанию | Нет | Только отчёты, которые поддерживают рассылку |
Правило простое. Пользователю хватает первых двух строк. Разработчик берёт табличный документ, а COM — только если нужен именно Excel с его формулами и оформлением.
Как открыть файл Excel в самой 1С
Иногда задача обратная: прислали прайс или реестр в xlsx, а Excel на компьютере нет. Платформа 8.3 открывает такие файлы сама.
- Нажмите
Главное меню → Файл → Открыть. - В фильтре типов выберите файлы Excel или «Все файлы».
- Укажите книгу. Она откроется как табличный документ 1С.
Открытый лист можно просмотреть, скопировать ячейки и сохранить в другом формате. Формулы при этом превращаются в значения, а макросы не выполняются.
Загрузка строк из Excel в документ
Во многих документах с табличной частью есть команда загрузки из файла. Например, в поступлении товаров её ищут на командной панели табличной части «Товары» (в меню «Ещё», если кнопки не видно). Порядок такой:
- Вызовите загрузку — откроется окно с пустой таблицей.
- Скопируйте строки из Excel и вставьте в это окно.
- Сопоставьте колонки: какая из них номенклатура, какая количество и цена.
- Проверьте нераспознанные строки и перенесите данные в документ.
Перед загрузкой уберите из книги объединённые ячейки и строки «Итого». Именно они чаще всего дают нераспознанные позиции.
Табличный документ: запись в xlsx и чтение кодом
Объект ТабличныйДокумент умеет записывать и читать xlsx без Excel. Код работает и на клиенте Windows, и на сервере под Linux. Это главный способ для обработок и доработок.
Выгрузить в Excel и сразу открыть
Форма обработки с командой «Выгрузить». Сервер собирает таблицу, клиент записывает файл и открывает его программой, связанной с xlsx:
&НаСервереБезКонтекста
Функция СформироватьНаСервере()
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область(1, 1, 1, 1).Текст = "Номенклатура";
ТабДок.Область(1, 2, 1, 2).Текст = "Количество";
ТабДок.Область(2, 1, 2, 1).Текст = "Бумага А4";
ТабДок.Область(2, 2, 2, 2).Текст = "10";
Возврат ТабДок;
КонецФункции
&НаКлиенте
Процедура Выгрузить(Команда)
ТабДок = СформироватьНаСервере();
ИмяФайла = КаталогВременныхФайлов() + "Выгрузка.xlsx";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
ЗапуститьПриложение(ИмяФайла);
КонецПроцедуры
ЗапуститьПриложение открывает файл той программой, которая назначена в Windows: Excel, LibreOffice или «Мой Офис». Для старого формата используют ТипФайлаТабличногоДокумента.XLS, для LibreOffice — ODS.
Прочитать xlsx в коде
Файл от пользователя сначала передают на сервер (ПоместитьФайл или НачатьПомещениеФайлаНаСервер). На сервере его читают так:
&НаСервереБезКонтекста
Процедура ПрочитатьФайлНаСервере(АдресФайла)
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ПолучитьИзВременногоХранилища(АдресФайла).Записать(ИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
Наименование = ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1).Текст;
Количество = ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2).Текст;
Сообщить(Наименование + ": " + Количество);
КонецЦикла;
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
Цикл начинается со второй строки: в первой обычно заголовки колонок. Текст ячейки приходит строкой, поэтому количество и цену переводят в число через Число() внутри Попытка.
Открыть Excel из 1С через COM-объект
COM запускает настоящий Excel и даёт управлять им из кода: открыть книгу, прочитать ячейки, раскрасить строки, вставить формулу. Работает только на клиенте Windows с установленным Microsoft Excel. В веб-клиенте и на Linux этот способ недоступен.
Просто открыть книгу перед пользователем
&НаКлиенте
Процедура ОткрытьКнигу(Команда)
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open("C:\Обмен\Прайс.xlsx");
Excel.Visible = Истина;
КонецПроцедуры
Здесь Quit() не вызывают: книгу закрывает сам пользователь.
Прочитать данные и закрыть Excel
&НаКлиенте
Процедура ПрочитатьЧерезExcel(Команда)
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = Ложь;
Попытка
Книга = Excel.Workbooks.Open("C:\Обмен\Прайс.xlsx");
Лист = Книга.Worksheets(1);
ПоследняяСтрока = Лист.UsedRange.Rows.Count;
Для НомерСтроки = 2 По ПоследняяСтрока Цикл
Артикул = Лист.Cells(НомерСтроки, 1).Value;
Цена = Лист.Cells(НомерСтроки, 3).Value;
Сообщить(Строка(Артикул) + " — " + Строка(Цена));
КонецЦикла;
Книга.Close(Ложь);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Excel.Quit();
КонецПроцедуры
Вызов Excel.Quit() стоит после блока Попытка. Так Excel закроется, даже если чтение упало на середине. UsedRange.Rows.Count даёт число занятых строк, если таблица начинается с первой строки листа.
Создать новую книгу с оформлением
COM выбирают ради того, чего не умеет табличный документ: формулы Excel, автоподбор ширины, сохранение книги с макросами. Пример создаёт книгу, пишет шапку жирным и формулу суммы:
&НаКлиенте
Процедура СоздатьКнигу(Команда)
Excel = Новый COMОбъект("Excel.Application");
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Cells(1, 1).Value = "Товар";
Лист.Cells(1, 2).Value = "Сумма";
Лист.Cells(2, 1).Value = "Бумага А4";
Лист.Cells(2, 2).Value = 3500;
Лист.Cells(3, 1).Value = "Картридж";
Лист.Cells(3, 2).Value = 4200;
Лист.Cells(4, 2).Formula = "=SUM(B2:B3)";
Лист.Rows(1).Font.Bold = Истина;
Лист.Columns("A:B").AutoFit();
Excel.Visible = Истина;
КонецПроцедуры
В ячейке B4 Excel покажет 7700. Формулы через свойство Formula пишут на английском, независимо от языка Excel.
Обращение к каждой ячейке через COM — это отдельный вызов к другому процессу. На 10 000 строк чтение может занять минуты. Для больших файлов берите табличный документ или ADO.
Не запускайте Excel через COM на сервере 1С. Microsoft не поддерживает такой режим для серверных служб: процессы зависают и блокируют файлы. На сервере используйте ТабличныйДокумент.
Чтение листа Excel через ADO
ADO читает лист как таблицу SQL. Excel не нужен, но на компьютере должен стоять драйвер Microsoft Access Database Engine (провайдер Microsoft.ACE.OLEDB.12.0).
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Обмен\Прайс.xlsx;"
+ "Extended Properties=""Excel 12.0 Xml;HDR=YES"";");
Выборка = Соединение.Execute("SELECT * FROM [Лист1$]");
Пока Не Выборка.EOF Цикл
Сообщить(Строка(Выборка.Fields.Item(0).Value));
Выборка.MoveNext();
КонецЦикла;
Выборка.Close();
Соединение.Close();
- 📌
HDR=YES— первая строка листа считается заголовками колонок. - 📌 Имя листа пишут в квадратных скобках со знаком
$на конце. - 📌 Разрядность драйвера должна совпадать с разрядностью клиента 1С. 64-битный клиент не увидит 32-битный ACE.
Драйвер определяет тип колонки по первым строкам. Если в колонке артикулов сначала идут числа, а потом буквы, буквенные значения могут прийти пустыми. Это повод перейти на табличный документ.
Выгрузка в Excel по расписанию
Если отчёт нужен в xlsx каждое утро, программировать не обязательно. В БП 3.0, ЗУП 3.1, УТ 11 и других типовых конфигурациях есть рассылка отчётов.
- Откройте
Администрирование → Печатные формы, отчеты и обработки. - Включите флажок «Рассылка отчетов» и перейдите по ссылке «Рассылки отчетов».
- Создайте рассылку и добавьте в неё отчёты с нужными настройками.
- Укажите формат «Лист Microsoft Excel 2007» (xlsx).
- Выберите доставку: в папку, на сетевой каталог, на FTP или по электронной почте.
- На вкладке расписания задайте дни и время.
Рассылка работает через регламентные задания. В клиент-серверной базе их выполняет сервер 1С. В файловой базе задания выполняются, только пока открыт хотя бы один сеанс пользователя.
Для своих выгрузок, которых нет среди отчётов, программист делает регламентное задание в расширении. Оно формирует ТабличныйДокумент и записывает его на сервере в общую папку через Записать(..., ТипФайлаТабличногоДокумента.XLSX). Пользователь сервера 1С должен иметь права на запись в эту папку.
Ошибки при открытии и выгрузке в Excel
Ещё одна частая жалоба — числа в Excel лежат как текст, и СУММ даёт ноль. Обычно это пробелы-разделители разрядов или колонка, записанная в коде через .Текст. В Excel выделите колонку и используйте значок с восклицательным знаком «Преобразовать в число». В коде для числовых ячеек задавайте значение, а не текст.