Выгрузка отчёта из 1С:Предприятия 7.7 в файл: штатно, через OLE и XBase

· 9 мин

Содержание

Открытую таблицу в 1С:Предприятии 7.7 сохраняют в Excel через Файл → Сохранить как...: в поле типа файла выбирают xls и указывают папку. Так же сохраняются формат 1С mxl, веб-страница html и текст txt. В DBF штатное окно не пишет — для этого нужен небольшой код на встроенном языке с объектом XBase.

Всё сказанное относится именно к платформе 7.7: в 8.3 и меню, и объекты встроенного языка другие. Большинство проблем с выгрузкой здесь связано не с самой 1С, а с тем, что старая программа работает на новой Windows.

Какие форматы умеет сохранять табличный документ 1С 7.7

Любой отчёт, печатная форма или выведенный список в 7.7 — это табличный документ (объект Таблица). У него один и тот же набор форматов, в какой бы конфигурации вы ни работали: Бухгалтерия, Торговля и склад, Зарплата и кадры или самописная.

ФорматРасширениеЧто сохраняетсяКогда брать
Таблица 1С.mxlОформление, объединения ячеек, секцииПередать отчёт другому пользователю 1С 7.7
Excel.xlsЗначения, шрифты, рамки, ширина колонокДальше считать и фильтровать в Excel
HTML.htmВнешний видОтправить на просмотр, открыть в браузере
Текст.txtТолько текст ячеекЗагрузка в другие программы, поиск по строкам
DBF.dbfСтруктура полей и данныеТолько программно, через XBase

💡 Расшифровки (двойной щелчок по сумме отчёта) живут только внутри 1С. В xls и html попадают только цифры — переходить из них к документам нельзя.

Сохранение отчёта в Excel и другие форматы через меню

Сначала сформируйте отчёт так, чтобы он открылся в отдельном окне. Дальше:

  1. Щёлкните мышью внутри таблицы — окно отчёта должно быть активным. Если активна форма настройки отчёта, команда сохранит не то, что нужно.
  2. Откройте Файл → Сохранить как....
  3. В поле типа файла выберите нужный формат, например таблицы Excel (*.xls).
  4. Выберите папку и введите имя файла. Расширение программа подставит сама.
  5. Нажмите «Сохранить».

Быстрый способ без сохранения файла

Если нужен кусок отчёта, а не весь документ:

  • 🖱️ выделите мышью диапазон ячеек в таблице 1С;
  • 📋 нажмите Ctrl+C;
  • 📄 откройте Excel и вставьте Ctrl+V.

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

Что учесть при открытии xls в новом Excel

Файл, сохранённый из 7.7, — это xls старого образца. Современный Excel открывает его, но иногда:

  • 🔒 показывает файл в режиме защищённого просмотра — нажмите «Разрешить редактирование»;
  • 🔢 воспринимает числа как текст: в ячейке зелёный треугольник, сумма по колонке не считается;
  • 📐 сдвигает высоту строк и переносы в объединённых ячейках.

Числа, ставшие текстом, лечатся в Excel: выделите колонку, нажмите на значок с восклицательным знаком и выберите преобразование в число. Второй вариант — «Данные → Текст по столбцам» с кнопкой «Готово» без изменений.

Если файл нужен в формате .xlsx, откройте xls в Excel и пересохраните через «Сохранить как». Для массовой конвертации подойдёт код из раздела про программную выгрузку.

Выгрузка в Excel через OLE-автоматизацию

Когда отчёт нужно не просто сохранить, а сразу разложить по листам Excel, подкрасить, добавить формулы или выгружать регулярно, 1С 7.7 управляет Excel напрямую. Для этого на компьютере, где запущена 1С, должен быть установлен Microsoft Excel.

Минимальный пример — выгрузка кодов и наименований номенклатуры в новую книгу:

Процедура ВыгрузитьВExcel()
	Попытка
		Excel = СоздатьОбъект("Excel.Application");
	Исключение
		Предупреждение("Не удалось запустить Excel: " + ОписаниеОшибки());
		Возврат;
	КонецПопытки;

	Excel.DisplayAlerts = 0;
	Книга = Excel.Workbooks.Add();
	Лист = Книга.Worksheets(1);

	Лист.Cells(1, 1).Value = "Код";
	Лист.Cells(1, 2).Value = "Наименование";

	Спр = СоздатьОбъект("Справочник.Номенклатура");
	Спр.ВыбратьЭлементы();
	НомерСтроки = 1;
	Пока Спр.ПолучитьЭлемент() = 1 Цикл
		НомерСтроки = НомерСтроки + 1;
		Лист.Cells(НомерСтроки, 1).Value = Спр.Код;
		Лист.Cells(НомерСтроки, 2).Value = Спр.Наименование;
	КонецЦикла;

	Книга.SaveAs(КаталогИБ() + "nomenklatura.xls");
	Книга.Close();
	Excel.Quit();
	Сообщить("Выгружено строк: " + (НомерСтроки - 1));
