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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.08.2021, 09:41   #1  
oleggy is offline
oleggy
Участник
 
270 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oleggy Посмотреть сообщение
Если просто создать такой текст в блокноте скопировать и вставить через обозреватель то вставка произойдет только первой строки "DDDD".
вам стоит четко разделить в голове два понятия: хранение и отображение.

Аксапта хранит строку как есть. При сохранении в базу отрезет последние пробелы.
А вот показывает на экране сохраненное значение в соответствии со свойством DisplayHeight в свойстве типа.

браузер таблиц - это грид.
грид по умолчанию показывает DisplayHeight = 1.
таким образом в гриде вы видите первую строку "многострочной" строки (но хранится она полностью)

это касается и буфера обмена.
выделите многострочный текст кнопкой Ctrl+A - скопируете в буфер весь текст.
выделите многострочный текст в однострочном гриде мышкой - скопируете в буфер первую строку.

в X++ коде многострочный текст всегда остается многострочным,
а переводом строк (как и в остальной Java) является '\n'.
Причем Java движок внутре преобразует виндовые '\r\n' в '\n'.

в общем, разделите в своей голове хранение и отображение на экран.
и попробуйте сформулировать вопрос еще раз. ответ сразу станет очевиден.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 19.08.2021 в 10:17.
Старый 19.08.2021, 10:38   #3  
oleggy is offline
oleggy
Участник
 
270 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от mazzy Посмотреть сообщение
в общем, разделите в своей голове хранение и отображение на экран.
и попробуйте сформулировать вопрос еще раз. ответ сразу станет очевиден.
Зря вы на меня набросились. Зачем это? Я описал достаточно подробно что бы любой мог понять тему.
Вместо того что бы получать дали бы дельный совет. Вы же на вопрос то не ответили!

Цитата:
Сообщение от mazzy Посмотреть сообщение
браузер таблиц - это грид.
грид по умолчанию показывает DisplayHeight = 1.
таким образом в гриде вы видите первую строку "многострочной" строки (но хранится она полностью)
Неправда, там отображается весь текст а не только первая строка. Там символов перевода строки нет попросту. Но отображается весь текст!

Цитата:
Сообщение от mazzy Посмотреть сообщение
выделите многострочный текст в однострочном гриде мышкой - скопируете в буфер первую строку.
И если я в обозревателе скопирую этот многострочный текст из поля и вставлю его скажем в notepad++ то вставится текст с переводами строк.
Если его же вставлю в блокнот то вставится весь без перевода строк.
Повторю. Копируется весь текст.

Если посмотреть содержимое поля из SQL то хранится оно так:

"AAAACRLF
BBBCRLF
CCCCC"

Последний раз редактировалось oleggy; 19.08.2021 в 10:42.
Старый 19.08.2021, 11:05   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oleggy Посмотреть сообщение
Зря вы на меня набросились. Зачем это?
так вы хотите понять ответ или нет?

Цитата:
Сообщение от oleggy Посмотреть сообщение
Вместо того что бы получать дали бы дельный совет. Вы же на вопрос то не ответили!
Бгггг. Как скажете.

Цитата:
Сообщение от oleggy Посмотреть сообщение
Неправда, там отображается весь текст а не только первая строка. Там символов перевода строки нет попросту. Но отображается весь текст!
отображается - это правильное слово!
отличный прогресс.

Насчет всех символов или одной строки в однострочном гриде - см. разницу между Auto и 1 в свойстве DisplayHeight.

Цитата:
Сообщение от oleggy Посмотреть сообщение
И если я в обозревателе скопирую этот многострочный текст из поля и вставлю его скажем в notepad++ то вставится текст с переводами строк.
Если его же вставлю в блокнот то вставится весь без перевода строк.
Повторю. Копируется весь текст.
дык, notepad++ и блокнот также отображают по-разному. А хранят одинаково

Цитата:
Сообщение от oleggy Посмотреть сообщение
Если посмотреть содержимое поля из SQL то хранится оно так:

"AAAACRLF
BBBCRLF
CCCCC"
Праально. Потому что Java преобразует \r\n в \n "внутре"!
а наружу снова возвращает в набор разделителей, который принят в данной ОС. в виндах, в линуксе и на маке внешний текст будет разным. Вам стоит почитать про разделитель строк в строковых переменных в Java применительно к кроссплатформенности Java. Были жаркие холивары по этому поводу.

как именно хранится в SQL особой разницы для Аксапты нет.
внутри Аксапты разделитель с огромной вероятностью будет \n, не \r\n и не \r (есть тонкости с прямыми вызовами .net из Аксапты)
аксапта отображает на экране многострочные строки в соответствии со свойством DisplayHeight
__________________
полезное на axForum, github, vk, coub.
Старый 19.08.2021, 11:20   #5  
oleggy is offline
oleggy
Участник
 
270 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от mazzy Посмотреть сообщение
Цитата:
Сообщение от oleggy
Вместо того что бы получать дали бы дельный совет. Вы же на вопрос то не ответили!
Бгггг. Как скажете.
Но вопрос то был как вставить в обозреватель таблицы многострочный текст из винды.
Что бы вставка была не только первой строки но и всех остальных и что бы не менять свойство обозревателя таблиц DisplayHeight (какое у него стоит по умолчанию то пусть и остается...).

