БП. Корп 8.3.
В конторе сложилась практика вносить перед ФИО номер лицевого счета.
Необходимо одноразово перенести данные цифры в комментарий.
Если комментарий не пустой - не переносить.

```1c
    Процедура ЛСчВКомментарий () //Функция СтрНайти() ?
    "ВЫБРАТЬ
    | Контрагенты.Наименование КАК Наименование,
    | Контрагенты.Комментарий КАК Комментарий,
    | ПОДСТРОКА (Справочник.Контрагенты.Наименование, 1, 10) КАК Подстрока
    |ИЗ
    | Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    | Комментарий NOT NULL" // ЕСТЬ NULL

    ЛСчВНаименовании = "0123456789"; //содержит

    Если Подстрока = ЛСчВНаименовании Тогда
    Объект.Комментарий = Подстрока;

    КонецЕсли;
    КонецПроцедуры
```

Извините, у меня проблемы с логикой.
---
```1c
    ПервыеДесятьСимволовНаименования = Лев(Наименование, 10);
    ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Ложь;

    Попытка
    а = Число(ПервыеДесятьСимволовНаименования);
    ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Истина;
    Исключение
    //не удалось выполнить преобразование к числу
    КонецПопытки

    Если ПервыеДесятьСимволовНаименованияЯвляютсяЧислом Тогда
    Комментарий = ПервыеДесятьСимволовНаименования;
    НовоеНаименование = Сред(Наименование, 11);
    КонецЕсли;
```
---
Вместо вашего кода

```1c
    Первые10 = Лев(Наименование,10);
    Если СтрДлина(Первые10) = 10
    И СтрРазделить(Первые10,"0123456789",Ложь).Количество() = 0 Тогда
    //значит первые 10 символов содержат только цифры.
    КонецЕсли;
```
---
Что бы начать программировать нужно учиться. Здесь у вас какие-то куски несвязанного и нерабочего кода.
---
Да, я и учусь. Пробую обойтись без запроса:

```1c
    Процедура ЛСчВКомментарий (Справочник.Контрагент)

    ЛСчВНаименовании = "0123456789"; //так можно объявить массив цифр?

    Если Найти(Контрагент.Наименование, ЛСчВНаименовании) = 0 Тогда
    Справочник.Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
    Иначе
    Справочник.Контрагент.Комментарий = Лев(Удалить(Контрагент.Наименование, ЛСчВНаименовании), 10)
    КонецЕсли;
    КонецПроцедуры
```
---
Пробую у простить, но даже вот такая штука не работает на первом шаге.
1 шаг. Добавить ФИО в комментарий

```1c
    Процедура ЛицСчВКомментарий ()
    Если Найти(Контрагент.Наименование, []) = 1 Тогда //как обратиться к полю Наименование? (пишет, что переменная не определена)
    Контрагент.Комментарий = [];
    КонецЕсли;
    КонецПроцедуры
```

2 шаг. Добавить первые 10 символов (лицевой счет) в комментарий

```1c
    Процедура ЛицСчВКомментарий (Контрагент)
    Если Найти(Контрагент.Наименование, []) = 1 Тогда
    Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
    КонецЕсли;
    КонецПроцедуры
```

3 шаг. Добавить первые 10 символов, если это цифры в комментарий

```1c
    Процедура ЛицСчВКомментарий (Контрагент)
    МассивВсехЦифр = СоздатьМассивЦифр(); //обращение к массиву
    Если Найти(Контрагент.Наименование, МассивВсехЦифр) = 0 Тогда
    Контрагент.Комментарий = Лев(Контрагент.Наименование, 10) //лицевой счет 10 знаков
    КонецЕсли;
    КонецПроцедуры
```

```1c
    Функция СоздатьМассивЦифр() //так можно создать массив цифр?
    МассивЦифр = Новый Массив;
    Для Цифра = 0 По 9 Цикл
    МассивЦифр.Добавить(Цифра);
    КонецЦикла;
    Возврат МассивЦифр;
    КонецФункции
```

4 шаг. Добавить первые 10 символов, если это цифры в комментарий, если он пустой.
// думаю, здесь без запроса не обойтись
---
По многочисленным просьбам разработчиков, использующих наши технологии, в версии 8.3.23 реализована возможность использования регулярных выражений во встроенном языке. Используются регулярные выражения стандарта ICU.
---
Чтобы у ТС стало на одну проблему больше)))
Some people, when confronted with a problem, think
“I know, I'll use regular expressions.” Now they have two problems.
---
Чтобы
---
Целевая аудитория инфостарта. Наглядно.
---
Может он и не программист, а обработки качает, но решил подучиться? Наоборот же круто
---
```1c
    ПервыеДесятьСимволовНаименования = Лев(Наименование, 10);
    ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Ложь;

    Попытка
    а = Число(ПервыеДесятьСимволовНаименования);
    ПервыеДесятьСимволовНаименованияЯвляютсяЧислом = Истина;
    Исключение
    //не удалось выполнить преобразование к числу
    КонецПопытки

    Если ПервыеДесятьСимволовНаименованияЯвляютсяЧислом Тогда
    Комментарий = ПервыеДесятьСимволовНаименования;
    НовоеНаименование = Сред(Наименование, 11);
    КонецЕсли;
```
---
```1c
    ЛСчВНаименовании = "0123456789";
    Наименование = Контрагент.Наименование
    МассивЗначений = СтрРазделить(Наименование, " ");
    НачальноеЗначение = ?(МассивЗначений.Количество() > 0, МассивЗначений[0], Неопределено);
    Если Не НачальноеЗначение = Неопределено Тогда
    КоличествоСимволов = СтрДлина(НачальноеЗначение);
    НайденноеЗначение = ";
    Для i = 1 По КоличествоСимволов Цикл
    ИскомыйСимвол = Сред(НачальноеЗначение, i, 1);
    Если Найти(ЛСчВНаименовании, ИскомыйСимвол) Тогда
    НайденноеЗначение = НайденноеЗначение + ИскомыйСимвол;
    КонецЕсли;
    КонецЦикла;
    Если СтрДлина(НайденноеЗначение) = 10 Тогда
    НовоеНаименование = СокрЛП(СтрЗаменить(Наименование, НайденноеЗначение, "));
    КонецЕсли;
    КонецЕсли;
    Если Не ПустаяСтрока(НовоеНаименование) Тогда
    КонтрагентОбъект = Контрагент.ПолучитьОбъект();
    КонтрагентОбъект.Наименование = НовоеНаименование;
    КонтрагентОбъект.Комментарий = НайденноеЗначение;
    КонтрагентОбъект.Записать();
    КонецЕсли;
```
---
Вместо вашего кода

```1c
    Первые10 = Лев(Наименование,10);
    Если СтрДлина(Первые10) = 10
    И СтрРазделить(Первые10,"0123456789",Ложь).Количество() = 0 Тогда
    //значит первые 10 символов содержат только цифры.
    КонецЕсли;
```
---
Вместо вашего кода

```1c
    ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка,
    СОКРЛП(ПОДСТРОКА(Контрагенты.Наименование, 11, 10000)) КАК НовоеНаименование,
    ПОДСТРОКА(Контрагенты.Наименование, 1, 10) КАК НовыйКомментарий
    ИЗ
    Справочник.Контрагент КАК Контрагенты
    ГДЕ
    Контрагенты.Наименование ПОДОБНО "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%"
    И Контрагент.Комментарий= "
```
---
Забавно.
Особенно наименование в 10000 символов.
---
Лень править. Кому надо, тот поймет
---
Да, но Контрагент.Комментарий = "" вызовет ошибку сравнения поля неограниченной длинны с несовместимым типом.
Нужно так: Выразить(Контрагент.Комментарий КАК Строка(1)) = ""
---
Решено. Внесение лицевого счета в комментарий осуществлено через штатную обработку ГруповоеИзменениеРеквизитов (Администрирование > Обслуживание > Корректировка данных), настроил так:
- Ввести новые значения – открыжены все, связанные с Контрагентами поля.
- Выполнить произвольный алгоритм:

```1c
    ПервыеДесятьСимволовНаименования = Лев(Объект.Наименование, 10);
    Если СтрДлина(ПервыеДесятьСимволовНаименования) = 10
    И СтрРазделить(ПервыеДесятьСимволовНаименования,"0123456789",Ложь).Количество() = 0 Тогда
    Объект.Комментарий = ПервыеДесятьСимволовНаименования;
    Объект.Наименование = СокрЛ(Сред(Объект.Наименование, 11)); //удалить лицевой счет из наименования
    Объект.НаименованиеПолное = СокрЛ(Сред(Объект.НаименованиеПолное, 11)); //удалить лицевой счет из полного наименования
    КонецЕсли;
```

- Выбор элементов для изменения: Отбор по Юридическое/физическое лицо = Физическое лицо,
Дата создания по Больше/Меньше.
Спасибо Sashares, GeraltSnow, user1880116 за весёлый запрос и RustamZz за регулярные выражения, но пока не освоил:

```1c
    СтрНайтиПоРегулярномуВыражению(Объект.Наименование, "[0-9]{10}");
```