КонецПроцедуры

Пояснения к коду:

  • Попытка ... Исключение ловит ситуацию, когда Excel не установлен или не регистрируется в системе. Без неё 1С покажет сообщение об ошибке и прервёт обработку.
  • DisplayAlerts = 0 убирает вопросы Excel вида «Файл существует, заменить?». Без этого обработка зависнет на невидимом окне.
  • КаталогИБ() возвращает папку информационной базы. Если у пользователя нет прав на запись туда — замените путь (см. раздел про права).
  • Excel.Quit() обязателен. Иначе в диспетчере задач остаются процессы EXCEL.EXE, и через десяток запусков компьютер начинает тормозить.

Когда OLE работает медленно

Каждое обращение Лист.Cells(...) — это отдельный вызов в другой программе. Тысяча строк по 10 колонок — это 10 000 вызовов, и выгрузка растягивается на минуты.

Что помогает:

  • ⚡ не показывать Excel во время работы (Excel.Visible = 0, это значение по умолчанию для нового объекта);
  • ⚡ отключить перерисовку экрана: Excel.ScreenUpdating = 0 в начале и = 1 в конце;
  • ⚡ для больших объёмов сначала сохранить таблицу 1С в xls штатно, а потом открыть её через OLE и только донастроить (пример ниже).

Сохранение в DBF и текстовые файлы

DBF через объект XBase

DBF нужен, когда данные загружают в программу банка, старую складскую систему или в другую базу 1С 7.7. В 7.7 для этого есть встроенный объект XBase: сначала описывают поля, потом создают файл и добавляют записи.

Процедура ВыгрузитьВDBF()
	ИмяФайла = КаталогИБ() + "nomen.dbf";

	База = СоздатьОбъект("XBase");
	База.ДобавитьПоле("KOD", "C", 10, 0);
	База.ДобавитьПоле("NAIM", "C", 100, 0);
	База.ДобавитьПоле("CENA", "N", 15, 2);
	База.СоздатьФайл(ИмяФайла);

	Спр = СоздатьОбъект("Справочник.Номенклатура");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент() = 1 Цикл
		Если Спр.ЭтоГруппа() = 1 Тогда
			Продолжить;
		КонецЕсли;
		База.Добавить();
		База.KOD  = СокрЛП(Спр.Код);
		База.NAIM = СокрЛП(Спр.Наименование);
		База.CENA = 0;
		База.Записать();
	КонецЦикла;

	База.ЗакрытьФайл();
	Сообщить("Файл создан: " + ИмяФайла);
КонецПроцедуры

Правила, которые экономят время на отладке:

  • 🔤 имена полей — латиницей, не длиннее 10 символов. Это ограничение самого формата dBase;
  • 📏 длина поля типа N включает знак, разделитель и знаки после запятой. Для суммы до 999 999 999 999,99 нужна длина 15 и точность 2;
  • 🗂️ типы полей: C — строка, N — число, D — дата, L — логическое;
  • ✂️ строки длиннее поля обрезаются без предупреждения — проверьте самое длинное наименование;
  • 🔐 перед повторной выгрузкой в тот же файл закройте его в других программах, иначе СоздатьФайл не сможет его перезаписать.

Кодировку DBF задают методом Кодировка() объекта XBase до создания файла. Если программа-получатель показывает вместо кириллицы «кракозябры», переключите кодировку (OEM для DOS-программ, ANSI для Windows) и выгрузите заново. Точные значения параметра смотрите в синтакс-помощнике Конфигуратора.

Текстовый файл с разделителями

Текст подходит для загрузки куда угодно, а с разделителем «точка с запятой» его без вопросов откроет русский Excel. В 7.7 текст пишут объектом Текст:

Процедура ВыгрузитьВТекст()
	Т = СоздатьОбъект("Текст");
	Т.ДобавитьСтроку("Код;Наименование");

	Спр = СоздатьОбъект("Справочник.Номенклатура");
	Спр.ВыбратьЭлементы();
	Пока Спр.ПолучитьЭлемент() = 1 Цикл
		Наим = СтрЗаменить(СокрЛП(Спр.Наименование), ";", ",");
		Т.ДобавитьСтроку(СокрЛП(Спр.Код) + ";" + Наим);
	КонецЦикла;

	Т.Записать(КаталогИБ() + "nomen.csv");
