gifts2017

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

Опубликовал Евгений Багаев (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) 22.02.14 17:12
2. Тимофей Шантин (ShantinTD) 25.02.14 09:55
(1) Anyxwar, а тебе никогда не хотелось иметь в тестовой базе свежие данные, и при этом не делать каждый день загрузку?
Согласен, что название статьи наталкивает на что-то другое, но представленная идея (не новая, конечно) - способ хотя бы немного облегчить жизнь разработчика.

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