как в таблице значений заполнить колонку частью названия из наименования номенклатуры
Добрый вечер , пишу обработку ,нужно из названия номенклатуры взять часть в моем случае 25 кг и записать в колонку вес в таблицу значений на форме
помогите советом как такое реализовать ????
В таблице значений две колонки --- номенклатура и вес
Колонку номенклатура заполнил запросом,выбрав в справочнике номенклатуру у которой в названии есть кг
Теперь хочу записать число(кг) в название номенклатуры в колонку вес ,а после с колонки вес заполнить значение в справочник номенклатура -единицы измерения -вес
Может как то проще можно такое реализовать ?
помогите советом как такое реализовать ????
В таблице значений две колонки --- номенклатура и вес
Колонку номенклатура заполнил запросом,выбрав в справочнике номенклатуру у которой в названии есть кг
Теперь хочу записать число(кг) в название номенклатуры в колонку вес ,а после с колонки вес заполнить значение в справочник номенклатура -единицы измерения -вес
Может как то проще можно такое реализовать ?
По теме из базы знаний
- Всякие полезности
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки
- Как сдать экзамен 1С:Специалист по платформе?
- Доработка стандартного модуля обмена от Битрикс для выгрузки произвольных таблиц значений или запросов в Highload-блоки
Найденные решения
Вот решение моей задачи может кому поможет
// Проверяем, что поле Наименование заполнено
Если ТипЗнч(ТекущаяСтрока.Номенклатура.Наименование) <> Тип("Строка")
Или ПустаяСтрока(ТекущаяСтрока.Номенклатура.Наименование) Тогда
Сообщить("Ошибка: поле Наименование пустое или не строка");
Возврат;
КонецЕсли;
ИсходнаяСтрока = ТекущаяСтрока.Номенклатура.Наименование;
ПозицияКГ = Найти(ИсходнаяСтрока, "кг");
Если ПозицияКГ = 0 Тогда
Сообщить("Не найдено 'кг' в строке: " + ИсходнаяСтрока);
Возврат;
КонецЕсли;
// Ищем число слева от "кг"
ЧислоСтрокой = "";
Индекс = ПозицияКГ - 1;
РазделительНайден = Ложь;
Пока Индекс > 0 Цикл
Символ = Сред(ИсходнаяСтрока, Индекс, 1);
// Проверяем, является ли символ цифрой
Если Найти("0123456789", Символ) > 0 Тогда
ЧислоСтрокой = Символ + ЧислоСтрокой;
ИначеЕсли (Символ = "." Или Символ = ",") И Не РазделительНайден Тогда
// Разрешаем только одну точку или запятую в числе
ЧислоСтрокой = Символ + ЧислоСтрокой;
РазделительНайден = Истина;
ИначеЕсли Не ПустаяСтрока(ЧислоСтрокой) Тогда
Прервать;
КонецЕсли;
Индекс = Индекс - 1; // Двигаемся влево
КонецЦикла;
// Преобразуем в число только если строка корректная
Если ПустаяСтрока(ЧислоСтрокой) Тогда
Число = 0;
Иначе
Число = Число(СтрЗаменить(ЧислоСтрокой, ",", "."));
КонецЕсли;
ТекущаяСтрока.Вес = Число;
//Запись значения веса в справочник
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Вес) Тогда
Сообщить("Вес не найден, обновление не выполняется.");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
Сообщить("Номенклатура не заполнена.");
Возврат;
КонецЕсли;
// Ищем запись в справочнике "Единицы измерения" по владельцу (Номенклатуре)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка
| ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ГДЕ
| ЕдиницыИзмерения.Владелец = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("Не найдена единица измерения для номенклатуры: " + ТекущаяСтрока.Номенклатура);
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектЕдиницы = Выборка.Ссылка.ПолучитьОбъект();
ОбъектЕдиницы.Вес = ТекущаяСтрока.Вес;
ОбъектЕдиницы.Записать();
КонецЦикла;
Сообщить("Вес успешно обновлен: " + ТекущаяСтрока.Вес);
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
После заполнения колонки с номенклатурой, в цикле пробегись по таблице и из номенклатуры получи число и это число запиши в соседнюю ячейку.
Затем, в цикле пробегись по таблице и по номенклатуре (она же надеюсь имеет тип ссылка?) получи объект справочника и присвой в него цену. И выполни запись объекта.
Затем, в цикле пробегись по таблице и по номенклатуре (она же надеюсь имеет тип ссылка?) получи объект справочника и присвой в него цену. И выполни запись объекта.
если платформа свежая, тогда всё можно в одном запросе сделать
Выбрать
Выбор когда стрнайти(&НекаяСтрока, "25 кг") > 0 Тогда
&НекаяСтрока
иначе
"нет"
конец как вес
Вот решение моей задачи может кому поможет
// Проверяем, что поле Наименование заполнено
Если ТипЗнч(ТекущаяСтрока.Номенклатура.Наименование) <> Тип("Строка")
Или ПустаяСтрока(ТекущаяСтрока.Номенклатура.Наименование) Тогда
Сообщить("Ошибка: поле Наименование пустое или не строка");
Возврат;
КонецЕсли;
ИсходнаяСтрока = ТекущаяСтрока.Номенклатура.Наименование;
ПозицияКГ = Найти(ИсходнаяСтрока, "кг");
Если ПозицияКГ = 0 Тогда
Сообщить("Не найдено 'кг' в строке: " + ИсходнаяСтрока);
Возврат;
КонецЕсли;
// Ищем число слева от "кг"
ЧислоСтрокой = "";
Индекс = ПозицияКГ - 1;
РазделительНайден = Ложь;
Пока Индекс > 0 Цикл
Символ = Сред(ИсходнаяСтрока, Индекс, 1);
// Проверяем, является ли символ цифрой
Если Найти("0123456789", Символ) > 0 Тогда
ЧислоСтрокой = Символ + ЧислоСтрокой;
ИначеЕсли (Символ = "." Или Символ = ",") И Не РазделительНайден Тогда
// Разрешаем только одну точку или запятую в числе
ЧислоСтрокой = Символ + ЧислоСтрокой;
РазделительНайден = Истина;
ИначеЕсли Не ПустаяСтрока(ЧислоСтрокой) Тогда
Прервать;
КонецЕсли;
Индекс = Индекс - 1; // Двигаемся влево
КонецЦикла;
// Преобразуем в число только если строка корректная
Если ПустаяСтрока(ЧислоСтрокой) Тогда
Число = 0;
Иначе
Число = Число(СтрЗаменить(ЧислоСтрокой, ",", "."));
КонецЕсли;
ТекущаяСтрока.Вес = Число;
//Запись значения веса в справочник
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Вес) Тогда
Сообщить("Вес не найден, обновление не выполняется.");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
Сообщить("Номенклатура не заполнена.");
Возврат;
КонецЕсли;
// Ищем запись в справочнике "Единицы измерения" по владельцу (Номенклатуре)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕдиницыИзмерения.Ссылка
| ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ГДЕ
| ЕдиницыИзмерения.Владелец = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", ТекущаяСтрока.Номенклатура);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("Не найдена единица измерения для номенклатуры: " + ТекущаяСтрока.Номенклатура);
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектЕдиницы = Выборка.Ссылка.ПолучитьОбъект();
ОбъектЕдиницы.Вес = ТекущаяСтрока.Вес;
ОбъектЕдиницы.Записать();
КонецЦикла;
Сообщить("Вес успешно обновлен: " + ТекущаяСтрока.Вес);
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот