Подписка на RSS-ленту

RSS-подписка

Подпишитесь на RSS и получайте свежие материалы в удобной форме!

Глава 6. Обмен данными

29
Авг

Глава 5. Отчёты и вывод на печать

TOC \o "2-3" Импорт/экспорт данных…………………………………………………… PAGEREF _Toc19325648 \h 1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600340038000000

Формат внешних данных………………………………………………………. PAGEREF _Toc19325649 \h 1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600340039000000

Как выполнить экспорт/импорт данных……………………………………. PAGEREF _Toc19325650 \h 2 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350030000000

Настройка импорта/экспорта, io-файлы……………………………………. PAGEREF _Toc19325651 \h 3 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350031000000

Местонахождение io-файлов…………………………………………………. PAGEREF _Toc19325652 \h 4 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350032000000

Как узнать имя таблицы для io-файла………………………………………. PAGEREF _Toc19325653 \h 4 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350033000000

Каталог хранения внешнего файла…………………………………………. PAGEREF _Toc19325654 \h 4 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350034000000

Расчёт полей в процессе импорта/экспорта……………………………… PAGEREF _Toc19325655 \h 4 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350035000000

Фильтрация данных при экспорте/импорте………………………………. PAGEREF _Toc19325656 \h 5 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350036000000

Экспорт в файл строго заданного формата……………………………….. PAGEREF _Toc19325657 \h 6 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350037000000

Импорт/экспорт с сохранением иерархии………………………………… PAGEREF _Toc19325658 \h 6 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350038000000

Особенности экспорта/импорта документов……………………………… PAGEREF _Toc19325659 \h 7 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600350039000000

Как организована связь экспортируемых таблиц…………………………. PAGEREF _Toc19325660 \h 8 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360030000000

Рекомендации по импорту из других программ………………………….. PAGEREF _Toc19325661 \h 9 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360031000000

Переформатирование базы данных в DBF-формат………………………. PAGEREF _Toc19325662 \h 9 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360032000000

Соединение справочников………………………………………………. PAGEREF _Toc19325663 \h 10 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360033000000

Доступ к данным из правил операций…………………………….. PAGEREF _Toc19325664 \h 11 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360034000000

Простое чтение из внешнего файла………………………………………. PAGEREF _Toc19325665 \h 11 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360035000000

Заполнение поля из внешнего файла…………………………………….. PAGEREF _Toc19325666 \h 11 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360036000000

Запись во внешний файл…………………………………………………….. PAGEREF _Toc19325667 \h 12 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360037000000

Автоматическое формирование нового документа……………………. PAGEREF _Toc19325668 \h 12 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360038000000

Создание лог-файла…………………………………………………………… PAGEREF _Toc19325669 \h 14 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600360039000000

Организация SQL-доступа……………………………………………….. PAGEREF _Toc19325670 \h 14 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600370030000000

Подготовка базы данных комплекса……………………………………….. PAGEREF _Toc19325671 \h 15 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600370031000000

Настройка Engine DSN на сервере…………………………………………. PAGEREF _Toc19325672 \h 15 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600370032000000

Создание пользователей в SQL-представлении БД…………………….. PAGEREF _Toc19325673 \h 18 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600370033000000

Настройка Client DSN на рабочих местах…………………………………. PAGEREF _Toc19325674 \h 22 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600370034000000

Извлечение данных из БД в Microsoft Excel………………………………. PAGEREF _Toc19325675 \h 24 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F0054006F006300310039003300320035003600370035000000

 

27
Авг

Каталог хранения внешнего файла

Если в io-файле имя внешнего файла указано без каталога, то при каждой операции импорта/экспорта программа будет запрашивать путь доступа к внешнему файлу. Чтобы исключить этот запрос, достаточно указать в io-файле полный путь доступа к внешнему файлу, например:

+Организации:C:\IO_BUF\ORG.DBF

25
Авг

Организация SQL-доступа

Кроме всего прочего, можно организовать доступ к базе данных комплекса СБиС++ через ODBC. Это позволяет работать с данными комплекса из любой программы, поддерживающей этот распространённый интерфейс, например, из Excel.

Для того чтобы обеспечить доступ к базе через ODBC, необходимо следующее:

§       база данных комплекса должна быть в формате Pervasive.SQL (расширение «mkd») ;

§       в качестве сервера БД должен быть установлен Pervasive.SQL 2000.

Настройку доступа к базе данных через интерфейс ODBC можно разделить на этапы. Рассмотрим их последовательно.

17
Авг

Создание пользователей в SQL-представлении БД

