AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.08.2010, 11:16   #1  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Нет. Не нужно так поступать.

Просто используйте вместо типа str, какой-нибудь расширенный тип данных, ни или на крайний случай пишите "str 30", т.е еграничте длину типа
В том интересном приёме обрабатывается контейнер, поэтому строку со списком я перевожу в контейнер, и получаю вот такой код:

X++:
inventLocationRange = str2con_RU(inventLocationId, ',');
while select custInvoiceTrans where custInvoiceTrans.InvoiceDate == 01\04\2010
join InventDim
        where inventDim.inventDimId == CustInvoiceTrans.InventDimId &&
              #sqlIn(inventDim.InventLocationId,inventLocationRange)
Получается, что компилятор не видит, что контейнер то используется в макросе, а не непосредственно в запросе.
Старый 13.08.2010, 11:48   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
"А, пожалуйста!" (с) "О чём говорят мужчины"
А если не создавать отдельную переменную-контейнер и вставить вызов str2con_RU прямо в параметр макроса? У меня на 3.0 SP4 прокатило:
X++:
static void test_SQL_Imitation_2(Args _args)
{
    #macrolib.SQL_Imitation

    Dialog          dialog;
    DialogField     dialogField;
    InventLocation  inventLocation;
    ;

    dialog = new Dialog('Тест имитации SQL IN');
    dialogField = dialog.addFieldValue(Types::String, 
                                       'СКЛАД1,СКЛАД2,СКЛАДN',
                                       'Введите значения через запятую (не более 10)');
    if (dialog.run())
    {
        while select inventLocation
            where #sqlIn( inventLocation.InventLocationId, str2con_RU(dialogField.value(),',') )
        {
            info (inventLocation.InventLocationId);
        }
    }
}
Старый 13.08.2010, 11:59   #3  
Prophetic is offline
Prophetic
Участник
 
113 / 15 (1) ++
Регистрация: 08.12.2009
Цитата:
Сообщение от Gustav Посмотреть сообщение
"А, пожалуйста!" (с) "О чём говорят мужчины"
А если не создавать отдельную переменную-контейнер и вставить вызов str2con_RU прямо в параметр макроса? У меня на 3.0 SP4 прокатило:
X++:
static void test_SQL_Imitation_2(Args _args)
{
    #macrolib.SQL_Imitation

    Dialog          dialog;
    DialogField     dialogField;
    InventLocation  inventLocation;
    ;

    dialog = new Dialog('Тест имитации SQL IN');
    dialogField = dialog.addFieldValue(Types::String, 
                                       'СКЛАД1,СКЛАД2,СКЛАДN',
                                       'Введите значения через запятую (не более 10)');
    if (dialog.run())
    {
        while select inventLocation
            where #sqlIn( inventLocation.InventLocationId, str2con_RU(dialogField.value(),',') )
        {
            info (inventLocation.InventLocationId);
        }
    }
}
Действительно, сработало. Огромнейшая благодарность.
Хотя неясно, почему компилятор не проверил тип возвращаемого значения.
Теги
select, where

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
QueryBuildRange в select.. where propeller DAX: Программирование 11 30.09.2008 13:35
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Ошибка при старте АОСа zZ_TOP_Zz DAX: Администрирование 4 11.09.2008 16:08
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
select * where ... Perc DAX: Программирование 10 06.07.2005 12:31

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:32.