Транслит в 1с это
Главная - Статьи - Транслитерация в 1с, на примере функции для версии 7.7.
Транслитерация в 1с, на примере функции для версии 7.7.
Многие задавались вопросом организации транслитерации строк в 1с. Предлагаем ознакомится с одной из возможных схем.
Функция Транслит(Стр) Экспорт
Исх = СоздатьОбъект("СписокЗначений");
Кон = СоздатьОбъект("СписокЗначений");
Исх.ДобавитьЗначение("а");Кон.ДобавитьЗначение("a");
Исх.ДобавитьЗначение("б");Кон.ДобавитьЗначение("b");
Исх.ДобавитьЗначение("в");Кон.ДобавитьЗначение("v");
Исх.ДобавитьЗначение("г");Кон.ДобавитьЗначение("g");
Исх.ДобавитьЗначение("д");Кон.ДобавитьЗначение("d");
Исх.ДобавитьЗначение("е");Кон.ДобавитьЗначение("e");
Исх.ДобавитьЗначение("ж");Кон.ДобавитьЗначение("j");
Исх.ДобавитьЗначение("з");Кон.ДобавитьЗначение("z");
Исх.ДобавитьЗначение("и");Кон.ДобавитьЗначение("i");
Исх.ДобавитьЗначение("й");Кон.ДобавитьЗначение("i");
Исх.ДобавитьЗначение("к");Кон.ДобавитьЗначение("k");
Исх.ДобавитьЗначение("л");Кон.ДобавитьЗначение("l");
Исх.ДобавитьЗначение("м");Кон.ДобавитьЗначение("m");
Исх.ДобавитьЗначение("н");Кон.ДобавитьЗначение("n");
Исх.ДобавитьЗначение("о");Кон.ДобавитьЗначение("o");
Исх.ДобавитьЗначение("п");Кон.ДобавитьЗначение("p");
Исх.ДобавитьЗначение("р");Кон.ДобавитьЗначение("r");
Исх.ДобавитьЗначение("с");Кон.ДобавитьЗначение("s");
Исх.ДобавитьЗначение("т");Кон.ДобавитьЗначение("t");
Исх.ДобавитьЗначение("у");Кон.ДобавитьЗначение("u");
Исх.ДобавитьЗначение("ф");Кон.ДобавитьЗначение("f");
Исх.ДобавитьЗначение("х");Кон.ДобавитьЗначение("x");
Исх.ДобавитьЗначение("ц");Кон.ДобавитьЗначение("c");
Исх.ДобавитьЗначение("ч");Кон.ДобавитьЗначение("ch");
Исх.ДобавитьЗначение("ш");Кон.ДобавитьЗначение("sh");
Исх.ДобавитьЗначение("щ");Кон.ДобавитьЗначение("sch");
Исх.ДобавитьЗначение("ъ");Кон.ДобавитьЗначение("'");
Исх.ДобавитьЗначение("ы");Кон.ДобавитьЗначение("y");
Исх.ДобавитьЗначение("ь");Кон.ДобавитьЗначение("'");
Исх.ДобавитьЗначение("э");Кон.ДобавитьЗначение("e");
Исх.ДобавитьЗначение("ю");Кон.ДобавитьЗначение("yu");
Исх.ДобавитьЗначение("я");Кон.ДобавитьЗначение("ya");
Стр1 = Стр;
Для Инд=1 По Исх.РазмерСписка() Цикл
Истр = Исх.ПолучитьЗначение(Инд);
Кстр = Кон.ПолучитьЗначение(Инд);
Стр1 = СтрЗаменить(Стр1,Истр,Кстр);
Стр1 = СтрЗаменить(Стр1,Врег(Истр),Врег(Лев(Кстр,1))+?(СтрДлина(Кстр)=1,"",Сред(Кстр,2,СтрДлина(Кстр))));
КонецЦикла;
Процедура ДобавитьСимвол(Символ,ВСимвол)
транслит[КодСимв(Символ) + 1] = ВСимвол;
Если Врег(Символ) <> Символ Тогда
транслит[КодСимв(ВРЕГ(Символ)) + 1] = ВРЕГ(Лев(ВСимвол,1))+Сред(ВСимвол,2);
КонецЕсли;
КонецПроцедуры
Функция ЗаполнитьТранслит();
Для Сч = 1 По 256 Цикл
транслит[сч] = Симв(сч-1);
КонецЦикла;
ДобавитьСимвол("й","j");
//.. и т.п. - только маленькие, и только то что надо транслитерировать
ДобавитьСимвол("щ","tsh");
КонецФункции
//*******************************************
Процедура Сформировать()
ЗаполнитьТранслит();
Стр = ". ";
РезСтр = "";
Для Сч = 1 По СтрДлина(Стр) Цикл
РезСтр = РезСтр + транслит[КодСимв(Сред(Стр,Сч,1)) + 1];
КонецЦикла;
КонецПроцедуры
Функция Transliterate(srtRusWord)
strRUS = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
strENG ;
strResult = "";
Для i = 1 по СтрДлина(srtRusWord) Цикл
s = Сред(srtRusWord, i,1);
s=ВРег(s);
k = Найти(strRUS, s);
Если k = 0 тогда
strResult = strResult + s;
Иначе
strResult = strResult + СтрЗаменить(Сред(strENG, (k - 1) * 4 + 1, 4), "/", "");
КонецЕсли
КонецЦикла ;
Возврат strResult;
КонецФункции
(3) все преобразует в верхний регистр. немного модифицировал
Очень быстрая функция транслитерации. Работает с символами как верхнего, так и нижнего регистра. Встречающиеся латинские буквы и знаки препинания оставляет нетронутыми.
Спасибо автору! Самому впадлу было бы писать. Чуть под себя переделал.Вставлю и свои 5 копеек :)
В массиве смотрится красивей
Некропостну своей функцией по госту ISO 9:
Pri otpravke SMSok iz 1S stolknulsya s tem, chto tekst otpravlyalsya tol`ko latiniczej, a danny`e-to v kirillicze. V rezul`tate napisal funkcziyu perevoda teksta v latiniczu.Mozhet, komu-nibud` prigoditsya Получился не только некропостинг, но и мимопостинг: публикация находится в разделе "Платформа 7.7" . (16)
Прошу прощения. Существование семерки уже стерлось из памяти.
Просмотры 30067
Загрузки 0
Рейтинг 42
Создание 02.10.09 12:04
Обновление 02.10.09 00:00
№ Публикации 57971
Тип файла Нет файла
Конфигурация Конфигурации 1cv7
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
ТОП самых продаваемых и популярных готовых решенийСм. также
27.01.2016 85841 Serginio 116
Печать таблицы значений в 1С 7.7 при отладке
Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.
30.06.2021 1402 Zoltan_Black 11
Расчет страховых взносов в 1С 7.7 "Учет и отчетность предпринимателя, ред. 1.2" с апреля 2020
В этой статье описано, какие небольшие изменения можно внести в модуль документа Начисление налогов с ФОТ, чтобы правильно рассчитывались страховые взносы с 1 апреля 2020 г.
09.04.2020 13902 Юджин58 39
Дистрибьюция 7.7. Часть 1. Жизненный цикл заявки покупателя. Одна заявка покупателя, много адресов доставки.
Описан способ работы с учетом расписания с приоритетными покупателями - торговыми сетями (основными покупателями) в торговой или комплексной учетной системе на 1С 7.7. Множественная заявка покупателя на несколько торговых точек.
14.10.2019 5140 ksnik 14
1С:Предприятие 7.7. Оптимизация. Промо
Разгоняем 1С:Предприятие 7.7. Выжимаем последние соки.
31.01.2009 49401 alexk-is 110
Заполнение реквизитов документов из предыдущего документа
Функция для автоматического заполнения реквизитов документов.
04.02.2019 5633 drevilo 2
Проверка часового пояса
При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.
16.05.2016 11549 kudenzov 3
[ПОЛЕЗНЯШКА, 7.7] Как посчитать итоги по документам черным запросом с изподвывертом?
Мелкая полезняшка, считает запросом итоговую сумму документов и количество документов.
12.03.2016 20274 CheBurator 18
Как уменьшить количество заблокированных объектов Промо
История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось.
12.01.2012 15782 ShEvOvIcH 18
09.03.2016 33556 Serginio 22
Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм
Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).
23.11.2015 17865 etmarket 14
12.11.2015 48160 Serginio 36
Технология обновления нетиповых конфигураций 1С:Предприятия 7.7 Промо
Данная статья рассчитана на уже подготовленного пользователя, владеющего некоторыми навыками программирования и работы в конфигураторе. Статью можно использовать как поэтапное руководство к действию. Статья была написана для повышения качества работ выполняемых сотрудниками компании Информ Сервис при обновлении нетиповых конфигураций. Я надеюсь, что эта информация окажется полезной и для вас.
12.12.2008 64153 alexk-is 25
Процедура расшифровки ячейки таблицы в отчетах 1С 7.7
Хочу поделиться с вами универсальной процедурой для расшифровки ячеек печатной формы отчетов в 1С 7.7.
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих
Еще в этой же категории
Как узнать является ли строка числом? 9
// Если передено число - то 1, иначе 0 Функция ЭтоЧисло(Знач ТекСтр) ТекСтр = СокрЛП(ТекСтр); ТекСтр = СтрЗаменить(ТекСтр," 0" ," 9" ); Если (СтрДлина(Число(ТекСтр)) СтрДлина(ТекСтр)) или ((СтрДлина(ТекСтр) = 1) и (Найти(" 0123456789" ,Те Функция разбора (разложения) строки в массив 5
Данные функции позволяют разложить строку в массив, используя заданный разделитель Например есть строка: абв$dfd$232$-0oj$5 Выполнив код: НашМассив = РазложитьСтрокуВМассив(абв$dfd$232$-0oj$5, " $" ) ; Получим: НашМассив = абв dfd 232 -0oj Как удалить символ кавычки " в строке? 4
// СтрокаСКавычками = " Alena" " Egorova" СтрокаБезКавычки = СтрЗаменить(СтрокаСКавычками," " " " ," " ); Сообщить(СтрокаБезКавычки); // Alena Egorova Номер символа Кавычка - 34 , и: Симв(34) + МоеСлово + Симв(34) = " МоеСлово" Функция разбора (разложения) строки в массив, аналог СтрРазделить 3
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Результат = Новый Массив; // для обеспечения обратной совместимости Если ПропускатьПустыеСтроки = Неопределено Тогда П Как убрать из строки лишние символы? 2
Функция УбратьЛишниеСимволы(Строка1) Экспорт НовСтрока = " " ; ПравильныеСимволы = " QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю" ; Для Сч = 1 по СтрДлина(Строка1) Цикл Тек Посмотреть все в категории Работа с Текстом (Строкой)
Когда программисты первый раз видят прикладной язык 1С, многие впадают в ступор. Несмотря на то, что родной русский язык в любом случае ближе и понятнее, читать код на русском языке и понимать, что происходит в нем (когда это в новинку) не так-то просто.
Опытный программист сразу увидит определенные знакомые конструкции (условия, циклы, вызовы функций), но многие моменты в коде все равно будут непонятными и непривычными. А уж если код был написан программистом с даром красивого именования переменных и функций, то процесс первого знакомства с 1С обещает быть еще более ярким. Впрочем, последнее справедливо не только для 1С.
Пример кода от любителя красивого синтаксиса
Сейчас процесс перевода 1С на английский язык идет полным ходом. К существующим ранее решениям (таким как 1C:Drive) недавно добавился 1С:ERP World Edition, а разработка на английском языке (более привычном и понятном для многих начинающих или не связанных с 1С программистов) стала еще более актуальной.
Как же человеку, уже прикипевшему к русскому языку в коде и / или со знаниями английского на уровне «London is the capital of Great Britain… Microsoft…Coca-Cola…Ok» быстро перестроиться на кодирование на английском языке?
Есть несколько способов:
1. Первое и самое банальное – подтянуть знания английского языка. Даже если удастся запомнить, как писать все нужные конструкции, названия объектов и переменных все равно желательно давать понятными англоговорящему кодеру. И чтобы не сидеть все время в обнимку с гугл-переводчиком, лучше потратить некоторое время на освоение нового языка, благо ресурсов сейчас для этого предостаточно.
Вот пример кода, как не нужно делать:
2. Второй способ – открыть любую типовую конфигурацию и искать название на английском нужной конструкции с помощью синтаксис-помощника. Как правило, там это название будет приведено подобным образом:
Пример типовой конфигурации
3. Ну и третий способ – воспользоваться материалом данной статьи, где я приведу примеры наиболее популярных конструкций в стандартном виде и их аналогов на английском языке.
Транслитерация — это запись кириллических слов латиницей (Анна → Anna, Самара → Samara). Её используют в загранпаспортах, водительских удостоверениях, трансграничной доставке, библиотечных каталогах и множестве других международных процессов.
Так вышло, что я недавно окунулся в эту тему, а в Википедии она раскрыта слабо. Поэтому расскажу, что к чему (спойлер — если вы думаете, что с транслитерацией всё плохо, то на самом деле всё ещё хуже).
И конечно, поскольку это Хабр — предложу open-source библиотеки для решения проблемы.
Кто виноват
Как приумножаются стандарты // xkcd
Получалось у них очень, очень плохо. Например, в загранпаспорте пишут Юлия → Iuliia не потому, что МИД хочет сделать вам больно, а потому что это международный стандарт ICAO Doc 9303 [1] — Machine Readable Travel Documents.
Такое ощущение, что все стандарты писались людьми, которые ненавидят русский язык. Если для англо-американского творчества это объяснимо, то что заставило советских учёных превратить Лёгкий в Ljogkijj (ГОСТ 16876-71 [2] ) — решительно непонятно.
Zato naši kosmičeskie korabli borozdili prostory vselennoj.
В 21 веке человечество оказалось с двумя наиболее распространёнными стандартами: ICO Doc 9303 (Юлия → Iuliia) и ISO 9:1995 (Юлия → Ûliâ), он же отечественный ГОСТ 7.79-2000 [3] . Достойный результат для столетних усилий, ничего не скажешь.
Посмотрев на эту «красоту», ребята из Википедии взялись за голову и сделали нормальную схему транслитерации [4] , благодаря которой у несчастной Юлии остаётся слабый шанс быть Yuliya. Международные и отечественные институты эту работу проигнорировали, к сожалению.
Yuliya, syesh yeshchyo etikh myagkikh frantsuzskikh bulok iz Yoshkar-Oly, da vypey altayskogo chayu.
Конечно, нельзя было делать совсем уж хорошо (а то кто тогда станет придумывать новые стандарты). Поэтому у Википедии ещё превращается в yeshchyo. Схема хорошо передаёт фонетику, а вот выглядит иногда не очень — оцените E → YE, Щ → SHCH и Ё → YO в этом примере.
Не остался в стороне и Яндекс. У него две схемы — отдельно для ФИО [5] , отдельно для адресов [6] . Здесь наконец-то сделали Щ → SCH. Но Юрий → Yurii, а Усолье → Usole, что понравится не всем. Не забываем оставлять пространство для новых стандартов!
И Студия Лебедева туда же (в рунете ничего без неё не обходится). Когда дизайнили схему московского метро, ребята отвергли стандарт ISO, а прочие, похоже, даже не смотрели. Ну и придумали свой вариант — Мосметро [7] .
Чтобы вы представляли масштаб бедствия. Я насчитал 20 схем транслитерации, некоторые из которых предусматривают альтернативные наборы правил (например, с диакритикой и без). Из них 14 считаются действующими. Четырнадцать действующих «стандартов», прямо как в комиксе xkcd.
Кстати, на Хабре тоже есть транслитерация — например, для генерации id заголовков из текста. И угадайте что? Ну да: она не следует ни одному из официальных стандартов.
Habr, chto ty delaesh, ahaha, prekrati
В качестве вишенки на торте в рунете несметное количество сервисов типа «транслитерация онлайн», которые мало того что перевирают существующие схемы, так ещё и придумывают собственные. Исходники у них закрыты, разумеется.
Есть ещё такая штука — «обратная транслитерация», когда вы восстанавливаете справедливость и превращаете Iuliia → Юлия. Тут ситуация даже хуже, чем в прямой транслитерации, потому что при записи латиницей никто никаких стандартов не соблюдает, и встречаются жуткие монстры.
Обратная транслитерация — отдельная большая тема, здесь я её не рассматриваю. Но есть отличная статья DaryaRodionova — «Как написать свой транслитератор» [8] .
Теперь несколько практических рекомендаций.
Как выбрать схему (быстрый вариант)
Загранпаспорт или в/у. По умолчанию используйте ICAO Doc 9303 — это требование закона. Впрочем, есть лайфхак: если написать отдельное заявление при подаче документов, сделают паспорт с нормальной транслитерацией. Тогда подойдёт старый стандарт МВД-310 [9] или Мосметро.
Если нужно обратимое преобразование (cyr–lat). Используйте ГОСТ 7.79-2000 (aka ISO 9:1995). Там есть вариант с диакритикой и без.
Если визуальная красота превыше всего. Используйте схему Мосметро, она сама лаконичная и приятная на вид.
В остальных случаях. Используйте схему Википедии. Она лучше всех по фонетике и лишь немного уступает Мосметро визуально.
Как выбрать схему (для дотошных)
Чтобы не раздувать статью до неприличия, я сделал страницу со всеми схемами [10] . Там и сценарии использования, и фильтры, и подробные описания, и примеры. Читайте, выбирайте, что больше нравится. Все схемы уже реализованы на JavaScript, Python и Go, подключить библиотеку — минутное дело.
Здесь же перечислю вкратце только актуальные схемы с моими комментариями.
ГОСТ 7.79-2000
Универсальная схема транслитерации, международный стандарт ISO 9:1995. Громоздкая, зато обратимая. Есть вариант с диакритикой.
ГОСТ Р 52290-2004
Стандарт для транслитерации имён собственных на дорожных знаках. Неплохая, с одинарными апострофами. Много внимания написанию Е и Ё.
ГОСТ Р 7.0.34-2014
Правила упрощенной транслитерации русского письма латинским алфавитом. Для библиотек и издательств. В меру приятная. Расслабленная: есть альтернативы для многих букв, можно без апострофов.
Телеграммы
Инструкция Минсвязи о порядке обработки международных телеграмм. Некрасивая, зато без апострофов.
ICAO DOC 9303
Стандарт Международной организации гражданской авиации. Используется МВД для ФИО в водительских удостоверениях, а МИД — в загранпаспортах. Подходит для гринкарты и вида на жительство. Используется некоторыми платёжными системами.
UNGEGN 1987 V/18
Схема транслитерации ООН для географических названий. Основана на ГОСТ 16876-71. Такая же страшная, но до сих пор не отменена.
BGN/PCGN
Древняя схема транслитерации ООН для географических названий. Почти без диакритики, но зачем-то оставила Ё с точками.
ALA-LC
Схема транслитерации американской Библиотеки Конгресса. Страшноватая. Есть варианты с диакритикой и без.
BS 2979:1958
Схема транслитерации Британской библиотеки. Используется издательством Oxford University Press. Изящно схлопывает окончания ИЙ и ЫЙ, в остальном так себе.
Научная
Великая праматерь всех схем. Используется в научных работах. Из неё вырос ГОСТ 16876-71. Достойна уважения за вклад в историю, но страшная.
Википедия
Схема транслитерации, которую использует Википедия. Сделана на основе BGN/PCGN со значительными модификациями. Самая продуманная, звучит лучше всех и выглядит приятнее большинства прочих схем.
Мосметро
Схема транслитерации, которую использует Московский метрополитен. Визуально самая приятная из всех, хотя уступает Википедии по фонетической точности. Придумана в Студии Лебедева, официально нигде не описана.
Яндекс.Деньги
Правила Яндекса для банковских карт. Простая и удобная схема.
Яндекс.Карты
Правила Яндекса для адресов. Слегка улучшенная версия Яндекс.Денег.
Как транслитерировать
Не пишите логику транслитерации с нуля — велик шанс ошибиться и получить очередную (N+1) схему транслитерации, «спасибо» за которую вам не скажут.
Не берите библиотеки с гитхаба без проверки. Все, что я смотрел — реализуют стандарт некорректно, если он чуть сложнее таблицы с однозначным соответствием.
Мы с mehanizm сделали аккуратные библиотеки с нормальными тестами для Python, JavaScript и Go. Но лучше дополнительно проверьте на паре примеров, а то вы ведь знаете этих программистов ツ
UPD Больше библиотек!
-
, Андрей Белянин , Антон Лаврентьев aka Homyakin , Massita , rrrad , Антон Перевощиков aka Fett , RinNas , Андрей Никифоров , Massita , petertretyakov
Пример использования (Python):
Схемы транслитерации описаны декларативно в JSON, лежат в отдельном репозитории. Если я какую-то пропустил — вы знаете, что делать ツ
И поделитесь в комментариях — приходилось вам сталкиваться с транслитерацией по работе или в жизни? Какие впечатления?
Читайте также: