1с 8.2 excel преобразование строки в число. Функций по работе со строками

Строки в 1С 8.3 во встроенном языке 1с представляют собой значения примитивного типа Строка . Значения данного типа содержат строку в формате Unicode произвольной длины. Переменные строкового типа являются набором символов заключенных в кавычки.

Пример 1. Создадим строковую переменную с текстом.

СтроковаяПеременная = "Привет мир!";

Функции работы со строками в 1с 8.3

В данном разделе будут приведены основные функции, позволяющие изменять строки в 1с, либо анализировать информацию содержащуюся в них.

СтрДлина

СтрДлина(<Строка>) . Возвращает количество символов содержащихся в строке, переданной в параметре.

Пример 2. Посчитаем количество символов в строке «Привет мир!».

Строка = "Привет мир!"; КоличествоСимволов = СтрДлина(Строка); Сообщить(КоличествоСимволов);

Итогом выполнения данного кода будет вывод на экран количества символов строки: 11.

СокрЛ

СокрЛ(<Строка>) . Отсекает незначащие символы, стоящие слева от первого значащего символа в строке.
Незначащие символы:

  • пробел;
  • неразрывный пробел;
  • табуляция;
  • возврат каретки;
  • перевод строки;
  • перевод формы (страницы).

Пример 3. Убрать все пробелы с левой стороны строки » мир!» и присоединить к ней строку «Привет «.

Строка = СокрЛ(" мир!"); Строка = "Привет "+Строка; Сообщить(Строка);

Итогом выполнения данного кода будет вывод на экран строки «Привет мир!».

СокрП

СокрП(<Строка>) . Отсекает незначащие символы, стоящие справа от первого значащего символа в строке.

Пример 4. Сформировать из строк «Привет » и » мир!» фразу «Привет мир!»

Строка = СокрП("Привет ")+" "+СокрЛ(" мир!"); Сообщить(Строка);

СокрЛП

СокрЛП(<Строка>) . Отсекает незначащие символы, стоящие справа от первого значащего символа в строке, также отсекает незначащие символы, стоящие слева от первого значащего символа в строке. Данная функция используется чаще предыдущих двух, так как она более универсальна.

Пример 5. Убрать незначащие символы стоящие слева и справа в наименовании контрагента.

Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "0777121211"); КонтрагентОбъект = Контрагент.ПолучитьОбъект(); КонтрагентОбъект.Наименование = СокрЛП(КонтрагентОбъект.Наименование); КонтрагентОбъект.Записать();

Лев

Лев(<Строка>, <ЧислоСимволов>) . Получает первые символы строки, число символов указывается в параметре ЧислоСимволов.

Пример 6. Пусть в структуре Сотрудник содержаться имя, фамилия и отчество сотрудника. Получить строку с фамилией и инициалами.

ИнициалИмени = Лев(Сотрудник.Имя, 1); ИнициалОтчества = Лев(Сотрудник.Отчество, 1); ПолноеИмя = Сотрудник.Фамилия + " " + ИнициалИмени + "." + ИнициалОтчества + ".";

Прав

Прав(<Строка>, <ЧислоСимволов>) . Получает последние символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Пример 7. Пусть в конце строковой переменной записана дата в формате «ггггммдд», получить строку с датой и преобразовать ее к типу Дата .

Строка = "Текущая дата: 20170910"; СтрокаДата = Прав(Строка, 8); Дата = Дата(СтрокаДата);

Сред

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Получает подстроку из строки переданной в параметре Строка , начиная с символа номер которого указан в параметре НачальныйНомер и длиной переданной в параметр ЧислоСимволов. Нумерация символов в строке начинается с 1. Если в параметре НачальныйНомер указано значение, меньшее или равное нулю, то параметр принимает значение 1. Если параметр ЧислоСимволов не указан, то выбираются символы до конца строки.

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

Строка = "Регион: 99 г. Москва"; Регион = Сред(Строка, 9, 2);

СтрНайти

СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Осуществляет поиск указанной подстроки в строке, возвращает номер позиции первого символа найденной подстроки. Рассмотрим параметры данной функции:

  • Строка . Исходная строка;
  • ПодстрокаПоиска . Искомая подстрока;
  • НаправлениеПоиска . Указывает направление поиска подстроки в строке. Может принимать значения:
    • НаправлениеПоиска.СНачала ;
    • НаправлениеПоиска.СКонца ;
  • НачальнаяПозиция . Указывает позицию в строке, с которой начинается поиск;
  • НомерВхождения . Указывает номер вхождения искомой подстроки в исходной строке.

Пример 9. В строке «Привет мир!» определить позицию последнего вхождения символа «и».

НомерПозиции = СтрНайти("Привет мир!", "и", НаправлениеПоиска.СКонца); Сообщить(НомерПозиции);

Итогом выполнения данного кода будет вывод на экран номера последнего вхождения символа «и»: 9.

ВРег

ВРег(<Строка>) . Преобразует все символы указанной строки в 1с 8 к верхнему регистру.

Пример 10. Преобразовать строку «привет мир!» к верхнему регистру.

СтрокаВрег = ВРег("привет мир!"); Сообщить(СтрокаВрег);

Итогом выполнения данного кода будет вывод на экран строки «ПРИВЕТ МИР!»

НРег

НРег(<Строка>) . Преобразует все символы указанной строки в 1с 8 к нижнему регистру.

Пример 11. Преобразовать строку «ПРИВЕТ МИР!» к нижнему регистру.

СтрокаНрег = НРег("ПРИВЕТ МИР!"); Сообщить(СтрокаВрег);

Итогом выполнения данного кода будет вывод на экран строки «привет мир!»

ТРег

ТРег(<Строка>) . Преобразует строку следующим образом: первый символ каждого слова переводится в верхний регистр, остальные символы слова переводятся в нижний регистр.

Пример 12. Сделать заглавными первые буквы слов в строке «привет мир!».

СтрокаТрег = ТРег("привет мир!"); Сообщить(СтрокаТрег);

Итогом выполнения данного кода будет вывод на экран строки «Привет Мир!»

Символ

Символ(<КодСимвола>) . Получает символ по его коду в кодировке Unicod.

Пример 13. Добавим слева и справа в строку «Привет Мир!» символ ★

СтрокаСоЗвездами = Символ("9733")+"Привет Мир!"+Символ("9733"); Сообщить(СтрокаСоЗвездами);

Итогом выполнения данного кода будет вывод на экран строки «★Привет Мир!★»

КодСимвола

КодСимвола(<Строка>, <НомерСимвола>) . Получает код символа в кодировке Unicode из строки указанной в первом параметре, расположенного в позиции указанной во втором параметре.

Пример 14. Узнать код последнего символа в строке «Привет Мир!».

Строка = "Привет Мир!"; КодСимвола = КодСимвола(Строка, СтрДлина(Строка)); Сообщить(КодСимвола);

Итогом выполнения данного кода будет вывод на экран кода символа «!» — 33.

ПустаяСтрока

ПустаяСтрока(<Строка>) . Проверяет состоит ли строка только из незначащих символов, то есть является ли она пустой.

Пример 15. Проверить является ли пустой строка состоящая из трех пробелов.

Пустая = ПустаяСтрока(" "); Сообщить(Пустая);

Итогом выполнения данного кода будет вывод на экран слова «Да» (строковое выражение логического значения Истина ).

СтрЗаменить

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

Пример 16. В строке «Привет Мир!» заменить слово «Мир» на слово «Друзья».

Строка = СтрЗаменить("Привет Мир!", "Мир", "Друзья"); Сообщить(Строка);

Итогом выполнения данного кода будет вывод на экран строки «Привет Друзья!»

СтрЧислоСтрок

СтрЧислоСтрок(<Строка>) . Позволяет посчитать количество строк в многострочной строке. Для перехода на новую строку в 1с 8 используется символ ПС (символ перевода строки).

Пример 17. Определить число строк в тексте:
«Первая строка
Вторая строка
Третья строка»

Число = СтрЧислоСтрок("Первая строка"+Символы.ПС +"Вторая строка"+Символы.ПС +"Третья строка"); Сообщить(Число);

Итогом выполнения данного кода будет вывод на экран количества строк в тексте: 3

СтрПолучитьСтроку

СтрПолучитьСтроку(<Строка>, <НомерСтроки>) . Получает строку в многострочной строке по ее номеру. Нумерация строк начинается с 1.

Пример 18. Получить последнюю строку в тексте:
«Первая строка
Вторая строка
Третья строка»

Текст = "Первая строка"+Символы.ПС +"Вторая строка"+Символы.ПС +"Третья строка"; ПоследняяСтрока = СтрПолучитьСтроку(Текст, СтрЧислоСтрок(Текст)); Сообщить(ПоследняяСтрока);

Итогом выполнения данного кода будет вывод на экран строки «Третья строка».

СтрЧислоВхождений

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>) . Возвращает число вхождений указанной подстроки в строку. Функция чувствительна к регистру.

