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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.06.2007, 09:09   #1  
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   #2  
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   #3  
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   #4  
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   #5  
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   #6  
fialka is offline
fialka
Участник
 
347 / 16 (1) ++
Регистрация: 05.10.2006
Адрес: Екатеринбург
Цитата:
Сообщение от Gustav Посмотреть сообщение
так?
X++:
strDO = '*' + strDO;
не ну это понятно..
просто как-то сталкивалась в коде на такой комментарий...
//префиксы /J - это '*', а префикс /O - это '/'
Хотела бы узнать почему именно т ак, а не просто в лоб символы указать?
Старый 29.06.2007, 10:45   #7  
Zuzaz is offline
Zuzaz
Участник
 
119 / 18 (1) ++
Регистрация: 22.09.2006
Цитата:
Сообщение от fialka Посмотреть сообщение
не ну это понятно..
просто как-то сталкивалась в коде на такой комментарий...
//префиксы /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, время: 04:45.