Добрый день, коллеги.
Для интеграции Террасофт CRM с внутренней учетной системой мне нужно понимать изменилась ли запись в таблице. Поля CreatedOn и ModifiedOn не очень подходят, потому что часть логики реализована через хранимые процедуры и эти поля могут не содержать актуальной информации.

В качестве сервер БД используется MS SQL Server, поэтому я решил попробовать добавить в таблицу поле типа timestamp, которое обновляется при любом изменении записи. Но, естественно, столкнулся с проблемами:
1. При попытке добавления поля в эту таблицу и сохранение изменений в БД я получаю ошибку "cannot update timestamp column". Я не знаю, как Террасофт обновляет таблицы в БД на основании конфигурации, но выходит, что система пытается обновить поле, которое в конфигурации не описано.
2. Если выгрузить сервис такой таблицы в файл, а потом попытаться загрузить обратно, то получаю ошибку "Duplicate hash list entry ", где это идентификатор сервиса в конфигурации.

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

Нравится

3 комментария

Здравствуйте, Riptor.

Насколько я понял, Вы добавили поле напрямую через БД.
При сохранении сервиса таблицы Terrasoft происходит пересохранение структуры таблицы в БД в соответствии со структурой сервиса Terrasoft.

Прошу уточнить, почему бы просто не добавить новое поле "Дата/время" через конфигурацию и писать данные в него, к примеру, триггером?

Добрый день, Андрей.

"Безродный Андрей" написал:почему бы просто не добавить новое поле "Дата/время" через конфигурацию и писать данные в него, к примеру, триггером?

Скорее всего так и придется сделать. Думал, что проще поле добавить в 3 десятка таблиц, чем триггеры. С другой стороны интересно, почему платформа Террасофт поля CreatedOn и ModifiedOn не заполняет в триггере. Производительность?

Riptor

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

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

Здравствуйте.
Проблема в синхронизации BPM на MS SQL Server c Oracle.
Как известно в Oracle пустая строка '' и null эквиваленты. При переносе данных в BPM, значения с null нужно преобразовывать т.к. в BPM cтроковые типы, на уровне БД, автоматически создаются с параметром not null.
Такие манипуляции с данными существенно замедляют синхронизацию, к тому же в Oracle пустые строки не проставишь.

Есть ли способ в BPM обойти вышеупомянутую неприятность? В объекте ничего похожего не нашел.

Нравится

4 комментария

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

Здравствуйте, Константин!

Стандартными средствами базовой конфигурации приложения BPMonline , такой возможности нет. Но, насколько я понял задачу, то Вы пытаетесь перенести данные из Oracle в MS SQL. Действительно, при выполнении простой выборки из Oracle можно получить пустое значение. Но для того чтобы потом выполнить инсерт с этими данными в SQL, нужно приводить пустое значение в строку вида ' ', которая будет восприниматься в SQL. Например:

Select NVL(Description, ' ') from AccountCategory

То есть Вам необходимо воспользоваться nvl function in oracle

Здравствуйте, Сергей!

Тогда уже лучше использовать IsNull на уровне MS SQL Server, чем оттуда же использовать openquery с NVL.
Плюс на уровне SQL вставлять можно будет пустые строки, а не пробелы.
Вообщем костылей много, но все они замедляют обмен данными, а скорость очень критична.

А что насчет нестандартных средств? Или оно того не стоит?

Здравствуйте, Константин!

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

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

Возник вопрос выбора сервера БД для работы с приложением с расчетом на будущие расширения.
Скорее всего нужно будет организация подключения к БД удаленно из другого города.
Поэтому, хотелось бы понять, что для этого нужно и что выбрать, какой сервер.
MS SQL Server стоит от 4 000 до 250 000 рублей, много версий. Какой из них нужно будет покупать, я не могу понять.
То ли Firebird ставить, она и бесплатная и более простая в установке.
Подскажите, пожалуйста, что выбрать и что еще потребуется для подключения из другого города к базе в плане доп.оборудования, работ программиста и т.п.
Компьютеры подключены через шлюз к ПК, который уже через VPN выходит в инет через провайдера.
IP иногда меняется, но редко.
Как вариант, я думаю, что, если использовать FB, то можно с помощью программы (не помню название) создать статичный адрес и его уже использовать.

Нравится

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

Ставьте MS SQL Server Express - он бесплатный.

Сколько активных пользователей? Насколько широкий канал интернета?

Вообще, мой вам совет - наймите специалистов или обращайтесь в службу поддержки террасофта, детально описывайте ситуацию и там вам спроектируют нормальную сестему на долгие года.

"Глова Сергей" написал:Ставьте MS SQL Server Express - он бесплатный.

это то да, бесплатный. Но есть ограничения, вроде как по объему базы.
"Доленко Юрий" написал:Сколько активных пользователей? Насколько широкий канал интернета?

Пользователей не более 10. Скорость до 512 Кб.

"sorokinmp" написал:это то да, бесплатный. Но есть ограничения, вроде как по объему базы.

Для 2005 4 Гб, для SQL 2008R2 Express - 10 ГБ, но его можно обойти с помощью attach database.

"Раловец Ольга" написал:Для 2005 4 Гб, для SQL 2008R2 Express - 10 ГБ, но его можно обойти с помощью attach database.

а какие размеры может иметь база? У сайтов я знаю размеры баз, а вот у ТС не могу знать... 10Гб большие возможности и на сколько хватит?
Если покупать, то какую версию нужно?

"Раловец Ольга" написал:для SQL 2008R2 Express - 10 ГБ, но его можно обойти с помощью attach database.

Слышал, что в новых версиях это уже невозможно. Зато возможно хранить неструктурированные данные (видео, слышио, документы, ...) за пределами этих 10Gb

Затрудняюсь ответить по поводу среднестатистических размеров базы, работала с пустыми, например, исходных размер базы 332 порядка 1.5 Гб.

Получается, что на 10Гб год-другой работы с сотрудниками до 50 человек?
Чего-то вопрос все упускают :)
Подскажите, пожалуйста,какую все таки версию сервера нужно брать, чтобы не переплачивать, кто какую покупал? А не то их много и цены разнятся?

Здравствуйте.
В приципе, работать база Террасофт будет на любом продукте MS SQL Server. Конкретно что-то советовать, достаточно, проблематично. Ситуация зависит от предполагаемого использования той или иной функциональности SQL (Server Agent - выполнение действий по расписанию, Analysis Services - работа с разделом OLAP и т.д.) и аппаратного обеспечения сервера. Если, как Вы писали, предполагается работа до 10-ти пользователей, то по началу можно обойтись и MS SQL Server Express или приобрести Workstation Edt с правом обновления при необходимости (тогда оплачивается разница в стоимости).
Terrasoft Support Team.
P.S.: А вообще то более подробно об этом можно проконсультироваться в службе технической поддержки компании Microsoft.

И как-то тишина вокруг Firebird... :smile:

"Александр Кудряшов" написал:И как-то тишина вокруг Firebird...

согласен. Тоже интересует, почему-то никто ничего не написал про FB. Проблем много с такой базой или чего ожидает?

Здравствуйте.
Что касается использования FireBird, то эта СУБД включена в соответсвующие сборки (нет необходимости искать отдельно). Мы официально поддерживаем работу с FireBird 2.0. В принципе, можно использовать и FireBird, но MS SQL Server более гибок в плане масштабирования, обладает более широким спектром разнообразного инструментария для выполнения операций над базами данных. В общем, выбор конкретной СУБД в конечном счёте остаётся за пользователем потому, что каждый вариант имеет право на существование и обладает своими плюсами и минусами.
Terrasoft Support Team.

А можно узнать, какие проблемы могут возникнуть? У нас не требуется проводить постоянные работы с базой, организация небольшая... как можно определиться с ывбором СУБД, чтоб потом не стало обидно или не возникли дополнительные затраты на какие-нибудь работы по смене базы, программированию и т.п.?

Здравствуйте.
Могут возникнуть самые разные проблемы. Их серьёзность обратно пропорциональна квалификации обслуживающего персонала (выше квалификация - меньше проблемы). Повторюсь, что конечный выбор остаётся за Вами, а мы, просто, предоставляем консультации, что бы было проще определиться с выбором. В Вашей ситуации можно остановиться на Firebird или MS SQL Server 2008 Express.
Terrasoft Support Team.

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

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

cast

('01.01.' + @Year as datetime), cast('04.01.' + @Year as datetime)

Все было бы хорошо, но у клиента были различные настройки языка для пользователей базы данных. Поэтому для различных пользователей cast проходил по разному. Для пользователей с английскими настройками языка cast('04.01.' + @Year as datetime) конвертировался как 1 апреля, а для пользователей с русскими  настройками как 4 января. Далее в отчете происходила выборка данных, в соответствии с определенными периодами кварталов, и одни пользователи получали отчет в нормальном виде, другие в искаженном.
Для исправления достаточно было просто заменить cast на CONVERT и явно указать стиль даты

CONVERT

(datetime,'01.01.' + @Year,104), CONVERT(datetime,'01.04.' + @Year,104)

Нравится

Поделиться

1 комментарий

Очень полезная заметка. Сам не раз сталкивался с непонятной работой CAST.
Спасибо

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

При попытке подключения к серверу БД сначала проверяется, какой метод аутентификации определен для данного пользователя.

При соединении Terrasoft CRM с сервером MS SQL используются два типа аутентификации:

1. Аутентификация средствами СУБД (MS SQL). На MS SQL Server этот режим определяется как смешанный режим Mixed Mode (Windows NT Authentication and SQL Server Authentication).

При использовании смешанного режима аутентификации средствами SQL Server проводится последовательная проверка имени пользователя (login) и его пароля (password); если эти параметры заданы корректно, то подключение завершается успешно, в противном случае пользователь также получает сообщение о невозможности подключиться к SQL Server.

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

2. Интегрированный режим аутентификации, называемый Windows NT Authentication Mode (Windows NT Authentication).

Интегрированный режим предполагает, что для пользователя задается только одна учетная запись в операционной системе, как пользователя домена, а SQL Server идентифицирует пользователя по его данным в этой учетной записи. В этом случае пользователь задает только одно свое имя и один пароль.

В данном варианте на сервере должны быть добавлены пользователи операционной системы.

Если определен Windows Authentication Mode, то далее проверяется, имеет ли данный пользователь домена доступ к ресурсу SQL Server, если он имеет доступ, то выполняется попытка подключения с использованием имени пользователя и пароля, определенных для пользователя домена; если данный пользователь имеет права подключения к SQL Server, то подключение выполняется успешно, в противном случае пользователь получает сообщение о том, что данному пользователю не разрешено подключение к SQL Server.


Алгоритм проверки аутентификации пользователя в MS SQL Server.

Нравится

Поделиться

1 комментарий

Замечу, что по умолчанию, после установки MS SQL Server используется Windows-авторизация, которую потом нужно изменить на смешанную. При этом необходимо перезапустить службу MS SQL Server.

Котенко Александр.

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