Пример 19. Определить сколько раз входит в строку «Строки в 1с 8.3 и 8.2» буква «с», вне зависимости от ее регистра.

Строка = "Строки в 1с 8.3 и 8.2"; ЧислоВхождений = СтрЧислоВхождений(Врег(Строка), "С"); Сообщить(ЧислоВхождений);

Итогом выполнения данного кода будет вывод на экран числа вхождений: 2.

СтрНачинаетсяС

СтрНачинаетсяС(<Строка>, <СтрокаПоиска>) . Проверяет начинается ли строка переданная в первом параметре, со строки во втором параметре.

Пример 20. Определить начинается ли ИНН выбранного контрагента с цифры 1. Пусть в переменной Контрагент Контрагенты .

ИНН = Контрагент.ИНН; НачинаетсяСЕдиницы = СтрНачинаетсяС(ИНН, "1"); Если НачинаетсяСЕдиницы Тогда //Ваш код КонецЕсли;

СтрЗаканчиваетсяНа

СтрЗаканчиваетсяНа(<Строка>, <СтрокаПоиска>) . Проверяет заканчивается ли строка переданная в первом параметре, на строку во втором параметре.

Пример 21. Определить заканчивается ли ИНН выбранного контрагента на цифру 2. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты .

ИНН = Контрагент.ИНН; ЗаканчиваетсяНаДвойку = СтрЗаканчиваетсяНа(ИНН, "2"); Если ЗаканчиваетсяНаДвойку Тогда //Ваш код КонецЕсли;

СтрРазделить

СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>) . Разделяет строку на части по указанным символам-разделителям и записывает полученные строки в массив. В первом параметре хранится исходная строка, во втором строка содержащая разделитель, в третьем указывается, нужно ли записывать в массив пустые строки (по умолчанию Истина ).

Пример 22. Пусть у нас есть строка содержащая числа разделенные символом «;», получить из строки массив чисел.

Строка = "1; 2; 3"; Массив = СтрРазделить(Строка, ";"); Для Сч = 0 По Массив.Количество() - 1 Цикл Попытка Массив[Сч] = Число(СокрЛП(Массив[Сч])); Исключение Массив[Сч] = 0; КонецПопытки КонецЦикла;

В результате выполнения будет получен массив с числами от 1 до 3-х.

СтрСоединить

СтрСоединить(<Строки>, <Разделитель>) . Преобразует массив строк из первого параметра в строку, содержащую все элементы массива через разделитель, указанный во втором параметре.

Пример 23. Используя массив чисел из предыдущего примера, получить исходную строку.

Для Сч = 0 По Массив.Количество() - 1 Цикл Массив[Сч] = Строка(Массив[Сч]); КонецЦикла; Строка = СтрСоединить(Массив, "; ");

Тип «Строка» встречается во всех языках программирования. Он является примитивным, и в 1С существует много функций для работы с ним. В данной статье мы подробно рассмотрим различные способы работы со строковыми типами в 1С 8.3 и 8.2 на примерах.

Строка

Для того чтобы преобразовать переменную какого-либо типа в строку, существует одноименная функция «Строка()». Входным параметром будет сама переменная, строковое представление которой необходимо получить.

Строка(Ложь) // возвращает «Нет»
Строка(12345) // возвращает «12 345»
Строка(ТекущаяДата()) //»21.07.2017 11:55:36″

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

СокрЛП, СокрЛ, СокрП

В качестве входных параметров данных функций выступает переменная строкового типа. Функции удаляют незначащие символы (пробелы, переносы каретки и прочие): с левой и правой стороны, только с левой стороны, и только с правой соответственно.

СокрЛП(» Будут удалены пробелы с обеих сторон «) // «Будут удалены пробелы с обеих сторон»
СокрЛ(» Будут удалены пробелы с обеих сторон «) // «Будут удалены пробелы слева »
СокрП(» Будут удалены пробелы с обеих сторон «) // « Будут удалены пробелы справа»

Лев, Прав, Сред

Данные функции позволяют обрезать часть строки. Функция «Лев()» вернет часть строки с ее левой стороны указанной длины. Функция «Прав()» аналогично, но обрезка производится справа. Функция «Сред()» позволяет указать номер символа, с которого будет выделена строка и ее длину.

Лев(«Строковая переменная», 4) // возвращает «Стро»
Прав(«Строковая переменная», 7) // возвращает «еременная»
Сред(«Строковая переменная», 2, 5)// возвращает «троко»

СтрДлина

Функция определяет количество символов, которые содержатся в строковой переменной.

