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












Механизм РИБ фирмой 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. Был еще один момент на уровне фантастики. Я экспериментировал с ручной модификацией файлов выгрузки — загрузки. И в ходе очередной загрузки на подчиненный узел. В правой части окна прогресса загрузки, на долю секунды, промелькнуло окно сообщения (открылось и закрылось). Текст разглядеть не удалось, слишком это было неожиданно. Далее как при повествовании удивительных историй. "Какого же было его (мое) удивление", когда я зашел во "Все функции" и в регистрах увидел свой новый регистр. Я все это время был в программе, в конфигуратор не заходил, изменения в метаданных не принимал.

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

2 Comments

  1. RocKeR_13

    Есть расширение с добавленным свои регистром сведений и таких танцев не было) Максимум то, что писал в статье РИБ и расширения. В том числе ставил такие расширения уже в функционирующий РИБ

    Reply
  2. aspirator23

    Сурово. Хотел использовать расширение в РИБ. Теперь погожу.

    Reply

Leave a Comment

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