Загрузка данных
Переменные типа Строка
Теперь мы будем учиться работать со строками.
Создайте новую обработку, в которой Вы будете проводить все манипуляции с
переменными типа Строка. Как Вы делали в предыдущих частях.
Зададим три переменных типа строка (напомню, они задаются посредством написания
текста в кавычках).
Рис. 1.5.1
Первая операция, которую мы разберем, это сложение строк или операция
конкатенации:
46
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.2
Добавляем процедуру Сообщить, чтобы посмотреть что получилось.
Рис. 1.5.3
Сохраните обработку, запустите и посмотрите, что вышло в окно сообщений.
Как Вы заметили из данного примера, строки можно складывать как посредством
переменных типа строка, так и посредством написания самой строки.
Т.е. можно написать и так:
Рис. 1.5.4
Подправьте предыдущий код, и в окно сообщений должна выйти следующая надпись:
Рис. 1.5.5
Теперь рассмотрим очень интересный и нужный для нас набор системных значений
это Символы. Всего данный набор содержит 6 значений, и мы поочередно рассмотрим
некоторые из них на примере Иванова Иван Ивановича. Добавляйте код из картинок в Вашу
обработку, и смотрите, что будет выходить в окно сообщений.
Первое значение это Возврат каретки, т.е. текст переносится на новую строку в
начало.
Рис. 1.5.6
47
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Следующее значение - это Горизонтальная табуляция, имитирует нажатие клавиши
«Tab» на клавиатуре при написании текста.
Рис. 1.5.7
Продолжаем, теперь символ пробела, называется Символ непрерывного пробела.
Рис. 1.5.8
Следующий символ, который нас интересует, это Перенос строки
Рис. 1.5.9
Еще перенос строки можно сделать, используя символ «|» (вертикальная черта), тогда
надо на строке оставлять кавычку открытой, а на следующей строке, не открывая кавычку,
сразу ставим вертикальную черту. Например.
Рис. 1.5.10
Символ возврат каретки и перенос строки абсолютно идентичен.
Символы Перевод формы и Вертикальная табуляция в данной главе мы
рассматривать не будем. А пока поэкспериментируйте с данным набором символов,
попробуйте использовать разные комбинации символов.
У многих новичков возникает вопрос, как задать кавычки непосредственно в тексте.
Сделать это очень просто. Смотрим пример
Рис. 1.5.11
Все очень просто: пишем сдвоенные кавычки, и внутри нужное слово.
48
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Диалог для ввода строк
Разберем, каким образом пользователю вводить интерактивно (без участия формы)
строки.
Для этого мы будем использовать функцию ВвестиСтроку. Она возвращает
Истину, если строка введена, и Ложь, если нет. В последующих главах мы узнаем, как
использовать данное свойство функции.
Рис. 1.5.12
Напишите этот код в обработке, сохраните ее и запустите «1С:Предприятие». При
нажатии кнопки «Выполнить», должно выйти следующее окно:
Рис. 1.5.13
Введите в нее любую фамилию, имя, отчество, нажмите кнопку «ОК» и посмотрите
что получиться.
Разберем теперь данную функцию. Она имеет следующий синтаксис:
ВвестиСтроку(<Строка>, <Подсказка>, <Длина>, <Многострочность>)
Где
«Строка» это переменная, в которую мы запишем введенное пользователем значение.
«Подсказка» это заголовок окна.
«Длина» это длина строки, т.е. максимальное количество символов, которое поместится в
окно.
«Многострочность» это признак многострочности. Если он указан Истина, то можно
вводить несколько строк, это, по сути, текст. Измените параметр на Истина. В результате
выйдет следующее окно:
49
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.14
Обязательным является только первый параметр. Т.е. данную функцию можно
написать и так
Рис. 1.5.15
Посмотрите, что получится в этом случае.
Теперь Вам небольшое задание: переделайте код, показанный выше с фамилией,
именем, отчеством, так, чтобы данные значения вводились пользователем самостоятельно.
Функция СтрДлина
Так, с самими строками разобрались, с интерактивным вводом строк понятно - теперь
перейдем к изучению функций и процедур для работы со строками.
Первая наша функция будет СтрДлина. Данная функция возвращает длину строки,
т.е. количество символов в строке, включая пробелы, возвраты кареток, переносы, табуляции
и т.д.
Напишите в обработке следующий код:
50
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.16
Теперь введем любое ФИО и смотрим результат:
Рис. 1.5.17
Как видим, длина строки «Петр Николаевич Иванов» - 22 символа.
Функция простая, и каких-то особых комментариев не требуется.
Функции СокрЛ, СокрП, СокрЛП
Часто бывают случаи, когда строка может задаться пользователем либо перенестись из
другой программы в виде
«Иванов Иван Иванович »
И много пробелов в конце строки.
Для того чтобы отсечь все эти ненужные пробелы, есть специальные функции
СокрЛ(<Строка>) – отсекает пробелы слева.
СокрП(<Строка>) – отсекает пробелы справа.
СокрЛП(<Строка>) – отсекает пробелы справа и слева
Чтобы продемонстрировать возможность этих функций, напишите в обработке такой
код
51
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.18
После запуска обработки и выхода окна для ввода строки, специально добавьте
пробелы перед самой строкой и после.
Рис. 1.5.19
Результат должен получиться следующим:
Рис. 1.5.20
Данные пробелы нам мешают. Их надо убрать, для этого используем
вышеприведенные функции.
Чтобы показать это, допишите следующий код:
Рис. 1.5.21
Посмотрите, как должно получиться:
52
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.22
Мой Вам совет: как можно больше злоупотреблять данными функциями, поскольку
часто многие пользователи по ошибке или по иным причинам ставят пробелы после уже
введенного слова. А потом при дальнейшей работе это выглядит очень некрасиво.
Используйте данные функции в том коде, где Вы вводите ФИО отдельно, попробуйте
ставить лишние пробелы, и посмотрите, что из этого у Вас получится.
Функции Лев, Прав
Рассмотрим функции Лев и Прав
Данные функции выбирают нужное количество символов слева и справа строки
соответственно.
Рассмотрим функцию Лев. Данная функция выбирает слева нужное количество
символов. Она пишется в таком виде
Лев(<Строка>,<КоличествоСимволов>)
Где:
«Строка» – та строка, которую функция обрабатывает.
«КоличествоСимволов» – количество символов, которые будут выбраны.
Разберем это на уже знакомом примере с фамилиями. Внесите в Вашу обработку
следующий код:
Рис. 1.5.23
Выйти должна следующая строка:
Рис. 1.5.24
Рассмотрим другой пример.
53
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Имеем, к примеру, автомобильные номера вида «ва345укRU23».
По условиям задачи код региона всегда будет состоять из двух символов. Надо
получить номер без кода региона.
Рис. 1.5.25
Смотрим.
Данный код должен выводить следующий результат:
Рис. 1.5.26
Теперь перейдем к функции Прав. Эта функция выбирает справа нужное количество
символов. Она пишется в таком виде
Прав(<Строка>,<Количество символов>)
Где:
«Строка» – та строка, которую функция обрабатывает.
«Количество символов» – количество символов, которые будут выбраны.
Рассмотрим ее на нашем примере с номером, только на этот раз получим код региона.
Рис. 1.5.27
Данный код должен выводить следующий результат:
Рис. 1.5.28
А теперь используя функцию Лев и Прав, получите три цифры номера.
Рассмотрим другой пример, который использует также функцию СтрДлина. Иногда
54
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
некоторые поставщики товар выгружают с артикулом перед наименованием, выглядит это, к
примеру, так
«34221 Ручка шариковая» или
«23444 Тетрадь в клетку, 12 листов»
Мы знаем, что артикул состоит из 5 символов, нам надо их отсечь. Как это сделать?
Для этого нам надо отобрать справа количество символов равное длине названия без
артикула. Сделать это необходимо так: узнать длину строки и вычесть из нее 5 (длина
артикула).
Рис. 1.5.29
На выходе должны получиться следующие строки:
Рис. 1.5.30
Пытливый читатель спросит, почему я вычел 5, а не 6 вместе с пробелом, а потом не
применил функцию СокрЛП. Дело в том, что в условиях задачи сказано, что длина артикула
5, а не 6. То, что между артикулом и названием стоит пробел, это не более чем особенность
выгрузки.
Может вполне быть и так:
Товар1 = "34221 Ручка шариковая";
Товар2 = "23444Тетрадь в клетку, 12 листов";
Что тогда получится, если Вы будете вычитать из длины 6?
А теперь потренируйтесь и получите отдельно артикул, и отдельно общее
наименование и выведите это в окно сообщений.
Функция Сред
В предыдущем примере я Вас попросил получить из номера три цифры, используя
55
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
функции Прав и Лев. Сейчас я расскажу, как можно это сделать проще. Для этого мы будем
использовать функцию Сред. Данная функция выберет из строки нужное количество
символов, начиная с определенного номера. Она имеет следующий синтаксис:
Сред(<Строка>,<Номер первого символа>, <Количество выбираемых символов>)
Разберем данную функцию подробно.
Где
«Строка» – это наша строка.
«Номер первого символа» - это номер, с которого начинается наша выборка.
«Количество выбираемых символов» - это количество выбираемых символов.
Теперь измените пример с номером:
Рис. 1.5.31
И посмотрите, как работает данный код.
Разберем еще один пример со знакомыми нам уже артикулами:
Рис. 1.5.32
В этом примере также первый параметр в функциях «Сред» – наша строка, второй -
это начало артикула (это первый символ), а третий – длина самого артикула.
Теперь задание. Используя данную функцию, получите название товара. Подсказка:
нужно применять функцию СтрДлина.
Функция Найти
Продолжаем изучение функций строк, и следующая функция это Найти. Данная
функция находит вхождение искомой подстроки в строку поиска и возвращает номер первого
символа искомой подстроки в строке поиска. Если подстрока не найдена, возвращается 0.
56
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Функция имеет следующий синтаксис
Найти(<Исходная строка>,<Строка поиска>).
Где:
«Исходная строка» – строка, в которой будем искать подстроку.
«Строка поиска»– сама подстрока поиска.
Теперь запишите в Вашей обработке следующий код:
Рис. 1.5.33
Запустите обработку, и Вы увидите, что функция возвратила цифру 8. Это и есть
номер символа, с которого начинается наша искомая строка.
Запомните эту функцию, она в Вашей работе может очень пригодиться. Хочу заметить
еще, если подстрока поиска входит по нескольку раз в нашу строку, то возвращается самый
первый номер вхождения.
Рассмотрим еще пример. Уже более практичный. Нам необходимо отделить имя от
фамилии в строке.
Напишите следующий код в Вашей обработке.
Рис. 1.5.34
Разберем данный код. Первое, мы вычислили номер первого пробела. Теперь нам
необходимо, зная эту информацию, получить имя контрагента. Используем функцию Сред.
Первый параметр – наша строка, второй параметр - номер пробела плюс один (т.к. имя
начинается со следующего символа, то прибавим единицу), а третий параметр это длина
оставшегося имени. Ее мы получим, если вычтем из общей длины строки номер, с которого
начинается пробел, и прибавим единицу (поскольку нам не нужна длина вместе с пробелом).
Теперь используя данную функцию получите фамилию контрагента.
57
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Функция СтрЗаменить
Еще одна функция, которая нам тоже много будет помогать, это функция
СтрЗаменить. Данная функция ищет определенную подстроку, если она найдена, то меняет
ее на другую подстроку. Она имеет следующий синтаксис:
СтрЗаменить(<Строка>,<Подстрока поиска>,<Подстрока замены>)
Где:
«Строка» - это та строка, с которой ведется работа.
«ПодСтрокаПоиска» – та строка, которую нужно найти.
«ПодСтрокаЗамены» – на что будет заменена «ПодСтрокаПоиска», если будет найдена.
Сделайте следующий пример:
Рис. 1.5.35
В заданной строке мы либо вообще уберем пробел, либо заменим его символом
подчеркивания. Посмотрите, как он у вас выполнится.
Рис. 1.5.36
Еще пара примеров на данную функцию:
Рис. 1.5.37
Теперь наоборот, допишем к вышеприведенному коду:
Рис. 1.5.38
58
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Самостоятельно в ФИО, сделайте Фамилию Имя и Отчество на новой строке, и чтобы
после каждого слова стояла точка.
Функция СтрЧислоВхождений
Немного похожая функция это СтрЧислоВхождений. Она вычисляет число
вхождений строки поиска в заданной строке.
Имеет следующий синтаксис.
СтрЧислоВхождений(<Строка>,<Подстрока Поиска>).
Где:
«Строка» это та строка, с которой работает данная функция.
«Подстрока поиска» это строка, количество вхождений которой вычисляет данная функция.
Рассмотрим пример.
Рис. 1.5.39
Мы задали строку с пробелами, и хотим выяснить, сколько пробелов в нашей строке.
Для этого используем функцию СтрЧислоВхождений, в которой задаем строку, и искомые
символы. В данном случае это пробел.
Сейчас мы рассмотрим функции для работы с многострочными строками.
Это функции СтрЧислоСтрок и СтрПолучитьСтроку.
Функция СтрЧислоСтрок
Начнем с функции СтрЧислоСтрок.
СтрЧислоСтрок(<Строка>)
Она имеет только один параметр - это сама строка, а возвращает количество строк в
заданной строке, если она многострочная. И 1, если это одна строка.
Сделайте следующий пример с использованием данной функции:
59
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.40
У Вас должен получиться следующий результат:
Рис. 1.5.41
Эта функция простая, и у Вас не должно возникнуть вопросов.
Функция СтрПолучитьСтроку
Следующая функция СтрПолучитьСтроку. Эта функция получает из многострочной
строки строку с заданным номером.
Она имеет следующий синтаксис.
СтрПолучитьСтроку(<Строка>,<Номер строки>)
Где:
«Строка» это заданная строка
«Номер строки» - номер строки, которая будет возвращена (нумерация строк ведется с 1).
Если номер будет больше количества строк или равен нулю, то ничего не вернется,
при этом ошибки тоже не будет. Функция вернет пустую строку.
Сделайте в Вашей обработке следующий пример:
60
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Рис. 1.5.42
В данном примере мы задаем многострочную строку. А потом получаем вторую
строку в ней.
Посмотрите самостоятельно, как будет работать этот код.
Небольшое задание: поразбивайте, как мы это делали прежде, ФИО на строки, и
получите какую-нибудь строку с помощью этой функции. Номер строки можете задавать
интерактивно с помощью функции ВвестиЧисло. Сделайте так, чтобы пользователь мог
вводить только целые числа.
Функции НРег, ВРег, ТРег
Теперь рассмотрим три очень похожие функции – НРег, ВРег, ТРег.
Первая функция приводит все символы в нижний регистр, вторая в верхний регистр,
третья в титульный регистр, т.е. первый символ слова будет верхним.
Задаются они очень просто
НРег(<Строка>)
ВРег(<Строка>)
ТРег(<Строка>)
Сделайте следующий пример:
Рис. 1.5.43
61
Низамутдинов И.И. ПРОГРАММИРОВАТЬ В 1С – ЗА 9 ШАГОВ.
Результат должен быть следующим:
Рис. 1.5.44
Функции простые. Теперь небольшое задание. В предыдущем примере, где несколько
строк, приведите первую строку в верхний регистр, вторую - в нижний регистр, третью - в
титульный регистр.
Функция ПустаяСтрока
И самая последняя функция, которую мы рассмотрим, будет ПустаяСтрока.
Она имеет один параметр - саму строку, и возвращает Истина, если строка пустая, и
возвращает Ложь, если строка содержит символы.
Как Вы уже поняли из предыдущих примеров, пустую строку можно задать, написав
сдвоенные кавычки : "", пробела между ними быть не должно.
Сделайте следующий пример:
Рис. 1.5.45
И посмотрите, что у нас получается.
Резюме
Мы рассмотрели все нужные функции для работы со строками. Практика показывает,
что знание этих функций позволит Вам решить большинство задач со строками, которые
возникают при работе с программами 1С.