Описание подхода к переносу данных.   

назад (февраль 2011г.)


Описание подхода к переносу данных.



            В результате исследования переноса данных из исходной базы 1С 7.7 в целевую на платформе 1С 8.2 стандартными средствами 1С, то есть конвертированием исходной базы и использованием обработки «Универсальный перенос данных», было выяснено, что данный подход не может быть применен. Это объясняется как большим объемом переносимых данных, так и необходимостью переноса движений документов, что в принципе не предусмотрено в данной обработке. В связи с этим было принято решение разработать свой собственный механизм переноса данных, учитывающий все требования, предъявляемые к переносу данных, как по полноте переноса, так и по скорости работы.

Идея алгоритма.

            Идея алгоритма переноса состоит в массовом переносе данных из исходной базы 1С 7.7 в целевую на платформе 1С 8.2 прямыми SQL запросами вида «select - insert» c последующим восстановлением ссылочной целостности данных, заменяя ссылки из  исходной базы на сгенерированные Guid целевой базы. Генерация запросов на подготовку базы к заполнению данными (добавление в таблицы необходимых полей, индексов и т.д.), на вставку данных, восстановление ссылочной целостности, восстановление базы для использования ее в системе 1С (удаление добавленных полей, восстановление индексов, расчет итогов) выполняется обработкой, на основе правил конвертации данных, подготовленных с помощью конфигурации 1С «Конвертация данных 2.0»

Задачи, решаемые для реализации идеи переноса.

            Алгоритм переноса состоит из нескольких крупных функциональных блоков, выполняемых последовательно:
  1. Извлечение структуры физического размещения метаданных для исходной 1С77 и целевой 1С8 конфигурации и записи информации в служебную базу данных
  2. Генерация SQL-запросов для создания служебной базы данных и добавления в таблицы целевой базы данных необходимых полей и индексов.
  3. Генерация SQL-запросов  переноса данных на основе правил конвертации объектов подготовленных с помощью, конфигурации 1С «Конвертация данных 2.0»
  4. Генерация SQL-запросов восстановления ссылочной целостности, для полей ссылочного типа и неопределенного типа, содержащих ссылки.
  5. Генерация SQL-запросов удаления дополнительных полей и индексов.
  6. Оценочный расчет времени переноса
  7. Выполнение созданных скриптов.
Остановимся на описанных  блоках более подробно.

Получения физической структуры метаданных.

            Для  генерации SQL-запросов, на основе правил конвертации объектов необходимы сведения о структуре метаданных исходной и целевой базы. Получение этой информации реализовано  обработками для платформ 7.7 и 8.x соответственно, выполняющие обход дерева метаданных и записи соответствия, логических и физических названий таблиц и полей хранения в служебную базу данных.  

Формирование правил переноса данных.

            В качестве инструмента для формирования правил переноса и конвертации данных выбрано  использование  конфигурации 1С «Конвертация данных 2.0». Результатом работы конфигурации  является xml - файл содержащий правила переноса.

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

Для получения целевой базы подготовленной к приему данных выполняются следующие операции:
  • Для каждой таблицы целевой базы, являющейся ссылочным типом  данных т.е.  таблицы справочников, документов, планов счетов  добавить поле «id» для хранения ссылки на запись из исходной системы и создать для  этого поля индекс.
  • Для ускорения процесса вставки данных  удалить все дополнительные индексы,  кроме первичного кластерного индекса.
  • Сгенерировать служебные SQL функции, реализующие задачи по преобразованию ссылки из формата 7.7 в формат 8.х, а так же пересчет из/в    36-ричную систему счисления используемую в системе 1С 7.7
Дополнительно создается  служебная база данных. Ее предназначение заключается в хранении дополнительной информации, такой как:
·      Сведений о физических таблицах и полях для логических объектов исходной и целевой конфигураций. Исходная структура этой базы включает в себя таблицы для хранения наименований таблиц, полей и значений перечислений из исходной и целевой базы, и таблицы соответствия физических таблиц информационных баз.
·       Для всех справочников, документов  и планов счетов переносимой конфигурации добавляются таблиц для хранения соответствия между старым и новым значением ключевого поля.

Формирования Sql-скрипта переноса данных.

