|  24.04.2012, 16:34 | #1 | 
| Участник | Значение в ячейке Excel 
			
			Здравствуйте уважаемые участники форума! Сразу к вопросу: Формирую отчёт в Excel с помощью буфера и временной таблицы. Одно из полей таблицы содержит текст проводки. Текст проводок во всех строках практически одинаков, только вот последние 3 строки "ведут себя не корректно" - надпись растягивается по всем следующим столбцам, и создается чувство что в тексте есть какой то символ который заставляет выводить данные из следующих полей с новой строки! Кто чем может помочь??? Буду очень благодарен, а то уже не один день пытаюсь решить этот вопрос! | 
|  | 
|  24.04.2012, 16:54 | #2 | 
| Участник | 
			
			На всякий случай приведу конец строки: "от 01.11.10 за период с 26.10.2011-25.11.2011" После этого Excel начинает выводить значение из следующего поля с новой строки! | 
|  | 
|  24.04.2012, 17:21 | #3 | 
| NavAx | 
			
			Проверьте строку на спецсимволы, вероятно в конце строки есть ".
		 | 
|  | |
| За это сообщение автора поблагодарили: JuniorAx (1). | |
|  25.04.2012, 10:19 | #4 | 
| Участник | 
			
			Причём когда в Windows XP открываешь форму проводок и ищешь записи с такими символами (возврат каретки, горизонтальная табуляция и т.д.) в тексте проводки, то эти символы хорошо заметны - отображаются в виде непонятных квадратиков. А в Windows 7 они просто не отображаются   и человек сидит и не понимает в чём же дело. У него даже нет возможности удалить такие символы из поля, приходится за помощью обращаться к пользователям Windows XP. 
				__________________ Дмитрий | 
|  | |
| За это сообщение автора поблагодарили: JuniorAx (1). | |
|  25.04.2012, 10:30 | #5 | 
| Участник | 
			
			Добрый день! Спасибо raz и Damn!  Вчера проверил строку на спец символы, и действительно ни чего не нашёл (Win 7), а сегодня СЛУЧАЙНО сделал то же самое на компьютере с Win XP и о чудо :-) вижу в конце строки некий квадратик! Зашёл сюда чтобы сказать спасибо за совет raz и вижу сообщение от Damn, вообщем огромное вам спасибо! Я правильно понимаю что теперь мне надо составить некий список спец символов и искать такие в конце строки, и если появляются, удалять их? Где можн овзять полный список этих спец символов? | 
|  | 
|  25.04.2012, 10:59 | #6 | 
| Участник | 
			
			Думаю что полный список можно взять здесь http://ascii.org.ru/ascii.pdf А вот где взять именно ту часть этого списка, которая не отображается в Windows 7, я не знаю. 
				__________________ Дмитрий | 
