Имя: Пароль:
1C
1С v8
Некорректная работа метода Свернуть() таблицы значений.
0 ado
 
20.09.20
18:52
Народ, кто-нибудь сталкивался с подобным?

Есть ТЗ с одной колонкой, строковой, типизированной. Выполняю по ней Свернуть() и, в некоторых случаях, после свертки в ней остаюся строки с одинаковыми значениями!
Значения реально одинаковые, не похожие буквы в разных раскладках -- я потом по этой таблице бытаюсь регистр сведений заполнить, и получаю отлуп по причине неуникального ключа.

Как такое возможно?
1 acht
 
20.09.20
18:54
Пробелы в конце. Ваш К.О.
2 kubik_live
 
20.09.20
18:54
(0)  пробелы в конце строк
3 ado
 
20.09.20
18:56
(1)(2) Нет. Проверено.
4 RomanYS
 
20.09.20
18:57
(3) показывай код, результат
5 ado
 
20.09.20
19:04
Хммм, это не пробел, но какой-то непечатный символ. Потому, что СтрДлина у этих значений разная. Даже после СокрЛП разная.
6 ado
 
20.09.20
19:05
Но тогда вопрос, как с этим бороться?
7 ДенисЧ
 
20.09.20
19:09
Фублин, Дима...
Такие вопросы от тебя...
8 ado
 
20.09.20
19:13
(7) Ну вот если такой умный, скажи как избежать подобных граблей?
9 RomanYS
 
20.09.20
19:18
(8) Навести порядок в данных, удалить непечатные символы
10 Lexandr
 
20.09.20
19:22
Запретить на фиг копирование из интернета наименований и подобной требухи. Я на оболеввшем. А так да, проще найти эти символы вариантов от вывести в отдельной колонке до хекс-редактора.
11 ДенисЧ
 
20.09.20
19:25
(8) Выяснить, какие символы там есть, откуда они появляются. Уничтожить причину. В существующих данных провести люстрацию.
12 ado
 
20.09.20
19:26
(9) Как? В юникоде этих символов как у дурака фантиков.
13 ДенисЧ
 
20.09.20
19:26
(12) КодСимвола() на что нам свыше дан?
14 Lexandr
 
20.09.20
19:26
Даже вспомнил, в свое время пришлось вырезать символ "09".
15 ado
 
20.09.20
19:27
(11) Данные из внешнего источника приходят.
16 ado
 
20.09.20
19:28
(13) Ну вот в данном конкретном случае он показывает 8237. И что мне с этой инфой делать?
17 ado
 
20.09.20
19:29
Вопрос в том, какого хрена вообще 1С неодинаковые строки считает одинаковыми.
18 hhhh
 
20.09.20
19:30
(17) сам же в (0) сказал, что 1с их считает неодинаковыми.
19 ДенисЧ
 
20.09.20
19:31
(16) СтрЗаменить(строка, Символ(8237), "")
(17) Кто тебе сказал такое? В (0) у тебя обратная ситуация
20 acht
 
20.09.20
19:31
(17) Что делать? Кто виноват? Доколе?
21 ado
 
20.09.20
19:35
(18) Это скуль их считает неодинаковыми. Ибо проверку на уникальность ключа он делает.

(19) А если в другой записи будет Символ(8236)? Или Символ(8235)? Или ещё один из овердохера непечатных символов?
22 acht
 
20.09.20
19:40
(21) Ну, тогда придется тебе что-то сделать.
23 Ненавижу 1С
 
гуру
20.09.20
19:48
Format characters
202A  LEFT-TO-RIGHT EMBEDDING
• commonly abbreviated LRE
202B  RIGHT-TO-LEFT EMBEDDING
• commonly abbreviated RLE
202C  POP DIRECTIONAL FORMATTING
• commonly abbreviated PDF
202D  LEFT-TO-RIGHT OVERRIDE
• commonly abbreviated LRO
202E  RIGHT-TO-LEFT OVERRIDE
• commonly abbreviated RLO

Видимо не умеет СокрЛП такие символы обрезать
24 ado
 
20.09.20
19:50
(21) Тьфу, точнее наоборот. Для 1С они разные, а для скуля одинаковые.
25 ado
 
20.09.20
20:01
В общем, решение: ЗаменитьНедопустимыеСимволыXML() из БСП.
26 Ненавижу 1С
 
гуру
20.09.20
20:02
(25) ставлю лайк
27 ДенисЧ
 
20.09.20
20:10
(21) Проверяй на вхождение в диапазон допустимых символов
28 ado
 
20.09.20
20:22
(27) Допустимых тоже какбэ оердохера.
29 МихаилМ
 
20.09.20
20:25
значит - некорректная работа программиста 1с, а не метода Свернуть()
30 Злопчинский
 
20.09.20
20:45
(5) кто бы сомневался в корявости рук.
31 ado
 
20.09.20
21:00
(25) А, нет, нихрена. Эта функция такие символы не убирает.
Заррраза!
32 ado
 
20.09.20
21:01
(30) Есть предложения, как решить?
33 RomanYS
 
20.09.20
21:04
(31) Перебери "перечисление" Символы:
ВК (CR)
ВТаб (VTab)
НПП (NBSp)
ПС (LF)
ПФ (FF)
Таб (Tab)

99% что ничего больше у тебя не будет.

А если останется - берёшь конкретные кривые строки и вырезаешь оттуда кривые символы на замену
34 Salimbek
 
20.09.20
21:04
(32) Перевести в ANSI, отфильтровать (это проще, ведь там всего 256 символов останется), перевести обратно в UTF ?
35 ado
 
20.09.20
21:10
(33) Смотри (16)
36 ado
 
20.09.20
21:12
(34) Не пойдет, нужен юникод. Данные могут быть на языках, использующих не только кириллицу и простую латиницу.
37 RomanYS
 
20.09.20
21:16
(35) Ну что делать с конкретным символом ты знаешь.
Универсального рецепта с учетом (36) не будет. В любом случае тебе нужен либо "чёрный" список символов, либо "белый" (тут проблема в (36))
38 acht
 
20.09.20
21:17
(36) Ну так засучивай рукава и пиши свой RTrim - по классам уникодных символов и т.п.
39 ado
 
20.09.20
21:25
Не, есть, конечно одно напрашивающееся решение -- свернуть запрососм. Но оно мне не нравится :(
40 МихаилМ
 
20.09.20
21:48
(39) или поменять  collatoin
41 Провинциальный 1сник
 
20.09.20
22:04
Юникод зло, во многих случаях - необходимое.. Но вот для кириллицы он нафиг не нужен, ИМХО, и без него отлично можно было обойтись классическими 8битными кодовыми страницами рус-лат. Проблема была в зоопарке этих кодовых страниц.. и юникод как бы решил эту проблему, но при этом создал новые.
42 ado
 
20.09.20
22:55
(40) Ну, это такое ... Сейчас поменяют, а потом админ базу на другой сервак перенесет с настройками по умолчанию, и задолбаются проблему искать.

(41) Мир не ограничивается зоной ru. Только кириллицы сушествует больше десятка вариантов, а ещё есть расширенная латиница, а ещё есть другие алфавиты, а ещё есть вообще не алфавиты.
43 ado
 
20.09.20
22:57
(41) Проблема тут не в юникоде, а в том, что 1С и MSSQL на котором работает 1С, по-разному сравнивают строки.
44 acht
 
20.09.20
23:18
(43) Ты еще про регистрозависимость вспомни
45 Провинциальный 1сник
 
21.09.20
06:43
(42) "Только кириллицы сушествует больше десятка вариантов, а ещё есть расширенная латиница"
Часто ли 99,9% пользователей требуется редактировать текст, где русский вперемешку с болгарским? Думаю, крайне редко. Да и в этом случае есть решения. Помню, на УКНЦ была технология переключения кодовых страниц КОИ-7 с помощью управляющих символов, позволяющего хранить в файле и выводить на консоль многоязычный текст. Это технология, придуманная айтишниками для айтишников. А юникод придумывался для гламурных юзеров, ценой дикого оверхеда при хранении национальных символов и при этом с кучей недостаточно документированных нюансов, которые используются кем попало как попало...