Добрый день!
Подскажите пожалуйста, как можно менее проблематично перенести базу данных на Firebird с версий 3.2.0 на 3.3.2 (Terrasoft)
Заранее спасибо!

Нравится

10 комментариев

Базовая версия или проектное решение?

проектное решение ... Утилиты переноса сервисов и перехода версий support предоставил ... А как быть с самой базой и данными в ней ?

Под SQL есть альтернатива - переносим доработки руками в виде сервисов или вновь внося изменения, а затем данные перебрасываем с помощью Red Gate. Но вот аналога этой утилиты для firebird я не знаю...

Почитайте эту ветку: http://community.terrasoft.ua/blogs/5200
Возможно это Вам поможет.

База Firebird ... требуется перенести данные из старой базы в новую (обновление Terrasofta до 3.3.2)
Спасибо заранее за советы

Здравствуйте!

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

Инструкция по обновлению прикреплена.

А почему не переносятся окна и некоторые скрипты ?
А при переносе вручную (выгрузка/загрузка сервисов) окно переносится, а поля нет ?

В пакетах обновления приоритет выставлял на замену из пакета (при конфликтах)

Здравствуйте!
При применении приоритета пакета перехода все конфликтные сервисы заменяются на базовые новой версии, что само по себе не совсем корректно. Таким образом, если Вы обновляете конфигурацию с применением приоритета пакета, то все изменения, внесенные в конфигурацию, будут перезатерты.

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

Советую Вам попытаться провести обновление и при этом проводить слияние сервисов вручную.

"Симоненко Влад" написал:Советую Вам попытаться провести обновление и при этом проводить слияние сервисов вручную.

Что и делаю, но при загрузке сервиса окна, (выгрузка из предыдущей версии и загрузке в новую) в новой не не отображаются поля окна :(

Скорее всего при переходе что-то было неправильно сделано.
Попробуйте сделать все с начала и если ошибка останется - посмотрите в TSAdmin почему не отображаются эти поля (не перенесен сервис, названия полей пустые, неправильное окно и т.д.), тогда станет ясно почему возникает данная ошибка.

Показать все комментарии

Для установки Firebird базы я выбрал Debian Lenny GNU/Linux (другого под руками не оказалось). Опишу как все происходило.

Во-первых, обновляем все пакеты (что-бы не пропустить важного обновления безопасности):

aptitude update
aptitude full-upgrade

Обновили? Переходим к установки Firebird сервера:

aptitude install firebird2.0-super

Для автоматического запуска службы правим файл /etc/default/firebird2.0-super:

ENABLE_SUPER_SERVER=yes

Отлично! Дальше собираем UDF библиотеку предоставленную Terrasoft. Устанавливаем все зависимости, качаем библиотеку и собираем ее из исходников:

aptitude install build-essential libuuid1 uuid-dev
cd /tmp
wget http: //vk.it-sfera.com.ua/wp-content/uploads/uuidlib-1.4.tar.gz
tar xzvf uuidlib-1.4.tar.gz
cd uuidlib-1.4/src/
make
make utest
./utest

Вы должны увидеть что-то такое:

Testing create guid (old function, compatible to uuidlib)
        Generated uuid: 187459c3-9273-44df-8763-61ff42aa97f3
Testing create guid
        Generated uuid: D9C2FAD1-BE91-466C-8B8C-ECDC288F7846
Testing compleate

Копируем библиотеку, базу (у меня это /var/db/TSCRM.fdb) и запускаем сервер:

cp uuidlib.so /usr/lib/firebird/2.0/UDF/
cp uuidUDF.sql /usr/lib/firebird/2.0/UDF/
echo "CRM = /var/db/TSCRM.fdb" >> /etc/firebird/2.0/aliases.conf
invoke-rc.d firebird2.0-super restart

Все! Можем подключатся к базе.

Оригинал статьи: http://vk.it-sfera.com.ua/231.html
 

Нравится

Поделиться

8 комментариев

Если Вы не можете подключится к базе и выдает ошибку:
[font=monospace]
Test failed. Original error message: "no permission for read-write access to database /var/db/TSCRM.fdb" This user does not have privilege to perform this operation on this object.
Error code 32.
[/font]

Установите права доступа к базе и перезапустите:

chown firebird:firebird /var/db/TSCRM.fdb
chmod 660 /var/db/TSCRM.fdb
invoke-rc.d firebird2.0-super restart

Должно помочь!
--
www.it-sfera.com.ua

Всё сделал верно. Подключение к базе идёт, библиотечка работает. Но не могу получить csr запрос на лицензии, выкидывает вот такую ошибку:

invalid request BLR at offset 63  function IDENT is not defined module name or enrtypoint could not be found Invalid token Error Code: 23

Отличия от оригинала:
у меня сервер x86_64:

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty
Source: firebird2.5
Version: 2.5.2.26540.ds4-9ubuntu1

Клиенты же цепляются с Windows 7 Pro x86_64

Поэтому вопросы:
1. Ошибка вызвана старой версией uuidlib-1.4.tar.gz?
2. Есть ли новая версия uuidlib.tar.gz?
3. Где скачать?
4. Ваши мысли?

Ответ был предоставлен в рамках обращения в службу поддержки компании Terrasoft

"linuxmasterz" написал:

Поэтому вопросы:

1. Ошибка вызвана старой версией uuidlib-1.4.tar.gz?

2. Есть ли новая версия uuidlib.tar.gz?

3. Где скачать?

4. Ваши мысли?


В общем, решил только установкой i386-дистрибутива, куда прекрасно ставилась как uuidlib-1.4, так и uuidlib-1.6. Ну и база заработала как надо.
Какие минусы наличия базы и сервера Firebird в i386-дистрибутиве?

"linuxmasterz" написал:Какие минусы наличия базы и сервера Firebird в i386-дистрибутиве?

Думаю, больше об этом можно узнать на специализированных форумах, посвящённых Linux. Например, в этой и этой теме обсуждались подобные вопросы.

"Мария Ватулина" написал:

Думаю, больше об этом можно узнать на специализированных форумах, посвящённых Linux. Например, в этой и этой теме обсуждались подобные вопросы.


Видимо, я неправильно задал вопрос. Какие минусы будут, если у меня будет 32х-битный сервер, а не 64-битный? Вопрос был не в глобальном присутствии Firebird в дистрибутивах GNU/Linux, а в моём частном случае, в виртуальной машине с процессором в 32 бита, а не в 64, как очень хотелось. Собственно, не важно, работает и славно.

"linuxmasterz" написал:Какие минусы будут, если у меня будет 32х-битный сервер, а не 64-битный?

См. такие статьи и обсуждения:

"Мария Ватулина" написал:

Эта ссылка совсем в сторону. А вот вторая - норм. Правда там везде Шindoшs, Шindoшs, Шindoшs. Но не суть. В общем, лично для меня всё норм, PAE решит проблемы с ограничением по памяти (не уверен, что у меня когда-либо будет сервер для Terrasoft в 64 GB RAM), а ext4 - решит файловые проблемы. Вот и океюшки.

Показать все комментарии

Часто приходится переходить с одной конфигурации Terrasoft на другую.

Опишу переход Terrasoft Sales 3.1.1.6 на Terrasoft X15 3.1.1.6
Обе базы под Firebird.

Можно просто загрузить сервисы x15 на Sales, но при такой процедуре возможны всякого рода неприятности, например у меня не получилось загрузить все wa_**.

Перенос данных требовал всего лишь импорта контактов и контрагентов. Есть в утилите IB Expert полезная функция Table Data Comparer, в которой просто нужно указать таблицу источник и таблицу приемник, затем выполнить сгенерированный скрипт.

Единственная трудность заключается когда в tbl_Account есть записи с заполненым полем PrimaryContactID, а в tbl_Contact записи с заполненым полем AccountID, в этом случае перенос всех записей не возможен.

Решение:
1. В базе источнике создаем копию таблицы tbl_Account, скажем tbl_Account2 и с помошью того же Table Data Comparer копируем данные из tbl_Account в tbl_Account2

2. В tbl_Account2 устанавливаем все значения PrimaryContactID в null

3. Копируем в tbl_Account базы приемника данные из tbl_Account2 базы источника

4. Копируем в tbl_Contact базы приемника данные из tbl_Contact базы источника

5. Копируем в tbl_Account базы приемника данные из tbl_Account базы источника

6. Копируем в tbl_Contact базы приемника данные из tbl_Contact базы источника

Нравится

Поделиться

7 комментариев

Павел!

Могу посоветовал решение попроще.

На момент переноса данных между таблицами tbl_Account и tbl_Contact удаляются внешние ключи, а после окончания переноса - ключи снова создаются.

А вот если сделать так:
- сохранить сервисы tbl_Contact и tbl_Account;
- перенести данные;
- загрузить сохраненные сервисы;
Какова вероятность, что сервисы встанут корректно и без проблем?
Если такое попробовать провернуть на большем наборе сущностей чем 2 таблици?

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

А как они могут нарушить целостность, если они ее не нарушают в базе-источнике? Ведь мы просто сгенерируем два скрипта вида "insert into tbl_Account ..." и "insert into tbl_Contact" со всеми значениями полей.
Вопрос к тому не могут на корректный перенос повлиять может какие-нибудь триггеры?

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

Ах да, точно...
Но создание связей вручную, так же чревато этой проблемой...

Конечно же

Показать все комментарии

Версия Terrasoft CRM X15 3.0.66 FireBird. Деталь Дочерние документы.
Добавляем дочерний документ. В гриде отобразились его состояние и тип.
Добавляем дочерний договор - колонки с его состоянием и типом оказываются
пустыми. Со счётом та же история. В запросе sq_ChildDocument пробовал
подставлять значение для колонки Title у счёта, но оно по каким-то причинам не
выводится.

Перейти на другую версию продукта нет возможности. Пожалуйста,
подскажите, можно ли как-нибудь решить эту проблему.

Нравится

11 комментариев

Добрый день.

Спасибо за Ваш вопрос.

Если в реестре записей детали значение полей в колонках остаются пустыми, Вам необходимо открыть wnd_DocumentInDocumentGridArea и проверить свойство Field Name для элементов DataGridColumn этого окна. В них должны быть записаны названия соответствующих колонок таблицы для отображения.
Например, для поля colDocumentType имя колонки - DocumentTypeID.

Будем рады ответить на все Ваши дополнительные вопросы.

Terrasoft Support Team

Добрый день!
Возникает похожая проблема - в разделе Договора при добавлении Подчиненных документов или договоров поле Тип документа отображается. Если же добавлять Счета, поле пустое. Каким образом в данном поле отображать фиксированное значение (напр. "Счет абонента") для всех подчиненных счетов?
Спасибо за помощь!

Дело в том, что у документов и договоров есть поле "Тип" в карточке, а в карточке счета поля "Тип" нет. В результате этого колонка с типом для счета всегда пустая.
Как вариант решения, можете попробовать в сервисе запроса sq_ChildDocument в блоке InvoiceSelect изменить колонку-константу InvoiceTypeName (строка Unicode), указать ей в поле Значение - "Счет абонента", в таком случае у Вас для всех подчиненных счетов будет отображаться тип "Счет абонента".

Дело в том, что у документов и договоров есть поле "Тип" в карточке, а в карточке счета поля "Тип" нет. В результате этого колонка с типом для счета всегда пустая.

Да, правильно, хотел узнать можна ли достичь желаемого результата, не добавляя поле "Тип" в счета. Оказалось, что можно))). Все получилось, спасибо большое!