|  | 
|  25.04.2012, 11:18 | #7 | 
| Участник | |
|  | |
| За это сообщение автора поблагодарили: Damn (3), JuniorAx (1). | |
|  25.04.2012, 11:38 | #8 | 
| Участник | 
			
			Полный список Вам и не нужен. Вам нужна проверка на 3 возможных спец.символа.  - Перевод строки (\n) - Возврат каретки (\r) - Табуляция (\t) При вставке через буфер обмена они имеют следующий смысл Перевод строки (\n) - перейти на следующую строку Excel Табуляция (\t) - перейти на следующий столбец Excel Возврат каретки (\r) - в теории, перейти на следующую строку внутри одной ячейки. Но на практике - реузультат малопредсказуемый. Соответственно, необходимо сделать замену этих символов на пробел. Примерно так X++: static void Job_Test(Args _args) { str strValue = "1\n2\r3\t4"; ; print strValue; // Замена спец.символов на пробелы strValue = global::strReplace(strValue,"\n"," "); strValue = global::strReplace(strValue,"\r"," "); strValue = global::strReplace(strValue,"\t"," "); print strValue; pause; } Наиболее вероятно, наличие символа перевода строки, если текст проводки формируется вручную и этот текст отображается в несколько строк. Просто случайно нажали на Enter при вводе. 
				__________________ - Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... | 
|  | |
| За это сообщение автора поблагодарили: JuniorAx (1). | |
|  25.04.2012, 11:55 | #9 | 
| Moderator | Цитата: 
		
			Сообщение от Владимир Максимов
			   При вставке через буфер обмена они имеют следующий смысл Перевод строки (\n) - перейти на следующую строку Excel Табуляция (\t) - перейти на следующий столбец Excel Возврат каретки (\r) - в теории, перейти на следующую строку внутри одной ячейки. Но на практике - реузультат малопредсказуемый. Соответственно, необходимо сделать замену этих символов на пробел. | 
|  | 
|  25.04.2012, 12:04 | #10 | 
| Участник | 
			
			Спасибо вам большое! Использовал вариант Владимира Максимова.  Возникло несколько вопросов: Где можно посмотреть информацию по классу Global, т.к. я не увидел используемую функцию в System Documentation, а в классе очень много функций!? И по поводу варианта с мокросом - у меня он не сработал, видимо из-за 3 версии Аксапты!? | 
|  | 
|  25.04.2012, 12:08 | #11 | 
| Участник | 
			
			to Gustav: Сначала select'ом выбираем нужные записи из таблицы, затем удаляем лишние символы и вставляем обработанный текст в поле временной таблицы, затем буфер заполняется из этой временной таблицы. Сейчас всё работает и перевода строки в Excel не происходит.
		 | 
|  | |
| За это сообщение автора поблагодарили: Gustav (1). | |
|  25.04.2012, 12:09 | #12 | 
| Участник | 
			
			Речь идет о "плохих символах" в одном конкретном поле. В данном случае, в тексте проводки. Вот содержимое этого поля и надо проверить перед тем, как вставить его в буфер обмена.
		 
				__________________ - Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... | 
|  | |
| За это сообщение автора поблагодарили: Gustav (1). | |
|  25.04.2012, 12:36 | #13 | 
| Участник | Цитата: System Documetation - это документация по объектам ядра системы, которые невозможно модифицировать через AOT. Класс Global относится к "Application Documentaion". Фактически, это "пользовательский" класс, который может быть изменен в любой момент. Поэтому по нему и нет документации. Можно сказать, что класс Global - это набор "своих" функций, которые "расширяют" набор стандартных функций Axapta. Цитата: Впрочем, можно удалить плохие символы через strRem(), но это имеет смысл только в случае, если плохие символы всегда находятся в конце содержимого поля, а не в середине. Сравните. X++: static void Job_Test(Args _args) { #define.BadSymbols("\n\r\t") str strValue = "1\n2\r3\t4"; ; print strValue; print "strRem = " + strRem(strValue,#BadSymbols); // Замена strValue = strReplace(strValue,"\n"," "); strValue = strReplace(strValue,"\r"," "); strValue = strReplace(strValue,"\t"," "); print "strReplace = " + strValue; pause; } 
				__________________ - Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... | 
|  | 
|  26.04.2012, 10:25 | #14 | 
| Участник | 
			
			Спасибо! Я хотел бы определить такой макрос у нас в системе, могли бы вы со мной поделиться, если это не трудно? Просто хочу попробовать вариант S.Kuskov с оставлением только корректных символов, потому что с переводм строки скрытыми символами, я решил задачу. Но в некоторых проводках есть еще какие-то символы которые не дают переводить каретку в следующей столбец Excel => значения из двух соседних столбцов выводятся в одной ячейке. И т.к. они появляются разные и в разных местах, не хотелось бы каждую строку отчета проверять на каждый спецсимвол! | 
|  | 
|  26.04.2012, 10:31 | #15 | 
| Участник | X++: #define.charfrom032to063(' !\"#$%&\'(*+,-./0123456789:;<=>?') #define.charfrom064to095('@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_') #define.charfrom096to127('`abcdefghijklmnopqrstuvwxyz{|}~') #define.charfrom160to191(' ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿') #define.charfrom192to223('ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß') #define.charfrom224to255('àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ') #define.ISO8859_1(#charfrom032to063 + #charfrom064to095 + #charfrom096to127 + #charfrom160to191 + #charfrom192to223 + #charfrom224to255) | 
|  | 
|  26.04.2012, 12:06 | #16 | 
| Участник | 
			
			Спасибо! Я догадываюсь что в переменной #define.charfrom224to255('àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ') содержатся русские буквы (судя по кодам) и у вас они не корректно скопировались из-за раскладки клавиатуры?Поменяю у себя, благо теперь понял как его составить. А что за макрос #Evat_NL??? | 
|  | 
|  26.04.2012, 12:15 | #17 | 
| Участник | |
|  | 
|  | 
| 
 |