Последний раз редактировалось oleggy; 19.08.2021 в 11:26.
Старый 19.08.2021, 11:29   #6  
oleggy is offline
oleggy
Участник
 
270 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Цитата:
Сообщение от mazzy Посмотреть сообщение
вам стоит четко разделить в голове два понятия: хранение и отображение.
и кстати я нигде в теме не путал эти два понятия. я с самого начала писал отображается.
Вы меня с кем то перепутали.
Старый 19.08.2021, 11:40   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oleggy Посмотреть сообщение
Но вопрос то был как вставить в обозреватель таблицы многострочный текст из винды.
Опять же, совершенно бесполезный вопрос.
Во-первых, не "вставить", а "отобразить". Бггг
Во-вторых, впендюривать поле именно в грид невзирая на то, как с этим будут работать пользователи - тупиковый путь.

Правильный вопрос: как отобразить многострочный текст пользователю, чтобы пользователю было удобно с ним работать.

ответ на правильный вопрос: посмотрите как это делается сейчас в стандартном функционале. например, журналы, вкладка история.

Нажмите на изображение для увеличения
Название: Capture.PNG
Просмотров: 31
Размер:	114.2 Кб
ID:	13216

Вставить многострочный в грид в Аксапте можно:
= либо изменив свойство DisplayHeight (тогда каждая строка грида станет высокой),
= либо смирившись с искажением многострочной строки. оставив поведение по-умолчанию или создав свой display метод со своими искажениями (при этом потеряв поиск по полю)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 19.08.2021 в 11:44.
Старый 19.08.2021, 11:44   #8  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Offtop: жизнь и масса иностранных языков научила, что человеческий язык появился для того, чтобы структурированно передавать информацию. Времена Сократа давно прошли. Современное предложение должно быть максимально кратким, простым, написанным на доступном большинству адресатов языке и по возможности исключать двойное толкование. Масса людей, однако, считает что текст должен быть интересен в первую очередь писателю, а не читателю, позволяя зачарованно упиваться собственным интеллектуальным превосходством.
За это сообщение автора поблагодарили: mazzy (100).
Старый 19.08.2021, 12:04   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
А знаете как заткнуть этого надменного хама mazzy?

ответьте на вопрос лучше.
__________________
полезное на axForum, github, vk, coub.
Старый 19.08.2021, 13:54   #10  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
По существу ответить не могу:
- вопрос относится к неинтересной, устаревшей системе 12-ти летней давности;
- пользователь никогда не будет работать с браузером, следовательно IT-проблема создана IT-техником, и им же и должна быть решена:
-- если речь идет о миграции данных в AX2009, многострочные memo импортируются через мастер Excel-импорта;
-- если речь идет о тестировании, то в AX2009 создание специализированной формы для ввода занимает лишь несколько минут.
За это сообщение автора поблагодарили: SRF (1).
Старый 19.08.2021, 13:59   #11  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Например, можно так, модификация метода 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.
Это не совсем так, грид по умолчанию показывает скорее всего maximum из всех displayheight контролов в него входящих(я не проверял, но кажется что норм), т.к. если вы просто поместите на грид в обычной форме контрол с displayHeight скажем 2 строки, то грид будет двустрочным, просто для браузера табличек это отключается, посмотрите код в классе SysTableBrowser\addField

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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от SRF Посмотреть сообщение
В целом альтернатива - многострочный контрол
угу.

Цитата:
Сообщение от SRF Посмотреть сообщение
Это не совсем так, грид по умолчанию показывает скорее всего maximum из всех displayheight контролов в него входящих(я не проверял, но кажется что норм), т.к.
угу. снова возвращаемся к displayheight = 1/Auto у контрола и содержащего его контрола.

Цитата:
Сообщение от SRF Посмотреть сообщение
просто для браузера табличек это отключается, посмотрите код в классе SysTableBrowser\addField
угу.
хоть в вопросе и написан "обозреватель таблиц", но я сильно сомневаюсь, что автору нужно сделать именно в обозревателе.

впрочем, каков вопрос, таков и ответ. согласен.
__________________
полезное на axForum, github, vk, coub.
Старый 23.08.2021, 07:08   #13  
oleggy is offline
oleggy
Участник
 
270 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Выходит через обозреватель никак.
Данные правки делаются не часто соответственно проще сделать вне аксапты. Да, делаются IT специалистом не пользователем.
Через тот же SQL можно сделать.

Последний раз редактировалось oleggy; 23.08.2021 в 07:10.
Старый 23.08.2021, 09:51   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от oleggy Посмотреть сообщение
Выходит через обозреватель никак.
Данные правки делаются не часто соответственно проще сделать вне аксапты. Да, делаются IT специалистом не пользователем.
Через тот же SQL можно сделать.
Для таких случаев делают джобы в Axapta.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
В дебагере не виден символ переноса строки Atani DAX: Программирование 0 14.03.2006 14:18
Строки журнала другого типа DreamCreator DAX: Программирование 0 16.03.2005 12:36
Перебор всех таблиц, имеющих поле определенного типа AKIS-Falcon DAX: Программирование 8 11.02.2005 17:07
Почему в InventJournalTrans поле linenum вещественного типа?! ATimTim DAX: Программирование 7 17.06.2004 17:35
Поле в Grid типа Window Андре DAX: Программирование 13 18.12.2003 18:22
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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