УНФ РИБ





В типовой УНФ нет РИБа. Исправляем этот недостаток, используя УТ 11 и ИТС. Статья подойдет для настойки распределенки в любой конфе на базе БСП.

 Рецепт от http://1c39.ru. Для приготовления этого блюда потребуется УТ 11 одна штука. Открываем план обмена полный. Нажимаем состав. Создаем такой же в УНФ и снимаем галки у тех же объектов, что и в УТ. Авторегистрация — запретить. Ставим галку РИБ. Запихиваем в подсистему обмен данными. Макеты не используем. В модуль объекта пишем (из ИТС):

Перем КоличествоОбъектовЗагружено;
Перем
КоличествоОбъектовВыгружено;
Процедура
ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза)
 
КоличествоОбъектовВыгружено = КоличествоОбъектовВыгружено + 1;
КонецПроцедуры

Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)
 
КоличествоОбъектовВыгружено = КоличествоОбъектовВыгружено + 1;
КонецПроцедуры

Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
 
КоличествоОбъектовЗагружено = КоличествоОбъектовЗагружено + 1;
КонецПроцедуры

Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
 
КоличествоОбъектовЗагружено = КоличествоОбъектовЗагружено + 1;
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
  Если
ОбменДаннымиСервер.НадоВыполнитьОбработчикПослеВыгрузкиДанных(ЭтотОбъект, Ссылка) Тогда
   
ПослеВыгрузкиДанных(Отказ);
  ИначеЕсли
ОбменДаннымиСервер.НадоВыполнитьОбработчикПослеЗагрузкиДанных(ЭтотОбъект, Ссылка) Тогда
   
ПослеЗагрузкиДанных(Отказ);
  КонецЕсли;
КонецПроцедуры

Процедура ПослеВыгрузкиДанных(Отказ)
 
Сообщить(«КоличествоОбъектовВыгружено: » + Строка(КоличествоОбъектовВыгружено));
КонецПроцедуры

Процедура ПослеЗагрузкиДанных(Отказ)
 
Сообщить(«КоличествоОбъектовЗагружено: » + Строка(КоличествоОбъектовЗагружено));
КонецПроцедуры

КоличествоОбъектовЗагружено = 0;
КоличествоОбъектовВыгружено = 0;

 

В модуль менеджера добавляем заглушки (http://www.conf1c.ru/2012/05/blog-post_02.html):

    Функция ПояснениеДляНастройкиПараметровУчета() Экспорт
        Возврат
«»;
    КонецФункции

    Функция ЗначенияПоУмолчаниюНаУзле() Экспорт
        Возврат Неопределено;
    КонецФункции

    Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента() Экспорт
        Возврат Неопределено;
    КонецФункции

    Функция ИмяФайлаНастроекДляПриемника() Экспорт
        Возврат
НСтр(«ru = ‘Настройки обмена УНФ-УНФ'»);
    КонецФункции

    Функция ИспользуемыеТранспортыСообщенийОбмена() Экспорт
       
Результат = Новый Массив;
       
Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
        Возврат
Результат;
    КонецФункции

    Функция ИмяФормыСозданияНачальногоОбраза() Экспорт
        Возврат
«»;
    КонецФункции

    Функция ЗаголовокКомандыДляСозданияНовогоОбменаДанными() Экспорт
         Возврат
НСтр(«ru = ‘Создать обмен УНФ-УНФ'»);
    КонецФункции

    Функция ИспользоватьПомощникСозданияОбменаДанными() Экспорт
        Возврат Истина;
    КонецФункции

    Функция НастройкаОтборовНаУзле() Экспорт
        Возврат Неопределено;
    КонецФункции

    Функция НастройкаОтборовНаУзлеБазыКорреспондента() Экспорт
        Возврат Неопределено;
    КонецФункции

    Функция ОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле) Экспорт
        Возврат
«»;
    КонецФункции

    Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле) Экспорт
          Возврат
«»;
     КонецФункции

    Функция ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле) Экспорт
     Возврат
«»;
    КонецФункции

    Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле) Экспорт
        Возврат
«»;
    КонецФункции

Создаем общий модуль (код взят из УТ 11):