СтрДлина(«Слово «) // результатом выполнения будет число 5

Найти

Функция дает возможность искать в какой-либо строковой переменной часть строки. В качестве возвращаемого значения будет выступать число, которое показывает позицию начала найденной строки. Если совпадений не обнаружено, возвращается ноль.

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

Найти(«раз, два, раз, два, три», «два») // функция вернет число 6

ПустаяСтрока

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

ПустаяСтрока(«Пупкин Василий Иванович») // функция вернет значение Ложь
ПустаяСтрока(» «) // функция вернет значение Истина

ВРег, НРег, ТРег

Данные функции очень полезны при сравнении и преобразовании строковых переменных. «Врег()» вернет исходную строку в верхнем регистре, «НРег()» в нижнем, а «ТРег()» отформатирует ее так, что первый символ каждого отдельного слова будет с большой буквы, а все последующие с маленькой.

ВРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «ГЕНЕРАЛЬНЫЙ ДИРЕКТОР»
НРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «генеральный директор»
ТРег(«ГеНераЛьныЙ дИРЕктОр») // возвращаемое значение – «Генеральный Директор»

СтрЗаменить

Данная функция является аналогом замены в текстовых редакторах. Она позволяет подменять один символ или набор символов другим в строковых переменных.

СтрЗаменить(«красный, белый, желтый», «,», «;») // вернет «красный; белый; желтый»

СтрЧислоСтрок

Функция позволяет определить количество строк, разделенных переносом каретке в текстовой переменной.

Цикл, в приведенном ниже примере, пройдет три круга, так как функция СтрЧислоСтрок вернет значение 3:

Для инд=1 по СтрЧислоСтрок(«Строка1» + Символы.ПС + «Строка2» + Символы.ПС + «Строка3») Цикл
<тело цикла>
КонецЦикла;

СтрПолучитьСтроку

Данная функция работает с многострочным текстом так же, как и предыдущая. Она позволяет получить определенную строку из текстовой переменной.

СтрПолучитьСтроку(«Строка1» + Символы.ПС + «Строка2» + Символы.ПС + «Строка3», 2) // вернет «Строка2»

СтрЧислоВхождений

Функция подсчитывает количество вхождений символа или подстроки в искомой строке.

СтрЧислоВложений(«а;б;в;г; «, «;») // функция вернет число 4

Символ и КодСимвола

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

КодСимвола(«А») // функция вернет число 1 040
КодСимвола(1040) // функция вернет «А»

Частые задачи при работе со строками

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

Чтобы объединить несколько строк (произвести конкатенацию) достаточно использовать оператор сложения.

«Строка 1″ + » Строка 2″ //результатом сложения двух строк будет «Строка 1 Строка 2»

Преобразование типов

Для того, чтобы преобразовать тип в строку, например, ссылку на элемент справочника, число и прочее, достаточно использовать функцию «Строка()». Функции, подобные «СокрЛП()» так же будут преобразовывать переменные в строку, но уже сразу с отсечением незначащих символов.

Строка(1000) // вернет «1 000»

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

СтрЗаменить(Строка(1000),Символы.НПП,»») // вернет «1000»

Строка(Формат(1000,»ЧГ=»)) // вернет «1000»

Кавычки в строке

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

Заголовок = Строка(«ООО «»Рога и копыта»» — это мы!») // вернет «ООО «Рога и копыта» — это мы!»

Многострочность, перенос строки

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

МногострочныйТекст = «Первая строка» + Символы.ПС + «Вторая строка»

Как убрать пробелы

Для того, чтобы убрать пробелы справа или слева можно воспользоваться функцией «СокрЛП()» (а так же «СокрЛ()» и «СокрП()»):

СтрокаБезПробелов = СокрЛП(» Много букв «) // функция вернет значение «Много букв»

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

СтрокаБезПробелов = СтрЗаменить(Строка(99999),Символы.НПП,»») // вернет «99999»

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

СтрокаБезПробелов = СтрЗаменить(« п р и в е т», » » ,»») // вернет «привет»

Сравнение строк между собой

Сравнить сроки можно обычным знаком равенства. При сравнении учитывается регистр.

«Здраствуйте» = «здравствуйте» // вернет Ложь
«Здраствуйте» = «Здравствуйте» // вернет Истина
«Здраствуйте» = «До свидания» // вернет Ложь

Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». В ней пойдет речь о примитивных типах данных и наиболее распространенных функциях при работе с ними. Прочитав материал, вы узнаете:

  • Какие типы данных являются примитивными?
  • Как можно работать со строками и какие особенности следует учесть?
  • Какие тонкости работы есть с числовыми выражениями?
  • Как описать дату конкретным значением? Как задать пустую дату?
  • Как работает преобразование типов?
  • Null и Неопределенно – что это и в чем отличия?
  • Как определить, какой тип у объекта/переменной?

Применимость

Статья написана для платформы 1С версии 8.3.4.496, поэтому информация актуальна и для текущей версии платформы. Однако следует заметить, что в версии 8.3.6.1977 были добавлены новые функции работы со строками. Поэтому, когда будете повторять действия из статьи, не удивляйтесь, если в соответствующем разделе Синтакс-помощника вы увидите какие-то функции, которые не показаны у нас на скриншоте. Также рекомендуем ознакомиться с новым методом СтрокаСЧислом() , добавленным в платформе 8.3.10.

Примитивные типы данных и некоторые их функции

Выделяют следующие примитивные типы даннных:

Строковые константы

Примитивный тип данных Строка (строковая константа) состоит из различных символов. Строка всегда обрамляется кавычками. Пример строковой константы:

Сообщение.Текст = “Присутствуют незаполненные данные”;

Т.е. строка “Присутствуют незаполненные данные” присваивается реквизиту Текст объекта Сообщение . Все, что обрамлено в кавычки, считается строкой.

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

Текст = “Неверно заполнен реквизит”
“Проведение документа невозможно”;

Точка с запятой ставится только в конце последней строки.

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

Такой синтаксис наиболее часто используется в типовых конфигурациях. В частности, в языке запросов. Например:

Запрос.Текст =
“ВЫБРАТЬ
| Сотрудники.Наименование КАК Сотрудник,
| Сотрудники.ДатаРождения КАК ДатаРождения
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| НЕ Сотрудники.ЭтоГруппа”;

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

Т.е. нужно объединить, например, две строки, при этом между строками ставится знак сложения «+»:

Текст = “Неверно заполнен реквизит” + “Проведение документа невозможно”;

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

Если внутри строки какое-то слово нужно обрамлять в кавычки, то кавычку внутри строки нужно определять двойной кавычкой. Например:

Текст = “Ошибка в модуле “”Общий модуль1”””;

В данном примере первая кавычка открывает строку. Рядом стоящие вторая и третья кавычки обозначают знак кавычки.

А в конце получается три кавычки: самая последняя кавычка закрывает строку, две предыдущие обозначают знак кавычки.

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

Все эти функции доступны в любом месте конфигурации.

В синтакс-помощнике они находятся в разделе Общее описание встроенного языка Встроенные функции Функции работы со значениями типа Строка .

Функций достаточно большое количество и их обычно достаточно для работы со строковыми константами.

Разберем пример решения задачи с использованием строковых функций.

Условие задачи:

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

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

Например, строка “72 АВС 6АП 31 54ф -22” содержит два целых положительных числа: 72 и 31. Кроме пробелов, другие незначащие символы (такие как табуляция, возврат каретки) не используются. Функция должна возвращать количество целых положительных чисел.

Она должна размещаться в модуле управляемого приложения. Необходимо обеспечить ее вызов при запуске системы. Строку определить с помощью переменной.

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

Внутри обработчика определим переменную Строка , например:

Строка = “72 АВС 6АП 31 54ф -22”;

Количество = КоличествоЦелыхЧисел(Строка);

Оформим передачу сообщения о количестве целых чисел:

Сообщить(“Строка содержит ” + Количество + ” целых числа”);

При этом переменная Количество будет неявно преобразована к типу Строковая константа . Затем будет совершена операция конкатенации для трех строк и передано сообщение.

Определим начало и конец (т.е. шаблон) функции КоличествоЦелыхЧисел(Строка) .

Теперь рассмотрим один из возможных вариантов разработки функции КоличествоЦелыхЧисел(Строка) . При этом познакомимся с некоторыми встроенными функциями, предназначенными для работы со строками.

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

Синтаксис:

КодСимвола(,)

Параметры:

(обязательный)

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

Возвращаемое значение:
Код переданного символа. Код возвращается в соответствии с кодировкой Unicode.

Обратите внимание, что у параметра есть значение по умолчанию 1.

Строка тоже может состоять из одного символа. Таким образом, есть возможность определить код 0 и код 9, а коды всех остальных цифр находятся, как известно, в интервале между ними.

Определим соответствующие переменные и их значения:

Код0 = КодСимвола(“0”);
Код9 = КодСимвола(“9”);