Если в СБиС’е заведены пользователи, то для каждой таблицы указывается специальная кодовая строка-пароль, которая требуется для последующего открытия этой таблицы. При загрузке СБиС’а программа делает это автоматически, но в случае назначения прав пользователей в SQL-представлении БД потребуется явное указание этого кода. Посмотреть его можно в списке пользователей (задача «Баланс и анализ», меню «Услуги>База данных>Пользователи». Он будет показан в правом нижнем углу диалога. Учтите, что этот код меняется каждый раз при изменении списка пользователей или прав какого-либо пользователя.

В SQL-представлении БД СБиС’а можно завести отдельный список пользователей. В случае, если у Вас уже заведены пользователи в самой программе, Вам это будет необходимо. Для этого требуется указать, что в базе данных будут пользователи. Делается это указанием пароля в свойствах БД в Pervasive Control Center (нужно нажать на иконке БД правую кнопку мыши и выбрать ”Properties”) на вкладке ”Security”. После этого появляется пользователь с именем ”Master” и указанным паролем, который будет иметь максимальные права на базу данных. В частности, он имеет права на создание новых пользователей и назначение им прав.

Здесь следует отметить важное различие между Pervasive.SQL2000 Service Pack1 и последующими версиями сервера. В PSQL2000SP1 при назначении прав указание пароля таблицы (owner) не требуется, но в последующих версиях при назначении прав пользователю на какую-либо таблицу требуется указать пароль этой таблицы (owner). Сделать это нужно только для назначения прав – при работе этого пользователя с базой пароль на таблицы уже не потребуется. Также изменились права по умолчанию для пользователя Master – начиная с Service Pack 2A он по умолчанию не имеет никаких прав на таблицы, но может сам присвоить их себе).

Существует два способа заведения пользователей и назначения им прав. Это  можно делать в интерактивном режиме или с помощью операторов SQL.

Создание пользователей в интерактивном режиме

Для заведения пользователей в Pervasive Control Center откройте базу данных, в которую вы будете добавлять пользователей. PCC будет иметь вид как на рисунке.

Как видно, в списке пользователей (Users) присутствует только две записи – Master (самый главный пользователь) и Public – пользователь, создаваемый по умолчанию. Для добавления нового пользователя наживаем в правой части экрана правую кнопку мыши и из появившегося меню выбираем “New user…”. Появится показанный ниже диалог.

В нём следует указать имя создаваемого пользователя и его пароль (два раза, второй для проверки). После этого переходим на вкладку “Permissions”. Она имеет показанный ниже вид.

Здесь представлен список таблиц, для которых можно указать права, установив флаг в соответствующем квадрате. Обратите внимание, что в случае указания прав для какой-либо таблицы во втором столбце (Owner Name) следует ввести соответствующий пароль таблицы. О том, как его получить, было написано выше. После того, как все требуемые права указаны, можно нажимать “OK”. Пользователь создан.

Использование SQL для создания пользователей

Для выполнения операторов SQL (которые потребуются в том числе и для заведения пользователей) можно использовать Pervasive Control Center. Откройте в нём базу данных, зайдите в список таблиц (будет запрошено имя пользователя и пароль, укажите “Master” и соответствующий пароль) и в меню, вызываемом правой кнопкой мыши, выберите “Tasks>Execute SQL Query”. В появившемся окно можно вводить любые SQL операторы и выполнять их, выбирая соответствующий пункт из меню “Tools”.

Для заведения нового пользователя используется оператор GRANT. Формат его такой:

GRANT LOGIN TO user:password

Здесь user – имя пользователя, password – назначенный ему пароль. Например, для того, чтобы завести пользователя с именем Elena и паролем PAROL, следует выполнить следующую команду:

GRANT LOGIN TO Elena:PAROL

После того, как пользователь занесен в базу данных, он может в неё заходить, но не может выполнять в ней никаких действий, так как изначально ему всё запрещено. Чтобы пользователь мог что-либо делать, ему необходимо дать соответствующие права. Для этого используется тот же оператор GRANT, но немного в другой  форме:

GRANT right ON table ‘owner’ TO user

Здесь right –это право, которое требуется дать пользователю по имени user на таблицу table. Право может быть одно из следующих:

§       ALL – все права на таблицу

§       SELECT – право просматривать данные таблицы

§       UPDATE – право изменять данные таблицы

§       INSERT – право добавлять данные в таблицу

§       DELETE  – право удалять данные из таблицы

Обратите внимание, что после указания имени таблицы, на которую требуется дать права, в одинарных кавычках указывается строка-пароль (owner) для этой таблицы. О том, как его получить,  было написано выше. Соответственно, следующая команда разрешает пользователю Elena все операции с таблицей ANALIT, пароль которой ‘12345678’:

GRANT ALL ON analit ‘12345678’ TO Elena

Однако полные права рекомендуется давать с большой осторожностью. Как правило, можно ограничиться только просмотром. Делается это такой командой:

GRANT SELECT ON analit ‘12345678’ TO Elena

14
Авг

Фильтрация данных при экспорте/импорте

Допустим, нужно экспортировать не все записи, а только некоторые по определённому условию. Для этого в io-файле после имени таблицы/внешнего файла нужно указать знак равенства, и написать условие фильтрации на внутреннем языке СБиС++:

+Название таблицы[:Имя внешнего файла]=Условное выражение

В этом выражении будут доступны все поля экспортируемой записи. Если выражение вернуло ненулевое значение, то запись будет экспортироваться. Если вернуло ноль, запись будет пропущена.

Например, чтобы экспортировать расходные накладные только с определённой темой, нужно написать так:

+Расходные накладные:GIVE.TBL =Тема==”РОЗ”

Это же выражение будет выполняться и при импорте данных. Чтобы различить, что же конкретно в данный момент выполняется – экспорт или импорт, нужно проанализировать переменную «Экспорт». Если её значение  не ноль, то идёт экспорт данных, если ноль – импорт. Так, в предыдущем примере, чтобы сделать фильтрацию только экспортируемых данных, а при импорте принимать любые данные, можно написать так:

… =Если( Экспорт ) Тема==”РОЗ” иначе 1

30
Июл

Переформатирование базы данных в DBF-формат

При описанных выше процедурах импорта/экспорта идёт обмен только определённой достаточно малой частью данных, хранящихся в базе данных комплекса СБиС++. Если же нужно получить доступ ко всей базе данных программы, то можно переформатировать базу данных в dbf-формат. Для этого:

§       скопируйте базу данных в отдельный каталог (в этот момент никто не должен работать с базой данных)

§       запустите программу jinnee.exe;

§       выберите пункт меню «База данных/Переформатировать»,  в появившемся окне укажите каталог со сделанной копией базы данных, и в поле «Новый формат БД» укажите «DBF»;

§       нажмите «Переформатировать» и дождитесь окончания переформатирования базы данных.

При проведении описанной выше операции учтите, что после переформатирования в dbf-формат база становится недоступна для комплекса СБиС++. Более того, обратное переформатирование уже невозможно! Поэтому все операции должны проводиться только на копии базы данных.

В итоге вы получите все файлы базы данных комплекса СБиС++ в формате DBF. Но это будет «мгновенный слепок» с базы данных, чтобы получить постоянный доступ к данным СБиС++ из внешних программ, смотрите ниже раздел «Организация SQL-доступа».

29
Июл

Расчёт полей в процессе импорта/экспорта

Кроме простого копирования данных во внешние файлы или наоборот, программа позволяет выполнять расчёт значений импортируемых/экспортируемых полей. Для этого достаточно вместо имени поля указать знак равенства и выражение на внутреннем языке программы. Причём, если указано так:

=Выражение:Имя поля

то данная строка будет участвовать только при экспорте данных – значение выражения будет попадать во внешний файл в поле с указанным именем. В выражении можно обращаться ко всем полям экспортируемой записи.

Если же указано так:

Имя поля:=Выражение

то такая строка будет участвовать только при импорте данных – значение выражения будет записано в указанное поле таблицы. В выражении можно обращаться ко всем полям записи внешнего файла.

Пример импорта/экспорта расчётных полей

Пусть требуется считать и записать данные из справочника сотрудников во внешнюю базу, в которой фамилия, имя и отчество сотрудника хранятся в разных полях (в СБиС++ это одно поле «ФИО»). Содержимое файла sbis.io для импорта будет следующим:

+Сотрудники:MAN.DBF

ФИО:=FAM+” ”+NAME+” ”+OTCH

То есть три поля внешнего файла «склеиваются» в одно поле справочника сотрудников.

Для экспорта придётся написать чуть больше:

+Сотрудники:MAN.DBF

=Разбить(ФИО,” ”,Ф,И,О); Вернуть(Ф);  :FAM

=Разбить(ФИО,” ”,Ф,И,О); Вернуть(И);  :NAME

=Разбить(ФИО,” ”,Ф,И,О); Вернуть(О);  :OTCH

Тут в каждой строке поле «ФИО» разбивается по пробелам на три части и каждая из частей заносится в отдельное поле внешнего файла.

На самом деле два вышеприведённых фрагмента можно написать вместе:

+Сотрудники:MAN.DBF

ФИО:=FAM+” ”+NAME+” ”+OTCH

=Разбить(ФИО,” ”,Ф,И,О); Вернуть(Ф);  :FAM

