Как настроить автоматическую выгрузку и загрузку данных между 1С 7.7 ЗиК и Бухгалтерией по расписанию?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При регулярном переносе сведений (например, данных о сотрудниках) между информационными базами «Зарплата и Кадры 7.7» и «Бухгалтерский учет 7.7» ручной запуск внешних обработок отнимает время и может приводить к ошибкам из-за человеческого фактора. Разберем по шагам, как полностью автоматизировать процесс выгрузки в файл DBF и последующей загрузки по расписанию с помощью стандартного Планировщика задач Windows, командного файла (bat/cmd) и встроенного языка 1С 7.7.

Шаг 1. Формирование командной строки для запуска 1С 7.7

Для запуска платформы 1С:Предприятие 7.7 в пакетном режиме используется исполняемый файл 1cv7.exe (или 1cv7s.exe для сетевой/SQL-версии) со специальными ключами командной строки. Рассмотрим основные параметры:

  1. Режим запуска: ключевое слово enterprise указывает на запуск базы в режиме «1С:Предприятие».
  2. Путь к базе: ключ /D"ПутьКБазе" указывает каталог с файловой базой или каталогом регистрации SQL-базы.
  3. Пользователь и пароль: ключи /N"ИмяПользователя" и /P"Пароль" задают учетную запись, под которой выполняется сеанс. Рекомендуется создать отдельного служебного пользователя, например, Робот или AutoExchange.
  4. Параметр запуска (опционально): ключ /C"СтрокаПараметра" позволяет передать в сеанс произвольную текстовую строку, которую затем можно прочитать встроенной функцией ПараметрЗапуска().

Посмотрим на пример командного файла (exchange.bat), который последовательно запускает файловую базу ЗиК для выгрузки, а затем базу Бухгалтерии на SQL для загрузки:


@echo off
rem Шаг 1: Запуск выгрузки из ЗиК 7.7 (файловая)
"C:\Program Files (x86)\1Cv77\BIN\1cv7.exe" enterprise /D"D:\1C_Bases\ZIK" /N"Робот" /P"12345" /C"ExportStaff"

rem Шаг 2: Запуск загрузки в Бухгалтерию 7.7 (SQL)
"C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe" enterprise /D"D:\1C_Bases\BuhSQL" /N"Робот" /P"54321" /C"ImportStaff"

Шаг 2. Доработка глобального модуля (ПриНачалеРаботыСистемы)

Чтобы база при входе служебного пользователя автоматически инициировала регламентное действие, проанализируем предопределенную процедуру ПриНачалеРаботыСистемы() в глобальном модуле конфигурации.

Важный нюанс: синтаксис функции открытия зависит от того, является ли обработка встроенной в конфигурацию или внешним файлом .ert:

  1. Для встроенной обработки используется синтаксис вида: ОткрытьФорму("Обработка.ИмяВМетаданных").
  2. Для внешнего файла обработки (.ert) в 1С 7.7 используется вызов: ОткрытьФорму("Отчет", КонтекстИлиПараметр, "ПолныйПутьКФайлу.ert"). Тип "Отчет" платформенно применяется как к отчетам, так и к внешним обработкам.

Рассмотрим пример кода в процедуре ПриНачалеРаботыСистемы() глобального модуля:


Процедура ПриНачалеРаботыСистемы()
    // Проверяем параметр запуска или имя пользователя
    Если (ИмяПользователя() = "Робот") ИЛИ (ПараметрЗапуска() = "ExportStaff") Тогда
        // Открываем внешнюю обработку выгрузки
        ОткрытьФорму("Отчет", "АвтоРежим", КаталогИБ() + "ExtForms\ExportToDBF.ert");
    КонецЕсли;
КонецПроцедуры

Шаг 3. Логика выполнения и закрытия сеанса в самой обработке

Частая ошибка — размещение команды ЗавершитьРаботуСистемы(0) сразу после вызова ОткрытьФорму() в глобальном модуле. Так как открытие формы происходит асинхронно, платформа 1С завершит работу еще до того, как обработка успеет прочитать или записать данные.

Правильный подход заключается в переносе логики выгрузки/загрузки и последующего завершения в модуль самой внешней обработки — в предопределенную процедуру ПриОткрытии():


Процедура ПриОткрытии()
    // Проверяем параметр формы или глобальный параметр запуска
    Если (Форма.Параметр = "АвтоРежим") ИЛИ (ПараметрЗапуска() = "ExportStaff") Тогда
        // Выполняем экспорт данных в DBF
        ВыполнитьЭкспорт();
        
        // Завершаем сеанс 1С без вывода интерактивных подтверждений
        ЗавершитьРаботуСистемы(0);
    КонецЕсли;
КонецПроцедуры

Аналогичным образом настраивается обработка загрузки в информационной базе «1С:Бухгалтерия».

Ограничения и технические нюансы при регламентном запуске 1С 7.7

Выясним возможные сложности, с которыми можно столкнуться при регулярной автоматизации обменов в среде Windows:

  1. Модальные диалоги и предупреждения: если в процессе выгрузки или загрузки сработают функции Предупреждение(), Вопрос() или возникнет необработанное исключение, процесс 1С отобразит модальное окно и заблокируется в памяти. Все протоколирование должно вестись либо через вывод Сообщить(), либо записью в отдельный текстовый файл журнала (с использованием объекта Текст).
  2. Планировщик задач и «Сессия 0» (Session 0 Isolation): в современных ОС Windows (Server 2012–2022, Windows 10/11) фоновые задачи, настроенные на выполнение «Вне зависимости от регистрации пользователя», запускаются в неинтерактивной нулевой сессии. Так как 1С 7.7 является 32-битным графическим приложением, при инициализации оконной подсистемы в неинтерактивном режиме возможны зависания. Надежнее запускать регламентные bat-файлы от имени служебного пользователя в постоянном активном сеансе либо использовать альтернативные методы.
  3. Блокировки таблиц DBF: в файловых базах 1С 7.7 (ЗиК) при обращении к справочникам во время фонового обмена не должно происходить монопольных операций (например, переиндексации или восстановления последовательности), иначе регламентный процесс прервется ошибкой доступа к файлам таблиц.

Альтернатива: Прямой обмен через OLE-соединение

Чтобы избежать запуска интерактивного интерфейса и разделения задачи на выгрузку в промежуточный DBF-файл и последующую загрузку, можно настроить прямой перенос через COM/OLE. База ЗиК может сама подключиться к SQL-базе Бухгалтерии с помощью СоздатьОбъект("V77S.Application"), найти необходимые элементы справочника «Сотрудники» и синхронизировать их в рамках единой процедуры.

← На главную