Удаление пробелов в строке 1с. Убираем неразрывные пробелы

Строки в 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 Цикл Массив[Сч] = Строка(Массив[Сч]); КонецЦикла; Строка = СтрСоединить(Массив, "; ");

FAQ или платформа 8 для чайников.

Судя по форумам, посвященным тематике 1С, у программистов впервые столкнувшихся с платформой 1С v 8 или переходящих с 7.7, часто возникают одни и те же вопросы. Здесь я решил собрать наиболее часто встречающиеся, на мой взгляд…

В: Как убрать пробел в числе 12 600,00?
О: Важно понимать, что здесь используется не символ пробела, а так называемый, «неразрывный пробел», поэтому такая, к примеру, конструкция:

СтрЗаменить(ПеременнаяЧисло," ","");

работать не будет. Есть два варианта решения проблемы, либо указать для замены вместо пробела Символы.НПП, либо используя функцию Формат().

СтрЗаменить(ПеременнаяЧисло,Символы.НПП,""); // 1-й вариант
Формат(ПеременнаяЧисло,"ЧГ="); // 2-й вариант

В: Как в запросе задать условие таким образом, что бы в результирующую выборку попали документы только определенного вида?
О: Это можно сделать с помощью оператора языка запросов ССЫЛКА, который позволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу, указанную справа. Рассмотрим на примере, выберем из регистра накопления РеализацияУслуг только те записи, для которых регистратором является документ РеализацияТоваровУслуг:

Запрос=Новый Запрос("
|ВЫБРАТЬ
| РеализацияУслуг.Регистратор,
| РеализацияУслуг.Сумма
|ИЗ
| РегистрНакопления.РеализацияУслуг КАК РеализацияУслуг
|ГДЕ
| Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг");

В: Как перенести определенные документы/справочники между идентичными конфигурациями?
О: Это можно сделать с помощью типовой обработки ВыгрузкаЗагрузкаДанныхXML.epf, поставляемой на дисках ИТС.

В: Как перенести данные между различными конфигурациями (или из 7.7 в 8)?
О: Оптимальным вариантом, на мой взгляд, является использование типовой конфигурации «Конвертация данных», которая поставляется на дисках ИТС, там же находятся несколько статей с описанием использования этой конфигурации.

В: Как в запросе добавить к полю не строкового типа определенную строку, например ВЫБРАТЬ РеализацияТоваровУслуг.Сумма + " руб."?
О: Никак. В запросе преобразование типов невозможно. Некоторых вводит в заблуждение конструкция языка запросов ВЫРАЗИТЬ, но она только приводит значение составного типа к одному из составляющих это значение типов и, ни в коем случае не преобразует тип, поэтому в данной ситуации не применима.

В: Как в запросе задать условие по полю с типом строка неограниченной длины, например, выбрать все документы с определенным комментарием?
О: Для этого необходимо ограничить длину поля с помощью оператора языка запросов ВЫРАЗИТЬ. Например:

Запрос=Новый Запрос("
|ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| ВЫРАЗИТЬ(РеализацияТоваровУслуг.Комментарий КАК СТРОКА(100)) = &Комментарий");

В: Есть ли аналог функции 7.7 КаталогИБ() в v 8?
О: Нет, так как такая функция не имела бы смысла для клиент-серверного режима работы. Тем не менее, для файлового режима работы можно получить каталог информационной базы с помощью следующей конструкции:

КаталогИБ=НСтр(СтрокаСоединенияИнформационнойБазы(),"File");

В: Как отключить узел от распределенной информационной базы?
О: С помощью следующей конструкции:

ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

Или запустить конфигуратор с параметром командной строки /ResetMasterNode (для базовых версий не используется).

В: Как получить имя документа (аналог метода 7.7 Вид())?
О: С помощью метаданных. Например:

В: Как одним запросом выбрать документы всех видов?
О: Используя метаданные и возможность объединения запросоВ:

Запрос=Новый Запрос;
Текст="";
Для Каждого Документ Из Метаданные.Документы Цикл
Текст=Текст+"ВЫБРАТЬ Ссылка ИЗ Документ."+Документ.Имя+" ОБЪЕДИНИТЬ ";
КонецЦикла;
Запрос.Текст=Лев(Текст,СтрДлина(Текст)-СтрДлина(" ОБЪЕДИНИТЬ "));
Выборка=Запрос.Выполнить().Выбрать();

В: Как прервать выполнение отчета/обработки?
О: С помощью оператора ОбработкаПрерыванияПользователя(), рекомендуется использовать внутри циклов. При нажатии пользователем комбинации клавиш Ctrl+Break, происходит прерывание выполнения и выдается соответствующее сообщение. Например:

Пока Выборка.Следующий() Цикл
ОбработкаПрерыванияПользователя();

КонецЦикла;

В: На форме имеется ТабличноеПоле с типом ДеревоЗначений и установленным свойством Дерево. Почему не отображается ДеревоЗначений?
О: Необходимо кроме этого, для одной из колонок установить свойство ОтображатьИерархию.

В: Как использовать регламентные задания в файловом режиме работы информационной базы?
О: В отличие от клиент-серверного, в файловом режиме, ответственность за реализацию автоматического запуска регламентных заданий возлагается на разработчика. Что бы реализовать автозапуск заданий, нужен ОбработчикОжидания периодически проверяющий «просроченные» задания и запускающий их. Настоятельно рекомендуется использовать для этого отдельный сеанс. Пример:

Процедура ПроверкаЗаданий()
ВыполнитьОбработкуЗаданий();
КонецПроцедуры
ПодключитьОбработчикОжидания("ПроверкаЗаданий",3);

В: Как из строки с разделителями получить массив?
О: В качестве примера, приведу свой вариант функции, которая работает «в обоих направлениях», т.е. при передаче строки с разделителями – формирует массив, а при передаче массива – формирует из него строку с разделителями.

Функция СтрокаМассив(Знач Значение,Разделитель)
Если ТипЗнч(Значение)=Тип("Строка") Тогда
МнСтр=СтрЗаменить(Значение,Разделитель,Символы.ПС);
Массив=Новый Массив;
Для н=1 По СтрЧислоСтрок(МнСтр) Цикл
Массив.Добавить(СтрПолучитьСтроку(МнСтр,н));
КонецЦикла;
Возврат Массив;
ИначеЕсли ТипЗнч(Значение)=Тип("Массив") Тогда
Строка="";
Для Каждого Элемент Из Значение Цикл
Строка=Строка+?(Строка"",Разделитель,"")+Элемент;
КонецЦикла;
Возврат Строка;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции

В: Как включить возможность внесения изменений в конфигураторе в типовой конфигурации?
О: Так как типовые конфигурации находятся на поддержке (что позволяет в автоматическом режиме производить обновление), то по умолчанию, возможность внесения изменений в конфигурацию выключена. Чтобы включить эту возможность необходимо в конфигураторе выбрать пункт меню «Конфигурация > Поддержка > Настройка поддержки» и в открывшемся окне нажать кнопку «Включить возможность изменений».

В: Как установить пароль на обработку/конфигурацию?
О: В 1С v 8 пароли можно устанавливать только на модули объектов. Что бы установить пароль необходимо открыть модуль объекта и выбрать пункт меню «Текст > Установить пароль». Так же существует возможность поставки конфигурации без исходных текстов модулей объектов (настраивается «Конфигурация > Поставка конфигурации > Настройка поставки»). Хочется заметить, что на данный момент, ни один из этих способов не является надежной защитой от просмотра исходного текста модуля.

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

В: В 1С 8.1 при необходимости подключиться к уже запущенному приложению для отладки (Конфигуратор > Отладка > Подключение) в доступных предметах отладки пусто. В чем причина?
О: Дело в том, что для приложения, которое собираемся отлаживать, нужно явным образом разрешить отладку. Меню Сервис > Параметры > закладка Системные > флаг «Отладка разрешена».

В: Как организовать перебор строк динамического списка (например, СправочникСписок или ДокументСписок)?
О: Это можно сделать с помощью построителя отчетов, например:

Построитель=Новый ПостроительОтчета;
Построитель.ИсточникДанных=Новый ОписаниеИсточникаДанных(ДокументСписок);
Выборка=Построитель.Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка);
КонецЦикла;

Замечание: в выборку попадут строки в соответствии с установленным в текущий момент отбором.

В: Как проверить значения свойств объектов метаданных? Например, вид иерархии справочника или режим записи регистра, или периодичность номера документа?
О: Все эти свойства являются перечислимыми свойствами объектов метаданных. Получить значения такого типа, можно так же через метаданные. Примеры:

// Пример 1. ВидИерархии справочника
Если Метаданные.Справочники[ИмяСправочника].ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда...
// Пример 2. РежимЗаписиРегистра
Если Метаданные.РегистрыСведений[ИмяРегистра].РежимЗаписиРегистра = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда...
// Пример 3. Переодичность номера документа
Если Метаданные.Документы[ИмяДокумента].ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Непериодический Тогда...

В: Как реализовать в дереве значений флажок с тремя состояниями?
О: Рассмотрим более подробно постановку задачи. На форме имеется табличное поле, источником данных для которого является дерево значений. В одной из колонок расположен элемент управления «Флажок». Необходимо что бы он мог принимать три состояния «Включен», «Выключен» и «Неопределено». При этом состояние «Неопределено» или так называемый «серый флажок», т.е. выбранный частично, устанавливается в том случае, если не у всех подчиненных строк состояние флажка одинаковое. Так же если строка имеет подчиненные строки, то при изменении её флажка, соответствующим образом должны изменяться флажки и всех подчиненных строк.
Во-первых, добавим нашу колонку с флажком в дерево значений:

Дерево.Колонки.Добавить("Пометка",Новый ОписаниеТипов("Число"));
ЭлементыФормы.Дерево.СоздатьКолонки();
КолонкиДерева=ЭлементыФормы.Дерево.Колонки;
КолонкиДерева.Пометка.ДанныеФлажка="Пометка";
КолонкиДерева.Пометка.УстановитьЭлементУправления(Тип("Флажок"));
КолонкиДерева.Пометка.РежимРедактирования=РежимРедактированияКолонки.Непосредств
енно;
КолонкиДерева.Пометка.ТриСостоянияФлажка=Истина;

Во-вторых, при изменении флажка нужно устанавливать соответствующие значения в подчиненных строках и контролировать значение флажка в «строке-родителе»:

Процедура ДеревоПриИзмененииФлажка(Элемент, Колонка)
ТекущаяСтрока=Элемент.ТекущаяСтрока;
Если ТекущаяСтрока.Пометка=2 Тогда
ТекущаяСтрока.Пометка=0;
КонецЕсли;
УстановкаФлажков(ТекущаяСтрока,ТекущаяСтрока.Пометка);
Пока ТекущаяСтрока.РодительНеопределено Цикл
ТекущаяСтрока.Родитель.Пометка=?(УстановленноДляВсех(ТекущаяСтрока),ТекущаяСтрока.Пометка,2);
ТекущаяСтрока=ТекущаяСтрока.Родитель;
КонецЦикла;
КонецПроцедуры

Здесь процедура УстановкаФлажков() рекурсивно устанавливает флажки в подчиненных строках:

Процедура УстановкаФлажков(ТекущаяСтрока,Значение)
Для Каждого Стр Из ТекущаяСтрока.Строки Цикл
Стр.Пометка=Значение;
УстановкаФлажков(Стр,Стр.Пометка);
КонецЦикла;
КонецПроцедуры

А функция УстановленноДляВсех() проверяет установлено ли одинаковое значение для всех строк на текущем уровне:

Функция УстановленноДляВсех(Строка)
Для Каждого Стр Из Строка.Родитель.Строки Цикл
Если Стр.ПометкаСтрока.Пометка Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции

В: Как в форме списка реализовать сортировку по своему реквизиту?
О: Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа, то необходимо явно разрешить для него доступность сортировки. Например:

ЭлементУП=ЭлементыФормы.СправочникСписок.НастройкаПорядка.Найти("Реквизит1");
Если ЭлементУПНеопределено Тогда
ЭлементУП.Доступность=Истина;
КонецЕсли;

Часто бывает, что при загрузке и выгрузке из 1С 8.2 и 8.3 данных в числах встречаются пробелы, которые мешают нормально обрабатывать данные. Решение этой проблемы очень простое.

Рассмотрим, какие бывают виды пробелов.

Пробелы могут быть двух видов:

  • неразрывный пробел;
  • «обычный» пробел.

Убираем неразрывные пробелы

СтроковоеПредставление = Строка(Число); // система запишет в переменную «10 000»

Удалить такие пробелы в 1С очень просто через функцию формат числа:

Число = Формат(10000, «ЧГ=»);

СтроковоеПредставление = Строка(Число); // система запишет в переменную «10000»

Мы установили группировку в форматной строке Пустое значение (можно записать и «0»).

Если тип данных уже «строка», тогда можно использовать следующий способ:

СтроковоеПредставление = СтрЗаменить(Строка(СтроковоеПредставление), Символы.НПП, «»); // в переменной СтроковоеПредставление было «10 000», стало «10000»

То есть мы просто заменили неразрывный пробел (Символы.НПП) в строке на пустое значение.

Обычные пробелы

Убрать обычный пробел в строке проще простого. Достаточно выполнить следующую функцию:

СтроковоеПредставление = СтрЗаменить(Строка(СтроковоеПредставление), » «, «»); // «10 000», стало «10000»

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео).