Инструкция по выгрузке и загрузке данных Пример Допустим, стоит задача передать документ «Приходный кассовый ордер» (ПКО) из одной базу в другую. Для решения задачи сначала надо выгрузить документ из исходной базы, а потом загрузить его в целевую базу.
Выгрузить документ Сначала необходимо создать пункт контекстного меню «Выгрузить» в разделе ПКО. При выборе этого меню будут формироваться файлы import, которые потом будут загружаться в целевую базу. Для создания пункта меню:
Открыть раздел Администрирование/Разделы системы
Для раздела «Приходные кассовые ордера» во вкладке «Присоединенные разделы» пункт меню «Добавить связь».
Заполнить связь разделов как показано на картинке:
Перезапустить клиентское приложение.
После выполнения описанных выше операций в разделе «Приходные кассовые ордера» появится пункт меню «Выгрузить». Воспользуемся им для генерации файлов.
Создайте новую папку на диске. В примере папка называется C:\work2\Import.
Выбрать пункт «Выгрузить».
В генераторе окне параметров генерации файлов импорта задать папку, в которую будет производиться выгрузка.
Нажать «Выполнить».
Поместить все файлы, созданные в папке, в zip архив.
Примечание: файлы должны находиться непосредственно в zip архиве. Паки, помещенные в архив, не обрабатываются механизмом импорта.
Импортировать документ на другой базе В результате предыдущих шагов у нас есть архив, содержащий выгруженные из исходной базы данные. Загрузим эти данные в целевую базу.
Открыть раздел Администрирование / Импорт данных.
Нажать «Обзор»
В диалоге выбора файлов выбрать расширение ZippedImportFiles (*.zip)
Выбрать созданный zip архив
Нажать «Запустить»
Перейти в раздел ПКО и убедиться, что появился импортированный документ
Настройки генератора файлов импорта
Обновлять существующие файлы Функция используется для того, чтобы можно было в один набор файлов выгрузить несколько разных объектов (документов, словарей и т.д.).
Пример. Нужно выгрузить один приходный кассовый ордер (ПКО) и один расходный кассовый ордер (РКО) в один zip архив.
Присоединить генератор к разделу ПКО и к разделу РКО
Создать новую папку для выгрузки или очистить существующую
Выбрать пункт контекстного меню «Выгрузить» в разделе ПКО. Проделать действия из первого примера, в результате которых получаем несколько файлов с расширением import в папке выгрузки.
Выбрать пункт контекстного меню «Выгрузить» в разделе РКО. В окне параметров генерации файлов:
Выбрать ту же папку, в которую выгружали ПКО.
Установить параметр «Использовать существующие файлы».
В результате данные при выгрузке будут добавлены в существующие файлы, которые были созданы при выгрузке ПКО.
Все файлы из папки выгрузки поместить в zip архив. Теперь при импорте получившегося архива в другой базе появятся документы ПКО и РКО.
Использовать инструкцию insert-or-update [опция для разработчиков] По умолчанию, если опция не выбрана, то каждая запись выгружается с инструкцией insert. Если выбрана, то каждая запись будет выгружаться с инструкцией insert-or-update.
Эту функцию стоит использовать, если нужно, чтобы в базе импорта обновлялись существующие записи данными импорта. Подробнее об инструкциях импорта смотрите в документе Документация прикладного программиста.docx.
Сравнение файлов выгрузки для словаря «Справочник валют» при отключенной опции и при включенной:
Отключить сортировку файлов [опция для разработчиков] При импорте требуется, чтобы файлы шли в определенном порядке. Например, есть файл импорта для документа и файл импорта словаря. Известно, что документ ссылается на записи словаря. Тогда первым в списке файлов должен быть файл для словаря, а вторым – файл для документа.
Генератор файлов импорта автоматически выполняется сортировку сгенерированных файлов: имя файла начинается с индекса, который и определяет порядок файла.
Если поставить галку в опции «Отключить сортировку файлов» - то файлы автоматически сортироваться не будут. Эта опция применяется в особых случаях, когда разработчик сам определяет порядок следования файлов.
Результат при выключенной опции (слева) и при включенной (справа):
Не выгружать stream и blob поля Опция управляет выгрузкой файлов из базы данных. Например, фотография для физических лиц или прикрепленный файл. По умолчанию все файлы, которые используют выгружаемые объекты (все поля с типами stream и blob), выгружаются.
Объединять спецификацию с мастером [опция для разработчиков] По умолчанию (если опция не выбрана) записи спецификации помещаются в отдельный файл.
Пример для класса «Физическое лицо» и спецификации «Персональный документ» (в отдельных файлах):
Если опция выбрана – то записи спецификации помещаются в один файл с записями мастера.
Внимание! При включенной опции возможно возникновение циклических ссылок. Например, когда выгрузилось два файла импорта: file1.import и file2.import. Но file1.import использует записи file2.import, а file2.import использует записи file1.import. В такой ситуации при импорте архива будут возникать ошибки вида:
[18:37:16] Выполнение привело к ошибке:
Cannot insert the value NULL into column 'Person_tid',
table 'm_acc_contr_state_data_okpd_38777.dbo.ParusBusinessResponsiblePerson';
column does not allow nulls. INSERT fails.
The statement has been terminated.
Значит, в данной ситуации опцию нужно снять или перенести записи спецификаций в новый файл вручную.
Ссылаться из спецификации на мастера по значению [опция для разработчиков] Если спецификация выносится в отдельный файл, то опция определяет тип ссылки на запись мастера (поле Master).
Если опция выбрана, то используется ссылка по значению. В заголовок файла добавляется определение ref-by-val.
Если опция не выбрана, то ссылка идет по Ид записи мастера. А в файл со спецификацией включается файл мастера через include.
Примечание. Если спецификация определена в записи базового класса, у базового класса есть несколько наследников (допустим, наследник 1 и наследник 2) и спецификация добавляется через наследника - в этом случае опцию использовать нельзя. Так как тогда будет конфликт в определении ref-by-val. То есть в одном файле некоторые записи спецификации будут ссылаться по значению на один класс мастера (наследник 1), а некоторые на другой класс мастера (наследник 2).
Пакет [опция для разработчиков] Если в этом поле выбрана запись, то в папке выгрузки появляется файл проекта пакета Торнадо. В этот проект уже включены все файлы с данными.
Пример. Создать пакет с данными для Торнадо с наполнением словаря «Справочник валют».
В разделе «Настройка пакета файлов импорта» создать запись и заполнить требуемые поля.
В генераторе указать созданную в пункте 1 запись.
В папке выгрузки появится файл проекта. Его можно добавить в существующее решение в Visual Studio как существующий проект. Также из базы выгрузятся все зависимые пакеты (*.pkg).
Создать файл конфигурации по умолчанию [опция для разработчиков] При нажатии на кнопку в папке выгрузки будет создан файл generator.config. Это необязательный файл, который может быть использован для настройки импорта.
Пример. У класса «Справочник валют» есть два независимых ограничения уникальности (Code и ISO). В редакторе метаданных для класса видим:
По умолчанию в инструкциях импорта в ключевые поля попадут оба поля.
В файле конфигурации можно указать для класса Parus.Business.Currency, что в ключевые поля нужно записывать только одно поле, например, Code.
Тогда результат выгрузки будет таким:
Классы, у которых несколько ограничений уникальности указываются в логе работы генератора, в файле ImportLog.txt, который появляется в папке выгрузки. Например, при выгрузке класса Parus.Business.Currency в логе появляется такое сообщение:
В файле конфигурации также можно указать, по какому полю будет производиться ссылка по значению. Что такое ссылка по значению и как она описывается можно узнать в документе Документация прикладного программиста.docx
Генератор вместо ссылки по id ставит ссылку по значению в случае, если в классе, на который ссылаемся, в ограничении уникальности только одно поле. Но если самих ограничений несколько, как в классе Currency, то для ссылки по значению по умолчанию используется первое из ограничений уникальности.
Если нужно указать какое уникальное поле использовать для ссылки по значению для конкретного класса – имя поля нужно указать в атрибуте rbv-key:
|