Для решения задачи выберем следующую схему:

  1. Если в строке присутствуют начальные или конечные пробелы в любом количестве, то избавимся от них специальной функцией. Далее нас будут интересовать группы символов между внутренними пробелами. Если группа состоит из одних цифр, то это целое число. Есть специальная функция, с помощью которой можно определить позицию первого пробела.
  2. Получив позицию первого пробела, с помощью другой функции можно получить группу символов (подстроку) слева от пробела.
  3. Проанализируем символы, составляющие группу и определим: является ли она целым числом. Выявленные целые числа будем суммировать в специальной переменной.
  4. Укоротим начальную строку, выбрав с помощью еще одной функции все символы теперь уже справа от пробела. Данный пробел мог быть не один, а целая серия пробелов, идущих подряд, поэтому в оставшейся строке специальной функцией избавимся от всех крайних левых пробелов (идущих подряд) и вернемся к пункту 2. Будем повторять действия от пункта 2 до пункта 4, пока не достигнем состояния, что в строке не останется пробелов. В этом случае укороченная строка будет составлять последнюю группу анализируемых символов.

Теперь разберем функции, которые нам понадобятся для решения задачи.

СокрЛП
Синтаксис: СокрЛП()
Параметры: (обязательный).
Отсекает пробелы (незначащие символы), стоящие слева от первого значащего символа в строке, и стоящие справа от последнего значащего символа в строке.

Найти
Синтаксис: Найти(,)
Параметры: (обязательный), (обязательный).
Возвращает позицию первого знака найденной подстроки.
Нумерация символов в строке начинается с 1. Если строка не содержит указанной подстроки, то возвращается 0. В нашем случае в качестве подстроки будем использовать пробел (« »).

Лев
Синтаксис: Лев(,)
Параметры: (обязательный), (обязательный).
Выбирает первые слева символы строки. С помощью этой функции будем определять группы символов для анализа (слева до первого пробела).

СтрДлина
Синтаксис: СтрДлина()
Параметры: (обязательный).
Получает количество символов в строке. Будем использовать для определения длины строки.
Функция КодСимвола , которую будем использовать для выявления групп символов, являющихся целыми числами, описана ранее.

Прав
Синтаксис: Прав(,)
Параметры: (обязательный), (обязательный).
Выбирает крайние справа символы строки. С помощью этой функции будем выделять еще необработанную часть строки.

СокрЛ
Синтаксис: СокрЛ()
Параметры: (обязательный).
Отсекает пробелы (незначащие символы), стоящие слева от первого значащего символа в строке. Эту функцию используем для удаления возможных пробелов слева оставшейся части строки.

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

Числовые выражения

Числовыми могут быть переменные модулей и реквизиты объектов базы данных.
Для числа существует ограничение разрядности. Для числового реквизита длина целой части не может превышать 32 символов.

Точность дробной части не может превышать 10 цифр. Когда описывается переменная и присваивается ей числовое значение, то нигде не фиксируется ее разрядность. Тем не менее, для переменных тоже существуют ограничения.

В синтаксис-помощнике сказано, что максимально допустимая разрядность для числа – это 38 знаков. Такое ограничение не препятствует решению любых экономических задач, т.е. любую денежную величину можно описать с помощью этих чисел.

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

Операции, применимые для чисел:

  • обычные арифметические операции (-, +, *, /). У умножения и деления приоритет больше, чем у сложения и вычитания. Скобки имеют наивысший приоритет. Есть еще унарные операции + и -, у которых приоритет идет сразу за скобками;
  • операция “остаток от деления” (%). Например, 12%5=2;
  • математические функции, которые можно применять для чисел (тригонометрические функции, возведение в степень, извлечение квадратного корня, округление до указанной разрядности, выбор целой части числа)

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

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

Булевские значения

Что касается типа данных Булево, то здесь существует только два значения Истина и Ложь, которые могут быть получены различными способами.

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

Литералы типа Дата

Для описания даты существует два способа. Один из них с использованием литерала. Литерал пишется в одинарных кавычках.

Сначала пишется год, потом месяц и затем день.

При необходимости, можно указать и время, т.к. в системе 1С:Предприятие 8 любая дата содержит в себе и дату и время. Например:

ДатаДокумента = ‘ 20140315121020’;

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

ДатаДокумента =’2014.03.15’;

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

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

В системе 1С:Предприятие 8 пустая дата – это самое начало календаря. Варианты записи:

ПустаяДата = ‘00010101’;
ПустаяДата = Дата(1,1,1);

И та и другая запись вернет одинаковый результат, и эта дата будет считаться пустой.