////////////////////////////////////////////////////////////////////////////////
// Обмен Полный
// Процедура-обработчик события «ПередЗаписью» ссылочных типов данных (кроме документов) для механизма регистрации объектов на узлах
//
// Параметры:
//  ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации
//  Источник       — источник события, кроме типа ДокументОбъект
//  Отказ          — Булево — флаг отказа от выполнения обработчика
//

Процедура ОбменДаннымиПолныйПередЗаписью(Источник, Отказ) Экспорт
   
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью(«Полный», Источник, Отказ);
КонецПроцедуры

// Процедура-обработчик события «ПередЗаписью» документов для механизма регистрации объектов на узлах
//
// Параметры:
//  ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации
//  Источник       — ДокументОбъект — источник события
//  Отказ          — Булево — флаг отказа от выполнения обработчика
//

Процедура ОбменДаннымиПолныйПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
   
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюДокумента(«Полный», Источник, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры

// Процедура-обработчик события «ПередЗаписью» константы для механизма регистрации объектов на узлах
//
// Параметры:
//  ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации
//  Источник       — КонстантаМенеджерЗначения — источник события
//  Отказ          — Булево — флаг отказа от выполнения обработчика
//

Процедура ОбменДаннымиПолныйПередЗаписьюКонстанты(Источник, Отказ) Экспорт
   
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюКонстанты(«Полный», Источник, Отказ);
КонецПроцедуры

// Процедура-обработчик события «ПередЗаписью» регистров для механизма регистрации объектов на узлах
//
// Параметры:
//  ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации
//  Источник       — НаборЗаписейРегистра — источник события
//  Отказ          — Булево — флаг отказа от выполнения обработчика
//  Замещение      — Булево — признак замещения существующего набора записей
//

Процедура ОбменДаннымиПолныйПередЗаписьюРегистра(Источник, Отказ, Замещение) Экспорт
   
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюРегистра(«Полный», Источник, Отказ, Замещение);
КонецПроцедуры

// Процедура-обработчик события «ПередУдалением» ссылочных типов данных для механизма регистрации объектов на узлах
//
// Параметры:
//  ИмяПланаОбмена – Строка – имя плана обмена, для которого выполняется механизм регистрации
//  Источник       — источник события
//  Отказ          — Булево — флаг отказа от выполнения обработчика
//

Процедура ОбменДаннымиПолныйПередУдалением(Источник, Отказ) Экспорт
   
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередУдалением(«Полный», Источник, Отказ);
КонецПроцедуры

Создаем подписки на события (снимаем галки у типов объектов как в УТ) и привязываем к процедурам из модуля.

 

В ОбменДаннымиПредопределяемый Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт добавляем строчку:

ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.Полный);

 

Для следующих общих команд добавляем параметр план обмена полный:

ВыполнитьОбменДанными

НастроитьПараметрыТранспортаСообщенийОбмена

ОткрытьПравилаРегистрацииОбъектов

ОткрытьСценарииОбменовДанными

ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных

ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных

ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы

 

Создаем общую команду ОткрытьПомощникНастройкиОбмена

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
   
ОбменДаннымиКлиент.ВыполнитьОбменДаннымиОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник);
КонецПроцедуры

Извесные косяки которые пока не планирую исправлять:

Помощник обмена в самом конце вываливается с ошибкой. Закрываем, кликаем на строку с настройкой обмена, в меню настройка-изменить, все действия — создать начальный образ.

После обновления конфы в переферийной базе пишет ошибку обмена — хотя на самом деле конфа обновилась. Решение — перезапускаем предприятие и повторяем обмен.

Подскажите как опубликовать только ту часть конфигурации, которую написал я, чтобы не нарушать права 1с? Если в процессе реализации возникают вопросы то сначала смотрите как это сделано в УТ, потом задавайте вопросы в комментариях.

 

