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

Программист 1С v7.7 Сфера услуг, туризм и социальный сектор
← На главную

Работа с платформой 1С:Предприятие 7.7 в современных реалиях часто сопряжена с трудностями, так как эта версия является морально устаревшей и не имеет встроенных механизмов для работы с форматами JSON, XML или прямой печати в PDF. Однако задача «выпилить» данные для внешнего сервера (например, для личного кабинета ЖКХ или автоматической рассылки счетов) вполне решаема. Рассмотрим основные способы извлечения информации и формирования документов, которые помогут нам автоматизировать этот процесс.

Способ 1: Прямой доступ к базе данных через DBF-файлы

Если ваша версия 1С 7.7 работает в файловом режиме (а это наиболее частый случай), все данные хранятся в формате DBF. Для их извлечения нам даже не нужно запускать саму программу 1С. Это самый быстрый способ получить «сырые» данные для последующей загрузки в MySQL или другую СУБД.

Проанализируем структуру папки с базой данных. Нам понадобятся следующие файлы:

  1. 1Cv7.dd — это текстовый файл (словарь данных). Откроем его любым текстовым редактором. В нем описано соответствие имен таблиц (например, DH123) конкретным объектам 1С (например, Документ «Счет»).
  2. Файлы с префиксом DH (например, DH123.dbf) — здесь хранятся «шапки» документов: номер, дата, общая сумма, ссылка на контрагента.
  3. Файлы с префиксом DT (например, DT123.dbf) — здесь находятся табличные части документов (перечень услуг, количество, цена).
  4. Файлы с префиксом SC (например, SC456.dbf) — это справочники (наименования организаций, адреса, тарифы).

Выясним причину сложности прямой работы: 1С использует внутренние идентификаторы (ID). Например, в файле счета вместо названия компании будет стоять код типа 36PR. Чтобы получить человеческое название, нам нужно программно связать поле из таблицы документов с полем ID в таблице справочника контрагентов.

Пример логики на языке программирования (например, Python или PHP), читающем DBF:


// Псевдокод извлечения данных
Для Каждой Записи Из Файла_DH123 Цикл
    Если Запись.ПомеченаНаУдаление Тогда Продолжить; КонецЕсли;
    НомерДокумента = Запись.DOCNO;
    ДатаДокумента = Запись.DATE;
    ID_Контрагента = Запись.SP154; // Поле из 1Cv7.dd
    // Ищем имя в справочнике SC
    ИмяКлиента = НайтиВТаблицеSC(ID_Контрагента);
КонецЦикла;

Важный нюанс: 1С 7.7 не удаляет записи физически. Первый байт каждой строки в DBF-файле является флагом удаления. Если там стоит звездочка (*) или специальный маркер, эту запись следует игнорировать.

Способ 2: Использование универсальной обработки DOCPRINT.ert

Если нам нужно не просто получить цифры, а именно готовый макет счета, проанализируем возможности штатных инструментов. На диске ИТС (или в архивах сообщества) существует обработка DOCPRINT.ert (Универсальная печать документов).

Разберем по шагам, как она работает:

  1. Запускаем 1С 7.7 в режиме «Предприятие».
  2. Открываем обработку через меню «Файл — Открыть».
  3. Выбираем тип документа (в нашем случае «Счет») и задаем период.
  4. Обработка формирует реестр или последовательность печатных форм.

Основная проблема здесь — интерактивность. 1С 7.7 выводит печатную форму в формате MXL. Чтобы превратить это в Excel или PDF автоматически, потребуется небольшая доработка кода обработки. Рассмотрим, как программно сохранить форму в формате Excel:


// Пример кода для вставки в обработку 7.7
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Счет");
// ... тут идет код заполнения макета данными ...
Таб.ВывестиСекцию("Шапка");
// Сохраняем результат
ПутьКФайлу = "C:\Sids\" + СокрЛП(ТекущийДокумент.НомерДокумента) + ".xls";
Таб.Записать(ПутьКФайлу, "XLS");

Способ 3: Автоматизация через COM-соединение (OLE Automation)

Для разработчиков, не знающих внутренний язык 1С, но владеющих другими инструментами, идеально подойдет метод COM-соединения. Мы можем заставить 1С работать в фоновом режиме, отдавая команды из внешнего скрипта.

Посмотрим на пример скрипта (на языке VBScript или Python), который подключается к 1С 7.7 и выгружает данные:


// Инициализация соединения
v7 = CreateObject("V77.Application")
result = v7.Initialize(v7.RMTrade, "/d""C:\PathToBAse"" /nAdmin", "NO_SPLASH_SHOW")

// Создаем объект для выборки документов
Счет = v7.CreateObject("Документ.Счет")
Счет.ВыбратьДокументы(ДатаНачала, ДатаКонца)

Пока Счет.ПолучитьДокумент() = 1 Цикл
    Если Счет.ПометкаУдаления() = 0 Тогда
        // Получаем данные напрямую из объекта
        Номер = Счет.НомерДок
        Сумма = Счет.Итог("Сумма")
        // Здесь можно отправить данные в MySQL через ADODB
    КонецЕсли;
КонецЦикла;

Этот метод позволяет избежать прямого парсинга DBF и гарантирует, что вы получите актуальные данные с учетом всех внутренних пересчетов платформы.

Способ 4: Групповое формирование PDF

Поскольку 1С 7.7 не умеет сохранять в PDF «из коробки», нам потребуется виртуальный принтер (например, PDFCreator, Bullzip или PDF24). Суть решения заключается в следующем:

  1. Устанавливаем виртуальный принтер и настраиваем его на «Автосохранение» (Auto-save). В настройках принтера указываем папку, куда будут падать файлы, и шаблон имени (например, по заголовку документа).
  2. В 1С запускаем цикл печати нужных документов.
  3. Программа отправляет счета на печать один за другим, а принтер в фоновом режиме генерирует PDF-файлы.

Проанализируем ситуацию: если документов сотни, принтер может «захлебнуться». В этом случае в коде 1С рекомендуется делать небольшую паузу между отправкой документов на печать, используя функцию Предупреждение(" ", 1) или внешние компоненты для ожидания.

Резюме и рекомендации

Подведем итоги нашего исследования:

Помните, что при работе с DBF напрямую крайне важно учитывать кодировку (обычно это Windows-1251) и формат дат (в 1С 7.7 они хранятся как восьмизначная строка ГГГГММДД). Следуя этим шагам, вы сможете успешно интегрировать старую систему в современный ИТ-ландшафт.

← На главную