Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неправильная сортировка таблицы значений с украинскими наименованиями (7.7).
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
miha74
Всем привет. Есть у меня давняя нерешенная проблема. В таблице значений есть колонка со строчными значениями на украинском языке, допустим фамилии сотрудников. При сортировке строк таблицы получаем "Є Ї І А Б В Г Д" и т.д., а надо бы "А Б В Г Д Є І Ї".
Windows XP SP3, платформа 7.70.027
Региональные установки в системе - укр
Порядок сортировки в базе - укр
В конце поста даю ссылку на пример обработки, сами попробуйте.
Есть ли какое-то простое решение этой проблемы? Надеюсь на коллективный разум.


необходимо зарегистрироваться для просмотра ссылки
Batchir
Сортировка то идет не по букве, а по коду символа.
Код символа "А" равен 1040
Код символа "Є" равен 1028
т.е. укр буквы в символьном представлении находятся ниже русских.
miha74
Тоесть так и должно быть?
Batchir
Это кирилица 47046430.gif
miha74
Ок. А как по-красивше можно обойти этот косяк? Я думаю надо создать строку-алфавит типа "абвгдеєжзиіїйк...." и перебором оного искать значения в тз, это будет медленно...
Alex007
А у меня вот такая байда имеется, которая бесит до немогу. Делаю перекидку новых элементов справочников через ДБФ. В файл украинская і выгружается как подчеркивание, но что самое смешное- ї переносится нормально. т.е. например "претензії"="претенз_ї". Соответственно так же и заносится потом. Возможно ли побороть это? Есть ли такая функция, которая перебирала бы буквы в строке например, чтобы править уже в перенесенном элементе что ли?
miha74
Сдается мне, что Вам поможет принудительная установка Windows-кодировки при создании файла дбф. Ибо по умолчанию там DOS-кодировка. Ферштейн?
Alex007
Цитата(miha74 @ 01.04.16, 14:23) необходимо зарегистрироваться для просмотра ссылки
Сдается мне, что Вам поможет принудительная установка Windows-кодировки при создании файла дбф. Ибо по умолчанию там DOS-кодировка. Ферштейн?


Т.е. средствами 1С? Подскажите как я не совсем ферштейн.
miha74
Это уже оффтоп пошел конечно... Я конечно извиняюсь, у Вас документация по 1С есть? Могу дать 1C_Описание встроенного языка.chm.

    
    Файл = создатьОбъект("XBASE"); //создаем ссылку на файл DBF
    Файл.КодоваяСтраница(0); //0-виндоуз кодировка, 1-ДОС кодировка
    
    //определяем структуру файла
    //Синтаксис: ДобавитьПоле(<Название>,<Тип>,<Длина>,<Точность>)
    Файл.ДобавитьПоле("KB_A","S",12,0);
    Файл.ДобавитьПоле("KK_A","S",15,0);
        //и т.д.


Из описания по 1С:
КодоваяСтраница
Установить режим кодировки.

Синтаксис:

КодоваяСтраница(<Режим>)

Англоязычный синоним:

SetCodePage

Параметры:

<Режим>
Необязательный параметр. Числовое выражение: 0 — Windows-кодировка; 1 — DOS-кодировка. Если параметр не задан, то режим кодировки не меняется (используется для определения текущего режима кодировки без его смены).


Возвращаемое значение:

Текущее числовое значение режима кодировки (на момент до исполнения метода).

Описание:

Метод КодоваяСтраница позволяет установить режим кодировки для чте­ния и записи значений строковых полей в файл базы данных.
Alex007
miha74 @ Сегодня, 14:31 необходимо зарегистрироваться для просмотра ссылки,
Нет. Можно было просто написать- использовать функцию КодоваяСтраница(0), у меня звезда во лбу от преизбытка знаний не горит.
Vofka
Цитата(Alex007 @ 01.04.16, 14:41) необходимо зарегистрироваться для просмотра ссылки
у меня звезда во лбу от преизбытка знаний не горит

От чтения правил, похоже, тоже. Зачем влазить в чужую тему с левым вопросом? faceoff.gif
Acid
Добавте в ТЗ колонку "Порядок", и сделайте ее невидимой. В нее записывайте номер по порядку, и сортируйте по этой колонке.
miha74
Как-то не очень. Надо будет постепенно добавлять строки с новыми людьми. Придется вручную порядковый номер вычислять перед этим или как?
А вообще, странно как-то дело обстоит. Семерке уже 100 лет, а в инете ничего нет по сути по моему вопросу. Такое впечатление, что на это никто не обращал внимание.

Ну а как же тогда 1С-ка правильно сортирует объекты по украинским наименованиям? Парадокс.
pablo
Цитата
Семерке уже 100 лет, а в инете ничего нет по сути по моему вопросу.

Потому как это проблема не семерки, а кодовой страницы ОС.
Acid
Цитата(miha74 @ 01.04.16, 15:20) необходимо зарегистрироваться для просмотра ссылки
Надо будет постепенно добавлять строки с новыми людьми. Придется вручную порядковый номер вычислять перед этим или как?

вручную??? Вы не знаете порядковый номер буквы Є в алфавите?
miha74
Не, ну на крайний случай можно конечно. Но ведь это будет сортировка по первой букве.

Есть у меня еще одна бредовая идея. Допустим все буквы текста закодировать кодами символов СР1251 чтоб были по порядку, сортируем и раскодируем обратно, все символы кроме букв заменить пробелами.
Acid
новый велосипед - это здорово.

я вообще не вижу проблемы - пусть набирают фамилию с клавиатуры. Секунда дела.
miha74
И в тоже время объекты справочников образцово сортирует по наименованию. Как? Доколе?! smile.gif


Еще вопрос. Я в 8-ке никогда не работал. Скажите, в 8-ке так же хреново сортируется таблица значений?
volodya1122
Вирішив заради спортивного інтересу відсортувати список контрагентів по своєму: в тому порядку як ідуть букви на клавіатурі.
Получилось цікаво.

Ссилка на звіт:
необходимо зарегистрироваться для просмотра ссылки
miha74
Браво! Оригінально. 32541510.gif
Vofka
volodya1122, можно в виде отдельной публикации оформить с описанием. Думаю, что многим было бы интересно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.