КонецПроцедуры

СтрЗаменить убирает точку с запятой из наименований — иначе одна строка разъедется по лишним колонкам. Для разделителя «табуляция» используйте Симв(9).

Если Excel открывает файл с нечитаемой кириллицей, загрузите его через импорт текста («Данные → Из текстового/CSV-файла») и вручную выберите кодировку: 1251 (Windows) или 866 (DOS).

Куда сохранять: пути и права на запись

1С 7.7 писалась под Windows 9x и XP, а сейчас работает на Windows 10, 11 и терминальных серверах. Отсюда большинство проблем с «пропавшими» файлами.

СитуацияЧто происходитЧто делать
Сохраняете в папку программы внутри Program FilesWindows без прав администратора перенаправляет запись в VirtualStore профиля, файла в папке не видноСохранять в «Документы» или отдельную папку вроде C:\Obmen
1С на терминальном сервере (RDP)Диск C: в диалоге — это диск сервера, а не вашего компьютераВыбирать перенаправленный диск \\tsclient\C или общую сетевую папку
Сетевая папка базыНет прав на запись у пользователя WindowsПопросить администратора выдать права «Изменение» или выбрать другую папку
Файл открыт в ExcelПерезаписать нельзя, 1С сообщает об ошибке записиЗакрыть книгу в Excel и повторить

Не сохраняйте выгрузки в каталог информационной базы на постоянной основе: там лежат файлы данных 1С. Лишние файлы мешают резервному копированию, а случайная ошибка в имени может задеть рабочие файлы. Для обработок лучше завести отдельную папку обмена и записать её путь в константу или в начале кода.

Ошибки при экспорте и как их снять

Диагностика: выберите симптом

Отдельно про большие отчёты. Формат xls ограничен 65 536 строками на лист, а 7.7 на таблицах в десятки тысяч строк сохраняет медленно и потребляет много памяти. Оборотно-сальдовую ведомость за несколько лет с детализацией по субконто разумнее сразу выгружать в txt или dbf.

Программная выгрузка: пакетная конвертация и сохранение таблицы из кода

Если вы дорабатываете конфигурацию, табличный документ сохраняют без участия пользователя методом Записать. Второй параметр — формат: "MXL", "XLS", "HTML", "TXT".

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Отчет");
Таб.ВывестиСекцию("Шапка");
// ... вывод остальных секций ...
Таб.Записать(КаталогИБ() + "otchet.xls", "XLS");

Так удобно делать ночные выгрузки: отчёт формируется и сразу ложится в папку файлом, без открытия окна.

Дальше этот файл можно открыть через OLE и пересохранить в современный формат .xlsx:

Excel = СоздатьОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Книга = Excel.Workbooks.Open(КаталогИБ() + "otchet.xls");
Книга.SaveAs(КаталогИБ() + "otchet.xlsx", 51);
Книга.Close();
Excel.Quit();

Число 51 — это код формата книги Excel с поддержкой xlsx (константа xlOpenXMLWorkbook). Константы по имени из 1С 7.7 недоступны, поэтому пишут число.

Связка «штатно сохранить в xls → открыть в Excel → оформить» работает в разы быстрее, чем заполнение каждой ячейки через Cells. Оформление 1С (шрифты, рамки) переносится сразу, а через OLE вы доделываете только то, чего не хватает: автофильтр, закрепление шапки, формулы итогов.

Перед запуском обработки выгрузки
Выполнено: 0 / 5

Частые вопросы

В каком формате отправить отчёт бухгалтеру без 1С?
В xls или html. Файл mxl откроется только там, где есть программа для таблиц 1С, а xls откроет любой офисный пакет.
Почему отчёт в Excel выглядит иначе, чем на экране 1С?
Excel по-своему считает высоту строк и шрифты. Подправьте ширину колонок и перенос текста — данные при этом не меняются.
Можно ли сохранить сразу несколько отчётов в одну книгу Excel?
Штатно нет: каждый отчёт сохраняется отдельным файлом. Собрать их на разные листы одной книги можно через OLE, добавляя листы методом Worksheets.Add().
Нужен ли Excel на компьютере для сохранения в xls через меню?
Нет. Команда «Сохранить как» пишет xls средствами самой 1С. Excel нужен только для OLE-выгрузки и чтобы потом открыть файл.
Как выгрузить таблицу значений, а не отчёт?
Выведите её в табличный документ или обойдите строки циклом и запишите в Excel, DBF или текст — как в примерах выше.