Транслит в 1с это

Обновлено: 07.07.2024

Главная - Статьи - Транслитерация в 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;
КонецФункции

taterm; EarlyBird; Papilion; arccos6pi; pchelkatoo; lamp; Hellen; orehova123; LiliaYA; Redpirate; + 10 – Ответить

(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, лежат в отдельном репозитории. Если я какую-то пропустил — вы знаете, что делать ツ

И поделитесь в комментариях — приходилось вам сталкиваться с транслитерацией по работе или в жизни? Какие впечатления?

Читайте также: