19.08.2021, 09:41 | #1 |
Участник
|
AX09 как вставить символ перенос строки в поле типа Memo из обозревателя таблиц
Привет.
Есть форма в которой есть поля с типом EDT Description, имеет тип StringSize = Memo. При определенных условиях данное поле доступно для редактирования из формы, и соответственно в него можно писать тест + делать переводы строки. Например: "AAAA BBB CCCCC" Если открыть данное поле в обозревателе таблиц то данное поле имеет вид: "AAAABBBCCCCC" Т.е. в нем не отображаются переводы строк оно и понятно т.к. это обозреватель таблиц. Вопрос как через обозреватель можно записать новый текст с переводом строк? Например хочу изменить текст: "DDDD EEE FFFFF" Если просто создать такой текст в блокноте скопировать и вставить через обозреватель то вставка произойдет только первой строки "DDDD". Если скопировать текст из обозревателя где уже присуствуют скрытые символы перевода строк, где я писал выше, например "AAAABBBCCCCC". И вставить в обозреватель снова только в другую запись, то вставка произойдет только первой строки "AAAA". На лицо что ОС как то обрабатывает символы в буфере обмена, когда я копирую из обозревателя. Заменяя "свои" символы перевода строки на стандартные. Подскажите, может как то в notepad++ или еще где можно написать стандартный текст с переводом строк и потом как то заменить переводы строк на какой то другой символ? типа '\r\n' на какой то другой символ? Последний раз редактировалось oleggy; 19.08.2021 в 09:49. |
|
19.08.2021, 10:13 | #2 |
Участник
|
Цитата:
Аксапта хранит строку как есть. При сохранении в базу отрезет последние пробелы. А вот показывает на экране сохраненное значение в соответствии со свойством DisplayHeight в свойстве типа. браузер таблиц - это грид. грид по умолчанию показывает DisplayHeight = 1. таким образом в гриде вы видите первую строку "многострочной" строки (но хранится она полностью) это касается и буфера обмена. выделите многострочный текст кнопкой Ctrl+A - скопируете в буфер весь текст. выделите многострочный текст в однострочном гриде мышкой - скопируете в буфер первую строку. в X++ коде многострочный текст всегда остается многострочным, а переводом строк (как и в остальной Java) является '\n'. Причем Java движок внутре преобразует виндовые '\r\n' в '\n'. в общем, разделите в своей голове хранение и отображение на экран. и попробуйте сформулировать вопрос еще раз. ответ сразу станет очевиден. Последний раз редактировалось mazzy; 19.08.2021 в 10:17. |
|
19.08.2021, 10:38 | #3 |
Участник
|
Цитата:
Вместо того что бы получать дали бы дельный совет. Вы же на вопрос то не ответили! Цитата:
Цитата:
Если его же вставлю в блокнот то вставится весь без перевода строк. Повторю. Копируется весь текст. Если посмотреть содержимое поля из SQL то хранится оно так: "AAAACRLF BBBCRLF CCCCC" Последний раз редактировалось oleggy; 19.08.2021 в 10:42. |
|
19.08.2021, 11:05 | #4 |
Участник
|
так вы хотите понять ответ или нет?
Цитата:
Цитата:
отличный прогресс. Насчет всех символов или одной строки в однострочном гриде - см. разницу между Auto и 1 в свойстве DisplayHeight. Цитата:
Цитата:
а наружу снова возвращает в набор разделителей, который принят в данной ОС. в виндах, в линуксе и на маке внешний текст будет разным. Вам стоит почитать про разделитель строк в строковых переменных в Java применительно к кроссплатформенности Java. Были жаркие холивары по этому поводу. как именно хранится в SQL особой разницы для Аксапты нет. внутри Аксапты разделитель с огромной вероятностью будет \n, не \r\n и не \r (есть тонкости с прямыми вызовами .net из Аксапты) аксапта отображает на экране многострочные строки в соответствии со свойством DisplayHeight |
|
19.08.2021, 11:20 | #5 |
Участник
|
Цитата:
Что бы вставка была не только первой строки но и всех остальных и что бы не менять свойство обозревателя таблиц DisplayHeight (какое у него стоит по умолчанию то пусть и остается...). Последний раз редактировалось oleggy; 19.08.2021 в 11:26. |
|
19.08.2021, 11:29 | #6 |
Участник
|
|
|
19.08.2021, 11:40 | #7 |
Участник
|
Цитата:
Во-первых, не "вставить", а "отобразить". Бггг Во-вторых, впендюривать поле именно в грид невзирая на то, как с этим будут работать пользователи - тупиковый путь. Правильный вопрос: как отобразить многострочный текст пользователю, чтобы пользователю было удобно с ним работать. ответ на правильный вопрос: посмотрите как это делается сейчас в стандартном функционале. например, журналы, вкладка история. Вставить многострочный в грид в Аксапте можно: = либо изменив свойство DisplayHeight (тогда каждая строка грида станет высокой), = либо смирившись с искажением многострочной строки. оставив поведение по-умолчанию или создав свой display метод со своими искажениями (при этом потеряв поиск по полю) Последний раз редактировалось mazzy; 19.08.2021 в 11:44. |
|
19.08.2021, 11:44 | #8 |
Banned
|
Offtop: жизнь и масса иностранных языков научила, что человеческий язык появился для того, чтобы структурированно передавать информацию. Времена Сократа давно прошли. Современное предложение должно быть максимально кратким, простым, написанным на доступном большинству адресатов языке и по возможности исключать двойное толкование. Масса людей, однако, считает что текст должен быть интересен в первую очередь писателю, а не читателю, позволяя зачарованно упиваться собственным интеллектуальным превосходством.
|
|
|
За это сообщение автора поблагодарили: mazzy (100). |
19.08.2021, 12:04 | #9 |
Участник
|
А знаете как заткнуть этого надменного хама mazzy?
ответьте на вопрос лучше. |
|
19.08.2021, 13:54 | #10 |
Banned
|
По существу ответить не могу:
- вопрос относится к неинтересной, устаревшей системе 12-ти летней давности; - пользователь никогда не будет работать с браузером, следовательно IT-проблема создана IT-техником, и им же и должна быть решена: -- если речь идет о миграции данных в AX2009, многострочные memo импортируются через мастер Excel-импорта; -- если речь идет о тестировании, то в AX2009 создание специализированной формы для ввода занимает лишь несколько минут. |
|
|
За это сообщение автора поблагодарили: SRF (1). |
19.08.2021, 13:59 | #11 |
Участник
|
Например, можно так, модификация метода task формы SysTableBrowser, делаем контрол перед вставкой многострочным, а затем возвращаем обратно.
X++: FormStringControl stringControl; Common cursor; str value; .... else if (p1 == 772) { if (cur is FormStringControl) { this.lock(); stringControl = cur; stringControl.multiLine(true); ret = super(p1); value = stringControl.text(); stringControl.multiLine(false); cursor = ds_Ds.cursor(); cursor.(stringControl.dataField()) = value; stringControl.update(); this.unLock(); } else { ret = super(p1); } } Цитата:
браузер таблиц - это грид.
грид по умолчанию показывает DisplayHeight = 1. X++: if (dictField.baseType() == Types::String ||
dictField.baseType() == Types::RString ||
dictField.baseType() == Types::VarString)
{
formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldId, j);
formBuildStringControl.displayHeightMode(0);
formBuildStringControl.displayHeightValue(1);
formBuildStringControl.label(dictField.name());
formBuildStringControl.helpText(dictField.label());
formBuildStringControl.allowEdit(allowControlEdit);
}
__________________
Sergey Nefedov Последний раз редактировалось SRF; 19.08.2021 в 14:02. |
|
|
За это сообщение автора поблагодарили: mazzy (2), alex55 (1). |
19.08.2021, 14:22 | #12 |
Участник
|
угу.
Цитата:
Цитата:
хоть в вопросе и написан "обозреватель таблиц", но я сильно сомневаюсь, что автору нужно сделать именно в обозревателе. впрочем, каков вопрос, таков и ответ. согласен. |
|
23.08.2021, 07:08 | #13 |
Участник
|
Выходит через обозреватель никак.
Данные правки делаются не часто соответственно проще сделать вне аксапты. Да, делаются IT специалистом не пользователем. Через тот же SQL можно сделать. Последний раз редактировалось oleggy; 23.08.2021 в 07:10. |
|
23.08.2021, 09:51 | #14 |
Участник
|
Для таких случаев делают джобы в Axapta.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|