Удобство функции Дата() в том, что мы можем передавать в нее не конкретные значения, а какие-то переменные. Т.е., иногда мы дату конструируем, собирая разные переменные.

Для даты применима операция сложения. Операция сложения прибавляет к дате указанное количество секунд.

Преобразования примитивных типов данных

В операторе присваивания, где суммируется несколько переменных (например, Переменная = А + В + С ), возможно преобразование примитивных типов данных. Преобразование типа данных осуществляется по значению первого типа данных.

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

И так, строка + число = строка. Иногда число можно сложить со строкой, в том случае, если из строки можно выделить какое-то числовое значение (например, 123 + “456”).

Для логического типа данных применимы выражения:

Истина И 1 = Истина;
Истина И 0 = Ложь.

Любое число больше нуля преобразуется в Истина, 0 преобразуется в Ложь.

Дату можно, как отмечалось раньше, складывать с числом. Дату можно также складывать с булевым типом данных.

В этом случае Истина преобразуется в 1, а Ложь в 0.

Кроме преобразования типов в операторах возможно явное преобразование типов с использованием соответствующих функций: Строка(), Число(), Дата(), Булево() .

К Строке конвертируется любой тип данных.

Число может быть получено из Строки или из Булево. Булево конвертируется: Истина в 1, Ложь в 0.

К Дате можно привести строку, если там будет содержаться значение даты. Например, Дата(“20140315”). Как отмечалось ранее, возможно преобразование по позициям:

Дата(,).

В Булево можно преобразовать Число и само значение Булево.

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

Примитивные типы данных Число, Строка, Дата и Булево могут выступать в качестве полей базы данных.

Значения типа NULL и Неопределено

NULL – это литерал. Применяется он, как правило, в запросах к базе данных, когда соединяются две и более таблиц.

Именно отсутствующие записи во второй таблице и заполняются значением типа NULL. Т.е. это некое отсутствующее значение.

В дальнейшем, при обработке получившегося результата это нужно учитывать, так как NULL – это не ноль, а соответствующий тип данных.

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

Значение типа NULL можно получить и во встроенном языке. Можно определить некоторую переменную и присвоить ей это самое значение NULL. Однако подобное присваивание в программном коде практически никогда не используется.

Т.е. NULL – это действительно тот тип данных, который получается при работе с запросами. Значение NULL именно на языке запросов нужно отрабатывать по-особенному.

А именно, на уровне запросов не будет работать сравнение A=NULL, нужно будет применять специализированные функции. Однако во встроенном языке сравнение со значением NULL будет корректно отработано.

Тип данных Неопределено – это не пустое значение какого-либо реквизита.

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

Данный тип (Неопределено) появляется, во-первых, если у нас есть некая переменная и она не инициализировна (тип данных не определен).

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

Например, поиск элемента справочника по наименованию в том случае, если у какого-либо справочника нет такого наименования элемента. Метод НайтиПоНаименованию будет возвращать значение Неопределено .

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

Если имеется список документов, и этот список пустой (в нем, соответственно нет ни одной строки), то текущая строка будет принимать значение Неопределено .

Если в информационной базе есть реквизит с составным типом данных, то пустое значение данного реквизита будет равно Неопределено .

Но если тип данных будет не составным, то пустое значение будет соответствовать пустому значению данного типа (для даты – это первая секунда первого часа первого дня первого месяца первого года).

NULL и Неопределено – это и типы данных и значения в этих типах, причем одно единственное. Для NULL – это значение NULL, для Неопределено – Неопределено.

Тип данных Тип

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

Т.е. в алгоритме нужно понять, какой тип у данного объекта.

Примечательно, что этот тип данных не имеет литерала. Мы не можем его написать, как например, NULL или Неопределено, но мы можем получить значение этого типа с помощью двух функций Тип и ТипЗнч .

Для того, чтобы получить тип некоторого объекта (это может быть переменная, либо реквизит базы данных, либо реквизит формы), используется функция ТипЗнч .

В эту функцию передается тот объект, для которого требуется получить тип данных.

В качестве возвращаемого значения эта функция возвращает именно тип типа тип.

В дальнейшем следует его сравнить с каким-либо интересующим типом. Например:

Если ТипЗнч(Элемент) = Тип (“СправочникСсылка.Номенклатура”) Тогда
Сообщить(“Это товар”);
КонецЕсли;

В заключение давайте подведем итог по всему пройденному материалу.

