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

1. byshchenko 9 26.01.25 19:41 Сейчас в теме
Добрый вечер , пишу обработку ,нужно из названия номенклатуры взять часть в моем случае 25 кг и записать в колонку вес в таблицу значений на форме
помогите советом как такое реализовать ????
В таблице значений две колонки --- номенклатура и вес
Колонку номенклатура заполнил запросом,выбрав в справочнике номенклатуру у которой в названии есть кг
Теперь хочу записать число(кг) в название номенклатуры в колонку вес ,а после с колонки вес заполнить значение в справочник номенклатура -единицы измерения -вес
Может как то проще можно такое реализовать ?
По теме из базы знаний
Найденные решения
9. byshchenko 9 30.01.25 02:27 Сейчас в теме
Вот решение моей задачи может кому поможет

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

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

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

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

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

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

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

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

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

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

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

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

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

    Сообщить("Вес успешно обновлен: " + ТекущаяСтрока.Вес);    
		
	КонецЦикла;
	
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. miniogn 44 26.01.25 21:00 Сейчас в теме
После заполнения колонки с номенклатурой, в цикле пробегись по таблице и из номенклатуры получи число и это число запиши в соседнюю ячейку.
Затем, в цикле пробегись по таблице и по номенклатуре (она же надеюсь имеет тип ссылка?) получи объект справочника и присвой в него цену. И выполни запись объекта.
3. byshchenko 9 26.01.25 23:29 Сейчас в теме
(2) Спасибо ,буду пробовать.
4. Tommy82 65 27.01.25 13:22 Сейчас в теме
https://infostart.ru/1c/articles/1760453/

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

Выбрать
Выбор когда стрнайти(&НекаяСтрока, "25 кг") > 0 Тогда
 	&НекаяСтрока
 иначе
 	"нет"
 конец как вес
5. starjevschik 27.01.25 14:07 Сейчас в теме
(4) ага, и так на каждое рациональное число, их немного, всего небольшая бесконечность ))))
6. Tommy82 65 27.01.25 14:18 Сейчас в теме
(5) насколько я понял у автора "25 кг" как основа, нет отличных от "25 кг"
7. antz 27.01.25 14:24 Сейчас в теме
СтрНайтиПоРегулярномуВыражению(Наименование, "\d+ кг")
8. lmnlmn 69 27.01.25 16:01 Сейчас в теме
(7) Позволю себе, с учетом культуры ввода данных, усовершенствовать регулярку
СтрНайтиПоРегулярномуВыражению(Наименование, "\d+(?=\s*кг\b)",,,,Истина)
9. byshchenko 9 30.01.25 02:27 Сейчас в теме
Вот решение моей задачи может кому поможет

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

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

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

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

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

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

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

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

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

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

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

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

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

    Сообщить("Вес успешно обновлен: " + ТекущаяСтрока.Вес);    
		
	КонецЦикла;
	
Показать
10. lmnlmn 69 30.01.25 09:32 Сейчас в теме
(9)Любопытно какой вес выдаст ваше решение для, к примеру, следующих номенклатур?

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


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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот