Создание управленческой базы данных

Опубликовал BLACK BEAR (sarun) в раздел Обмен - Перенос данных из 1C8 в 1C8

Рассматривается вариант создания актуальной копии базы данных с помощью планов обмена данными. Данный вариант можно использовать в случаях, когда обмен данными должен обеспечивать соответствие движений документов. Например, для отражения управленческой зарплаты

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

1.Добавляем в модуль плана обмена "Полный" три функции:

1.1

Функция ЗаписатьНовоеСообщение(ЗаписьXML, ЗаписьСообщения)
    
    НомерСообщения = ЗаписьСообщения.НомерСообщения;
    Получатель = ЗаписьСообщения.Получатель;
    
    СписокТипов = Новый СписокЗначений();
    
    НачатьТранзакцию();
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Получатель, НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
        
        Данные = ВыборкаИзменений.Получить();
        Если ТипЗнч(Данные) = Тип("УдалениеОбъекта") Тогда
        Иначе
       //     Если СписокТипов.НайтиПоЗначению(ТипЗнч(Данные)) = Неопределено Тогда
       //         Продолжить;
       //     КонецЕсли;    
        КонецЕсли;    
        
        ЗаписатьXML(ЗаписьXML, Данные);
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    
     Возврат НомерСообщения;
КонецФункции // ЗаписатьНовоеСообщение(ИмяФайла) 

1.2

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

1.3

Функция ЗагрузитьИзмененияДанныхДляУзла(УзелОбмена, КоличествоЭлементовВТранзакции, ЧтениеXML) Экспорт
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    НомерСообщения = ЧтениеСообщения.НомерСообщения;
    
    НачатьТранзакцию();
    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
        Данные = ПрочитатьXML(ЧтениеXML);
        
        Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
        Данные.ОбменДанными.Загрузка = Истина;
        
        Данные.Записать();
    КонецЦикла;
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого);
    ЗафиксироватьТранзакцию();
    ЧтениеСообщения.ЗакончитьЧтение();
    
    Результат = Истина;
    Возврат Результат;
КонецФункции

2. Снимаем для плана обмена "Полный" флажок "Распределенная информационная база"

3. В настройках обмена данными указываем тип обмена - обмен через файловый ресурс

4. В случае, если нам нужен односторонний обмен, убираем авторегистрацию изменений базе приемнике.

Периодичность обмена данными можно настройть, например, через константу "ВремяОпросаРегламентныхЗаданийВФайловомРежиме".

См. также

Комментарии
1. Яшин Антон (Anyxwar) 106 22.02.14 17:12 Сейчас в теме
2. Тимофей Шантин (ShantinTD) 85 25.02.14 09:55 Сейчас в теме
(1) Anyxwar, а тебе никогда не хотелось иметь в тестовой базе свежие данные, и при этом не делать каждый день загрузку?
Согласен, что название статьи наталкивает на что-то другое, но представленная идея (не новая, конечно) - способ хотя бы немного облегчить жизнь разработчика.

Так что или конструктивно называй, что не понравилось, или не говори ничего.
3. Д Т (ALLES) 59 26.02.14 09:26 Сейчас в теме
А чем плох старый добрый тотал-командер например. При сильном железе рабочую базу 1cv8.1cd копирует махом прямо во время работы в ней.
4. Алекс Одинэсник (Alex1Cnic) 118 26.02.14 13:48 Сейчас в теме
А если база в клиент-серверном варианте работает, то вообще можно, например, зеркалирование в СУБД настроить (MS SQL SERVER) или просто восстановить архив в формате SQL в копию базы на MS SQL SERVER (можно и по расписанию настроить)
5. BLACK BEAR (sarun) 27 23.04.14 13:47 Сейчас в теме
(3) ALLES, (4) Alex1Cnic задача ставилась создание не копии рабочей базы, а управленческой базы, в кототорой содержатся данные из рабочей базы и кроме этих данных в нее вводятся другие данные. Поэтому зеркалирование средствами SQL или просто бэкап не подходили...Наверное, можно было бы сделать средствами веб-сервисов, чтобы не мучиться с синхронностью обновлений, но пока оставлено в таком виде.