Мы рассмотрели базовые конструкции встроенного языка 1С, научились использовать переменные и операторы, разобрались, для чего и как использовать процедуры и функции. Заметим, что в основном весь наш программный код до этого момента был самодостаточным – мы всё писали сами с нуля и по минимуму использовали какие-то объекты конфигурации или встроенного языка.

В следующей статье мы изучим эти объекты более детально, поэтому не переключайтесь! ;)

Всем привет
Сегодня попросили меня при печати документа реализации не выводить префикс документа, задачу решил следующим образом.

СтрЗаменить(Номер, Лев (Номер, 3 ), "" );

Когда заглянул в синтакс-помощник так мне это понравилось, что захотелось написать о работе с строками в «1С:Предприятие» .

Строка в 1С относится к примитивному типу данных.

Если посмотреть в справку 1С увидим следующее описание типа Строка (String)
Значения данного типа содержат строку в формате Unicode произвольной длины.
Если своими словами о строках то получится. Строка — константа, состоящая из различных символов, обрамляется всегда кавычками.

Задание строки
Обращение = «Привет пассажир»;

Многострочные строки в типовых конфигурациях чаще всего создаются с помощью вертикального разделителя «|»:
Строка = «Многострочная
|строка
|пиши
|текст»;

Кавычка внутри строки задаются двойными кавычками.
Строка = «»Текст в кавычках»»;

Над строками существует множество операций (поиск в нутрии строки, определение первых и т.д.), лучше посмотреть Синтакс-помощник.
Синтакс-помощник — Общее описание встроенного языка-> встроенные функции-> функции по работе со строками.

Функций по работе со строками

Здесь в краткой форме приведу функций по работе со строками:

ВРег(<Строка>) — Все символы строки функция преобразует в верхний регистр.

КодСимвола(<Строка>, <НомерСимвола>) – Функция получает код символа, расположенного в переданной строке в позиции с указанным номером.

Лев(<Строка>, <ЧислоСимволов>) – Функция выбирает первые слева символы строки.

Найти(<Строка>, <ПодстрокаПоиска>) — Функция находит вхождение искомой строки как подстроки в исходной строке.

НРег(<Строка>) — Функция преобразует все символы строки в нижний регистр.

Прав(<Строка>, <ЧислоСимволов>) – Данная функция отличается от функций Лев (Left) тем что выбирает последние справа символы строки.

ПустаяСтрока(<Строка>) — Функция проверяет строку на наличие значащих символов.

Символ(<КодСимвола>) — Функция преобразует код символа в строку, содержащую символ.

СокрЛ(<Строка>) — Функция отсекает незначащие символы, стоящие слева от первого значащего символа в строке.

СокрЛП(<Строка>) — Функция отсекает незначащие символы, стоящие слева от первого значащего символа в строке, и пробелы, стоящие справа от последнего значащего символа в строке.

СокрП(<Строка>) — Функция отсекает незначащие символы, стоящие справа от последнего значащего символа в строке.

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) — Функция выбирает строку символов, начиная с символа <НачальныйНомер>, общим количеством <ЧислоСимволов>.

СтрДлина(<Строка>) — Функция получает количество символов в строке.

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) — Функция находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

СтрПолучитьСтроку(<Строка>, <НомерСтроки>) — Функция получает строку многострочной строки по номеру.

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>) — Функция вычисляет число вхождений подстроки поиска в исходной строке.

СтрЧислоСтрок(<Строка>) — Функция считает число строк в многострочной строке. В многострочной строке, строки разделены символами перевода строк.

ТРег(<Строка>) — Функция преобразует строку к титульному регистру. Это означает, что у каждого слова первый символ преобразуется к титульному регистру или к верхнему регистру, если титульный регистр для символа не определен. Остальные символы преобразуются к нижнему регистру.

Преобразования типов
Для явного преобразования типов данных существуют функции одноименные с типом данных, к которому происходит преобразование: Строка(<Значение>)

СтрокаИзЧисел= Строка(Число);

Все данные функции подробно описаны в Синтакс-помощник, как начинающему программисту может помочь Синтакс-помощник, я описал в статье .

Примеры по работе с строками

Преобразование числа в строку и обратно.

Для получения строкового представления года следует использовать функцию Формат.

Год = Формат(ТекущаяДата(), "ДФ=yyyy" ) // Год = "2012"

Чтобы преобразовать число к строке без вставки символа-разделителя групп (неразрывного пробела), необходимо применить функцию Формат с параметром ЧГ=0:

Число = 2012 Строка = Формат(Число, "ЧГ=0" ); //Строка = "2012"

Строка Без пробелов.

В продолжение темы:
Смартфоны

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

Новые статьи
/
Популярные