22 Comments

  1. Воронкин

    Думаю, скоро появится и штатно. В первых релизах УТ 11 — вообще ничего не было, потом функционал из 10.3 стали добавлять.

    Reply ↓
  2. KliMich

    Наверное скоро будет… Но пока это актуально!

    Reply ↓
  3. ptkrzy

    Это актуально для любой конфы на базе БСП, в том числе и для любой самописной.

    Reply ↓
  4. Воронкин

    (3) За это и респект автору.

    Reply ↓
  5. alexware

    Автору плюс. Как раз имею самописную конфигурацию на базе БСП и хотел бы внедрить РИБ. Выглядит вроде не очень страшно.

    Reply ↓
  6. dimk@a

    Уж не знаю, как скоро появится в штатной, но у меня уже 3 месяца работает. Причем тупо создал план обмена, и галочки снимал чисто на глаз. Автору спасибо за публикацию — подправлю теперь свое творчество, и теперь я понял почему у меня всегда пишет выгружено 0 объектов. Ошибку с созданием образа подчиненной побеждал так — сохранял образ не в локальный каталог, а использовал сетевой путь, который начинается с \

    Reply ↓
  7. Tangram

    Для 1.4.4.11 в модуль менеджера плана обмена Полный нужно еще добавить:

    Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт
    Возврат ложь;
    КонецФункции // ПланОбменаИспользуетсяВМоделиСервиса()
    
    Функция ПодробнаяИнформацияПоОбмену() Экспорт
    
    Возврат «Обмен УНФ <-> УНФ»;
    
    КонецФункции // ПодробнаяИнформацияПоОбмену()
    
    Функция КраткаяИнформацияПоОбмену() Экспорт
    Возврат «Обмен УНФ <-> УНФ»;
    КонецФункции // КраткаяИнформацияПоОбмену()
    

    Показать

    Иначе УНФ вообще не запускается.

    Reply ↓
  8. Tangram

    В продолжение темы:

    Модуль менеджера плана обмена Полный:

    Исправляем процедуру

        Функция НастройкаОтборовНаУзле() Экспорт
    Возврат Новый Структура; // мг
    КонецФункции
    

    При запуске ПИБ вываливается на исключении в обработчике ПередЗаписью справочника ИдентификаторыОбъектовМетаданных:

     Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда // Это не главный узел ИБ в РИБ-обмене.
    ВызватьИсключениеПоОшибке(
    НСтр(«ru = ‘Изменение идентификаторов объектов метаданных может быть выполнено
    |только в главном узле распределенной информационной базы.'»));
    КонецЕсли;
    

    Включение справочника в обмен пока не помогло.

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

    Reply ↓
  9. ptkrzy

    Просто закоментируй вызов исключения. В 1.4.4.10 много чего поменялось — нужно добавить несколько заглушек в модуль менеджера.

     Функция ПояснениеДляНастройкиПараметровУчета() Экспорт
    Возврат «»;
    КонецФункции
    Функция ЗначенияПоУмолчаниюНаУзле() Экспорт
    
    Возврат Неопределено;
    КонецФункции
    
    Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента() Экспорт
    Возврат Неопределено;
    КонецФункции
    
    Функция ИмяФайлаНастроекДляПриемника() Экспорт
    Возврат НСтр(«ru = ‘Настройки обмена УНФ-УНФ'»);
    КонецФункции
    
    Функция ИспользуемыеТранспортыСообщенийОбмена() Экспорт
    Результат = Новый Массив;
    Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FILE);
    Результат.Добавить(Перечисления.ВидыТранспортаСообщенийОбмена.FTP);
    Возврат Результат;
    КонецФункции
    
    Функция ИмяФормыСозданияНачальногоОбраза() Экспорт
    Возврат «ОбщаяФорма.СозданиеНачальногоОбразаСФайлами»;
    //Решает проблему с созданием начального образа
    
    КонецФункции
    
    Функция ЗаголовокКомандыДляСозданияНовогоОбменаДанными() Экспорт
    Возврат НСтр(«ru = ‘Создать обмен УНФ-УНФ'»);
    КонецФункции
    
    Функция ИспользоватьПомощникСозданияОбменаДанными() Экспорт
    Возврат Истина;
    КонецФункции
    
    Функция НастройкаОтборовНаУзле() Экспорт
    Возврат Новый Структура;
    КонецФункции
    
    Функция НастройкаОтборовНаУзлеБазыКорреспондента() Экспорт
    Возврат Неопределено;
    КонецФункции
    
    Функция ОписаниеЗначенийПоУмолчанию(ЗначенияПоУмолчаниюНаУзле) Экспорт
    Возврат «»;
    КонецФункции
    
    Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле) Экспорт
    Возврат «»;
    КонецФункции
    
    Функция ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле) Экспорт
    Возврат «»;
    КонецФункции
    
    Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле) Экспорт
    Возврат «»;
    КонецФункции
    
    Функция КраткаяИнформацияПоОбмену() Экспорт
    Возврат «КраткаяИнформацияПоОбмену»;
    КонецФункции
    Функция ПодробнаяИнформацияПоОбмену() Экспорт
    Возврат «»;
    КонецФункции
    Функция ПланОбменаИспользуетсяВМоделиСервиса() Экспорт
    Возврат Ложь;
    КонецФункции
    
    
    
    

    Показать

    Reply ↓
  10. aser86

    Добрый день! Не могли бы Вы выслать на почту ksaz@bk.ru .cf файл УНФ с настроенным планом обмена? а то у меня какие то ошибки выходят и не хочет создаваться распределенная база, буду очень очень благодарен !!!

    Reply ↓
  11. LexSeIch

    Мир этому дому!

    Автору плюс. Полезная информация по использованию БСП.

    Reply ↓
  12. Tangram

    При обновлении на 1.4.6.19 в модуль менеджера плана обмена надо добавить функцию:

    //Возвращает режим запуска, в случае интерактивного инициирования синхронизации

    //Возвращаемые значения АвтоматическаяСинхронизация Или ИнтерактивнаяСинхронизация

    //На основании этих значений запускается либо помощник интерактивного обмена, либо автообмен

    Функция РежимЗапускаСинхронизацииДанных(УзелИнформационнойБазы) Экспорт

    Возврат «АвтоматическаяСинхронизация»;

    КонецФункции

    Reply ↓
  13. 13kawaii13

    При включении базы подчинённого узла выходит ошибка.

    {Справочник.ИдентификаторыОбъектовМетаданных.МодульМенеджера(373)}: Ошибка при вызове метода контекста (Записать)

    ТаблицаОбъект.Записать();

    по причине:

    Ошибка при выполнении обработчика — ‘ПередЗаписью’

    по причине:

    {Справочник.ИдентификаторыОбъектовМетаданных.МодульОбъекта(96)}: Ошибка при работе со справочником «Идентификаторы объектов метаданных».

    Добавление новых элементов может быть выполнено

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

    ТаблицаОбъект.Записать();

    Вышлите мне пожалуйста .cf файл УНФ с настроенным планом обмена.

    kawaii@live.ru

    Не могу обойти возникающие ошибки. Релиз (1.4.6.19)

    Reply ↓
  14. 13kawaii13

    Вышлите мне пожалуйста .cf файл УНФ с настроенным планом обмена. (На любом релизе)

    Reply ↓
  15. ptkrzy

    У меня есть сильно переписаная под нужды заказчика конфигурация. Это будет некорректно по отношению к заказчику и нарушать права самой 1с. Предложите метод, который позволит выгрузить лишь отличия между типовой кинфигурацией и УНФ+РИБ. Почитайте статью на ИТС http://its.1c.ru/db/bspdoc?db=bspdoc#content:34:1 .Либо обратитесь к франчайзи своего региона. Я думаю они смогут вам помочь.

    Reply ↓
  16. sudo90

    (14) 13kawaii13, Здравствуйте, тоже возникла ошибка такая же как у Вас, Вы справились с ней?

    Reply ↓
  17. 13kawaii13

    (17) sudo90, Просто не стали обновляться на последний релиз.

    Reply ↓
  18. sudo90

    Жаль, а у нас версия как раз 1.4.6.19((

    Reply ↓
  19. ptkrzy

    Для 1.4.7.37 подробно описано по ссылке http://infostart.ru/public/249881/

    Reply ↓
  20. Prometeus2011

    Если в модуле «ОбменДаннымиПовтИсп», процедура «ИспользуемыеТранспортыСообщенийОбмена» закомментировать строки:

    Если Не ЭтоУзелАвтономногоРабочегоМеста(УзелИнформационнойБазы) Тогда
    ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.WS);
    КонецЕсли;

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

    (Версия УНФ 1.6.4.19)

    Reply ↓
  21. al_zzz

    Прошло 4 года с момента публикации. Видимо штатный РИБ в УНФ уже вряд ли появится…

    Reply ↓
  22. Shaldryn

    кто настраивал в 1.6? вроде бы создает РИБ, но при запуске ее отображает не все разделы, только Работа, Зарплата, Производство. В чем может быть косяк?

    Reply ↓

Leave a Comment

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