Как определить кодировку строки 1с

Обновлено: 05.07.2024

Войдите как ученик, чтобы получить доступ к материалам школы

Внутренний язык программирования 1С 8.3 для начинающих программистов: работа со строками в 1С

Автор уроков и преподаватель школы: Владимир Милькин

Друзья, сегодня будет интереснейший урок. Мы научимся выполнять операции со строками (мы проходили их здесь).

Наверное, не найдётся ни одного языка программирования, который не давал бы возможностей для обработки строк. Настолько это фундаментальный и необходимый тип данных.

И 1с в этом смысле не исключение. Я, как обычно, прошу вас повторять и проверять у себя весь код, который мы будем писать в этом уроке.

Откуда в программе появляются строки

Сам программист может закодировать определенное значение строки прямо в коде, используя двойные кавычки .

. и далее использовать его по своему усмотрению:

Бывает и так, что значение строки должен ввести сам пользователь. Это делается при помощи команды ВвестиСтроку:

Из чего состоит строка

Любая строка состоит из символов.

К примеру, строка "привет" состоит из символов 'п', 'р', 'и', 'в', 'е', 'т'.

К этим символам можно обращаться по их порядковому номеру. При этом нумерация символов в строке (в отличие от коллекций) начинается не с 0, а с 1.

Узнать общее количество символов в строке можно при помощи функции СтрДлина. Она принимает на вход строку и возвращает нам число символов в этой строке.

Таким образом, цикл обхода строки будет таким:

Если мы запустим эту программу на компьютере, то увидим такой результат:

Мы научились получать номера символов в строке, но как получать сами символы?

За получение нужного символа (или даже группы символов) из строки отвечает функция Сред (сокращение от слов "средина", "средний").

Она принимает три параметра:

  • Саму строку.
  • Номер символа в строке, который нужно получить.
  • Количество символов, которое нужно получить.

В нашем случае мы будем получать по одному символу, поэтому третий параметр у нас всегда будет равен 1.

Итак, перепишем наш код вот так:

Теперь вывод будет совсем другим:

Что представляет из себя символ

Мне иногда кажется, что всё в этом мире есть числа . И символы строки, кстати, не исключение.

И это на самом деле так, ведь каждому значению символа соответствует определенное число, его код.

Зачем вообще может понадобиться переводить символ в числовой код и обратно? Например, если мы захотим написать программу для шифрования и дешифрования текстов. А мы захотим и сделаем это в следующем модуле школы.

За перевод символа в числовой код отвечает функция КодСимвола. Она принимает строку и порядковый номер символа в ней, а возвращает числовой код этого символа.

Давайте выведем числовой код каждого символа нашей строки:

Запустим эту программу, вывод будет таким:

Получается, что, к примеру, символу 'п' соответствует числовой код 1087? Да, это действительно так. Проверим это.

Для этого я сообщу вам способ для обратного перевода: из числового кода в символ. За такой перевод отвечает функция Символ. Она принимает на вход числовой код, а возвращает символ.

Объединение строк

Давайте представим, что у нас есть две вот такие строки .

. и мы хотим сложить (ещё говорят "склеить", "объединить") эти строки вместе, чтобы за значением первой строки сразу следовало значение второй.

Это делается при помощи оператора плюс (+), вот так:

Выведем эту строку пользователю:

Выглядит не очень, правда?

Давайте усложним задачу - требуется объединить эти строки, но между ними вставить пробел, а в конце добавить восклицательный знак.

Вот так гораздо лучше!

Поиск в строке

Давайте рассмотрим такую интересную задачу. Попросим пользователя ввести любой текст, но чтобы в нём встречалось (или нет) слово "счастье".

А в ответ мы будем говорить пользователю в какой позиции в строке находится это слово.

К примеру, если пользователь введёт строку "высыпаться по утрам - счастье", то программа должна ему сказать, что слово "счастье" есть в строке и оно находится в позиции 23.

Будем писать программу по частям.

Сначала напишем ввод строки от пользователя:

За поиск в строке отвечает функция СтрНайти.

На вход она принимает 2 параметра (на самом деле параметров больше, но мы рассмотрим только первые два):

  • Строку, в которой надо искать.
  • Часть строки (её ещё называют "подстрока"), которую надо найти.