Опять возник вопрос.
В счетах добавил поле InvoiceTitle и нужно его отображать в родительских/дочерних документах в колонке название.
В sq_Parent/ChildDocument в UNION для Invoice есть колонка-константа Title. Пробовал заменить на основную колонку InvoiceTitle AS Title, но тогда родительских/дочерних документов вообще не отображает. Странно, ведь InvoiceNumber выбирается так же...
Никак не могу понять в чем проблема.

Необходимо в запрос sq_Parent\Child Document добавить основную колонку с ссылкой на InvoiceTitle AS Title.
Далее в скрипте wnd_DocumentInDocumentGridAreaScript в функции AddInvoice() в строке AddData('InvoiceNumber', SubjectFieldName, 'ds_Invoice'); изменить на InvoiceTitle.

function AddInvoice() { 
	var SubjectFieldName; 
	DocumentInDocument.FilterItemFieldName = GetAttribute(Self,
		'FilterItemFieldName');	
	if (DocumentInDocument.FilterItemFieldName == 'ChildID') {
		SubjectFieldName = 'ChildInvoiceID';
	} else {
		SubjectFieldName = 'ParentInvoiceID';
	}
	AddData('InvoiceTitle', SubjectFieldName, 'ds_Invoice');
}

Да нет, я наверно неправильно сформулировал.
В запросах Child/Parent ссылку добавил. Но после того перестали отображаться ВСЕ документы, счета и договора в менеджере деталей на вкладках Родительские/Подчиненные. Там же и нужно реализовать отображение названия счета.

Ну не знаю, у меня ничего не пропало, все записи отображаются. Что изменила: добавила основную колонку в запрос с ссылкой на InvoiceTitle, в скрипте подменила номер на заголовок:

Всё так и есть... но результат прежний - пустой менеджер деталей. Даже если Title вернуть колонка-константа, не отображает ничего. Помогает только если сервисы вернуть из бекапа. Возможно ето проблема версии:confused:
TS X25 3.1.1.26
А то на скринах вижу 3.3.1.60

Проверила на версии 3.1.1, тоже все работает.
Может выложите сервисы?
Или еще, как вариант, очистите cache Terrasoft:
%appdata%\Terrasoft CRM\3.1.1\Cache

Оказывается, проблема скрывалась в очередности полей в InvoiceSelect:neutral:
Люди, будьте бдительны...
Спасибо, Татьяна!

Показать все комментарии