Работа в распределенных информационных базах (УРБД) на платформе 1С 7.7 часто сопряжена с определенными трудностями, особенно когда требуется оперативно внести изменения в код, не дожидаясь длительного цикла обмена или не имея возможности выгнать всех пользователей для монопольного обновления. Разберем ситуацию, когда в центральной базе (ЦБ) были изменены только модули, отчеты или формы, а структура таблиц базы данных осталась прежней. Рассмотрим, можно ли просто скопировать файл 1cv7.md на периферийную базу (ПБ) и какие инструменты помогут автоматизировать этот процесс.
Проанализируем возможность простой замены файла 1cv7.md в каталоге периферийной базы. Теоретически, если при сохранении конфигурации в ЦБ система выдает сообщение «Изменение конфигурации не вызвало изменения данных», это означает, что физическая структура таблиц (файлы .dbf или таблицы SQL) не корректировалась. В этом случае прямая замена MD-файла возможна, но требует соблюдения строгой последовательности действий.
Рассмотрим алгоритм действий при ручной подмене:
NEWSTR в каталоге базы. Перед копированием нового MD-файла обязательно удалите эту папку, если она существует. В ней 1С хранит временные объекты для реструктуризации, и наличие старых данных может привести к повреждению информационной базы.Важное предупреждение: Метод прямой подмены не является официальным. При малейшем изменении структуры (даже добавление реквизита в справочник без изменения его типа) простая замена MD приведет к полной неработоспособности базы из-за расхождения файла метаданных и словаря данных (1cv7.dd или 1cv7.dds).
Если ваша задача — обновлять логику работы (модули документов, справочников, отчеты) без выгона пользователей и без манипуляций с файлом MD, наиболее профессиональным решением будет использование внешней компоненты TurboMD. Разберем подробнее, как это работает.
TurboMD позволяет подгружать внешние текстовые файлы с кодом модулей и формами .mxl вместо тех, что жестко прописаны в 1cv7.md. Проанализируем процесс настройки этой компоненты.
Для активации механизма в процедуре ПриНачалеРаботыСистемы глобального модуля необходимо прописать загрузку компоненты:
Процедура ПриНачалеРаботыСистемы()
Если ЗагрузитьВнешнююКомпоненту("turbomd.dll") = 0 Тогда
Сообщить("Ошибка загрузки TurboMD!");
КонецЕсли;
КонецПроцедуры
После этого система начнет отслеживать наличие файла turbomd.prm в каталоге базы данных. Этот файл является конфигурационным для компоненты и содержит инструкции: какой модуль из MD заменить внешним файлом.
Рассмотрим, как сделать процесс разработки максимально комфортным. При использовании OpenConf и специального скрипта turbomd.vbs, программист может выгружать изменения одним нажатием клавиши (например, Ctrl+M).
Алгоритм работы разработчика выглядит так:
turbomd.prm.Выясним причину, по которой Глобальный модуль (ГМ) является исключением. В архитектуре 1С 7.7 Глобальный модуль компилируется единожды в момент запуска клиентского приложения. Поэтому, даже если TurboMD подменит файл ГМ «на лету», изменения вступят в силу для конкретного пользователя только после его перезахода в программу. Однако это все равно удобнее, чем монопольный захват всей базы для сохранения MD.
Посмотрим на практический совет по долгосрочной эксплуатации такой системы. Не стоит бесконечно работать на «внешних» модулях через TurboMD. Хорошей практикой считается использование технологических окон (например, раз в неделю или в конце рабочего дня), когда все пользователи выходят из базы, и накопленные изменения из внешних файлов окончательно сохраняются в основной MD-файл через Конфигуратор. После этого файл turbomd.prm очищается до следующих правок.
Резюмируем:
NEWSTR.1cv7.md перед любыми манипуляциями по «горячей» подмене.