Функция возвращает 0, если вхождение не найдено и позицию в строке, если вхождение найдено. Функция ищет только первое вхождение подстроки в строку.

С учётом этого продолжим написание программы вот так:

Замена в строке

А давайте подшутим над пользователем?

Пусть он введёт строку со словом "счастье", а мы выведем его же строку, в которой заменим слово "счастье", например, на "удовольствие".

За замену одной части строки на другую отвечает функция СтрЗаменить.

На вход она принимает 3 параметра:

  • Строку, в которой нужно сделать замену.
  • Подстроку, которую надо найти и заменить.
  • Подстроку, на которую нужно заменить.

Функция возвращает строку, полученную в результате замены. При этом функция заменяет все вхождения.

Верхний и нижний регистры

А вы заметили, что один и тот же символ может иметь два варианта, например: 'п' и 'П'. Первый вариант называется "нижний регистр", а второй - "верхний регистр".

И для компьютера это разные буквы. Мы можем легко в этом убедиться, если выведем числовые коды этих букв:

Именно поэтому для компьютера, к примеру, строка "привет" будет не равна строке "Привет":

Компьютер при сравнении строк сравнивает числовой код каждого символа одной строки с соответствующим ему (по порядку) числовым кодом символа другой строки. И если есть хотя бы одно неравенство - строки считаются различными.

Но у нас есть замечательная возможность менять регистр строк: из верхнего в нижний и наоборот. За это отвечают функции НРег (сокращение от "нижний регистр") и ВРег (сокращение от "верхний регистр").

Когда это может быть полезно? Вспомните задачу, когда мы заменяли слово "счастье" на "удовольствие".

Функция СтрЗаменить (как и Найти) ищет подстроку с учётом регистра. То есть если пользователь введет вместо "счастье", например, "Счастье", то программа не найдёт этого вхождения.

И чтобы поиск и замена не зависели от того в каком регистре ввёл строку пользователь, мы напишем вот так:

Теперь, даже если пользователь введёт "Любимая работа - это СЧАСТЬЕ!" программа сможет найти слово "счастье" и вывести пользователю "любимая работа - это удовольствие!".

Подведём итоги

Мы рассмотрели основные операции над строками, но на самом деле их больше.

Некоторые из них вы можете изучить вместе с примерами в справочнике по языку 1с.

В качестве примера работы функций работы со строками 1С мы хотели бы создать автоматический анализ текста. Текст мы будем брать из файла. Результат анализа выводить в произвольном виде пользователю.

Нам нужно создать внешнюю обработку, которая позволит нам выбрать текстовый файл и запустить анализатор.

Итак, создаем внешнюю обработку: Конфигуратор/Файл/Новый/Внешняя обработка.


Добавляем форму. На форме нам нужно разместить поле выбора текстового файла и кнопку анализа.

На форму разместим обычное текстовое поле. Длина строки – неограниченная, ведь путь к файлу (имена каталогов) может быть значительным.

Чтобы пользователю не пришлось вписывать имя файла, а можно было выбрать его – у поля включим кнопку выбора.

Имя поля изменим на «ИмяФайла», имя связанного реквизита формы изменится на такое же автоматически.


В качестве кнопки будем использовать автоматически добавленную платформой кнопку «Выполнить» (и у нее уже подключен обработчик – удобно).

В тонком клиенте мы самостоятельно создадим реквизит формы «ИмяФайла». Перетащим реквизит на форму. В свойствах элемента формы также включим кнопку выбора.


В качестве кнопки – создадим команду «Выполнить», назначим ей обработку и перетащим на форму.


Первое, что нам нужно сделать – обработать нажатие кнопки выбора – показать по нажатию диалог выбора файла.

Зайдем в свойства нашего текстового поля на форме (в толстом клиенте – левой кнопкой мыши прямо на поле, в тонком – на имя поля в списке), и укажем обработчик события «НачалоВыбора».


Внутри функции обработчика, которую создаст 1С при назначении, впишем нехитрый код:

Теперь у нас есть имя файла. Нам нужно «достать» его содержимое и вызвать анализ текста.

У нас уже есть обработчик кнопки «Выполнить». В толстом клиенте кнопка и ее обработчик были созданы автоматически конфигуратором 1С. В тонком клиенте мы добавляли ее ручками.

Впишем в обработчик код, который считает файл в строку:

Касательно кодировки файла. Если создать объект ЧтениеТекста() без параметра с указанием кодировки – 1С попытается самостоятельно определить кодировку (по сигнатуре Byte Order Mark – BOM, или будет считать его кодировку ANSI).

Вы можете указать нужную кодировку напрямую, например так:
Файл = Новый ЧтениеТекста(ИмяФайла, "UTF-8"); //имя кодировки подставить нужное

Добрый день !
Столкнулся с такой проблемой, необходимо через обработку на FTP создать папку с русским наименованием, но не получается правильно кодировать в utf-8. Кто нибудь сталкивался с таким ? Можете помочь ?

Использовал такую функцию:

текст в процедуре:

Папка создается но наименование не "Тест", а выдает квадраты или знаки вопроса. __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Конвертирование из Utf-8 в win-1251 .
Привет ! Есть дамп таблиц Mysql базы кодировка utf 8 надо его перевести в кодировку сайта charset.


Кодировка в Delphi Windows-1251 -> UTF-8 uurlencoded
Добрый вечер дорогие формучане, требуется помощь, бьюсь уже неделю, не могу ничего найти в.

Перекодировка строки win-1251 в кодировку utf-8
Помогите пожалуйста! есть проблема перекодировки строки win-1251 в кодировку utf-8. Может есть.

Apple2155, чего.
В 1С используется кодировка ТОЛЬКО utf-8 (если из твоего примера)

Это FTP не в кодировке utf-8 отображает.


Какая разница между UTF-8 И WIN-1251
И какой лучше, ну и соответственно опишите какая разница между ними. заранее спасибо

Как создать рабочий XML в UTF-8? У меня исправно создаётся Windows-1251, но с UTF-8 проблема
Доброго дня, форумчане. Подскажите, что делать, чтобы создавался и открывался без ошибок.


UTF-16 -> cp-1251(windows-1251)
У меня есть кириллическая строка UTF-16, которая выглядит как Хотелось бы конвертнуть её в.

UTF-8 to WINDOWS-1251
Здравствуйте! Надо вот чего. Есть строка в UTF-8. После перекодировки функцией `UTF8ToString`.

из UTF-8 в Windows-1251
Как строку в формате UTF-8 перекодировать в Windows-1251? Добавлено через 16 минут Существуют.

При печати таб.документа,в том числе при печати на принтер возникает проблема с отображением казахских символов(см.скриншот)
Если нажать на редактирование строки - текст отображается нормально "Әбдірахман Мәулетқалиқызы".

При копировании в различные виды текстовых редакторов текст также отображается нормально.
При сохранении в Эксель - также нормально.
В другом таб.документе эти же данные отображаются корректно.
Вопрос риторический - что делать?

Сворачивание записей в табличном документе
Всем доброго времени суток. :) Совсем недавно начала изучать Предприятие 1с 7.7, столкнулась с.

Не печатает нули в табличном документе
В обработке куча строк, но интересующий фрагмент кода ВыводОтчета = Ложь; Если.

Очистка строк в табличном документе
Событие Команды &НаКлиенте Процедура Команда1(Команда) НаСервере(); КонецПроцедуры .

Присоединить область в табличном документе
Пытаюсь вывести колонками в ТД через присоединение областей и при выводе выводит после каждой.

совет,
заходим в сп,
берем пример сп,
парсим его на тему всех возможных кодировок,
и сохраняем таб док во всех возможных вариантах.
и смотрим который лучший.
радуемся
з.ы.ура я первый

Добавлено через 7 минут
метод записать()
там типы файлов
пробежаться по всем типам

если по ним есть особенности, то и по ним пробежаться.
100% должно будет найтись.
или в самом файле уже поменять кодировку при отображении попробовать.

Так мне не надо его сохранять)
Он формируется и отображается пользователю командой "ТабДок.Показать()"

А пользователь сам уже решает что с ним сделать:печатать,или сохранять. И чаще всего отправляют на печать сразу из окна табличного документа.

И в итоге видят эти "Окошки" в данных сотрудника

Добавлено через 6 минут
Уже и шрифты менял..TNR стоит во всех макетах..и только в 1 такая проблема

В другом таб.документе эти же данные отображаются корректно.

взять другой таб док который нормальный и показать его пользователю, чтобы он сам решал , что с ним делать

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