Запросы формируются из правил созданных в конвертации данных и из информации о физической структуре исходной и целевой баз данных по следующему алгоритму:
  1. Из файла формата XML, в таблицу значений читаются правил переноса данных
    • Для каждого прочитанного правила, за исключением правил преобразования значений перечислений, формируется SQL запрос вида «select - insert», выполняющий вставку данных из исходной таблицу в целевую. Запрос формируется путем преобразования имен таблиц и полей, из того как они определены в конфигурации в соответствующие им физические наименования и добавления в секции определения полей запросов стандартных полей, специфичных для каждого объекта метаданных. Для правил преобразования значений перечислений формируются запросы вида «update», ставящие в соответствие значениям перечислений, значения перечислений из исходной базы.  В процессе формирования этих SQL запросов используются следующие алгоритмы для решения специфических проблем, обусловленных разницей в физической  структуре  хранения  данных  в  информационных базах  1С 7.7 и 1С 8.2.
    • Перенос данных простых ссылочных типов. Тип полей хранения ссылок в 1С 7.7 и 1С 8.2 различается. Поэтому при переносе ссылка преобразовывается из типа Char(9) в тип binary(16).
    •  Перенос данных составных типов. Структура хранения таких данных в системах 1С 7.7 и 1С 8.2 сильно различаются. В 1С 7.7 составной тип хранится в одном поле таблицы, так как в 1С 8 для этого используются как минимум 3 поля. Алгоритм переноса состоит в разделение поля хранящего значения составного типа на тип объекта и его ссылки, преобразования типа объекта 1С7.7 в тип объекта 1С 8.2 (используя служебную таблицу соответствия типов объектов) и запись в новую структуру хранения данных.
    •  Перенос периодических реквизитов в регистры сведений.  В 1С 7.7 для хранения периодических реквизитов используется служебная таблица 1SConsts, тогда как в 1С 8 такого понятия «периодический реквизит» в принципе не существует, и для хранения периодически изменяющихся данных используются регистры сведений. Алгоритм переноса одиночного периодического реквизита состоит в генерации SQL запроса выбирающий значения периодического реквизита из таблицы 1SConsts, используя его идентификатор из метаданных и записывающий их в целевой регистр сведений.  Если регистр сведений подчинен регистратору, то в правиле конвертации, в событии перед выгрузкой необходимо добавить код, создающий соответствующий регистратор.
    • Перенос нескольких периодических реквизитов в один регистр сведений является нетривиальной задачей и путем преобразования правил конвертации реализован быть не может, т.е. запросы для такого переноса  разрабатываются вручную.
    • Перенос документов. В 1С 7.7 дата и общие реквизиты документов хранятся в таблице 1SJourn, поэтому для получения выборки документа и его табличной части выполняется соединение таблиц документа с таблицей 1SJourn.
  2. Заполнение базы соответствий. Для последующего анализа и выявлений ошибок восстановления ссылочной целостности для справочников, документов и планов счетов формируются запросы заполнения таблиц в служебной базе данных, в которых содержится соответствие нового и исходного идентификатора объекта.
  3. В правилах переноса  в событиях «перед выгрузкой», «привыгрузке» и т.д. возможно   задать произвольный алгоритм на языке SQL или на языке 1С, который  вставляется в генерируемый скрипт или исполнятся  в процессе преобразования правил. 

Восстановление целевой базы после переноса данных

После выполнения операции переноса данных из исходной базы необходимо восстановить ее ссылочную целостность, а также исходную структуру таблиц. Для этого генерируется соответствующий набор запросов, состоящий из :
  1.  Для каждого ссылочного поля объектов метаданных формируется запрос, заменяющий исходное значение ссылки на сгенерированный  во время переноса данных GUID. Для полей составных типов данных формируется набор запросов, по запросу для каждого типа данных. Запросы обновления формируются, используя информацию о типе ссылочного поля из метаданных конфигурации.
  2. Скрипта для удаления созданных дополнительных индексов  для поля «id» и само это поле.
  3. Команд выполняющих  реиндексировние   целевой базы стандартными средствами 1С, а также рассчитывающих итоги регистров накопления.
Таким  образом, пройдя все эти этапы получаем на выходе, полностью пригодную для использования, заполненную данными базу на платформе 1С 8.2.