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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.11.2009, 01:56   #1  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Пробелы теряются в текстовом поле
Привет знатоки,

Столкнулся с простой, но хитрой проблемой:
1. Создаю новую таблицу.
2. Добавляю одно текстовое поле (не важно с EDT или без).
3. Открываю в табличном браузере, создаю новую запись и вписываю N-пробелов в текстовое поле.
4. Сохраняю строку. Пробелы вижу.
5. Закрываю браузер.
6. Открываю браузер, текстовое поле пустое - Пробелов НЕТ!

Кто-то знает, как сохранить пробелы в строком поле?

Заранее спасибо.
Старый 04.11.2009, 08:12   #2  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Есть предложение, посмотреть, что в базе через клиента СУБД.
Есть ли пробелы? Браузер не показатель.
И ещё создать job. Смотреть чё туда уходит.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 04.11.2009, 11:08   #3  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Я это сразу проверил. В базу данных пишется значение без пробелов, поэтому после повторного чтения записи из БД (при открытии табличного браузера), пробелы отсутствуют.
Думал может свойство Adjustment поможет, менял на Left и Right, но результат тот же.

Есть ещё у кого-то идеи?
Старый 04.11.2009, 11:27   #4  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Кстати, это проблема существует в любом строковом поле Аксапты. Всегда убираются крайние пробелы.
Кто-нибудь знает пример таблицы со строковым полем в стандартной Аксапте, где можно сохранять крайние пробелы?
Старый 04.11.2009, 11:57   #5  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Это не проблема
Это фича

Если желаете хранить полноценный текст с пробелами etc. вместо поля типа String используйте тип Container. Например, что то вроде EDT Addressing.

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

X++:
static void Job5552(Args _args)
{
    Table table;
    str     _str = "aaabbbcc     \r";
    ;

    ttsbegin;
    select forupdate table
        where table.RecId == 76446763;

    table.Addressing = _str;
    table.update();
    ttscommit;
}
Хотя коряво как-то.
Кстати, а зачем пробелы понадобились?
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню

Последний раз редактировалось Russland; 04.11.2009 в 12:17.
Старый 04.11.2009, 12:29   #6  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Спасибо за вариант. Но не совсем то. Будем искать..

Мне сохранять пробелы нужно аж в нескольких сценариях в моей текущей задаче,
1) у меня есть таблица с конвертацией специальных символом текста в HTML, к примеру « » пробел в « » и т.п. (см. для примера http://www.utexas.edu/learn/html/spchar.html ), поэтому мне нужно чтобы пробел сохранялся.
2) у меня есть таблица которая используется для динамического формирования имени номенклатуры, там много разных полей, к примеру подгружать строку из указанного метода и т.п., одни из которых строковые поля, где указывается точный текст который должен будет добавляться к имени номенклатуры, и нужно чтобы этот текст сохранялся в точно такой же форме, в какой пользователь его ввёл (где по бокам могут быть и пробелы).
Старый 04.11.2009, 12:47   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от erudit Посмотреть сообщение
одни из которых строковые поля, где указывается точный текст который должен будет добавляться к имени номенклатуры, и нужно чтобы этот текст сохранялся в точно такой же форме, в какой пользователь его ввёл (где по бокам могут быть и пробелы).
Может просто этот текст в кавычки брать?

table.field = " ' <еще пробелы> ' ";
Старый 04.11.2009, 13:05   #8  
erudit is offline
erudit
Участник
 
36 / 52 (2) ++++
Регистрация: 19.03.2003
Адрес: Украина
Если брать в кавычки, то их нужно потом убирать, а как узнать, что это кавычки для пробелов или настоящие, которые пользователь хочет видеть в тексте..

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

Всем спасибо за отзывы и попытку помочь!
Старый 04.11.2009, 14:17   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от erudit Посмотреть сообщение
Если брать в кавычки, то их нужно потом убирать, а как узнать, что это кавычки для пробелов или настоящие, которые пользователь хочет видеть в тексте..
Ну так сделай не кавычки, а какой-то ASCII код, который нельзя ввести с клавиатуры.
Пользователю его не показывай, а добавляй и убирай при работе с базой
Старый 04.11.2009, 14:39   #10  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
собственно я и предлагал терминировать строку спецсимволом, а при обработке строки просто его отбрасывать.
Не айс, конечно.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 05.11.2009, 08:45   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от erudit Посмотреть сообщение
Если брать в кавычки, то их нужно потом убирать, а как узнать, что это кавычки для пробелов или настоящие, которые пользователь хочет видеть в тексте
Так добавляйте (и соответственно убирайте) свои 'кавычки для пробелов' всегда, а не только когда есть пробелы. А делать это удобно в edit методе, чтобы для пользователя это было прозрачно.

P.S. Кстати, если Adjustment = Righ, то отсекаются пробелы не с конца, а с начала строки (что понятно). Так что в общем случае, только конечным спец.символом не обойтись
Старый 07.04.2011, 12:02   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вот тоже понадобилось вводить концевые пробелы. Решение заключается в том, чтобы использовать, так называемый, "неразрывный пробел".

Неразрывный пробел визаульно выглядит как обычный пробел. Отличия заключаются в ASCII-коде который соответствует данному символу. Если "обычный" пробел имеет ASCII-код равный 32, то неразрывный пробел имеет ASCII-код равный 160. Как следствие, неразрывный пробел по другому интерпретируется и обрабатывается программной средой. В данном случае, подобные символы не удаляются при передаче серверу SQL, что, собственно, и требуется

Чтобы ввести неразрывный пробел необходимо нажать левую клавишу Alt и не отпуская ее набрать на альтернативной цифровой клавиатуре (клавиши с цифрами, расположенные в правой части клавиатуры) число 255. После чего отпустите клавишу Alt.

Решение подходит для любой версии Axapta.
За это сообщение автора поблагодарили: alex55 (1), kpoxa (1).
Старый 07.04.2011, 12:53   #13  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
ИМХО. Можно сделать edit-метод на таблице, в котором записывать в поле значение строки из edit-метода, добавив к нему два спец-символа по бокам (даже не обязательно запрещённые в строке), а при чтении брать значение из поля, убирая два крайних символа по бокам.
__________________
Михаил Андреев
https://www.amand.ru
За это сообщение автора поблагодарили: Владимир Максимов (5).
Старый 07.04.2011, 13:04   #14  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Владимир, а почему код ascii 160, а набирать нужно 255 ?
Старый 07.04.2011, 13:55   #15  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
ИМХО. Можно сделать edit-метод на таблице, в котором записывать в поле значение строки из edit-метода, добавив к нему два спец-символа по бокам (даже не обязательно запрещённые в строке), а при чтении брать значение из поля, убирая два крайних символа по бокам.
Использование неразрывного пробела не требует вообще никакой модификации кода.
Старый 07.04.2011, 13:56   #16  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Bober Посмотреть сообщение
Владимир, а почему код ascii 160, а набирать нужно 255 ?
Откуда я знаю? Так получается. Нужную комбинацию клавишь я искал методом "научного тыка"

Если смотреть в таблице символов Windows: кнопка Пуск \ Программы \ Стандартные \ Служебные (System Tools) \ Таблица символов

то ASCII-код надо заводить с ведущим нулем. Т.е. Alt + 0160

Последний раз редактировалось Владимир Максимов; 07.04.2011 в 14:10.
Старый 07.04.2011, 14:11   #17  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Bober Посмотреть сообщение
Владимир, а почему код ascii 160, а набирать нужно 255 ?
Насколько я понимаю, есть как минимум две кодировки ASCII: OEM (IBM) и ANSI (Windows). В первой неразрывный пробел имеет номер 255, во второй - 160.

Ну а дальше все просто:
Цитата:
Alt+Numpad: A method of entering characters by typing in the character’s decimal code with the Numeric Pad keys (Num Lock turned on). In Windows:
Alt+<xxx>, where xxx is the decimal value of a code point, generates an OEM-encoded character.
Alt+<0xxx>, where xxx is the decimal value of a code point, generates a Windows-encoded character.
Alt+<+>+<xxxx>, where xxxx is the hexadecimal Unicode code point, generates a Unicode-encoded (UTF-16) character.
http://msdn.microsoft.com/ru-ru/goglobal/bb964658.aspx

То есть, Alt+255=Alt+0160.

Если говорить об истории ASCII, то в исходной версии в ней было 7 бит (0-127). Затем IBM расширила ее до восьми бит. Ну а MS сделал в винде свою восьмибитную кодировку ANSI. То есть, первые 127 символов в обеих кодировках совпадают (но есть нюансы в отображении некоторых символов), различия появляются дальше.

Последний раз редактировалось oip; 07.04.2011 в 14:21. Причина: добавил про историю
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 07.04.2011, 14:14   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Использование неразрывного пробела не требует вообще никакой модификации кода.
В смысле? Вы предлагаете обучить пользователей вместо пробела нажимать Alt и ещё три кнопки?
Старый 07.04.2011, 14:22   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вы предлагаете обучить пользователей вместо пробела нажимать Alt и ещё три кнопки?
Необходимость сохранения концевого пробела - это очень исключительная ситуация. Как правило, связана со специфической программной обработкой некой настроечной информации. Т.е. доступ к этим данным имеет ну очень ограниченный круг пользователей. Поэтому не вижу проблемы обучить пользователя...
Старый 07.04.2011, 15:06   #20  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Необходимость сохранения концевого пробела - это очень исключительная ситуация. Как правило, связана со специфической программной обработкой некой настроечной информации. Т.е. доступ к этим данным имеет ну очень ограниченный круг пользователей. Поэтому не вижу проблемы обучить пользователя...
Даже в этом случае я бы использовал концевые видимые символы - просто удобнее

P.S. Делали подобную модификацию для выгрузки - там тоже нужны были концевые пробелы. Модификация несложная, но пользователю удобно и видно всё. Правда, мы концевые символы не скрывали, просто убирали их при использовании внутри системы.
__________________
Михаил Андреев
https://www.amand.ru
Теги
выравнивание, пробел

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Поле SalesId из SalesLine Eldar9x DAX: Программирование 20 10.06.2008 16:42
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38
вычисляемое поле ZhanR DAX: Программирование 8 28.09.2006 10:25
Создание feature key на поле формы tov DAX: Администрирование 11 30.06.2003 15:49

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

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

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