Как обновить MD-файл на периферийной базе 1С 7.7 УРБД без стандартной выгрузки

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Работа в распределенных информационных базах (УРБД) на платформе 1С 7.7 часто сопряжена с определенными трудностями, особенно когда требуется оперативно внести изменения в код, не дожидаясь длительного цикла обмена или не имея возможности выгнать всех пользователей для монопольного обновления. Разберем ситуацию, когда в центральной базе (ЦБ) были изменены только модули, отчеты или формы, а структура таблиц базы данных осталась прежней. Рассмотрим, можно ли просто скопировать файл 1cv7.md на периферийную базу (ПБ) и какие инструменты помогут автоматизировать этот процесс.

Вариант 1: Прямая подмена файла конфигурации

Проанализируем возможность простой замены файла 1cv7.md в каталоге периферийной базы. Теоретически, если при сохранении конфигурации в ЦБ система выдает сообщение «Изменение конфигурации не вызвало изменения данных», это означает, что физическая структура таблиц (файлы .dbf или таблицы SQL) не корректировалась. В этом случае прямая замена MD-файла возможна, но требует соблюдения строгой последовательности действий.

Рассмотрим алгоритм действий при ручной подмене:

  1. Синхронизация обмена. Перед заменой файла на ПБ необходимо сначала принять последний пакет обмена из ЦБ. Это важно, так как пакет может содержать флаг об изменении конфигурации. Если вы сначала замените MD, а потом попытаетесь загрузить пакет, система может затереть ваши изменения или выдать ошибку несоответствия версий.
  2. Очистка временных файлов. Выясним причину возможных ошибок при обновлении: папка NEWSTR в каталоге базы. Перед копированием нового MD-файла обязательно удалите эту папку, если она существует. В ней 1С хранит временные объекты для реструктуризации, и наличие старых данных может привести к повреждению информационной базы.
  3. Корректировка регистрации изменений. Посмотрим на важный нюанс: запись о регистрации изменений конфигурации. В системных таблицах обмена хранится информация о том, что конфигурация была изменена. Если вы просто подмените файл, ПБ все равно может «просить» обновление через стандартный механизм обмена. Опытные разработчики рекомендуют «вычеркнуть» запись о конфигурации из таблицы регистрации изменений, чтобы обмен проходил в штатном режиме.

Важное предупреждение: Метод прямой подмены не является официальным. При малейшем изменении структуры (даже добавление реквизита в справочник без изменения его типа) простая замена MD приведет к полной неработоспособности базы из-за расхождения файла метаданных и словаря данных (1cv7.dd или 1cv7.dds).

Вариант 2: Использование TurboMD для динамического обновления

Если ваша задача — обновлять логику работы (модули документов, справочников, отчеты) без выгона пользователей и без манипуляций с файлом MD, наиболее профессиональным решением будет использование внешней компоненты TurboMD. Разберем подробнее, как это работает.

TurboMD позволяет подгружать внешние текстовые файлы с кодом модулей и формами .mxl вместо тех, что жестко прописаны в 1cv7.md. Проанализируем процесс настройки этой компоненты.

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


Процедура ПриНачалеРаботыСистемы()
    Если ЗагрузитьВнешнююКомпоненту("turbomd.dll") = 0 Тогда
        Сообщить("Ошибка загрузки TurboMD!");
    КонецЕсли;
КонецПроцедуры

После этого система начнет отслеживать наличие файла turbomd.prm в каталоге базы данных. Этот файл является конфигурационным для компоненты и содержит инструкции: какой модуль из MD заменить внешним файлом.

Автоматизация работы с TurboMD через OpenConf

Рассмотрим, как сделать процесс разработки максимально комфортным. При использовании OpenConf и специального скрипта turbomd.vbs, программист может выгружать изменения одним нажатием клавиши (например, Ctrl+M).

Алгоритм работы разработчика выглядит так:

  1. Открываем модуль или форму в Конфигураторе.
  2. Вносим необходимые правки.
  3. Нажимаем горячую клавишу для запуска скрипта выгрузки.
  4. Скрипт сохраняет текущий модуль в отдельный текстовый файл в специальном каталоге и автоматически прописывает путь к нему в turbomd.prm.
  5. Результат: У всех пользователей, которые в данный момент работают в базе, при следующем открытии этой формы или вызове метода модуля будет исполняться уже новый код. Перезапуск системы не требуется!

Особенности обновления Глобального модуля

Выясним причину, по которой Глобальный модуль (ГМ) является исключением. В архитектуре 1С 7.7 Глобальный модуль компилируется единожды в момент запуска клиентского приложения. Поэтому, даже если TurboMD подменит файл ГМ «на лету», изменения вступят в силу для конкретного пользователя только после его перезахода в программу. Однако это все равно удобнее, чем монопольный захват всей базы для сохранения MD.

Рекомендации по обслуживанию базы

Посмотрим на практический совет по долгосрочной эксплуатации такой системы. Не стоит бесконечно работать на «внешних» модулях через TurboMD. Хорошей практикой считается использование технологических окон (например, раз в неделю или в конце рабочего дня), когда все пользователи выходят из базы, и накопленные изменения из внешних файлов окончательно сохраняются в основной MD-файл через Конфигуратор. После этого файл turbomd.prm очищается до следующих правок.

Резюмируем:

← На главную