=Разбить(ФИО,” ”,Ф,И,О); Вернуть(И);  :NAME

=Разбить(ФИО,” ”,Ф,И,О); Вернуть(О);  :OTCH

В этом случае при импорте данных последние три строки будут игнорироваться, а при экспорте, наоборот, будет игнорироваться первая строка.

14
Июл

Соединение справочников

Для переноса записей между двумя базами данных комплекса СБиС++ служит также и операция «Соединение справочников». Операция вызывается в задаче «Баланс и анализ» пунктом меню «Услуги/База данных/Соединить справочники».

При вызове команды «Соединить справочники» запрашивается каталог второй базы данных и имя соединяемого справочника. Далее открывается окно с двумя панелями. В левой выводится содержимое внешнего справочника (того, что из второй базы данных), в правой – содержимое текущего справочника. Для переключения между этими двумя панелями используйте клавишу <Tab>.

Чтобы скопировать запись (записи) из внешнего справочника в текущий, выберите запись (или выделите нужные записи клавишей <Пробел>) и нажмите <F5>. Запись будет скопирована в тот раздел текущего справочника, который был открыт в правой панели. Допускается копирование как отдельных записей, так и целых разделов справочника.

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

Учтите, что внешний справочник открывается только на чтение, редактировать его нельзя. И открывается он в монопольном режиме, то есть нельзя при соединении справочников открыть базу данных, с которой кто-то уже работает.

13
Июл

Рекомендации по импорту из других программ

При импорте данных в комплекс СБиС++ из других программ советуем воспользоваться следующими рекомендациями:

Учитесь на образцах

Перед тем как подготовить файл для передачи данных в СБиС++, создайте в нашей программе несколько пробных записей в тех реестрах и справочниках, которые предполагается переносить. Экспортируйте эти записи. Внимательно изучите состав и структуру полученных эталонных файлов.

Обратите внимание на связи

Как организованы связи между внешними таблицами, было описано чуть выше. Изучая эталонные файлы, обратите особенное внимание на организацию связей. В отличие от программ типа Foxpro, комплекс СБиС++ использует не реляционную связь, а связь по номеру записи в файле. Учтите, что служебные поля должны обязательно присутствовать в файлах, даже если во всех записях его содержимое придется сделать равным –1 (то есть даже если нет связи).

Не используйте русские имена полей

Как уже говорилось, при работе с dbf-форматом могут возникнуть проблемы с русскими именами полей. Поэтому лучше не использовать русские имена полей, и в io-файле указать соответствующие английские имена.

Типы полей должны совпадать

При генерации своих файлов обращайте внимание на типы полей – строка, число или дата. Они должны совпадать с типами аналогичных полей в эталонных файлах.

11
Июл

Настройка импорта/экспорта, io-файлы

Настройка процесса импорта/экспорта данных осуществляется через специальные io-файлы – текстовые файлы с расширением «.io». Каждый такой файл содержит несколько последовательно идущих описаний импортируемых/экспортируемых таблиц, каждое из которых в свою очередь состоит из перечисления импортируемых/экспортируемых полей.

В общем виде формат io-файла выглядит так:

+Название таблицы 1[:Имя файла 1]

Поле 1[:Внешнее поле 1]

Поле 2[:Внешнее поле 2]



+Название таблицы 2[:Имя файла 2]

Поле 1[:Внешнее поле 1]

Поле 2[:Внешнее поле 2]

Описание формата каждой таблицы начинается с символа перевода страницы (код 12, в примере обозначен символом «+»). Вслед за ним, на этой же строке следует название таблицы (например, «Организации») и через двоеточие имя соответствующего внешнего файла. Если имя файла не указано, то берётся имя, используемое для хранения указанной таблицы в базе данных. Формат внешнего файла определяется указанным в имени файла расширением. Если расширение не указано, то будут создаваться tbl-файлы.

Далее перечисляются поля, которые будут записываться во внешний файл и считываться из внешнего файла. Причём указывается пара – имя поля в таблице комплекса СБиС++ и через двоеточие имя поля во внешнем файле. Если эти имена совпадают, то имя поля во внешнем файле можно опустить (вместе с двоеточием).

Русские имена полей в dbf-файлах

Поскольку не все программы,  читающие dbf-файлы, корректно работают с русскими именами полей, мы рекомендуем при экспорте в dbf-формат указывать в io-файле имена полей латинскими буквами, в верхнем регистре, длиной не более десяти символов, без пробелов,.

Если для работы с dbf-файлами вами используется программа Foxpro версии 2.5 или выше, включите в файл «CONFIG.FP» следующую строку:

codepage=866

тогда имена полей программой Foxpro будут восприниматься нормально.