"Динамическое обновление" в 1С Предприятие 7.7

Всем известен механизм динамического обновления в 1С Предприятие 8.х. Однако есть недокументированная возможность сделать тоже самое (естественно с некоторыми особенностями) в 1С Предприятие 7.7

Скажу сразу: метод недокументированный и ранее в публикациях мной не встречался.

Метод протестирован на файловом варианте 7.70.27 в режиме терминального сервера. Для остальных вариантов не тестировался.

«Лирика»

Как обычно это и бывает, потребовалось у клиента провести ряд модернизаций конфигурации в режимах «срочно», «еще вот это» и «ещё вот это забыли». При этом был разгар рабочего времени, люди трудятся, да и выгнать всех из базы задачка нетривиальная. Да ещё и несколько раз подряд.

И тут подумалось мне, а как и когда загружается файл 1cv7.md в память процесса? И провел эксперимент (естественно на копии рабочей базы: «тест база»). Загрузил 1С в режиме «Предприятие», через Process Explorer (спасибо sysinternals) нашел Handler файла 1cv7.md и сделал «close handler». 1С продолжила работу. Все, проверенные мной, обработки, отчёты, документы, справочники открывались без проблем.

Следующим шагом стало создание «тест 2 база» — копии «тест база». 

 «тест 2 база» — открыта Конфигуратором

 «тест база» — отрыта Предприятием

В Конфигураторе делаем изменения (которые не затрагивают структуру базы данных — по этому же методу возможно динамическое обновление и в v8). Сохраняем конфигурацию.

Закрываем handler 1cv7.md базы Предприятия и копируем  1cv7.md  «тест 2 база» в каталог базы  «тест база» с перезаписью.

Предприятие работает как будто ничего не произошло. А при повторном заходе «подхватывает» новую конфигурацию.

«Проза»

Метод был протестирован на рабочей базе с одновременным подключением 15-ти пользователей в файловом режиме в терминальном сервере сначала в периферийной, а затем в центральной БД. 

Были отключены handler-ы файла 1cv7.md рабочей базы. 

Все пользователи продолжили работать без изменений.

На место рабочей конфигурации копировался модифицированный файл 1cv7.md  (без изменения структуры рабочей базы данных).

Новый файл 1cv7.md подхватывался при очередном заходе пользователя в 1С.

 

P.S. Автор не несёт ни какой моральной и/или материальной ответственности за использование данного метода. Все Ваши действия Вы осуществляете на свой страх и риск.

P.P.S. Если подобный метод уже был кем-то описан, пожалуйста, проинформируйте меня об этом (желательно со ссылкой на источник)

 

 

15 Comments

  1. andrewks

    есть же TurboMD

    Reply
  2. DenisCh

    Очередное открытие Америки и изобретение велосипеда…

    Вот однажды подменят мд с изменением метаданных и аля-улю.

    Лучше уж турбомд.

    Reply
  3. dime2

    (1)

    Это надстройка к штатным средствам 1С.

    1. Описанный же метод позволяет обойтись без внешних компонент.

    2. На момент «надо прямо сейчас» в конфигурации может и не быть загруженного TurboMD (как в моём случае)

    Reply
  4. MarSeN

    (0)

    Есть решение от Romix. Когда я его пользовал, помнится, путь к мд прописывался в файлике.

    Там используется перехват и перенаправление открытия файла мд по новому пути.

    Вот что нашел на скорую руку http://www.forum.mista.ru/topic.php?id=175124&page=1

    Reply
  5. dime2

    (2) DenisCh,

    Очередное открытие Америки и изобретение велосипеда…

    А кто-то уже предлагал такой метод? Не ясно, кого именно повторяю.

    Вот однажды подменят мд с изменением метаданных и аля-улю.

    Лучше уж турбомд.

    Так это метод не на каждый день.

    «Знал бы где упаду — соломки бы подстелил» (с) Народная мудрость

    Reply
  6. dime2

    (3) MarSeN,

    Так же, как и с TurboMD нужно заранее иметь данный инструмент.

    Я не смогу ни MD_CHANGER, ни TurboMD подцепить «на горячую»

    Reply
  7. Ta_Da

    Лучше уж #ЗагрузитьИзФайла использовать, если не хочется с ВК связываться, чем такое извращение (и это в активно используемой базе, на минуточку, в которой пользователи работают).

    Reply
  8. DenisCh

    (5) dime2,

    А кто-то уже предлагал такой метод?

    Я таким 5 лет подряд пользовался, пока с 77 не ушёл 🙂 Только я анлокером пользовался.

    Reply
  9. dime2

    (7) Ta_Da,

    Как уже писалось выше, вставить #ЗагрузитьИзФайла нужно тоже заранее.

    Reply
  10. panda-34

    (6)Вообще-то, TurboMD можно (и нужно) загружать именно что «на-горячую», простым открытием обработки и для этого не нужно закрывать сеанс пользователя, достаточно переоткрыть измененную форму. Единственное, что там не получится — это правка глобального модуля.

    Reply
  11. dime2

    (10) panda-34,

    Если я правильно понял из документации, (http://openconf.1cpp.ru/vk/turbomd/)

    То

    Компонента загружается в 1С с помощью метода

    ЗагрузитьВнешнююКомпоненту(ПутьКдлл);

    MD-шник пользователей уже должен был загрузить эту компоненту.

    А значит метод с TurboMD НЕ подходит для конфигураций БЕЗ загруженного TurboMD.

    Как вариант, (и метод избежать проблем, описанных (2) DenisCh) в перую очередь добавить в MD-файл поддержку TurboMD, а сам MD файл загрузить описанным мной (или через Unlocker — спасибо (8) DenisCh) методом.

    Reply
  12. DenisCh

    (11) dime2, турбу можно загрузить во внешней обработке. Так что даже конфу менять не надо, о чём и говорится в (10)

    Reply
  13. dime2

    (12) DenisCh,

    Так загружу-то я её себе в свой сеанс, а не каждому пользователю. А ГМ TurboMD менять не умеет. А значит пользователи будут продолжать пользоваться старым MD, без поддержки TurboMD

    Reply
  14. dime2

    Ну и самый главный (оставшийся) «гвоздь»: TurboMD меняет текст модулей и формы, но не меняет Права и пользовательские Интерфейсы. А это тоже надо было сделать.

    Reply
  15. INSh

    Автору плюс за идею! Молодец!

    Мне, например, в голову такое не приходило…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *