Имя: Пароль:
1C
 
Сложный вопрос (наверно) (коды в 1С)
Ø
0 NAME2
 
11.08.05
15:42
Сам вопрос в следующем: У справочника номеклатура есть поле код. Но условия задачи потребовали, что-бы данный код был смешенный - цифровой и буквенный (например 5005-ар). Теперь самое интересное. При вводе оператор может внести буквы ap - как английские и как русские ар. Визульно разницы нет. Но если делать в обработке поиск по коду, то ясно что для программы это разные коды. Как можно выявить, что конкретное значение кода состоит из английских букв, или из русских ? И наверно более сложный вопрос как их заменить "автоматом", т.е. русские буквы ар на английские ap и т.п. ("е" на "е", "c" на "с") ? Заранее спасибо !!!
1 Мулька
 
11.08.05
15:45
Проверять на диапазон кодов АСЦИИ символов.
2 КонецЦикла
 
11.08.05
15:48
По поводу замены... в глоб. модуле можно так:
Функция Преобр(Стр) Экспорт
  Вых="";
  Размер=0;
  Стр1=Врег(СокрЛ(СокрП(Стр)));
  Размер=СтрДлина(Стр1);
  For Смв=1 to Размер do
    Рез=Найти(Русские,Сред(Стр1,Смв,1));
    Если Рез<>0 Тогда
      Вых=Вых+Сред(Латинские,Рез,1);
    Иначе
      Вых=Вых+Сред(Стр1,Смв,1);
    КонецЕсли;
  EndDo;
  Возврат Вых;
КонецФункции
Объявляешь переменные русские, латинские, потом пишешь в конце глобальника
Русские = "авбгд..."
Латинские = "abcd..."
Типа такого... код функции не мой, но вроде работает
3 smaharbA
 
11.08.05
15:49
Перем глСпТранслит Экспорт; // СписокЗначений с соответствиями транслитерации Русский-Английский
Функция глТранслит(ПоРусски) Экспорт
// Осуществляет побуквенную транслитерацию на латинский алфавит. ДРК06
// переданной строки. При этом строка приводится к верхнему регистру.
  Текст=СокрЛП(ПоРусски);
  ЛатТекст="";
  Для к=1 по СтрДлина(Текст) Цикл
    ОбрБуква=ВРег(Сред(Текст,к,1));
    ЛатБуква=глСпТранслит.Получить(ОбрБуква);
    Если ПустаяСтрока(ЛатБуква)=0 Тогда
      ЛатТекст=ЛатТекст+ЛатБуква;
    Иначе
      ЛатТекст=ЛатТекст+ОбрБуква;
    КонецЕсли;
  КонецЦикла;
  Возврат ЛатТекст;
КонецФункции
Процедура ЗаполнитьТаблицуТранслитерации()
// Заполняет список транслитерации - соответствия русских и английских алфавитов
  глСпТранслит=СоздатьОбъект("СписокЗначений");
  глСпТранслит.ДобавитьЗначение("A","А");
  глСпТранслит.ДобавитьЗначение("B","Б");
  глСпТранслит.ДобавитьЗначение("V","В");
  глСпТранслит.ДобавитьЗначение("G","Г");
  глСпТранслит.ДобавитьЗначение("D","Д");
  глСпТранслит.ДобавитьЗначение("E","Е");
  глСпТранслит.ДобавитьЗначение("YE","Ё");
  глСпТранслит.ДобавитьЗначение("J","Ж");
  глСпТранслит.ДобавитьЗначение("Z","З");
  глСпТранслит.ДобавитьЗначение("I","И");
  глСпТранслит.ДобавитьЗначение("Y","Й");
  глСпТранслит.ДобавитьЗначение("K","К");
  глСпТранслит.ДобавитьЗначение("L","Л");
  глСпТранслит.ДобавитьЗначение("M","М");
  глСпТранслит.ДобавитьЗначение("N","Н");
  глСпТранслит.ДобавитьЗначение("O","О");
  глСпТранслит.ДобавитьЗначение("P","П");
  глСпТранслит.ДобавитьЗначение("R","Р");
  глСпТранслит.ДобавитьЗначение("S","С");
  глСпТранслит.ДобавитьЗначение("T","Т");
  глСпТранслит.ДобавитьЗначение("U","У");
  глСпТранслит.ДобавитьЗначение("F","Ф");
  глСпТранслит.ДобавитьЗначение("H","Х");
  глСпТранслит.ДобавитьЗначение("C","Ц");
  глСпТранслит.ДобавитьЗначение("CH","Ч");
  глСпТранслит.ДобавитьЗначение("SH","Ш");
  глСпТранслит.ДобавитьЗначение("SCH","Щ");
  глСпТранслит.ДобавитьЗначение("'","Ъ");
  глСпТранслит.ДобавитьЗначение("Y","Ы");
  глСпТранслит.ДобавитьЗначение("'","Ь");
  глСпТранслит.ДобавитьЗначение("E","Э");
  глСпТранслит.ДобавитьЗначение("YU","Ю");
  глСпТранслит.ДобавитьЗначение("YA","Я");
КонецПроцедуры // ЗаполнитьТаблицуТранслитерации
...
Вешай на код функцию, глТранслит(Код)
...
4 Джинн
 
11.08.05
15:49
Смотри КодСимв, Симв, СтрЗаменить.
Но вообще-то это юзверские проблемы. Сами понавводили - сами пусть и геморроятся. Если, конечно, кодировку нельзя формализовать.
5 Мулька
 
11.08.05
15:50
(2) не программерский подход.
6 smaharbA
 
11.08.05
15:51
+(3) толко таблицу заполняй не транслиттерацией, а по похожести буков/знаков...
7 NAME2
 
11.08.05
15:52
(2-6) Спасибо. Попробую. Смысл понятен.
8 Мулька
 
11.08.05
15:56
Формальный подход: Предоставить возможность выбора символов из заранее сформированного списка
9 КонецЦикла
 
11.08.05
15:58
2(5) Вах... написал же "код функции не мой"
10 smaharbA
 
11.08.05
15:59
(8) зато так даже еслиб 1Сэ в юникоде или/и других кодах общалась, вопрос будет снят...
11 Хоменко Валерий
 
11.08.05
16:00
У меня было что-то похожее на (2) со строками:
  РусскиеНеотличимые="АВЕКМНОРСТУХаекорсух";
  ЛатинскиеАналоги="ABEKMHOPCTYXaekopcyx";