Имя: Пароль:
1C
 
Отсечение правых пробелов при копировании ячейки в буфер обмена. Как улучшить поведение?
0 TormozIT
 
гуру
29.12.20
10:50
Конфигурация ПО

8.0-8.3.18, обычная и управляемая формы

Проблема

Платформа 1С при копировании в буфер обмена текста ячейки таблицы или табличного документа отсекаются правые (конечные) пробелы

Воспроизведение

Открыть приложенную внешнюю обработку в управляемом клиентском приложении любой базы. Одинарным кликом (без входа в режим редактирования) активировать единственную ячейку таблицы. Нажать сочетание клавиш CTRL+C. Вставить текст в блокнот. Вставится строка "ф". Двойным кликом войти в режим редактирования ячейки и убедиться, что в ней содержится текст "ф  ". Таким образом в буфер обмена текст копируется с отсечением правых (конечных) пробелов.

Аналогичная ситуация и в обычной форме, которую также можно проверить этой же внешней обработкой.

Ради чего это сделано - понятно. Колонки таблиц БД с типом "Строка фиксированной длины" возвращают строковые значения, дополненные до нужной длины пробелами.Тут действительно вреда от удаления пробелов практически нет, а польза есть. Но такие колонки используются практически только для свойства "Код".

А применяется это поведение и к колонкам переменной длины. Мы получаем вред в том, что нет простой возможности скопировать точно то значение, которое находится в ячейке. Хорошо, если есть возможность войти в режим редактирования строки таблицы и тогда можно скопировать оригинальное значение. Но она есть не всегда. В остальных случаях приходится командой "Вывести строки" выводить ячейки в табличный документ и уже там входить в режим редактирования ячейки и оттуда копировать. Последний способ достаточно не очевиден и многие просто не додумаются до этого.

При анализе проблемных ситуаций я много раз терял время по этой причине. Я копировал из ячейки текст и не видел в нем конечных пробелов, а они там были.

Попробовал найти другие приложения, которые ведут себя подобным образом и не смог. Например проверил EXCEL и Microsoft SQL Server Management Studio, где также есть тип "Строка фиксированной ширины".

Предлагаю применять такое отсечение при копировании в буфер обмена только для колонок с фиксированной длиной строки. Если информации о типе длины строки нет, то не применять.
Реализовал такое поведение в разрабатываемой версии ИР https://www.hostedredmine.com/issues/910752

Возможно у кого еще будут идеи как уменьшить негативный эффект от этого поведения?
1 TormozIT
 
гуру
29.12.20
10:51
2 TormozIT
 
гуру
29.12.20
10:54
Скачать внешнюю обработку с примером можно в полном описании проблемы https://www.hostedredmine.com/issues/910780
3 polosov
 
29.12.20
11:09
(0) Пишешь, что отсекаются пробелы, потом картинки, что не отсекаются. Непонятное описание.
4 Ёпрст
 
29.12.20
11:31
(0) шифт инсерт дает такое же поведение?
5 TormozIT
 
гуру
29.12.20
12:05
(4) Да
6 TormozIT
 
гуру
29.12.20
19:38
Неужели больше нет идей?
7 Cthulhu
 
29.12.20
20:53
есть идея. перед копированием как-то заменять пробелы на неразрывные пробелы. если надо - то после вставки обратно.
8 Вафель
 
29.12.20
22:34
копирование из Ексель еще хуже, там перевод строки зачем-то копируется
9 TormozIT
 
гуру
30.12.20
00:19
(8) Ты слишком подробно описал проблему. Думаю большинство не поймут о чем ты. Я не понял.
10 Злопчинский
 
30.12.20
01:34
(8) из экселя куча мусора копируется. у меня у одного клиента постоянно вылазит непечатаемый символ с кодом 28
11 ДедМорроз
 
01.01.21
19:21
А в буфере обмена же есть несколько форматов хранения.
Если хочется подробно,то EnumClipboardFormat и смотрим,что там есть и как оно копируется.
12 Конструктор1С
 
02.01.21
06:03
(0) у меня не воспроизводится. Строка копируется с пробелами. Пробовал вставлять в ворд, эксель, блокнот, таб. документ 1с, табличное поле и по всякому между ними, и в конфигураторе и в 1с предприятии. ЧЯДНТ? Может ты какую-нибудь хрень установил на комп, которая в буфере обмена шарится?
13 Конструктор1С
 
02.01.21
06:06
"Одинарным кликом (без входа в режим редактирования) активировать единственную ячейку таблицы"

Невнимательно прочитал. А зачем ты так делаешь? В экселе поведение при копипасте выделенной ячейки и выделенного в ней текста тоже отличается
14 TormozIT
 
гуру
02.01.21
10:33
(13) Зачем я так делаю? Опять же странный вопрос, учитывая то, что в (0) есть ответ =) Ну и кажется даже без (0) ответ довольно очевиден - это единственный простой способ скопировать значение недоступной для редактирования ячейки.
15 DES
 
04.01.21
10:59
сорри не по теме, в ИР версии дата года съехала (2000)
16 Dmitry77
 
04.01.21
12:55
(14) неправильный способ. Жмем cntr+F. Открывается окно с нужным значением и оттуда копируем с пробелами.
17 mistеr
 
04.01.21
13:43
(0) >При анализе проблемных ситуаций я много раз терял время по этой причине.

Если сравнить время, потерянное в таких ситуациях разработчиками, со временем, которое теряли бы простые пользователи (которые пробел вообще за символ не считают), если бы концевые пробелы везде мешались, думаю выбор разработчиков платформы становится очевидным и железно обоснованным. :)

Концевые пробелы — зло, которое проще не замечать, чем бороться с ним. :)
18 TormozIT
 
гуру
04.01.21
17:20
(17) Почему тогда при входе в режим редактирования ячейки/поля концевые пробелы отображаются? Ну удаляли бы тогда их везде автоматически. Сейчас же нет целостности в подходе. Если копирование ячейки в режиме просмотра выполняется для дальнейшего поиска, то удаление пробелов почти всегда будет полезно. А вот если пользователь копирует с целью сравнения значений или другой чувствительной к длине строки цели, то это для него будет вредно. Железным обоснованием на мой взгляд это сложно назвать. Ну и хотелось бы еще примеров приложений, где сделано подобное поведение. Я так и не смог найти.
19 DJ Anthon
 
04.01.21
20:53
Зато при создании базы данных и копирования путя из буфера обмена эта падлина не убирает пробелы, а ведь он чаще всего попадает в буфер с пробелами (например, из тотал коммандера). при массовой обработке, баз так на 50, это сильно напрягает. короче, все в 1С работает наоборот. в семерке буфер обмена и поиск по спискам были намного удобнее.
20 DJ Anthon
 
04.01.21
20:54
ни разу за 15 лет работы с 1С не видел необходимости пробелов в конце и начале в адресах баз
21 DES
 
13.01.21
13:16
на последнем обновлении перестало работать
ВнешниеОбработки.Создать("C:\Program Files\1cv8\ИР\ирПортативный.epf", Ложь).От(Запрос)
а на Портативный 5.71.3p
работает
22 TormozIT
 
гуру
13.01.21
17:39