Выгрузка отчёта из 1С:Предприятия 7.7 в файл: штатно, через OLE и XBase
Содержание
Открытую таблицу в 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 и другие форматы через меню
Сначала сформируйте отчёт так, чтобы он открылся в отдельном окне. Дальше:
- Щёлкните мышью внутри таблицы — окно отчёта должно быть активным. Если активна форма настройки отчёта, команда сохранит не то, что нужно.
- Откройте
Файл → Сохранить как.... - В поле типа файла выберите нужный формат, например таблицы Excel (
*.xls). - Выберите папку и введите имя файла. Расширение программа подставит сама.
- Нажмите «Сохранить».
Быстрый способ без сохранения файла
Если нужен кусок отчёта, а не весь документ:
- 🖱️ выделите мышью диапазон ячеек в таблице 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 Files | Windows без прав администратора перенаправляет запись в 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 вы доделываете только то, чего не хватает: автофильтр, закрепление шапки, формулы итогов.