Реализован движок рекурсивного переноса данных, когда достаточно указать документ, который Вы хотите перенести, и все связанные объекты (элементы справочников, со значениями всех реквизитов, подчиненных элементов, история периодических реквизитов, документ — основание и др.) будет перенесены так же. Это даст Вам возможность создать копию существующей базы данных, но только с актуальными документами и справочниками.
Что дает свертка базы?
Конфигурация построена на принципе промежуточного звена в момент переноса данных, из первой базы, открытой, как OLE-объект, во вторую базу, открытой тоже, как OLE-объект.
Удобная реализация процедур в обработке переноса данных. Конфигурацию можно использовать, как основу для Вашей разработки.
Конфигурация OLE-Переноса данных (для свертки базы)
Руководство пользователя
Термины.
База Экспорт –База источника данных, из которой выгружаются данные.
База Импорт –База приемника данных, в которую загружаются данные.
Краткое описание.
Конфигурация построена на принципе промежуточного звена в момент переноса данных, из первой базы, открытой, как OLE-объект, во вторую базу, открытой тоже, как OLE-объект.
Главное преимущество данного вида переноса в том, что база экспорта не требует монопольного режима, т.е. можно начать свертку базы в процессе работы пользователей.
Возможен перенос остатков по бухгалтерским счетам и регистрам на заданную дату, «дату свертки», вместе с документами, которые участвуют в остатках, а также всех документов после «даты свертки».
Реализован движок рекурсивного переноса данных, когда достаточно указать документ, который Вы хотите перенести, и все связанные объекты (элементы справочников, со значениями всех реквизитов, подчиненных элементов, история периодических реквизитов, документ — основание и др.) будет перенесены так же.
Удобная реализация процедур в обработке переноса данных. Конфигурацию можно использовать, как основу для Вашей разработки.
Подготовка конфигурации импорта.
1. Добавить документ ввода остатка по регистрам «СлужебОстаткиПоРегистрам», с помощью копирования или объединения конфигураций.
Замечание: Если вы не планируете перенос остатков по регистрам, то данный документ можно не добавлять.
Быстрый старт для идентичных конфигураций.
1. Создать два элемента в справочнике "Базы", с соответствующим именем и пути к базе данных.
. С помощью обработки "Инициализация" открыть обе базы, как OLE-объекты.
. С помощью обработки "Формирование метаданных" заполнить данные о метаданных каждой базы.
. В справочнике "Настройки соответствий" создать элемент и нажать кнопку "Соответствия"— это и будет настройка переноса.
. В форме списка открытого справочника "Соответствия" нажать кнопку "Анализ".
6. Открыть обработку "Перенос данных", выбрать настройку и параметры переноса, и нажать кнопку "ПЕРЕНОС".
Подробное описание технологии переноса.
1. Создать два элемента в справочнике "Базы", с соответствующим именем и пути к базе данных.
Справочник «База данных»
Справочник содержит список баз данных для экспорта и импорта.
Элемент справочника «Базы данных»:
Наименование –наименование в списке справочника.
Путь –путь к базе данных.
Пользователь и пароль – имя пользователя, под которым конфигурация переноса подключается к базе через OLE—сервис.
Пользователь для просмотра — имя пользователя, для открытия базы в разделенном режиме для просмотра данных.
2. С помощью обработки "Инициализация" открыть обе базы, как OLE-объекты.
Обработка «Инициализация»
База экспорт –элемент справочника базы данных предназначенной для выгрузки данных..
База импорт –элемент справочника базы данных предназначенной для загрузки данных..
Инициализация –подключение к базе данных через OLE – сервис.
Деинициализация –закрытие подключения к базе данных через OLE— сервис.
Открыть для просмотра –открыть в обычном режиме, через пользователя для просмотра этой базы данных. Предлагается на выбор два режима, разделенный или монопольный режим, например для восстановления индексов.
Двойная инициализация –инициализация базы экспорта и импорта подряд, друг за другом.
Напротив каждой базы данных, синим цветом, отображается статус подключения, «открыта» или «закрыта».
После инициализации обеих баз, обработку можно закрывать, подключения остаются.
Чтобы закрыть подключения, надо снова открыть обработку и деинициализировать.
3. С помощью обработки "Формирование метаданных" заполнить данные о метаданных каждой базы.
Обработка «Формирование метаданных».
База данных –элемент справочника базы данных.
Константы, Перечисления, Справочники, Документы, ВидыСубконто, ПланСчетов, Регистр –данные о каких метаданных базы будут считываться.
Выводить сообщения –описания процесса создания метаданных.
Если сообщения не выводить, то процесс создания метаданных будет быстрее.
Сформировывать метаданные можно неоднократно, при повторном формировании, они будут просто обновляться, необходимо в случае изменения конфигурации импорта или экспорта.
Внимание: Данную процедуру надо выполнить для базы импорта и для базы экспорта.
После формирований метаданных о каждой базе, можно открыть форму списка справочника базы данных и увидеть сформированные метаданные, для этого сверху находятся кнопки:
Константы
Справочники
Перечисления
Документы
ПланСчетов
ВидыСубконто
Регистры
А также можно посмотреть с помощью всплывающего меню при нажатии левой кнопкой мышки на элемент справочника «Базы».
Для удобства восприятия, элементы справочников метаданных почти полностью копируют формы метаданных из 1С: Конфигуратора.
Элементы открываются в режиме редактирования, но изменять их нельзя.
Данные параметры используются в момент переноса.
При повторном формировании метаданных, все параметры обновляются, притом удаленные метаданные помечаются на удаление.
4. В справочнике "Настройки соответствий" создать элемент и нажать кнопку "Соответствия"— это и будет настройка переноса.
Справочник «Настройки соответствий»
Список настроек переноса. каждый элемент справочника является правилом переноса из одной базы в другую.
Если у нас в справочнике «Базы данных» два элемента, то мы можем создать две настройки переноса:
- из базы «Торговля и склад (демо)» в базу «Торговля и склад»;
- из базы «Торговля и склад» в базу «Торговля и склад (демо)»;
После нажатия на кнопку «Соответствия» мы увидим справочник правил переноса.
Для каждого элемента «Настроек соответствия» задаются правила соответствий метаданных базы импорта и экспорта
5. В форме списка открытого справочника "Соответствия" нажать кнопку "Анализ".
После нажатия кнопки «Анализ» мы увидим следующее сгенерированное правило переноса. Анализ идет на совпадение идентификаторов метаданных.
Если конфигурации идентичные, то правило будет полностью заполнено.
Анализ –заполнение правила, на основании совпадения идентификаторов метаданных.
Проверка типов –проверка совпадения типов метаданных.
Проверка соотв. –проверка заполненности соответствий и совпадения параметров метаданных.
Метаэкспорт, Метаимпорт –открыть параметры метаданных текущей строчки.
Можно редактировать соответствия прямо и списка, нажав на колонку «ДанныеИмпорт»
если нажать на другой колонке, то появиться форма соответствия:
Для группы соответствий: «Справочник», «Документ»
Правило переноса реквизитов. Данный элемент можно расширять, и добавлять дополнительные опции—реквизиты переноса по усмотрению программиста.
Для группы переноса можно задавать элементарные условия переноса.
Для этого существует справочник «Значения объектов».
После указания базы данных, ТипЗначения и ВидаЗначения необходимо нажать кнопку «ВыбратьЗначение» (перед этим база должна быть проинициализирована).
Нажать Alt+Tab и Вы увидите форму диалога выбора значения, дважды кликнув мышкой Вы выберите значение, после этого поля в рамке «Описание объекта будут заполнены».
Теперь это значение объекта можно выбирать в условии переноса.
Например: Установить фильтр на итогах регистра:
В условии, после выбора группы соответствия, можно выбрать реквизит, по которому будет осуществляться фильтр. После выбора реквизита, можно выбрать «субреквизит» (т.е. реквизит реквизита) объекта.
6. Открыть обработку "Перенос данных", выбрать настройку и параметры переноса, и нажать кнопку "ПЕРЕНОС".
Обработка «Перенос данных»
Интерфейс формы обработки переноса построен таким образом, чтобы видеть все возможные параметры переноса, это помогает в процессе выполнения их уточнять.
Обработка разделена на две закладки, Параметры и Фильтры.
Если фильтр не выбран, то тогда будут переноситься все виды метаданных. Так же имеется, возможность задать фильтр от обратного, т.е. «по всем кроме» выбранных видов, для чего есть соответствующая галочка под каждым списком фильтра.
Замечание: Чтобы каждый раз не ставить все галочки на параметрах, рекомендуется поставить автоматическое сохранение настройки формы.
Реквизит формы для выбора настроек соответствий, рядом расположены кнопки быстрого открытия соответствий выбранной настройки и обработки инициализации баз данных переноса.
Основные галочки выбора типа переноса, находятся в левом верхнем углу формы обработки:
Возможны различные комбинации переноса данных, но последовательность будет такая же, как расположены галочки сверху вниз: Справочники, Константы, Документы, Итоги по регистрам, Итоги по бухгалтерским счетам.
Замечание: Установив галочку на «Справочники», будут переноситься все элементы всех видов справочников, притом в той последовательности, в которой они заданы в конфигурации.
При обходе видов справочников, будет применен фильтр, который находится на второй закладке, но если при переносе какого-нибудь элемента выбранного вида справочника, в его реквизите выбран элемент, вид справочника которого не выбран в фильтре, то он все равно будет перенесен. То есть, данный фильтр по справочникам действует на первом уровне переноса, не ограничивая перенос в рекурсии. Существует возможность задать фильтр не только по виду справочника, но и задать коды элементов, которые необходимо перенести.
Замечание: Установив галочку на «Документы», будут переноситься все связанные объекты, т.е. элементы справочников, другие документы, которые выбраны в переносимом объекте.
Наложенный фильтр на документы, действует аналогично фильтру по справочникам, т.е. действует только на первом уровне переноса, притом фильтр на справочники не действует.
Существует отдельный список фильтра на номера документов.
Параметры переноса разделены рамками с соответствующим наименованием метаданных.
Переносить подчиненные элементы спр. –при переносе элемента справочника, после обхода всех реквизитов элемента, будут перенесены все элементы всех подчиненных справочников. Данная галочка действует при переносе не только отдельно справочников, но также и при переносе элемента справочника в рекурсии, допустим при переносе документов.
Уровень рекурсии справочника –Уровень рекурсии при переносе элементов справочника. При переносе данных, идет обход всех реквизитов элемента и происходит перенос объектов выбранных в этих реквизитах, это будет следующий уровень рекурсии.
Если указано число равное 1, то для элементов, которые переносятся в рекурсии выше первого уровня, будет переноситься только код и наименование, т.е. рекурсия будет заканчиваться. Действует при любом переносе данных.
Переносить только помеченные на удаление –переносятся только помеченные на удаления элементы. Действует только при переносе всех элементов справочников.
Переносить только новые элементы – переносятся только элементы, которые не найдены в базе импорте, иначе все элементы удовлетворяющие остальным фильтрам обновляются.
Переносить только измененные за период – данная галочка требует изменения конфигурации экспорта. См.ниже.
Периодические реквизиты – перенос истории периодических реквизитов за указанный период. Если в базе экспорта изменения истории реквизитов сделаны документом, то при переносе, будет перенесено только дата и значение истории реквизита.
Очищать лишние периодические реквизиты в базе импорта –после переноса истории периодического реквизита в базу импорта, значения истории, которых нет в базе экспорта, будут удалены. Данный параметр создан, потому что перенос истории очень длительный процесс, потому после переноса истории один раз, следующий раз не переносишь, но то что было перенесено не очищаешь.
Переносить помеченные на удаление – переносить проведенные документы.
Переносить непроведенные – переносить непроведенные документы.
Переносить проведенные –переносить проведенные документы.
При установке нескольких галочек, они действуют по принципу сложения.
Переносить в рекурсии только шапки док. –переносятся только шапки документов, которые находятся в рекурсии. Например, применяется, когда переносятся итоги регистров на заданную дату, и достаточно перенести только шапки всех связанных документов за прошлый период.
Синхронизировать проведение –если документ в базе экспорта проведен, тогда в базе импорта документ проводится сразу в момент переноса.
Замечание: Возможно, что модуль проведения в базе экспорта отличается от модуля проведения в базе импорта, тогда результат движения регистров может быть различный.
Синхронизировать операции –после синхронизации проведения, будет произведена синхронизация операции, которую создает документ, притом эта операция будет идентична операции в базе экспорта, независимо от данных и модуля проведения базы импорта.
Переносить только новые документы –переносятся только новые документы из базы экспорта в базу импорта.
Переносить только измененные за период –данная галочка требует изменения конфигурации экспорта. См.ниже.
Данные параметры влияют на перенос итогов по регистрам и бухгалтерских итогов.
Дата итогов по:… — дата, на конец которой выгружаются итоги в базе экспорта.
Макс. кол. стр. Док остатка –максимальное количество строк документа остатка. При создание документа операции или документа ввода остатка по регистру учитывается данный параметр, если количество итогов больше, максимальное количество строк, то создается второй документ, и т.д.
Сразу провести ввод итогов –сразу провести документ ввода остатка по регистру или включить проводки операции ввода начального сальдо.
Использовать цикл записи / удаления –параметр используется, когда в базе импорта, работают несколько пользователей, в таком случае запись, проведение, пометка удаления может закончиться неудачно из-за блокировки таблицы транзакции. Если установить данную галочку, то будет использоваться цикл записи, проведения, удаления объекта, пока процесс не закончится успешно.
Выводить сообщения, уровень (0-3) –выводить комментарии к переносу данных, возможно несколько уровней подробности сообщений, от 0 до 3.
Записывать лог –записывать сообщения в файл, который находится в подкаталоге Log каталога конфигурации ОLE—переноса; имя файла формируется по следующему правилу:
«Лог_» + год +месяц+число + «_»+час+минуты+секунды» запуска обработки переноса.
Например: Лог_20050108_192837.txt
Кеш — это виртуальная таблица соответствий при переносе, т.е. элементу А1 в базе
экспорта соответствует элемент А2 в базе импорта (хранятся ЗначенияВСтрокуВнутр этих элементов) если при переносе, элемент уже имеется в кеше, то просто берется соответствующий элемент из базы импорта и обход реквизитов не происходит. Это существенно ускоряет перенос.
Например, элемент справочника «фирмы» типовой конфигурации, встречается в каждом документе, то при использовании кеша, обновление элемента фирмы (включая все реквизиты, историю и т.д.) будет происходить один раз.
Размер кеша — это количество строк виртуальной таблицы. Число поставьте в зависимости от памяти на компьютере, и вообще, если большой кеш, то поиск в кеше замедляется (рекомендуется 50000).
При достижении размера виртуальной таблицы, до ограничения кеша, произойдет сортировка по количеству вызовов элемента, т.е. часто встречающиеся элементы будут сверху, и таблица будет обрезана на две трети, и так до следующего достижения предела кеша.
Очистить кеш — Таблица является глобальной переменной конфигурации, потому если Вы закроете обработку, то кеш останется в памяти. Данная кнопка очищает таблицу кеша.
Рекомендуется, после переноса справочников, открыть кеш, и записать в файл. Потом, если вы уверены, что справочники не меняли, открыть кеш, и загрузить из файла, и начать перенос документов — это будет существенно быстрее.
Используйте пункты меню «Записать в файл» и «Считать из файла».
В консоли просмотра необходимо написать ОписательОбъекта
<ОписательОбъекта> — строковое выражение. »Справочник.ХХХХХ.YYYYY», где ХХХХХ — вид справочника, YYYYY — имя выбранной формы списка справочника;
»Журнал.ХХХХХ.YYYYY», где ХХХХХ — идентификатор журнала документов, YYYYY — идентификатор формы журнала документов. Кроме того, в качестве идентификатора журнала можно указывать идентификатор конкретного вида документа, тогда откроется журнал просмотра документов именно указанного вида;
После нажатия на кнопку нажмите ALT+TAB для просмотра формы в базе экспорта или базе импорта.
Переносить только измененные документы или справочники за период
Данный параметр применяется в случае, когда мы производим перенос неоднократно, и нам необходимо переносить не все документы, а допустим, только те, которые изменяли за последнюю неделю, притом дата документов может быть любая, хоть месяц назад.
Необходимо изменить конфигурацию экспорта следующим образом:
- Добавить реквизит в общие реквизиты документов и в каждый справочник, с именем «ХроноПозиция», тип число, длина 13.
- В каждом модуле формы документа и справочника в конец предопределенной процедуры ПриЗаписи() добавить вызов глобальной процедуры ПриЗаписиДокумента(Контекст) и ПриЗаписиЭлемента(Контекст) соответственно.
- Добавить в глобальный модуль следующие процедуры.
//***************************************************
//возвращает строку в формате времени "00:00:00"
Функция глФорматВремя(ЧасХ=0,МинХ=0,СекХ=0) Экспорт
Возврат Формат(ЧасХ,"Ч(0)2")+":"+Формат(МинХ,"Ч(0)2")+":"+Формат(СекХ,"Ч(0)2");
КонецФункции
//***************************************************
// По сроке формата времени возвращает
Процедура глВремяФормат(ВремяХ,ЧасХ,МинХ,СекХ) Экспорт
ЧасХ=Число(Лев(ВремяХ,2));
МинХ=Число(Сред(ВремяХ,4,2));
СекХ=Число(Прав(ВремяХ,2));
КонецПроцедуры
//***************************************************
// формирует хроно код на оси времени
Функция глХроноПозиция(ДатаХ,ВремяХ) Экспорт
Перем ЧасХ,МинХ,СекХ;
_ДатаХ=Число(ДатаХ);
глВремяФормат(ВремяХ,ЧасХ,МинХ,СекХ);
Возврат _ДатаХ*86400+ЧасХ*3600+МинХ*60+СекХ;
КонецФункции //
//***************************************************
// преобраззует хроно код в дату и время
Функция глПозицияХроно(Знач ПозицияХ,ДатаХ=0,ВремяХ="00:00:00") Экспорт
_ДатаХ=Цел(ПозицияХ/86400);
ПозицияХ=ПозицияХ—(_ДатаХ*86400);
ЧасХ=Цел(ПозицияХ/3600);
ПозицияХ=ПозицияХ—(ЧасХ*3600);
МинХ=Цел(ПозицияХ/60);
ПозицияХ=ПозицияХ—(МинХ*60);
СекХ=ПозицияХ;
ДатаХ = Дата(_ДатаХ);
ВремяХ = глФорматВремя(ЧасХ,МинХ,СекХ);
Если ПустоеЗначение(ДатаХ)=1 Тогда
Возврат ВремяХ;
Иначе
Возврат ""+ДатаХ+"; "+ВремяХ;
КонецЕсли;
КонецФункции
//**************************************************
Функция ПриЗаписиДокумента(Конт) Экспорт
Конт.ХроноПозиция=глХроноПозиция(ТекущаяДата(),ТекущееВремя());
КонецФункции
//**************************************************
Функция ПриЗаписиЭлемента(Конт) Экспорт
Если Метаданные.Справочник(Конт.Вид()).Реквизит("ХроноПозиция").Выбран()=1
Тогда
Конт.ХроноПозиция=глХроноПозиция(ТекущаяДата(),ТекущееВремя());
КонецЕсли;
КонецФункции
//**************************************************
ХроноКод –это число, однозначно определяющее позицию на оси времени, вычисляется как, количество секунд с Рождества Христова, таким образом, в любой момент времени мы можем получить уникальное число. При записи документа или справочника мы автоматически записываем в реквизит «ХроноПозиция» хронокод соответствующий текущей дате и текущему времени. Таким образом, в реквизите «ХроноПозиция» хранится информация о том, когда был последний раз записан элемент справочника или документ.
Как это работает?
При переносе документов мы указываем два периода:
1. Период документов С … По …
2. Переносить только измененные за период С… По …
1. «Период документов С … По …» — это период по дате документов в базе данных экспорта. Например, документы за два последних месяца. Период охватывает документы, которые могли бы изменяться пользователем, и эти изменения необходимо синхронизировать с базой импортом, т.е. если у Вас могут изменяться документы за весь год, тогда надо ставить период на весь год.
2. «Переносить только измененные за период С… По …» – это период времени, когда фактически, в реальности изменялись документы пользователем. В данном случае это период для анализа нового реквизита «ХроноПозиция». Дату начала надо ставить равной дате последнего переноса данных, а конец равный текущей дате.
В таком случае, при выборке документов за указанный период в п.1, будут обновляться не все документы, а только новые и измененные за указанные период в п.2.
Данный метод позволяет очень гибко регулировать синхронизацию данных базы экспорта и импорта. ХроноПозиция –это расширенное множество, чем простой флаг модифицированности,
.
что позволяет:
- Не хранить избыточной информации в конфигурации переноса, о том какие документы переносились ранее, а какие нет.
- Не изменять данные в базе экспорта, кроме как сохранения последнего времени записи.
- Позволяет в любой момент повторить перенос данных, допустим в случае сбоя процесса переноса, если указать период изменения не с момента последнего переноса, а с момента предпоследнего переноса. Также обновить все данные, указав дату начала периода изменения равной дате начала периода документов для переноса.
Алгоритм обработки переноса данных
Применено "псевдообъектноепрограммирование", вызывая функцию, мы передаем объект из базы экспорта, а получаем объект из базы импорта. Можно передавать любой объект, это может быть счет, перечисление, видсубконто, элемент справочника, и даже документ, притом все, что содержится в документе, будет получено с помощью этой же функции.
ОбъектИмпорт = Импорт_ПолучитьОбъект(ОбъектЭкспорт);
Достоинства
— После свертки, можно автоматически корректировать входящие остатки в новой базе данных, с учетом изменений в старой базе данных.
— Можно начать формирование входящих остатков и перенос документов текущего года в новую базу в процессе работы пользователей. В один прекрасный момент переключить всех на новую базу, и дозагрузить оставшие документы. Таким образом, для пользователей переход на новую базу будет составлять небольшой технический перерыв.
— Можно использовать старую базу данных, как хранилище сквозной информации за несколько лет, при обратном переносе данных.