26.04.2011, 09:31 | #1 |
Участник
|
Добрый день! Перейдя на SQL базу при работе с Navision, решили использовать это на максимум возможностей. Как вариант начали переводить часть отчетов на Report Server. И тут столкнулись с такой проблемой, необходимо выводить в отчете поля типа Option (Nav), в SQL эти поля хранятся как int. Где же найти связку между int (SQL) и option (NAV)?
|
|
26.04.2011, 11:57 | #2 |
Участник
|
Если сразу передать значение напрямую не получается, хотя должно, можно просто сконвертировать значение опции в целое:
"...Assume that Number is a numeric value and that Type denotes a field in the Purchase Header table. In the following statement, the system converts the option value into a number: Number := "Purchase Header".Type" А вообще значения опции идут по порядку: 0,1,2,3... |
|
26.04.2011, 13:07 | #3 |
Участник
|
Прошу прощения, толи я не совсем понял ваше предложение, толи вы не до конца поняли мою потребность.
Я пишу отчет на Report Server, где результатом select является значение "G/L Entry"."Bal. Account Type" (для примера). Мне необходимо чтобы на отчет выводились доступные значения из NAV (Фин. Счет,Клиент,Поставщик,Банк. Счет,ОС,МФ Партнер), но т.к. в SQL данное поле хранится как Int, то я получаю значения 0,1,2... Я как раз и ищу какую то связь между значениями из NAV и значениями из SQL. |
|
26.04.2011, 13:27 | #4 |
Участник
|
Думаю, вам нужно добавить доп. таблицу, в которой хранить соответствие между Int и Option для каждой используемой таблицы. По крайней мере, мы именно так делали.
|
|
26.04.2011, 16:56 | #5 |
Участник
|
Все OptionString + OptionCaption как и прочая информация NAV-полей) хранится в системной таблице Field. Можно программным путём универсальной функцией с помощью RecRef + FieldRef для любого поля достать оттуда в том числе и значения типа Option (и не надо никаких дополнительных таблиц):
Код: SampleTable и SampleField = таблица и поле таблицы, для которого надо получить значения типа Option; Name Тype Length OptionCaption Text 1024 OptionCaption := ''; CLEAR(FieldRef); RecordRef.OPEN(SampleTable); IF Field.GET(RecordRef.Number,SampleTable.FIELDNO(SampleField) AND (Field.Type = Field.Type::Option) THEN BEGIN FieldRef := RecordRef.FIELD(Field."No."); IF FieldRef.OPTIONCAPTION <> '' THEN BEGIN OptionCaption := COPYSTR(FieldRef.OPTIONCAPTION, 1, MAXSTRLEN(OptionCaption)); END; END; RecordRef.CLOSE(); Тем более перед обращением к таблице Field надо НАВ'у подставить через GLOBALLANGUAGE соответствующий язык для OptionCaption. |
|
27.04.2011, 09:09 | #6 |
Участник
|
Цитата:
Вот как нечто подобное на SQL сделать: что-то вроде хранимой процедуры, которая Вам и возвращает из НАВ'a OptionCaption из таблицы Field?
Тем более перед обращением к таблице Field надо НАВ'у подставить через GLOBALLANGUAGE соответствующий язык для OptionCaption. |
|
27.04.2011, 13:44 | #7 |
Участник
|
Цитата:
Сообщение от Thrice
Прошу прощения, толи я не совсем понял ваше предложение, толи вы не до конца поняли мою потребность.
Я пишу отчет на Report Server, где результатом select является значение "G/L Entry"."Bal. Account Type" (для примера). Мне необходимо чтобы на отчет выводились доступные значения из NAV (Фин. Счет,Клиент,Поставщик,Банк. Счет,ОС,МФ Партнер), но т.к. в SQL данное поле хранится как Int, то я получаю значения 0,1,2... Я как раз и ищу какую то связь между значениями из NAV и значениями из SQL. |
|
27.04.2011, 15:34 | #8 |
Участник
|
Цитата:
Всем спасибо за подсказки, будем выкручиваться как нибудь по тругому. |
|
27.04.2011, 17:22 | #9 |
Участник
|
|
|
28.04.2011, 07:33 | #10 |
Участник
|
А почему нельзя выгрузить записи из виртуальной таблицы в обычную (с фильтром по Option)? Я так понимаю, все равно потребуется предварительная обработка, т.к. OptionCaption вернет значения, разделенные запятыми. А по условиям задачи нам следует преобразовать 0 - в первое значение из списка, 1 - во второе и т.д.
Поэтому, думаю, есть смысл (если в будущем будете активно использовать SQL) отдельную таблицу и настроить периодическую синхронизацию с метаданными Навижна. А затем из SQL подключать эту таблицу в запросе. |
|
28.04.2011, 16:48 | #11 |
Участник
|
Цитата:
Сообщение от GRIZZLY
А почему нельзя выгрузить записи из виртуальной таблицы в обычную (с фильтром по Option)? Я так понимаю, все равно потребуется предварительная обработка, т.к. OptionCaption вернет значения, разделенные запятыми. А по условиям задачи нам следует преобразовать 0 - в первое значение из списка, 1 - во второе и т.д.
Поэтому, думаю, есть смысл (если в будущем будете активно использовать SQL) отдельную таблицу и настроить периодическую синхронизацию с метаданными Навижна. А затем из SQL подключать эту таблицу в запросе. Только очень интересно, как же разработчикам удалось так хорошо запрятать это данные в БД, что их никто так и не сумел от туда выудить? |
|