База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как извлечь номер устройства и сумму из строки в формате 1С? › Ответ в теме: Как извлечь номер устройства и сумму из строки в формате 1С?
7 мая 2026 в 13:01
#37008
Вот пример процедуры на 1С, которая из строки формата
«Итого по устройству: SHJ49028 Сумма: 14,706.42 BYN»
выделит номер устройства и сумму (число с десятичной точкой, без пробелов и валюты):
1С (Код)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Процедура РазобратьСтроку(ИсходнаяСтрока, ИмяУстройства, Сумма) // ИсходнаяСтрока - входная строка // ИмяУстройства - выходной параметр, строка // Сумма - выходной параметр, число // Найдём позицию номера устройства ПозицияУстройства = Найти(ИсходнаяСтрока, "Итого по устройству: ") + СтрДлина("Итого по устройству: "); Если ПозицияУстройства = 0 Тогда ИмяУстройства = ""; Сумма = 0; Возврат; КонецЕсли; // Отрезаем часть строки после "Итого по устройству: " Остаток = Сред(ИсходнаяСтрока, ПозицияУстройства + 1); // Номер устройства — до первого пробела ПозицияПробела = Найти(Остаток, " "); Если ПозицияПробела = 0 Тогда ИмяУстройства = ""; Сумма = 0; Возврат; КонецЕсли; ИмяУстройства = Лев(Остаток, ПозицияПробела - 1); // Теперь ищем сумму — после "Сумма: " ПозицияСуммы = Найти(ИсходнаяСтрока, "Сумма: "); Если ПозицияСуммы = 0 Тогда Сумма = 0; Возврат; КонецЕсли; ОстатокСуммы = Сред(ИсходнаяСтрока, ПозицияСуммы + СтрДлина("Сумма: ") + 1); // Сумма — до пробела перед валютой ПозицияПробелаВалюты = Найти(ОстатокСуммы, " "); Если ПозицияПробелаВалюты = 0 Тогда СтрокаСуммы = ОстатокСуммы; Иначе СтрокаСуммы = Лев(ОстатокСуммы, ПозицияПробелаВалюты - 1); КонецЕсли; // Убираем запятые из суммы (разделитель тысяч) СтрокаСуммы = СтрЗаменить(СтрокаСуммы, ",", ""); // Преобразуем в число Сумма = Число(СтрокаСуммы); КонецПроцедуры |
Пример вызова:
1С (Код)
|
1 2 3 4 5 6 7 8 |
Исходная = "Итого по устройству: SHJ49028 Сумма: 14,706.42 BYN"; ИмяУстройства = ""; Сумма = 0; РазобратьСтроку(Исходная, ИмяУстройства, Сумма); Сообщить("Устройство: " + ИмяУстройства); Сообщить("Сумма: " + Формат(Сумма, "ЧГ=0; ЧД=2")); |
В результате:
Устройство: SHJ49028
Сумма: 14706.42
Если формат строки всегда одинаковый, этот код будет работать корректно.