УНФ РИБ





В типовой УНФ нет РИБа. Исправляем этот недостаток, используя УТ 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 не будет опубликован. Обязательные поля помечены *