РИБ и расширения конфигурации, меняющие метаданные

Публикация № 1161692

Разработка - Обмен данными 1С - Распределенная БД (УРИБ, УРБД)

РИБ расширение конфигурации

Механизм РИБ фирмой 1С постоянно дорабатывается, но на данный момент есть проблемы с "Расширениями конфигурации", которые меняют состав или структуру метаданных. Основной линией "политики партии" сейчас является "замок" на конфигурации поставщика. Т.е. все изменения делаем в расширении, как их заставить загрузиться в подчиненных узлах, я и хочу рассказать.

Когда 1С  предложили нам “Расширения конфигурации” в РИБ я был в восторге, но радость оказалась недолгая. Мне, как сопровождающему торговую сеть, нужно было как-то доставить их в подчиненные узлы. С этим были проблемы. Если простые расширения, которые изменяли только код или “картинку”   можно было выгрузить-загрузить, то расширения изменяющие структуру метаданных никак.  Расширения “сложные” можно было выгрузить только с Начальным образом. А что делать, если сеть уже стоит?  С 8.3.12  я боролся с неадекватностью РИБ вырезанием из файла обмена информации об изменении расширения. Был такой глюк, когда измененная конфигурация уже разошлась по узлам, и они ее приняли. И ты ничего не менял, а РИБ все равно пытается ее загрузить как новую. И в узлах был ступор.

Пример для Розница 2.2

&После("ВыполнитьВыгрузкуДанных")

Процедура МоиРасш1_ВыполнитьВыгрузкуДанных(Отказ, СообщениеОбОшибке)
       
         ПутьКФайлуЧтение = ИмяФайлаСообщенияОбмена();
         Если  ПутьКФайлуЧтение = "" Тогда возврат КонецЕсли;
         ПутьКФайлуЗапись = ИмяФайлаСообщенияОбмена()+"S";
 
         ТекстовыйФайл = Новый ТекстовыйДокумент;
         ТекстовыйФайлЗапись = Новый ТекстовыйДокумент;

    ТекстовыйФайл.Прочитать(

       ПутьКФайлуЧтение,
       КодировкаТекста.UTF8,
       Символы.ВК + Символы.ПС
    );
    
   ПерваяСтрока = 0; ПоследняяСтрока = 0;

    Для Индекс = 1 По ТекстовыйФайл.КоличествоСтрок() Цикл
        Строка = ТекстовыйФайл.ПолучитьСтроку(Индекс);
        Если СтрНайти(Строка, "v8de:ConfigurationExtensions",,1) > 0 и
            СтрНайти(Строка, "/v8de:",,1) = 0 Тогда
            Сообщить("Первая строка - " + Строка(Индекс));
            ПерваяСтрока = Индекс;
        КонецЕсли;
        Если СтрНайти(Строка, "/v8de:ConfigurationExtensions",,1) > 0 Тогда
            Сообщить("Последняя строка - " + Строка(Индекс));
            ПоследняяСтрока = Индекс;
        КонецЕсли;
    КонецЦикла;
    
    Если ПерваяСтрока = 0 Тогда возврат; КонецЕсли;
        Для Индекс = 1 По ТекстовыйФайл.КоличествоСтрок() Цикл
            Строка = ТекстовыйФайл.ПолучитьСтроку(Индекс);
            Если Индекс < ПерваяСтрока или Индекс > ПоследняяСтрока Тогда
                ТекстовыйФайлЗапись.ДобавитьСтроку(Строка);
            КонецЕсли;
         КонецЦикла;
      
        ТекстовыйФайлЗапись.Записать(
        ПутьКФайлуЗапись, 
        КодировкаТекста.UTF8, 
        Символы.ВК + Символы.ПС 
    );
         ПереместитьФайл(ПутьКФайлуЗапись, ПутьКФайлуЧтение);
        
КонецПроцедуры

 

Главное, чтобы совпадали контрольные суммы конфигураций Центра и узлов.

Если они не совпадают, в эту процедуру можно добавить подмену контрольных сумм и заставить обмениваться базы. Но вы должны понимать, что структура метаданных у вас одинаковая, а изменены только мелочи.

Недавно обратился ко мне клиент с доделкой УНФ. Так как пришлось переходить на 8.3.15. , я  решил попробовать и проверить , а как там дела с РИБ. Исходные данные:

Windows 7 64bit, 1С:Предприятие 8.3 (8.3.15.1747), Управление нашей фирмой, редакция 1.6 (1.6.19.137) , файловый режим. Надеюсь, на другой конфигурации тоже заработает.

Нужно было добавить РегистрСведений.ПроцентНаценки. Измерения: Номенклатура, ВидЦены, Характеристика. Ресурс: Процент.

Как я делал эксперимент:

  1. На центральной базе (пока без Изменений), создал начальный образ подчиненного узла. Установил его и сделал синхронизации до всех “сейчас”. У вас может уже стоять сеть узлов, с какими-то расширениями. УНФ (наценка) - расширение без изменений в метаданных.
  2. На центральной базе добавил расширение “РасширениеРегистрПроцентНаценки”, БЕЗ изменений метаданных. Например: вывел форму «Синхронизация данных» в рабочую область. Задолбало лазить постоянно хрен знает куда. Поставил признак “Используется в РИБ”.
  3. Загрузил в подчиненный узел. Он ругнулся, что пришло изменение в расширениях и нужно перезагрузиться.
  4. Перезагружаемся и делаем обмены до всех “сейчас”.
  5. На центральной базе,  добавил в расширение РегистрСведений. Для быстрой проверки и для “порядка”  установил  “Ведущее”  в измерении Номенклатура. Принимаем в центральной базе добавление регистра.
  6. На подчиненном узле, обработкой (ее полно в интернете) “Сбросил центральный узел”.
  7. Зашел в конфигуратор на подчиненном узле и удалил “РасширениеРегистрПроцентНаценки”. Удалять ее нужно потому, что на ней стоит признак РИБ, и с ней ничего сделать нельзя. Из конфигуратора запустил основную программу. Закрыл конфигуратор, иначе не даст установить основной узел.
  8. На вопрос о восстановлении главного узла – соглашаемся.
  9. Запускаем синхронизацию на Центральном затем на подчиненном узле. Загрузится расширение с добавленным регистром сведений ;-).
  10.  Зашел в конфигуратор на подчиненном узле в Расширения конфигурации и что мы видим. Расширение появилось, но оно пустое.
  11.  На центральном узле выгрузил расширение в РасширениеРегистрПроцентНаценки.cfe и загрузил его на подчиненном узле. Принял изменение конфигурации (регистр добавился). На изображении подчиненный узел без замков, значит можно загрузить расширение.
  12.  Из конфигуратора (на подчиненном узле ) запустил основную программу. Закрыл конфигуратор.
  13. Выполнил обмен между узлами  до всех “сейчас”.
  14.  Можете зайти в конфигуратор на подчиненном узле и убедится, все что должно быть на замках, стоит на замках РИБ.

Проблемы которые могут появиться и сильно испугать, но на самом деле они не такие страшные.

Механизм обмена расширениями от нас скрыт, мы не можем его контролировать. Но исследовать этот “черный ящик” можно, и можно понять логику его действия. По крайней мере на момент 8.3.15.1747.  Чего категорически нельзя делать, это пытаться в подчиненном узле загрузить расширение с изменениями метаданных без предварительной загрузки через РИБ. Так как признак использования расширения в РИБ проставляется только при штатной синхронизации. Программа проверяет загружаемое расширение и если оно ей “понравилось”, то она его проглотит. Именно проглотит, потому что она может сохранять их в себе "пачками". Несмотря на то, что по идее должна контролировать их хотя бы по имени.  Далее даже если мы его удаляем, привязка расширения к РИБ сохраняется и восстанавливается при восстановлении «Центрального узла» на подчиненном узле .

При загрузке расширения (если уже ранее были попытки загрузки) можно словить ошибку – «Нарушение прав доступа» при входе в программу. Без описания в конфигураторе.

 

 

 

 

 

 

 

Для ликвидации этой ошибки, в подчиненном узле, нужно удалить ВСЕ версии нашего расширения “РасширениеРегистрПроцентНаценки”. Да да их будет несколько. Симптомы такие: вы удаляете в конфигураторе расширение, комп немного думает, потом «оба-на» и расширение снова стоит в окне Расширения конфигурации. Нужно опять повторить попытку его удаления, пока расширение не исчезнет из списка. Неизвестно, мы удаляем разные расширения или одно и тоже, но где-то стоит счетчик. И он минусуется. Нужно зайти –выйти из рабочей программы. После возвращаемся к шагу 7. У меня был случай когда в конфигураторе расширения не было, а в программе был. Убивал через Управление расширениями конфигурации. Один раз (в ходе одного из экспериментов) был «вылет» с ошибкой – “\что-то-там-тра-та-та.срр”, без последствий для базы.

 Я не знаю, то что я описал – “баг” или “фича”. Бывают случаи, когда жизненно необходимо добавить хотя бы регистр сведений. Иначе потеря клиента и денег.

Если кто сделает, отпишитесь, как прошло.

 

p.s. Был еще один момент на уровне фантастики. Я экспериментировал с ручной модификацией файлов выгрузки - загрузки. И в ходе очередной загрузки на подчиненный узел. В правой части окна прогресса загрузки, на долю секунды, промелькнуло окно сообщения (открылось и закрылось). Текст разглядеть не удалось, слишком это было неожиданно. Далее как при повествовании удивительных историй. "Какого же было его (мое) удивление", когда я зашел во "Все функции" и в регистрах увидел свой новый регистр. Я все это время был в программе, в конфигуратор не заходил, изменения в метаданных не принимал.

Воспроизвести еще раз не удалось, списал на позднее время и усталость :-).

Скачать файлы

Наименование Файл Версия Размер
РИБ и расширения конфигурации, меняющие метаданные:

.epf 8,75Kb
02.12.19
0
.epf 8,75Kb Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 795 03.12.19 14:01 Сейчас в теме
Есть расширение с добавленным свои регистром сведений и таких танцев не было) Максимум то, что писал в статье РИБ и расширения. В том числе ставил такие расширения уже в функционирующий РИБ
2. aspirator23 421 09.12.19 09:29 Сейчас в теме
Сурово. Хотел использовать расширение в РИБ. Теперь погожу.
Оставьте свое сообщение

См. также

Некоторые полезные обработки для администрирования и отладки обменов

Поиск данных Распределенная БД (УРИБ, УРБД) Информационная безопасность v8 1cv8.cf Абонемент ($m)

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

1 стартмани

25.10.2012    34967    28    Артано    28    

Создаем начальный образ УПП с данными по одному юридическому лицу (РИБ)

Практика программирования Распределенная БД (УРИБ, УРБД) v8 УПП1 Абонемент ($m)

Как я создавал план обмена для УПП по конкретной организации (РИБ).

1 стартмани

14.12.2017    11862    33    9093042    4