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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.06.2007, 18:27   #1  
Zuzaz is offline
Zuzaz
Участник
 
119 / 18 (1) ++
Регистрация: 22.09.2006
Цитата:
Сообщение от fialka Посмотреть сообщение
Есть значение зк1234567/1P1,
как получить с этого значения 1234567/1,
то есть обрезать вначале буквы и в конце буквы и всё что после них?
Как часто случается, это задание недостаточно формализовано. Без уточнения ряда вопросов по формату номера предлагать варианты бесполезно:
1) вначале всегда идут буквы ? их всегда две, как в примере, или может быть любое число?
2) между начальным и конечным набором букв цифры всегда идут со слешем, или могут быть только цифры ? Могут ли вместо слеша быть и другие знаки, например тире или точка?
3) количество знаков между первым и конечным набором букв всегда одинаково, или может быть любым?
3) в конечном наборе буква всегда одна, или их может быть две и больше ?
4) в конечном наборе всегда идут буквы и потом цифры, или могут быть другие варианты (например, только буквы;буквы, цифры и снова буквы) ? Сколько цифр может быть после последней буквы ?
5) и наконец ключевой вопрос: зачем нужно такое преобразование, какая исходная постановка задачи? Может быть, исходная задача решается другим, более простым способом ? Или может быть, исходная задача такова, что и ваш способ с преобразованием номера её не решит ?

Если подходить формально, решая задачу именно так, как она вами записана, то это так:
X++:
S2 = substr(S1,3,9)

Последний раз редактировалось Zuzaz; 28.06.2007 в 18:31.
Старый 28.06.2007, 18:37   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Zuzaz Посмотреть сообщение
5) и наконец ключевой вопрос: зачем нужно такое преобразование, какая исходная постановка задачи? Может быть, исходная задача решается другим, более простым способом ? Или может быть, исходная задача такова, что и ваш способ с преобразованием номера её не решит ?
я бы к этому совершенно справедливому списку добавил еще пару оргвопросов:

6) задача разовая или постоянная? (честно говоря, если постоянная, то тогда, как поется в одной бардовской песне, "просто дыбом волоса" от проектирования...)
7) можно ли решить ее вне Аксапты (например, в Excel'е) ?

Цитата:
Сообщение от fialka Посмотреть сообщение
А мне надо распилить получается нужно на две части, до буковки Р и после))
А во как еще мона :
X++:
    [strDO, strPOSLE] = str2con_ru('зк1234567/1P1', 'P');
P.S. А еще вот так:
X++:
{
    str str0, strDO, strPOSLE;
;
    [strDO, strPOSLE] = str2con_ru( 'зк1234567/1P1', 'P' );
    [str0 , strDO   ] = str2con_ru( strDO          , 'зк');

    info(strDO + ' ---  ' + strPOSLE);
}

Последний раз редактировалось Gustav; 29.06.2007 в 08:52. Причина: добавил второй фрагмент кода
Старый 29.06.2007, 09:10   #3  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
[quote=Gustav;142376]я бы к этому совершенно справедливому списку добавил еще пару оргвопросов:

6) задача разовая или постоянная? (честно говоря, если постоянная, то тогда, как поется в одной бардовской песне, "просто дыбом волоса" от проектирования...)
7) можно ли решить ее вне Аксапты (например, в Excel'е) ?

quote]
задача постояная и решится должна только в АХ..
Старый 29.06.2007, 09:09   #4  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Zuzaz Посмотреть сообщение
Как часто случается, это задание недостаточно формализовано. Без уточнения ряда вопросов по формату номера предлагать варианты бесполезно:
1) вначале всегда идут буквы ? их всегда две, как в примере, или может быть любое число?
2) между начальным и конечным набором букв цифры всегда идут со слешем, или могут быть только цифры ? Могут ли вместо слеша быть и другие знаки, например тире или точка?
3) количество знаков между первым и конечным набором букв всегда одинаково, или может быть любым?
3) в конечном наборе буква всегда одна, или их может быть две и больше ?
4) в конечном наборе всегда идут буквы и потом цифры, или могут быть другие варианты (например, только буквы;буквы, цифры и снова буквы) ? Сколько цифр может быть после последней буквы ?
5) и наконец ключевой вопрос: зачем нужно такое преобразование, какая исходная постановка задачи? Может быть, исходная задача решается другим, более простым способом ? Или может быть, исходная задача такова, что и ваш способ с преобразованием номера её не решит ?

Если подходить формально, решая задачу именно так, как она вами записана, то это так:

X++:
S2 = substr(S1,3,9)
1. вначале всегда идут буквы, неизвестно сколько их.
2. Далее идут цифры (тоже непонятно сколько ) разделение слеш и ещё несколько цифр... вот в первый заход их нужно получить.
3. Потом идёт буква Р после неё цифры. Второе значение у меня должно как раз ему равнятся...
то есть если первоначально было ППРРВ12345/45Р5,
то должно получится два значения: первое 12345/45 и второе 5
Старый 29.06.2007, 09:16   #5  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от fialka Посмотреть сообщение
то есть если первоначально было ППРРВ12345/45Р5,
то должно получится два значения: первое 12345/45 и второе 5
В таком случае нужно еще дописать, к указанному мной выше
X++:
s1 = strkeep(s1, '1234567890/');
И все долно получиться.

P.S. Согласен с Gustav, делить строку с помощью str2con_RU более оптимальный вариант
Старый 29.06.2007, 09:21   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
В таком случае нужно еще дописать, к указанному мной выше
X++:
s1 = strkeep(s1, '1234567890/');
И все долно получиться.
именно! уже тоже написал, поэтому опубликую:
X++:
[strDO, strPOSLE] = str2con_ru( 'зк1234567/1P1', 'P' );
strDO = strkeep( strDO, '1234567890/');
Старый 29.06.2007, 09:34   #7  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Gustav Посмотреть сообщение
именно! уже тоже написал, поэтому опубликую:
X++:
[strDO, strPOSLE] = str2con_ru( 'зк1234567/1P1', 'P' );
strDO = strkeep( strDO, '1234567890/');
Спасибо.
а ещё маленький вопрос как впереди первого значения поставить "*" ?
то есть формируется у меня номер например накладной..
X++:
modifSalesPickingListId = strRem(SalesPickingListJournalTable.SalesId, 'зсчЗКП'); //обрезаем символы заказа и закупки
          modifSalesPickingListId = modifSalesPickingListId + '/' + pickingId;
должно в итоге получится *123456/1.
мне казалось , J - это '*', или я что-то путаю?

Последний раз редактировалось fialka; 29.06.2007 в 09:39.
Старый 29.06.2007, 09:42   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от fialka Посмотреть сообщение
а ещё маленький вопрос как впереди первого значения поставить "*" ?
так?
X++:
strDO = '*' + strDO;
Старый 29.06.2007, 09:44   #9  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Gustav Посмотреть сообщение
так?
X++:
strDO = '*' + strDO;
не ну это понятно..
просто как-то сталкивалась в коде на такой комментарий...
//префиксы /J - это '*', а префикс /O - это '/'
Хотела бы узнать почему именно т ак, а не просто в лоб символы указать?
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как правильно получить значение с компонента формы Daido DAX: Программирование 5 05.11.2007 17:37
WebComboBox - как получить выбранное значение? egorych DAX: Программирование 8 17.10.2007 22:44
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Как получить значение поля Datasource на динамически созданной форме? storer DAX: Программирование 2 14.11.2003 16:41
получить значение из SysQueryForm Дмитрий DAX: Программирование 4 16.08.2002 16:29

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

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

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