Добрый вечер , пишу обработку ,нужно из названия номенклатуры взять часть в моем случае 25 кг и записать в колонку вес в таблицу значений на форме
помогите советом как такое реализовать ????
В таблице значений две колонки --- номенклатура и вес
Колонку номенклатура заполнил запросом,выбрав в справочнике номенклатуру у которой в названии есть кг
Теперь хочу записать число(кг) в название номенклатуры в колонку вес ,а после с колонки вес заполнить значение в справочник номенклатура -единицы измерения -вес
Может как то проще можно такое реализовать ?
---
Вот решение моей задачи может кому поможет

```1c
    // Проверяем, что поле Наименование заполнено
    Если ТипЗнч(ТекущаяСтрока.Номенклатура.Наименование) <> Тип("Строка")
    Или ПустаяСтрока(ТекущаяСтрока.Номенклатура.Наименование) Тогда
    Сообщить("Ошибка: поле Наименование пустое или не строка");
    Возврат;
    КонецЕсли;

    ИсходнаяСтрока = ТекущаяСтрока.Номенклатура.Наименование;
    ПозицияКГ = Найти(ИсходнаяСтрока, "кг");

    Если ПозицияКГ = 0 Тогда
    Сообщить("Не найдено 'кг' в строке: " + ИсходнаяСтрока);
    Возврат;
    КонецЕсли;

    // Ищем число слева от "кг"
    ЧислоСтрокой = ";
    Индекс = ПозицияКГ - 1;
    РазделительНайден = Ложь;

    Пока Индекс > 0 Цикл
    Символ = Сред(ИсходнаяСтрока, Индекс, 1);

    // Проверяем, является ли символ цифрой
    Если Найти("0123456789", Символ) > 0 Тогда
    ЧислоСтрокой = Символ + ЧислоСтрокой;
    ИначеЕсли (Символ = "." Или Символ = ",") И Не РазделительНайден Тогда
    // Разрешаем только одну точку или запятую в числе
    ЧислоСтрокой = Символ + ЧислоСтрокой;
    РазделительНайден = Истина;
    ИначеЕсли Не ПустаяСтрока(ЧислоСтрокой) Тогда
    Прервать;
    КонецЕсли;

    Индекс = Индекс - 1; // Двигаемся влево
    КонецЦикла;

    // Преобразуем в число только если строка корректная
    Если ПустаяСтрока(ЧислоСтрокой) Тогда
    Число = 0;
    Иначе
    Число = Число(СтрЗаменить(ЧислоСтрокой, ",", "."));
    КонецЕсли;
    ТекущаяСтрока.Вес = Число;

    //Запись значения веса в справочник
    Если Не ЗначениеЗаполнено(ТекущаяСтрока.Вес) Тогда
    Сообщить("Вес не найден, обновление не выполняется.");
    Возврат;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
    Сообщить("Номенклатура не заполнена.");
    Возврат;
    КонецЕсли;

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

    Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    Сообщить("Не найдена единица измерения для номенклатуры: " + ТекущаяСтрока.Номенклатура);
    Возврат;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    ОбъектЕдиницы = Выборка.Ссылка.ПолучитьОбъект();
    ОбъектЕдиницы.Вес = ТекущаяСтрока.Вес;
    ОбъектЕдиницы.Записать();
    КонецЦикла;

    Сообщить("Вес успешно обновлен: " + ТекущаяСтрока.Вес);

    КонецЦикла;
```
---
После заполнения колонки с номенклатурой, в цикле пробегись по таблице и из номенклатуры получи число и это число запиши в соседнюю ячейку.
Затем, в цикле пробегись по таблице и по номенклатуре (она же надеюсь имеет тип ссылка?) получи объект справочника и присвой в него цену. И выполни запись объекта.
---
Спасибо ,буду пробовать.
---
https://infostart.ru/1c/articles/1760453/

если платформа свежая, тогда всё можно в одном запросе сделать

```1c
    Выбрать
    Выбор когда стрнайти(&НекаяСтрока, "25 кг") > 0 Тогда
    &НекаяСтрока
    иначе
    "нет"
    конец как вес
```
---
ага, и так на каждое рациональное число, их немного, всего небольшая бесконечность ))))
---
насколько я понял у автора "25 кг" как основа, нет отличных от "25 кг"
---
```1c
    СтрНайтиПоРегулярномуВыражению(Наименование, "\d+ кг")
```
---
Позволю себе, с учетом культуры ввода данных, усовершенствовать регулярку
```1c
    СтрНайтиПоРегулярномуВыражению(Наименование, "\d+(?=\s*кг\b)",,,,Истина)
```
---
Вот решение моей задачи может кому поможет

```1c
    // Проверяем, что поле Наименование заполнено
    Если ТипЗнч(ТекущаяСтрока.Номенклатура.Наименование) <> Тип("Строка")
    Или ПустаяСтрока(ТекущаяСтрока.Номенклатура.Наименование) Тогда
    Сообщить("Ошибка: поле Наименование пустое или не строка");
    Возврат;
    КонецЕсли;

    ИсходнаяСтрока = ТекущаяСтрока.Номенклатура.Наименование;
    ПозицияКГ = Найти(ИсходнаяСтрока, "кг");

    Если ПозицияКГ = 0 Тогда
    Сообщить("Не найдено 'кг' в строке: " + ИсходнаяСтрока);
    Возврат;
    КонецЕсли;

    // Ищем число слева от "кг"
    ЧислоСтрокой = ";
    Индекс = ПозицияКГ - 1;
    РазделительНайден = Ложь;

    Пока Индекс > 0 Цикл
    Символ = Сред(ИсходнаяСтрока, Индекс, 1);

    // Проверяем, является ли символ цифрой
    Если Найти("0123456789", Символ) > 0 Тогда
    ЧислоСтрокой = Символ + ЧислоСтрокой;
    ИначеЕсли (Символ = "." Или Символ = ",") И Не РазделительНайден Тогда
    // Разрешаем только одну точку или запятую в числе
    ЧислоСтрокой = Символ + ЧислоСтрокой;
    РазделительНайден = Истина;
    ИначеЕсли Не ПустаяСтрока(ЧислоСтрокой) Тогда
    Прервать;
    КонецЕсли;

    Индекс = Индекс - 1; // Двигаемся влево
    КонецЦикла;

    // Преобразуем в число только если строка корректная
    Если ПустаяСтрока(ЧислоСтрокой) Тогда
    Число = 0;
    Иначе
    Число = Число(СтрЗаменить(ЧислоСтрокой, ",", "."));
    КонецЕсли;
    ТекущаяСтрока.Вес = Число;

    //Запись значения веса в справочник
    Если Не ЗначениеЗаполнено(ТекущаяСтрока.Вес) Тогда
    Сообщить("Вес не найден, обновление не выполняется.");
    Возврат;
    КонецЕсли;

    Если Не ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
    Сообщить("Номенклатура не заполнена.");
    Возврат;
    КонецЕсли;

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

    Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
    Сообщить("Не найдена единица измерения для номенклатуры: " + ТекущаяСтрока.Номенклатура);
    Возврат;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    ОбъектЕдиницы = Выборка.Ссылка.ПолучитьОбъект();
    ОбъектЕдиницы.Вес = ТекущаяСтрока.Вес;
    ОбъектЕдиницы.Записать();
    КонецЦикла;

    Сообщить("Вес успешно обновлен: " + ТекущаяСтрока.Вес);

    КонецЦикла;
```
---
Любопытно какой вес выдаст ваше решение для, к примеру, следующих номенклатур?

Набор 3 пачки семян гинкго билоба, 0,05 кг.
Финка №3 КГБ СССР, 0.2 кг
---
Сообщить("Не найдена единица измерения для номенклатуры: " + ТекущаяСтрока.Номенклатура);

Может тогда добавить строку с нужным типом цены